mcpField
W
wikidata-mcp-server

wikidata-mcp-server

リモート
github.com/cyanheads検索3今日更新
リポジトリ

wikidata-mcp-server について

wikidata-mcp-serverは、Wikidataナレッジグラフを扱う研究者やエージェント向けのサーバーです。エンティティ検索、取得、SPARQLクエリ、外部ID解決に対応し、大きすぎるエンティティやステートメントは絞り込み取得に役立つ概要を返します。

主な機能

  1. 01項目とプロパティの検索
  2. 02エンティティ、ステートメント、サイトリンクの取得
  3. 03エンティティラベルの一括解決
  4. 04SPARQL SELECTクエリの実行
  5. 05外部識別子からエンティティを解決

活用シーン

  1. 01キーワードによるWikidataエンティティの検索
  2. 02SPARQLによるグラフデータの照会と整理
  3. 03DOI、PMID、ORCIDからエンティティを検索

MCP 対応

STDIOまたはStreamable HTTP経由で、7つのツールと1つのエンティティリソースをMCPクライアントに公開します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://wikidata.caseyjhand.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npm@cyanheads/wikidata-mcp-server0.3.0

ツール

7
パラメーター型必須説明
typeenumいいえ検索するエンティティの種類です。Q-ID(人物、場所、概念)には "item"、P-ID(述語)には "property" を使用してください。item | property
limitintegerいいえ返す結果の最大数です。範囲:1–50。
querystringはいエンティティのラベル、別名、説明との照合に使用する検索語です。
offsetintegerいいえページネーションのオフセットです。0 から始め、結果ページを進めるたびに limit を加算します。
languagestringいいえ返されるラベルと説明に使用する Wikidata の言語コードです(例:"en"、"de"、"zh-hant")。大文字と小文字は区別されません。"_" は "-" として扱われ、空欄の場合は "en" になります。

詳細

@cyanheads/wikidata-mcp-server

MCP を介して Wikidata のエンティティを検索・取得し、SPARQL クエリを実行して、外部識別子を解決します。STDIO または Streamable HTTP に対応しています。

7 個のツール • 1 個のリソース

バージョン ライセンス Docker MCP SDK npm TypeScript Bun

Claude Desktop にインストール Cursor にインストール VS Code にインストール

フレームワーク

公開ホスト型サーバー: https://wikidata.caseyjhand.com/mcp


概要

Wikidata のナレッジグラフを利用できます。エンティティを検索・取得し、SPARQL でグラフをたどり、DOI、PMID、ORCID、OpenAlex、IMDb などの外部識別子を対応する Wikidata 項目に解決します。API キーは不要です。

ツール
ツール説明
wikidata_search_entitiesテキストクエリで項目またはプロパティを検索し、ラベル、説明、マッチに関するメタデータとともに QID/PID を返します
wikidata_get_entityQID または PID でエンティティ全体を取得します。フィールドや言語での絞り込みも指定できます
wikidata_get_labels最大 50 個の QID または PID を、読みやすいラベルと説明に一括で解決します
wikidata_get_statementsエンティティのプロパティ主張を、修飾子の詳細と QID ラベルの解決を含めて取得します
wikidata_get_sitelinksWikidata 項目に対応する Wikipedia および Wikimedia プロジェクトの記事 URL を取得します
wikidata_sparql_queryWikidata Query Service に対して SPARQL SELECT クエリを実行します
wikidata_resolve_external_id外部識別子(DOI、PubMed ID、ORCID、OpenAlex ID など)で Wikidata エンティティを検索します
リソース
リソース説明
wikidata://entity/{id}Wikidata エンティティの簡潔な Markdown サマリー。ラベル、英語の説明、instance-of、Wikipedia リンク、画像、主張の件数を含みます

すべてのリソースデータはツールからも取得できます。

機能リファレンス

