Data.gov.il

Accede a los datos abiertos del gobierno israelí desde el portal data.gov.il.

Documentación

gov-mcp

data-gov-il-mcp

Servidor Model Context Protocol (MCP) de nivel producción para Datos Abiertos del Gobierno de Israel de data.gov.il.

Este servidor brinda a clientes compatibles con MCP acceso estructurado a datasets, recursos, etiquetas, organizaciones y registros tabulares del gobierno israelí a través de la API oficial CKAN. Está escrito en TypeScript, valida entradas y salidas con Zod, devuelve respuestas de herramientas en formato JSON primero y admite tanto stdio local como transporte remoto Streamable HTTP.

Aspectos destacados

ÁreaEstado
Herramientas MCP9 herramientas por defecto, 10 con Sampling opcional habilitado
Recursos MCP5 recursos estáticos + 1 plantilla de recurso de dataset
Indicaciones MCP3 indicaciones de dominio con autocompletado de argumentos
DescubrimientoInstantánea de catálogo en memoria con normalización de hebreo, coincidencia difusa, clasificación de etiquetas y co-ocurrencia
Transportesstdio y Streamable HTTP
Autenticaciónnone, autenticación bearer con clave API, OAuth 2.1 JWT/JWKS
Refuerzo HTTPHelmet, CORS, limitación de tasa, IDs de solicitud, validación de Host/Origin
RespuestasstructuredContent más JSON idéntico en content[0].text
Configuración de ejecuciónImpulsada por entorno, validada al inicio con Zod

Inicio rápido

Claude Desktop / Stdio local

Usa el paquete publicado directamente:

{
  "mcpServers": {
    "data-gov-il": {
      "command": "npx",
      "args": ["-y", "data-gov-il-mcp"]
    }
  }
}

Streamable HTTP

npm install -g data-gov-il-mcp
data-gov-il-mcp-http

Luego configura tu cliente MCP:

{
  "mcpServers": {
    "data-gov-il": {
      "url": "http://localhost:3664/mcp"
    }
  }
}

Docker

docker run -p 3664:3664 ghcr.io/davidosherproceed/data-gov-il-mcp:latest

Para desarrollo local:

npm install
npm run build
npm run start:stdio
# or
npm run start:http

Capa de descubrimiento de catálogo

El servidor incluye una instantánea de catálogo confirmada en src/data/catalog/catalog.snapshot.json. La instantánea se genera a partir de data.gov.il y se incluye en la compilación. Al iniciar, se valida y se indexa en memoria.

La capa de descubrimiento impulsa:

  • find_datasets búsqueda primero en catálogo con respaldo CKAN en vivo.
  • list_all_datasets enumeración local instantánea con filtro de organización opcional.
  • list_organizations lista local instantánea de organizaciones con recuentos de datasets.
  • list_available_tags y search_tags a partir de datos reales de etiquetas/facetas CKAN.
  • Autocompletados dinámicos para datagov://dataset/{id}.
  • Recursos datagov://tags y datagov://catalog/stats.

Incluye:

  • Normalización de hebreo, incluida la eliminación de nikud y la normalización de letras finales.
  • Indexación de tokenización y trigramas para coincidencias difusas y tolerancia a errores tipográficos.
  • Mapas de datasets, etiquetas y organizaciones.
  • Índices de etiqueta a dataset y de organización a dataset.
  • Co-ocurrencia de etiquetas para sugerencias de etiquetas relacionadas.
  • Clasificación ponderada entre señales exactas, de token, etiqueta, organización y difusas.

Actualiza la instantánea:

npm run catalog:refresh
npm run build

Un flujo de trabajo programado de GitHub Actions (.github/workflows/catalog-refresh.yml) actualiza la instantánea y abre un PR cuando cambian los datos del catálogo.

Más detalle: docs/catalog-discovery-layer.md.

Herramientas

Todas las respuestas exitosas de herramientas devuelven:

  • structuredContent: el objeto JSON tipado.
  • content[0].text: el mismo objeto serializado como JSON para clientes solo de texto.

Herramientas predeterminadas

HerramientaPropósito
find_datasetsHerramienta principal de descubrimiento de datasets. Usa primero el catálogo local y luego el respaldo CKAN en vivo cuando sea necesario.
get_dataset_infoMetadatos CKAN completos de un dataset, incluyendo etiquetas y recursos.
list_all_datasetsResúmenes instantáneos de datasets respaldados por catálogo, opcionalmente filtrados por organización.
list_resourcesLista archivos/datastores dentro de un dataset e identifica recursos datastore_active.
search_recordsConsulta registros de datastore CKAN con búsqueda de texto completo, filtros, campos, ordenamiento, paginación y valores distintos.
list_organizationsOrganizaciones respaldadas por catálogo con títulos en hebreo y recuentos de datasets.
get_organization_infoMetadatos de organización CKAN en vivo.
list_available_tagsEtiquetas de catálogo clasificadas con recuentos de datasets y etiquetas relacionadas.
search_tagsBúsqueda difusa de etiquetas con sugerencias de etiquetas relacionadas.

Herramientas opcionales

