mcpField
S
swiss-ip-mcp

swiss-ip-mcp

ローカル
github.com法務・行政04 週間前に更新

swiss-ip-mcp について

swiss-ip-mcpは、スイスのSwissreg知的財産登録簿を検索する読み取り専用MCPサーバーです。商標、特許、特許公報、補足的保護証明書を調べるユーザー向けに、自然言語で各分野を検索できます。

主な機能

  1. 01商標の検索と詳細取得
  2. 02テキストや出願人による特許検索
  3. 03公式特許公報の検索
  4. 04補足的保護証明書の検索
  5. 05期間指定による最近の出願の絞り込み
  6. 06登録情報リソースとレポート用プロンプト

活用シーン

  1. 01名称が商標登録済みか確認
  2. 02企業の商標と特許を調査
  3. 03期間内の新規出願を検索
  4. 04製薬会社が保有する証明書を調査

MCP 対応

Swissregの検索・照会ツール、読み取り専用リソース、定型プロンプトをMCP対応クライアントに提供します。stdioとHTTPのトランスポートに対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"malkreide-swiss-ip": {
"command": "uvx",
"args": [
"swiss-ip-mcp"
],
"env": {
"IGE_USERNAME": "<IGE_USERNAME>",
"IGE_PASSWORD": "<IGE_PASSWORD>"
}
}
}
}
起動コマンドuvx swiss-ip-mcp
設定が必要な環境変数
IGE_USERNAMEシークレットUsername for the Swiss Federal Institute of Intellectual Property (IGE/IPI) Swissreg API. Issued by IGE after signing the terms of use.
IGE_PASSWORDシークレットPassword for the IGE/IPI Swissreg account.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiswiss-ip-mcp1.2.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

🇨🇭 スイス公共データ MCP ポートフォリオの一部です

💡 swiss-ip-mcp

スイス知的財産データ(IGE/IPI)向け MCP サーバー

Version License: MIT Python 3.11+ MCP Data Source CI

🇩🇪 ドイツ語版 → README.de.md


概要

swiss-ip-mcpは、**スイス連邦知的財産機関(IGE/IPI)**が運営するスイスの知的財産登録簿Swissregに、AI モデルが構造化された自然言語ベースでアクセスできるようにするModel Context Protocol (MCP)サーバーです。

これはpatent-mcpの後継であり、Swissreg Datadelivery APIで利用できるすべての分野を対象としています。商標、特許、特許公開公報、補足的保護証明書(SPC/ESZ)に対応しています。

このサーバーはモデルに依存しません。 Claude、GPT-4、Llama、その他のMCP対応クライアントで動作し、Claude Desktop専用ではありません。

デモ:Claudeがswiss-ip-mcpを介してスイスの商標登録簿を検索


質問例

本領を発揮するのは自然言語での検索です。登録簿を手動で検索する代わりに、質問するだけです。

「チューリッヒ市はIGEにどのような商標を登録していますか?」

「『Learning City Zurich』という名称は、スイスで商標登録されていますか?」

「過去6か月間にスイスの特許を出願した製薬会社はどこですか?」

「2025年1月以降の教育分野(ニース分類第41類)の商標出願をすべて表示してください。」

「Novartisはスイスでどのような補足的保護証明書を保有していますか?」


対応分野

分野説明
商標スイスの商標登録簿 — 出願、保護、権利者、ニース分類
特許スイス特許 — 出願、付与、IPC分類、出願人、発明者
特許公開公報スイス官報に掲載された公式の特許公開公報
SPC / ESZ医薬品および植物保護製品の補足的保護証明書

注: 意匠検索は、Swissreg Datadelivery APIではまだ利用できません。


ツール(11)

ツール機能
swiss_ip_search_trademarks商標の全文検索(ワイルドカード*に対応)
swiss_ip_get_trademark登録番号を指定して商標を取得
swiss_ip_search_trademarks_by_owner指定した権利者が保有する商標をすべて検索
swiss_ip_search_trademarks_by_classニース分類の類で商標を絞り込み
swiss_ip_search_patents特許の全文検索
swiss_ip_get_patent番号を指定して特許を取得
swiss_ip_search_patents_by_applicant出願人名または発明者名で特許を検索
swiss_ip_search_patent_publications特許公開公報を検索
swiss_ip_search_spcSPC/ESZ検索(医薬品および植物保護)
swiss_ip_search_recent_filingsすべての分野を対象に、期間で出願を絞り込み
swiss_ip_get_quotaAPIのデータ転送残量を確認
リソースとプロンプト

