プロトタイプ · プレビュー版:公式レジストリのすべてのサーバーを掲載し、30分ごとに同期しています。レビューとアカウント機能は今後のステップで始まります。
PopNx MCPAIを使う人のためのMCPサーバー · やさしい言葉で解説

Termdat MCP

作者:malkreideバージョン 0.2.0i★ –iパソコンで動く
レジストリ名io.github.malkreide/termdat-mcp

インストール

概要

作者による説明(英語の原文)

MCP server for TERMDAT — the terminology database of the Swiss Federal Administration

PopNx MCPの3つの柱

この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。

できること

このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。

  • 接続方法: パソコンで動く
  • トランスポート: stdio
  • カテゴリ: データベース・データセット

インストール

使っているAIアプリを選んで、設定をコピーしてください。

インストールの前に

  • 基本チェック:1項目中1項目に合格
  • あなたのパソコンで、あなたのユーザーと同じ権限(ファイル、ネットワーク、アプリ)で動きます。
  • レジストリには、入力が必要なキーは載っていません。

必要なもの

  • PyPIPythonのuvのインストール(uvxコマンドに必要)

どのアプリを使っていますか?

上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。

Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます

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

ターミナルでこれを実行します

claude mcp add termdat -- uvx termdat-mcp

Cursorで開く

または、設定を自分でコピーする

プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます

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

ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。

VS Codeで開く

または、設定を自分でコピーする

プロジェクトの .vscode/mcp.json に貼り付けます

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

ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。

これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。

選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。

この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。

できること

パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。

基本チェックi

誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック

  • ✓ 合格

    作者とリポジトリが一致

    レジストリ名は、リポジトリを所有するGitHubアカウント malkreide で確認済みです

  • … 未チェック

    今もメンテナンスされている

    このリポジトリはまだGitHubから読み取っていません

  • … 未チェック

    ライセンスがある

    このリポジトリはまだGitHubから読み取っていません

  • – 対象外

    エンドポイントが応答する

    これはパソコンで動くため、インターネット上のエンドポイントはありません

  • – 対象外

    OAuthでサインイン

    パソコンで動き、代わりにローカルの設定を使います

  • … 未チェック

    ツールの説明に隠れた指示がない

    パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです

データベース・データセットのほかのサーバーとの比較i

  • このカテゴリのほかの953件のうち0%よりスターが多い
  • このカテゴリのほかの953件のうち40%より最近レジストリに公開
  • 基本チェックの結果が、このカテゴリのほかの953件のうち100%と同じかそれ以上

レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。

よくある質問

Termdat MCPは安全ですか?

当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。

どんなキーやコードが必要ですか?

レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。

パソコンで動きますか、それともクラウドですか?

あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。

今もメンテナンスされていますか?

GitHubリポジトリの最終更新は–、最新バージョン(0.2.0)がレジストリに届いたのは2 か月前です。

どのアプリで使えますか?

Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。

代わりに使えるものは?

同じカテゴリには:Supabase, MongoDB MCP Server, Elasticsearch MCP Server

代わりの候補

同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。

カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i

Supabase

作者:supabase

MCP server for interacting with the Supabase platform

パソコンでもクラウドでも★ 2,993Apache-2.0今日更新
インストール

作者のREADME

READMEを開く

作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。

🇨🇭 Part of the Swiss Public Data MCP Portfolio — open-source MCP servers connecting AI agents to Swiss public and open data.

This is a private project. It is independent of any employer or institutional affiliation.

🏷️ termdat-mcp

Official, validated Swiss administrative designations across DE / FR / IT / EN — with source references and validation status.

🇩🇪 Deutsche Version

Overview

MCP server for TERMDAT, the terminology database of the Swiss Federal Administration, maintained by the Federal Chancellery. It gives an AI agent the officially validated designations of Swiss authorities, departments and legal acts across DE / FR / IT / EN — with source references and validation status.

Discovered through i14y-mcp, which catalogues TERMDAT as data service ff0c37eb-2f7c-4ff6-996e-d22b77bf52fc.

What this is — and what it is not. TERMDAT is not a subject dictionary. It is a certified name-plate archive: it will not tell you what «Sonderpädagogik» means, but it will tell you the official name of the authority responsible for it, and what that authority is called in French.

Measured coverage (live, 2026-07-19, German search over the Terminus field):

