프로토타입 · 미리 보기: 공식 레지스트리의 모든 서버를 담고 있으며 30분마다 동기화해요. 리뷰와 계정 기능은 다음 단계에서 열려요.
PopNx MCPAI를 쓰는 사람을 위한 MCP 서버 · 쉬운 말로 설명해요

I14y MCP

제작자: malkreide버전 0.4.0i★ 0i내 컴퓨터에서 실행
레지스트리 이름io.github.malkreide/i14y-mcp

설치

개요

제작자가 쓴 설명(영어 원문)

MCP server for I14Y — Switzerland's national open-data metadata catalogue (DCAT-AP-CH)

PopNx MCP의 세 기둥

이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.

할 수 있는 일

이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.

  • 연결 방식: 내 컴퓨터에서 실행
  • 전송 방식: stdio
  • 카테고리: 기타

설치

쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.

설치하기 전에

  • 기본 점검: 2개 중 2개 통과
  • 내 컴퓨터에서 내 사용자 계정의 권한(파일, 네트워크, 앱)으로 실행돼요.
  • 레지스트리에 입력해야 할 키가 나와 있지 않아요.

필요한 것

  • PyPIPython의 uv 설치(uvx 명령어용)

어떤 앱을 쓰세요?

위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.

Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요

{
  "mcpServers": {
    "i14y": {
      "command": "uvx",
      "args": [
        "i14y-mcp"
      ]
    }
  }
}

터미널에서 이 명령어를 실행하세요

claude mcp add i14y -- uvx i14y-mcp

Cursor에서 열기

또는 설정을 직접 복사하기

프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요

