GovData MCP

Un servidor MCP centralizado para obtener datos de los gobiernos de muchos países.

Documentación

GovData MCP

Un servidor de Model Context Protocol (MCP) que permite a los agentes de IA buscar, explorar y obtener conjuntos de datos abiertos de portales oficiales de datos gubernamentales. Una interfaz de herramientas unificada para Estados Unidos, Reino Unido, Canadá y Australia — con las particularidades de cada portal (migraciones de API, muros de autenticación, metadatos bilingües, indicadores DataStore obsoletos) absorbidas detrás de una capa de adaptadores común.

Diseñado para el flujo de trabajo típico de un agente: "¿Existe un conjunto de datos gubernamental para X?" → encontrar candidatos → inspeccionar los archivos → previsualizar filas u obtener un enlace de descarga y continuar.

Características principales

  • Cuatro portales nacionales, una interfaz. EE. UU. (data.gov v4 / DCAT), Reino Unido (data.gov.uk / CKAN), Canadá (open.canada.ca / CKAN), Australia (data.gov.au / CKAN + DataStore).
  • Económico en tokens por diseño. Las descripciones se limpian de HTML y se truncan, los resultados de búsqueda son resúmenes compactos y los archivos grandes nunca se incluyen en línea por accidente.
  • Vista previa a nivel de fila. Utiliza CKAN DataStore cuando está disponible (Australia) y recurre de forma transparente a leer el inicio de archivos CSV/TSV en todos los demás casos.
  • Modos de fallo aptos para agentes. Los errores se devuelven como texto accionable ("use get_download_link en su lugar", "reintente con dataset_id", "portales disponibles: …") — nunca rastreos de errores en bruto.
  • Registro extensible. Añadir otro portal basado en CKAN es una única entrada de configuración; los portales que no usan CKAN se conectan mediante una pequeña clase adaptadora.
  • Doble transporte. stdio para clientes locales (Claude Desktop, etc.), streamable-http sin estado para despliegue serverless (Google Cloud Run).

Portales compatibles

CódigoPortalAPIBúsquedaExploraciónVista previa de filasNotas
usdata.govdata.gov v4 (DCAT)Respaldo CSVRequiere clave gratuita de api.data.gov
ukdata.gov.ukCKANRespaldo CSVLas búsquedas de recursos necesitan el dataset_id padre
caopen.canada.caCKANRespaldo CSVTítulos bilingües normalizados al inglés
audata.gov.auCKAN + DataStore✅ DataStoreConsultas completas de filas con filtrado de texto

Requisitos

  • Python 3.11+
  • Una clave API de api.data.gov para el portal de EE. UU. (gratuita; los demás portales no necesitan credenciales)

Instalación

git clone https://github.com/YOUR_ORG/Gov-Stat-MCP-Server.git
cd Gov-Stat-MCP-Server

# pip
pip install -e ".[dev]"

# or conda
conda env create -f environment.yml
conda activate opendata-mcp

Copie .env.example a .env y establezca su clave:

DATAGOV_API_KEY=your-api-data-gov-key

Primeros pasos

Configuración estándar para la mayoría de los clientes MCP (transporte stdio):

{
  "mcpServers": {
    "govdata": {
      "command": "govdata-mcp",
      "env": {
        "DATAGOV_API_KEY": "your-api-data-gov-key"
      }
    }
  }
}
Claude Code
claude mcp add govdata -e DATAGOV_API_KEY=your-key -- govdata-mcp
Claude Desktop

Siga la guía de instalación de MCP y use la configuración estándar anterior. Nota: govdata-mcp debe estar en el PATH que usa Claude Desktop — proporcione una ruta absoluta al ejecutable dentro de su entorno virtual/conda si es necesario, por ejemplo /path/to/envs/mcp-env/bin/govdata-mcp.

Cursor / Windsurf / otros clientes de configuración JSON

Use la configuración estándar anterior en el archivo de ajustes MCP del cliente.

Transporte HTTP (servidor remoto / de larga ejecución)

Ejecute el servidor en modo HTTP:

MCP_TRANSPORT=http govdata-mcp