Search termHits
Departement20
Bildung13
Verordnung8
Schule5
Behörde4
Sonderpädagogik3
Volksschule · Lehrperson · Schulleitung · Unterricht · Kindergarten0

The thirteen «Bildung» hits are organisational names — Bildungsdirektion, Erziehungsdepartement, Departement für Volkswirtschaft und Bildung — not pedagogical concepts. Plan accordingly: this server is strong for authority naming, official titles and abbreviations, and largely silent on domain vocabulary.

Features

  • Seven read-only tools over the official TERMDAT public v2 API.
  • Official designations across DE / FR / IT / EN, with source reference and validation status on every response.
  • Communication QA: check up to 25 terms in one call against validated designations.
  • Vocabulary cache (24 h TTL) for the 140 collections and 23 classifications, with stale-serve fallback.
  • Retry with exponential backoff (2/4/8 s); explicit MaxEntryCount to avoid silent truncation.
  • Dual transport: stdio (local) and Streamable HTTP (cloud). Both serve MCP protocol revision 2026-07-28.
  • No authentication required — public, unauthenticated API (No-Auth-First).

🎯 Anchor demo query

*«What are the official French and Italian names of the education directorates of the German-speaking cantons?»*

Resolved with list_classifications → search_terms → translate_term.

Demo

Prerequisites

  • Python 3.10+
  • uv / uvx (recommended) or pip
  • Network access to api.termdat.bk.admin.ch — no API key needed

Installation

uvx termdat-mcp

Claude Desktop (claude_desktop_config.json):

