mcpField
W
Wikidata

Wikidata

远程服务
pipeworx.io记忆与知识05 周前更新

关于 Wikidata

Wikidata 是用于查询 Wikidata 结构化实体、事实和关系的 MCP 服务,适合需要标识符、多语言标签、修订信息或近期变更数据的 Agent 与应用。

主要功能

  1. 01搜索实体标签和别名
  2. 02获取实体声明及可读事实
  3. 03单次调用获取最多 50 个实体
  4. 04分页查看近期变更
  5. 05请求多种语言的标签

适用场景

  1. 01区分 Paris 等同名实体
  2. 02查询实体结构化事实及参考来源
  3. 03通过 Wikidata 标识符追踪关系
  4. 04监控条目或属性的近期编辑

MCP 相关

向 MCP 客户端提供 Wikidata 搜索、实体、事实和近期变更工具。可作为本地 stdio 服务运行,也可通过 Pipeworx 网关连接。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://gateway.pipeworx.io/wikidata/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 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

Wikidata — 结构化知识图谱

Wikidata 是 Wikipedia 的免费结构化数据姊妹项目。约有 1.1 亿个条目(人物、地点、作品、概念),包含机器可读的属性和关系。它是开放网络上最接近通用知识图谱的资源。免费、无需身份验证,并支持 SPARQL 查询。

属于 Pipeworx — 一个将 AI Agent 连接到 1684+ 个实时数据源的 MCP 网关。

这对 AI Agent 为什么重要

对于实体消歧、查询任何知名事物的结构化事实,或遍历图谱(“这位作者写过哪些获奖书籍?”),Wikidata 是最权威的开源资源。搭配 Wikipedia(文本内容)和 OpenAlex(学术细节),即可全面覆盖开放知识。

常见工作流:

  • 实体查询。“Paul McCartney 是谁?”→ Q2599,包含结构化事实(出生日期、国籍、职业、乐队成员身份)。
  • 属性查询。“法国的人口是多少?”→ Q142,属性 P1082(人口),含参考来源和时间戳。
  • 消歧。“Paris”→ Q90(法国首都)、Q830149(得克萨斯州的 Paris)、Q3296(希腊神话中的 Paris)。Wikidata 的结构化类型可确定 Agent 所指的是哪个“Paris”。
  • **图谱遍历。**SPARQL:“所有出生于意大利的诺贝尔物理学奖得主”→ 可通过结构化属性进行关联查询。

工具

工具返回内容
search_entities与标签或别名匹配的 Q-id,以及标签、描述和别名。如果已知名称并需要 id,请从这里开始。
get_entity按 Q-id 获取完整实体 — 标签、描述、别名、原始 P 编码声明、站点链接,以及 lastrevid / modified。接受 language 参数。
get_entities与上述相同,但一次调用最多可获取 50 个 Q-id。返回按 QID 索引的映射及 not_found 列表,因此单个错误 id 不会导致整个批次失败 — 详见下文“过去,一个错误 id 就会让整个批次归零”。接受 language 参数。
get_wikidata_facts返回相同的声明,并将属性名称和值解析为人类可读的标签,同时提供 lastrevid / modified。查询“X 的 是什么”时优先使用此工具。接受 language 参数。
wikidata_recent_changes从 list=recentchanges 获取最近创建或编辑的条目,按最新优先 — Q-id、修订 id、UTC 时间戳、用户、评论、字节大小,以及用于向前翻页的 cursor。
以其他语言读取标签

search_entities、get_entity、get_entities 和 get_wikidata_facts 都接受 language。它会直接传递给 API 自身的 languages 参数,因此单个代码 ("ka")或以逗号/竖线连接的列表("ka,ru,en")都可使用;列表会在一次上游调用中并列返回每种请求语言的标签、描述和别名,你可以据此判断不同语言中的两条记录是否指向同一实体。 省略此参数时,行为与之前完全相同:返回英语。

有两类字段,区别很重要:

  • labels / descriptions / aliases_by_language 以语言为键,只包含 Wikidata 中实际存在的内容。如果请求的语言没有该实体的标签,对应的键就会直接缺失——这种缺失才是如实的结果,你可以据此发现翻译缺失。
  • label / description 是单个最佳值;当请求的语言缺失时,它们会回退到英语。因此,get_entity({id:"Q162887", language:"zu"}) 返回的结果中,label: "Enguri HPP",而 labels 映射为空:该实体没有祖鲁语标签,这一点一目了然。

