Mcp Wikidata について
Wikidata API を Model Context Protocol 経由で利用できるようにする MCP サーバーです。エンティティとプロパティの ID 検索、メタデータの取得、SPARQL クエリの実行ツールを提供します。Wikidata の構造化データを必要とする LLM アプリケーションの開発者に向いています。
主な機能
- 01Wikidata エンティティ ID の検索
- 02Wikidata プロパティ ID の検索
- 03エンティティに紐づくプロパティの取得
- 04英語のラベルと説明の取得
- 05Wikidata に対する SPARQL クエリの実行
活用シーン
- 01LLM による Wikidata 識別子の検索
- 02SPARQL クエリによる構造化データへの質問応答
- 03Wikidata の情報に基づく映画の推薦
MCP 対応
本プロジェクトは MCP サーバーとして、search_entity、search_property、get_properties、execute_sparql、get_metadata のツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Wikidata MCP サーバー
Model Context Protocol(MCP)を使用した、Wikidata API のサーバー実装です。 このプロジェクトでは、識別子の検索(エンティティとプロパティ)、メタデータの抽出(ラベルと説明)、SPARQL クエリの実行など、Wikidata とやり取りするためのツールを提供します。
インストール
Smithery 経由でのインストール
Smithery 経由で、Claude Desktop 用の Wikidata MCP サーバーを自動的にインストールするには:
npx -y @smithery/cli install @zzaebok/mcp-wikidata --client claude
手動でのインストール
まだインストールされていない場合は、uv をインストールしてください。
$ curl -LsSf https://astral.sh/uv/install.sh | sh
次に、依存関係をインストールします。
$ git clone https://github.com/zzaebok/mcp-wikidata.git
$ cd mcp-wikidata
$ uv sync
# if you want to run client example together
$ uv sync --extra example
実行
次のコマンドでサーバーを実行します:
$ uv run src/server.py
シンプルなクライアントコード(langchain-mcp-adapters を使用)でテストする場合は、次のコマンドでクライアントを実行します:
# in another shell
$ uv run src/client.py
LLM が有効なエンティティ識別子とプロパティ識別子を抽出し、SPARQL クエリを実行して、最後にポン・ジュノ監督の映画をおすすめします。
実行結果を表示
{
"messages": [
HumanMessage(
content="Can you recommend me a movie directed by Bong Joonho?",
),
AIMessage(
tool_calls=[
{
"name": "search_entity",
"args": {"query": "Bong Joon-ho"},
}
],
),
ToolMessage(
content="Q495980",
name="search_entity",
),
AIMessage(
tool_calls=[
{
"name": "get_properties",
"args": {"entity_id": "Q495980"},
}
],
),
ToolMessage(
content='["P345", "P244", "P214", "P227", ...]',
name="get_properties",
),
AIMessage(
tool_calls=[
{
"name": "search_property",
"args": {"query": "director"},
}
],
),
ToolMessage(
content="P57",
name="search_property",
),
AIMessage(
tool_calls=[
{
"name": "execute_sparql",
"args": {
"sparql_query": 'SELECT ?film ?filmLabel WHERE {\n ?film wdt:P57 wd:Q495980.\n SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }\n} LIMIT 1'
},
}
],
),
ToolMessage(
content='[{"film": {"type": "uri", "value": "http://www.wikidata.org/entity/Q483761"}, "filmLabel": {"xml:lang": "en", "type": "literal", "value": "Mother"}}]',
name="execute_sparql",
),
AIMessage(
content='I recommend the movie "Mother," which was directed by Bong Joon-ho.',
),
]
}
Wikidata MCP ツール
サーバーには次のツールが実装されています:
| ツール | 説明 |
|---|---|
search_entity(query: str) | クエリから Wikidata のエンティティ ID を検索します。 |
search_property(query: str) | クエリから Wikidata のプロパティ ID を検索します。 |
get_properties(entity_id: str) | 指定した Wikidata エンティティ ID に関連付けられたプロパティを取得します。 |
execute_sparql(sparql_query: str) | Wikidata で SPARQL クエリを実行します。 |
get_metadata(entity_id: str, language: str = "en") | 指定した Wikidata エンティティ ID の英語のラベルと説明を取得します。 |
ライセンス
MIT ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。