SVV-MCP-unofficial
SVV-MCP-unofficial
⚠️ Неофициальный проект. Это MCP-сервер, созданный сообществом, и он не создан, не управляется и не связан с Statens vegvesen (SVV) каким-либо образом. «SVV» в названии описывает лишь то, какой источник данных использует сервер. Передаваемые данные получены из собственных открытых конечных точек DATEX II Statens vegvesen, и их использование регулируется их условиями (см. Лицензия).
MCP-сервер (Model Context Protocol), который предоставляет LLM доступ к открытым данным реального времени Statens vegvesen через DATEX II:
🌡️ Метеоизмерения с метеостанций дорожного ведомства (температура дорожного покрытия, температура воздуха, ветер, точка росы), с автоматическим предупреждением о скользком дорожном покрытии
🌦️ Прогнозы погоды (почасовые, на 24 часа вперед)
📷 Веб-камеры вдоль дорожной сети
🚗 Время в пути в реальном времени на основных участках
⚠️ Дорожные сообщения (аварии, дорожные работы, закрытия, оползни/наводнения и т. д.)
🔧 Встроенный инструмент диагностики, показывающий необработанную XML-структуру, поскольку схемы NPRA могут меняться
Все конечные точки DATEX требуют зарегистрированного пользователя у Statens vegvesen (бесплатно). Запросить доступ здесь →
Содержание
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 | Нет | Да (хранит зашифрованные учетные данные) |
Многопользовательский режим позволяет вам делиться одним URL Railway с другими без необходимости
собственного сервера: когда кто-то добавляет коннектор в Claude, они перенаправляются на
страницу входа, которую сервер размещает сам (/login), где они вставляют свои собственные
имя пользователя/пароль DATEX и видят ссылку о том, как их получить. Учетные данные
хранятся зашифрованными (Fernet) в файле SQLite на томе Railway, привязанном к
токену, который MCP-сервер выдает Claude.
Настройка многопользовательского режима на Railway
Добавьте том на сервис, смонтированный на
/data(панель Railway: Settings → Volumes → New Volume, mount path/data).Сгенерируйте ключ шифрования:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"Задайте переменные на сервисе:
SVV_MCP_PUBLIC_URL= ваш URL Railway (например,https://svv-mcp-unofficial-production.up.railway.app)CREDENTIAL_ENCRYPTION_KEY= ключ из шага 2SVV_MCP_DB_PATH=/data/svv_mcp.dbНе задавайте
DATEX_USERNAME/DATEX_PASSWORDв этом режиме
Выполните повторный деплой.
/mcpтеперь требует OAuth;/login— это самостоятельно размещенная страница входа.
Тестирование потока OAuth перед тем, как делиться URL
Это самая сложная часть проекта, и ее следует один раз протестировать вручную:
npx @modelcontextprotocol/inspectorНаправьте Inspector на https://<ваш-домен>/mcp, выберите аутентификацию и пройдите
весь поток (перенаправление на /login, заполнение тестовых значений, возврат,
вызовы инструментов работают). Проверьте логи Railway, если что-то не работает —
код сервера авторизации в auth.py использует интерфейс
OAuthAuthorizationServerProvider из SDK, который может иметь расхождения в именах полей
между версиями 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.
Вставьте ваш URL Railway, например
https://<ваш-домен>/mcpДайте ему имя, например «Statens vegvesen».
Включите его в вашем разговоре в разделе инструментов/коннекторов.
Режим общей учетной записи: дополнительные шаги не нужны — 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 (ограничения скорости, места отдыха, СГД и т. д.) — не требует входа в DATEX |
Все инструменты «hent» принимают одинаковые параметры:
sokeord(необязательно) — фильтрует по всем значениям полей, например"E18","Hemsedal"maks_antall(по умолчанию 10) — максимальное количество записей в ответеformat—"markdown"(читаемый) или"json"(структурированный)
Устранение неполадок
«401 Не авторизован» →
DATEX_USERNAME/DATEX_PASSWORDотсутствуют или неверны на сервере (режим общей учетной записи), или пользователю необходимо переподключиться для входа (многопользовательский режим).Пустые/неожиданные результаты → запустите
inspiser_datex_publikasjonдля соответствующей публикации (см. ключиDATEX_ENDPOINTSв таблице выше вserver.py), чтобы увидеть, какие именно XML-теги NPRA отправляет прямо сейчас, и при необходимости скорректируйтеcandidate_tagsв соответствующем инструменте.Таймаут → узел DATEX NPRA может быть временно недоступен; попробуйте снова через некоторое время или проверьте сообщения о работе на vegvesen.no.
Ошибки OAuth при подключении (многопользовательский режим) → см. логи Railway и раздел «Тестирование потока OAuth» выше.
Лицензия
Данные доступны по Норвежской лицензии на публичные данные (NLOD). Указывайте Statens vegvesen как источник при использовании данных, как просит 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