get_wikidata_facts 会将两部分都本地化——属性名称及其值。因此, {id:"Q162887", language:"ka"} 返回的是格鲁吉亚语键(ქვეყანა → საქართველო),而不是英语键搭配格鲁吉亚语值。

这里的 mul 是真实的语言代码,你会看到它。 Wikidata 将与语言无关的标签——人名、大多数拉丁学名和许多地名——移到了 mul(“多种语言”)代码下;对于这些条目,wbgetentities 返回的 en 标签映射为空。Q42(Douglas Adams)就是其中之一:它有英语描述,但没有英语标签。因此,回退顺序是 请求语言 → en → mul;如果名称来自 mul,你会在 labels 映射中看到它位于 mul 键下:

{"id":"Q42","label":"Douglas Adams","labels":{"mul":"Douglas Adams"},
 "description":"British science fiction writer and humorist (1952–2001)"}

这个键标明了来源:不会把名称错误地归到该实体并不具有的语言下。此前,该工具包对 Q42 返回的是 label: null——请求成功,状态码为 200,但答案却是 null。

一个错误的 id 曾让整个批次归零

wbgetentities 对未知 id 的处理并不一致,以下两种情况截然不同:

  • 未知但格式正确的 id(Q999999999)会被标记为 missing 返回,请求中的其他 id 仍会正常解析。
  • 超出条目 id 范围或格式明显错误的 id(Q99999999999、NOTAQID)会导致 API 拒绝整个请求——HTTP 200,但完全没有 entities,顶层返回 {"error":{"code":"no-such-entity","id":"Q99999999999"}}。

如果不加判断,第二种情况会被视为空映射,因此,50 个 id 的批次中只要有一个拼写错误,就会将全部 50 个都报告为 not_found:请求成功,状态码为 200,却表示没有任何结果。错误中会指出有问题的 id,因此 get_entities 会将其剔除并重试(有次数限制,每轮处理一个 id)。对于 ["Q162887","Q99999999999","Q90","NOTAQID","Q1326165"],现在会正常解析 3 个真实条目,并在 not_found 中返回 2 个错误 id。

将陈述固定到某次编辑

Wikidata 是实时更新的,因此“当前陈述”只有相对于某个修订版本才有意义。两个实体工具都会返回 lastrevid、modified 和 revision_url,因此可以将依据这些信息生成的答案固定到读取时对应的确切编辑版本,并在之后重新核对是否发生变化。

wikidata_recent_changes 则回答另一半问题:哪些条目发生了更改,以及何时更改。命名空间 0 表示条目(Q-id),120 表示属性(P-id),146 表示词汇项。type 可以是 new(新创建)、edit(对现有条目的编辑)或 all。使用 since 指定时间范围,并使用 cursor 向更早的记录翻页。

身份验证

无需身份验证。Wikidata 完全开放。Wikidata 的 SPARQL 端点设有公平使用速率限制,但对大多数 Agent 流量来说额度很宽裕。

标识符方案

前缀类型
Q条目(一个实体——人物、地点、事物)
P属性(一种关系类型——“配偶”“实例”“位于”)
L词位(一个词/词义,用于语言数据)

每个实体都有一个稳定的 Q 编号,作为其在各个 Wikipedia 语言版本中的永久标识符。在 Agent 输出中嵌入 Q 编号,作为规范引用。

常见陷阱

  • 不同实体的数据质量差异极大。 著名人物(爱因斯坦,Q937)有数百条来源可靠的属性。小镇政客可能只有 5 条属性,其中一半来自自动导入的来源。对于要据以采取行动的属性,务必检查其 references 字段。
  • “当前”属性存在多个值。 “X 公司的总裁”可能有 8 个历史值和 1 个当前值。Wikidata 使用限定符属性(开始时间、结束时间、“优先级”)来标明哪个值是当前值——但 Agent 往往会不加判断地取第一个值。
  • 属性重复。 多个属性可能表达相关概念(“国家” P17、“原籍国” P495、“公民身份所在国” P27)。选对属性对准确性很重要。
  • 破坏风险。 Wikidata 和 Wikipedia 一样可以编辑。知名实体受到关注,但冷门实体可能遭到破坏并持续数天。除非某条 Wikidata 事实有指向权威来源的 references 链,否则不要将其作为确凿事实引用。
  • 翻译缺失。 标签存在多种语言版本,但不一定有你指定语言的版本。此时,label 会依次回退到英语和不区分语言的 mul 标签,因此非英语请求不会返回空值——但这也意味着返回的 label 不能证明该实体在该语言下确实有标签。请查看 labels 映射来确认:缺失的键表示确实没有对应标签,而 mul 键表示名称不区分语言,而非经过翻译。请参阅上文“以其他语言读取标签”。
  • SPARQL 超时。 复杂的图查询可能触及 SPARQL 端点的 60 秒超时限制。请将查询拆分为更小的查询,或使用特定属性查找。
  • 标识符,而非事实。 Wikidata 最适合回答“这个实体的规范 ID 是什么”以及“它链接到哪里”。若要了解深入的传记或历史叙述,请访问其链接的 Wikipedia 条目。