ツールに加えて、サーバーは次の2つのMCPプリミティブを公開します。

リソース(読み取り専用のメタデータ、swissip:// URIスキーム):

URI内容
swissip://aboutサーバーとデータソースのメタデータ(出典、対象ドメイン)
swissip://domains対象となる知的財産ドメインの一覧

プロンプト(厳選されたワークフローテンプレート):

プロンプト引数目的
trademark_availabilityname名前がスイスで登録済みの商標かどうかを確認します
competitor_ip_reportcompany企業の知的財産の概要(商標+特許)を提示します
recent_ip_filings_reportip_type, date_from, date_to指定期間の最近の出願についてレポートします
エラーの意味

ツールの実行エラー(APIの失敗、タイムアウト、認証情報の不足)は、MCPのisError: trueと、マスキングされたユーザーフレンドリーなメッセージとともに返されます。内部の詳細(スタックトレース、生のAPIレスポンス本文)はサーバーログにのみ記録されます。該当する番号が見つからない場合はエラーではありません。match_type: "none"とmessageを含む通常の結果が返されます。


プロジェクトのフェーズ

このサーバーは、MCPの段階的ロールアウトモデルの**フェーズ1(読み取り専用)**にあり、すべてのツールは読み取り専用で、書き込みは行いません。フェーズ計画と、将来書き込み可能なフェーズに進むための前提条件については、ROADMAP.mdをご覧ください。


アーキテクチャ

AI client (Claude Desktop, Cursor, VS Code + Continue, …)
         │
         │  MCP (stdio or SSE)
         ▼
   swiss-ip-mcp
         │
         │  HTTPS + OAuth2 (IGE IDP)
         ▼
  Swissreg Datadelivery API
  https://www.swissreg.ch/public/api/v1
         │
         ├── TrademarkSearch
         ├── PatentSearch
         ├── PatentPublicationSearch
         ├── SPCSearch
         └── UserQuota
トランスポートモード
トランスポート用途設定
stdioClaude Desktop、ローカル開発デフォルト(追加設定不要)
Streamable HTTPクラウドへのデプロイ(Render.comなど)MCP_TRANSPORT=streamable-http
SSE従来のHTTPクライアント — 非推奨MCP_TRANSPORT=sse

SSEは非推奨です。 プロトコルリビジョン2026-07-28により、機能ライフサイクルポリシー(SEP-2596)のもと、HTTP+SSEトランスポートは非推奨に再分類されました(2025-03-26以降、段階的に非推奨となっていました)。12か月の非推奨期間中は引き続き利用できますが、新規デプロイではMCP_TRANSPORT=streamable-httpを使用してください。

トランスポートは、起動時に環境変数MCP_TRANSPORTから選択されます(デフォルトはstdio)。HTTPトランスポートはuvicornによって提供され、次の設定が適用されます。

変数デフォルト用途
MCP_HOST127.0.0.1バインドアドレス。0.0.0.0を使用するのは、コンテナ内またはリバースプロキシの背後に限ります。
PORT / MCP_PORT8000バインドポート(PaaSの慣例によりPORTが優先されます)。
MCP_ALLOWED_ORIGINS(空)カンマ区切りのCORSオリジン許可リスト。本番環境ではワイルドカードを使用しないでください。
MCP_ALLOWED_HOSTS(空)カンマ区切りのHostヘッダー許可リスト。設定するとDNSリバインディング保護が有効になります。

Mcp-Session-IdヘッダーはCORS経由で公開されるため、ブラウザベースのクライアントは後続のリクエストでこのヘッダーを読み取り、返送できます。


前提条件

  1. IGEの認証情報(無料):利用規約に署名し、フォームを郵送でIGEに送付してください。受領後、認証情報が発行されます。
  2. Python 3.11以降
  3. uv(推奨)またはpip

インストール

# Run directly with uv (recommended, no local installation needed)
uvx swiss-ip-mcp

# Local development installation
git clone https://github.com/malkreide/swiss-ip-mcp
cd swiss-ip-mcp
pip install -e ".[dev]"

設定

環境変数
export IGE_USERNAME="your_username"
export IGE_PASSWORD="your_password"
Claude Desktop

設定ファイルを開きます。

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "swiss-ip": {
      "command": "uvx",
      "args": ["swiss-ip-mcp"],
      "env": {
        "IGE_USERNAME": "your_username",
        "IGE_PASSWORD": "your_password"
      }
    }
  }
}
その他のMCPクライアント

