SVV-MCP-unofficial
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SVV-MCP-unofficialshow traffic messages on E6 near Oslo"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SVV-MCP-unofficial
⚠️ Unofficial project. This is a community-built MCP server and is not created, operated by, or affiliated with Statens vegvesen (SVV) in any way. "SVV" in the name only describes which data source the server uses. The data served is retrieved from Statens vegvesen's own open DATEX II endpoints, and use is subject to their terms (see License).
MCP server (Model Context Protocol) that gives an LLM access to Statens vegvesen's open real-time data via DATEX II:
🌡️ Weather measurements from the road administration's weather stations (road surface temperature, air temperature, wind, dew point), with automatic warnings about slippery road surfaces
🌦️ Weather forecasts (hour by hour, 24h ahead)
📷 Web cameras along the road network
🚗 Travel times in real time on main stretches
⚠️ Traffic messages (accidents, roadworks, closures, landslides/floods, etc.)
🔧 A built-in troubleshooting tool that shows the raw XML structure, since NPRA's schema can change
All DATEX endpoints require a registered user account with Statens vegvesen (free). Request access here →
Contents
Related MCP server: aria-mcp-trafik-dk
Get started locally
Requires Python 3.10+.
git clone https://github.com/<ditt-brukernavn>/svv-mcp-unofficial.git
cd svv-mcp-unofficial
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# rediger .env og fyll inn DATEX_USERNAME / DATEX_PASSWORD
export $(grep -v '^#' .env | xargs) # eller bruk python-dotenv
python server.pyWithout PORT set in the environment, the server starts over stdio — convenient for local
testing with MCP Inspector:
npx @modelcontextprotocol/inspector python server.pySet up the GitHub repository
Create a new (empty) repository on GitHub, e.g.
svv-mcp-unofficial.Push the code:
cd svv-mcp-unofficial git init git add . git commit -m "Initial commit: svv-mcp-unofficial server" git branch -M main git remote add origin https://github.com/<ditt-brukernavn>/svv-mcp-unofficial.git git push -u origin mainImportant:
.envis already in.gitignore— double-check that you never commit actual DATEX usernames/passwords. Instead, add.env.example(without values), which is already in the repository.
Login mode: shared account vs. per user
The server supports two modes, controlled by whether SVV_MCP_PUBLIC_URL is set:
Shared account | Multi-user (OAuth) | |
Environment variables |
|
|
Whose DATEX account is used | Yours, shared by everyone | Each user's own |
Onboarding for new users | None | Logs in with their own DATEX password the first time |
Requires Railway volume | No | Yes (stores encrypted credentials) |
Multi-user mode lets you share a single Railway URL with others without them needing their own
server: when someone adds the connector in Claude, they are sent to a
login page hosted by the server itself (/login), where they paste in their own
DATEX username/password and see a link for how to obtain one. Credentials
are stored encrypted (Fernet) in a SQLite file on a Railway volume, tied to a
token the MCP server issues to Claude.
Set up multi-user mode on Railway
Add a volume to the service, mounted at
/data(Railway dashboard: Settings → Volumes → New Volume, mount path/data).Generate an encryption key:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"Set the variables on the service:
SVV_MCP_PUBLIC_URL= your Railway URL (e.g.https://svv-mcp-unofficial-production.up.railway.app)CREDENTIAL_ENCRYPTION_KEY= the key from step 2SVV_MCP_DB_PATH=/data/svv_mcp.dbDo not set
DATEX_USERNAME/DATEX_PASSWORDin this mode
Redeploy.
/mcpnow requires OAuth;/loginis the self-hosted login page.
Test the OAuth flow before sharing the URL further
This is the most complex part of the project and should be tested manually once:
npx @modelcontextprotocol/inspectorPoint Inspector at https://<your-domain>/mcp, choose authentication, and go
through the entire flow (you are sent to /login, fill in test values, are sent
back, tool calls work). Check the Railway logs if anything fails —
the authorization server code in auth.py uses the SDK's
OAuthAuthorizationServerProvider interface, which may have differing field names
between SDK versions; the logs will show exactly which method/field does not match.
Deploy to Railway
Option A — via the Railway dashboard (easiest):
Log in to railway.app → New Project → Deploy from GitHub repo.
Select your
svv-mcp-unofficialrepository. Railway finds theDockerfileautomatically.Go to Variables on the service and enter the variables for the desired mode (see the table above).
Railway sets
PORTautomatically — the server then starts in Streamable HTTP mode and listens on0.0.0.0:$PORT.Under Settings → Networking, click Generate Domain to get a public URL (e.g.
https://svv-mcp-unofficial-production.up.railway.app).The MCP endpoint then becomes:
https://<your-domain>/mcp
Option B — via the Railway CLI:
npm i -g @railway/cli
railway login
railway init
railway up
railway variables --set "DATEX_USERNAME=..." --set "DATEX_PASSWORD=..."
railway domainThe server uses Streamable HTTP (not SSE), which is the recommended transport for external MCP servers in the current specification.
Connect to the server
Claude.ai / Claude app (custom connector)
Go to Settings → Connectors → Add custom connector.
Paste in your Railway URL, e.g.
https://<your-domain>/mcpGive it a name, e.g. "Statens vegvesen".
Turn it on in your conversation under tools/connectors.
Shared account mode: no extra steps — DATEX_USERNAME/DATEX_PASSWORD
are on the server, not in the conversation.
Multi-user mode: Claude automatically sends you to the /login page on the
server the first time you connect. Enter your own DATEX username/password
there (the page also shows how to get one if you don't have it yet, and
which tools DATEX access actually gives you). If you don't want to get DATEX access,
you can choose "Continue without account" — then you only get hent_apen_vegdata
(NVDB, no login required).
Claude Desktop (stdio, local)
Add to claude_desktop_config.json:
{
"mcpServers": {
"vegvesen": {
"command": "python",
"args": ["/full/path/til/svv-mcp-unofficial/server.py"],
"env": {
"DATEX_USERNAME": "...",
"DATEX_PASSWORD": "..."
}
}
}
}(Multi-user mode requires HTTP and does not work over stdio.)
Other MCP clients
Any client that supports Streamable HTTP can point directly at
https://<your-domain>/mcp.
Available tools
Tool | Description |
| Real-time weather measurements from road stations, with slippery road surface warnings |
| Location (coordinates/road/name) of weather stations |
| Hourly weather forecast, 24h ahead |
| Location of forecast points |
| Overview of web cameras along the road network |
| Real-time travel times on main stretches |
| Geometry/name of stretches with measured travel times |
| Accidents, roadworks, closures, landslides/floods, etc. |
| Troubleshooting: shows the raw tag structure from a given DATEX endpoint |
| Open road data from NVDB (speed limits, rest areas, AADT, etc.) — does not require DATEX login |
All "hent" tools take the same parameters:
sokeord(optional) — filters on all field values, e.g."E18","Hemsedal"maks_antall(default 10) — maximum number of records in the responseformat—"markdown"(readable) or"json"(structured)
Troubleshooting
"401 Unauthorized" →
DATEX_USERNAME/DATEX_PASSWORDare missing or incorrect on the server (shared account mode), or the user needs to reconnect to log in (multi-user mode).Empty/unexpected results → run
inspiser_datex_publikasjonagainst the relevant publication (see the table ofDATEX_ENDPOINTSkeys inserver.py) to see exactly which XML tags NPRA is sending right now, and adjustcandidate_tagsin the relevant tool as needed.Timeout → NPRA's DATEX node may be temporarily down; try again in a bit, or check operational notices on vegvesen.no.
OAuth error when connecting (multi-user mode) → see the Railway logs and the "Test the OAuth flow" section above.
License
The data is available under the Norwegian Licence for Open Government Data (NLOD). Credit Statens vegvesen as the source when using the data, as NPRA requests.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to query Norges Bank's open data API for exchange rates, policy rates, government securities, money market data, bank liquidity, and regional network survey data.MIT
- AlicenseAqualityCmaintenanceProvides access to real-time Danish road traffic events, roadworks, and queues via public data from Vejdirektoratet, enabling AI assistants to check road conditions without any API keys.3MIT
- FlicenseNot gradedqualityDmaintenanceProvides real-time access to Swedish road weather, traffic cameras, road conditions, and traffic flow data from Trafikverket (Swedish Transport Administration). Enables users to query weather stations, cameras, traffic situations, and flow data through natural language.
- AlicenseNot gradedqualityCmaintenanceProvides access to Norway's nationwide public transport data (all modes) via the Entur API, enabling queries about routes, stops, and departures through natural language.6MIT
Related MCP Connectors
Norwegian transport (Entur) and geodata (Kartverket): trips, departures, addresses, elevation.
Entur MCP — Norway public transport, nationwide, all modes (developer.entur.org)
Weather forecasts from MET Norway (Yr): geocoding plus hourly forecasts worldwide.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Mythso/svv-mcp-unofficial'
If you have feedback or need assistance with the MCP directory API, please join our Discord server