wikipedia-mcp-server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@wikipedia-mcp-serverget summary of Albert Einstein"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Public Hosted Server: https://wikipedia.caseyjhand.com/mcp
Overview
Wikipedia content via the MediaWiki REST API and Action API. Search articles, read summaries or targeted sections, find geotagged pages near a coordinate, and list language editions from any MCP client. Runs as a stdio process, a local Streamable HTTP server, or the public hosted endpoint above.
Tools
Tool | Description |
| Full-text search across Wikipedia, returning ranked results with short descriptions, Wikidata QIDs, plain-text snippets, and page IDs, plus Wikipedia's spelling suggestion. |
| Short summary for any article — plain text, Wikidata QID, description, thumbnail URL, page type, canonical URL, revision, and coordinates. |
| Full article or a targeted section as clean plain text, with section markers preserved, the canonical URL, and the revision it was read from. |
| Table of contents with |
| Geotagged Wikipedia articles within a radius of a WGS 84 coordinate, sorted by distance, with short descriptions and Wikidata QIDs. |
| All language editions available for an article, with titles and URLs, or just the editions you ask for. |
Related MCP server: mcp-mediawiki-crunchtools
Capability reference
wikipedia_search_articles tool
Free-text
query(an empty one fails withempty_query),limit1–50, andoffsetpaging, passing back enrichmentnextOffset. Wikipedia serves no result past the 10,000th: anoffsetat or beyond it fails withoffset_too_large, and a page ending on that window carries enrichmenttruncatedEach result carries a plain-text snippet, page ID, word count, and — when the article has them — its short
descriptionand Wikidata QID (wikibase_item); enrichmentsuggestioncarries Wikipedia's spelling correction (einstien→einstein)
wikipedia_get_summary tool
Takes a
title; returns the REST summary extract — a fragment from the start of the lead (wikipedia_get_articlewithsection_index: 0reads the whole lead) — plus the short description, thumbnail URL, Wikidata QID (wikibase_item), and, for a geotagged article,latitude/longitudeto pass straight towikipedia_search_nearbypage_typediscriminatesstandard/disambiguation/no-extract(ondisambiguation, re-query withwikipedia_search_articles);url,revision_id, andlast_modifiedname the revision read, and?oldid=<revision_id>is a permanent link to it
wikipedia_get_article tool
Without
section_index: the full article with== Section ==markers, or a section outline (truncated: true) when it exceedsWIKIPEDIA_ARTICLE_OVERFLOW_BYTES(default 80,000 bytes). With asection_indexfromwikipedia_get_sections(0is the lead): that section plus its nested subsectionsEvery read returns
urlandrevision_id(?oldid=<revision_id>is a permanent link to the text read); a full read, outline included, also returnslast_modified. WithWIKIPEDIA_BASE_URLset, a section read omitsurlSection reads also carry data tables as pipe-delimited rows and infoboxes as
label: valuelines, which the full-article extract strips; a table over 40,000 rendered bytes leaves a[table omitted: N rows]marker
wikipedia_get_sections tool
Takes a
title; returns section titles, heading levels, hierarchical numbering (e.g."2.1"), and thesection_indexto pass towikipedia_get_article— the first entry is the lead (index: 0, titledIntroduction)Fails with
no_sectionson a stub or very short article — read it withwikipedia_get_articleinstead
wikipedia_search_nearby tool
latitude/longitude(WGS 84),radius_meters10–10,000 (default 1000), andlimit1–500 (default 10), with no pagination pastlimit; enrichmenttruncatedflags more matches thanlimitallowed — at 500, Wikipedia's ceiling, sweep narrower radii insteadReturns articles sorted by
distance_meters, with coordinates, shortdescription, 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'slanguage_code,edition_code, article title, and URL, plussource_title, the resolved title. Passedition_code— notlanguage_code— aslanguageon other tools; the two can differ (gswvsals)editionsnarrows the list to the codes asked for: codes with no article come back undermissing, andtotal_languagesstays the unfiltered count. Fails withno_other_languageswhen the article has no translations; a filter matching nothing is an empty list, not a failure
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 linksRetry 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-Afterhonored and each request's retries bounded at 30 s. The best-effort description lookup on search results gets one short attempt;User-Agentheader per Wikimedia API policyEvery 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 RESTextract_html. A section read additionally carries data tables, infoboxes, and the lists inside layout tables, none of which the extract carriesPer-call
languageparameter on every tool (defaulten) — all Wikipedia language editions accessible in a single session; every title read follows redirectsLanguage validation against a live edition registry built from the MediaWiki
action=sitematrixendpoint (cached 24h) — catches structurally valid but nonexistent editions before they cause timeouts
Agent-friendly output:
page_typeon summaries discriminatesstandard/disambiguation/no-extract— no string parsing neededwikibase_item(Wikidata QID) on summaries and on search and nearby results enables direct cross-referencing with wikidata-mcp-serverArticle 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;structuredContentcarries the same text unescaped. Fenced code blocks and table-row delimiters pass through unescaped, while table cells stay escapedsection_indexon table-of-contents entries links directly to the targeted-read parameter onwikipedia_get_article, index 0 includedTitles MediaWiki cannot name a page with —
< > [ ] { }, the|multi-title separator, percent escapes, magic tildes, relative paths — are refused before any request, withinvalid_title; a trailing#fragmentis accepted and resolves normallyRecovery hints on every error type — callers get actionable next steps (e.g., "use
wikipedia_search_articlesto find the correct title")
Getting started
Public Hosted Instance
A public instance is available at https://wikipedia.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP:
{
"mcpServers": {
"wikipedia-mcp-server": {
"type": "streamable-http",
"url": "https://wikipedia.caseyjhand.com/mcp"
}
}
}Self-Hosted / Local
Add the following to your MCP client configuration file.
{
"mcpServers": {
"wikipedia-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/wikipedia-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}Or with npx (no Bun required):
{
"mcpServers": {
"wikipedia-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/wikipedia-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}Or with Docker:
{
"mcpServers": {
"wikipedia-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/wikipedia-mcp-server:latest"
]
}
}
}For Streamable HTTP, set the transport and start the server:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcpPrerequisites
Bun v1.3.0 or higher (or Node.js v24+).
No API keys required — Wikipedia's API is public.
Installation
Clone the repository:
git clone https://github.com/cyanheads/wikipedia-mcp-server.gitNavigate into the directory:
cd wikipedia-mcp-serverInstall dependencies:
bun installConfigure environment (optional):
cp .env.example .env
# edit .env if you want to customize WIKIPEDIA_USER_AGENT or loggingConfiguration
Variable | Description | Default |
| User-Agent header sent with every Wikimedia API request. Customize for your deployment. |
|
| Optional single-instance override. Unset (default): compose per-language hosts, | (unset) |
| Byte budget above which a full-article read ( |
|
| Transport: |
|
| Port for HTTP server. |
|
| HTTP session mode: |
|
| Auth mode: |
|
| Log level (RFC 5424). |
|
| Directory for log files (Node.js only). |
|
| Log each failed tool call's arguments and result, redacted by key name and capped at |
|
| Enable OpenTelemetry instrumentation (spans, metrics, completion logs). |
|
See .env.example for the full list of optional overrides.
Running the server
Local development
Build and run:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:httpRun checks and tests:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t wikipedia-mcp-server .
docker run --rm -p 3010:3010 wikipedia-mcp-serverThe Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/wikipedia-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.
Project structure
Directory | Purpose |
|
|
| Server-specific environment variable parsing and validation with Zod. |
| Tool definitions ( |
| WikipediaService — REST API + Action API client with retry/backoff and language validation. |
| Unit and integration tests mirroring |
Development guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
Handlers throw, framework catches — no
try/catchin tool logicUse
ctx.logfor request-scoped logging,ctx.statefor tenant-scoped storageRegister new tools in
src/mcp-server/tools/definitions/index.tsWrap 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:
bun run devcheck
bun run testLicense
Apache-2.0 — see LICENSE for details.
This server cannot be deployed
Maintenance
Related MCP Connectors
Wikipedia MCP — wraps Wikipedia REST API (free, no auth)
MCP server for Russian books search, details, and recommendation candidates.
Read-only MCP for the Eco game wiki: search, Markdown pages, and wiki_* lookups. No keys, no writes.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that retrieves and provides Wikipedia content for requested topics, enabling easy access to Wikipedia information directly through the Model Control Protocol.1-
- AlicenseAqualityAmaintenanceA secure MCP server for interacting with MediaWiki instances, allowing users to search, read, create, and manage wiki content like pages, categories, and files. It supports both public and private wikis with comprehensive authentication for full read and write operations.19AGPL 3.0
- FlicenseAqualityDmaintenanceA generic MCP server that allows searching and retrieving articles, summaries, category members, and wiki info from any Fandom wiki.5-
- FlicenseNot gradedqualityDmaintenanceMCP server providing live Wikipedia recent changes feed, page summaries, trending pages, and Wikidata entity lookup.-