MCP服务器 是 AI Skill Hub 本期精选MCP工具之一。综合评分 8.0 分,整体质量较高。我们强烈推荐将其纳入你的 AI 工具库,帮助提升工作效率。
MCP服务器 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
MCP服务器 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
# 方式一:通过 Claude Code CLI 一键安装
claude skill install https://github.com/ondata/ckan-mcp-server
# 方式二:手动配置 claude_desktop_config.json
{
"mcpServers": {
"mcp---": {
"command": "npx",
"args": ["-y", "ckan-mcp-server"]
}
}
}
# 配置文件位置
# macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
# Windows: %APPDATA%/Claude/claude_desktop_config.json
# 安装后在 Claude 对话中直接使用 # 示例: 用户: 请帮我用 MCP服务器 执行以下任务... Claude: [自动调用 MCP服务器 MCP 工具处理请求] # 查看可用工具列表 # 在 Claude 中输入:"列出所有可用的 MCP 工具"
// claude_desktop_config.json 配置示例
{
"mcpServers": {
"mcp___": {
"command": "npx",
"args": ["-y", "ckan-mcp-server"],
"env": {
// "API_KEY": "your-api-key-here"
}
}
}
}
// 保存后重启 Claude Desktop 生效
ckan_find_relevant_datasets({
server_url: "https://www.dati.gov.it/opendata",
query: "mobilità urbana",
limit: 5
})
ckan_tag_list({
server_url: "https://www.dati.gov.it/opendata",
tag_query: "salute",
limit: 25
})
ckan_package_search({ server_url: "https://www.dati.gov.it/opendata", q: "incidenti stradali", fq: "issued:[2025-01-01T00:00:00Z TO 2025-12-31T23:59:59Z]" }) // → ~121 results (only datasets where publisher filled in issued)
The HTTP transport (TRANSPORT=http) is network-exposed and unauthenticated: any client that reaches POST /mcp can drive requests through it. To prevent SSRF abuse (e.g. a caller pointing server_url at internal hosts or cloud metadata), the HTTP transport refuses to start unless you set a domain allowlist:
| Variable | Effect |
|---|---|
CKAN_ALLOWED_DOMAINS | Comma-separated allowlist of hostnames the server may query (default-deny). **Required** to start the HTTP transport. Example: CKAN_ALLOWED_DOMAINS="www.dati.gov.it,dati.comune.messina.it" |
CKAN_HTTP_ALLOW_ALL=true | Explicit opt-out: start the HTTP transport **without** an allowlist (logs a security warning). Not recommended when network-exposed. |
The default stdio transport is unaffected — it stays open so you can query any portal locally. Regardless of allowlist, all requests are also validated against private/internal IP ranges, including hostnames that resolve to internal addresses (DNS-based SSRF, fixed in v0.4.108). The official Cloudflare Worker is sandboxed by the platform and does not require this setting.
The quickest way. Install the package globally and it's immediately available as a command:
npm install -g @aborruso/ckan-mcp-server
The server will be available as ckan-mcp-server, or you can run it without installing via:
npx @aborruso/ckan-mcp-server@latest
For development or if you want to run the latest unreleased code:
git clone https://github.com/ondata/ckan-mcp-server.git
cd ckan-mcp-server
npm install
npm run build
node dist/index.js
Thanks to @piersoft, you can also run the server via Docker:
git clone https://github.com/ondata/ckan-mcp-server.git
cd ckan-mcp-server
docker compose up --build -d
The MCP server will be available at http://localhost:3000/mcp. See docker/README.md for full details, including how to connect Claude Desktop to the container.
---
The skill folder lives at skills/ckan-mcp/ in this repository and is listed on skills.sh. Use the Skills CLI to install it:
```bash
npx skills add -g ondata/ckan-mcp-server --skill ckan-mcp
```bash
npm run build
These real-world examples demonstrate powerful Solr query combinations tested on the Italian open data portal (dati.gov.it):
Find healthcare datasets (tolerating spelling errors) modified in the last 6 months, prioritizing title matches:
ckan_package_search({
server_url: "https://www.dati.gov.it/opendata",
q: "(title:sanità~2^3 OR title:salute~2^3 OR notes:sanità~1) AND metadata_modified:[NOW-6MONTHS TO *]",
sort: "score desc, metadata_modified desc",
rows: 30
})
Techniques used:
sanità~2 - Fuzzy search with edit distance 2 (finds "sanita", "sanitá", minor typos)^3 - Boosts title matches 3x higher in relevance scoringNOW-6MONTHS - Dynamic date math for rolling time windowsResults: 949 datasets including hospital units, healthcare organizations, medical services
Environmental datasets where "inquinamento" and "aria" (air pollution) appear close together, excluding water-related datasets:
ckan_package_search({
server_url: "https://www.dati.gov.it/opendata",
q: "(notes:\"inquinamento aria\"~5 OR title:\"qualità aria\"~3) AND NOT (title:acqua OR title:mare)",
facet_field: ["organization", "res_format"],
rows: 25
})
Techniques used:
"inquinamento aria"~5 - Proximity search (words within 5 positions)~3 - Tighter proximity for title matchesNOT (title:acqua OR title:mare) - Exclude water/sea datasetsResults: 305 datasets
Regional datasets published in the last month that have at least one resource format declared:
ckan_package_search({
server_url: "https://www.dati.gov.it/opendata",
q: "organization:regione* AND metadata_created:[NOW-1MONTH TO *] AND res_format:*",
sort: "metadata_modified desc",
facet_field: ["organization"],
rows: 10
})
Techniques used:
regione* - Wildcard matches all regional organizationsres_format:* - Field existence check (has at least one resource format declared)NOW-1MONTH - Rolling 30-day windowResults: 293 datasets
Datasets from the Italian Ministry of Labour modified during 2025, with facets by format and tags:
ckan_package_search({
server_url: "https://www.dati.gov.it/opendata",
q: "organization:ministero-del-lavoro AND metadata_modified:[2025-01-01T00:00:00Z TO 2025-12-31T23:59:59Z]",
sort: "metadata_modified desc",
facet_field: ["res_format", "tags"],
rows: 10
})
Techniques used:
[2025-01-01T00:00:00Z TO 2025-12-31T23:59:59Z] - Explicit date range (full year)organization:ministero-del-lavoro - Filter by specific organizationResults: 83 datasets
ckan_group_search({
server_url: "https://www.dati.gov.it/opendata",
pattern: "ambiente"
})
Boolean Operators: AND, OR, NOT, +required, -excluded Wildcards: * (multiple chars), ? (single char) - Note: left truncation not supported Fuzzy: ~N (edit distance), e.g., health~2 Proximity: "phrase"~N (words within N positions) Boosting: ^N (relevance multiplier), e.g., title:water^2 Ranges:
[a TO b], e.g., num_resources:[5 TO 10]{a TO b}, e.g., num_resources:{0 TO 100}[2024-01-01T00:00:00Z TO *]Date Math: NOW, NOW-1YEAR, NOW-6MONTHS, NOW-7DAYS, NOW/DAY Field Existence: field:* (field exists), NOT field:* (field missing)
---
Add to your User Settings or .vscode/settings.json:
Using the hosted endpoint (no install):
{
"mcpServers": {
"ckan": {
"url": "https://ckan-mcp-server.andy-pr.workers.dev/mcp",
"type": "http"
}
}
}
Using local installation:
{
"mcpServers": {
"ckan": {
"command": "npx",
"args": ["@aborruso/ckan-mcp-server@latest"]
}
}
}
Wrong URL for Italian portal — use https://www.dati.gov.it/opendata (not https://dati.gov.it).
Connection error
Error: Server not found: https://example.gov
Verify the URL is reachable and use ckan_status_show to confirm the portal is responding.
No results — broaden your query or check what's available with facets:
ckan_package_search({
server_url: "https://www.dati.gov.it/opendata",
q: "*:*",
facet_field: ["tags", "organization"],
rows: 0
})
LLM uses external data when no results are found — when a tool returns no results, some LLMs (e.g. ChatGPT) may supplement the answer with information from their training data without warning. This is a known LLM behavior, not a server issue. To avoid it, instruct the model in your system prompt to only use data returned by the MCP tools and not rely on external sources.
---
ckan-mcp-server 是一个基于 Model Context Protocol (MCP) 构建的服务端程序,旨在为 AI 助手(如 Claude)提供与 CKAN 数据平台交互的能力。通过该服务,用户可以使用自然语言指令进行复杂的语义搜索,例如查找特定主题的数据集或查询相关的标签,从而将 AI 的理解能力与 CKAN 的数据检索能力完美结合。
在安全性方面,若使用 HTTP 传输模式���TRANSPORT=http),由于该模式是网络暴露且不带身份验证的,任何能访问 POST /mcp 接口的客户端都可以驱动请求。为了防止 SSRF(服务端请求伪造)攻击,例如调用者将 server_url 指向内部主机或云元数据服务,建议配置域名白名单以确保安全。
本项目提供三种安装方式:1. 通过 npm 全局安装或使用 npx 直接运行,这是最快捷的方式;2. 通过 Git 克隆源码并手动执行 npm install 和 build 进行构建,适用于开发环境或运行未发布的最新代码;3. 使用 Docker 进行容器化部署,通过 docker compose up 命令即可快速启动,服务将运行在 http://localhost:3000/mcp。
本服务支持高级查询功能,允许用户通过自然语言进行复杂的 Solr 查询。例如,你可以使用模糊搜索结合日期数学运算(Date Math)来查找特定时间段内修改过的医疗数据集,并利用 Boosting 技术提升标题匹配的权重。此外,它还支持通过自然语言查询特定的数据组(Groups),使数据检索更加智能化。
用户可以通过配置参数来执行特定的搜索任务,例如使用 ckan_group_search 函数通过模式匹配(pattern)来查找与环境相关的分组。在使用时,请确保正确配��� server_url 参数,以便服务能够准确连接到目标 CKAN 实例。
本项目的 API 接口支持 Solr 查询语法,包括布尔运算符(AND, OR, NOT, +required, -excluded)、通配符(* 代表多个字符,? 代表单个字符)、模糊搜索(使用 ~N 表示编辑距离)以及邻近搜索("phrase"~N)。此外,还支持使用 Boosting (^N) 来调整搜索结果的相关性权重。
针对常见问题,若在使用意大利开放数据门户时遇到 URL 错误,请确保使用 https://www.dati.gov.it/opendata;若遇到连接错误(Server not found),请检查 URL 可达性并使用 ckan_status_show 确认门户响应状态;若搜索无结果,建议尝试扩大查询范围或优化查询关键词。
高质量的MCP服务器实现
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。
经综合评估,MCP服务器 在MCP工具赛道中表现稳健,质量优秀。如果你已有明确的使用需求,可以直接上手体验;如果还在评估阶段,建议对比同类工具后再做决策。
| 原始名称 | ckan-mcp-server |
| 原始描述 | 开源MCP工具:MCP server for querying CKAN open data portals (package search, DataStore SQL, o。⭐55 · TypeScript |
| Topics | mcpckanapi-clienttypescript |
| GitHub | https://github.com/ondata/ckan-mcp-server |
| License | MIT |
| 语言 | TypeScript |
收录时间:2026-06-22 · 更新时间:2026-06-22 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端