Luego apunte su cliente al endpoint:

{
  "mcpServers": {
    "govdata": {
      "url": "http://localhost:8080/mcp"
    }
  }
}

Herramientas

El flujo de agente previsto: list_portalssearch_datasetsget_datasetpreview_resource / fetch_resource / get_download_link.

Descubrimiento
  • list_portals

    • Descripción: Lista los portales gubernamentales de datos abiertos disponibles y sus capacidades.
    • Parámetros: Ninguno
    • Solo lectura: true
  • search_datasets

    • Descripción: Búsqueda de texto completo de conjuntos de datos en un portal. Devuelve resúmenes compactos con los ids de los conjuntos de datos.
    • Parámetros:
      • portal (cadena): Código del portal — us, uk, ca, au
      • query (cadena): Términos de búsqueda, p. ej. "air quality monitoring"
      • limit (número, opcional): Máximo de resultados (predeterminado 10, máximo 50)
      • org (cadena, opcional): Filtro por slug de editor/organización (portales CKAN)
      • format (cadena, opcional): Filtro por formato de recurso, p. ej. "CSV" (portales CKAN)
    • Solo lectura: true
Exploración
  • get_dataset

    • Descripción: Metadatos completos del conjunto de datos — organización, licencia, etiquetas, descripción y la lista de recursos descargables con sus ids, formatos y tamaños.
    • Parámetros:
      • portal (cadena): Código del portal
      • dataset_id (cadena): Id/slug del conjunto de datos de search_datasets
    • Solo lectura: true
  • preview_resource

    • Descripción: Previsualiza filas de un recurso tabular. Primero intenta con el DataStore del portal (conteo de filas + filtrado de texto); recurre a leer el inicio de archivos CSV/TSV. Los formatos no tabulares no se pueden previsualizar.
    • Parámetros:
      • portal (cadena): Código del portal
      • resource_id (cadena): Id del recurso de get_dataset
      • rows (número, opcional): Filas a devolver (predeterminado 20, máximo 100)
      • query (cadena, opcional): Filtro de filas por texto completo (solo recursos respaldados por DataStore)
      • dataset_id (cadena, opcional): Id del conjunto de datos padre — recomendado; obligatorio en uk
    • Solo lectura: true
Recuperación
  • fetch_resource

    • Descripción: Descarga un recurso de texto pequeño (CSV/JSON/XML/…) y devuelve su contenido en línea, truncado en un límite de tamaño en un límite de línea limpio. El contenido binario se rechaza con una indicación a la URL de descarga.
    • Parámetros:
      • portal (cadena): Código del portal
      • resource_id (cadena): Id del recurso de get_dataset
      • max_kb (número, opcional): Máximo de kilobytes a incluir en línea (predeterminado 256, máximo 512)
      • dataset_id (cadena, opcional): Id del conjunto de datos padre — recomendado; obligatorio en uk
    • Solo lectura: true
  • get_download_link

    • Descripción: Devuelve la URL de descarga directa, el formato y el tamaño de un recurso para que el agente pueda continuar por su cuenta. Funciona con cualquier formato, incluidos archivos grandes/binarios.
    • Parámetros:
      • portal (cadena): Código del portal
      • resource_id (cadena): Id del recurso de get_dataset
      • dataset_id (cadena, opcional): Id del conjunto de datos padre — recomendado; obligatorio en uk
    • Solo lectura: true

Configuración

Todos los ajustes son variables de entorno (o un archivo .env local):

VariablePredeterminadoDescripción
MCP_TRANSPORTstdiostdio (clientes locales) o http (servidor streamable-http)
PORT8080Puerto de escucha para el transporte HTTP (se inyecta automáticamente en Cloud Run)
DATAGOV_API_KEYClave de api.data.gov para el portal de EE. UU.; recurre a DEMO_KEY (~30 solicitudes/hora)
LOG_LEVELINFOVerbosidad del registro (siempre se escribe en stderr)
HTTP_TIMEOUT_SECONDS30Tiempo de espera para solicitudes salientes a portales
HTTP_MAX_RETRIES2Reintentos ante errores transitorios del portal (5xx / transporte), retroceso exponencial
SEARCH_DEFAULT_LIMIT10Número predeterminado de resultados de búsqueda
NOTES_TRUNCATE_CHARS200Longitud de truncamiento de descripciones en resúmenes de búsqueda
FETCH_MAX_BYTES524288Límite máximo para el contenido de recursos incluidos en línea