{
  "mcpServers": {
    "i14y": {
      "command": "uvx",
      "args": [
        "i14y-mcp"
      ]
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

VS Code에서 열기

또는 설정을 직접 복사하기

프로젝트의 .vscode/mcp.json에 붙여 넣으세요

{
  "servers": {
    "i14y": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "i14y-mcp"
      ]
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.

선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.

이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.

할 수 있는 일

내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.

기본 점검i

누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 10일 점검

  • ✓ 통과

    제작자와 저장소 일치

    레지스트리 이름이 GitHub 계정 malkreide 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요

  • ✓ 통과

    계속 관리되고 있음

    코드 마지막 변경: 9일 전

  • … 아직 점검 안 함

    라이선스 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • – 해당 없음

    엔드포인트 응답

    내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요

  • – 해당 없음

    OAuth로 로그인

    내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요

  • … 아직 점검 안 함

    도구 설명에 숨겨진 지시 없음

    내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요

기타 카테고리의 다른 서버와 비교i

  • 이 카테고리의 다른 서버 19076개 중 0%보다 스타가 많아요
  • 이 카테고리의 다른 서버 19076개 중 46%보다 최근에 레지스트리에 공개됐어요
  • 기본 점검 결과가 이 카테고리의 다른 서버 19076개 중 100%와 같거나 더 좋아요

레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.

자주 묻는 질문

I14y MCP, 안전한가요?

해당하는 기본 점검 2개 중 2개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.

어떤 키나 코드가 필요한가요?

레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.

내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?

내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).

아직 관리되고 있나요?

GitHub 저장소는 마지막으로 9일 전 변경됐고, 최신 버전(0.4.0)은 2개월 전 레지스트리에 올라왔어요.

어떤 앱에서 쓸 수 있나요?

Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Python (uv)도 있어야 해요.

대신 쓸 수 있는 건 뭐가 있나요?

같은 카테고리에는: World Monitor, Claude Flow, Tldraw

대안

같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.

카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i

World Monitor

Real-time global intelligence on conflict, markets, energy, trade, shipping and cyber. 102 tools.

제작자: koala73널리 사용됨★ 9만5일 전 업데이트

클라우드에서 실행✓ worldmonitor.app

Claude Flow

AI orchestration with hive-mind swarms, neural networks, and 87 MCP tools for enterprise dev.

제작자: ruvnet널리 사용됨↓ 1.4만/주★ 8.1만14개월 전 업데이트

내 컴퓨터에서 실행

Tldraw

Draw and visually collaborate with your agents on tldraw's canvas.

제작자: tldraw널리 사용됨★ 5.1만8개월 전 업데이트

클라우드에서 실행

제작자의 README

README 열기

제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.

Part of the [Swiss Public Data MCP Portfolio](https://github.com/malkreide/swiss-public-data-mcp) — 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(dataset_id=...) → 2 distributions, licence: «Opendata BY ASK — attribution required, commercial use only with permission from the data supplier» → contact: auskunftsdienst@bfs.admin.ch

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_catalog caps results client-side because the upstream ignores paging.
  • api_status always 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

ToolPurpose
search_catalogFree-text search across the catalogue. Entry point.
list_datasetsPaginated dataset register (complete, unlike search).
get_datasetFull metadata record for one dataset.
get_dataset_distributionsDownload URLs, formats and licences.
list_data_servicesRegister of official Swiss APIs with endpoint URLs.
get_data_serviceFull record for one registered interface.
list_public_servicesAdministrative services for citizens.
list_conceptsHarmonised concepts and code lists.
get_conceptOne concept definition.
search_codelist_entriesIndividual codes of a code list.
list_publishersPublishing bodies, with Swiss UID.
list_catalogsContributing catalogues.
api_statusReachability 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

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.

EraRevisionWho reaches it
initialize handshake2024-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.

What the server carries on the modern revision

2026-07-28 moves discovery off the initialize handshake onto server/discover plus a per-request _meta envelope, and gives every cacheable result a freshness hint. What this server puts on those surfaces is measured in tests/test_spec_2026_07_28.py through the assembled stack — and, for stdio, through a real subprocess — rather than read back off the configuration:

SurfaceWhat this server answers
serverInfo, stamped under every modern responsename, display title, description, website, and the installed distribution version — the same version the outbound User-Agent carries
server/discover → instructionshow to sequence the tools, plus the two properties of I14Y that no single tool description shows
ttlMs / cacheScope300 s, public, on all five cacheable methods this server answers
tools[].titlea display name per tool, so a client shows «Search a concept's code list» rather than search_codelist_entries

The freshness hint is not cosmetic. With none set, the SDK answers ttlMs: 0, cacheScope: private — «already stale, never share» — for directories that are fixed at import and cannot change while the process runs.

Both transports serve the modern revision: HTTP through the streamable-HTTP session manager, and stdio — the default, and what uvx i14y-mcp starts — through the same dual-era loop. Neither is evidence for the other, so both are measured.

One thing this server advertises but does not use. On 2026-07-28 the listChanged flags and resources.subscribe derive solely from whether subscriptions/listen is served, and the SDK wires that handler unconditionally. server/discover therefore reports listChanged: true for a tool list that is fixed at import, and a subscribe capability over an empty resource list; no change notification is ever sent. It is not switchable through the public API — only a wholesale replacement of the server/discover handler could do it, which would be a second truth about our own capabilities — so it is pinned by a test instead of papered over.

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=streamable-http HOST=0.0.0.0 PORT=8000 i14y-mcp

I14Y_MCP_TRANSPORT accepts stdio (the default of the entry point itself), streamable-http (http is a synonym) or sse. 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 container image already does both).

Connector URL: https:// /mcp

A Claude.ai custom connector speaks Streamable HTTP, and that transport serves exactly one path: /mcp. sse is the older transport and serves /sse and /messages instead — measured through the assembled app, POST /mcp answers 404 there and 200 under Streamable HTTP. The container image therefore defaults to streamable-http; a connector pointed at an SSE deployment gets a 404 and never completes a handshake.

I14Y_MCP_ALLOWED_HOSTS — required for a public deployment

A comma-separated list of the hostnames the server is reached under — hostnames only, no scheme and no port:

I14Y_MCP_ALLOWED_HOSTS=i14y-mcp.up.railway.app,mcp.example.ch

The value is compared literally against the incoming Host header, so https://i14y-mcp.up.railway.app or a trailing :443 matches nothing and every request fails with HTTP 421 Invalid Host header. Behind TLS the browser sends the bare hostname; a non-standard port needs the SDK's only wildcard form, host:*. Loopback stays reachable either way, so container health checks are unaffected.

Leaving it unset on a non-loopback bind does not fall back to something safe. The server cannot guess the name it will be addressed by, and a guessed list would reject every real request, so it switches the Host check off entirely and says so in the log:

dns_rebinding_protection_off
railway.json

railway.json pins the one build setting the deployment cannot get wrong on its own:

{ "build": { "builder": "DOCKERFILE", "dockerfilePath": "Dockerfile" } }

With any other builder Railway never looks at the Dockerfile. It derives a start command

앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요

PopNx에게 묻기