Wikipedia Mcp Server

io.github.cyanheads由 GitHub 账号 cyanheads 发布v0.3.0更新于 Oct 29, 2026

Search and read Wikipedia articles and sections, list cited references, nearby pages, and languages.

已验证Streamable HTTP可网页运行位置与生活网页搜索与抓取知识与记忆

概览

AI 生成的概览

搜索并阅读任意语言版本的维基百科:摘要、全文或指定章节、引用脚注、附近地理条目以及可用语言版本。

可以做什么
  • 按全文关键词搜索条目,返回排序结果、摘要片段、Wikidata QID 与拼写建议
  • 读取简短摘要或整篇条目,也可按索引只读某一章节,含表格与信息框
  • 列出条目的目录及各章节索引,便于定点阅读
  • 列出条目引用的脚注,含链接、存档副本与 DOI
  • 按坐标查找附近带地理标记的条目,并按距离排序
  • 列出条目存在的各语言版本及其标题与链接
适用场景
适合助手在调研、写作或事实核查时需要百科背景、定义或出处,并希望引用带永久修订链接的原文而非凭记忆作答。也适用于跨语言查询和查找某坐标附近的名胜条目。
运行要求
可使用托管 HTTP 端点,或通过 npx 在本机运行(需 Node.js;从源码构建需 Bun 1.4 以上或 Node.js 24 以上)。无需 API 密钥,维基百科 API 是公开的。可选配置包括 WIKIPEDIA_USER_AGENT、用于私有镜像的 WIKIPEDIA_BASE_URL,以及传输方式、端口、认证模式和日志级别等变量。
安装前请注意
仅以只读方式访问公开的维基百科内容,不涉及凭据或付费。条目正文、标题和摘要属于第三方内容,应视为数据而非指令。若开启 LOG_TOOL_FAILURE_PAYLOADS,失败的调用参数与结果会被记录,且自由文本中的密钥不会被脱敏。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Wikipedia Mcp Server,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.cyanheads%2Fwikipedia-mcp-server/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "wikipedia": {
      "type": "http",
      "url": "https://wikipedia.caseyjhand.com/mcp"
    }
  }
}

README

@cyanheads/wikipedia-mcp-server

Search Wikipedia articles, read summaries and full text, target sections, list an article's cited references, find nearby pages, and list language editions via MCP. STDIO or Streamable HTTP.

7 Tools

Public Hosted Server: https://wikipedia.caseyjhand.com/mcp


Overview

Wikipedia in any language edition. Search articles, read summaries or just the sections you need, list the footnotes an article cites, find geotagged pages near a coordinate, and list an article's language editions. Ships the wikipedia-guide agent skill (skill://wikipedia-guide/SKILL.md), which MCP clients read for the gates that span tools: switching editions, disambiguation pages, section numbers versus section_index, and what to check before reporting something absent.

Tools

ToolDescription
wikipedia_search_articlesFull-text search across Wikipedia, returning ranked results with short descriptions, Wikidata QIDs, plain-text snippets, and page IDs, plus Wikipedia's spelling suggestion.
wikipedia_get_summaryShort summary for any article — plain text, Wikidata QID, description, thumbnail URL, page type, canonical URL, revision, and coordinates.
wikipedia_get_articleFull article or a targeted section as clean plain text, with section markers preserved, the canonical URL, and the revision it was read from.
wikipedia_get_sectionsTable of contents with section_index values for targeted section reads.
wikipedia_search_nearbyGeotagged Wikipedia articles within a radius of a WGS 84 coordinate, sorted by distance, with short descriptions and Wikidata QIDs.
wikipedia_get_languagesAll language editions available for an article, with titles and URLs, or just the editions you ask for.
wikipedia_get_referencesThe footnotes an article cites, in document order, with each footnote's text, external links (archive copies included), and DOIs, plus the full citations that short citations point to.

Capability reference

wikipedia_search_articles tool

  • Free-text query (an empty one fails with empty_query), positive integer limit (default 10, clamped to 50), and offset paging, passing back enrichment nextOffset. Only a clamped call carries requestedLimit, appliedLimit, and a clamp notice. Wikipedia serves no result past the 10,000th: an offset at or beyond it fails with offset_too_large, and a page ending on that window carries enrichment truncated
  • CirrusSearch operators include incategory:"1648 treaties", morelike:Peace of Westphalia, intitle:Python, hastemplate:Infobox, and insource:Python (support depends on the installation). sort defaults to relevance; alternatives are last_edit_desc, create_timestamp_desc, incoming_links_desc, and title_natural_asc. Enrichment echoes sort; keep it and query unchanged when paging
  • Each result carries a plain-text snippet, page ID, word count, and — when the article has them — its short description and Wikidata QID (wikibase_item); enrichment suggestion carries Wikipedia's spelling correction (einstien → einstein)
  • Invalid or over-complex insource:/…/ and intitle:/…/ regexes fail once with invalid_query, the upstreamCode, and guidance to correct or simplify the regex or remove the operator. A busy regex search remains retryable

