政府数据模型协议服务器

为以色列政府开放数据提供生产级Model Context Protocol (MCP)服务器,支持结构化访问数据集、资源、标签和组织。

  • by DavidOsherdiagnostica
  • TypeScript
  • 混合部署
  • 110 星标
  • 更新于
在 GitHub 查看 DavidOsherProceed/data-gov-il-mcp

使用说明

数据-gov-il-mcp

生产级 模型上下文协议(MCP) 以色列政府开放数据服务器 数据.gov.il.

该服务器通过官方CKAN API为兼容MCP的客户端提供对以色列政府数据集、资源、标签、组织和表格记录的结构化访问。它是用TypeScript编写的,使用Zod验证输入和输出,返回JSON优先的工具响应,并支持本地 stdio 以及远程流式HTTP传输。

亮点

区域 状态
MCP工具 默认情况下有9个工具,10个工具启用了可选采样
MCP资源 5个静态资源+1个数据集资源模板
MCP提示 3个带参数完成的域提示
发现 具有希伯来语规范化、模糊匹配、标签排名和共现的内存目录快照
运输 stdio 和流式HTTP
认证 none,API密钥承载身份验证,OAuth 2.1 JWT/JWKS
HTTP强化 头盔、CORS、速率限制、请求ID、主机/源验证
答复 structuredContent 加上相同的JSON content[0].text
运行时配置 环境驱动,在启动时使用Zod进行验证

快速开始

克劳德桌面/本地标准

直接使用已发布的包:

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

流式HTTP

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

然后配置您的MCP客户端:

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

码头工人

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

对于当地发展:

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

目录发现层

服务器附带了一个已提交的目录快照,位于 src/data/catalog/catalog.snapshot.json。快照是从data.gov.il生成的,并捆绑到构建中。启动时,它会在内存中进行验证和索引。

发现层具有以下功能:

  • find_datasets 使用实时CKAN回退进行目录优先搜索。
  • list_all_datasets 具有可选组织筛选器的即时本地枚举。
  • list_organizations 包含数据集计数的即时本地组织列表。
  • list_available_tags 和 search_tags 从真实的CKAN标签/面数据中提取。
  • 动态完井 datagov://dataset/{id}.
  • datagov://tags 和 datagov://catalog/stats 资源。

它包括:

  • 希伯来语规范化,包括去除尼库德语和最终字母规范化。
  • 用于模糊匹配和拼写容差的标记化和三元组索引。
  • 数据集、标签和组织图。
  • 标记到数据集和组织到数据集索引。
  • 标签共现以获得相关标签建议。
  • 对精确、标记、标签、组织和模糊信号进行加权排名。

刷新快照:

npm run catalog:refresh
npm run build

计划好的GitHub操作工作流(.github/workflows/catalog-refresh.yml)当目录数据更改时,刷新快照并打开PR。

更多细节: docs/catalog-discovery-layer.md.

工具

所有成功的工具响应均返回:

  • structuredContent:键入的JSON对象。
  • content[0].text:对于纯文本客户端,将同一对象序列化为JSON。

默认工具

工具 目的
find_datasets 主要数据集发现工具。首先使用本地目录,然后在需要时使用实时CKAN回退。
get_dataset_info 数据集的完整CKAN元数据,包括标签和资源。
list_all_datasets 即时目录支持的数据集摘要,可选择按组织过滤。
list_resources 列出数据集中的文件/数据存储并标识 datastore_active 资源。
search_records 使用全文搜索、筛选器、字段、排序、分页和不同值查询CKAN数据存储记录。
list_organizations 目录支持具有希伯来语标题和数据集计数的组织。
get_organization_info 实时CKAN组织元数据。
list_available_tags 使用数据集计数和相关标记对目录标记进行排序。
search_tags 带有相关标签建议的模糊标签搜索。

可选工具

工具 启用 目的
summarize_dataset MCP_ENABLE_SAMPLING=true 从兼容客户端请求MCP采样以生成人类可读的数据集摘要。当采样不可用时,返回元数据。

激发 find_datasets

find_datasets 可以选择性地暴露 interactive 参数:

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

只有在以下情况下才会注册:

MCP_ENABLE_ELICITATION=true

启用后,兼容的客户端可能会显示一个用于广泛搜索的澄清表单。例如,服务器可以要求用户按发布者组织缩小许多匹配的数据集。如果客户端不支持Elicitation、用户拒绝或请求超时,该工具将返回正常搜索结果。

默认情况下,这是禁用的,因为MCP客户端支持各不相同。

资源

URI 类型 描述
datagov://organizations 静态JSON 来自CKAN的组织列表,已缓存。
datagov://tags 静态JSON 已提交目录快照中的已排序标签。
datagov://featured 静态JSON 整理好的高价值数据集,随时可用 resource_id 值和字段模式。
datagov://guide 静态文本 工具、资源和推荐工作流的使用指南。
datagov://catalog/stats 静态JSON 快照元数据:生成时间、数据集计数、标签计数、组织计数、顶级组织。
datagov://dataset/{id} Template JSON 按数据集段或ID列出完整的数据集元数据。包括动态补全和目录支持的资源列表。

服务器还以符合最低标准的方式实现资源订阅:

  • 展现 resources.subscribe.
  • 手柄 resources/subscribe 和 resources/unsubscribe.
  • 发送 notifications/resources/updated 仅适用于客户端订阅的资源。
  • 不实时轮询CKAN。