swiss-ip-mcpは、MCPに対応したあらゆるクライアントで使用できます。

クライアント設定
Cursor~/.cursor/mcp.jsonに追加します(Claude Desktopと同じ形式)
VS Code + Continuecontinue.jsonのMCPサーバーブロックから追加します
WindsurfMCPサーバーの設定から追加します
セルフホスト(mcp-proxy)MCP_TRANSPORT=sseでSSEトランスポートを使用します
クラウド / Render.com(Streamable HTTP)
MCP_TRANSPORT=streamable-http \
  MCP_HOST=0.0.0.0 PORT=8000 \
  MCP_ALLOWED_ORIGINS="https://your-client.example" \
  MCP_ALLOWED_HOSTS="your-app.onrender.com" \
  IGE_USERNAME=... IGE_PASSWORD=... \
  swiss-ip-mcp

セキュリティに関する注意: 0.0.0.0 にバインドするのは、コンテナ内またはリバースプロキシの背後に限ってください。公開環境では、必ず MCP_ALLOWED_ORIGINS と MCP_ALLOWED_HOSTS を設定してください。これにより、CORS のスコープ制限と DNS リバインディング対策が有効になります。 エンドポイントは認証なしで利用でき、公開されている IP レジスターのデータのみを提供します。先に認証を追加しない限り、認証情報を必要とするツールや非公開のツールをこのトランスポートの背後に配置しないでください。

Docker / Kubernetes

強化されたマルチステージ構成の Dockerfile(非 root UID 10001、/health の HEALTHCHECK)、リソース制限を設定した docker-compose.yml、および Kubernetes マニフェストと HAProxy のスティッキーセッション設定が deploy/ に含まれています。

docker compose up --build   # reads IGE_* from .env

強化、リソース制限、スケーリング(ステートレスとスティッキーセッション)の詳細については、docs/deployment.md を参照してください。


テスト

# Unit tests (no credentials needed)
PYTHONPATH=src pytest tests/ -v

# Including live integration tests against the real API
IGE_USERNAME=... IGE_PASSWORD=... PYTHONPATH=src pytest tests/ -v

CI ワークフローは Python 3.11、3.12、3.13 で実行されます。


オブザーバビリティ(任意)

サーバーは OpenTelemetry トレースを出力できます。各ツール呼び出しにつき 1 つのスパンが作成され、バックエンドの Swissreg/IDP への HTTP 呼び出しには子スパンが作成されます。トレーシングはデフォルトで無効で、有効にするまでオーバーヘッドは発生しません。

pip install 'swiss-ip-mcp[otel]'

MCP_OTEL_ENABLED=1 \
  OTEL_EXPORTER_OTLP_ENDPOINT=http://your-collector:4318 \
  MCP_ENV=production \
  swiss-ip-mcp
変数用途
MCP_OTEL_ENABLEDトレースのエクスポートを有効にするには 1 を設定します(または、下記のエンドポイントのみを設定します)。
OTEL_EXPORTER_OTLP_ENDPOINTOTLP/HTTP コレクターのエンドポイント(標準の OTEL 変数)。
MCP_ENVdeployment.environment リソース属性の値(デフォルトは production)。

ツールのスパンに記録されるのは mcp.tool.name と mcp.tool.result.is_error のみです。クエリ引数、認証情報、レスポンス本文は記録されません。

ロギング

サーバーは構造化 JSON を stderr に出力します(stdout は stdio プロトコル用に確保されています)。各ツール呼び出しには tool 名と correlation_id が紐付けられるため、1 回の呼び出しに関するすべてのログ行を関連付けられます。LOG_LEVEL でログレベルを設定します(DEBUG / INFO / WARNING / ERROR、デフォルトは INFO)。

