I14y
БесплатноНе проверенMCP server for the I14Y interoperability platform — Switzerland's national metadata catalogue
Описание
MCP server for the I14Y interoperability platform — Switzerland's national metadata catalogue
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
License: MIT Python 3.10+ MCP Data: I14Y
MCP server for the I14Y interoperability platform — Switzerland's national metadata catalogue.
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(dataset_id=...)
→ 2 distributions, licence: «Opendata BY ASK — attribution required,
commercial use only with permission from the data supplier»
→ contact: [email protected]
Two tool calls turn a vague topic into a named authority, a download URL and a
licence you can act on — get_dataset aggregates the distributions, licences
and contact point into one record.
Demo
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.
Project phase
This server is in Phase 1 (read-only) of the portfolio's «Read-only First» phase architecture: all tools are read-only, there is no authentication and no personal data. See docs/roadmap.md for the phase model and the prerequisites for any future write capability.
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.
MCP primitives
This server exposes Tools only — no Resources, no Prompts. That is a deliberate choice, not an omission: I14Y is queried by free-text search and by opaque UUIDs, so there is no small, stable set of addressable URIs that would map cleanly onto MCP Resources, and the server ships no opinionated prompt templates. Every tool is read-only and idempotent; if a future stable entry point emerges (e.g. a fixed theme list) it is a candidate for a Resource.
MCP protocol version
Built against the MCP Python SDK (mcp >= 1.28.1), which negotiates the protocol
version with the client at initialize time. The tested SDK floor is pinned in
pyproject.toml; Dependabot opens monthly SDK-update
PRs, and any change that bumps the negotiated spec version is called out in
CHANGELOG.md.
MCP Protocol Version
This server speaks two protocol eras over the same endpoint. The client's first request on a connection decides which one applies; a later claim from the other era is refused.
| Era | Revision | Who reaches it |
|---|---|---|
initialize handshake |
2024-11-05 … 2025-11-25 |
What today's clients speak. The server answers with the revision asked for, or with the 2025-11-25 ceiling when the request asks for something newer. |
| Per-request envelope | 2026-07-28 |
A request carrying the 2026-07-28 _meta envelope opens a modern connection. |
Both revisions are pinned in
tests/test_protocol_version.py and asserted
against the installed SDK, so a Dependabot bump of mcp cannot move either one
silently. The handshake ceiling is measured against a live initialize through
the assembled ASGI stack, not read off a constant name.
Note that the SDK's LATEST_PROTOCOL_VERSION is an alias for the modern
era, not for the handshake era — pinning against it alone would leave the era
that current clients actually negotiate free to drift.
Update policy. When the gate fails, do not edit the constant blindly: read
the spec changelog between the two revisions, verify the server still behaves,
then move the constant, this section, README.de.md and
CHANGELOG.md together.
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 HOST=0.0.0.0 PORT=8000 i14y-mcp
I14Y_MCP_TRANSPORT accepts stdio (default), sse or streamable-http. The
HTTP transports bind to HOST, which defaults to 127.0.0.1 (loopback); set
HOST=0.0.0.0 to expose the port on a PaaS (the Docker image already does).
CORS exposes the Mcp-Session-Id header so browser MCP clients keep their session.
Which browser origins may call the server comes from I14Y_MCP_CORS_ORIGINS, a
comma-separated list — unset means no browser client is permitted at all,
which is the default. * is still accepted and logs a warning. stdio and other
non-browser clients are unaffected either way.
Docker
docker compose up --build # SSE transport on http://localhost:8000
The image is a hardened multi-stage build: it runs as a non-root user, ships no build tools, and needs no secrets (the API is unauthenticated). See Dockerfile and compose.yaml.
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.
Contributing
See CONTRIBUTING.md for the ground rules (read-only, one egress host, no secrets) and the local dev loop. Maintainers: PUBLISHING.md covers the PyPI / MCP Registry release process.
Security
See SECURITY.md for the security posture and how to report a vulnerability.
License
MIT License — see LICENSE. The catalogue data remains subject to the terms declared by each publisher.
Author
Hayal Oezkan · github.com/malkreide
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.
MCP Registry
Ownership marker used by the MCP Registry to link this PyPI package to the GitHub namespace:
mcp-name: io.github.malkreide/i14y-mcp
Установить I14y в Claude Desktop, Claude Code, Cursor
unyly install i14yСтавит в Claude Desktop, Claude Code, Cursor и VS Code — сам разбирается с npx, uvx и сборкой из исходников.
Впервые? Поставь CLI: curl -fsSL https://unyly.org/install | sh
Или настроить вручную
Выполни в терминале:
claude mcp add i14y -- uvx i14y-mcpПошаговые гайды: как установить I14y
FAQ
I14y MCP бесплатный?
Да, I14y MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для I14y?
Нет, I14y работает без API-ключей и переменных окружения.
I14y — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить I14y в Claude Desktop, Claude Code или Cursor?
Открой I14y на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
Fetch
Web content fetching and conversion for efficient LLM usage.
AWS KB Retrieval
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
автор: modelcontextprotocolSpring AI MCP Server
Provides auto-configuration for setting up an MCP server in Spring Boot applications.
llm-analysis-assistant
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also
автор: xuzexin-hzMCP-Agent
A simple, composable framework to build agents using Model Context Protocol by [LastMile AI](https://www.lastmileai.dev)
автор: lastmile-aiSpring AI MCP Client
Provides auto-configuration for MCP client functionality in Spring Boot applications.
mcp.natoma.ai
A Hosted MCP Platform to discover, install, manage and deploy MCP servers by [Natoma Labs](https://www.natoma.ai)
MCPHub
Website to list high quality MCP servers and reviews by real users. Also provide online chatbot for popular LLM models with MCP server support.
MCP Servers Rating and User Reviews
Website to rate MCP servers, write authentic user reviews, and [search engine for agent & mcp](http://www.deepnlp.org/search/agent)
mkinf
An Open Source registry of hosted MCP Servers to accelerate AI agent workflows.
Compare I14y with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории ai