wikidata_search_entities ツール
  • ラベル、別名、説明を検索します。人物、場所、作品には type="item"、P-ID には type="property" を指定します
  • Wikidata の言語コード(en、de、pt-br。大文字と小文字は区別されません)を受け付けます。オフセットページネーションに対応し、1 回の呼び出しで最大 50 件を返します
  • 各検索結果には、ラベルと別名のどちらに一致したかを示す一致メタデータが含まれます

wikidata_get_entity ツール
  • Q-ID(例:Q76)では項目を、P-ID(例:P31)ではプロパティを取得します。fields では labels、descriptions、aliases、statements、sitelinks を選択し、上流からの取得範囲を絞り込みます(Q76 全体は 344,114 バイトですが、labels のみなら 6,703 バイトです)
  • languages は、多言語マップを指定した言語コードに絞り込みます
  • エンティティが大きすぎてインライン表示できない場合は、フィールドカテゴリとバイト数の概要を返します。その retrieval_notice には、取得可能な fields のセットが記載され、サイズ超過したステートメントやサイトリンクを絞り込めるツールが示されます

wikidata_get_labels ツール
  • MediaWiki の wbgetentities API を使用し、1 回の呼び出しで最大 50 個の ID を指定できます。リクエストごとに 1 つ以上の言語コードを指定できます
  • 部分的な結果の場合は、found 件数と notFound ID を報告します
  • SPARQL クエリの後に使うことを想定しています。まずクエリを実行し、その後 QID を人が読みやすい形式にします

wikidata_get_statements ツール
  • properties で取得対象を特定の P-ID に絞り込みます(省略するとすべてが対象です)。値、修飾子、参照に含まれる項目 QID と数量単位は、resolve_labels=false を指定しない限りラベルに解決されます
  • 参照はソースごとにまとめられます。不明な値または存在しない値は somevalue/novalue として返されます
  • ステートメントのセットが大きすぎてインライン表示できない場合は、P-ID とバイト数の概要を大きい順に返します(絞り込みなしの場合、Q30 には 1,717 件のステートメントにまたがる 467 個のプロパティがあります)。retrieval_notice の提案に従い、サイズの合計が 24,000 以下となる properties を指定して再度呼び出してください

wikidata_get_sitelinks ツール
  • サイトコード(例:enwiki)を記事タイトルと URL に対応付けます。sites で特定のコードに絞り込めます
  • wikis_only=true を指定すると、Wikipedia のリンクのみを残します(Wiktionary、Wikiquote、Wikisource などは除外されます)
  • Q-ID のみ対応しており、P-ID はサポートされていません

wikidata_sparql_query ツール
  • Wikidata Query Service(Blazegraph)に対して SELECT クエリを実行します。ASK、CONSTRUCT、DESCRIBE、更新クエリ、通常の検索テキストは、リクエスト送信前に拒否されます
  • 標準のプレフィックス(wd:、wdt:、p:、ps:、pq:、wikibase:、bd:)と、クエリで ?<var>Label、?<var>Description、または ?<var>AltLabel 変数を使用した場合の wikibase:label SERVICE は自動的に追加されます。language には 1 つのコード、または fr,en のようなフォールバックリストを指定します
  • 結果は SPARQL 1.1 JSON バインディング形式で、レスポンスあたり最大 64,000 バイトに制限され、行全体の区切りで切り詰められます。結果が大きすぎる場合は、先頭の行と returnedCount、totalCount を返し、ORDER BY と LIMIT/OFFSET を使ったページネーションまたは集計を促す通知が含まれます
  • クライアントの timeout は 1~55 秒です(サーバーのハードリミットは 60 秒)。レート制限は 1 分あたり 60 リクエスト、IP あたり同時 5 リクエストです

wikidata_resolve_external_id ツール
  • DOI(P356)、PMID(P698)、ORCID(P496)、OpenAlex ID(P10283)、IMDb ID(P345)などの外部 ID を QID に解決します。空白とリゾルバー URL のプレフィックスは削除され、DOI、PMID、ORCID は正規化されます
  • プロパティのデータ型は external-id である必要があります。項目値型またはメディア型のプロパティ(例:P31、P18)は拒否されます
  • 見つからない場合は match=null を返します(Query Service はライブの wiki より更新が遅れるため、null は存在しない証拠にはなりません)。同じ ID を複数のエンティティが使用している場合は multipleMatches を返します。ラベルには指定した language が使われ、該当するものがなければ mul にフォールバックします