{"event": "tool.call.start", "tool": "swiss_ip_search_trademarks", "correlation_id": "da55…", "level": "info", "timestamp": "…Z"}

MCP プロトコルバージョン

このサーバーは、同じエンドポイントで2 つのプロトコル世代に対応しています。接続時のクライアントの最初のリクエストによって、どちらを適用するかが決まります。後続のリクエストで別の世代を指定しても拒否されます。

世代リビジョン利用するクライアント
initialize ハンドシェイク2024-11-05 … 2025-11-25現在のクライアントが使用するものです。サーバーは指定されたリビジョンで応答します。リクエストでそれより新しいバージョンが要求された場合は、上限である 2025-11-25 で応答します。
リクエストごとのエンベロープ2026-07-282026-07-28 の _meta エンベロープを含むリクエストによって、モダン接続が開始されます。

どちらのリビジョンも tests/test_protocol_version.py で固定され、インストール済み SDK に対して検証されます。そのため、Dependabot による mcp の更新で、どちらかのリビジョンが予期せず変わることはありません。

さらに、tests/test_modern_era.py では、両方の世代を実測します。Mcp-Method / Mcp-Protocol-Version ルーティングヘッダー付きの 2026-07-28 _meta エンベロープと、旧式の initialize を実際に送信し、組み立て済みの ASGI アプリを経由した応答を検証します。このセクションの以前のリビジョンには、「このサーバーは initialize を送信する ASGI アプリを構築しない」という反対の主張がありましたが、それは誤りでした。_build_http_app() は ASGI アプリを構築しており、tests/test_cors.py でも以前からそのアプリにリクエストを送信していました。ゲートが依存していた SDK 定数には、その根拠がありませんでした。

なお、SDK の LATEST_PROTOCOL_VERSION はハンドシェイク世代ではなく、モダン世代のエイリアスです。これだけを基準に固定すると、現在のクライアントが実際にネゴシエートする世代が変更されても検知できません。

サーバーの識別情報

2026-07-28 以降、このサーバーは initialize レスポンスで一度だけではなく、すべての結果の _meta (io.modelcontextprotocol/serverInfo、SEP-2575)で自身を識別します。このサーバーはそこにパッケージのバージョンと websiteUrl を報告します。測定して修正するまでは、SDK のデフォルト値である空の version 文字列を使用していました。icons は意図的に未設定です。リポジトリにアイコンのアセットが含まれていないためです。

更新ポリシー。 ゲートに失敗した場合は、定数をそのまま編集しないでください。2 つのリビジョン間の仕様変更履歴を確認し、サーバーが引き続き正常に動作することを検証してから、定数、このセクション、README.de.md、CHANGELOG.md をまとめて更新してください。


データソース

すべてのデータは、IGE/IPI Swissreg Datadelivery API によって提供されます。利用規約に署名すれば API を無料で利用できますが、月間のデータ転送量には上限があります。swiss_ip_get_quota ツールを使用すると、残りの割り当て量をいつでも確認できます。

項目値
提供元スイス連邦知的財産機関(IGE/IPI)
ソースSwissreg Datadelivery API — https://www.swissreg.ch/public/apidocs/
ライセンス/規約IGE/IPI Swissreg Datadelivery API 利用規約

出典情報: すべてのツールレスポンスには source ブロック(提供元、ソース URL、ライセンス)が含まれるため、下流の利用者は出典を保持できます。結果のエンベロープは { source, total, count, match_type, results, next_page_token } です。