HerramientaHabilitada porPropósito
summarize_datasetMCP_ENABLE_SAMPLING=trueSolicita MCP Sampling a clientes compatibles para producir un resumen legible del dataset. Recurre a los metadatos cuando Sampling no está disponible.

Elicitación en find_datasets

find_datasets puede exponer opcionalmente un parámetro interactive:

{
  "query": "תחבורה",
  "interactive": true
}

Esto solo se registra cuando:

MCP_ENABLE_ELICITATION=true

Cuando está habilitado, los clientes compatibles pueden mostrar un formulario de aclaración para búsquedas amplias. Por ejemplo, el servidor puede pedir al usuario que acote muchos datasets coincidentes por organización publicadora. Si el cliente no admite Elicitación, el usuario la rechaza o la solicitud expira, la herramienta recurre a los resultados de búsqueda normales.

Esto está deshabilitado por defecto porque el soporte de clientes MCP varía.

Recursos

URITipoDescripción
datagov://organizationsJSON estáticoLista de organizaciones de CKAN, en caché.
datagov://tagsJSON estáticoEtiquetas clasificadas de la instantánea de catálogo confirmada.
datagov://featuredJSON estáticoDatasets de alto valor curados con valores resource_id listos para usar y esquemas de campos.
datagov://guideTexto estáticoGuía de uso de herramientas, recursos y flujos de trabajo recomendados.
datagov://catalog/statsJSON estáticoMetadatos de la instantánea: hora de generación, recuento de datasets, recuento de etiquetas, recuento de organizaciones, principales organizaciones.
datagov://dataset/{id}Plantilla JSONMetadatos completos del dataset por slug o ID. Incluye autocompletados dinámicos y una lista de recursos respaldada por catálogo.

El servidor también implementa suscripciones a recursos de forma mínima y conforme a estándares:

  • Anuncia resources.subscribe.
  • Gestiona resources/subscribe y resources/unsubscribe.
  • Envía notifications/resources/updated solo para recursos a los que un cliente se haya suscrito.
  • No consulta CKAN en tiempo real.

Indicaciones

IndicaciónArgumentoPropósito
food-nutrition-analysisanalysis_typePrecios de alimentos, nutrición, kosher, seguridad, importación/exportación.
environmental-sustainability-analysisanalysis_focusCalidad del aire, edificios verdes, residuos, agua, sitios contaminados.
real-estate-market-analysismarket_focusVivienda, renovación urbana, vivienda subsidiada, análisis de ciudad/propiedades.

Los argumentos de las indicaciones usan autocompletados MCP. Las sugerencias de enfoque de dominio están curadas y los autocompletados de organizaciones están respaldados por catálogo.

Funciones opcionales de clientes MCP

Estas funciones están desactivadas por defecto. Actívalas solo cuando tu cliente MCP de destino las admita y quieras que el servidor las exponga.

VariablePredeterminadoEfecto
MCP_ENABLE_ELICITATIONfalseAgrega interactive a find_datasets y permite formularios de aclaración iniciados por el servidor. Funciona en clientes como Cursor y Claude Code.
MCP_ENABLE_SAMPLINGfalseRegistra summarize_dataset, que solicita generación de modelos del lado del cliente mediante MCP Sampling.

El soporte de clientes varía:

  • Cursor admite Elicitación, pero actualmente no expone Sampling.
  • Claude Code admite Elicitación en versiones recientes.
  • Claude Desktop admite muchas funciones de MCP, pero el soporte de Elicitación no es confiable/disponible.
  • La disponibilidad de Sampling varía; el servidor siempre recurre de forma segura.

Configuración

Copia .env.example a .env:

cp .env.example .env

Núcleo

VariablePredeterminadoDescripción
TRANSPORTstdioTransporte predeterminado al usar el punto de entrada genérico. También hay binarios dedicados disponibles.
PORT3664Puerto HTTP.
HOST0.0.0.0Host de enlace HTTP.
CORS_ORIGIN*Orígenes CORS permitidos. Evita el comodín en implementaciones de navegador en producción.
LOG_LEVELinfofatal, error, warn, info, debug o trace.
NODE_ENVproductiondevelopment, production o test.

CKAN

VariablePredeterminadoDescripción
CKAN_BASE_URLhttps://data.gov.il/api/3/actionURL base de la API de acciones CKAN.
CKAN_TIMEOUT_MS10000Tiempo de espera predeterminado de solicitudes CKAN.
CKAN_SEARCH_TIMEOUT_MS15000Tiempo de espera para solicitudes más pesadas de datastore/búsqueda.
CACHE_TTL_MS300000TTL de caché predeterminado.
CACHE_MAX_ITEMS500Máximo de entradas por caché en memoria.

Refuerzo HTTP

VariablePredeterminadoDescripción
TRUST_PROXYfalseConfiar en encabezados de proxy inverso. Configúralo cuando estés detrás de nginx/Caddy/ALB.
RATE_LIMIT_WINDOW_MS60000Ventana de limitación de tasa. Configura 0 para deshabilitar.
RATE_LIMIT_MAX120Solicitudes por IP por ventana. Configura 0 para deshabilitar.
ALLOWED_HOSTSvacíoLista blanca de hosts para protección contra rebinding de DNS. Por defecto usa hosts de loopback/locales cuando no está configurada.
ALLOWED_ORIGINSvacíoLista blanca de orígenes de navegador. Recurre a CORS_ORIGIN cuando corresponde.

