i14y-mcp
MCP server for Switzerland's national metadata catalogue, enabling AI agents to discover datasets, APIs, public services, and publishers through free-text search and structured queries.
README
Part of the Swiss Public Data MCP Portfolio β a collection of open-source MCP servers connecting AI agents to Swiss public and open data. This is a private project. It is not affiliated with, endorsed by, or operated on behalf of any employer or public authority.
i14y-mcp
MCP server for the I14Y interoperability platform β Switzerland's national metadata catalogue.
π©πͺ Deutsche Version
Why this server exists
The other servers in this portfolio answer Β«what does the data say?Β». This one answers the question that comes first: Β«who publishes data on this topic, through which interface, under which licence?Β»
I14Y is the national data catalogue maintained by the Federal Statistical Office. It describes datasets, registered APIs, public services and harmonised concepts from the Confederation, cantons and communes, using the DCAT-AP-CH profile (eCH-0200).
Mnemonic: Β«Catalogue before shelf.Β» Without a catalogue, an agent has to already know a data source exists. With one, it can find it.
π― Anchor Demo Query
Β«Which authority publishes data on special needs education, through which interface is it available, and under which licence?Β»
search_catalog(query="SonderpΓ€dagogik")
β Β«Statistik der SonderpΓ€dagogikΒ» β Federal Statistical Office (BFS), theme: Bildung
get_dataset_distributions(dataset_id=...)
β 2 distributions, licence: Β«Opendata BY ASK β attribution required,
commercial use only with permission from the data supplierΒ»
get_dataset(dataset_id=...)
β contact: auskunftsdienst@bfs.admin.ch
Three tool calls turn a vague topic into a named authority, a download URL and a licence you can act on.
Architecture
ββββββββββββββββββββββββββββββββ
β MCP Host (Claude) β
βββββββββββββββββ¬βββββββββββββββ
β stdio | streamable-http
βββββββββββββββββΌβββββββββββββββ
β i14y-mcp β
β ββββββββββββββββββββββββββ β
β β server.py (13 tools) β β
β ββββββββββββββββββββββββββ€ β
β β mappers.py β β DCAT β flat, one language
β ββββββββββββββββββββββββββ€ β
β β models.py (Pydantic) β β source + provenance envelope
β ββββββββββββββββββββββββββ€ β
β β client.py β β retry 2s/4s/8s, no-retry 4xx
β ββββββββββββββββββββββββββ β
βββββββββββββββββ¬βββββββββββββββ
β HTTPS, no auth
βββββββββββββββββΌβββββββββββββββ
β api.i14y.admin.ch/api β
β datasets Β· dataservices Β· β
β concepts Β· publicservices Β· β
β catalogs Β· agents Β· search β
ββββββββββββββββββββββββββββββββ
Architecture decision
This server uses Architecture A (live API only).
Rationale (verified live on 2026-07-21):
- All read endpoints respond without authentication and paginate correctly.
- No bulk download of catalogue metadata is offered, and none is needed.
- Error responses follow RFC 7807, so failure modes are distinguishable.
Consequences:
- Every HTTP call retries transient failures with 2 s / 4 s / 8 s backoff.
search_catalogcaps results client-side because the upstream ignores paging.api_statusalways returns an evaluable state instead of empty records.
Full probe report: docs/probe-i14y.md.
Tools
| Tool | Purpose |
|---|---|
search_catalog |
Free-text search across the catalogue. Entry point. |
list_datasets |
Paginated dataset register (complete, unlike search). |
get_dataset |
Full metadata record for one dataset. |
get_dataset_distributions |
Download URLs, formats and licences. |
list_data_services |
Register of official Swiss APIs with endpoint URLs. |
get_data_service |
Full record for one registered interface. |
list_public_services |
Administrative services for citizens. |
list_concepts |
Harmonised concepts and code lists. |
get_concept |
One concept definition. |
search_codelist_entries |
Individual codes of a code list. |
list_publishers |
Publishing bodies, with Swiss UID. |
list_catalogs |
Contributing catalogues. |
api_status |
Reachability check with graceful degradation. |
All tools are annotated readOnlyHint: true. Write operations exist in the
upstream API but are deliberately not exposed.
Installation
uvx i14y-mcp
Or from source:
git clone https://github.com/malkreide/i14y-mcp
cd i14y-mcp
pip install -e ".[dev]"
Claude Desktop
{
"mcpServers": {
"i14y": {
"command": "uvx",
"args": ["i14y-mcp"]
}
}
}
Remote deployment (Render, Railway)
I14Y_MCP_TRANSPORT=sse PORT=8000 i14y-mcp
I14Y_MCP_TRANSPORT accepts stdio (default), sse or streamable-http.
Join keys
I14Y is a connector layer. Two identifiers make it composable with the rest of the portfolio:
| Key | Field | Joins to |
|---|---|---|
| Swiss UID | Publisher.uid |
register-mcp (Zefix) |
| Endpoint URL | DataServiceSummary.endpoint_urls |
any portfolio server wrapping that API |
Known limitations
Verified live on 2026-07-21.
- The search index covers roughly half the register.
search_catalogreturns at most 1013 records;list_datasetsreaches about 2003. Uselist_datasetswhen completeness matters. - Search returns Datasets only. Filtering by
types=["Concept"]ortypes=["DataService"]yields zero results even though those entities exist. Uselist_conceptsandlist_data_servicesinstead. - The upstream ignores paging on search. The full result set is always
returned; this server caps it at 200 records and sets
truncated: true. - Licences vary per distribution, not per dataset. Most carry
Β«Opendata BY ASKΒ», which requires attribution and restricts commercial use.
Always read the
licencefield before reuse. - Some metadata fields are simply empty. Frequency, temporal coverage and distribution format are optional and frequently unset by publishers. This is a data-quality property of the catalogue, not a bug in this server.
- Not every entry with an endpoint has a URL. Entries labelled only
Β«OpenAPI SpezifikationΒ» without a URI are surfaced as
(no URI) <label>rather than dropped.
Testing
PYTHONPATH=src pytest tests/ -m "not live" # offline, used in CI
PYTHONPATH=src pytest tests/ -m "live" # hits the real API
PYTHONPATH=src pytest tests/ # everything
python -m ruff check src tests
The live tests are not decoration: fundstΓΌck 4 in the probe report β keywords
nesting their language object under label β was caught by a live test after
the unit tests were already green.
Credits & related projects
- Data: I14Y Interoperability Platform, Federal Statistical Office (BFS)
- Standard: eCH-0200 / DCAT-AP-CH
- Source discovery inspired by rnckp/awesome-ogd-switzerland
- Portfolio: swiss-public-data-mcp
- Protocol: Model Context Protocol
Licence: MIT. The catalogue data remains subject to the terms declared by each publisher.
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.