mcp-Wikidata工具
一种用于通过Model Context Protocol与Wikidata API交互的服务器实现,提供搜索标识符、提取元数据和执行SPARQL查询的工具。
服务介绍
Wikidata MCP 服务器
使用 Model Context Protocol (MCP) 实现的 Wikidata API 服务器。此项目提供了与 Wikidata 交互的工具,如搜索标识符(实体和属性)、提取元数据(标签和描述)以及执行 SPARQL 查询。
安装
如果尚未安装 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 许可证