About opplevagent-mcp
opplevagent-mcp is an MCP server for finding Norwegian experiences and activities, suited to people planning outings or trips. It searches curated, Brreg-verified listings by location and practical conditions, and can submit pending booking requests for farm-sale producers.
Key features
- 01Search experiences by county and category
- 02Filter by weather, season and indoor or outdoor
- 03Filter by group size, age, price and duration
- 04Retrieve full details for an experience
- 05Search farm-sale drink producers
- 06Submit pending producer booking requests
Use cases
- 01Find winter activities in Troms
- 02Choose outdoor activities in Oslo for a group
- 03Find family activities within a price limit
- 04Request a visit with a farm-sale producer
MCP support
Exposes experience discovery, category listing, detail lookup, producer search and booking tools to MCP clients. It bridges stdio clients to a live remote MCP service and also supports remote Streamable HTTP connections.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://opplevagent.no/mcpclaude mcp add --transport http slookisen-opplevagent https://opplevagent.no/mcp{"mcpServers":{"slookisen-opplevagent":{"type":"http","url":"https://opplevagent.no/mcp"}}}Open in Cursor{"servers":{"slookisen-opplevagent":{"type":"http","url":"https://opplevagent.no/mcp"}}}Open in VS Code{"mcpServers":{"slookisen-opplevagent":{"type":"http","url":"https://opplevagent.no/mcp"}}}{"mcpServers":{"slookisen-opplevagent":{"serverUrl":"https://opplevagent.no/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
5| Parameter | Type | Required | Description |
|---|---|---|---|
| age | integer | No | Age of the youngest participant. Filters out experiences with a minimum-age requirement above this. Example: 8 |
| lat | number | No | Origin latitude for a near-me search (decimal degrees). Must be given together with lng. Example: 69.65 (Tromsø) |
| lng | number | No | Origin longitude for a near-me search (decimal degrees). Must be given together with lat. Example: 18.95 (Tromsø) |
| sort | enum | No | 'distance' — sort results ascending by distance from lat/lng. Already the default whenever lat/lng are given; this makes the request explicit.distance |
| fylke | string | No | Norwegian county (fylke). Examples: 'Oslo', 'Vestland', 'Troms', 'Rogaland' |
| limit | number | No | Max results (default 20, max 50) |
| query | string | No | The user's request in a few words, including any place they named — e.g. 'safari lodge in Kenya', 'northern lights in Tromsø'. Opplevagent only covers Norway: when this names a place outside Norway and no Norwegian fylke/kommune or coordinates are given, the tool returns no experiences and says so. Include the purchase intent too: buying stockfish is food retail, not an experience search. |
| season | string | No | Season filter: 'summer', 'winter', 'spring' or 'autumn' (the Norwegian words sommer/vinter/vår/høst work too). Year-round experiences are always included. Use this (not category or weather) when the user asks what to do in a season, e.g. 'Troms om vinteren' → fylke='Troms', season='winter'. |
| kommune | string | No | Norwegian municipality (kommune). Examples: 'Tromsø', 'Bergen', 'Stavanger' |
| weather | enum | No | Today's weather, not the season: 'rain'/'snow' prefers indoor + weather-independent experiences. Examples: 'rain', 'clear'. For 'in winter' use season instead.rain | snow | clear | any |
| category | string | No | Experience category slug — one of: 'kultur_historie' (culture/history, museums), 'natur_friluft' (nature/outdoors), 'adrenalin_action', 'sightseeing_transport' (sightseeing, cruises, cable cars), 'overnatting_opplevelse' (stays), 'dyreliv_safari' (wildlife, whale/moose safaris, dog sledding), 'vinter_sno' (winter & snow), 'mat_drikke' (food & drink), 'velvaere_spa' (wellness/spa). Call list_experience_categories for live counts. Omit category for a general 'what can we do' question. 'In winter' / 'om vinteren' is a season, not a category: use season='winter' — 'vinter_sno' covers only snow activities and would hide e.g. northern-lights cruises. |
| language | string | No | Required language for the experience. Examples: 'no', 'en' |
| max_price | integer | No | Maximum price per person in Norwegian kroner (NOK). Example: 500 |
| radius_km | number | No | Max distance from lat/lng in kilometers. Only applies when lat/lng are given. Example: 50 |
| group_size | integer | No | Number of people in the group. Used to filter experiences by min/max group capacity. Example: 4 |
| duration_max | integer | No | Maximum duration in minutes. Example: 120 (2 hours) |
| indoor_outdoor | enum | No | Indoor/outdoor preference. Examples: 'indoor', 'outdoor', 'both'indoor | outdoor | both |
Details
From the project READMEopplevagent-mcp
MCP server for opplevagent.no — find Norwegian experiences and activities from Claude Desktop, ChatGPT, Cursor, and other AI assistants.
Curated, Brreg-verified experiences searchable by county, category, weather, season, group size, price, and duration.
Install
npx opplevagent-mcp
Or add to Claude Desktop config (~/.claude/claude_desktop_config.json):
{
"mcpServers": {
"opplevagent": {
"command": "npx",
"args": ["opplevagent-mcp"]
}
}
}
How it works
Since 0.4.0 the package is a thin stdio bridge to the live remote server
(https://opplevagent.no/mcp). Tools, descriptions, instructions and UI resources always
match the remote service, so the npm package and the remote never drift, and free-text
query reaches discover_experiences unchanged. Remote rate limits apply.
Remote (Streamable HTTP)
For ChatGPT and other remote MCP clients, paste this URL directly:
https://opplevagent.no/mcp
Tools
| Tool | Description |
|---|---|
discover_experiences | Search experiences by county (fylke), category, weather, season, indoor/outdoor, group size, age, price, duration |
list_experience_categories | List all categories with experience counts |
get_experience | Full details for one experience via UUID |
discover_gardssalg | Search gårdssalg (farm-sale) drink producers by county, municipality, producer type, near-me distance, booking status — or look one up by name with query. Rows carry id (the provider_id for booking) |
book_gardssalg | Submit a pending booking request to a gårdssalg producer (never confirms — the producer responds). Accepts provider_query (the producer's name) instead of provider_id, plus requested_weekday as a wrong-day guard, so one sentence («book et møte hos X fredag 20. okt kl. 10») becomes one call |
Examples
hva kan vi finne på i Troms om vinteren?
utendørsaktiviteter i Oslo for 4 personer
opplevelser som passer i regnvær i Bergen
hvalsafari Tromsø
familievennlige aktiviteter under 500 kr
hvilke typer opplevelser finnes i Norge?
book et besøk hos Fjordgard Bryggeri fredag 23. oktober kl. 10 for 4 personer
One-sentence booking (gårdssalg)
«Book et møte hos X fredag den 20. oktober klokken 10» is a single book_gardssalg call:
| Field | Value |
|---|---|
provider_query | "X" — the producer's name as the guest said it (or provider_id from discover_gardssalg) |
slot_at | "2026-10-20T10:00" (Europe/Oslo) |
requested_weekday | "fredag" — if the 20th is not a Friday the tool answers weekday_mismatch:true with the nearest Fridays instead of booking the wrong day |
party_size, guest_name, guest_email | the human guest's own details — ask for them, never invent them |
Outcomes are always honest and explicit: provider_not_found, provider_ambiguous (with candidates to put to the guest), weekday_mismatch (with suggestions), paused (the producer has not activated booking — profile link included), outside_hours (retry with confirm_outside_hours:true), or a pending request with booking_ref, the resolved provider.navn and slot_at_local. The producer is notified by email and confirms, proposes another time, or declines — the tool itself can never confirm a booking.
What the bridge sends
Besides the tool arguments of each call, the bridge identifies itself to the remote server
in two ways: the MCP clientInfo (your AI client's name and version, as
" via opplevagent-mcp") and a User-Agent header of the form opplevagent-mcp/<version>. This is
client statistics, not an identifier of you: no account, credentials or device identifier is
sent. The server keeps ordinary web-request logs (IP address and request metadata) for
operations and abuse prevention.
Booking (gårdssalg)
book_gardssalg requires no login and is rate-limited on the server. The call sends the
guest's name and e-mail address to opplevagent.no. The request stays pending until the
producer answers; the tool never confirms a booking. Your AI client should have the guest's
explicit yes before it calls the tool.
Trust boundary
The tool list, tool descriptions and server instructions are fetched from the remote
server (https://opplevagent.no/mcp) over HTTPS every time the bridge starts. This package does not pin or
freeze them, so what your AI client sees is whatever the remote service currently serves.
OPPLEVAGENT_URL overrides the remote URL, and every tool argument you or your AI client supply is
sent to that host. Only set it from a configuration you trust.
Environment
| Variable | Default | Description |
|---|---|---|
OPPLEVAGENT_URL | https://opplevagent.no | Override the remote base URL (or a full /mcp URL) |
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.