提示

提示 论点 目的
food-nutrition-analysis analysis_type 食品价格、营养、犹太洁食、安全、进出口。
environmental-sustainability-analysis analysis_focus 空气质量、绿色建筑、废物、水、污染场地。
real-estate-market-analysis market_focus 住房、城市更新、补贴住房、城市/房产分析。

提示参数使用MCP补全。对领域重点建议进行策划,并对组织完成情况进行目录支持。

可选MCP客户端功能

默认情况下,这些功能处于关闭状态。仅当您的目标MCP客户端支持它们并且您希望服务器公开它们时,才启用它们。

变量 默认值 效果
MCP_ENABLE_ELICITATION false 添加 interactive 到 find_datasets 并允许服务器发起澄清表格。适用于Cursor和Claude Code等客户端。
MCP_ENABLE_SAMPLING false 登记簿 summarize_dataset,请求通过MCP采样生成客户端模型。

客户支持不同:

  • Cursor支持启发式,但目前不公开采样。
  • Claude Code在最新版本中支持Elicitation。
  • Claude Desktop支持许多MCP功能,但Elicitation支持不可靠/不可用。
  • 采样可用性各不相同;服务器总是安全地回退。

配置

复制 .env.example 到 .env:

cp .env.example .env

核心

变量 默认值 描述
TRANSPORT stdio 使用通用入口点时的默认传输。专用二进制文件也可用。
PORT 3664 HTTP端口
HOST 0.0.0.0 HTTP绑定主机。
CORS_ORIGIN * 允许的CORS来源。在生产浏览器部署中避免使用通配符。
LOG_LEVEL info fatal, error, warn, info, debug,或 trace.
NODE_ENV production development, production,或 test.

CKAN

变量 默认值 描述
CKAN_BASE_URL https://data.gov.il/api/3/action CKAN 动作 API 基础 URL。
CKAN_TIMEOUT_MS 10000 默认CKAN请求超时。
CKAN_SEARCH_TIMEOUT_MS 15000 较重的数据存储/搜索请求超时。
CACHE_TTL_MS 300000 默认缓存TTL。
CACHE_MAX_ITEMS 500 每个内存缓存的最大条目数。

HTTP强化

变量 默认值 描述
TRUST_PROXY false 信任反向代理标头。设置在nginx/Caddy/ALB后面。
RATE_LIMIT_WINDOW_MS 60000 速率限制窗口。集 0 禁用。
RATE_LIMIT_MAX 120 每个IP每个窗口的请求数。集 0 禁用。
ALLOWED_HOSTS empty DNS重新绑定保护的主机分配列表。未设置时默认为环回/本地主机。
ALLOWED_ORIGINS empty 浏览器源代码列表。回落到 CORS_ORIGIN 在适当的时候。

认证

变量 默认值 描述
AUTH_MODE none none, apikey,或 oauth.
API_KEYS 空 逗号分隔的承载令牌 AUTH_MODE=apikey.
OAUTH_ISSUER unset 预期的JWT发行人 AUTH_MODE=oauth.
OAUTH_AUDIENCE 未设置 预计JWT观众 AUTH_MODE=oauth.
OAUTH_JWKS_URI 未设置 JWT验证的JWKS URL。
OAUTH_RESOURCE_SERVER unset OAuth保护的资源元数据的规范MCP资源URL。通常包括 /mcp.

服务标识

变量 默认值 描述
SERVICE_NAME 包/服务器默认值 MCP服务器名称覆盖。
SERVICE_VERSION 包版本 MCP服务器版本覆盖。
SERVICE_DESCRIPTION 内置描述 MCP服务器语义描述覆盖。

推荐工作流程

查找和查询数据集

  1. 使用 find_datasets 使用希伯来语或英语术语。
  2. 使用 get_dataset_info 或 list_resources 对于选定的数据集。
  3. 选择一个资源 datastore_active=true.
  4. 使用 search_records 和 limit=5 首先检查现场。
  5. 添加 filters, fields, sort, distinct,或根据需要进行分页。

示例流程:

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

发现标签

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

使用交互式发现

要求:

MCP_ENABLE_ELICITATION=true

然后,代理人可以致电:

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

兼容的客户端可能会显示一个表单,要求用户缩小结果范围。

使用客户端摘要

要求:

MCP_ENABLE_SAMPLING=true

然后:

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

如果采样不可用,该工具将返回数据集元数据和 sampling.used=false.

发展

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

在本地运行:

# stdio
npm run build
npm run start:stdio

# HTTP
npm run build
npm run start:http

在本地启用可选功能:

MCP_ENABLE_ELICITATION=true MCP_ENABLE_SAMPLING=true npm run start:http

在PowerShell上:

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

项目结构

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 build -t data-gov-il-mcp .
docker run -p 3664:3664 data-gov-il-mcp

具有可选功能:

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

质量

该项目预计将通过:

npm run typecheck
npm run lint
npm test
npm run build

当前的实现包括环境解析、身份验证提供者、CKAN错误、缓存、格式化、目录文本规范化/模糊/索引/搜索逻辑、快照验证、服务、资源、订阅和HTTP主机/源代码保护的单元覆盖率。

许可证

麻省理工学院