opendata-ua-mcp
Enables AI agents to search and analyze Ukraine's national open-data portal (data.gov.ua) using natural language, with tools for finding datasets, inspecting metadata, and retrieving actual data.
README
opendata-mcp — data.gov.ua MCP server
An open-source MCP server that lets any MCP-compatible AI agent search and analyze Ukraine's national open-data portal data.gov.ua in natural language.
It speaks the Model Context Protocol, so it works with any client that supports MCP — including Claude (Desktop / Code), ChatGPT (Developer Mode / custom connectors), Google Gemini, Cursor, Cline / Continue, VS Code Copilot, local models via Ollama / LM Studio, and your own agents built on the Python/TypeScript MCP SDKs. Not tied to any single vendor.
Phase 1: read-only, public endpoints — no API token, no auth required.
Design
Tools are jobs-to-be-done, not thin API wrappers. Each tool does a complete user task, composes several CKAN calls internally, hides portal quirks (UUID slugs, dirty formats, sparse DataStore, Unicode homoglyphs), and returns a token-efficient slim result (a search hit is ~150 B vs ~17 KB raw).
| Tool | What it does |
|---|---|
find_datasets |
Find datasets by topic; ranked slim candidates + refine hints |
explore_catalog |
Aggregate view (who publishes / how much) — counts only |
inspect_dataset |
Full dataset card: license, freshness, resources |
get_dataset_data |
Get the actual data — auto-picks best resource; DataStore or download+parse CSV/JSON/XLSX/XML, including files inside ZIP archives (ЄДР, debtors registries) |
filter_data |
Filter rows / read-only SQL over a structured (DataStore) resource |
track_updates |
Recently updated datasets, filterable by topic/org |
Install
The server runs over stdio, the transport every MCP client understands. The config below is the same everywhere — only the file/menu where you paste it differs per client.
Any MCP client (npm) — universal
{
"mcpServers": {
"opendata-ua": {
"command": "npx",
"args": ["-y", "@opendata-ua/mcp-server"]
}
}
}
Where to put it:
| Client | Location |
|---|---|
| Claude Desktop | Settings → Developer → Edit Config (claude_desktop_config.json) |
| Claude Code | claude mcp add opendata-ua -- npx -y @opendata-ua/mcp-server |
| ChatGPT | Settings → Connectors → add MCP server (Developer Mode) |
| Google Gemini | Gemini CLI / SDK mcpServers config |
| Cursor | Settings → MCP → Add Server (~/.cursor/mcp.json) |
| Cline / Continue / VS Code | the extension's MCP settings |
| Custom agent | point your MCP SDK at npx -y @opendata-ua/mcp-server |
Claude Desktop — one-click DXT
DXT is Claude Desktop's drag-and-drop bundle format:
- Download
opendata-ua-mcp.dxtfrom Releases. - Drag it into Claude Desktop → Settings → Extensions. Done. No config.
From source
npm install
npm run build
node dist/stdio.js # any MCP client can spawn this
Try it
"Find ecology datasets from Lviv published in 2024" "Which organizations publish the most procurement data?" "Show me the first rows of the stolen-vehicles register"
Configuration (optional)
| Env var | Default | Purpose |
|---|---|---|
DATA_GOV_UA_BASE_URL |
https://data.gov.ua/api/3/action |
API base (mirror/dev portal) |
CACHE_TTL_SECONDS |
300 |
LRU cache TTL for catalogs |
HTTP_TIMEOUT_MS |
30000 |
Request timeout |
MAX_RESPONSE_CHARS |
60000 |
Per-response context-budget ceiling |
MAX_DOWNLOAD_BYTES |
10000000 |
Cap for files downloaded + parsed locally |
LOG_LEVEL |
info |
debug/info/warn/error |
Develop
npm test # vitest
npm run typecheck
npm run lint
npm run smoke # live test against data.gov.ua
npm run build:dxt # build the .dxt package
The portal runs CKAN 2.7.2. DataStore (queryable rows) covers only ~0.3 % of resources, so get_dataset_data downloads + parses files locally when needed; filter_data/SQL apply to the DataStore-active minority.
License
MIT © Open Data UA Community
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.