swiss-cultural-heritage-mcp について
swiss-cultural-heritage-mcpは、美術・歴史・書誌研究向けにスイスの文化遺産データを提供します。芸術家、博物館コレクション、国立書誌、記憶機関を扱い、横断検索では情報源、リンク、個別のライセンスを示します。
主な機能
- 01SIK-ISEAの芸術家情報を検索
- 02スイス国立博物館の収蔵品を閲覧
- 03Helveticatの所蔵資料と出版物を検索
- 04MemobaseとDodisを横断検索
- 05メタデータとデジタル資料のライセンスを提示
活用シーン
- 01芸術家の経歴と関連作品の調査
- 02国立博物館の特定テーマの資料検索
- 03テーマに関するスイス刊行物の発見
- 04歴史的な映像音声資料や外交文書の探索
MCP 対応
読み取り専用のMCPサーバーで、5つのスイス文化遺産データソースに対応する11のツール、2つのリソース、2つのプロンプトをクライアントに提供します。横断検索結果には情報源とパーマリンクが含まれ、メタデータとデジタル資料のライセンスを分けて示します。著作権保護された全文は返しません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
11掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| params | any | はい |
詳細
🏛️ swiss-cultural-heritage-mcp
スイスの文化遺産向けMCP サーバー — SIK-ISEAのアーティスト、国立博物館のコレクション、国立図書館の書誌情報
概要
swiss-cultural-heritage-mcpは、認証不要で、スイスの文化遺産データソースにAIネイティブなアクセスを提供します。
| ソース | データ | API |
|---|---|---|
| SIK-ISEA(SIKART) | スイスのアーティスト約17,000人 — SIKARTの伝記データ | opendata.swiss CKAN |
| 国立博物館(SNM) | 博物館のコレクション(貨幣学、印章、特別コレクション) | opendata.swiss CKAN |
| 国立図書館(NB) | スイス国立書誌(Helveticat) | SRU(検索)+ OAI-PMH(コレクション) |
| Memoriav / Memobase | 視聴覚遺産(写真、音声、動画) | Linked Open Data(JSON-LD / Hydra) |
| Dodis | スイスの外交文書(文書、人物、組織) | JSON-REST(Solr)+ パーマリンク |
このサーバーは、既存の法律(fedlex-mcp)、交通、統計などのサーバーとともに、歴史、文学、美術というスイスの公共データポートフォリオの人文科学分野を補完します。
記憶機関ファサード(Memobase + Dodis)は、ソースごとに1つのツール群を設けるのではなく、連携する3つのツール — search_heritage、get_heritage_item、list_heritage_collections — を通じて提供されます。すべての結果にソース、パーマリンク、ライセンスが含まれ、ライセンスはメタデータとデジタル化された資料について別々に報告されます(両者は異なる場合があります。メタデータはオープンなLinked Open Dataですが、デジタル化された資料は著作権保護対象の場合があります)。返されるのはメタデータとリンクのみで、著作権で保護された全文(例:Dodisの書き起こし)は一切転載されません。
デモ用クエリ(美術): 「国立博物館で19世紀にチューリッヒを拠点に活動した画家の作品を探し、SIK-ISEAのアーティストデータベースでその伝記を照合してください。」
デモ用クエリ(記憶機関): 「19世紀のチューリッヒのVolksschuleの発展に関する資料は、スイスの記憶機関で見つかりますか?」 → search_heritage(query="Volksschule Zürich", collection="all", date_from="1800", date_to="1899")。
デモ
主な機能
- 🏛️ 5つのデータソースにまたがる11個のツール、2つのリソース、2つのプロンプト
- 🔍
heritage_cross_search— 1回の呼び出しでSIK-ISEA、SNM、NBを並列検索 - 🏛️
search_heritage— Memobase + Dodisを横断する連携ファサード。結果ごとにソース、パーマリンク、メタデータとデジタル化された資料それぞれのライセンスを提供 - 🌐 バイリンガル出力(Markdown / JSON)
- 🔓 APIキー不要 — すべてのデータがオープンライセンスで提供
- ☁️ デュアルトランスポート — stdio(Claude Desktop)+ Streamable HTTP(クラウド)
- 📚 美術研究と教育資料の検索に使えるプロンプトテンプレート
プロジェクトフェーズ: フェーズ1 — 読み取り専用。 すべてのツールにreadOnlyHint: trueが注釈されており、書き込み操作や破壊的な操作はありません。フェーズ2(書き込み対応)への移行には、docs/roadmap.mdに記載された前提条件を満たす必要があります。
前提条件
- Python 3.11+
- uv(推奨)またはpip
インストール
# Clone the repository
git clone https://github.com/malkreide/swiss-cultural-heritage-mcp.git
cd swiss-cultural-heritage-mcp
# Install
pip install -e .
# or with uv:
uv pip install -e .
または、uvx を使います(永続的なインストールは不要です)。
uvx swiss-cultural-heritage-mcp
クイックスタート
# stdio (for Claude Desktop)
python -m swiss_cultural_heritage_mcp.server
# Streamable HTTP (port 8000)
python -m swiss_cultural_heritage_mcp.server --http --port 8000
Claude Desktop ですぐに試せます。
「Ferdinand Hodler について教えてください」 「Nationalmuseum が所蔵する、チューリッヒに関連するコインは何ですか?」 *「スイス国立書誌で Volksschule に関する出版物を探してください」
設定
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json(macOS)または %APPDATA%\Claude\claude_desktop_config.json(Windows)を編集します。
{
"mcpServers": {
"swiss-cultural-heritage": {
"command": "python",
"args": ["-m", "swiss_cultural_heritage_mcp.server"]
}
}
}
または、uvx を使います。
{
"mcpServers": {
"swiss-cultural-heritage": {
"command": "uvx",
"args": ["swiss-cultural-heritage-mcp"]
}
}
}
設定ファイルの場所:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
クラウドへのデプロイ(ブラウザーアクセス用の SSE)
ブラウザー上の claude.ai から利用する場合(ローカルソフトウェアを使用できない管理対象ワークステーションなど):
Render.com(推奨):
- リポジトリを GitHub にプッシュするか、フォークします
- render.com で、「New Web Service」→ GitHub リポジトリに接続します
- リージョン
Frankfurt(EU)を選択します — revDSG / EDÖB に基づくスイスの公共部門での利用に必須です。docs/data-residency.mdを参照してください。 - 起動コマンドを設定します:
python -m swiss_cultural_heritage_mcp.server --http --port 8000 - claude.ai の「Settings」→「MCP Servers」で、
https://your-app.onrender.com/sseを追加します
💡 「開発者のノート PC には stdio、ブラウザーには SSE。」
コンテナー環境(Docker / Kubernetes / Cloud Run)にデプロイする場合、リポジトリにはセキュリティ強化済みの Dockerfile(非 root UID 10001)が含まれています。推奨される SecurityContext については docs/security.md を、エグレスポリシーについては docs/network-egress.md を参照してください。サービスはデフォルトで単一インスタンスとして稼働します。水平方向にスケールする前に、セッションアフィニティの前提条件について docs/scaling.md を参照してください。
利用可能なツール
SIK-ISEA(スイス美術研究)
| ツール | 説明 |
|---|---|
heritage_search_artists | 名前または場所から、スイスの芸術家約 17,000 人(SIKART)を検索します |
heritage_get_artist | SIKART ID(HAUPTNR)から芸術家の詳細プロフィールを取得します |
Nationalmuseum(SNM)
| ツール | 説明 |
|---|---|
heritage_search_museum_datasets | opendata.swiss 上の SNM データセットを検索します |
heritage_browse_collection | CKAN DataStore 経由でコレクション内のオブジェクトを閲覧します |
Nationalbibliothek(NB)
| ツール | 説明 |
|---|---|
heritage_search_helveticat | 全所蔵資料の全文検索(SRU)、または単一コレクションの閲覧(OAI-PMH)を行います |
heritage_list_nb_collections | 利用可能な 68 件の OAI-PMH セットを一覧表示します |
heritage_get_publication | 1 件の出版物について、選択した MARC21 フィールドを Dublin Core 形式に準じたキーに正規化して取得します(OAI-PMH GetRecord)— 完全な目録レコードではありません |
複数ソース横断
| ツール | 説明 |
|---|---|
heritage_cross_search | SIK-ISEA、SNM、NB を並列検索します |
文化機関(Memobase + Dodis)— 連携ファサード
| ツール | 説明 |
|---|---|
search_heritage | Memobase + Dodis を横断検索します(collection = memobase | dodis | all)。date_from / date_to / media_type フィルターを利用できます。各結果には、ソース、パーマリンク、メタデータとデジタル化オブジェクトそれぞれのライセンス情報が含まれます |
get_heritage_item | 1 件のオブジェクトの完全なメタデータを取得します(collection、item_id)。メタデータとリンクのみを返し、保護された全文は一切再掲しません |
list_heritage_collections | 検出情報:利用可能なコレクション、そのプロトコル、認証方式、ライセンスを一覧表示します。調査済みだが未接続のソース(Bundesarchiv、Landesmuseum)と、その理由も含まれます |
使用例
| クエリ | ツール |
|---|---|
| 「Ferdinand Hodler とは誰ですか?」 | heritage_get_artist |
| 「バーゼル生まれのスイス人アーティストを探す」 | heritage_search_artists |
| 「Nationalmuseum はチューリッヒのどのコインを所蔵していますか?」 | heritage_browse_collection |
| 「Volksschule に関する出版物を探す」 | heritage_search_helveticat |
| 「Sophie Taeuber-Arp に関するあらゆる情報を探す」 | heritage_cross_search |
| 「スイスの記憶機関が所蔵する、19世紀のチューリッヒ Volksschule に関する資料」 | search_heritage |
アーキテクチャ
┌─────────────────┐ ┌──────────────────────────────┐ ┌──────────────────────────┐
│ Claude / AI │────▶│ Swiss Cultural Heritage MCP │────▶│ SIK-ISEA │
│ (MCP Host) │◀────│ (MCP Server) │◀────│ opendata.swiss / CKAN │
└─────────────────┘ │ │ ├──────────────────────────┤
│ 11 Tools · 2 Resources │────▶│ Nationalmuseum (SNM) │
│ 2 Prompts │◀────│ opendata.swiss / CKAN │
│ Stdio | SSE │ ├──────────────────────────┤
│ │────▶│ Nationalbibliothek (NB) │
│ No authentication required │◀────│ Helveticat: SRU, OAI-PMH│
│ │ ├──────────────────────────┤
│ search_heritage facade │────▶│ Memobase (JSON-LD/Hydra)│
│ │◀────│ Dodis (JSON-REST/Solr) │
└──────────────────────────────┘ └──────────────────────────┘
データソースの特性
| ソース | プロトコル | 対象範囲 | 認証 |
|---|---|---|---|
| SIK-ISEA(SIKART) | CKAN DataStore | 約17,000人のスイス人アーティスト | なし |
| Nationalmuseum | CKAN DataStore | 博物館のコレクション | なし |
| Nationalbibliothek | SRU 1.2(CQL)+OAI-PMH 2.0 | スイス国立書誌 | なし |
| Memoriav / Memobase | Linked Open Data(JSON-LD / Hydra、RiC-O) | 視聴覚遺産(約46万件のレコード) | なし |
| Dodis | JSON-REST(Solr)+永続的なパーマリンク | 外交文書、人物、組織 | なし |
アーキテクチャ上の決定 — 記憶機関ファサード
2026-07-19 に実際のプローブで検証済み(方法論:mcp-data-source-probe)。 記憶機関4機関を評価し、認証不要で標準化されたクリーンなインターフェースを公開している2機関のみを接続しています。
| ソース | 結果 | 理由 |
|---|---|---|
| Memobase | ✅ 接続済み | Linked-Open-Data API(api.memobase.ch、JSON-LD/Hydra)。?q= で全文検索、/record/<id> で単一レコードを取得し、offset/size でページネーションします。メタデータはオープンです。デジタル化されたオブジェクトには、オブジェクトごとの rightsstatements.org の権利情報(「In Copyright」、アクセスは「onsite」)が付与されています。 |
| Dodis | ✅ 接続済み | JSON-REST/Solr(beta.dodis.ch/api):POST /api/solr/query で検索、GET /api/solr/full/<id> で項目を取得します。永続的なパーマリンクは dodis.ch/<id> です。メタデータはオープンです(引用が必要)。文書には文書ごとの権利情報があります(TEI/PDF はパーマリンク経由)。 |
| Bundesarchiv | ⛔ 未接続 | recherche.bar.admin.ch のバックエンド(CMI AIS)は eIAM ログインと Google reCAPTCHA の背後にあり、セッションをエミュレートしないと機械からアクセスできません。これは不安定で、運営者の意図にも反します。 |
| Landesmuseum | ⛔ 未接続 | sammlung.nationalmuseum.ch には 公開 API がありません(内部向けの未文書化 Ajax/HTML インターフェースのみ)。接続にはスクレイピングが必要となり、耐障害性のガードレールに違反します。 |
その結果、ツールファミリーは4つではなく連携型ツール3つとなります。各結果には、ソース、パーマリンク、分割されたメタデータ/デジタル化オブジェクトのライセンス情報が含まれます。著作権で保護された全文は再現せず(メタデータとリンクのみ)、bar と landesmuseum はスクレイピングせず、list_heritage_collections を通じてアクセス制限のあるものとして記載します。
プロジェクト構成
swiss-cultural-heritage-mcp/
├── src/swiss_cultural_heritage_mcp/
│ ├── __init__.py # Package
│ └── server.py # 11 tools, 2 resources, 2 prompts
├── tests/
│ └── test_server.py # Unit + integration tests (mocked HTTP)
├── .github/workflows/ci.yml # GitHub Actions (Python 3.11/3.12/3.13)
├── .github/dependabot.yml # Monthly dependency + SDK update PRs
├── Dockerfile # Multi-stage, non-root, HEALTHCHECK
├── docs/ # security, network-egress, scaling, data-residency, roadmap
├── pyproject.toml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md # This file (English)
└── README.de.md # German version
単一ファイルのサーバー: 11個のツールは
tools/パッケージではなく、1つのserver.pyにあります。この規模では、分割するよりも単一の直線的なモジュールのほうが読みやすく、レビューもしやすいためです。ツールの数が大幅に増えた場合、SIK-ISEA/SNM/NB/クロス検索の各ブロックが自然な分割ポイントになります。
安全性と制限事項
- 読み取り専用: すべてのツールは HTTP GET リクエストのみを実行します。データの書き込み、変更、削除は行いません。
- 個人データなし: API が返すのは、機関の記録(美術作品、出版物、芸術家)です。このサーバーでは、個人を特定できる情報(PII)を処理または保存しません。
- レート制限: 2026-09-20 に約 380 件のプローブリクエストを実行しましたが、スロットリングは確認されませんでした。ただし、公開されている利用条件については別問題です。国立図書館の SRU および OAI-PMH の利用条件は、このプロジェクトでは確認していません(
PROBE_REPORT_helveticat.mdを参照)。limitパラメーターは控えめに使用してください。サーバーはリクエストごとに 30 秒のタイムアウトを適用します。 - データの鮮度: レコードには、クエリ実行時点での上流ソースの情報が反映されます。このサーバーではキャッシュを行いません。
- 利用規約: データには各ソースの利用規約(ToS)が適用されます(SIK-ISEA、opendata.swiss、Nationalbibliothek)。opendata.swiss のデータセットにはオープンライセンス(CC0 / CC BY)が適用されています。国立図書館については、どちらのエンドポイントの利用規約もこのプロジェクトでは確認していません。レコードに独自の権利表示がある場合は
rights(MARC 506/540)として表示されますが、多くのレコードには権利表示がありません。帰属表示フッターのライセンス表記はソースの一般的な声明であり、個々のレコードに適用されるものではありません。また、JSON レスポンスにはフッター自体がありません。再配布する前にソースに確認してください。 - 保証なし: このサーバーはコミュニティプロジェクトであり、SIK-ISEA、SNM、NB とは提携していません。利用可能かどうかは上流 API に依存します。
既知の制限事項
- SIK-ISEA: 芸術家データは定期的に更新されるため、ごく最近の収蔵品はまだ反映されていない場合があります
- Nationalmuseum: opendata.swiss で公開されているデータセットのみアクセスできます。SNM のコレクションすべてが利用できるわけではありません
- Nationalbibliothek:
maximumRecordsはサーバー側で上限 50 に設定されており、警告なしで適用されます。50 件を超えるリクエストを送っても、警告なしで 50 件が返されます。SRU では OAI セットによる絞り込みができないため、queryとset_specでは異なるエンドポイントが使用され、サーバー側検索で組み合わせることはできません。from_date/until_dateは出版年ではなく、目録レコードの変更日です。2026-09-20 に測定。PROBE_REPORT_helveticat.mdを参照してください。 - 横断検索: 応答時間は 3 つのソースのうち最も遅いものに左右されます
テスト
# Unit tests (no API key required)
PYTHONPATH=src pytest tests/ -m "not live"
# Integration tests (live API calls)
pytest tests/ -m "live"
# Lint and format, as CI runs them
ruff check src/ tests/ scripts/
ruff format --check src/ tests/ scripts/
Ruff のバージョンは pyproject.toml の [project.optional-dependencies] dev で厳密に固定されているため、pip install -e ".[dev]" を実行すると CI で使用されているバージョンがインストールされ、リンティングのゲートもそのバージョンと一致します。新しいバージョンの Ruff を上からインストールすると、ルールセットとフォーマッターが変わり、誰も触れていないコードに差分が報告されます。CONTRIBUTING.md を参照してください。
MCP プロトコルのバージョン
| 項目 | 値 |
|---|---|
| SDK | mcp[cli]>=2.0.0,<3(pyproject.tomlで固定) |
initializeハンドシェイク経由で提供 | 2024-11-05 … 2025-11-25 — ハンドシェイクの上限 |
| リクエストごとのエンベロープ経由で提供 | 2026-07-28 |
| 選択するもの | 接続ごとに、クライアントの最初のリクエストで決まります。2026-07-28の_metaエンベロープを含むリクエストはモダンな接続を開始し、それ以外はハンドシェイク接続を開始します。後から別の時代のバージョンを提示しても拒否されます。 |
| 更新ポリシー | SDKの固定バージョンがプロトコルバージョンの正となります。Dependabotは毎月mcpの更新PRを作成します。プロトコルバージョンの更新はそこでレビューされ、CHANGELOG.mdに記録されます。 |
このサーバーはネゴシエーションを上書きしません。公式のmcp SDKが判断し、どちらの時代のバージョンも、どちらのトランスポート(stdio、HTTPのいずれも)でも利用できます。通信するプロトコルバージョンを制御するには、独自に作ったバージョン文字列ではなく、SDKを固定してください。上記の数値は、固定されたSDK独自のレジストリ(mcp_types.version: HANDSHAKE_PROTOCOL_VERSIONS、MODERN_PROTOCOL_VERSIONS)に基づいています。固定バージョンが変わった場合は、この表ではなくそちらを確認してください。
どちらのリビジョンも
tests/test_protocol_version.pyで固定され、インストール済みのSDKと照合されます。これには、組み立て済みのASGIスタックを通じて実際にinitializeを実行し、測定したハンドシェイクの上限も含まれます。Dependabotによるmcpの更新で、どちらの数値もこの表が古くなったことに気づかないまま変わることはありません。
サーバーの識別情報
| フィールド | 値 | 出典 |
|---|---|---|
name | swiss-cultural-heritage-mcp | __dist__ — PyPI名。server.jsonにも記載 |
title | スイスの文化遺産 | server.SERVER_TITLE |
version | 配布されるパッケージのバージョン | importlib.metadata経由のpyproject.toml |
description | PyPIの一行説明 | pyproject.toml → [project].description |
websiteUrl | プロジェクトのホームページ | pyproject.toml → [project.urls].Homepage |
instructions | このサーバーの用途 | server.INSTRUCTIONS |
識別子は、リポジトリ、PyPIパッケージ、コンソールスクリプトと同じくハイフン区切りです。Pythonのモジュールではアンダースコアを使います。上記のpython -m swiss_cultural_heritage_mcp.serverは矛盾ではなく、パッケージ名としてPythonが許可する唯一の表記です。
2026-07-28の時代にはハンドシェイクがありません。接続ごとに一度serverInfoを送信する代わりに、SDKはすべてのレスポンスの_metaに識別情報を付与し、server/discoverにはケイパビリティ以外のフィールドとしてinstructionsだけが含まれます。
SDKはこれらを自動では設定しません。Server.server_infoにはその旨が明記されています。「バージョン指定のないサーバーは空のversionを報告します。SDKが独自の値で置き換えることはありません」。2026年9月18日までは、このサーバーはどの値も設定せず、呼び出しのたびに"version": ""を報告していました。現在は、時代の異なる両方のバージョンと実際のHTTPリクエストを対象に、tests/test_server_identity.pyで検証されています。コンストラクター引数を設定しても、まだ通信上のフィールドになったとは限りません。
バージョン、説明、URLは派生値であり、直接記述するものではありません。配布物に含まれるパスに値を直書きすると、pyproject.tomlとは別の正が生まれます。これは、バージョン番号についてscripts/check_version_sync.pyが防いでいる不整合そのものです。
変更履歴
CHANGELOG.mdを参照してください。
コントリビューション
CONTRIBUTING.mdを参照してください。
セキュリティ
セキュリティ方針と脆弱性の報告方法については、SECURITY.md(ドイツ語)を参照してください。
ライセンス
MITライセンス — LICENSEを参照してください。
作者
Hayal Oezkan · malkreide
クレジットと関連プロジェクト
- SIK-ISEA: www.sik-isea.ch — スイス美術研究所
- Nationalmuseum: www.nationalmuseum.ch / opendata.swiss
- Nationalbibliothek: www.nb.admin.ch — スイス国立図書館
- プロトコル: Model Context Protocol — Anthropic / Linux Foundation
- 関連: eth-library-mcp — ETH 図書館:スイスの図書館を幅広くカバー(ETH = 科学、NB = 人文科学)
- 関連: fedlex-mcp — 文化遺産法と一次法令
- 関連: zurich-opendata-mcp — 空間・歴史データ:博物館の収蔵品とチューリッヒの地理データ
- ポートフォリオ: Swiss Public Data MCP Portfolio
インストール
uv の uvx で実行できます。クローンや手動でのインストールは不要です。MCP クライアントの設定に追加してください(Claude Desktop、Cursor、Windsurf では mcpServers を使用します。VS Code では .vscode/mcp.json のトップレベルにある servers キーを使用します)。
{
"mcpServers": {
"swiss-cultural-heritage-mcp": {
"command": "uvx",
"args": [
"swiss-cultural-heritage-mcp"
]
}
}
}
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。