mediawiki-mcp-server
Lets LLM clients interact with any MediaWiki wiki through MCP tools, resources, and optional authentication.
Read, search, compare, and inspect pages, revisions, history, recent changes, categories, backlinks, files, site info, and identity/permissions.
Create, update, append, prepend, find-replace, move, delete, undelete, and protect pages.
Upload files, update file revisions, and fetch file image data inline for visual analysis.
Parse wikitext and generate diffs before or after edits.
Manage configured wikis and OAuth sessions.
Use extension-gated tools for NeoWiki, Semantic MediaWiki, Bucket, Cargo, and Wikibase when installed.
Target multiple wikis via the optional
wikiargument and expose per-wiki MCP resources.
Enables interaction with any MediaWiki wiki, including Wikipedia, providing tools to create and update pages, retrieve file information, search page content, access page history, and set the wiki to use for the current session.
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., "@mediawiki-mcp-serversearch for articles about artificial intelligence"
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.
MediaWiki MCP Server
An MCP (Model Context Protocol) server that enables Large Language Model (LLM) clients to interact with any MediaWiki wiki.
Features
Tools
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. Each successful response carries its payload as prose in content and as JSON in structuredContent; see response channels.
Page reads
Name | Description |
| Diff two versions of a wiki page by revision, title, or supplied wikitext. |
| List members of a category (up to 500 per call, paginated via |
| Fetch a file page. |
| 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 |
| 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 |
| Fetch a wiki page. |
| List recent revisions of a wiki page. |
| Fetch multiple wiki pages in one call (up to 50). |
| List a random sample of wiki pages from one namespace (main by default, redirects excluded by default, up to 500 per call). |
| List recent change events across the wiki, filterable by timestamp, namespace, user, tag, type, and hide flags (up to 50 per call, paginated via |
| Fetch a specific revision of a page. |
| Get a wiki's key settings: MediaWiki version, content language, title-case rules, namespaces, installed extensions, license, and (optionally) statistics. |
| 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. |
| Render wikitext to HTML without saving. Returns parse warnings, wikilinks, templates, and external URLs. |
| Search wiki page titles and contents (full-text). Searches the wiki's content namespaces unless given other namespace IDs. |
| Search page titles by prefix. |
| Report the identity the current session is authenticated as on the targeted wiki — username, whether it is anonymous, and group memberships (optionally user rights). |
Page writes
Name | Description | Permissions |
| Create a new wiki page. |
|
| Delete a wiki page. |
|
| Move (rename) a wiki page. |
|
| Protect or unprotect a wiki page. |
|
| Undelete a wiki page. |
|
| Upload a new revision of an existing file from local disk. |
|
| Upload a new revision of an existing file from a URL. |
|
| Update an existing wiki page: overwrite it, add to it, or rewrite one passage of it. |
|
| Upload a file to the wiki from local disk. |
|
| Upload a file to the wiki from a URL. |
|
Wiki management
Name | Description |
| Add a wiki as an MCP resource from its URL. Disabled when |
| Remove a wiki resource. Disabled when |
OAuth
Name | Description |
| Remove stored OAuth tokens. Stdio only. |
| List stored OAuth tokens with scopes and expiry (no token values). Stdio only. |
Extension packs
Each pack's tools register only on wikis where its extension is installed.
Name | Description |
| List schemas (entity types) and their property counts. |
| Get one schema's property definitions, relations, and select options. |
| Run a read-only Cypher query against the knowledge graph. |
| Find subject IDs by name, in one schema or all. |
| Fetch one subject's structured data by ID. |
| List the subjects attached to a wiki page. |
| Create a subject (main or other) on a page. Requires the |
| Replace a subject's label and statements. Requires the |
| Delete a subject by ID. Requires the |
| Set or clear a page's main subject. Requires the |
| Dry-run validate a proposed subject and return violations. |
| Mint unused subject IDs for dependent subjects written with their host. |
Name | Description |
| List Semantic MediaWiki properties with copy-paste templates for |
| Run a Semantic MediaWiki |
Name | Description |
| Run a Bucket Lua query. |
Name | Description |
| List Cargo tables defined on the wiki. |
| List a Cargo table's fields with their types and list-flags. |
| Run a Cargo SQL-style query. |
Name | Description |
| Find items and properties by label or alias. |
| Read one entity's terms and statements, with referenced IDs resolved to labels. |
| Run a SPARQL query against the wiki's query service. Offered only for a repository whose siteinfo publishes one. |
| Create or change an entity from Wikibase entity JSON. Requires the |
| Add one statement with an item, string, external-id or url value. Requires the |
Resources
mcp://wikis/{wikiKey} — per-wiki resource exposing sitename, server (the wiki's public address), articlepath, scriptpath, and the private and readOnly flags.
Those fields are the whole of it: the resource publishes a fixed list, so credentials and server-side settings in your configuration file are never exposed in resource content.
After
add-wikiorremove-wiki, the server sendsnotifications/resources/list_changedso 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 }"
}
]
}Environment variables
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 |
| Path to your configuration file |
|
| Type of MCP server transport ( |
|
| Minimum severity for logger output. One of |
|
| Byte cap for the content bodies and result blocks tools return (wikitext, rendered HTML, diffs, statement and row listings), applied once per response. Tune to the target LLM client's tool-response budget. |
|
| Hard cap on the base64-encoded size of a |
|
| Memory cap on the server-side fetch used by |
|
| Replaces the |
|
| Override the default credentials store path. Default: |
|
| Set to |
|
Related MCP server: @profullstack/mcp-server
Configuration
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, once the internal host is listed in MCP_TRUSTED_HOSTS. See docs/configuration.md — per-wiki fields.
For the full field reference, env-var substitution, secret sources, change tags, bot edits, upload directories, and authentication options, see docs/configuration.md.
Authentication
Tools marked 🔐 require authentication. Write tools (including extension-pack writes) are refused on a wiki that has readOnly: true, and hidden from tools/list when every configured wiki has it — see Deployment.
Browser-based OAuth (recommended). Sign in through a browser tab the first time a tool needs auth. Set
oauth2ClientIdandoauth2CallbackPortper wiki — see docs/configuration.md — OAuth (browser-based).Per-request bearer token (HTTP), deprecated. Each request carries
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.Hosted OAuth proxy (HTTP). The server fronts one MediaWiki consumer as an OAuth 2.1 Authorization Server, so an OAuth-aware client signs each user in — no manual tokens. Point it at
https://<wiki>/mcp; anonymous read still works. See docs/deployment.md — hosted OAuth sign-in.Manual OAuth2 access token. Paste a long-lived token into
config.json. See docs/configuration.md — manual OAuth2 access token.Bot password. Fallback when Extension:OAuth isn't installed. See docs/configuration.md — bot password.
cargo-query needs the Create, query and delete data through the Cargo extension grant on a bot password or OAuth consumer, even on a wiki that lets every user run Cargo queries. The Cargo extension is also detected on wiki.gg wikis, which run LIBRARIAN, wiki.gg's fork of Cargo.
Installation
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.
Claude Code
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-wikiThe 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@latestCodex
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-wikiTo 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.
Claude Desktop
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.
VS Code and Cursor
Or add the standard configuration by hand.
Antigravity
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
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"
}
}
}
}Standard configuration
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 |
|
|
VS Code |
|
|
Devin Desktop (formerly Windsurf) |
|
|
Zed |
|
|
LM Studio |
|
|
{
"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.
Deployment
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.
Security
Defaults are safe for single-user use. Before exposing the HTTP transport to others, lock down three things:
Terminate TLS at your reverse proxy. Don't expose the MCP port directly on an untrusted network. See docs/deployment.md — security checklist.
Pair
MCP_BINDwithMCP_ALLOWED_HOSTSandMCP_ALLOWED_ORIGINS. The HTTP transport binds to127.0.0.1by default. When you open it up withMCP_BIND=0.0.0.0, setMCP_ALLOWED_HOSTSto the hostnames your proxy forwards andMCP_ALLOWED_ORIGINSto the browser origins allowed to call the server — these block DNS-rebinding and cross-origin attacks respectively.Uploads are opt-in.
upload-fileis disabled until you list allowed directories inuploadDirsorMCP_UPLOAD_DIRS. See docs/configuration.md — upload directories.Internal destinations need
MCP_TRUSTED_HOSTS. Outbound fetches are SSRF-guarded: a destination resolving to a private or loopback address (e.g. a Docker-network alias likemediawiki.svc) is refused until you list its host inMCP_TRUSTED_HOSTS. See docs/deployment.md — outbound SSRF guard.
Report a vulnerability via GitHub's security advisory form — full policy in SECURITY.md.
Contributing
Contributions are welcome — pull requests and issues (bugs, feature requests, suggestions) both work.
Working on tool code? Start from AGENTS.md for repo layout, commands, and testing patterns.
Adding or modifying a tool? Read docs/tool-conventions.md — it covers description voice, parameter docs, annotation hints, and MediaWiki terminology conventions.
Running a release? See docs/releasing.md.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Available Tools
31 toolsadd-wikiAIdempotent
Registers a new wiki as an MCP resource by fetching its sitename and API configuration from any URL on the wiki (e.g. a page URL). The wiki becomes available at mcp://wikis/ and can be targeted by passing its key as the wiki argument to any wiki tool. Fails if the URL is not a MediaWiki wiki or if a wiki with the same key is already registered.
| Name | Required | Description | Default |
|---|---|---|---|
| wikiUrl | Yes | Any URL from the target wiki (e.g. https://en.wikipedia.org/wiki/Main_Page) |
compare-pagesARead-onlyIdempotent
Returns the changes between two versions of a wiki page as a compact text diff. Each side accepts a revision ID, page title (latest revision), or supplied wikitext; text-vs-text is rejected. Only the changes are returned over the wire. For the full text of both sides, fetch with get-page instead. If a title or revision ID does not exist, an error is returned. Set includeDiff=false for a cheap change-detection response that skips diff rendering and returns just the change flag, revision metadata, and size delta. Diff output is truncated at 75000 bytes by default, with a marker reporting how much of it was returned; a narrower revision range or includeDiff=false avoids truncation.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| toText | No | Supplied wikitext for the "to" side | |
| toTitle | No | Wiki page title for the "to" side (latest revision is used) | |
| fromText | No | Supplied wikitext for the "from" side | |
| fromTitle | No | Wiki page title for the "from" side (latest revision is used) | |
| toRevision | No | Revision ID for the "to" side | |
| includeDiff | No | Include the diff body (default true). Set false for a cheap change-detection response. | |
| fromRevision | No | Revision ID for the "from" side |
create-pageAIdempotent
Creates a new wiki page with the provided content and returns the new page's title, page ID, and first revision ID. Fails if a page with the given title already exists; for existing pages, use update-page. The optional contentModel parameter selects a non-default content format (e.g. javascript, css); when omitted, MediaWiki picks the default for the title's namespace. For building up a large page across multiple calls, pair create-page with chained update-page(operation='append') calls, each adding a chunk.
| Name | Required | Description | Default |
|---|---|---|---|
| bot | No | Marks the edit as a bot edit, which Special:RecentChanges hides by default. When omitted, the bot setting of the wiki decides; pass false to leave one edit unflagged. Applies only if the account has the `bot` right and, through a bot password or OAuth consumer, the High-volume (bot) access grant; otherwise the edit saves unflagged and the response reports botMarked: false. Use for bulk or automated edits, or when the user asks. | |
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| title | Yes | Wiki page title | |
| source | Yes | Page content in the format specified by the contentModel parameter | |
| comment | No | Reason for creating the page | |
| contentModel | No | Content model of the new page. If omitted, MediaWiki picks the default for the title's namespace. |
delete-pageADestructiveIdempotent
Removes a wiki page from public view and returns the deleted title. This is a soft delete: the page and its revision history remain in the database and can be restored with undelete-page until an administrator purges them. Fails if the page does not exist or the authenticated user lacks the delete permission.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| title | Yes | Wiki page title | |
| comment | No | Reason for deleting the page |
get-category-membersARead-onlyIdempotent
Lists members of a category, returning each member's page ID, namespace ID, and wiki page title. Optionally filter by member type (page, file, subcat) or by namespace ID — filters apply server-side before the cap. Returns up to 500 members per call; paginate with continueFrom (opaque cursor echoed from the previous response). A member's type is omitted when it is an ordinary page (present only for files and subcategories).
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| limit | No | Maximum members to return (1..500) | |
| types | No | Types of members to include | |
| category | Yes | Category name (with or without the "Category:" prefix) | |
| namespaces | No | Namespace IDs to filter by | |
| continueFrom | No | Opaque continuation token from the previous response; omit on first call |
get-fileARead-onlyIdempotent
Returns metadata for a file (uploader, timestamp, size, MIME type) along with download URLs for the thumbnail, preview, and original. The File: prefix is added automatically if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| title | Yes | File title (with or without the "File:" prefix) |
get-file-dataARead-onlyIdempotent
Fetches a wiki file server-side and returns the image inline as a content block, for clients that cannot reach the wiki host (sandboxed or network-restricted) and need the image sent to the model for visual analysis. Returns a scaled rendition sized by width. Files MediaWiki can rasterize (images, SVG, PDF, DjVu) come back as an image; other types (audio, video, arbitrary binaries) error — for those, and for metadata or a download URL, use get-file.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| title | Yes | File title (with or without the "File:" prefix) | |
| width | No | Pixel width of the scaled rendition. A quality/detail knob: in image mode the model caps image tokens regardless of size, so larger mainly means more detail. Defaults to 1024 (512 when format is "text"); values above 1568 are clamped. | |
| format | No | 'image' returns a native image content block the model can view; 'text' returns the base64 as a text block, for hosts that do not forward image content to the model (base64 text costs far more tokens). | image |
get-links-hereARead-onlyIdempotent
Lists pages that reference a target wiki page, returning each referencing page's title, page ID, namespace ID, and whether it is a redirect. The type parameter selects the relationship — wikilinks (pages that link to the target), transclusions (pages that embed it, such as a template), or fileusage (pages that display it, for File pages) — one relationship per call. With expandRedirects, a referencing redirect also yields the pages that link through it (wikilinks and fileusage only), each tagged with the via redirect. Filter by namespace ID or by redirect status. For members of a category, use get-category-members; for full-text content search, use search-page. Returns up to 500 per call; paginate with continueFrom. The redirect flag appears only when the referencing page is a redirect.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Inbound relationship to list: wikilinks (pages that link to the target), transclusions (pages that embed it), or fileusage (pages that display it) | wikilinks |
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| limit | No | Maximum referencing pages to return (1..500) | |
| title | Yes | Wiki page title to find references to (the link target). A File title when type is fileusage. | |
| filter | No | Filter the referencing pages by redirect status | all |
| namespaces | No | Namespace IDs to filter the referencing pages by | |
| continueFrom | No | Opaque continuation token from the previous response; omit on first call | |
| expandRedirects | No | When a referencing page is a redirect to the target, also return the pages that link through it. Applies to wikilinks and fileusage only. |
get-pageARead-onlyIdempotent
Returns a single wiki page (wikitext source, rendered HTML, or metadata only). If the title does not exist, an error is returned. Use metadata=true to retrieve the revision ID (for edit-conflict detection), page size, and section outline. Set content="none" to fetch only metadata. Large content is truncated at 75000 bytes by default, with a marker reporting how much of it was returned and which sections a narrower read can target; a follow-up call with section=N fetches a specific section. For more than one page at a time, use get-pages. For a specific historical revision, use get-revision.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| title | Yes | Wiki page title | |
| content | No | Type of content to return | source |
| section | No | Section number (0 = lead; 1..N = heading sections). Narrows content to one section. | |
| metadata | No | Whether to include metadata (page ID, revision info, size, section outline) in the response |
get-page-historyARead-onlyIdempotent
Returns revision metadata (revision ID, timestamp, user, comment, size, minor flag) for a wiki page, in segments of 20 revisions, newest first. Paginate with olderThan or newerThan (mutually exclusive). If the title does not exist, an error is returned. Boolean flags appear only when true.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| title | Yes | Wiki page title | |
| filter | No | Change tag — return only revisions carrying this tag | |
| newerThan | No | Revision ID — return revisions newer than this (exclusive). Mutually exclusive with olderThan. | |
| olderThan | No | Revision ID — return revisions older than this (exclusive). Mutually exclusive with newerThan. |
get-pagesARead-onlyIdempotent
Returns multiple wiki pages in one call (wikitext source or metadata only). Suited to reading a cluster of related pages, diffing a page family, or syncing pages to local storage. Accepts up to 50 titles; missing pages are reported inline (not as errors). One byte budget covers the whole response, 75000 bytes by default: pages come back whole in the order asked for until it is spent, and the pages past that point are named rather than returned, so a follow-up call for those names fetches the rest. Only a first page larger than the budget on its own is truncated, with a marker reporting how much of it was returned and which sections a narrower read can target. For a single page or HTML output, use get-page. requestedTitle is included only when it differs from the resolved title.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| titles | Yes | Array of wiki page titles (1..50) | |
| content | No | Type of content to return; "none" returns metadata only | source |
| metadata | No | Whether to include metadata (page ID, revision info) in the response | |
| followRedirects | No | Follow wiki redirects. When true (default), redirect targets are returned with a "Redirected from:" line in the metadata. Set false to fetch redirect pseudo-pages as-is (sync-fidelity). |
get-random-pagesARead-onlyIdempotent
Returns randomly chosen wiki pages from one namespace, as each page's title, page ID, and namespace ID; the API counterpart of Special:Random. One call's pages are a fair random sample; separate calls can overlap because they read the same ordering from different starting points. There is no continuation; each call picks a new starting point. For page content, pass the titles to get-pages.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| limit | No | Number of wiki pages to draw (1..500) | |
| filter | No | Filter the drawn wiki pages by redirect status | nonredirects |
| namespace | No | Namespace ID to draw wiki pages from |
get-recent-changesARead-onlyIdempotent
Returns recent change events, newest first, in segments of 50. Defaults to edits and page creations; set types to include log actions, categorizations, or external changes. Each row includes title, timestamp, user, revision IDs, size change, flags (minor/bot/new/anon), tags, and change type. Filter by timestamp window, namespaces, user, change tag, or hide flags (hideBots/hideMinor/hideAnon/hideRedirects/hidePatrolled). Pass showPatrolStatus to include per-row patrol state (requires patrol rights). Paginate with the continue token from the truncation marker. For a single page's revision history, use get-page-history. Boolean flags appear only when true; rows report the size delta, not raw old/new lengths.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Change tag — return only changes carrying this tag | |
| user | No | Username — return only changes by this user. Mutually exclusive with excludeUser. | |
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| since | No | ISO 8601 timestamp — only return changes at or after this time | |
| types | No | Event types to include. Defaults to edit and new (content changes only). | |
| until | No | ISO 8601 timestamp — only return changes at or before this time | |
| continue | No | Continuation token from a prior call's truncation marker | |
| hideAnon | No | Omit edits by anonymous users | |
| hideBots | No | Omit bot-flagged edits | |
| hideMinor | No | Omit minor-flagged edits | |
| namespace | No | Namespace IDs to restrict the feed to — e.g. [0, 1] for main and talk | |
| excludeUser | No | Username — exclude changes by this user. Mutually exclusive with user. | |
| hidePatrolled | No | Omit patrolled edits. Requires patrol rights. | |
| hideRedirects | No | Omit changes whose target is a redirect | |
| showPatrolStatus | No | Include per-row patrol status; adds an "Unpatrolled: yes" line to unpatrolled rows. Requires patrol rights. |
get-revisionARead-onlyIdempotent
Returns a specific historical revision of a wiki page by revision ID (wikitext source, rendered HTML, or metadata only). If the revision ID does not exist, an error is returned. Content is truncated at 75000 bytes by default; a past revision has no narrower read, so for a large one use compare-pages to see what changed. For the latest revision plus metadata, use get-page with metadata=true.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| content | No | Type of content to return | source |
| metadata | No | Whether to include metadata (revision ID, page ID, page title, user ID, user name, timestamp, comment, size, minor, HTML URL) in the response | |
| revisionId | Yes | Revision ID |
get-site-infoARead-onlyIdempotent
Returns key facts about the targeted wiki from its MediaWiki siteinfo: general settings (sitename, MediaWiki version, content language, page-title case-sensitivity, live read-only state, and maxarticlesize in bytes), the namespace map with localized names and aliases, the list of installed extension names, and the content license. Set includeStatistics to also return page, article, edit, image, user, active-user, and admin counts.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| includeStatistics | No | Also return live wiki statistics (page, article, edit, image, user, active-user, and admin counts). Defaults to false. |
list-wikisARead-onlyIdempotent
Lists every configured wiki: its key (pass as the wiki argument to other tools), sitename, server URL, whether it is read-only or the default, whether it is currently reachable, and which extension-gated tools work on it. Use to discover the configured wikis, their keys, and which extension tools each supports.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
move-pageADestructiveIdempotent
Renames a wiki page, moving it — and by default its talk page — to a new title, and returns the old and new titles plus whether a redirect was left behind. By default leaves a redirect at the old title; set leaveRedirect=false to suppress it (requires the suppressredirect right, otherwise the redirect is left regardless). Fails if the source page does not exist, if the target title already exists (unless it is a redirect and ignoreWarnings is set), or if the authenticated user lacks the move permission. Moving a File page additionally requires the file-move permission.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| comment | No | Reason for the move | |
| toTitle | Yes | New title to move the page to | |
| moveTalk | No | Also move the associated talk page | |
| fromTitle | Yes | Current title of the wiki page to move | |
| moveSubpages | No | Also move subpages, where the namespace allows subpages | |
| leaveRedirect | No | Leave a redirect at the old title. Suppressing it requires the suppressredirect right; without that right MediaWiki leaves the redirect regardless. | |
| ignoreWarnings | No | Proceed past move warnings, e.g. when the target is an existing redirect. Moving over a non-redirect page still fails. |
oauth-logoutADestructiveIdempotent
Removes stored OAuth tokens. With no argument, removes all stored tokens; with wiki, removes only that wiki. Stdio only.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki key to log out from. Omit to log out from all wikis. |
oauth-statusARead-onlyIdempotent
Lists wikis with stored OAuth tokens, their scopes, and expiry. Stdio only. Never returns token values.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
parse-wikitextARead-onlyIdempotent
Renders wikitext through the live wiki without saving. Returns HTML, parse warnings, categories, wikilinks, templates, external URLs, and display title. Suited to dry-running a planned edit before create-page or update-page, or previewing standalone wikitext (template combinations, sanitizer checks) with no target page. HTML output is truncated at 75000 bytes by default, with a marker reporting how much of it was returned; a smaller wikitext fragment in a follow-up call returns the rest.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| title | No | Wiki page title providing context for magic words like {{PAGENAME}}. Defaults to "API". | |
| wikitext | Yes | Wikitext to render | |
| applyPreSaveTransform | No | Apply pre-save transform (expand ~~~~ signatures, {{subst:}}, normalize whitespace). Matches editor "Show preview" behavior. |
protect-pageADestructive
Changes the protection of a wiki page and returns its title, its own protections afterwards with their expiries, and whether cascading is on. Each action named in protections is set to its level until expiry. Actions left out keep their current protection, so lifting all protection means naming every action the page takes with "all". Protection the page inherits from a cascade-protected page that transcludes it is neither changed nor listed. Fails if the authenticated user lacks the protect permission, if the wiki does not accept an action or level for this page, or if the expiry is invalid or in the past.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| title | Yes | Wiki page title | |
| expiry | No | When the protections named in protections end: infinite, a relative time such as "1 week", or a timestamp such as 2026-10-01T00:00:00Z. | infinite |
| cascade | No | Also protect every page transcluded into this one against editing. Applies only while edit protection is at a cascading level, sysop by default. Omit to keep the current setting. | |
| comment | No | Reason for changing the protection | |
| protections | Yes | Protection level for each action, e.g. {"edit": "autoconfirmed", "move": "sysop"}. The actions are edit and move, plus upload on a File page; a page that does not exist takes only create, which limits who can create the title. Levels are the wiki's own; MediaWiki's defaults are autoconfirmed (semi-protection) and sysop (full protection). "all" lifts the action's protection. |
remove-wikiADestructiveIdempotent
Removes a wiki from the MCP resources. Clears any cached credentials and license metadata for the wiki. Fails if the specified wiki is the configured default wiki.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | MCP resource URI of the wiki to remove (e.g. mcp://wikis/en.wikipedia.org) |
search-pageARead-onlyIdempotent
Searches wiki page titles and page content (full-text) for the provided terms. Returns matching pages with a snippet, size, timestamp, and the namespace the match came from. Covers the namespaces the wiki counts as content unless namespaces names the namespace IDs to search; get-site-info lists a wiki's namespaces and flags which of them hold content. Accepts up to 100 matches per call (default 10); additional matches beyond the cap are flagged in the response — narrow the query to surface more. For title-prefix lookup (e.g. autocomplete), use search-page-by-prefix.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| limit | No | Maximum number of search results to return | |
| query | Yes | Search terms | |
| namespaces | No | Namespace IDs to search — e.g. [0, 12] for main and help |
search-page-by-prefixARead-onlyIdempotent
Returns wiki page titles beginning with a given prefix (suited to autocomplete and title lookup). Only titles are returned — no snippets, sizes, or IDs. Accepts up to 500 titles per call (default 10); additional matches beyond the cap are flagged in the response. For full-text content search, use search-page.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| limit | No | Maximum number of results to return | |
| prefix | Yes | Wiki page title prefix | |
| namespace | No | Namespace ID to restrict the search to |
undelete-pageAIdempotent
Restores a previously deleted wiki page, including its full revision history, and returns the restored title. The page must currently be in a deleted state (from delete-page); fails if no deleted revisions exist for the title or the authenticated user lacks the undelete permission.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| title | Yes | Wiki page title | |
| comment | No | Reason for undeleting the page |
update-fileADestructive
Uploads a new revision of an existing file from the local disk, preserving prior revisions in the file history, and returns the file title and URL. The upload appears in the wiki's upload log. Replaces the file content (bytes) only; for editing the wikitext on a file's description page, use update-page. The operator restricts which directories are readable; filepath must be an absolute path inside a configured upload directory, or the call fails before contacting the wiki. Fails if no file exists at the target title; for the initial upload, use upload-file. To upload a new revision from a remote web address instead of a local path, use update-file-from-url.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| title | Yes | File title (with or without the "File:" prefix) | |
| comment | No | Reason for uploading the new revision | |
| filepath | Yes | File path on the local disk |
update-file-from-urlADestructive
Fetches a file from a remote web URL and uploads it as a new revision of an existing file, preserving prior revisions in the file history, and returns the file title and URL. The upload appears in the wiki's upload log. Replaces the file content (bytes) only; for editing the wikitext on a file's description page, use update-page. Works whether or not the wiki has upload-by-URL enabled: the server retrieves the file and uploads it directly, falling back to wiki-side fetching only when it cannot reach the URL itself. Fails if no file exists at the target title; for the initial upload, use upload-file-from-url.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the file to upload | |
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| title | Yes | File title (with or without the "File:" prefix) | |
| comment | No | Reason for uploading the new revision |
update-pageADestructive
Writes to an existing wiki page and returns the new revision ID. Fails if the page does not exist; for new pages, use create-page. operation says what the write does and section says where: omit section to act on the whole page, or set it to confine the write to one section. For changing part of a page, use operation='find-replace', which carries only the text being rewritten, so nothing outside find can be lost and the rest of the page never has to travel to or from the caller; a find that matches nothing, or more than one place, is refused without writing, which also makes it safe to resend a call whose result never arrived. For replacing a target outright, use operation='replace', whose source must carry every byte meant to survive; it is refused when source would shorten a target too large for one read to return whole, since the rest was never seen. With section set above 0 it also takes out that section's heading, so source begins with a heading unless it is empty, and takes out every subsection nested under that section, is refused when source would drop them, and needs latestId to say which revision the section number was read from. operation='append' and 'prepend' add a delta: a new section at the end of the page is an append whose source begins with the heading, and with section set a prepend inserts one immediately above that section. Pass latestId (reported as latestRevisionId by any get-page read that returns wikitext) for edit-conflict detection: the write is rejected rather than silently clobbering a concurrent change. Each call is a separate revision, and resending an append or prepend whose result never arrived adds the delta a second time.
| Name | Required | Description | Default |
|---|---|---|---|
| bot | No | Marks the edit as a bot edit, which Special:RecentChanges hides by default. When omitted, the bot setting of the wiki decides; pass false to leave one edit unflagged. Applies only if the account has the `bot` right and, through a bot password or OAuth consumer, the High-volume (bot) access grant; otherwise the edit saves unflagged and the response reports botMarked: false. Use for bulk or automated edits, or when the user asks. | |
| find | No | The existing wikitext to rewrite, matched in full and exactly, whitespace and template markup included. Required when operation is 'find-replace'. A find that matches nothing, or more than one place, is refused without writing: extend it with the text around it to name one occurrence. | |
| mode | No | Deprecated older spelling of operation='append' and operation='prepend'. Send operation instead. | |
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| title | Yes | Wiki page title | |
| source | No | The content to write, in the existing page's content model. Required for every operation except find-replace, and refused for that one. An appended source that opens a new section must begin on its own line, as in "\n\n== History ==\n\nBody."; without the leading newline the heading runs on from the last line of the page and is not recognised as a heading. | |
| comment | No | Summary of the edit | |
| section | No | Section number (0 = lead; 1..N = heading sections), from the section list get-page reports. Confines the write to that section: omit it to act on the whole page. A replace also takes out every subsection nested under the section; see removeSubsections. | |
| latestId | No | Base revision ID for edit-conflict detection; any get-page read that returns wikitext reports it as latestRevisionId. Required when section is set, because the wiki resolves a section number against this revision rather than against whichever is current. If omitted on a write that is not scoped to a section, the update is applied without conflict detection. | |
| operation | No | What the write does to the target: 'replace' overwrites it with source, 'append' and 'prepend' add source to it, and 'find-replace' rewrites only the text find names and leaves the rest of the target byte for byte. With section=N, 'append' writes at the end of that section and 'prepend' immediately above that section's heading, which inserts a new section before an existing one. Defaults to 'replace'. | |
| replaceWith | No | What find becomes. Required when operation is 'find-replace'; an empty string deletes the text find matched. | |
| removeSubsections | No | Confirms that replacing this section is meant to remove the subsections nested under it. Required only when section is set and source contains fewer subsection headings than the section currently has. | |
| removeUnreadContent | No | Confirms that replacing content larger than a single read returns is meant to discard the part that was never returned. Required only when the target holds more bytes than one response carries and source holds fewer. |
upload-fileAIdempotent
Uploads a file from the local disk into the wiki's File namespace and returns the resulting file title and URL. The upload appears in the wiki's upload log. The operator restricts which directories are readable; filepath must be an absolute path inside a configured upload directory, or the call fails before contacting the wiki. Fails if a file with the target title already exists (the wiki does not silently overwrite existing files). To upload directly from a remote web address instead of a local path, use upload-file-from-url. To replace an existing file with a new revision, use update-file.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Wikitext on the file page | |
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| title | Yes | File title (with or without the "File:" prefix) | |
| comment | No | Reason for uploading the file | |
| filepath | Yes | File path on the local disk |
upload-file-from-urlAIdempotent
Fetches a file from a remote web URL and uploads it into the wiki's File namespace, returning the resulting file title and URL. The upload appears in the wiki's upload log. Works whether or not the wiki has upload-by-URL enabled: the server retrieves the file and uploads it directly, falling back to wiki-side fetching only when it cannot reach the URL itself. Fails if a file with the target title already exists. To replace an existing file with a new revision, use update-file-from-url.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the file to upload | |
| text | Yes | Wikitext on the file page | |
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| title | Yes | File title (with or without the "File:" prefix) | |
| comment | No | Reason for uploading the file |
whoamiARead-onlyIdempotent
Returns the identity the current session is authenticated as on the targeted wiki: the username, whether the session is anonymous (no user is logged in), and the user groups it belongs to. Set includeRights to also return the full list of user rights. Use to confirm who edits and uploads will be attributed to before writing — for example, to resolve your own username before building a title under your own user namespace (User:/…). Reports anonymous access rather than failing when the session has no credentials. For which wikis have stored OAuth tokens and their scopes, use oauth-status instead.
| Name | Required | Description | Default |
|---|---|---|---|
| wiki | No | Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki. | |
| includeRights | No | Also return the full list of user rights granted on this wiki (a long list). Defaults to false. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.21.0- Changed
create-page1 field changed- changed
Input schema / properties / bot / descriptionPrevious value: -"Marks the edit as a bot edit, which Special:RecentChanges hides by default. Takes effect only when the authenticated account has the `bot` right (granted by the bot group, or by the high-volume grant on a bot password or OAuth consumer); without it the edit saves unflagged and the response reports botMarked: false. Use when performing bulk or automated edit runs, or when the user requests it."New value: +"Marks the edit as a bot edit, which Special:RecentChanges hides by default. When omitted, the bot setting of the wiki decides; pass false to leave one edit unflagged. Applies only if the account has the `bot` right and, through a bot password or OAuth consumer, the High-volume (bot) access grant; otherwise the edit saves unflagged and the response reports botMarked: false. Use for bulk or automated edits, or when the user asks."
- Added
get-random-pages - Changed
update-page1 field changed- changed
Input schema / properties / bot / descriptionPrevious value: -"Marks the edit as a bot edit, which Special:RecentChanges hides by default. Takes effect only when the authenticated account has the `bot` right (granted by the bot group, or by the high-volume grant on a bot password or OAuth consumer); without it the edit saves unflagged and the response reports botMarked: false. Use when performing bulk or automated edit runs, or when the user requests it."New value: +"Marks the edit as a bot edit, which Special:RecentChanges hides by default. When omitted, the bot setting of the wiki decides; pass false to leave one edit unflagged. Applies only if the account has the `bot` right and, through a bot password or OAuth consumer, the High-volume (bot) access grant; otherwise the edit saves unflagged and the response reports botMarked: false. Use for bulk or automated edits, or when the user asks."
1 tool update
v0.19.0- Added
protect-page
2 tool updates
v0.18.0- Changed
search-page1 field changed- added
Input schema / properties / namespacesAdded value: +{ + "description": "Namespace IDs to search — e.g. [0, 12] for main and help", + "items": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "minItems": 1, + "type": "array" +}
- Changed
update-page15 fields changed- added
Input schema / properties / findAdded value: +{ + "description": "The existing wikitext to rewrite, matched in full and exactly, whitespace and template markup included. Required when operation is 'find-replace'. A find that matches nothing, or more than one place, is refused without writing: extend it with the text around it to name one occurrence.", + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / latestId / descriptionPrevious value: -"Base revision ID for edit-conflict detection; obtain from get-page with metadata=true. If omitted, the update is applied without conflict detection."New value: +"Base revision ID for edit-conflict detection; any get-page read that returns wikitext reports it as latestRevisionId. Required when section is set, because the wiki resolves a section number against this revision rather than against whichever is current. If omitted on a write that is not scoped to a section, the update is applied without conflict detection." - changed
Input schema / properties / mode / descriptionPrevious value: -"Adds source to the existing content instead of replacing it: 'append' to the end, 'prepend' to the start."New value: +"Deprecated older spelling of operation='append' and operation='prepend'. Send operation instead." - added
Input schema / properties / operationAdded value: +{ + "description": "What the write does to the target: 'replace' overwrites it with source, 'append' and 'prepend' add source to it, and 'find-replace' rewrites only the text find names and leaves the rest of the target byte for byte. With section=N, 'append' writes at the end of that section and 'prepend' immediately above that section's heading, which inserts a new section before an existing one. Defaults to 'replace'.", + "enum": [ + "replace", + "append", + "prepend", + "find-replace" + ], + "type": "string" +} - added
Input schema / properties / removeSubsectionsAdded value: +{ + "description": "Confirms that replacing this section is meant to remove the subsections nested under it. Required only when section is set and source contains fewer subsection headings than the section currently has.", + "type": "boolean" +} - added
Input schema / properties / removeUnreadContentAdded value: +{ + "description": "Confirms that replacing content larger than a single read returns is meant to discard the part that was never returned. Required only when the target holds more bytes than one response carries and source holds fewer.", + "type": "boolean" +} - added
Input schema / properties / replaceWithAdded value: +{ + "description": "What find becomes. Required when operation is 'find-replace'; an empty string deletes the text find matched.", + "type": "string" +} - removed
Input schema / properties / section / anyOfRemoved value: -[ - { - "maximum": 9007199254740991, - "minimum": 0, - "type": "integer" - }, - { - "const": "new", - "type": "string" - } -] - changed
Input schema / properties / section / descriptionPrevious value: -"Section to edit: 0 (lead), 1..N (existing heading sections), or 'new' to append a new heading section."New value: +"Section number (0 = lead; 1..N = heading sections), from the section list get-page reports. Confines the write to that section: omit it to act on the whole page. A replace also takes out every subsection nested under the section; see removeSubsections." - added
Input schema / properties / section / maximumAdded value: +9007199254740991 - added
Input schema / properties / section / minimumAdded value: +0 - added
Input schema / properties / section / typeAdded value: +"integer" - removed
Input schema / properties / sectionTitleRemoved value: -{ - "description": "Heading for a new section; required when section='new', rejected otherwise.", - "type": "string" -} - changed
Input schema / properties / source / descriptionPrevious value: -"The content to write, in the existing page's content model. Interpreted as the full page by default; as the given section's content when section is set; or as a delta (appended or prepended) when mode is set."New value: +"The content to write, in the existing page's content model. Required for every operation except find-replace, and refused for that one. An appended source that opens a new section must begin on its own line, as in \"\\n\\n== History ==\\n\\nBody.\"; without the leading newline the heading runs on from the last line of the page and is not recognised as a heading." - changed
Input schema / requiredPrevious value: -[ - "title", - "source" -]New value: +[ + "title" +]
29 tool updates
v0.15.0- Changed
add-wiki1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
compare-pages1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
create-page1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
delete-page1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Added
get-category-members - Changed
get-file1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get-file-data1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get-links-here1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get-page1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get-page-history1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get-pages1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get-recent-changes1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get-revision1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get-site-info1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list-wikis1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
move-page1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
oauth-logout1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
oauth-status1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
parse-wikitext1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
remove-wiki1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
search-page1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
search-page-by-prefix1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
undelete-page1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update-file1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update-file-from-url1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update-page1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
upload-file1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
upload-file-from-url1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
whoami1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
1 tool update
v0.14.0- Removed
get-category-members
4 tool updates
v0.12.0- Changed
create-page1 field changed- added
Input schema / properties / botAdded value: +{ + "description": "Marks the edit as a bot edit, which Special:RecentChanges hides by default. Takes effect only when the authenticated account has the `bot` right (granted by the bot group, or by the high-volume grant on a bot password or OAuth consumer); without it the edit saves unflagged and the response reports botMarked: false. Use when performing bulk or automated edit runs, or when the user requests it.", + "type": "boolean" +}
- Added
get-file-data - Changed
update-page1 field changed- added
Input schema / properties / botAdded value: +{ + "description": "Marks the edit as a bot edit, which Special:RecentChanges hides by default. Takes effect only when the authenticated account has the `bot` right (granted by the bot group, or by the high-volume grant on a bot password or OAuth consumer); without it the edit saves unflagged and the response reports botMarked: false. Use when performing bulk or automated edit runs, or when the user requests it.", + "type": "boolean" +}
- Added
whoami
24 tool updates
v0.10.0- Changed
compare-pages1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
create-page1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
delete-page1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
get-category-members1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
get-file1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Added
get-links-here - Changed
get-page1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
get-page-history1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
get-pages1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
get-recent-changes1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
get-revision1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Added
get-site-info - Added
list-wikis - Added
move-page - Changed
parse-wikitext1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
search-page1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
search-page-by-prefix1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Removed
set-wiki - Changed
undelete-page1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
update-file1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
update-file-from-url1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
update-page1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
upload-file1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
- Changed
upload-file-from-url1 field changed- added
Input schema / properties / wikiAdded value: +{ + "description": "Wiki to target, as a key from the mcp://wikis/ resources (e.g. en.wikipedia.org), or the full mcp://wikis/ URI. Omit to use the default wiki.", + "type": "string" +}
24 tool updates
v1.0.2- Added
add-wiki - Added
compare-pages - Added
create-page - Added
delete-page - Added
get-category-members - Added
get-file - Added
get-page - Added
get-page-history - Added
get-pages - Added
get-recent-changes - Added
get-revision - Added
oauth-logout - Added
oauth-status - Added
parse-wikitext - Added
remove-wiki - Added
search-page - Added
search-page-by-prefix - Added
set-wiki - Added
undelete-page - Added
update-file - Added
update-file-from-url - Added
update-page - Added
upload-file - Added
upload-file-from-url
16 tool updates
v1.0.1- Removed
add-wiki - Removed
create-page - Removed
delete-page - Removed
get-category-members - Removed
get-file - Removed
get-page - Removed
get-page-history - Removed
get-revision - Removed
remove-wiki - Removed
search-page - Removed
search-page-by-prefix - Removed
set-wiki - Removed
undelete-page - Removed
update-page - Removed
upload-file - Removed
upload-file-from-url
16 tool updates
v1.0.0- Added
add-wiki - Changed
create-page3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / contentModel / defaultAdded value: +"wikitext" - changed
Input schema / properties / contentModel / descriptionPrevious value: -"Type of content on the page. Defaults to \"wikitext\""New value: +"Type of content on the page"
- Added
delete-page - Added
get-category-members - Changed
get-file1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get-page5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / content / defaultPrevious value: -"noContent"New value: +"source" - changed
Input schema / properties / content / descriptionPrevious value: -"Format of the page content to retrieve"New value: +"Type of content to return" - changed
Input schema / properties / content / enumPrevious value: -[ - "noContent", - "withSource", - "withHtml" -]New value: +[ + "source", + "html", + "none" +] - added
Input schema / properties / metadataAdded value: +{ + "default": false, + "description": "Whether to include metadata (page ID, revision info, license) in the response", + "type": "boolean" +}
- Changed
get-page-history9 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / newerThan / descriptionPrevious value: -"The ID of the newest revision to return"New value: +"Revision ID of the newest revision to return" - added
Input schema / properties / newerThan / exclusiveMinimumAdded value: +0 - added
Input schema / properties / newerThan / maximumAdded value: +9007199254740991 - changed
Input schema / properties / newerThan / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / olderThan / descriptionPrevious value: -"The ID of the oldest revision to return"New value: +"Revision ID of the oldest revision to return" - added
Input schema / properties / olderThan / exclusiveMinimumAdded value: +0 - added
Input schema / properties / olderThan / maximumAdded value: +9007199254740991 - changed
Input schema / properties / olderThan / typePrevious value: -"number"New value: +"integer"
- Added
get-revision - Added
remove-wiki - Changed
search-page3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of search results to return (1-100)"New value: +"Maximum number of search results to return" - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer"
- Added
search-page-by-prefix - Changed
set-wiki4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / uriAdded value: +{ + "description": "MCP resource URI of the wiki to use (e.g. mcp://wikis/en.wikipedia.org)", + "type": "string" +} - removed
Input schema / properties / wikiUrlRemoved value: -{ - "description": "Any URL from the target wiki (e.g. https://en.wikipedia.org/wiki/Main_Page).", - "format": "uri", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "wikiUrl" -]New value: +[ + "uri" +]
- Added
undelete-page - Changed
update-page5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / latestId / descriptionPrevious value: -"Identifier for the revision used as the base for the new source"New value: +"Revision ID used as the base for the new source" - added
Input schema / properties / latestId / exclusiveMinimumAdded value: +0 - added
Input schema / properties / latestId / maximumAdded value: +9007199254740991 - changed
Input schema / properties / latestId / typePrevious value: -"number"New value: +"integer"
- Added
upload-file - Added
upload-file-from-url
7 tool updates
- First observed
create-page - First observed
get-file - First observed
get-page - First observed
get-page-history - First observed
search-page - First observed
set-wiki - First observed
update-page
TDQS
Scored across 31 tools
Each tool targets a distinct resource+action and descriptions explicitly cross-reference siblings (create-page vs update-page, get-page vs get-pages vs get-revision, search-page vs search-page-by-prefix). The four file upload tools (upload-file, upload-file-from-url, update-file, update-file-from-url) and the get-file/get-file-data pair are the only near-overlaps, but each description disambiguates clearly ('initial upload' vs 'new revision', 'metadata/URL' vs 'inline image').
Almost everything follows a hyphenated verb_noun convention (get-page, create-page, delete-page, list-wikis, add-wiki, upload-file-from-url). The handful of exceptions — oauth-status, oauth-logout, whoami — are noun-first or one-word but still readable and clearly grouped, so it's a minor deviation rather than a break.
31 tools is above the comfortable range and four near-parallel file upload variants inflate the surface. The breadth (page lifecycle, files, links/categories, wiki registration, auth) makes the count defensible, but it's on the heavy side for what an agent must hold in context.
Coverage is strong: full page CRUD, soft delete/undelete, move, protect, history, revisions, diffs, search, categories, backlinks, files (read, inline, upload, update, URL variants), siteinfo, and multi-wiki/auth management. Minor gaps exist for user/contributions and watchlist-style operations, but core editing and reading workflows have no dead ends.
Maintenance
Related MCP Connectors
MCP server for the Seline Analytics API
MCP server for progressive tool usage at any scale (see https://klavis.ai)
A Model Context Protocol server for Wix AI tools
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server for converting files between different formats5MIT
- AlicenseNot gradedqualityBmaintenanceA generic, modular server for implementing the Model Context Protocol (MCP).94 npm45ISC
- AlicenseNot gradedqualityFmaintenanceModel Context Protocol (MCP) server for Wiki.js with hierarchical documentation & Docker setup50MIT

OSRS MCP Serverofficial
AlicenseBqualityNot gradedmaintenanceMCP Server for interacting with Old School RuneScape Wiki API and game data files, providing tools to search the OSRS Wiki and access game data definitions through the Model Context Protocol.619140 npm1-