mcp-swiss
Servidor MCP de datos abiertos suizos — transporte, clima, geodatos, empresas, etc. Sin claves API.
Documentación
mcp-swiss
Datos abiertos suizos para IA — cero configuración, cero claves API
mcp-swiss es un servidor de Model Context Protocol que brinda a cualquier asistente de IA acceso directo a datos abiertos suizos: trenes, clima, ríos, mapas y empresas.
76 herramientas. Sin claves API. Sin registro. Sin servidor que ejecutar. Solo 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
Instalación
Inicio rápido
npx mcp-swiss
Eso es todo. Sin claves API, sin archivos .env, sin cuentas. Elige tu cliente a continuación y pega la configuración.
Instalación con un clic (.mcpb)
Los paquetes .mcpb funcionan con Claude Desktop y cualquier aplicación compatible con MCP Bundle.
Abre el archivo descargado: tu aplicación se encarga del resto. Sin editar configuración, sin terminal, sin claves API.
Claude Desktop
Edita tu archivo de configuración:
- 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"]
}
}
}
Reinicia Claude Desktop después de guardar.
Claude Code (CLI)
claude mcp add swiss -- npx -y mcp-swiss
Eso es todo: Claude Code lo usará en tu próxima sesión.
Cursor
Requiere Cursor 0.45.6+
Opción A: Configuración del proyecto — crea .cursor/mcp.json en la raíz de tu proyecto:
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
Opción B: Configuración global — crea ~/.cursor/mcp.json:
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
Opción C: A través de la interfaz de configuración de Cursor
- Abre Configuración de Cursor
- Ve a Features → MCP Servers
- Haz clic en + Add new global MCP server
- Pega la configuración JSON anterior
VS Code (GitHub Copilot)
Instalación con un clic
Instalación por 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"]}'
Configuración manual
Agrega a la configuración de usuario de VS Code (JSON) — presiona Ctrl+Shift+P → Preferences: Open User Settings (JSON):
{
"mcp": {
"servers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
}
O agrega a .vscode/mcp.json en tu espacio de trabajo (compartible con tu equipo):
{
"servers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
Windsurf
Agrega a ~/.codeium/windsurf/model_config.json:
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
Cline (VS Code)
Abre settings.json de VS Code y agrega:
{
"cline.mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
Cualquier cliente MCP
mcp-swiss usa transporte stdio y no requiere variables de entorno. La configuración universal:
{
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
Esto funciona con cualquier cliente compatible con MCP: solo conéctalo.
Docker
docker pull vikramgorla/mcp-swiss
Úsalo con cualquier cliente MCP que admita servidores basados en Docker. El contenedor usa transporte stdio:
# Run directly (stdio)
docker run -i vikramgorla/mcp-swiss
# Use with Claude Desktop
Para Claude Desktop, actualiza tu configuración para usar Docker:
{
"mcpServers": {
"swiss": {
"command": "docker",
"args": ["run", "-i", "--rm", "vikramgorla/mcp-swiss"]
}
}
}
También disponible en GitHub Container Registry:
docker pull ghcr.io/vikramgorla/mcp-swiss
Filtrado de módulos
De forma predeterminada, mcp-swiss carga los 21 módulos (76 herramientas). Para una mejor eficiencia de tokens, carga solo los módulos que necesitas:
Seleccionar módulos específicos
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss", "--modules", "transport,weather"]
}
}
}
Usar ajustes preestablecidos
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss", "--preset", "commuter"]
}
}
}
| Ajuste preestablecido | Módulos | Herramientas | Ahorro de tokens |
|---|---|---|---|
commuter | transporte, clima, festivos | 14 | 81% |
outdoor | clima, avalanchas, senderismo, terremotos, presas, nieve | 19 | 75% |
business | empresas, geodatos, correo, energía, estadísticas, snb | 24 | 67% |
citizen | parlamento, votaciones, festivos, noticias | 17 | 77% |
minimal | transporte | 5 | 93% |
full | los 21 módulos (predeterminado) | 76 | — |
Combina ajuste preestablecido + módulos: --preset commuter --modules parliament
Lista disponible: npx mcp-swiss --list-modules o npx mcp-swiss --list-presets
Prompts de demostración
Una vez conectado, prueba a preguntarle a tu IA:
| Prompt | Qué usa |
|---|---|
| "Próximos 5 trenes de Zúrich HB a Ginebra" | get_connections |
| "¿Está el Aare en Berna lo suficientemente cálido para nadar?" | get_water_level |
| "Clima en Lugano vs Zúrich hoy" | get_weather |
| "Encuentra empresas de blockchain registradas en Zug" | search_companies |
| "Potencial solar de Bundesplatz 3, Berna" | geocode + get_solar_potential |
| "Salidas en vivo desde Berna HB" | get_departures |
| "¿Qué ríos están cerca de Thun?" | list_hydro_stations + get_water_level |
| "Planifica mi sábado: tren a Interlaken, revisa el clima" | Múltiples herramientas encadenadas |
| "¿Es el próximo lunes festivo en Zúrich?" | get_public_holidays |
| "¿Sobre qué votó recientemente el parlamento suizo?" | search_parliament_business |
| "¿Cuál es el nivel de peligro de avalanchas en los Alpes berneses?" | get_avalanche_bulletin |
| "¿Cuál es el código postal de Zermatt?" | search_postcode |
| "Rastrea mi paquete de Swiss Post 99.12.345678.12345678" | track_parcel |
| "¿Cuánto cuesta la electricidad en Zúrich vs Basilea?" | search_municipality_energy + compare_electricity_tariffs |
| "¿Cuál es la población del cantón de Zug?" | get_population |
Herramientas
76 herramientas en 21 módulos. Especificaciones completas:
docs/tool-specs.md· Legible por máquina:docs/tools.schema.json
🚆 Transporte (5 herramientas)
| Herramienta | Descripción |
|---|---|
search_stations | Encuentra estaciones/paradas por nombre o ubicación |
get_connections | Planificador de viajes entre dos puntos cualesquiera |
get_departures | Salidas en vivo desde una estación |
get_arrivals | Llegadas en vivo a una estación |
get_nearby_stations | Estaciones cerca de coordenadas |
🌤️ Clima e hidrología (6 herramientas)
| Herramienta | Descripción |
|---|---|
get_weather | Condiciones actuales en una estación de MeteoSwiss |
list_weather_stations | Las ~160 estaciones de MeteoSwiss con metadatos |
get_weather_history | Datos meteorológicos históricos (hasta 32 días) |
get_water_level | Nivel de río/lago + temperatura (BAFU) |
list_hydro_stations | Las más de 400 estaciones de monitoreo hidrológico |
get_water_history | Datos hidrológicos históricos |
🗺️ Geodatos / swisstopo (6 herramientas)
| Herramienta | Descripción |
|---|---|
geocode | Dirección suiza → coordenadas |
reverse_geocode | Coordenadas → dirección suiza |
search_places | Nombres de lugares suizos, montañas, lagos, accidentes geográficos |
get_solar_potential | Irradiación solar en tejados en una ubicación |
identify_location | Todas las capas de datos geográficos en un punto |
get_municipality | Información del municipio por nombre |
🏢 Empresas / ZEFIX (5 herramientas)
| Herramienta | Descripción |
|---|---|
search_companies | Búsqueda por nombre, cantón, forma jurídica |
get_company | Detalles completos de la empresa por ZEFIX ehraid |
search_companies_by_address | Empresas registradas en una dirección |
list_cantons | Los 26 cantones suizos |
list_legal_forms | AG, GmbH y todas las formas jurídicas suizas |
🎄 Festivos (3 herramientas)
| Herramienta | Descripción |
|---|---|
get_public_holidays | Festivos públicos suizos por año, opcionalmente filtrados por cantón |
get_school_holidays | Períodos de vacaciones escolares por año y cantón |
is_holiday_today | Verificación rápida si hoy es festivo |
🏛️ Parlamento (9 herramientas) — OpenParlData.ch
| Herramienta | Descripción |
|---|---|
search_parliament_business | Buscar asuntos políticos federales (proyectos de ley, mociones, preguntas) |
get_parliament_members | Listar miembros del parlamento por cantón, partido o actividad |
get_parliament_votes | Resultados de votaciones para un asunto específico |
get_session_schedule | Sesiones parlamentarias próximas/recientes |
search_parliament_speeches | Discursos de debate para un asunto |
get_politician_interests | Intereses y mandatos declarados de un miembro |
search_cantonal_affairs | Búsqueda en los 26 parlamentos cantonales |
get_parliamentary_documents | Documentos oficiales para un asunto |
get_committee_meetings | Agenda de reuniones de comités/comisiones |
🏔️ Avalanchas (2 herramientas)
| Herramienta | Descripción |
|---|---|
get_avalanche_bulletin | Boletín de avalanchas actual con niveles de peligro y enlaces PDF |
list_avalanche_regions | Las 22 regiones suizas de alerta de avalanchas |
💨 Calidad del aire (2 herramientas)
| Herramienta | Descripción |
|---|---|
list_air_quality_stations | Las 14 estaciones de monitoreo NABEL |
get_air_quality | Información de la estación, límites legales suizos (LRV) y enlaces de datos BAFU |
📮 Swiss Post (4 herramientas)
| Herramienta | Descripción |
|---|---|
lookup_postcode | PLZ → localidad, cantón, coordenadas |
search_postcode | Nombre de ciudad → códigos postales coincidentes |
list_postcodes_in_canton | Todos los códigos postales en un cantón |
track_parcel | Generar URL de seguimiento de Swiss Post para un paquete |
⚡ Precios de energía (3 herramientas)
| Herramienta | Descripción |
|---|---|
get_electricity_tariff | Tarifa de electricidad por municipio con desglose de componentes |
compare_electricity_tariffs | Comparar precios de electricidad entre municipios |
search_municipality_energy | Encontrar ID de municipio para consulta de tarifas |
📊 Estadísticas / BFS (3 herramientas)
| Herramienta | Descripción |
|---|---|
get_population | Población por cantón o municipio de BFS STATPOP |
search_statistics | Buscar conjuntos de datos BFS en opendata.swiss |
get_statistic | Obtener información detallada del conjunto de datos |
🏦 Tipos de cambio SNB (3 herramientas)
| Herramienta | Descripción |
|---|---|
list_currencies | Listar todas las monedas disponibles del Banco Nacional Suizo (SNB) |
get_exchange_rate | Obtener el tipo de cambio CHF actual para cualquier moneda |
get_exchange_rate_history | Obtener tipos de cambio mensuales históricos de CHF con filtrado por fecha |
♻️ Reciclaje / Recogida de residuos (3 herramientas)
| Herramienta | Descripción |
|---|---|
get_waste_collection | Próximas fechas de recogida de residuos por código postal de Zúrich y tipo de residuo |
list_waste_types | Listar todos los tipos de residuos admitidos con descripciones |
get_waste_calendar | Calendario completo de recogida de residuos para un código postal (próximas fechas) |
📰 Noticias suizas (2 herramientas)
| Herramienta | Descripción |
|---|---|
get_swiss_news | Últimos titulares suizos de SRF por categoría (Suiza/internacional/economía) |
search_swiss_news | Buscar noticias de SRF por palabra clave en todas las categorías |
🗳️ Votaciones (3 herramientas)
| Herramienta | Descripción |
|---|---|
get_voting_results | Resultados de votaciones populares suizas de datos abiertos de Basilea-Ciudad |
search_votes | Buscar votaciones populares por palabra clave (alemán/francés/italiano) |
get_vote_details | Desglose detallado por distrito de una votación específica |
🌊 Presas y embalses (3 herramientas)
| Herramienta | Descripción |
|---|---|
search_dams | Buscar presas federales suizas por nombre o palabra clave |
get_dams_by_canton | Listar todas las presas federales en un cantón |
get_dam_details | Información detallada sobre una presa específica (altura, volumen, propósito) |
🥾 Senderismo / Cierres de senderos (2 herramientas)
| Herramienta | Descripción |
|---|---|
get_trail_closures | Cierres de senderos y alertas de senderismo suizos de swisstopo |
get_trail_closures_nearby | Cierres de senderos cerca de coordenadas dadas |
🏠 Bienes raíces (3 herramientas)
| Herramienta | Descripción |
|---|---|
get_property_price_index | Índice de precios de propiedades suizas (BFS Immo-Monitoring) |
search_real_estate_data | Buscar conjuntos de datos de bienes raíces BFS en opendata.swiss |
get_rent_index | Índice de alquiler suizo y datos de costos de vivienda de BFS |
🚗 Tráfico / ASTRA (3 herramientas)
| Herramienta | Descripción |
|---|---|
get_traffic_count | Datos de estaciones de conteo de tráfico (ASTRA) — volúmenes diarios y proporción de tráfico pesado |
get_traffic_by_canton | Listar estaciones de conteo de tráfico ASTRA filtradas por cantón |
get_traffic_nearby | Encontrar estaciones de conteo de tráfico cerca de coordenadas dadas |
🌍 Terremotos / SED (3 herramientas)
| Herramienta | Descripción |
|---|---|
get_recent_earthquakes | Eventos sísmicos recientes en Suiza y alrededores del Servicio Sismológico Suizo (SED) de la ETH Zúrich |
get_earthquake_details | Detalles completos de un evento sísmico específico por ID de evento del SED |
search_earthquakes_by_location | Terremotos cerca de coordenadas dadas con radio, rango de tiempo y límite configurables |
❄️ Condiciones de nieve / SLF (3 herramientas)
| Herramienta | Descripción |
|---|---|
get_snow_conditions | Profundidad de nieve actual y nieve nueva (24 h) en toda Suiza de las estaciones IMIS del SLF, filtrable por cantón/altitud |
list_snow_stations | Las 307 estaciones de medición de nieve del SLF (IMIS automáticas + parcelas de estudio manuales) |
get_snow_measurements | Mediciones detalladas de nieve y meteorológicas para una estación específica del SLF |
Fuentes de datos
Todos los datos abiertos oficiales suizos — sin necesidad de claves API:
| Fuente | Datos | Documentación |
|---|---|---|
| transport.opendata.ch | SBB, PostBus, tranvías | Documentación API |
| api.existenz.ch | Meteorología de MeteoSwiss + hidrología de BAFU | Documentación API |
| api3.geo.admin.ch | Geodatos federales de swisstopo | Documentación API |
| zefix.admin.ch | Registro federal de empresas | Swagger |
| openholidaysapi.org | Festivos públicos y escolares suizos | Documentación API |
| OpenParlData.ch | Datos del Parlamento suizo — federal y cantonal (CC BY 4.0) | Documentación API |
| whiterisk.ch / aws.slf.ch | Boletines de avalanchas SLF/WSL | SLF |
| geo.admin.ch — BAFU/NABEL | Estaciones suizas de monitoreo de calidad del aire | BAFU NABEL |
| geo.admin.ch — swisstopo | Códigos postales suizos (Amtliches Ortschaftenverzeichnis) | geo.admin.ch |
| strompreis.elcom.admin.ch | Tarifas eléctricas de ElCom por municipio | ElCom |
| pxweb.bfs.admin.ch + opendata.swiss | Estadísticas de población BFS (STATPOP) + conjuntos de datos | BFS |
| data.snb.ch | Tipos de cambio CHF del Banco Nacional Suizo | Portal de datos SNB |
| openerz.metaodi.ch | Calendario de recogida de residuos de Zúrich (OpenERZ) | OpenERZ |
| srf.ch | Titulares de noticias suizas SRF | SRF |
| data.bs.ch | Resultados de votaciones populares de Basilea-Ciudad | Open Data BS |
| geo.admin.ch — SFOE | Registro federal suizo de presas | SFOE |
| geo.admin.ch — swisstopo | Cierres de senderos y alertas de senderismo en Suiza | swisstopo |
| pxweb.bfs.admin.ch | Precios de propiedades BFS + índice de alquiler | BFS vivienda |
| geo.admin.ch — ASTRA | Estaciones de conteo de tráfico + volúmenes diarios | ASTRA |
| arclink.ethz.ch | Terremotos del Servicio Sismológico Suizo (SED/ETH) | SED |
| measurement-api.slf.ch | Profundidad de nieve SLF + mediciones (IMIS + parcelas de estudio, CC BY 4.0) | SLF |
Desarrollo
# 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
Pruebas
npm test
Contribuciones
¡Agradecemos las contribuciones! mcp-swiss sigue un flujo de trabajo estricto basado en PR para mantener el código limpio y el CI siempre en verde.
Enlaces rápidos
-
CONTRIBUTING.md— guía completa para contribuidores:- Configuración del desarrollo (clonar, instalar, compilar, probar)
- Modelo de ramas (develop / main / ramas de características)
- Reglas estrictas del flujo de trabajo (sin pushes directos, siempre PRs, solo merge regular)
- Añadir un nuevo módulo (paso a paso con plantillas de código)
- Lista de verificación de integración (todos los archivos a actualizar)
- Estándares de código (TypeScript, sin
any, límite de respuesta de 50K, cero claves API)
-
RELEASING.md— proceso de lanzamiento para mantenedores:- Flujo de trabajo de lanzamiento paso a paso
- Lista de verificación previa al lanzamiento
- Estrategia de versiones (minor para funciones, patch para correcciones)
- Verificación posterior al lanzamiento
- Referencia del flujo de trabajo CI/CD (
ci.yml,release.yml,beta.yml,mcp-registry.yml)
Requisitos
- Node.js 20+
- No se necesitan claves API ni cuentas
Licencia
MIT — ver LICENSE