关于 Swiss open data for AI — zero config, zero API keys
mcp-swiss 是一个 MCP 服务,为 AI 助手提供瑞士开放数据访问,涵盖交通、天气、水文、地理数据、企业登记等领域。无需 API 密钥、注册或额外部署,可通过 npx 直接启动,适合需要瑞士本地信息的用户与开发者。
主要功能
- 01覆盖 22 个模块共 79 个工具
- 02无需 API 密钥与账户注册
- 03支持按模块或预设筛选加载工具
- 04数据来源包括 SBB、MeteoSwiss、BAFU 与 ZEFIX
- 05通过 stdio 传输接入多种 MCP 客户端
适用场景
- 01查询列车班次与路线规划
- 02查看河流与湖泊水位及水温
- 03检索瑞士企业登记信息与地址
MCP 相关
该项目是一个 MCP 服务,通过 stdio 传输向 MCP 客户端暴露交通、天气、地理与统计等工具。用户可用 --modules 或 --preset 参数限制加载的模块以减少 token 消耗。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
76收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| query | string | 否 | 要搜索的车站名称 |
| x | number | 否 | 经度(WGS84) |
| y | number | 否 | 纬度(WGS84) |
| type | string | 否 | 筛选:全部、车站、兴趣点、地址 |
详细介绍
mcp-swiss 是一个 Model Context Protocol 服务,让任何 AI 助手都能直接访问瑞士开放数据——火车、天气、河流、地图和公司信息。
79 个工具。无需 API 密钥。无需注册。无需运行服务。只需运行 npx mcp-swiss。
🚆 Transport — SBB, PostBus, trams, live departures, journey planning
🌤️ Weather — MeteoSwiss live conditions + historical data
🌊 Hydrology — BAFU river & lake levels (great for Aare swimming!)
🗺️ Geodata — swisstopo geocoding, solar potential, geographic layers
🏢 Companies — ZEFIX federal registry, all 700K+ Swiss companies
🎄 Holidays — Swiss public & school holidays by canton
🏛️ Parliament — Bills, votes, members, speeches, cantonal affairs (OpenParlData.ch)
🏔️ Avalanche — SLF danger bulletins and warning regions
💨 Air Quality — NABEL stations, Swiss legal limits (LRV)
📮 Swiss Post — Postcode lookup and parcel tracking
⚡ Energy — Electricity tariffs by municipality (ElCom)
📊 Statistics — Population, demographics, BFS datasets
🏦 SNB Rates — Swiss National Bank CHF exchange rates, historical data
♻️ Recycling — Zurich city waste collection calendar (OpenERZ)
📰 Swiss News — SRF news headlines and keyword search
🗳️ Voting — Swiss popular vote results (Basel-Stadt open data)
🌊 Dams — Swiss federal dam registry (SFOE/swisstopo)
🥾 Hiking — Swiss trail closures and hiking alerts (swisstopo)
🏠 Real Estate — Swiss property prices, rent index, housing data (BFS)
🚗 Traffic — ASTRA counting stations, daily volumes
🌍 Earthquakes — Swiss Seismological Service (SED/ETH Zürich), FDSN API
❄️ Snow — SLF snow depth, stations, and measurements
🌿 Pollen — MeteoSwiss pollen concentrations at 16 stations
安装
快速开始
npx mcp-swiss
就这么简单。无需 API 密钥、无需 .env 文件,也无需账户。选择下方的客户端并粘贴配置即可。
一键安装(.mcpb)
.mcpb 捆绑包适用于 Claude Desktop 及任何兼容 MCP Bundle 的应用。
打开下载的文件,后续操作由应用自动完成。无需编辑配置、无需使用终端,也无需 API 密钥。
Claude Desktop
编辑配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
保存后重启 Claude Desktop。
Claude Code(命令行)
claude mcp add swiss -- npx -y mcp-swiss
就这么简单——Claude Code 会在你的下一次会话中使用它。
Cursor
需要 Cursor 0.45.6+
选项 A:项目配置——在项目根目录创建 .cursor/mcp.json:
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
选项 B:全局配置——创建 ~/.cursor/mcp.json:
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
选项 C:通过 Cursor 设置界面
- 打开 Cursor 设置
- 前往 功能 → MCP 服务
- 点击 + 添加新的全局 MCP 服务
- 粘贴上方的 JSON 配置
VS Code(GitHub Copilot)
一键安装
CLI 安装
# VS Code
code --add-mcp '{"name":"swiss","command":"npx","args":["-y","mcp-swiss"]}'
# VS Code Insiders
code-insiders --add-mcp '{"name":"swiss","command":"npx","args":["-y","mcp-swiss"]}'
手动配置
添加到 VS Code 用户设置(JSON)中——按 Ctrl+Shift+P → Preferences: Open User Settings (JSON):
{
"mcp": {
"servers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
}
或者添加到工作区中的 .vscode/mcp.json(可与团队共享):
{
"servers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
Windsurf
添加到 ~/.codeium/windsurf/model_config.json:
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
Cline(VS Code)
打开 VS Code settings.json 并添加:
{
"cline.mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
任意 MCP 客户端
mcp-swiss 使用 stdio 传输,无需环境变量。通用配置如下:
{
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
此配置适用于任何兼容 MCP 的客户端——直接添加即可。
Docker
docker pull vikramgorla/mcp-swiss
可与任何支持基于 Docker 的服务的 MCP 客户端配合使用。容器使用 stdio 传输:
# Run directly (stdio)
docker run -i vikramgorla/mcp-swiss
# Use with Claude Desktop
对于 Claude Desktop,请更新配置以使用 Docker:
{
"mcpServers": {
"swiss": {
"command": "docker",
"args": ["run", "-i", "--rm", "vikramgorla/mcp-swiss"]
}
}
}
也可通过 GitHub Container Registry 获取:
docker pull ghcr.io/vikramgorla/mcp-swiss
模块筛选
默认情况下,mcp-swiss 会加载全部 22 个模块(79 个工具)。为提高令牌使用效率,只加载所需模块:
选择指定模块
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss", "--modules", "transport,weather"]
}
}
}
使用预设
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss", "--preset", "commuter"]
}
}
}
| 预设 | 模块 | 工具 | 节省令牌 |
|---|---|---|---|
commuter | transport、weather、holidays | 14 | 81% |
outdoor | weather、avalanche、hiking、earthquakes、dams、snow | 19 | 75% |
business | companies、geodata、post、energy、statistics、snb | 24 | 67% |
citizen | parliament、voting、holidays、news | 17 | 77% |
minimal | transport | 5 | 93% |
full | 全部 22 个模块(默认) | 79 | — |
组合使用预设和模块:--preset commuter --modules parliament
查看可用列表:npx mcp-swiss --list-modules 或 npx mcp-swiss --list-presets
示例提示词
连接后,可以尝试向 AI 提问:
| 提示词 | 使用的工具 |
|---|---|
| “从 Zürich HB 到 Geneva 的接下来 5 班列车” | get_connections |
| “伯尔尼的阿勒河水温适合游泳吗?” | get_water_level |
| “今天卢加诺和苏黎世的天气” | get_weather |
| “查找在楚格注册的区块链公司” | search_companies |
| “伯尔尼 Bundesplatz 3 的太阳能潜力” | geocode + get_solar_potential |
| “伯尔尼 HB 的实时发车信息” | get_departures |
| “图恩附近有哪些河流?” | list_hydro_stations + get_water_level |
| “规划我的周六:乘火车去因特拉肯,查看天气” | 链式调用多个工具 |
| “下周一在苏黎世是公共假日吗?” | get_public_holidays |
| “瑞士议会最近投票表决了什么?” | search_parliament_business |
| “伯尔尼高地的雪崩危险等级是多少?” | get_avalanche_bulletin |
| “采尔马特的邮政编码是多少?” | search_postcode |
| “追踪我的瑞士邮政包裹 99.12.345678.12345678” | track_parcel |
| “苏黎世和巴塞尔的电费是多少?” | search_municipality_energy + compare_electricity_tariffs |
| “楚格州的人口是多少?” | get_population |
工具
22 个模块共提供 79 个工具。完整规格:
docs/tool-specs.md· 机器可读格式:docs/tools.schema.json
🚆 交通(5 个工具)
| 工具 | 描述 |
|---|---|
search_stations | 按名称或位置查找车站/站点 |
get_connections | 规划任意两地之间的行程 |
get_departures | 查询车站的实时出发信息 |
get_arrivals | 查询车站的实时到达信息 |
get_nearby_stations | 查找坐标附近的车站 |
🌤️ 天气与水文(6 个工具)
| 工具 | 描述 |
|---|---|
get_weather | 查询 MeteoSwiss 气象站的当前天气状况 |
list_weather_stations | 列出全部约 160 个 MeteoSwiss 气象站及其元数据 |
get_weather_history | 查询历史天气数据(最多 32 天) |
get_water_level | 查询河流/湖泊水位及温度(BAFU) |
list_hydro_stations | 列出全部 400 多个水文监测站 |
get_water_history | 查询历史水文数据 |
🗺️ 地理数据/swisstopo(6 个工具)
| 工具 | 描述 |
|---|---|
geocode | 瑞士地址 → 坐标 |
reverse_geocode | 坐标 → 瑞士地址 |
search_places | 搜索瑞士地名、山脉、湖泊和地理特征 |
get_solar_potential | 查询地点的屋顶太阳能辐照量 |
identify_location | 查询某点的所有地理数据图层 |
get_municipality | 按名称查询市镇信息 |
🏢 公司/ZEFIX(5 个工具)
| 工具 | 描述 |
|---|---|
search_companies | 按名称、州或法律形式搜索 |
get_company | 按 ZEFIX ehraid 查询完整公司详情 |
search_companies_by_address | 查询在某地址注册的公司 |
list_cantons | 列出全部 26 个瑞士州 |
list_legal_forms | 列出 AG、GmbH 及所有瑞士法律形式 |
🎄 节假日(3 个工具)
| 工具 | 描述 |
|---|---|
get_public_holidays | 按年份查询瑞士公共假日,可按州筛选 |
get_school_holidays | 按年份和州查询学校假期时段 |
is_holiday_today | 快速检查今天是否为公共假日 |
🏛️ 议会(9 个工具)— OpenParlData.ch
| 工具 | 描述 |
|---|---|
search_parliament_business | 搜索联邦政治事务(法案、动议、质询) |
get_parliament_members | 按州、政党或活动情况列出议员 |
get_parliament_votes | 查询特定事务的投票结果 |
get_session_schedule | 查询即将举行/近期的议会会议 |
search_parliament_speeches | 搜索某项事务的辩论发言 |
get_politician_interests | 查询议员申报的利益和职务 |
search_cantonal_affairs | 搜索 26 个州议会的事务 |
get_parliamentary_documents | 查询某项事务的官方文件 |
get_committee_meetings | 查询委员会会议日程 |
🏔️ 雪崩(2 个工具)
| 工具 | 描述 |
|---|---|
get_avalanche_bulletin | 查询当前雪崩公告,包括危险等级和 PDF 链接 |
list_avalanche_regions | 列出全部 22 个瑞士雪崩预警区 |
💨 空气质量(2 个工具)
| 工具 | 描述 |
|---|---|
list_air_quality_stations | 列出全部 14 个 NABEL 监测站 |
get_air_quality | 查询站点信息、瑞士法定限值(LRV)及 BAFU 数据链接 |
📮 瑞士邮政(4 个工具)
| 工具 | 描述 |
|---|---|
lookup_postcode | PLZ → 地区、州、坐标 |
search_postcode | 城市名称 → 匹配的邮政编码 |
list_postcodes_in_canton | 列出某州的所有邮政编码 |
track_parcel | 为包裹生成瑞士邮政追踪 URL |
⚡ 能源价格(3 个工具)
| 工具 | 描述 |
|---|---|
get_electricity_tariff | 按市镇查询电价及各组成部分明细 |
compare_electricity_tariffs | 比较不同市镇的电价 |
search_municipality_energy | 查找用于查询电价的市镇 ID |
📊 统计数据 / BFS(3 个工具)
| 工具 | 描述 |
|---|---|
get_population | 根据 BFS STATPOP 查询州或市镇的人口 |
search_statistics | 搜索 opendata.swiss 上的 BFS 数据集 |
get_statistic | 获取数据集的详细信息 |
🏦 SNB 汇率(3 个工具)
| 工具 | 描述 |
|---|---|
list_currencies | 列出瑞士国家银行(SNB)提供的所有货币 |
get_exchange_rate | 获取任意货币当前兑 CHF 汇率 |
get_exchange_rate_history | 获取历史月度 CHF 汇率,并按日期筛选 |
♻️ 回收 / 垃圾收集(3 个工具)
| 工具 | 描述 |
|---|---|
get_waste_collection | 按苏黎世邮政编码和垃圾类型查询下一次收集日期 |
list_waste_types | 列出所有支持的垃圾类型及其说明 |
get_waste_calendar | 查询邮政编码对应的完整垃圾收集日历(即将到来的日期) |
📰 瑞士新闻(2 个工具)
| 工具 | 描述 |
|---|---|
get_swiss_news | 按类别(瑞士 / 国际 / 经济)获取 SRF 最新头条 |
search_swiss_news | 按关键词搜索所有类别的 SRF 新闻 |
🗳️ 投票(3 个工具)
| 工具 | 描述 |
|---|---|
get_voting_results | 获取来自巴塞尔城市州开放数据的瑞士全民投票结果 |
search_votes | 按关键词搜索全民投票(德语 / 法语 / 意大利语) |
get_vote_details | 获取特定投票按区划分的详细结果 |
🌊 水坝与水库(3 个工具)
| 工具 | 描述 |
|---|---|
search_dams | 按名称或关键词搜索瑞士联邦水坝 |
get_dams_by_canton | 列出某个州的所有联邦水坝 |
get_dam_details | 获取特定水坝的详细信息(高度、库容、用途) |
🥾 徒步 / 步道封闭(2 个工具)
| 工具 | 描述 |
|---|---|
get_trail_closures | 获取 swisstopo 提供的瑞士步道封闭信息和徒步预警 |
get_trail_closures_nearby | 查询指定坐标附近的步道封闭信息 |
🏠 房地产(3 个工具)
| 工具 | 描述 |
|---|---|
get_property_price_index | 瑞士房价指数(BFS Immo-Monitoring) |
search_real_estate_data | 搜索 opendata.swiss 上的 BFS 房地产数据集 |
get_rent_index | 获取 BFS 提供的瑞士租金指数和住房成本数据 |
🚗 交通 / ASTRA(3 个工具)
| 工具 | 描述 |
|---|---|
get_traffic_count | 交通计数站数据(ASTRA)——每日车流量和重型车辆占比 |
get_traffic_by_canton | 按州筛选并列出 ASTRA 交通计数站 |
get_traffic_nearby | 查找指定坐标附近的交通计数站 |
🌍 地震 / SED(3 个工具)
| 工具 | 描述 |
|---|---|
get_recent_earthquakes | 获取瑞士及周边地区的近期地震事件,数据来自苏黎世联邦理工学院(ETH Zürich)的瑞士地震局(SED) |
get_earthquake_details | 根据 SED 事件 ID 获取特定地震事件的完整详情 |
search_earthquakes_by_location | 搜索指定坐标附近的地震,并可配置搜索半径、时间范围和结果数量上限 |
❄️ 积雪状况 / SLF(3 个工具)
| 工具 | 描述 |
|---|---|
get_snow_conditions | 获取 SLF IMIS 站点的瑞士当前雪深和 24 小时新雪量,可按州 / 海拔筛选 |
list_snow_stations | 列出全部 307 个 SLF 积雪测量站(IMIS 自动站及人工观测样地) |
get_snow_measurements | 获取特定 SLF 站点的详细积雪和天气测量数据 |
🌿 Pollen / MeteoSwiss(3 个工具)
| 工具 | 描述 |
|---|---|
get_pollen_current | MeteoSwiss 16 个监测站中任一站点的当前每小时花粉浓度(7 种:桤木、桦树、榛树、山毛榉、白蜡树、橡树、禾本科植物) |
get_pollen_daily | 可配置时间范围内的每日花粉平均值,用于趋势分析 |
list_pollen_stations | MeteoSwiss 全部 16 个自动花粉监测站及其位置详情 |
数据源
所有数据均来自瑞士官方开放数据,无需 API 密钥:
| 来源 | 数据 | 文档 |
|---|---|---|
| transport.opendata.ch | SBB、PostBus、有轨电车 | API 文档 |
| api.existenz.ch | MeteoSwiss 天气 + BAFU 水文数据 | API 文档 |
| api3.geo.admin.ch | swisstopo 联邦地理数据 | API 文档 |
| zefix.admin.ch | 联邦企业注册信息 | Swagger |
| openholidaysapi.org | 瑞士公共假日和学校假期 | API 文档 |
| OpenParlData.ch | 瑞士议会数据——联邦和州级(CC BY 4.0) | API 文档 |
| whiterisk.ch / aws.slf.ch | SLF/WSL 雪崩公告 | SLF |
| geo.admin.ch — BAFU/NABEL | 瑞士空气质量监测站 | BAFU NABEL |
| geo.admin.ch — swisstopo | 瑞士邮政编码(Amtliches Ortschaftenverzeichnis) | geo.admin.ch |
| strompreis.elcom.admin.ch | 按市镇划分的 ElCom 电价 | ElCom |
| pxweb.bfs.admin.ch + opendata.swiss | BFS 人口统计(STATPOP)+ 数据集 | BFS |
| data.snb.ch | 瑞士国家银行 CHF 汇率 | SNB 数据门户 |
| openerz.metaodi.ch | 苏黎世垃圾收集日历(OpenERZ) | OpenERZ |
| srf.ch | SRF 瑞士新闻标题 | SRF |
| data.bs.ch | 巴塞尔城市州民众投票结果 | Open Data BS |
| geo.admin.ch — SFOE | 瑞士联邦水坝登记册 | SFOE |
| geo.admin.ch — swisstopo | 瑞士步道封闭信息和徒步警报 | swisstopo |
| pxweb.bfs.admin.ch | BFS 房产价格 + 租金指数 | BFS 住房 |
| geo.admin.ch — ASTRA | 交通计数站 + 日流量 | ASTRA |
| arclink.ethz.ch | 瑞士地震局地震数据(SED/ETH) | SED |
| measurement-api.slf.ch | SLF 积雪深度 + 测量数据(IMIS + 研究样地,CC BY 4.0) | SLF |
| data.geo.admin.ch | MeteoSwiss 花粉浓度(16 个自动监测站,CC BY) | MeteoSwiss |
开发
# Clone
git clone https://github.com/vikramgorla/mcp-swiss.git
cd mcp-swiss
# Install deps
npm install
# Build
npm run build
# Run in dev mode
npm run dev
# Test with MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.js
测试
npm test
贡献
欢迎贡献!mcp-swiss 遵循严格的 PR 工作流,以保持代码库整洁,并确保 CI 始终通过。
快速链接
-
CONTRIBUTING.md— 完整的贡献者指南:- 开发环境设置(克隆、安装、构建、测试)
- 分支模型(develop / main / feature 分支)
- 严格的工作流规则(不得直接推送、始终通过 PR、只允许常规合并)
- 添加新模块(附分步说明和代码模板)
- 集成检查清单(需要更新的所有文件)
- 代码规范(TypeScript、不得使用
any、响应上限为 50K、不得包含 API 密钥)
-
RELEASING.md— 面向维护者的发布流程:- 分步发布工作流
- 发布前检查清单
- 版本策略(功能更新使用 minor 版本,修复使用 patch 版本)
- 发布后验证
- CI/CD 工作流参考(
ci.yml、release.yml、beta.yml、mcp-registry.yml)
要求
- Node.js 20+
- 无需 API 密钥或账号
许可证
MIT — 参见 LICENSE
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。