@cyanheads/wikipedia-mcp-server (英语)
搜索维基百科的文章,阅读摘要和全文,目标部分,列出一篇文章所引用的参考文献,查找相邻的页面,并通过MCP列出语言版. (原始内容存档于2012-10-12). STIO or Streamable HTTP.
概览
任何语言版本的维基百科. 搜索文章、 阅读摘要或只需您需要的章节、 列出文章引用的脚注、 找到坐标附近的地理标记页面、 列出文章的语言版本。 船舶 wikipedia-guide 代理技能( e)skill://wikipedia-guide/SKILL.md),MCP客户端读取的跨工具的门:切换版,分解页,区号对 section_index在报告缺失的东西之前,需要检查什么.
工具
| 工具 | 说明 |
|---|---|
wikipedia_search_articles | 整个维基百科的全文搜索,返回的排名结果有短描述,Wikidata QIDs,纯文本片段,和页面ID,加上维基百科的拼写建议. |
wikipedia_get_summary | 任何文章的简短摘要——平正文本,Wikidata QID,描述,缩略图 URL,页面类型,canonic URL,修订版,以及坐标. |
wikipedia_get_article | 完整的文章或目标部分作为干净的纯正文本,并保留了部分的标记,条子URL,以及从中读取的修订. |
wikipedia_get_sections | 目录 section_index 目标部分的数值为:. |
wikipedia_search_nearby | 在WGS 84坐标的半径范围内有地理标记的维基百科文章,按距离排序,有短描述和Wikidata QID. |
wikipedia_get_languages | 所有可供文章使用的语言版本,有标题和URL,或者只是你要求的版本. |
wikipedia_get_references | 按文件顺序,文章的脚注引用了每个脚注的文本、外部链接(包括存档副本)和参考文件,加上简短引用的全部引文. |
能力参考
wikipedia_search_articles 工具
- 自由文本
query(空的失败)empty_query),正整数limit(违约10,被夹到50),以及offset呼唤,回转浓缩nextOffset只有被夹住的呼叫载着requestedLimit, (中文(简体) ),appliedLimit和夹子通知。 维基百科在一万年之后没有结果:offset在其前后失败offset_too_large,在窗口上结束的一页带入浓缩truncated - 圆环搜索操作符包括:
incategory:"1648 treaties", (中文(简体) ),morelike:Peace of Westphalia, (中文(简体) ),intitle:Python, (中文(简体) ),hastemplate:Infobox,以及insource:Python(支持取决于安装).sort默认为relevance; 替代品为last_edit_desc, (中文(简体) ),create_timestamp_desc, (中文(简体) ),incoming_links_desc,以及title_natural_asc浓缩回声sort; 留着它和query呼叫时不变 - 每个结果都包含一个纯文本片段,页ID,字数,以及——当文章有这些片段时——它的短篇
description和 Wikidata QID (英语:wikibase_item; 浓缩suggestion携带维基百科的拼写校正(einstien→einstein(中文(简体) ) - 无效或过于复杂
insource:/…/财务报告和审定财务报表intitle:/…/regexs 失败一次invalid_query,则upstreamCode,并指导改正或简化regex或删除操作员。 繁忙的正则搜索仍然可以重试
wikipedia_get_summary 工具
- 需要一个
title; 返回 REST 摘要取出——从铅开始的碎片(wikipedia_get_article与section_index: 0读取了整条线索)——外加简短的描述,缩略语 URL,Wikidata QID(wikibase_item),对于被划上地标的文章,latitude编号 :longitude直接传递到wikipedia_search_nearby page_type歧视standard编号 :disambiguation编号 :no-extract联 合 国disambiguation,用wikipedia_search_articles(三);url, (中文(简体) ),revision_id,以及last_modified将修订版命名为?oldid=<revision_id>是一个永久的链接- 一个没有摘要摘要摘要的已存在的页面用元数据成功, 一个空的
extract,并引导打开 Cononic URL 或尝试section_index: 0。命名空间页可能包含文件而不是文章。 缺少空描述; 缺少标题仍然失败not_found
wikipedia_get_article 工具
- 无
section_index: 文章全文== Section ==标记,或一节大纲(truncated: true当超过时WIKIPEDIA_ARTICLE_OVERFLOW_BYTES(默认为80,000字节). 与一个section_index从wikipedia_get_sections(单位:千美元)0是领带:该节加上其嵌入的分节 - 大纲条目包括已核实
section_index值,包括铅的0。 模糊或无索引标题保留了节列倒数。 技术选择委员会核查得到一次短暂尝试;无法进行的核查被披露 - 重定向曝光
redirected_from而且,对于一个部分的目标,redirect_section. 全文仍完整,包括定向阅读指南section_index,包括 0 优先 - 每个读取返回
url财务报告和审定财务报表revision_id(单位:千美元)?oldid=<revision_id>是已读文本的永久链接; 完整读取, 包括大纲, 也返回last_modified与WIKIPEDIA_BASE_URL设置, 一节读取省略url - 本节将花生花纹树作为栅栏、收缩的树枝,将每行的标签同叶子相配,并保存无名叉子。 一个无法解开的树叶
[table omitted: unparseable clade]树没有table_index - 部分还将数据表作为管道限制行和信息箱作为
label: value线条,全条取出条; 一张超过4万个已渲染字节的表格留下a[table omitted: N rows (table T)]标记。 过table_index: T,然后跟着next_cursor作为cursor同样的投入。 继续阅读第一页的修订;标题和标题出现一次。 每页的表格文本都符合两个表面的40,000 UTF-8字节,但一个不可分割的超大小行或首页标题/标题单独返回oversized_row: true
wikipedia_get_sections 工具
- 需要一个
title;返回部分标题,标题级别,等级编号(例如."2.1"页:1section_index传递给wikipedia_get_article——第一个条目是领先(index: 0,标题Introduction(中文(简体) ) - 标题使用文章渲染器的脚本,公式,白空和单通实体正常化,所以
CO₂段落列表、文章读取和校验的大纲条目保持相同 - 失败者
no_sections写在短文上wikipedia_get_article换成 - 重定向别名曝光
redirected_from和可选redirect_section· ;redirect_section_index仅当唯一锚点匹配真实数字 TOC 索引时才会出现
wikipedia_search_nearby 工具
latitude-90... 90 - 90 - 90 - 90 - 90 - 90 - 90 - 90 - 90 - 90 - 90 - 90 - 90 - 90longitude-180.180(工作组84),radius_meters10-10 000 (默认为 1000), 和正整数limit(默认值 10, 被夹到500), 没有标记过去limit; 浓缩truncated标记比limit允许——500分,维基百科天花板,取而代之的是更窄的光圈. 只有被夹住的呼叫载着requestedLimit, (中文(简体) ),appliedLimit夹子通知- 返回文章排序
distance_meters,带有坐标,简称description,以及 Wikidata QID () (中文(简体) )wikibase_item) (中文(简体) ). 每个都由文章本身的GeoData坐标标记,而不是其Wikidata项的坐标所放出,因此在标签所放之处出现了被误标的文章
wikipedia_get_languages 工具
- 需要一个
title; 返回每个版本的language_code, (中文(简体) ),edition_code,文章标题,和 URL,加source_title,解决的标题。 过edition_code-没有language_code作为language(b) 两者可能有所不同(gsw对als(中文(简体) ) editions将列表缩入要求的代码: 没有文章的代码missing,以及total_languages保留未过滤的数。 失败者no_other_languages当文章没有翻译时; 匹配任何内容的过滤器都是空列表, 而不是失败
wikipedia_get_references 工具
- 需要一个
title; 返回references[]每个参考列表的文档顺序id, (中文(简体) ),label(正文标记),group(a) 说明清单,例如:lower-alpha,主列表缺席),text, (中文(简体) ),urls(包括存档副本)和dois(从)doi.org链接,%-已解码).total_references计算所有页面的脚注.wikipedia_get_article放下脚注标记和参考列表 - 短篇引文如"Galinsky 2012", 第75-76页
work_ids,以及works在同一页上保留了它们名称的全部引用,每页一次。 参考书目和进一步阅读的条目没有列出脚注点——读取:wikipedia_get_article - 每个页面在两面的40 000个UTF-8字节内保存整个脚注;以下
next_cursor作为cursor同样的title财务报告和审定财务报表language。继续阅读第一页的revision_id,而最后一个脚注的光标失败invalid_cursor。无法读取的已绑定版本失败revision_unavailable无脚注的文章返回空列表,其中包含notice,而非错误
特征
建造在 @cyanheads/mcp-ts-core: stdio和可流式的 HTTP 传输器,可插接式(none 编号 : jwt 编号 : oauth),可互换存储(in-memory, (中文(简体) ), filesystem, (中文(简体) ), Supabase, (中文(简体) ), Cloudflare KV/R2/D1),结构化记录,可选择的OpenTeleometry tracking.
维基百科中的相关条目: 克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克
- 双API集成——MediaWiki REST API (中文(简体) )
/api/rest_v1/总结,行动API(/w/api.php搜索、全文、章节、地理搜索和语言链接 - 对每个需要的请求进行重试和回放,包括瞬时拒绝(搜索太忙,速率有限,只读) Action API返回到一个HTTP 200正体内,并有一个上游
Retry-After每个请求都在30秒后重复 对搜索结果的最佳描述搜索得到一次短暂的尝试;User-Agent每个 Wikimedia API 政策标题 - 每个读取的路径都会通过一个渲染器使 HTML 变成相同的平文本形状——
== Heading ==标记, 每行一个列表项, 上标保存, 代码被栅栏 : Action API HTML 摘录的完整文章, 解析器自己 HTML 对该部分的一节, REST 的摘要extract_html。一节中附加了数据表、信息箱和布局表内列表,摘要中没有任何内容。 脚注标记、参考列表和隐藏的引用样式 1 维护信件(CS1 maint: …在每一条道路上都投放;wikipedia_get_references返回脚注 - 待命
language每个工具上的参数( 默认)en) ——所有维基百科语言版均可在单会话中访问;所读的每个标题都遵循重定向 - 针对 MediaWiki 创建的活版注册, 语言验证
action=sitematrix结束点(划出24小时)——在造成超时之前捕获结构有效但不存在的版本
方便代理输出 :
page_type歧视摘要standard编号 :disambiguation编号 :no-extract——不需要字符串解析wikibase_item(Wikidata QID)关于摘要和搜索及附近结果,可以直接与wikidata-mcp-server进行交叉引用- 文章文本、片段和标题在进入下标的路上被反斜-规避
content[]渲染,所以写出加分或减分语法的文章会读作自己,而不是被客户端解释;structuredContent带有同一文本的未脱逃。 栅栏码块和桌排分隔符通过未脱逃,而桌排单元格仍然逃脱 section_index在内容表条目上直接链接到目标阅读参数wikipedia_get_article,包括索引 0- 标题 MediaWiki 无法为页面命名..
< > [ ] { },则|多标题分隔符, % 出逃, 魔法平板, 相对路径—— 在任何请求之前都被拒绝, 使用invalid_title; 线索#fragment被接受并正常解决 - 恢复对每一个错误类型的提示——呼叫者获得可操作的下一步(例如“使用”
wikipedia_search_articles找到正确的标题")
开始
连接到主机实例, 没有安装 :
claude mcp add --transport http wikipedia-mcp-server https://wikipedia.caseyjhand.com/mcp
或者在当地运行它:
claude mcp add wikipedia-mcp-server -- npx -y @cyanheads/wikipedia-mcp-server
对于其他客户端,请将此添加到 MCP 配置文件中 :
{
"mcpServers": {
"wikipedia-mcp-server": {
"command": "npx",
"args": ["-y", "@cyanheads/wikipedia-mcp-server"]
}
}
}
不需要API密钥——维基百科的API公开. 对于 Docker 或源构建,请参见 运行服务器。 。 。 .
配置
| 变量 | 说明 | 默认 |
|---|---|---|
WIKIPEDIA_USER_AGENT | 用户代理头随Wikimedia API请求发送. 为您的部署定制 . | wikipedia-mcp-server/0.3.0 (https://github.com/cyanheads/wikipedia-mcp-server) |
WIKIPEDIA_BASE_URL | 可选的单人监视器 取消设置( 默认): 按语言主机编写 , language 每个呼叫选择版本。 设定为完整的基础 URL( 如私有的 MediaWiki 镜像): 路由 每一个在那个固定主机的呼叫—— language 不再改变它. | (未设定) |
WIKIPEDIA_ARTICLE_OVERFLOW_BYTES | 预算字节,以上全文为(wikipedia_get_article 无 section_index)返回一节大纲,而不是全文。 为这个领域所训练——普通文章保持完整;只有真正的特大文章(二战~86 KB,美国~94 KB)大纲. 以节为对象的读物从未受到影响. | 80000 |
MCP_TRANSPORT_TYPE | 运输: stdio 或者说 http。 。 。 . | stdio |
MCP_HTTP_PORT | HTTP 服务器端口 . | 3010 |
MCP_SESSION_MODE | HTTP 会话模式 : stateless, (中文(简体) ), stateful,或 auto (决心 stateful) (中文(简体) ). Docker 图像船 stateless。 。 。 . | auto |
MCP_AUTH_MODE | Auth 模式 : none, (中文(简体) ), jwt,或 oauth。 。 。 . | none |
MCP_LOG_LEVEL | 日志级别(RFC 5424). | info |
LOGS_DIR | 日志文件目录(只有Node.js). | <project-root>/logs |
LOG_TOOL_FAILURE_PAYLOADS | 记录每个工具调用失败的参数和结果,按密钥名称编辑并封顶 LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES (默认) 16384) (中文(简体) ). 自由形式值内部的秘密不编辑 . | false |
OTEL_ENABLED | 启用 OpenTeleometry 仪器( spans, 度量衡, 完成日志) . | false |
见 .env.example 用于完整可选覆盖列表.
运行服务器
地方发展
要求数 Bun v1.4.0 (英语) 或更高(或Node.js v24+).
-
克隆并安装 :
git clone https://github.com/cyanheads/wikipedia-mcp-server.git cd wikipedia-mcp-server && bun install cp .env.example .env # optional: customize WIKIPEDIA_USER_AGENT or logging -
构建和运行 :
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http # listens at http://localhost:3010/mcp (MCP_HTTP_PORT) -
运行检查和测试 :
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
夹克
docker build -t wikipedia-mcp-server .
docker run --rm -p 3010:3010 wikipedia-mcp-server
Dockerfile 默认为 HTTP 传输、 无国籍会话模式和日志到 /var/log/wikipedia-mcp-server。要从 MCP 客户端运行已发布的图像,请使用 "command": "docker" 与 "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/wikipedia-mcp-server:latest"]。默认情况下安装了 OpenTeleometry 端端依赖性 --build-arg OTEL_ENABLED=false 以略去它们.
项目结构
| 目录 | 目的 |
|---|---|
src/index.ts | createApp() 出入口——注册工具并输入维基百科服务. |
src/config | 服务器特定环境变量与Zod解析并验证. |
src/mcp-server/tools | 工具定义*.tool.ts)——每个工具一个文件. |
src/services/wikipedia | Wikipedia Service — REST API + Action API客户端具有再试/后退和语言验证功能. |
skills/ | 发表 wikipedia-guide 代理技能,在MCP上服务,并在包裹中发运. |
tests/ | 单位和综合测试镜像 src/。 。 。 . |
发展指南
见 CLAUDE.md 发展准则和建筑规则。 简本:
- 搬运工投掷,框架渔获量——否
try/catch在工具逻辑中 - 使用
ctx.log请求范围伐木,ctx.state租户范围储存 - 在
src/mcp-server/tools/definitions/index.ts - 环绕外部 API 调用: 验证 生 → 规范到域类型 → 返回输出计划; 永远不要编织缺失的字段
捐款
问题值得欢迎。 提交前进行检查和测试:
bun run devcheck
bun run test
许可证
阿帕奇-2.0 — 见 自由主义 详细情况.