SVV-MCP-unofficial
SVV-MCP-unofficial
⚠️ 非官方项目。 这是一个社区构建的 MCP 服务器,并非由挪威公共道路管理局(Statens vegvesen,SVV)创建、运营或以任何方式关联。"SVV" 仅用于描述该服务器使用的数据来源。所提供的数据来自挪威公共道路管理局自己的开放 DATEX II 端点,使用须遵守其条款(见许可)。
MCP 服务器(Model Context Protocol),通过 DATEX II 让 LLM 访问挪威公共道路管理局的开放实时数据:
🌡️ 气象测量数据,来自道路管理局的气象站(路面温度、气温、风、露点),并自动提示湿滑路面
🌦️ 天气预报(逐小时,未来 24 小时)
📷 路网沿线网络摄像头
🚗 主要路段的实时行程时间
⚠️ 交通信息(事故、道路施工、封闭、山体滑坡/洪水等)
🔧 内置故障排查工具,可显示原始 XML 结构,因为 NPRA 的架构可能会发生变化
所有 DATEX 端点都需要在挪威公共道路管理局注册用户(免费)。 在此申请访问权限 →
目录
Related MCP server: aria-mcp-trafik-dk
本地快速开始
需要 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.py如果环境中未设置 PORT,服务器将通过 stdio 启动——便于使用 MCP Inspector 进行本地测试:
npx @modelcontextprotocol/inspector python server.py设置 GitHub 仓库
在 GitHub 上创建一个新的(空)仓库,例如
svv-mcp-unofficial。推送代码:
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 main重要:
.env已在.gitignore中——请务必确认你永远不会提交真实的 DATEX 用户名/密码。请改为提交.env.example(不含值),该文件已存在于仓库中。
登录模式:共享账户 vs. 每用户
服务器支持两种模式,由是否设置 SVV_MCP_PUBLIC_URL 决定:
共享账户 | 多用户(OAuth) | |
环境变量 |
|
|
使用谁的 DATEX 账户 | 你的,由所有人共享 | 每个用户自己的 |
新用户引导 | 无 | 首次使用自己的 DATEX 密码登录 |
需要 Railway 卷 | 否 | 是(存储加密的凭据) |
多用户模式 允许你与他人共享一个 Railway URL,而无需他们拥有自己的服务器:当有人将连接器添加到 Claude 时,他们会被发送到服务器自托管的登录页面(/login),在那里粘贴自己的 DATEX 用户名/密码,并看到如何获取这些信息的链接。凭据以加密形式(Fernet)存储在 Railway 卷上的 SQLite 文件中,并与 MCP 服务器颁发给 Claude 的令牌关联。
在 Railway 上设置多用户模式
在服务上添加一个卷,挂载到
/data(Railway 仪表板:Settings → Volumes → New Volume,挂载路径/data)。生成加密密钥:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"在服务上设置变量:
SVV_MCP_PUBLIC_URL= 你的 Railway URL(例如https://svv-mcp-unofficial-production.up.railway.app)CREDENTIAL_ENCRYPTION_KEY= 步骤 2 中的密钥SVV_MCP_DB_PATH=/data/svv_mcp.db在此模式下不要设置
DATEX_USERNAME/DATEX_PASSWORD
重新部署。
/mcp现在需要 OAuth;/login是自托管的登录页面。
在分享 URL 之前测试 OAuth 流程
这是项目中最复杂的部分,应手动测试一次:
npx @modelcontextprotocol/inspector将 Inspector 指向 https://<你的域名>/mcp,选择身份验证,并完成整个流程(被发送到 /login,填写测试值,被送回,工具调用正常工作)。如果出错,请检查 Railway 日志——auth.py 中的授权服务器代码使用 SDK 的 OAuthAuthorizationServerProvider 接口,该接口在不同 SDK 版本之间可能存在字段名差异;日志将准确显示哪个方法/字段不匹配。
部署到 Railway
方案 A — 通过 Railway 仪表板(最简单):
登录 railway.app → New Project → Deploy from GitHub repo。
选择你的
svv-mcp-unofficial仓库。Railway 会自动找到Dockerfile。转到服务上的 Variables,为所需模式添加变量(见上表)。
Railway 会自动设置
PORT——服务器随后以 Streamable HTTP 模式启动并监听0.0.0.0:$PORT。在 Settings → Networking 下,点击 Generate Domain 获取公共 URL(例如
https://svv-mcp-unofficial-production.up.railway.app)。MCP 端点即为:
https://<你的域名>/mcp
方案 B — 通过 Railway CLI:
npm i -g @railway/cli
railway login
railway init
railway up
railway variables --set "DATEX_USERNAME=..." --set "DATEX_PASSWORD=..."
railway domain服务器使用 Streamable HTTP(而非 SSE),这是当前规范中推荐用于外部 MCP 服务器的传输方式。
连接服务器
Claude.ai / Claude 应用(自定义连接器)
转到 Settings → Connectors → Add custom connector。
粘贴你的 Railway URL,例如
https://<你的域名>/mcp给它起个名字,例如"挪威公共道路管理局"。
在对话中的工具/连接器下将其打开。
共享账户模式: 无需额外步骤——DATEX_USERNAME/DATEX_PASSWORD 在服务器上,不在对话中。
多用户模式: 首次连接时,Claude 会自动将你发送到服务器上的 /login 页面。在那里填写你自己的 DATEX 用户名/密码(该页面还会显示如果你还没有的话如何获取,以及 DATEX 访问权限实际能给你哪些工具)。如果你不想获取 DATEX 访问权限,可以选择"无需账户继续"——这样你只能使用 hent_apen_vegdata(NVDB,无需登录)。
Claude Desktop(stdio,本地)
添加到 claude_desktop_config.json:
{
"mcpServers": {
"vegvesen": {
"command": "python",
"args": ["/full/path/til/svv-mcp-unofficial/server.py"],
"env": {
"DATEX_USERNAME": "...",
"DATEX_PASSWORD": "..."
}
}
}
}(多用户模式需要 HTTP,无法通过 stdio 工作。)
其他 MCP 客户端
任何支持 Streamable HTTP 的客户端都可以直接指向
https://<你的域名>/mcp。
可用工具
工具 | 描述 |
| 来自道路气象站的实时气象测量数据,含湿滑路面提示 |
| 气象站的位置(坐标/道路/名称) |
| 逐小时天气预报,未来 24 小时 |
| 预报点的位置 |
| 路网沿线网络摄像头概览 |
| 主要路段的实时行程时间 |
| 测量行程时间的路段几何/名称 |
| 事故、道路施工、封闭、山体滑坡/洪水等 |
| 故障排查:显示来自给定 DATEX 端点的原始标签结构 |
| 来自 NVDB 的开放道路数据(限速、休息区、AADT 等)——不需要 DATEX 登录 |
所有"hent"工具都接受相同的参数:
sokeord(可选)——按所有字段值过滤,例如"E18"、"Hemsedal"maks_antall(默认 10)——响应中的最大记录数format—"markdown"(可读)或"json"(结构化)
故障排查
"401 未授权" → 服务器上
DATEX_USERNAME/DATEX_PASSWORD缺失或错误(共享账户模式),或者用户需要重新连接以登录(多用户模式)。结果为空/意外 → 对相关发布内容运行
inspiser_datex_publikasjon(见server.py中DATEX_ENDPOINTS键的表格),查看 NPRA 当前发送的确切 XML 标签,并在需要时调整相关工具中的candidate_tags。超时 → NPRA 的 DATEX 节点可能暂时不可用;稍后重试,或查看 vegvesen.no 上的运营公告。
连接时出现 OAuth 错误(多用户模式) → 查看 Railway 日志和上面的"测试 OAuth 流程"部分。
许可
数据根据挪威公共数据许可(NLOD)提供。 使用数据时请注明挪威公共道路管理局为来源,正如 NPRA 所要求的那样。
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