wikidata://entity/{id} リソース
  • コンパクトな Markdown の概要です。ラベル(全言語)、英語の説明、instance-of(P31)、enwiki の Wikipedia リンク、画像(P18)、ステートメント数が含まれます
  • text/markdown として返されます。エンティティの全データを取得するには wikidata_get_entity を使用してください
  • id には Q-ID または P-ID を指定します。いずれもツールで受け付ける識別子です

機能

@cyanheads/mcp-ts-core を基盤としており、stdio および Streamable HTTP トランスポート、プラグイン可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレーシングに対応した構造化ログを提供します。

Wikidata 固有の機能:

  • エンティティとステートメントの取得には Wikidata REST API v1 を使用します。ルックアップ操作に SPARQL のオーバーヘッドはありません
  • 効率的なラベルの一括解決には MediaWiki wbgetentities API を使用します
  • SPARQL では Wikidata Query Service(Blazegraph)を使用し、プレフィックスヘッダーとラベル SERVICE を自動挿入します
  • Wikimedia のポリシーに準拠した User-Agent を設定できます(WIKIDATA_USER_AGENT)
  • REST と SPARQL のエンドポイントでタイムアウトを個別に設定できます(WIKIDATA_REST_TIMEOUT_MS、WIKIDATA_SPARQL_TIMEOUT_MS)

エージェントに適した出力:

  • すべてのツールは、追跡可能性を高めるため、関連する入力パラメーターをレスポンスに含めます
  • wikidata_get_labels は SPARQL の結果セットに続けて使用することを想定しており、クエリを実行した後、1 回の呼び出しで人間が読みやすい形式に変換できます
  • 外部 ID に重複したクレームがある Wikidata のデータ整合性の問題が発生した場合、wikidata_resolve_external_id は誤って null を返す代わりに multipleMatches を返します
  • サイズの大きすぎるエンティティやステートメントセットには、切り詰められたレスポンスや過大なレスポンスの代わりに、フィールド/プロパティのサイズと、正確な再呼び出し方法を示す retrieval_notice を含む kind: "outline" ペイロードを返します

はじめに

公開ホストインスタンス

https://wikidata.caseyjhand.com/mcp で公開インスタンスを利用できます。インストールは不要です。Streamable HTTP を提供しており、クライアントごとに設定形式が異なります。

Claude Code の場合:

claude mcp add --transport http wikidata-mcp-server https://wikidata.caseyjhand.com/mcp

Cline の場合(cline_mcp_settings.json):

{
  "mcpServers": {
    "wikidata-mcp-server": {
      "type": "streamableHttp",
      "url": "https://wikidata.caseyjhand.com/mcp"
    }
  }
}

Cursor の場合(mcp.json):

{
  "mcpServers": {
    "wikidata-mcp-server": {
      "url": "https://wikidata.caseyjhand.com/mcp"
    }
  }
}

Claude Desktop では、Settings → Connectors からリモートサーバーを追加できます。

セルフホスト/ローカル

以下を MCP クライアントの設定ファイルに追加します。

