这是一个使用模型上下文协议(MCP)实现Wikidata API的服务器。该项目提供了与Wikidata交互的工具,如搜索标识符(实体和属性)、提取元数据(标签和描述)以及执行SPARQL查询。
要通过Smithery自动安装Wikidata MCP Server到Claude Desktop:
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
# 如果想要一起运行客户端示例
$ uv sync --extra example
使用以下命令运行服务器:
$ uv run src/server.py
如果您想用简单的客户端代码(带langchain-mcp-adapters)进行测试,请在另一个终端中运行客户端:
# 在另一个终端中
$ uv run src/client.py
LLM会提取有效的实体和属性标识符,执行一个SPARQL查询,并最终推荐一部由奉俊昊导演的电影。
<details> <summary><i>查看执行输出</i></summary>{
"messages": [
HumanMessage(
content="你能推荐我一部奉俊昊导演的电影吗?",
),
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='我推荐您观看由奉俊昊导演的电影《母亲》。',
),
]
}
</details>
服务器实现了以下工具:
| 工具 | 描述 |
|---|---|
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 许可证