Autenticación

VariablePredeterminadoDescripción
AUTH_MODEnonenone, apikey o oauth.
API_KEYSvacíoTokens bearer separados por comas para AUTH_MODE=apikey.
OAUTH_ISSUERsin configurarEmisor JWT esperado para AUTH_MODE=oauth.
OAUTH_AUDIENCEsin configurarAudiencia JWT esperada para AUTH_MODE=oauth.
OAUTH_JWKS_URIsin configurarURL JWKS para verificación JWT.
OAUTH_RESOURCE_SERVERsin configurarURL canónica de recurso MCP para metadatos de recursos protegidos por OAuth. Generalmente incluye /mcp.

Identidad del servicio

VariablePredeterminadoDescripción
SERVICE_NAMEpaquete/servidor predeterminadoAnulación del nombre del servidor MCP.
SERVICE_VERSIONversión del paqueteAnulación de la versión del servidor MCP.
SERVICE_DESCRIPTIONdescripción integradaAnulación de la descripción semántica del servidor MCP.

Flujos de trabajo recomendados

Encontrar y consultar un dataset

  1. Usa find_datasets con términos naturales en hebreo o inglés.
  2. Usa get_dataset_info o list_resources para un dataset elegido.
  3. Elige un recurso con datastore_active=true.
  4. Usa search_records con limit=5 primero para inspeccionar los campos.
  5. Agrega filters, fields, sort, distinct o paginación según sea necesario.

Ejemplo de flujo:

find_datasets({ "query": "מחיר למשתכן" })
get_dataset_info({ "dataset": "mechir-lamishtaken" })
search_records({
  "resource_id": "7c8255d0-49ef-49db-8904-4cf917586031",
  "limit": 5,
  "include_total": true
})

Descubrir etiquetas

search_tags({ "keyword": "דיור", "limit": 5 })
find_datasets({ "query": "תחבורה", "tags": "תחבורה ציבורית" })

Usar descubrimiento interactivo

Requiere:

MCP_ENABLE_ELICITATION=true

Luego un agente puede llamar:

find_datasets({ "query": "תחבורה", "interactive": true })

Los clientes compatibles pueden mostrar un formulario pidiendo al usuario que acote los resultados.

Usar resúmenes del lado del cliente

Requiere:

MCP_ENABLE_SAMPLING=true

Luego:

summarize_dataset({ "dataset": "mechir-lamishtaken", "language": "he" })

Si Sampling no está disponible, la herramienta devuelve los metadatos del dataset y sampling.used=false.

Desarrollo

npm install

# Type-check
npm run typecheck

# Lint
npm run lint

# Test
npm test

# Build
npm run build

# Refresh local catalog snapshot
npm run catalog:refresh

Ejecuta localmente:

# stdio
npm run build
npm run start:stdio

# HTTP
npm run build
npm run start:http

Habilita funciones opcionales localmente:

MCP_ENABLE_ELICITATION=true MCP_ENABLE_SAMPLING=true npm run start:http

En PowerShell:

$env:MCP_ENABLE_ELICITATION="true"
$env:MCP_ENABLE_SAMPLING="true"
npm run start:http

Estructura del proyecto

src/
  auth/           Authentication providers and Express middleware
  bin/            stdio and HTTP entry points
  cache/          In-memory TTL/LRU cache
  catalog/        Snapshot validation, indexing, fuzzy search, CatalogService
  ckan/           Typed CKAN API client and CKAN response types
  config/         Zod env config, constants, server identity
  core/           Dependency container, MCP server factory, lifecycle
  data/catalog/   Committed catalog snapshot artifact
  formatting/     JSON response builders and guidance text
  observability/  Pino logger
  prompts/        MCP prompt definitions, templates, registration
  resources/      MCP resources, templates, subscriptions
  services/       Domain services for CKAN data access
  tools/          MCP tool definitions and Zod schemas
  transports/     stdio and Streamable HTTP transports
tests/
  fixtures/       Test fixtures
  unit/           Unit tests
scripts/
  refresh-catalog.ts
docs/
  catalog-discovery-layer.md
  MIGRATION.md

Docker

docker build -t data-gov-il-mcp .
docker run -p 3664:3664 data-gov-il-mcp

Con funciones opcionales:

docker run -p 3664:3664 \
  -e MCP_ENABLE_ELICITATION=true \
  -e MCP_ENABLE_SAMPLING=true \
  data-gov-il-mcp

Calidad

Se espera que el proyecto pase:

npm run typecheck
npm run lint
npm test
npm run build

La implementación actual incluye cobertura de pruebas unitarias para análisis de entorno, proveedores de autenticación, errores CKAN, caché, formato, lógica de normalización de texto/difusa/índice/búsqueda del catálogo, validación de instantáneas, servicios, recursos, suscripciones y protección HTTP Host/Origin.

Licencia

MIT