MCP server for interacting with CKAN open data portals
MCPpedia last refreshed this data
io.github.aborruso/ckan-mcp-server is an MCP server that MCP server for interacting with CKAN open data portals. Its tool list has not been published yet over stdio and http, requires no API key, and scores 92/100 on MCPpedia's security, maintenance and efficiency rubric.
Config is the same across clients - only the file and path differ.
{
"mcpServers": {
"ckan": {
"url": "https://ckan-mcp-server.andy-pr.workers.dev/mcp"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
MCP server for interacting with CKAN open data portals
Run this in your terminal to verify the server starts. Then let us know if it worked - your result helps other developers.
npx -y '@aborruso/ckan-mcp-server' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories - click any category to see the underlying evidence.
ckan-mcp-server: DataStore Table UI resource does not validate postMessage origin (in) and posts to targetOrigin "*" (out)
## Summary The MCP Apps UI resource (an interactive DataStore table rendered in the host's webview/iframe) communicates with its parent via `postMessage`. Its inbound `message` listener performs no `event.origin` validation, and its outbound messages are sent with target origin `'*'`. Any window/frame able to reach the document can inject data into the table and interfere with the MCP UI handshake, and the UI's own JSON-RPC messages are broadcast without an origin restriction. ## Affected code
@aborruso/ckan-mcp-server has SSRF via DNS-name → internal IP — incomplete fix of CVE-2026-53509
## Summary The SSRF guard `validateServerUrl` (added for CVE-2026-33060, extended for CVE-2026-53509) validates only the **hostname string** and never resolves DNS. Any caller-supplied `server_url` whose hostname *resolves* to an internal address passes the guard, so the server issues requests to **loopback and cloud metadata (`169.254.169.254`)**. This is a third bypass of the same guard, still present in the current latest **0.4.107**, and it reaches IMDS — strictly more than CVE-2026-53509, w
CKAN MCP Server: Cache-key canonicalization collision enables cache confusion / poisoning
## Summary The response cache derives its key from an ambiguous string serialization of the request parameters. `canonicalizeParams` joins sorted `${key}=${value}` pairs with `&` and does not escape `&`, `=`, or the `|` field separators used in `buildCacheKey`. Two **different** logical parameter sets can therefore serialize to the **same** key and share one cache entry. Because the cached value is whatever the upstream returned for whichever request populated the entry first, an attacker can p
CKAN MCP Server: Information disclosure via verbose error reflection
## Summary Error paths reflect raw upstream response bodies and internal exception messages back to the caller instead of a sanitized, generic message. When the server is pointed at (or redirected/SSRF'd to) a host that returns a non-CKAN response, or when an internal exception occurs, the caller receives verbatim upstream content and internal detail (hostnames, internal IPs, DB errors, stack fragments). ## Affected code `src/utils/http.ts` — the entire decoded upstream body is embedded in th
CKAN MCP Server: MQA server allowlist bypass via unanchored regex (`isValidMqaServer`)
## Summary The `ckan_get_mqa_quality` and `ckan_get_mqa_quality_details` tools restrict their `server_url` argument to `dati.gov.it` via a regular expression. The regex is anchored only at the start and places no boundary after the host, so any URL whose host merely **begins with** `dati.gov.it` — or that uses `dati.gov.it` as URL *userinfo* before an `@` — passes validation while actually targeting an attacker-controlled host. ## Affected code ```js // src/tools/quality.ts const ALLOWED_SERV
Click any tool to inspect its schema.
Be the first to review
Have you used this server?
Share your experience - it helps other developers decide.
Sign in to write a review.
Others in data
Token-efficient database MCP server for PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, SQLite
Manage Supabase projects — databases, auth, storage, and edge functions
Firecrawl, the context API for AI agents: search, scrape, interact with the web, plus paper search.
A cross-platform desktop application for managing AI Agents and MCP Servers. 一款用于管理AI智能体与MCP服务器的跨平台桌面应用程序。
MCP Security Weekly
Get CVE alerts and security updates for io.github.aborruso/ckan-mcp-server and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
Turn any (CKAN) open data portal into a conversation.
Give your AI assistant direct access to any CKAN open data portal — search datasets, explore organizations, query tabular data, and read metadata, all through natural language.
CKAN is the open-source platform behind most public open data portals worldwide (Italy's dati.gov.it, the US data.gov, Canada's open.canada.ca, and many more). Navigating these portals usually requires knowing their structure, APIs, and search syntax. This MCP server removes that barrier: once connected, your AI tool can do it all for you.
This is possible because of open standards and open source. CKAN exposes a fully documented, public API. Metadata follows DCAT, an open W3C standard for describing datasets. Both are free to use, free to build on, and maintained by open communities. This server stands on that foundation.
Who is this for? Everyone. Journalists looking for data to verify a story. Researchers exploring public datasets. Public servants checking what data their administration publishes. Developers building data pipelines. No CKAN knowledge required.
Adopted by AgID — This project has been reused by AgID, Italy's Agency for Digital Italy, as part of its effort to make public open data more accessible, immediate, and easier to consult through AI.
Two ways to use it — pick the one that suits you:
| Option A: Install locally | Option B: No install | |
|---|---|---|
| How | npm install -g @aborruso/ckan-mcp-server | Point your tool to the hosted HTTP endpoint |
| Best for | Runs on your machine, works with any local tool | Quick start, zero setup |
| Request quota | No shared quota | 100k requests/day shared quota |
Hosted endpoint: https://ckan-mcp-server.andy-pr.workers.dev/mcp
Recommendation: Option B is a great way to get started and try things out without any setup. Once you're familiar with what the server can do, switching to Option A (local install) gives you unlimited usage with no shared quotas.
👉 Want to explore the codebase? The AI-generated DeepWiki is a great starting point.
License: MIT — see LICENSE for complete details. Third-party notices: NOTICE.md.

The local and hosted server use the same tool and output caps. The hosted endpoint also has the shared request quota shown above.
| Area | Default | Maximum or configuration |
|---|---|---|
| Tool output | 50,000 characters | Fixed server-wide cap |
ckan_datastore_search rows | 100 | 32,000 (0 returns column names only) |
ckan_package_search results per page | 10 | 1,000 |
ckan_find_relevant_datasets results | 10 | 50 |
Injected sparql_query rows | 25 | 1,000 when injected; a query that supplies its own LIMIT is not capped |
ckan_tag_list results | 100 | 1,000 |
ckan_find_portals results | 10 | 50 |
| HTTP response body | 32 MiB | CKAN_MAX_RESPONSE_BYTES for local Node.js deployments |
| Decompressed response body | 64 MiB | `CKAN_M |