Docker

make docker-build          # build image
make docker-run            # run on :8080, exactly as Cloud Run would

La imagen ejecuta el transporte HTTP en modo sin estado y está lista para plataformas serverless (script de despliegue en Google Cloud Run incluido en deploy/).

Desarrollo

make run          # stdio mode
make run-http     # HTTP mode on :8080
make inspect      # MCP Inspector interactive UI (requires Node.js)
make test         # offline unit tests
make test-live    # live end-to-end tests against all four real portals
make lint         # ruff check + format check

La suite en vivo (pytest -m live) verifica la cadena completa de búsqueda → exploración → previsualización → obtención por país, más el comportamiento específico de cada portal (normalización bilingüe de Canadá, búsqueda de recursos con ámbito de conjunto de datos en el Reino Unido, rutas DataStore de Australia). Ejecútela antes de desplegar — los portales gubernamentales cambian sin previo aviso.

Arquitectura

src/govdata_mcp/
├── server.py            # FastMCP instance + tool registration
├── config.py            # env-driven settings
├── ckan/                # generic async CKAN client, models, typed errors
├── portals/
│   ├── registry.py      # portal registry — single source of truth
│   ├── base.py          # Portal config + default (vanilla CKAN) adapter
│   ├── us.py            # data.gov v4 DCAT adapter (auth, cursor paging)
│   ├── uk.py            # dataset-scoped resource lookup
│   └── ca.py            # bilingual metadata normalization
├── tools/               # MCP tools: search, explore, fetch
└── utils/               # formatting (token economy), CSV-head preview

Añadir un portal: para un portal CKAN estándar, añada una entrada Portal(...) a portals/registry.py — listo. Para portales con particularidades, cree una subclase de PortalAdapter y sobrescriba los enganches específicos (normalize_dataset, build_search_params) o, para APIs que no usan CKAN, los propios métodos de operación (consulte us.py para un adaptador personalizado completo).

TODO / Hoja de ruta

  • 🇨🇳 Soporte del portal de China — no existe una API nacional unificada de datos abiertos; previsto como adaptador personalizado dirigido a los datos de la Oficina Nacional de Estadísticas (mediante un paquete de estadísticas existente) con degradación gradual.
  • 🇯🇵 Soporte del portal de Japón — e-Gov Data Portal (data.e-gov.go.jp) es compatible con CKAN y debería encajar en el registro existente; la API de estadísticas e-Stat más rica (autenticación con app-ID, metadatos en japonés) está prevista como adaptador dedicado.
  • Suite de pruebas unitarias sin conexión con fixtures de portal grabados (respx) para CI
  • Tutorial de despliegue en Google Cloud Run (el servicio está listo para contenedores; script en deploy/)
  • Filtros de búsqueda de editor/formato v4 de EE. UU. (pendiente de documentación de la API)
  • Más portales CKAN (Nueva Zelanda data.govt.nz es una adición casi gratuita)
  • Detección de tipo de contenido para rescatar formatos de recurso mal etiquetados

Notas de seguridad

  • Este servidor es de solo lectura hacia los portales — ninguna herramienta puede crear, modificar o eliminar nada.
  • fetch_resource y preview_resource descargan desde URL contenidas en los metadatos del portal; el contenido se limita en tamaño y se verifica que no sea binario antes de devolverse al modelo, pero trate el contenido obtenido como entrada no confiable.
  • El servidor en sí no tiene autenticación. Para despliegue remoto, colóquelo detrás de un proxy autenticador o autenticación a nivel de plataforma (p. ej. Cloud Run con --no-allow-unauthenticated).
  • Mantenga DATAGOV_API_KEY en .env / gestor de secretos — nunca lo confirme en el repositorio.

Licencia

MIT