{

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

Quickstart

# Run locally over stdio (default transport)

uvx termdat-mcp

From a checkout, without installing

PYTHONPATH=src python -m termdat_mcp

Configuration

All configuration is via environment variables. Defaults are safe for local use.

VariableDefaultPurpose
TERMDAT_MCP_TRANSPORTstdioTransport: stdio (local) or streamable-http / http (cloud). sse is accepted as a deprecated alias and now serves Streamable HTTP on /mcp — it warns on startup
HOST127.0.0.1Bind host (HTTP transport only). Loopback by default; set HOST=0.0.0.0 only inside a container
PORT8000Bind port (HTTP transport only)
TERMDAT_MCP_CORS_ORIGINS[]HTTP only: explicit allowed browser origins (default-deny; never a wildcard in production). Comma-separated, e.g. https://a.example,https://b.example
TERMDAT_MCP_ALLOWED_HOSTS[]HTTP only: inbound Host allow-list. Comma-separated, e.g. mcp.example.ch,mcp.example.ch:443. Needed for a non-loopback bind — without it the Host header is not checked at all
TERMDAT_MCP_LOG_LEVELINFOstructlog level (JSON to stderr)
TERMDAT_MCP_VOCAB_TTL86400Vocabulary cache TTL in seconds

Configuration is loaded once into a typed Settings object (pydantic-settings).

List variables. TERMDAT_MCP_CORS_ORIGINS and TERMDAT_MCP_ALLOWED_HOSTS take a comma-separated list — the recommended spelling, and the one the rest of the Swiss Public Data MCP portfolio uses:

TERMDAT_MCP_ALLOWED_HOSTS="mcp.example.ch,mcp.example.ch:443"

A JSON list (["mcp.example.ch"]) stays valid. Surrounding whitespace and empty entries are dropped in both forms, so a trailing comma is harmless. A single value needs no brackets.

`TERMDAT_MCP_ALLOWED_HOSTS` matters in the cloud. The SDK leaves DNS-rebinding protection off while no allow-list is configured. Bind to 0.0.0.0 in a container without this variable and the Host header is never validated — the server cannot derive its own public name from the bind address, and a guessed list would reject every real request with HTTP 421. It warns on startup when it has to fall back to that state.

Cloud (Render / Railway):

TERMDAT_MCP_TRANSPORT=streamable-http PORT=8000 termdat-mcp   # exposes /mcp

Available Tools

ToolPurpose
search_termsSearch TERMDAT with field flags, collection and classification filters
translate_termOfficial equivalent of an administrative term in another national language
check_termsCommunication QA: check up to 25 terms against validated designations
get_entriesFetch known entries by numeric ID
list_collectionsThe ~140 terminology collections (filter values)
list_classificationsThe 23 subject classifications, e.g. BILD = education
api_statusAvailability; never returns silently empty

All tools are annotated readOnlyHint: true, destructiveHint: false.

MCP primitives. This server uses only the Tools primitive. TERMDAT answers are live queries with no stable resource hierarchy to expose as *Resources*, and there are no server-authored *Prompts*. The seven tools are small and closely related, so they live in a single server.py rather than a tools/ package.

Architecture

┌─────────────────┐  stdio / HTTP    ┌──────────────────────────┐

│ MCP host │ ───────────────► │ termdat-mcp │ │ (Claude, IDE) │ ◄─────────────── │ │ └─────────────────┘ │ vocabulary cache (24 h) │ │ 140 collections │ │ 23 classifications │ └────────────┬─────────────┘ │ httpx + retry (2/4/8 s) ▼ https://api.termdat.bk.admin.ch/v2 ├── /Search (SearchTerm + InLanguageCode) ├── /Entry (EntryIds) ├── /Collection (140 values) └── /Classification ( 23 values, incl. BILD)

Architecture decision

This server uses Architecture A (live API only), with caching limited to the two controlled vocabularies.

Rationale (verified live on 2026-07-19):

  • The API publishes a complete OpenAPI 3.0.4 specification at /swagger/v2/swagger.json and declares no security schemes — unauthenticated access, No-Auth-First satisfied.
  • Server-side search works properly, including 11 field flags and filters by collection and classification. There is no reason to mirror the database locally, and no bulk dump is offered.
  • /Collection (140 entries) and /Classification (23 entries) change rarely and are needed to make filter arguments legible to an agent, so they are cached with a 24-hour TTL and a stale-serve fallback.

Consequences:

  • Every search is a live call; provenance is live_api except for vocabulary lookups.
  • Validation errors arrive as clean RFC 9110 payloads and are surfaced rather than swallowed.

Project Structure

termdat-mcp/

├── src/termdat_mcp/ │ ├── init.py │ ├── main.py # entry point; dual transport (stdio / Streamable HTTP) │ ├── client.py # httpx client, retry, vocabulary cache │ ├── models.py # Pydantic models │ └── server.py # MCP tool definitions ├── tests/ │ ├── test_client.py # offline, respx-mocked │ └── test_live.py # hits the real TERMDAT API ├── README.md ├── README.de.md ├── CHANGELOG.md ├── LICENSE └── pyproject.toml

Safety & Limits

  • Read-only. Every tool is annotated readOnlyHint: true, destructiveHint: false; the server never writes to TERMDAT.
  • No credentials handled. The API is unauthenticated; the server stores and forwards no secrets.
  • No silent empties. api_status and error paths surface failures instead of returning an empty result that looks complete.
  • Truncation is explicit. MaxEntryCount is always sent and truncated is reported (see Known Limitations).
  • Terms of use are stated, not guessed. Every response repeats them in source: reuse and republication require the source www.termdat.ch to be named, and the Federal Chancellery's Terminology Section to be informed of purpose and manner beforehand (statement of 2026-08-21).
  • Egress allow-list. Requests can only reach api.termdat.bk.admin.ch (HTTPS), enforced before every call by a frozen ALLOWED_HOSTS set — no user input can redirect egress. See docs/network-egress.md.
  • Loopback by default. The HTTP transport binds to 127.0.0.1; 0.0.0.0 is an explicit container opt-in that warns on stderr. It also sets default-deny CORS, exposing only Mcp-Session-Id.
  • Errors are masked. Upstream/internal error detail is logged to stderr (structlog JSON) and never returned to the model.
  • Accepted risks (ADRs): DNS pinning (ADR 0001) and stateful load balancing (ADR 0002) are deliberately deferred — low risk for a single-instance, single-host, no-auth server.
  • Container. A hardened, non-root Dockerfile is provided for hosted deployments.

Known Limitations

  • Administrative scope only. See the coverage table above. check_terms returns not_found, never «incorrect», precisely because absence from TERMDAT is not evidence of error.
  • `MaxEntryCount` has a silent default of ~25. Omitting it looks like a complete result set. This server always sends the parameter explicitly and reports truncated.
  • `CollectionIds` / `ClassificationIds` have a silent default of `VARIA`. An ID-less /v2/Search covers one of 23 subject areas — the

冒頭だけを表示しています。続きはリポジトリで読めます

PopNxに聞く