wikipedia_get_summary tool

  • Takes a title; returns the REST summary extract — a fragment from the start of the lead (wikipedia_get_article with section_index: 0 reads the whole lead) — plus the short description, thumbnail URL, Wikidata QID (wikibase_item), and, for a geotagged article, latitude / longitude to pass straight to wikipedia_search_nearby
  • page_type discriminates standard / disambiguation / no-extract (on disambiguation, re-query with wikipedia_search_articles); url, revision_id, and last_modified name the revision read, and ?oldid=<revision_id> is a permanent link to it
  • An existing page without a summary extract succeeds with metadata, an empty extract, and guidance to open the canonical URL or try section_index: 0. Namespace pages may contain documentation rather than article prose. An empty description is absent; a missing title still fails with not_found

wikipedia_get_article tool

  • Without section_index: the full article with == Section == markers, or a section outline (truncated: true) when it exceeds WIKIPEDIA_ARTICLE_OVERFLOW_BYTES (default 80,000 bytes). With a section_index from wikipedia_get_sections (0 is the lead): that section plus its nested subsections
  • Outline entries include verified section_index values where available, including 0 for the lead. Ambiguous or unindexed headings retain the section-list fallback. TOC verification gets one short attempt; unavailable verification is disclosed
  • Redirects expose redirected_from and, for a section target, redirect_section. A full read remains full and includes targeted-read guidance; an explicit section_index, including 0, takes precedence
  • Every read returns url and revision_id (?oldid=<revision_id> is a permanent link to the text read); a full read, outline included, also returns last_modified. With WIKIPEDIA_BASE_URL set, a section read omits url
  • Section reads render phylogenetic clade trees as fenced, indented branches, pairing each row’s label with its leaf and preserving unnamed forks. An unparseable tree leaves [table omitted: unparseable clade]; trees have no table_index
  • Section reads also carry data tables as pipe-delimited rows and infoboxes as label: value lines, which the full-article extract strips; a table over 40,000 rendered bytes leaves a [table omitted: N rows (table T)] marker. Pass table_index: T with the section to read that table in complete row pages, then follow next_cursor as cursor with the same inputs. Continuations read the first page’s revision; caption and header appear once. Each page's table text fits 40,000 UTF-8 bytes on both surfaces, except an indivisible oversized row or first-page caption/header returned alone with oversized_row: true

wikipedia_get_sections tool

  • Takes a title; returns section titles, heading levels, hierarchical numbering (e.g. "2.1"), and the section_index to pass to wikipedia_get_article — the first entry is the lead (index: 0, titled Introduction)
  • Heading titles use the article renderer’s script, formula, whitespace and single-pass entity normalization, so CO₂ stays identical across the section list, article reads and verified outline entries
  • Fails with no_sections on a stub or very short article — read it with wikipedia_get_article instead
  • Redirect aliases expose redirected_from and optional redirect_section; redirect_section_index appears only when a unique anchor matches a real numeric TOC index

wikipedia_search_nearby tool

  • latitude −90…90 / longitude −180…180 (WGS 84), radius_meters 10–10,000 (default 1000), and positive integer limit (default 10, clamped to 500), with no pagination past limit; enrichment truncated flags more matches than limit allowed — at 500, Wikipedia's ceiling, sweep narrower radii instead. Only a clamped call carries requestedLimit, appliedLimit, and a clamp notice
  • Returns articles sorted by distance_meters, with coordinates, short description, and Wikidata QID (wikibase_item). Each is placed by the article's own GeoData coordinate tag, not its Wikidata item's coordinate, so a mistagged article appears where the tag puts it

wikipedia_get_languages tool

  • Takes a title; returns each edition's language_code, edition_code, article title, and URL, plus source_title, the resolved title. Pass edition_code — not language_code — as language on other tools; the two can differ (gsw vs als)
  • editions narrows the list to the codes asked for: codes with no article come back under missing, and total_languages stays the unfiltered count. Fails with no_other_languages when the article has no translations; a filter matching nothing is an empty list, not a failure