数据来源

  • MediaWiki Action API — https://www.wikidata.org/w/api.php
    • action=wbsearchentities(搜索)、action=wbgetentities(读取实体,props=info|labels|descriptions|aliases|claims|sitelinks,languages= 用于语言筛选,每次调用最多可传入 50 个以竖线连接的 ID)
    • action=query&list=recentchanges(近期更改源)
  • API 文档:https://www.wikidata.org/w/api.php 和 https://www.mediawiki.org/wiki/API:Recentchanges
  • 实体页面:https://www.wikidata.org/wiki/<QID>;特定修订版本:https://www.wikidata.org/w/index.php?oldid=<revid>

所有端点均无需密钥。Wikidata 要求调用方发送描述性 User-Agent;此软件包发送 Pipeworx-Wikidata-MCP/1.0。

快速开始

添加到你的 MCP 客户端(Claude Desktop、Cursor、Windsurf 等):

{
  "mcpServers": {
    "wikidata": {
      "url": "https://gateway.pipeworx.io/wikidata/mcp"
    }
  }
}
此端点实际提供的内容

https://gateway.pipeworx.io/wikidata/mcp 上的 tools/list 会返回上表中的工具,以及 Pipeworx 共享元工具——ask_pipeworx、 discover_tools、search_within、remember/recall 和网关级集合中的其他工具。因此,你看到的工具数量会多于表格中的数量:目前,单个套件端点除了列出该套件自己的工具外,还会列出大约 30 个共享工具。连接的 initialize 响应会说明确切的范围,也是当天情况的权威依据。

这是有意如此,并非意外复用。元工具让限定范围的连接也能回答此套件无法覆盖的问题——通过 ask_pipeworx 跨整个目录路由——而无需添加第二个 MCP 服务。目前无法挂载不包含这些工具的套件端点;如果额外的架构定义占用的上下文比路由带来的价值更多,请连接一次完整网关,而不是连接多个套件端点。

或者,连接完整的 Pipeworx 网关,直接列出所有套件的工具,而不仅仅是此套件的工具:

{
  "mcpServers": {
    "pipeworx": {
      "url": "https://gateway.pipeworx.io/mcp"
    }
  }
}

两个 URL 都会连接到同一个网关和相同的 1684+ 个数据源。唯一的区别是直接列出的是哪个套件的工具;从任一端点都可以通过 ask_pipeworx 访问所有工具。

没有 MCP 客户端?通过 HTTP 调用

curl -X POST https://gateway.pipeworx.io/v1/tools/wikidata_search_entities \
  -H 'Content-Type: application/json' \
  -d '{"query":"Albert Einstein"}'

首次调用无需账户。查看任意工具:GET https://gateway.pipeworx.io/v1/tools/wikidata_search_entities。查找工具:使用 {"query":"..."} 向 POST https://gateway.pipeworx.io/v1/tools/search_packs 发送请求。

独立运行(无需网关账户)

此软件包也可以作为本地 stdio MCP 服务运行——无需 Pipeworx 账户,也无需通过网关往返:

{
  "mcpServers": {
    "wikidata": {
      "command": "npx",
      "args": ["-y", "@pipeworx/mcp-wikidata"]
    }
  }
}

或者直接运行它以确认服务已启动:

npx -y @pipeworx/mcp-wikidata

它通过 stdin/stdout 使用 MCP 协议,并响应 initialize/tools/list/tools/call,但仅限此套件的工具——不包含上述网关连接额外提供的任何共享元工具。相同的源代码、相同的工具,但不支持 ask_pipeworx 路由。

使用 ask_pipeworx

你可以用通俗易懂的语言提问,而不是直接调用工具——此功能既适用于上面的套件端点,也适用于完整网关:

ask_pipeworx({ question: "your question about Wikidata data" })

网关会自动选择合适的工具并填入参数。

更多信息

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。