{
  "mcpServers": {
    "wikidata-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/wikidata-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

または、npx を使用します(Bun は不要です)。

{
  "mcpServers": {
    "wikidata-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/wikidata-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

または、Docker を使用します。

{
  "mcpServers": {
    "wikidata-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/wikidata-mcp-server:latest"]
    }
  }
}

Streamable HTTP を使用する場合は、トランスポートを設定してサーバーを起動します。

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
  • Bun v1.4.0 以上(または Node.js ≥ 24.0.0)。
インストール
  1. リポジトリをクローンします:
git clone https://github.com/cyanheads/wikidata-mcp-server.git
  1. ディレクトリに移動します:
cd wikidata-mcp-server
  1. 依存関係をインストールします:
bun install
  1. 環境を設定します:
cp .env.example .env
# edit .env and set any overrides

設定

すべての設定は、起動時に Zod スキーマを使用して検証されます。主な環境変数:

変数説明デフォルト
MCP_TRANSPORT_TYPEトランスポート:stdio または httpstdio
MCP_HTTP_PORTHTTP サーバーのポート3010
MCP_HTTP_ENDPOINT_PATHMCP サーバーがマウントされる HTTP エンドポイントのパス/mcp
MCP_PUBLIC_URLTLS 終端リバースプロキシ環境向けのパブリックオリジンの上書き値なし
MCP_AUTH_MODE認証:none、jwt、または oauthnone
MCP_SESSION_MODEHTTP セッションモード:stateful、stateless、または autostateless
MCP_LOG_LEVELログレベル(debug、info、notice、warning、error)info
MCP_GC_PRESSURE_INTERVAL_MSオプトインによる強制 GC の間隔(ミリ秒、Bun のみ)0(無効)
LOGS_DIRログファイルのディレクトリ(Node.js のみ)<project-root>/logs
STORAGE_PROVIDER_TYPEストレージバックエンド:in-memory、filesystem、supabase、cloudflare-kv/r2/d1in-memory
WIKIDATA_USER_AGENTWikimedia リクエストに使用する User-Agent 文字列(ポリシーにより、説明的な値が必要です)wikidata-mcp-server/0.1 (https://github.com/cyanheads/wikidata-mcp-server)
WIKIDATA_SPARQL_TIMEOUT_MSSPARQL レスポンスの最大待機時間(ミリ秒)55000
WIKIDATA_REST_TIMEOUT_MSREST API レスポンスの最大待機時間(ミリ秒)10000
OTEL_ENABLEDOpenTelemetry を有効にするfalse

すべてのオプションの上書き設定については、.env.example を参照してください。

サーバーの実行

ローカル開発
  • 本番バージョンをビルドして実行します:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:http
    # or
    bun run start:stdio
    
  • チェックとテストを実行します:

    bun run devcheck  # Lints, formats, type-checks, and more
    bun run test      # Runs the test suite
    
Docker
docker build -t wikidata-mcp-server .
docker run --rm -p 3010:3010 wikidata-mcp-server

Dockerfile のデフォルトでは、HTTP トランスポート、ステートレスセッションモードを使用し、ログを /var/log/wikidata-mcp-server に出力します。OpenTelemetry のピア依存関係はデフォルトでインストールされます。省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。

プロジェクト構成

ディレクトリ目的
src/index.tscreateApp() のエントリーポイントです。ツールとリソースを登録し、サービスを初期化します。
src/mcp-server/toolsツールの定義(*.tool.ts)です。エンティティ検索、ステートメント、サイトリンク、SPARQL、外部 ID 解決のための 7 つのツールがあります。
src/mcp-server/resourcesリソースの定義です。エンティティ概要リソースがあります。
src/services/wikidataWikidata サービスレイヤーです。REST API クライアント、SPARQL クライアント、ステートメントの正規化、型定義を提供します。
src/configZod を使用して、サーバー固有の環境変数を解析・検証します。
tests/src/ の構成に対応した単体テストと統合テストです。

開発ガイド

開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。概要は次のとおりです。

  • ハンドラーは例外をスローし、フレームワークがキャッチします。ツールのロジック内で try/catch を使用しないでください。
  • ログには ctx.log を、ストレージには ctx.state を使用してください。
  • 新しいツールとリソースは、createApp() の配列に登録してください。
  • 外部 API 呼び出しをラップする際は、生データを検証し、ドメイン型に正規化してから出力スキーマに従って返してください。不足しているフィールドを捏造しないでください。

コントリビューション

課題の報告を歓迎します。提出前にチェックとテストを実行してください。

bun run devcheck
bun run test

ライセンス

Apache-2.0 — 詳細は LICENSE を参照してください。

コメント

MCP は初めてですか?

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

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