wikipedia_get_references tool

  • Takes a title; returns references[] in document order across every reference list, each with id, label (the in-text marker), group (a notes list such as lower-alpha, absent for the main list), text, urls (archive copies included), and dois (from doi.org links, percent-decoded). total_references counts the footnotes on all pages. wikipedia_get_article drops footnote markers and reference lists
  • A short citation such as "Galinsky 2012, pp. 75–76" carries work_ids, and works on the same page holds the full citations they name, each once. Bibliography and further-reading entries no footnote points to are not listed — read those sections with wikipedia_get_article
  • Each page holds whole footnotes within 40,000 UTF-8 bytes on both surfaces; follow next_cursor as cursor with the same title and language. Continuations read the first page's revision_id, and a cursor past the last footnote fails invalid_cursor. An unreadable pinned revision fails revision_unavailable. An article with no footnotes returns an empty list with a notice, not an error

Features

Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.

Wikipedia-specific:

  • Dual API integration — MediaWiki REST API (/api/rest_v1/) for summaries, Action API (/w/api.php) for search, full text, sections, geo search, and language links
  • Retry and backoff on every required request, including the transient refusals (search too busy, rate-limited, read-only) the Action API returns inside an HTTP 200 body, with an upstream Retry-After honored and each request's retries bounded at 30 s. The best-effort description lookup on search results gets one short attempt; User-Agent header per Wikimedia API policy
  • Every read path renders HTML through one renderer to the same plain-text shape — == Heading == markers, one list item per line, superscripts kept, code fenced: the full article from the Action API's HTML extract, a section from the parser's own HTML for that section, the summary from the REST extract_html. A section read additionally carries data tables, infoboxes, and the lists inside layout tables, none of which the extract carries. Footnote markers, reference lists, and the hidden Citation Style 1 maintenance messages (CS1 maint: …) are dropped on every path; wikipedia_get_references returns the footnotes
  • Per-call language parameter on every tool (default en) — all Wikipedia language editions accessible in a single session; every title read follows redirects
  • Language validation against a live edition registry built from the MediaWiki action=sitematrix endpoint (cached 24h) — catches structurally valid but nonexistent editions before they cause timeouts

Agent-friendly output:

  • page_type on summaries discriminates standard / disambiguation / no-extract — no string parsing needed
  • wikibase_item (Wikidata QID) on summaries and on search and nearby results enables direct cross-referencing with wikidata-mcp-server
  • Article text, snippets, and titles are backslash-escaped on the way into the markdown content[] render, so an article that writes about markup or markdown syntax reads as itself instead of being interpreted by the client; structuredContent carries the same text unescaped. Fenced code blocks and table-row delimiters pass through unescaped, while table cells stay escaped
  • section_index on table-of-contents entries links directly to the targeted-read parameter on wikipedia_get_article, index 0 included
  • Titles MediaWiki cannot name a page with — < > [ ] { }, the | multi-title separator, percent escapes, magic tildes, relative paths — are refused before any request, with invalid_title; a trailing #fragment is accepted and resolves normally
  • Recovery hints on every error type — callers get actionable next steps (e.g., "use wikipedia_search_articles to find the correct title")

Getting started

Connect to the hosted instance, no install:

sh
claude mcp add --transport http wikipedia-mcp-server https://wikipedia.caseyjhand.com/mcp

Or run it locally:

sh
claude mcp add wikipedia-mcp-server -- npx -y @cyanheads/wikipedia-mcp-server

For other clients, add this to the MCP config file:

json
{  "mcpServers": {    "wikipedia-mcp-server": {      "command": "npx",      "args": ["-y", "@cyanheads/wikipedia-mcp-server"]    }  }}

No API key is required — Wikipedia's API is public. For Docker or a source build, see Running the server.

Configuration

