mediawiki-mcp-server
The MediaWiki MCP Server enables Large Language Model (LLM) clients to interact with any MediaWiki wiki through various API functions:
Read wiki pages: Retrieve page content with options for source/rendered HTML, license, and revision info
View page history: Access revision history in segments with filtering options
Search wiki content: Find specific terms in page titles and content with configurable result limits
Get file information: Access details and download links for files in various formats
Create new pages: Generate wiki pages with specified content and comments (requires OAuth 2.0)
Update existing pages: Replace content in existing pages (requires OAuth 2.0)
Set target wiki: Define which wiki instance to interact with in the current session
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 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. |
|
| 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 label within a schema. |
| Fetch one subject's structured data by ID. |
| List the subjects attached to a wiki page. |
| Create a subject (child or main) 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. |
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 |
|
| 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. 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.
Authentication
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.
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.
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.
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
29 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) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations by explaining the registration process, resource URI pattern, and failure conditions. It does not describe network calls or auth requirements, but annotations already provide read/write and idempotency hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences succinctly convey purpose, mechanism, and failure conditions. No wasted words, front-loaded with the verb 'Registers'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple registration tool with one parameter, the description covers key aspects. Lack of output schema is compensated by explaining the resulting resource URI. Minor: no mention of return format or side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description does not need to add much. It reinforces the parameter purpose but does not add new meaning beyond the schema's 'Any URL from the target wiki'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the tool's function: registering a new wiki by fetching its sitename and API configuration from any URL. It distinguishes itself from siblings like 'remove-wiki' and 'list-wikis' by focusing on addition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use (register a wiki) and conditions for failure (non-MediaWiki URL, duplicate key). However, it does not explicitly mention when not to use or compare with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, the description discloses concrete behavioral details: diff output truncates at 75,000 bytes with a completion marker, nonexistent titles/revision IDs produce errors, and includeDiff=false changes the response to just a change flag, revision metadata, and size delta. These details are not present in annotations and materially affect how an agent should call the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, each carrying a distinct piece of information: core result, side types and constraints, alternative, and truncation/mode behavior. The most important information is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 8 parameters, no output schema, and no required fields, yet the description covers accepted input forms, invalid combinations, error behavior, response size limits, and the alternative response mode. It also points to get-page for full text, making the description sufficient for correct invocation even without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the schema already documents each parameter, so the baseline is 3. The description adds combinatorial semantics by explaining that each side can be specified as revision ID, page title, or wikitext but text-vs-text is invalid, and clarifies the behavioral impact of includeDiff=false. This elevates it above schema-only documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names the exact operation (returns changes between two versions) and resource (wiki page), and qualifies it as a 'compact text diff'. It also distinguishes itself from get-page by noting that only changes are transmitted, so an agent can select it over the full-text sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes agents needing full text to get-page instead, and outlines when to switch includeDiff=false for a cheap change-detection request. It also states an important exclusion (text-vs-text is rejected) and gives guidance on avoiding truncation via a narrower revision range or includeDiff=false.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. 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. | |
| 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful operational behavior beyond the annotations: it discloses that the call fails on duplicate titles, describes the returned identifiers, explains the contentModel fallback to namespace default, and suggests chunked appends for large content. The annotations already cover readOnly, destructive, and idempotent hints, and the description does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each carrying distinct information: action and return values, duplicate failure and alternative, contentModel semantics, and large-page chaining. It is compact and front-loaded with the core outcome, though slightly longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the absence of an output schema, the description specifies the returned fields and the key error condition. With full parameter documentation in the schema and the explicit pointer to update-page for existing pages and large-content workflows, the description gives an agent everything needed to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3, but the description adds useful meaning to contentModel by giving examples ('javascript, css') and clarifying the namespace-default behavior. It also ties source to the contentModel format, which slightly exceeds what the schema alone states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-object pair ('Creates a new wiki page') and immediately states the return values: title, page ID, and first revision ID. It also distinguishes itself from the sibling tool by saying 'for existing pages, use update-page', so an agent can tell this apart from update-page, move-page, delete-page, or undelete-page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when not to use the tool: 'Fails if a page with the given title already exists; for existing pages, use update-page.' It also gives a concrete pattern for large pages by pairing create-page with chained update-page(operation='append') calls, providing clear guidance on when and how to use it versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint, idempotentHint, readOnlyHint), description adds soft delete behavior, retention of history, restoration via undelete-page, and admin purge. It also notes permission requirements and failure conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action, and every sentence adds value. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given good schema and annotations, description covers soft delete, restoration, failure conditions, and return value. No output schema is needed since the return is simply stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description does not add additional meaning beyond the schema; it only mentions returning the deleted title, which is output behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool removes a wiki page from public view and returns the deleted title. The verb 'Removes' and resource 'wiki page' are explicit. The description distinguishes from sibling 'undelete-page' by mentioning restoration capability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context that it's a soft delete and indicates failure conditions (page not exist, lacking permission). However, it does not explicitly mention when to use alternatives, such as for deletion vs. moving or updating.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations by noting the 500-member cap, pagination with continueFrom, and that member type is omitted for ordinary pages. Annotations already indicate read-only/idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately sized and front-loaded with the main purpose. It packs filtering and pagination info efficiently, though could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately covers returned fields, behavior (type omission), filtering, and pagination. Lacks error details, but not a major gap for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description clarifies the types enum (page, file, subcat) and explains the opaque cursor and category prefix handling, adding modest value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists members of a category, specifying returned fields (page ID, namespace ID, wiki page title). It distinguishes from sibling tools like get-page, search-page, etc., which operate on pages or search, not category membership.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on optional filters (by member type or namespace ID) and pagination with continueFrom. Does not explicitly mention when not to use or compare to alternatives, but the context of siblings makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive. Description adds behavioral detail: automatic 'File:' prefix addition. No contradictions. Does not cover rate limits or error behavior, but reasonable given annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with primary functionality. Second sentence adds a useful caveat. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With two parameters, rich annotations, and no output schema, the description adequately covers functionality. It could mention error handling for missing files, but overall sufficient for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions. Description adds extra context: auto-prefix for title parameter and clarification of wiki parameter as a key from mcp://wikis/ resources. This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it returns metadata and download URLs for a file. Specifies the resource (file) and verb (returns). Distinguishes from sibling get-file-data by including download URLs and auto-prefix behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on what the tool does but no explicit guidance on when to use it over alternatives, such as get-file-data. No when-not-to-use or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, non-destructive. The description adds key behavioral details: returns scaled rendition based on width, errors for non-rasterizable file types, clamp on width above 1568, and format option affecting token cost. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise but comprehensive, front-loading the core purpose, then detailing behavior and alternatives. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, no output schema), the description covers purpose, use cases, return format (inline content block), error conditions, and alternatives. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 4 parameters. The description adds extra context for width (quality knob, defaults, clamping) and format (image vs text, token implications), providing value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a wiki file server-side and returns the image inline as a content block, specifically for sandboxed clients needing visual analysis. It also distinguishes from the sibling get-file by noting it errors for non-rasterizable files and directing users to get-file for those cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool (for image delivery to model when client cannot reach wiki host) and when not to (for audio, video, binaries, metadata, or download URL), providing the alternative tool get-file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint. The description adds behavioral details like pagination limit (500) and redirect behavior. No contradictions. Slight room for more on open world implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and front-loaded. Key purpose first, then parameter behavior, then sibling alternatives. Every sentence adds value, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters and no output schema, the description covers core behavior, parameter usage, pagination, and differentiation from siblings. It provides sufficient information for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds context beyond schema, like 'one relationship per call' for type and 'also return the pages that link through it' for expandRedirects. Improves understanding without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Lists pages that reference a target wiki page' with specific verb and resource. It details the returned fields and distinguishes from siblings by mentioning alternatives for category members and full-text search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when not to use it: 'For members of a category, use get-category-members; for full-text content search, use search-page.' It also explains when to use different 'type' values and pagination with continueFrom.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior, but the description adds significant behavioral detail: error on nonexistent title, truncation at 75000 bytes with a marker, and the ability to narrow to a section. This exceeds the annotation information without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but efficiently organized: it leads with the core function, then explains parameters and alternatives in logical order. Every sentence adds useful information for the agent, with no meaningless fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple content types, metadata, truncation, sections, and sibling alternatives), the description covers all essential aspects: error behavior, truncation mechanics, follow-up calls, and when to use sibling tools. There is no output schema, but the description gives enough information about what the agent will receive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all 5 parameters, but the description adds valuable semantic context: explains that metadata=true retrieves revision ID for edit-conflict detection, page size, and section outline; content='none' fetches only metadata; section=N narrows content. This goes beyond the schema's basic parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb 'Returns' and resource 'single wiki page', and explicitly differentiates from get-pages and get-revision by naming them. It also clarifies content types (wikitext, HTML, metadata) and error behavior for nonexistent titles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: when to use metadata=true, content='none', section=N, and clearly states 'For more than one page at a time, use get-pages' and 'For a specific historical revision, use get-revision', providing direct alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. Description adds pagination details, return format (segments of 20, boolean flags only when true), and error on missing title. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that front-load purpose and key behavior (pagination, error). Every sentence adds value. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters and no output schema, description covers return fields, pagination behavior, and error case. Does not mention rate limits or authentication, but those may be implied by API context. Adequate for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description adds minimal value beyond schema. Mentions mutual exclusivity of newerThan/olderThan, which is already in schema descriptions. Does not elaborate on parameter format or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns revision metadata (revision ID, timestamp, user, comment, size, minor flag) for a wiki page. Distinguishes from sibling tools like get-revision (single revision) and get-page (page content) by specifying it returns multiple revisions in segments of 20, newest first.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes pagination with olderThan/newerThan parameters and mutual exclusivity. Mentions error behavior when title does not exist. Does not explicitly mention alternatives like get-revision for single revision, but the pagination description guides usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond annotations: the byte budget mechanism, inline reporting of missing pages, order preservation, truncation behavior with a marker, and the requestedTitle nuance. These details are not covered by the annotations (readOnlyHint, idempotentHint, destructiveHint) and greatly help the agent understand response handling. No contradiction with annotations found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: it opens with the core purpose and content mode, then lists typical use cases, then explains the budget behavior, then truncation, and closes with the sibling alternative and a nuance. Every sentence adds essential value without redundancy, achieving high information density without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description explains the return format comprehensively: missing pages reported inline, byte budget truncation with a marker, ordering, and the follow-up call for remaining pages. It also clarifies the difference from get-page and the requestedTitle behavior. These are the crucial details an agent needs to call it correctly and interpret responses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters, including the '0..50' limit for titles and the meaning of content and metadata. The description does not add parameter-specific semantics beyond the schema; it speaks about tool-level behavior (byte budget, response ordering) rather than explaining individual parameters. Per the rubric, baseline 3 is appropriate when the schema covers all parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns multiple wiki pages in one call, specifying the resource (wiki pages) and the action (returns). It explicitly distinguishes itself from get-page by naming the sibling and the condition to use it (single page or HTML output). The purpose is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases: 'Suited to reading a cluster of related pages, diffing a page family, or syncing pages to local storage.' It also gives an explicit exclusion: 'For a single page or HTML output, use get-page.' This gives clear guidance on when to use this tool versus the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds transparency by explaining pagination, filtering, boolean flag behavior, and patrol rights requirements, going beyond annotation-only information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that is clear but could be more structured. It is front-loaded with the main purpose, but the length and density may reduce readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains row contents, filtering, pagination, and rights requirements. It is complete for the tool's complexity and provides necessary context for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, baseline is 3. The description adds meaning by explaining defaults for types, boolean flag behavior (appear only when true), mutual exclusivity of user/excludeUser, and the effect of showPatrolStatus.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns recent change events, newest first, in segments of 50. It specifies what each row includes and distinguishes from the sibling tool get-page-history for single page revision history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains defaults, filtering options, and pagination. It explicitly directs users to get-page-history for single page history, providing clear context for when to use this tool vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds valuable behavioral context: content truncation at 75000 bytes, error on missing revision, and the note that a past revision has no narrower read. These details go beyond annotations and set correct expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no redundancy. The purpose is front-loaded, followed by error and truncation details, then alternative tools. Every sentence adds value and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only revision retrieval tool with high schema coverage and no output schema, the description covers purpose, error cases, truncation, and alternatives. Nothing essential is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter has a description. The tool description does not add per-parameter semantics beyond what the schema provides; it only restates content types and metadata in prose. Since schema carries the burden, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: returns a specific historical revision by revision ID, with content types (source, HTML, or metadata). It distinguishes from get-page (latest revision) and compare-pages (diff). The purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly guides when to use alternatives: 'For the latest revision plus metadata, use get-page with metadata=true' and 'for a large one use compare-pages to see what changed.' Also notes error behavior on non-existent revision. Clear routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the description does not need to restate safety. It adds that includeStatistics toggles additional data, but does not disclose any other behavioral traits like potential response size or error conditions for missing wikis. With good annotation coverage, the description is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that is front-loaded with the main purpose ('Returns key facts about the targeted wiki'). It lists the returned categories concisely and provides a clear action for the boolean parameter. Every sentence earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (simple read-only info retrieval), the description covers what is returned, including the effect of the optional parameter. No output schema is present, but the list of returned items is sufficiently detailed. It might benefit from noting that the response could be large if many extensions are installed, but overall it is complete enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the schema (100% coverage). The description adds specific examples of what includeStatistics returns (page, article, edit counts, etc.), which provides extra context. However, it does not explain the wiki parameter beyond what the schema says, so overall the description adds marginal value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns key facts about a wiki, listing specific categories: general settings, namespace map, extensions, license. It also mentions the optional includeStatistics parameter to get counts. This distinguishes it from sibling tools like get-page or get-pages, which focus on page content rather than site metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to set includeStatistics, but does not explicitly state when to use this tool versus alternatives like get-page or list-wikis. The usage context is implied (for wiki metadata), but lack of explicit guidance on when not to use it or what distinguishes it from similar read tools reduces clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. Beyond that, the description adds behavioral context: the tool reports whether each wiki is currently reachable and which extension-gated tools work on it. This goes beyond merely listing config and helps the agent anticipate dynamic behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the main action ('Lists every configured wiki') and packs the essential details into the remaining text. Every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description is the sole source of return-value information. It enumerates the fields an agent can expect (key, sitename, URL, read-only/default, reachability, extension-tool support) and reinforces its purpose. For a zero-argument tool, this is fully adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the input schema is empty. The description correctly mentions the wiki key as a return value ('pass as the wiki argument to other tools'), not as a parameter, so no parameter semantics are needed. The no-parameter baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it lists every configured wiki. It enumerates the exact fields returned (key, sitename, server URL, read-only/default status, reachability, extension-gated tools) and states the tool's purpose: to discover configured wikis and their keys. This clearly distinguishes it from sibling tools like add-wiki and remove-wiki.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: use this tool to discover configured wikis, their keys, and which extension tools each supports. It also notes that the wiki key is passed as an argument to other tools, which helps an agent know when to call it. However, it does not explicitly mention when not to use it or name alternatives, leaving a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint, readOnlyHint), the description discloses return values, default redirect creation with a right requirement for suppression, and additional permissions for File pages. It provides rich behavioral context without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph. The first sentence summarizes the core action and return values, followed by details on redirect behavior, failure conditions, and permissions. Every sentence adds necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 parameters, no output schema), the description covers key failure modes, return values, and permission constraints. It could explicitly state the response structure, but it adequately supports tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the implications of 'leaveRedirect' (suppressredirect right) and 'ignoreWarnings' (target redirects), and mentions the file-move permission for File pages, which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Renames a wiki page, moving it') and distinguishes it from other page manipulation tools like create-page, update-page, and delete-page. It specifies the resource (wiki page) and the default handling of talk pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when the tool fails (source not found, target exists, permission issues) and details the redirect behavior with permission requirements. It does not explicitly compare against sibling tools, but the purpose is distinct enough for an agent to decide when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the 'Stdio only' constraint beyond annotations. Annotations already mark destructiveHint=true, and description aligns. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences covering purpose, argument behavior, and transport restriction. No extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple logout tool with one optional parameter, the description adequately covers behavior and constraints. No output schema is needed for this action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and parameter description is clear. The tool description echoes the schema content without adding new semantic depth, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States 'Removes stored OAuth tokens.' It specifies behavior with and without the `wiki` argument, clearly distinguishing the two modes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions 'Stdio only', which is a critical usage constraint. It also explains when to use the optional parameter, though it doesn't compare to sibling tools like `oauth-status`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses critical behavior beyond annotations: 'Never returns token values' and specifies return content (wikis, scopes, expiry). Annotations already indicate read-only, idempotent, non-destructive; description adds key detail about secrecy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load purpose and key traits. No wasted words; every phrase adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description sufficiently covers purpose, return format, and a behavioral constraint (token secrecy). No gaps for expected agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline 4 applies. Description does not need to add parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Lists' and identifies resource 'wikis with stored OAuth tokens, their scopes, and expiry'. It distinguishes from sibling 'oauth-logout' by focusing on status rather than logout action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a transport constraint ('Stdio only') but does not explicitly state when to use this tool versus alternatives like oauth-logout. Implicit context from sibling names helps but could be more directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description reinforces this without contradiction. It adds critical behavioral detail beyond annotations: the 75000-byte truncation with a marker, and the recommendation to pass a smaller fragment in a follow-up call to retrieve the rest. This is exactly the kind of operational nuance an agent needs to plan correct calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler. The core purpose and return list are front-loaded, followed by concrete use cases and then a critical behavioral caveat. Every clause earns its place; nothing is redundant or missing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a 4-parameter schema (fully documented) and no output schema, so the description must cover return values and edge behavior. It lists all major return types and the truncation mechanism, and it contextualizes the 'title' parameter's default via schema. For an agent to call this correctly, everything essential is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add anything material about parameter semantics – it mentions truncation behavior but does not explain the 'wikitext' parameter's role beyond what the schema already states. It satisfies the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Renders wikitext through the live wiki without saving'), a clear resource, and a key qualifier that separates it from writing tools like create-page and update-page. It also enumerates outputs (HTML, warnings, categories, etc.), making the tool's function unmistakable and differentiating it from siblings such as get-page or get-revision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence explicitly names the target workflows: 'dry-running a planned edit before create-page or update-page, or previewing standalone wikitext... with no target page.' This tells an agent exactly when to use this tool and when to rely on its siblings, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and idempotent behavior. The description adds valuable context: clearing cached credentials and license metadata, and failure on default wiki. This expands on what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each providing essential information (main action, side effects, failure condition). No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and no output schema, the description covers purpose, behavioral side effects, and a key constraint. It is mostly complete, though it does not describe the return value or success behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'uri'. The description does not add new meaning beyond the schema's description of the URI format. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'removes' and clearly identifies the resource 'wiki from the MCP resources'. It adds unique behaviors like clearing cached credentials and license metadata, and specifies a failure condition for the default wiki, distinguishing it from sibling tools such as 'add-wiki'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly states when to use (when removing a wiki) and provides a precondition (fails if default wiki). However, it lacks explicit guidance on when not to use or comparisons to alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description does not contradict them. Beyond that, it adds substantial behavioral context: the full-text vs title scope, the default of 10 and hard cap of 100 with overflow flagging, and the namespace-scope fallback to content namespaces. This exceeds what the annotations alone convey and there is no annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, each earning its place: purpose+returns, namespace scoping, limit/cap behavior, and sibling routing. The core function is front-loaded and the alternative-tool note is placed last where it reads naturally. The only minor blemish is the awkward phrase 'unless namespaces names the namespace IDs', but it remains intelligible and costs no real clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no output schema, the description compensates by describing the return contract (matching pages with snippet, size, timestamp, namespace). It covers scope, defaults, caps, and the sibling alternative. Given the schema is fully self-documenting for parameter types and the annotations carry the safety profile, nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value on top: it reveals the default limit of 10 not present in the schema, explains the cap-flagging behavior for the limit parameter, and clarifies that omitting namespaces means 'content namespaces' — a semantic the schema alone does not state. It doesn't fully document each parameter, but it meaningfully augments the schema rather than repeating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Searches wiki page titles and page content (full-text) for the provided terms.' It also enumerates what is returned (snippet, size, timestamp, namespace), which makes the purpose concrete and self-contained. It explicitly distinguishes itself from search-page-by-prefix, so an agent can separate the two sibling tools without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: 'For title-prefix lookup (e.g. autocomplete), use search-page-by-prefix.' It also explains when to narrow a query (when matches exceed the cap), how namespace scope is determined, and where to resolve namespaces (get-site-info). This is explicit when-to-use and when-not-to-use guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by specifying that only titles are returned (no snippets/IDs), the limit cap of 500, and that excess matches are flagged. Does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, limit detail, alternative tool. No superfluous words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description hints at the response (flags for excess matches) but doesn't fully detail the return format. However, given the simplicity of the tool (returning titles), it is reasonably complete along with annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3). The description adds the default limit value (10) and indicates that wiki can be given as a key or full URI, providing extra context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns wiki page titles by prefix, distinguishes from full-text search (search-page) by specifying only titles are returned, and notes it's suited for autocomplete. This effectively differentiates it from sibling tools like get-page and search-page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs to search-page for full-text content, implies autocomplete use case. Could mention when to use get-page for exact titles, but current guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and destructiveHint=false. The description adds context about full revision history restoration and failure conditions, disclosing behavior beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words, front-loading the main action and immediately providing key constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters and no output schema, the description covers purpose, prerequisites, failure modes, and return value. Could mention output structure, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add additional parameter details beyond what the schema provides, offering no extra semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'restores' and identifies the resource as a 'previously deleted wiki page', clearly distinguishing it from siblings like delete-page, create-page, and update-page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states prerequisite (page must be in deleted state from delete-page) and failure conditions (no deleted revisions or insufficient permissions). Does not mention alternatives, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it replaces file content (destructive), preserves prior revisions, appears in upload log, and fails if file doesn't exist. This adds valuable behavioral context beyond the annotations (readOnlyHint=false, destructiveHint=true) without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two well-structured paragraphs front-load the core action and return values, then add context, restrictions, and alternatives. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description covers purpose, usage, parameters, behavioral traits, error conditions, and sibling distinctions comprehensively. It is complete for a file revision update tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 4 parameters with descriptions (100% coverage), but the description adds important operational detail about filepath: it must be an absolute path inside a configured upload directory. This supplements schema information meaningfully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it uploads a new revision of an existing file, preserving history, and returns file title and URL. It distinguishes from sibling tools like upload-file (initial upload) and update-file-from-url (remote URL), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use (updating existing file revision) and when not (initial upload use upload-file, for description page use update-page, for remote URL use update-file-from-url). Also details restrictions on filepath, offering clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and not read-only. The description adds that prior revisions are preserved, the upload appears in the upload log, and it only replaces bytes. It also describes the fallback mechanism and failure condition when the file does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with four sentences, front-loading the core action. Every sentence adds value, and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description mentions the return (file title and URL). It covers behavior, failure conditions, and alternatives. Complete for a tool with moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context for the 'title' parameter by stating it fails if no file exists, and implies the 'url' parameter is the source. However, it does not add significant new meaning beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool fetches a file from a URL and uploads it as a new revision of an existing file, preserving history. It distinguishes from sibling tools by specifying it is for updating an existing file (not initial upload) and only replaces file content, not the description page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use (updating an existing file from URL) and when not to (initial upload use upload-file-from-url, editing description page use update-page). It also explains the fallback behavior for wiki-side fetching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 it also 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. 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. | |
| 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=false, and the description adds extensive context: failure conditions (page missing, ambiguous find, oversized target), the refusal of find-replace when no match or multiple matches, the effect of section-scoped replace on subsections, and the edit-conflict rejection behavior. It also explains that resending append/prepend duplicates the delta, aligning with idempotentHint=false. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place, packing operational semantics, failure modes, and safety guarantees without fluff. It front-loads the core purpose, then systematically covers operations, edge cases, and conflict detection, maintaining logical flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 13 parameters, multiple operations, and no output schema, the description covers all operational aspects: return value (revision ID), failure conditions, idempotency caveats, section handling, and conflict detection. It also implicitly addresses parameters like bot and wiki via schema descriptions, leaving no critical gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is 100%, the description adds substantial meaning beyond schema: it explains how operation interacts with parameters, clarifies the 'find' matching rules (exact, whitespace-sensitive, refused on ambiguity), details the 'latestId' requirement rationale, and notes that 'source' for append must start with a newline. This exceeds the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource ('Writes to an existing wiki page') and explicitly contrasts it with create-page for new pages. It also enumerates the distinct operations (find-replace, replace, append, prepend) with clear semantics, making it unambiguous against sibling tools like delete-page, move-page, and create-page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: it tells agents to use create-page for new pages, explains when to prefer find-replace over replace (to avoid rewriting unread content), and clarifies when append vs prepend is appropriate. It also states when latestId is required (section set) and warns about non-idempotency for resending append/prepend.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While description discloses upload log entry and failure conditions, it contradicts the annotation 'idempotentHint=true' because uploading a file that already exists fails, making it non-idempotent. This reduces transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise with no extraneous words. First sentence states purpose and return, then restrictions, then alternatives. Optimal length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers return values, failure conditions, and alternatives. Missing details on default wiki and comment parameter behavior, but overall adequate. Annotation contradiction detracts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 5 parameters, so baseline is 3. Description adds minor value: clarifies filepath must be absolute and title accepts 'File:' prefix or not, but mostly restates schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'uploads', specifies the resource 'file from local disk into wiki's File namespace', and distinguishes from siblings like 'upload-file-from-url' and 'update-file'. It also mentions returns file title and URL.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use (upload local file) and provides alternatives for remote upload or replacement. Also describes restrictions: filepath must be absolute in configured dir, fails if title exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent, non-destructive, non-read-only behavior. The description adds value by disclosing the fallback mechanism, logging appearance, and failure condition on existing titles, providing rich behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with four sentences, each serving a specific purpose: main action, logging, behavior detail, and alternative guidance. Information is front-loaded and no words are wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description mentions the return value (file title and URL). It covers failure mode, fallback behavior, and provides an alternative tool. It could mention authentication or rate limits but is largely complete for an AI to use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described in the schema. The description does not add additional semantics or usage details for individual parameters, so it meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a file from a remote URL and uploads it to the wiki's File namespace, returning the title and URL. It distinguishes itself from the sibling tool 'update-file-from-url' by noting the failure condition for existing files and pointing to the alternative for replacement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (new uploads) and when not to (if file already exists, use update-file-from-url). It also clarifies it works regardless of wiki upload-by-URL settings, providing clear context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, non-destructive. Description adds valuable detail: 'Reports anonymous access rather than failing when the session has no credentials', which is beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, front-loaded with purpose. Each sentence adds value. Could be slightly more concise but well-structured overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 2 parameters, full schema coverage, no output schema, description covers return values and anonymous behavior. Complete for a simple read-only identity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description restates parameter purposes but adds no significant new meaning beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states tool returns identity (username, anonymous status, groups). Verb 'returns' and resource clearly defined. Distinguishes from sibling tools like oauth-status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: confirm attribution before writing, resolve username. Provides alternative for OAuth scopes: 'use oauth-status instead'. Includes guidance on optional parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
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 29 tools
Each tool targets a distinct resource and action, with clear differentiators: file upload vs update vs fetch, local vs URL sources, full-text vs prefix search, page vs revision vs pages. Even similar tools like get-file and get-file-data serve clearly different purposes (metadata/URL vs inline image).
Tool names follow a consistent verb_noun (or verb-object) pattern throughout, e.g., delete-page, get-page-history, upload-file-from-url, create-page. Minor exceptions like whoami and parse-wikitext still fit the verb-object style, and singular/plural usage is consistent per resource (get-page vs get-pages).
With 29 tools, the count exceeds the typical 3-15 range and is in the 'heavy' 16-25 zone or beyond. However, the breadth of wiki operations (page CRUD, file management, search, history, admin, OAuth, multi-wiki) justifies many of them, though some could potentially be consolidated.
The tool surface covers the full lifecycle for pages (create, read, update, delete, undelete, move) and files (upload, update, read, fetch), plus search, history, comparison, parsing, categories, links, recent changes, and site info. Minor gaps like page protection or watchlist management exist but are not essential for common wiki workflows.
Maintenance
Related MCP Connectors
A Model Context Protocol (MCP) server for Selise Blocks Cloud integration
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 gradedqualityFmaintenanceA Model Context Protocol (MCP) server for converting files between different formats5MIT
- AlicenseNot gradedqualityBmaintenanceA generic, modular server for implementing the Model Context Protocol (MCP).50 npm45ISC
- AlicenseNot gradedqualityFmaintenanceModel Context Protocol (MCP) server for Wiki.js with hierarchical documentation & Docker setup46MIT

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.1950 npm1-