安全性と制限事項

  • 読み取り専用: すべてのツールは、認証済みの POST リクエストを Swissreg API に送信します。いずれのシステムでも、データの書き込み、変更、削除は行いません。
  • 個人データなし: API が返すのは、公的な IP 登録情報(商標名、特許の名称、出願人の組織)です。このサーバーが処理または保存する個人を特定できる情報(PII)は、IGE API が公開記録として返す情報以外にはありません。
  • レート制限とクォータ: IGE Swissreg API は、アカウントごとに月間データ転送クォータを適用します。残りのクォータを確認するには、swiss_ip_get_quota ツールを使用してください。サーバーはリクエストごとに 60s のタイムアウトを設定します。調査目的のクエリでは、大きな page_size 値(>20)を避けてください。
  • 認証: 認証情報(IGE_USERNAME、IGE_PASSWORD)は実行時に環境変数から読み込まれ、ログに記録されたり、永続化されたりすることはありません。
  • 利用規約: データには、IGE Swissreg Datadelivery API の利用規約が適用されます。API にアクセスするには、IGE/IPI との署名済み利用契約が必要です。
  • 認証情報なしでアドレス一覧を検証済み(2026-08-08)。 各アドレス、Keycloak realm、およびこのサーバーが構築する client_id は、ソースが公開しているものと一致します。null の結果も記録しました。誰も書き留めなかった null の結果は、次回の確認では存在しなかったのと同じだからです。独立した検証は 3 つあります。1 つだけでは不十分だからです。
    • IDP は区別します。認証情報が誤っている状態で realms/egov を指定すると invalid_grant("Invalid user credentials")、存在しない realm を指定すると 404 "Realm does not exist"、存在しない client_id を指定すると invalid_client が返されます。つまり、realm と client は存在し、不足しているのは認証情報だけです。
    • realm は .well-known/openid-configuration の下で独自のトークンエンドポイントを宣言しており、ここで構築する URL と一致します。
    • 公式 API ドキュメントには、client_id を「constant string」と明記したうえで、両方のアドレスがそのまま記載されています。
  • 3 つ目の検証が必要な理由: Swissreg API 自体は区別しません。トークンなしの POST は 403、存在しないトークンを使った POST は 401 を返します。また、/public/api/ の下に存在しないパスを自由に指定しても、まったく同じ結果になります。この場合、ステータスコードは何の証明にもなりません。scripts/record_fixtures.py は実行のたびにこれを再測定し、対照テストで区別できなくなった場合は中断します。
  • レスポンスのペイロードは 2026-10-04 以降に記録されています(tests/fixtures/live/、専用の RECORDING.md あり)。実際の構造を使い、テキスト値は合成データです。認証情報を入手するまでは NOT RECORDED と記載されており、その空白には代償がありました。手書きのフィクスチャでは、レコード要素を Item、カウンターを TotalCount と名付けていました。これはパーサーが探していたものとまったく同じでした。しかし、ソースではどちらの名前も使われていません。レコードは role="item" を持つ Result の子要素で、カウンターは Meta/TotalItemCount です。どちらも同じように誤っていたため、単体テスト 171 件がすべて成功する一方で、すべての検索ツールがヒット数 0 を返していました。実行番号 37198882345 と 37201829767 で測定しました。
  • 保証なし: このサーバーはコミュニティプロジェクトであり、Swiss Federal Institute of Intellectual Property(IGE/IPI)とは提携していません。利用可能かどうかは、上流 API の稼働状況に依存します。

関連サーバー

サーバー内容
zurich-opendata-mcpチューリッヒ市のオープンデータ(CKAN、天気、駐車場、地理データ)
fedlex-mcpFedlex SPARQL によるスイス連邦法
swiss-transport-mcp公共交通機関、運行障害、チケット、列車編成
swiss-road-mobility-mcpシェアモビリティ、EV 充電ステーション、交通データ
global-education-mcpUNESCO / OECD の教育データ
patent-mcp⚠️ 非推奨 — このサーバーに置き換えられました

貢献

バグの報告や変更の提出方法については、CONTRIBUTING.md(ドイツ語)をご覧ください。


セキュリティ

セキュリティ体制、強化の概要、脆弱性の報告方法については、SECURITY.mdをご覧ください。


ライセンス

MIT License — LICENSEをご覧ください。


作者

Hayal Oezkan · github.com/malkreide

インストール

uv の uvx 経由で実行できます。クローンや手動インストールは不要です。MCP クライアントの設定に追加してください(Claude Desktop、Cursor、Windsurf では mcpServers を使用し、VS Code では .vscode/mcp.json のトップレベルキー servers を使用します)。

{
  "mcpServers": {
    "swiss-ip-mcp": {
      "command": "uvx",
      "args": [
        "swiss-ip-mcp"
      ],
      "env": {
        "IGE_USERNAME": "<your IGE_USERNAME>",
        "IGE_PASSWORD": "<your IGE_PASSWORD>"
      }
    }
  }
}

認証情報が必要です。IGE_USERNAME と IGE_PASSWORD を設定してください(上記のプレースホルダー値を置き換えてください)。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。