VariableDescriptionDefault
WIKIPEDIA_USER_AGENTUser-Agent header sent with every Wikimedia API request. Customize for your deployment.wikipedia-mcp-server/0.3.0 (https://github.com/cyanheads/wikipedia-mcp-server)
WIKIPEDIA_BASE_URLOptional single-instance override. Unset (default): compose per-language hosts, language selects the edition per call. Set to a full base URL (e.g. a private MediaWiki mirror): route every call at that one fixed host — language no longer varies it.(unset)
WIKIPEDIA_ARTICLE_OVERFLOW_BYTESByte budget above which a full-article read (wikipedia_get_article without section_index) returns a section outline instead of the full text. Tuned for this domain — ordinary articles stay whole; only genuine mega-articles (World War II ~86 KB, United States ~94 KB) outline. Section-targeted reads are never affected.80000
MCP_TRANSPORT_TYPETransport: stdio or http.stdio
MCP_HTTP_PORTPort for HTTP server.3010
MCP_SESSION_MODEHTTP session mode: stateless, stateful, or auto (which resolves to stateful). The Docker image ships stateless.auto
MCP_AUTH_MODEAuth mode: none, jwt, or oauth.none
MCP_LOG_LEVELLog level (RFC 5424).info
LOGS_DIRDirectory for log files (Node.js only).<project-root>/logs
LOG_TOOL_FAILURE_PAYLOADSLog each failed tool call's arguments and result, redacted by key name and capped at LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES (default 16384). A secret inside a free-form value is not redacted.false
OTEL_ENABLEDEnable OpenTelemetry instrumentation (spans, metrics, completion logs).false

See .env.example for the full list of optional overrides.

Running the server

Local development

Requires Bun v1.4.0 or higher (or Node.js v24+).

  • Clone and install:

    sh
    git clone https://github.com/cyanheads/wikipedia-mcp-server.gitcd wikipedia-mcp-server && bun installcp .env.example .env   # optional: customize WIKIPEDIA_USER_AGENT or logging
  • Build and run:

    sh
    # One-time buildbun run rebuild
    # Run the built serverbun run start:stdio# orbun run start:http   # listens at http://localhost:3010/mcp (MCP_HTTP_PORT)
  • Run checks and tests:

    sh
    bun run devcheck   # Lint, format, typecheck, securitybun run test       # Vitest test suitebun run lint:mcp   # Validate MCP definitions against spec

Docker

sh
docker build -t wikipedia-mcp-server .docker run --rm -p 3010:3010 wikipedia-mcp-server

The Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/wikipedia-mcp-server. To run the published image over stdio from an MCP client, use "command": "docker" with "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/wikipedia-mcp-server:latest"]. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.

Project structure

DirectoryPurpose
src/index.tscreateApp() entry point — registers tools and inits the Wikipedia service.
src/configServer-specific environment variable parsing and validation with Zod.
src/mcp-server/toolsTool definitions (*.tool.ts) — one file per tool.
src/services/wikipediaWikipediaService — REST API + Action API client with retry/backoff and language validation.
skills/The published wikipedia-guide agent skill, served over MCP and shipped in the package.
tests/Unit and integration tests mirroring src/.

Development guide

See CLAUDE.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic
  • Use ctx.log for request-scoped logging, ctx.state for tenant-scoped storage
  • Register new tools in src/mcp-server/tools/definitions/index.ts
  • Wrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields

Contributing

Issues are welcome. Run checks and tests before submitting:

sh
bun run devcheckbun run test

License

Apache-2.0 — see LICENSE for details.

来源:README.md,提交 acc049b

工具

7

wikipedia_search_articles

Search Wikipedia

Search Wikipedia articles by full-text query. Returns ranked results with plain-text titles, short descriptions, Wikidata QIDs, snippets (HTML stripped), page IDs, and word counts — the description is usually enough to tell same-named articles apart without a summary call per result. When Wikipedia has a spelling correction for the query, it is returned as suggestion. Best when the exact article title is unknown or when multiple articles on a topic are needed. Pass a result title to wikipedia_get_summary, wikipedia_get_article, or wikipedia_get_sections for follow-up reads. Use offset to page beyond the first result page. Supports all Wikipedia language editions.

输入参数sortlimitquery必填offsetlanguage

wikipedia_get_summary

Get Wikipedia Summary

Fetch the short article summary that answers "what is X?". The extract is a truncated fragment from the start of the lead section — usually a sentence or two, and as little as a tenth of the lead — alongside the Wikidata QID (wikibase_item) for cross-referencing with wikidata-mcp-server, a short description, a thumbnail URL, the canonical article URL, the revision the extract was read from, and, for a geotagged article, latitude and longitude that pass straight to wikipedia_search_nearby to answer "what else is notable near this". For the lead section in full, call wikipedia_get_article with section_index 0. Redirect pages are followed automatically. When page_type is "disambiguation", the title matched a disambiguation page — call wikipedia_search_articles with a more specific query to find the intended article. Prefer this over wikipedia_get_article unless article depth is needed.

输入参数title必填language

wikipedia_get_article

Get Wikipedia Article

