CKAN extension that exposes all available CKAN API actions as MCP tools via a Flask blueprint
Wellknown found it in public sources; nobody has proven control of it yet. Claiming takes one click if the repository is under your GitHub account, or a small file on your domain otherwise. Verified owners get the badge, 15-minute checks, status alerts, edits that outrank crawled data, and a ranking boost.
Agents can do it too: POST https://wellknown.network/api/v1/claims with {"agent":"ckanext-mcp","method":"well_known_file"} — machine-readable steps at claim.json, guide at /docs/claim.
Everything here was measured by our prober or read from a registry. Nothing is self-reported.
Attributed to the source that supplied each field. Treated as claims, not facts.
# ckanext-mcp MCP bridge for CKAN — exposes all API actions from CKAN core and installed extensions as MCP tools. LLMs act as the authenticated user, inheriting all CKAN permissions. ## How it works CKAN installations have ~200 API actions depending on installed extensions. Exposing all of them as flat MCP tools would overwhelm any LLM. Instead, ckanext-mcp builds **~25 synthetic entity tools** at startup: - **`ckan_package`** — show, list, create, update, delete, patch, search - **`ckan_resource`** — show, create, update, delete, patch, search - **`ckan_organization`** — show, list, create, update, delete, patch - **`ckan_tag`** — show, list, create, delete, search - **`ckan_search_tools`** — discover any of the ~200 actions by keyword, entity, or source - ... and more, derived automatically from installed plugins Each entity tool bundles CRUD operations. The LLM passes an `operation` parameter to select the action: ```json { "name": "ckan_package", "arguments": { "operation": "show", "id": "my-dataset" } } ``` **Zero hardcoding** — entity grouping derived from CKAN's naming convention (`package_show` → entity `package`), source from `IActions` plugin registry, read/write from `side_effect_free` attribute. ## Installation ```bash pip install ckanext-mcp ``` Add `mcp` to `ckan.plugins` in your ckan.ini or `.env`: ``` ckan.plugins = ... mcp ``` ## Configuration | Option | Default | Description | |--------|---------|-------------| | `ckanext.mcp.categories` | *(empty)* | Comma-separated entity or source filter (e.g. `package,resource,harvest`) | The MCP endpoint is always available at `/mcp`. ## Client Setup Generate a `.mcp.json` config for your MCP client: ```bash ckan -c ckan.ini mcp init ``` This creates `.mcp.json`: ```json { "mcpServers": { "ckan": { "type": "http", "url": "https://your-ckan.example.com/mcp", "headers": { "Authorization": "Bearer <YOUR_API_KEY>" } } } } ``` Replace `<…
Mapped onto the structured taxonomy from declared text and observed tool names. Confidence shown for derived entries.
Every source is kept verbatim. Field changes are logged as events.