
Connects Claude to any MediaWiki instance through the Model Context Protocol, exposing read and write operations on pages, files, categories, and revision history. You get tools for diffing revisions, searching content, parsing wikitext, and managing pages with proper permission scopes. Supports OAuth2 for write operations and handles multiple wikis in a single session. Extension-aware tooling lights up automatically when it detects Cargo, Semantic MediaWiki, or Bucket on the target wiki. Particularly useful if you're building workflows that need programmatic access to Wikipedia, internal company wikis, or any MediaWiki deployment without writing custom API wrappers.
Public tool metadata for what this MCP can expose to an agent.
get-pageReturns the standard page object for a wiki page, optionally including page source or rendered HTML, and including the license and information about the latest revision.2 paramsReturns the standard page object for a wiki page, optionally including page source or rendered HTML, and including the license and information about the latest revision.
contentstringnoContent · withSource · withHtmldefault: noContenttitlestringget-page-historyReturns information about the latest revisions to a wiki page, in segments of 20 revisions, starting with the latest revision. The response includes API routes for the next oldest, next newest, and latest revision segments.4 paramsReturns information about the latest revisions to a wiki page, in segments of 20 revisions, starting with the latest revision. The response includes API routes for the next oldest, next newest, and latest revision segments.
filterstringnewerThannumberolderThannumbertitlestringsearch-pageSearch wiki page titles and contents for the provided search terms, and returns matching pages.2 paramsSearch wiki page titles and contents for the provided search terms, and returns matching pages.
limitnumberquerystringset-wikiSet the wiki to use for the current session.1 paramsSet the wiki to use for the current session.
wikiUrlstringupdate-pageUpdates a wiki page. Replaces the existing content of a page with the provided content4 paramsUpdates a wiki page. Replaces the existing content of a page with the provided content
commentstringlatestIdnumbersourcestringtitlestringget-fileReturns information about a file, including links to download the file in thumbnail, preview, and original formats.1 paramsReturns information about a file, including links to download the file in thumbnail, preview, and original formats.
titlestringcreate-pageCreates a wiki page with the provided content.4 paramsCreates a wiki page with the provided content.
commentstringcontentModelstringsourcestringtitlestringAn MCP (Model Context Protocol) server that enables Large Language Model (LLM) clients to interact with any MediaWiki wiki.
Every tool that operates on a wiki accepts an optional wiki argument naming the wiki to act on (the wiki-management and OAuth tools do not) — pass a wiki key (e.g. en.wikipedia.org) or the full mcp://wikis/{wikiKey} URI. Omit it to use the configured default wiki (see Configuration). Each tool response reports the wiki the call ran against.
| Name | Description |
|---|---|
compare-pages | Diff two versions of a wiki page by revision, title, or supplied wikitext. |
get-category-members | List members of a category (up to 500 per call, paginated via continueFrom). |
get-file | Fetch a file page. |
get-file-data | Fetch a file's image bytes inline (base64) for visual analysis — for clients that can't reach the wiki host. Returns a scaled rendition (set width); non-renderable types (audio, video, binaries) error. For metadata or a download URL, use get-file. |
get-links-here | List pages that reference a wiki page — pages that link to it, embed it as a template, or display it as a file (select via type), including pages that reach it through a redirect. Up to 500 per call, paginated via continueFrom. |
get-page | Fetch a wiki page. |
get-page-history | List recent revisions of a wiki page. |
get-pages | Fetch multiple wiki pages in one call (up to 50). |
get-recent-changes | List recent change events across the wiki, filterable by timestamp, namespace, user, tag, type, and hide flags (up to 50 per call, paginated via continue). |
get-revision | Fetch a specific revision of a page. |
get-site-info | Get a wiki's key settings: MediaWiki version, content language, title-case rules, namespaces, installed extensions, license, and (optionally) statistics. |
list-wikis | List every configured wiki — its key, sitename, server, whether it is read-only or the default, whether it is reachable, which extension-gated tools work on it, and, for an OAuth-configured wiki, its authorization server. Disabled when fewer than two wikis are configured. |
parse-wikitext | Render wikitext to HTML without saving. Returns parse warnings, wikilinks, templates, and external URLs. |
search-page | Search wiki page titles and contents. |
search-page-by-prefix | Search page titles by prefix. |
whoami | Report the identity the current session is authenticated as on the targeted wiki — username, whether it is anonymous, and group memberships (optionally user rights). |
| Name | Description | Permissions |
|---|---|---|
create-page 🔐 | Create a new wiki page. | Create, edit, and move pages |
delete-page 🔐 | Delete a wiki page. | Delete pages, revisions, and log entries |
move-page 🔐 | Move (rename) a wiki page. | Create, edit, and move pages |
undelete-page 🔐 | Undelete a wiki page. | Delete pages, revisions, and log entries |
update-file 🔐 | Upload a new revision of an existing file from local disk. | Upload, replace, and move files |
update-file-from-url 🔐 | Upload a new revision of an existing file from a URL. | Upload, replace, and move files |
update-page 🔐 | Update an existing wiki page. | Edit existing pages |
upload-file 🔐 | Upload a file to the wiki from local disk. | Upload new files |
upload-file-from-url 🔐 | Upload a file to the wiki from a URL. | Upload, replace, and move files |
| Name | Description |
|---|---|
add-wiki | Add a wiki as an MCP resource from its URL. Disabled when allowWikiManagement is false. |
remove-wiki | Remove a wiki resource. Disabled when allowWikiManagement is false or fewer than two wikis are configured. |
| Name | Description |
|---|---|
oauth-logout | Remove stored OAuth tokens. Stdio only. |
oauth-status | List stored OAuth tokens with scopes and expiry (no token values). Stdio only. |
Each pack's tools register only on wikis where its extension is installed.
| Name | Description |
|---|---|
neowiki-list-schemas | List schemas (entity types) and their property counts. |
neowiki-get-schema | Get one schema's property definitions, relations, and select options. |
neowiki-cypher-query | Run a read-only Cypher query against the knowledge graph. |
neowiki-search-subjects | Find subject IDs by label within a schema. |
neowiki-get-subject | Fetch one subject's structured data by ID. |
neowiki-get-page-subjects | List the subjects attached to a wiki page. |
neowiki-create-subject | Create a subject (child or main) on a page. Requires the edit right. |
neowiki-update-subject | Replace a subject's label and statements. Requires the edit right. |
neowiki-delete-subject | Delete a subject by ID. Requires the edit right. |
neowiki-set-main-subject | Set or clear a page's main subject. Requires the edit right. |
neowiki-validate-subject | Dry-run validate a proposed subject and return violations. |
| Name | Description |
|---|---|
smw-list-properties | List Semantic MediaWiki properties with copy-paste templates for smw-query. |
smw-query | Run a Semantic MediaWiki #ask query. |
| Name | Description |
|---|---|
bucket-query | Run a Bucket Lua query. |
| Name | Description |
|---|---|
cargo-list-tables | List Cargo tables defined on the wiki. |
cargo-describe-table | List a Cargo table's fields with their types and list-flags. |
cargo-query | Run a Cargo SQL-style query. |
| Name | Description |
|---|---|
wikibase-search-entities | Find items and properties by label or alias. |
wikibase-get-entity | Read one entity's terms and statements, with referenced IDs resolved to labels. |
wikibase-query | Run a SPARQL query against the wiki's query service. Offered only for a repository whose siteinfo publishes one. |
wikibase-edit-entity | Create or change an entity from Wikibase entity JSON. Requires the edit right. |
wikibase-add-statement | Add one statement with an item, string, external-id or url value. Requires the edit right. |
mcp://wikis/{wikiKey} — per-wiki resource exposing sitename, server (the wiki's public address), articlepath, scriptpath, and the private and readOnly flags.
add-wiki or remove-wiki, the server sends notifications/resources/list_changed so clients refresh.{
"contents": [
{
"uri": "mcp://wikis/en.wikipedia.org",
"mimeType": "application/json",
"text": "{ \"sitename\":\"Wikipedia\",\"server\":\"https://en.wikipedia.org\",\"articlepath\":\"/wiki\",\"scriptpath\":\"/w\",\"private\":false }"
}
]
}
The variables below are relevant to any setup. Variables that only apply when self-hosting the HTTP transport (ports, timeouts, Host/Origin and SSRF guards) or running the hosted OAuth proxy are in docs/deployment.md — environment variables. Config-file substitution and upload-directory variables are in docs/configuration.md.
| Name | Description | Default |
|---|---|---|
CONFIG | Path to your configuration file | config.json |
MCP_TRANSPORT | Type of MCP server transport (stdio or http) | stdio |
MCP_LOG_LEVEL | Minimum severity for logger output. One of debug, info, notice, warning, error, critical, alert, emergency, or silent. | debug |
MCP_CONTENT_MAX_BYTES | Byte cap for the content bodies and result blocks tools return (wikitext, rendered HTML, diffs, statement and row listings). Tune to the target LLM client's tool-response budget. | 50000 |
MCP_FILE_DATA_MAX_BYTES | Hard cap on the base64-encoded size of a get-file-data response. A transport/safety backstop; tune the actual size per call with the tool's width. Over-cap calls error rather than truncate. | 1000000 |
MCP_UPLOAD_MAX_BYTES | Memory cap on the server-side fetch used by upload-file-from-url / update-file-from-url. Files larger than this are handed to the wiki's own copy-upload instead of being buffered by the server. Guards this server's memory, not the wiki's $wgMaxUploadSize. | 104857600 |
MCP_OAUTH_CREDENTIALS_FILE | Override the default credentials store path. Default: ~/.config/mediawiki-mcp/credentials.json (Linux/macOS) or %APPDATA%\mediawiki-mcp\credentials.json (Windows). | unset |
MCP_OAUTH_NO_BROWSER | Set to 1 to skip launching a browser during the OAuth flow; the auth URL is logged to stderr instead. Useful in headless environments. | unset |
[!NOTE] Config is only required when interacting with a private wiki or using authenticated tools.
Create a config.json file to configure wiki connections. Use the config.example.json as a starting point.
{
"defaultWiki": "en.wikipedia.org",
"wikis": {
"en.wikipedia.org": {
"sitename": "Wikipedia",
"server": "https://en.wikipedia.org",
"articlepath": "/wiki",
"scriptpath": "/w"
}
}
}
Internal vs public address. The server you configure may be an internal hostname (e.g. http://mediawiki in Docker); URLs handed back to the caller are built from the wiki's public address, so internal hostnames don't leak into links. See docs/configuration.md — per-wiki fields.
For the full field reference, env-var substitution, secret sources, change tags, upload directories, and authentication options, see docs/configuration.md.
Tools marked 🔐 require authentication. Write tools (including extension-pack writes) are hidden from tools/list when the configured default wiki has readOnly: true — see Deployment.
oauth2ClientId and oauth2CallbackPort per wiki — see docs/configuration.md — OAuth (browser-based).Authorization: Bearer <token> and the server forwards it to MediaWiki. Off by default, because an MCP server must not accept tokens that were not issued for it. See docs/deployment.md — per-request bearer token.https://<wiki>/mcp; anonymous read still works. See docs/deployment.md — hosted OAuth sign-in.config.json. See docs/configuration.md — manual OAuth2 access token.The Cargo tools (cargo-query, cargo-list-tables, cargo-describe-table) call API actions gated by the runcargoqueries user right. Most wikis grant this to all users by default; wikis that restrict it require the Create, query and delete data through the Cargo extension grant on the bot password or OAuth consumer. The Cargo extension is also detected on wiki.gg-hosted wikis (Helldivers, Terraria, Ark, etc.), where it ships under the rebranded name LIBRARIAN.
Pick your client below, or use the standard configuration if it is not listed. CONFIG is optional; without it the server targets English Wikipedia. To point it at your own wiki and set up authentication for writes, see docs/configuration.md.
Add this repository as a plugin marketplace, then install the bundled server:
/plugin marketplace add ProfessionalWiki/MediaWiki-MCP-Server
/plugin install mediawiki-mcp-server@professional-wiki
The plugin takes an optional configuration file, which points the server at your own wiki. Set it from the prompt when enabling the plugin, or at any time with /plugin configure mediawiki-mcp-server@professional-wiki. A command-line install takes the same value via claude plugin install mediawiki-mcp-server@professional-wiki --config configPath=path/to/config.json.
When installed as a plugin, the tools are namespaced mcp__plugin_mediawiki-mcp-server_mediawiki__<tool>; update any tool allowlists or hooks accordingly.
To configure the server directly instead, see the Claude Code MCP docs. The short version:
claude mcp add mediawiki-mcp-server -- npx -y @professional-wiki/mediawiki-mcp-server@latest
# Environment variables go before the `--`:
claude mcp add mediawiki-mcp-server -e CONFIG=path/to/config.json -- npx -y @professional-wiki/mediawiki-mcp-server@latest
Add this repository as a plugin marketplace, then install the bundled server:
codex plugin marketplace add ProfessionalWiki/MediaWiki-MCP-Server
codex plugin add mediawiki-mcp-server@professional-wiki
To point the plugin at your own wiki, set CONFIG in the shell you launch Codex from, for example export CONFIG=path/to/config.json. Codex has no per-plugin configuration; if you would rather not set an environment variable, codex mcp add mediawiki --env CONFIG=path/to/config.json -- npx -y @professional-wiki/mediawiki-mcp-server@latest registers the server directly and takes precedence over the plugin's copy.
See the Codex plugins documentation for how to list, update, or remove plugins.
Download MediaWiki-MCP-Server.mcpb and double-click it to install the extension, which prompts for a configuration file path so you can point it at your own wiki instead of English Wikipedia.
Or add the standard configuration by hand.
Add the standard configuration to Antigravity's MCP config, either globally in ~/.gemini/config/mcp_config.json or per-workspace in .agents/mcp_config.json.
If you previously installed the Gemini CLI extension, Antigravity's setup wizard offers to import your existing Gemini CLI configuration.
OpenCode uses its own configuration shape rather than mcpServers; add this to opencode.json in your project root, or ~/.config/opencode/opencode.json for a global install.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mediawiki-mcp-server": {
"type": "local",
"command": ["npx", "-y", "@professional-wiki/mediawiki-mcp-server@latest"],
"environment": {
"CONFIG": "path/to/config.json"
}
}
}
}
Most clients read the same server block. Paste it into the file listed for your client, replacing mcpServers with that client's root key:
| Client | Configuration file | Root key |
|---|---|---|
| Cursor | ~/.cursor/mcp.json, or .cursor/mcp.json per project | mcpServers |
| VS Code | .vscode/mcp.json per workspace, or the MCP: Open User Configuration command | servers |
| Devin Desktop (formerly Windsurf) | ~/.codeium/windsurf/mcp_config.json | mcpServers |
| Zed | ~/.config/zed/settings.json | context_servers |
| LM Studio | ~/.lmstudio/mcp.json | mcpServers |
{
"mcpServers": {
"mediawiki-mcp-server": {
"command": "npx",
"args": ["-y", "@professional-wiki/mediawiki-mcp-server@latest"],
"env": {
"CONFIG": "path/to/config.json"
}
}
}
}
For any other client, npx add-mcp @professional-wiki/mediawiki-mcp-server may work: add-mcp is a community CLI that writes your client's configuration file for you. It sets the launch command only; add CONFIG yourself to point at your own wiki.
Running the server as a remote HTTP endpoint for other users has its own configuration requirements — see docs/deployment.md. A pre-built image is published at ghcr.io/professionalwiki/mediawiki-mcp-server. For day-2 operations (logs, /health//ready, metrics, graceful shutdown), see docs/operations.md.
Defaults are safe for single-user use. Before exposing the HTTP transport to others, lock down three things:
MCP_BIND with MCP_ALLOWED_HOSTS and MCP_ALLOWED_ORIGINS. The HTTP transport binds to 127.0.0.1 by default. When you open it up with MCP_BIND=0.0.0.0, set MCP_ALLOWED_HOSTS to the hostnames your proxy forwards and MCP_ALLOWED_ORIGINS to the browser origins allowed to call the server — these block DNS-rebinding and cross-origin attacks respectively.upload-file is disabled until you list allowed directories in uploadDirs or MCP_UPLOAD_DIRS. See docs/configuration.md — upload directories.MCP_TRUSTED_HOSTS. Outbound fetches are SSRF-guarded: a destination resolving to a private or loopback address (e.g. a Docker-network alias like mediawiki.svc) is refused until you list its host in MCP_TRUSTED_HOSTS. See docs/deployment.md — outbound SSRF guard.Report a vulnerability via GitHub's security advisory form — full policy in SECURITY.md.
Contributions are welcome — pull requests and issues (bugs, feature requests, suggestions) both work.
This project is licensed under the MIT License. See the LICENSE file for details.
CONFIGdefault: config.jsonPath to your configuration file
MCP_ALLOW_STATIC_FALLBACKSet to 'true' to allow HTTP startup when config.json has static credentials. Otherwise the server refuses to start, preventing silent shared-identity fallback for unauthenticated requests.
MCP_CONTENT_MAX_BYTESdefault: 50000Byte cap for content bodies (wikitext, rendered HTML, diffs) returned by get-page, get-pages, parse-wikitext, and compare-pages. Oversized bodies are truncated with a trailing marker.
MCP_FILE_DATA_MAX_BYTESdefault: 1000000Hard cap on the base64-encoded size of a get-file-data response. A transport/safety backstop; callers tune actual size with the tool's width parameter. Over-cap responses error rather than truncate.
MCP_LOG_LEVELdefault: debugMinimum severity for logger output (stderr telemetry and sendLoggingMessage broadcast). Invalid values fail loudly on first log call.
MCP_MAX_REQUEST_BODYdefault: 1mbMaximum HTTP request body size on the StreamableHTTP transport. Accepts size strings like 1mb or 512kb.
MCP_METRICSSet to 'true' to expose Prometheus metrics at GET /metrics on the HTTP transport. Has no effect on the stdio transport.
MCP_OAUTH_CREDENTIALS_FILEOverride the default OAuth credentials store path. Default: ~/.config/mediawiki-mcp/credentials.json on Linux/macOS, %APPDATA%\mediawiki-mcp\credentials.json on Windows.
MCP_OAUTH_NO_BROWSERSet to '1' to skip launching a browser during the OAuth dance and log the auth URL to stderr instead. Useful in headless environments and CI.
MCP_PUBLIC_URLOverride the request-derived public URL used in the protected-resource discovery doc and WWW-Authenticate header. Set this when running behind a proxy that rewrites the request Host.
MCP_SESSION_IDLE_TIMEOUTdefault: 1800Seconds an HTTP session may sit idle before it is closed and removed on the StreamableHTTP transport. Any request resets the timer. Set to 0 to disable expiry.
MCP_SHUTDOWN_GRACE_MSdefault: 10000Maximum milliseconds to wait for in-flight /mcp calls to drain on SIGTERM/SIGINT before exiting. Capped at 600000.
MCP_TRANSPORTdefault: stdioType of MCP server transport
MCP_UPLOAD_MAX_BYTESdefault: 104857600Memory cap on the server-side fetch used by upload-file-from-url and update-file-from-url. Files larger than this are routed to the wiki's own copy-upload instead of being buffered by the server. Guards this server's memory, not the wiki's $wgMaxUploadSize.
PORTdefault: 3000Port used for StreamableHTTP transport