Fetch article content as clean plain text. Without section_index: returns the full article with == Section == markers preserved for structure — or, when the article exceeds the size budget, a compact section outline (truncated: true) that points to wikipedia_get_sections plus a section_index read instead of the full text. With section_index (from wikipedia_get_sections): returns that section and every subsection nested under it, each heading above its own body. section_index 0 is the lead section, the text above the first heading, which is the full prose wikipedia_get_summary returns only a truncated fragment of. Section-targeted reads are faster and smaller when only part of the article is needed. Both paths keep superscripts and subscripts apart from the text beside them (10²³, H₂O), render formulas as their TeX, and render code samples as fenced blocks with their indentation intact. A section read also renders data tables as pipe-delimited rows (header row first) and infoboxes as "label: value" lines; a table too large to include leaves a "[table omitted: N rows (table T)]" marker. Pass table_index: T with section_index to read only that table in complete row pages whose table text fits within 40,000 UTF-8 bytes on both surfaces. Follow next_cursor as cursor with the same inputs to continue at the pinned revision; caption/header/delimiter appear once. An indivisible oversized row or first-page caption/header is returned alone with oversized_row: true. The full-article path carries no data tables or infoboxes, so read the section for those. Phylogenetic clade trees render as fenced, indented branches, with unnamed forks preserved; unparseable trees leave "[table omitted: unparseable clade]". Clade trees have no table_index. In a section read, tables used only for layout, such as multi-column lists, keep their content as ordinary text; the full-article path drops them, so read the section for those lists. Page furniture is omitted as well — maintenance banners, sis

输入参数title必填cursorlanguagetable_indexsection_index

wikipedia_get_sections

Get Wikipedia Article Sections

Fetch the table of contents for a Wikipedia article. Returns section titles, heading levels, section numbering (e.g. "2.1"), and section_index values. The first entry is the lead section, index 0, titled Introduction — the text above the first heading, which Wikipedia's own table of contents omits. Pass a section_index to wikipedia_get_article to retrieve just that section. Useful for enumerating article structure before doing a targeted section read. Redirect pages are followed automatically.

输入参数title必填language

wikipedia_search_nearby

Search Wikipedia Nearby

Find Wikipedia articles about places near a geographic coordinate. Returns articles sorted by distance from the query point, with titles, short descriptions, Wikidata QIDs, page IDs, coordinates, and distance in meters. Useful for "what is notable near X?" research workflows. Only articles carrying their own coordinate tag (GeoData, set on the article itself — not the Wikidata item's coordinate) are returned, and that tag is what places and measures each result; not all articles about locations are geotagged, and an article whose tag is wrong appears where the tag puts it, which its description usually makes plain.

输入参数limitlanguagelatitude必填longitude必填radius_meters

wikipedia_get_languages

Get Wikipedia Article Languages

List the language editions available for a Wikipedia article. Returns language codes, article titles in each language, and full URLs. Useful for cross-language research and for discovering the correct article title in a target language before fetching it. A popular article exists in hundreds of editions, so pass editions to narrow the answer to the codes you care about — the codes with no article come back under missing, and total_languages still reports the full count. Redirect pages are followed automatically, and source_title reports the resolved article the links belong to. The language parameter specifies which edition to query from.

输入参数title必填editionslanguage

wikipedia_get_references

Get Wikipedia References

List the footnotes an article cites — its reference lists, in document order — with each footnote's text, external links (archive copies included), and DOIs. wikipedia_get_article drops footnote markers and reference lists, so use this for the sources behind a claim. label is the in-text marker without brackets; group names a notes list such as "lower-alpha" and is absent for the main list. A short citation such as "Galinsky 2012, pp. 75–76" carries work_ids, and works on the same page holds the full citations they name, each once. Pages hold whole footnotes within 40,000 UTF-8 bytes on both surfaces; follow next_cursor as cursor with the same title and language to continue at the same revision. Bibliography and further-reading entries no footnote points to are not listed — read those sections with wikipedia_get_article. Redirects are followed; the revision_id and url cite the article read.

输入参数title必填cursorlanguage

版本历史

9
  1. v0.3.0最新Oct 29, 2026
  2. v0.2.8Oct 25, 2026
  3. v0.2.7Oct 24, 2026
  4. v0.2.6Oct 9, 2026
  5. v0.2.5Sep 23, 2026
  6. v0.2.4Sep 23, 2026
  7. v0.2.3Sep 23, 2026
  8. v0.2.2Sep 17, 2026
  9. v0.1.17Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分