使用说明
数据-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服务器语义描述覆盖。 |
推荐工作流程
查找和查询数据集
- 使用
find_datasets使用希伯来语或英语术语。 - 使用
get_dataset_info或list_resources对于选定的数据集。 - 选择一个资源
datastore_active=true. - 使用
search_records和limit=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主机/源代码保护的单元覆盖率。