Skip to main content
Glama

MediaWiki MCP Server

NPM Version MIT licensed

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

compare-pages

Diff two versions of a wiki page by revision, title, or supplied wikitext.

get-category-members

List members of a category (up to 500 per call, paginated via continueFrom).

get-file

Fetch a file page.

get-file-data

Fetch a file's image bytes inline (base64) for visual analysis — for clients that can't reach the wiki host. Returns a scaled rendition (set width); non-renderable types (audio, video, binaries) error. For metadata or a download URL, use get-file.

get-links-here

List pages that reference a wiki page — pages that link to it, embed it as a template, or display it as a file (select via type), including pages that reach it through a redirect. Up to 500 per call, paginated via continueFrom.

get-page

Fetch a wiki page.

get-page-history

List recent revisions of a wiki page.

get-pages

Fetch multiple wiki pages in one call (up to 50).

get-recent-changes

List recent change events across the wiki, filterable by timestamp, namespace, user, tag, type, and hide flags (up to 50 per call, paginated via continue).

get-revision

Fetch a specific revision of a page.

get-site-info

Get a wiki's key settings: MediaWiki version, content language, title-case rules, namespaces, installed extensions, license, and (optionally) statistics.

list-wikis

List every configured wiki — its key, sitename, server, whether it is read-only or the default, whether it is reachable, which extension-gated tools work on it, and, for an OAuth-configured wiki, its authorization server. Disabled when fewer than two wikis are configured.

parse-wikitext

Render wikitext to HTML without saving. Returns parse warnings, wikilinks, templates, and external URLs.

search-page

Search wiki page titles and contents (full-text). Searches the wiki's content namespaces unless given other namespace IDs.

search-page-by-prefix

Search page titles by prefix.

whoami

Report the identity the current session is authenticated as on the targeted wiki — username, whether it is anonymous, and group memberships (optionally user rights).

Page writes

Name

Description

Permissions

create-page 🔐

Create a new wiki page.

Create, edit, and move pages

delete-page 🔐

Delete a wiki page.

Delete pages, revisions, and log entries

move-page 🔐

Move (rename) a wiki page.

Create, edit, and move pages

undelete-page 🔐

Undelete a wiki page.

Delete pages, revisions, and log entries

update-file 🔐

Upload a new revision of an existing file from local disk.

Upload, replace, and move files

update-file-from-url 🔐

Upload a new revision of an existing file from a URL.

Upload, replace, and move files

update-page 🔐

Update an existing wiki page: overwrite it, add to it, or rewrite one passage of it.

Edit existing pages

upload-file 🔐

Upload a file to the wiki from local disk.

Upload new files

upload-file-from-url 🔐

Upload a file to the wiki from a URL.

Upload, replace, and move files

Wiki management

Name

Description

add-wiki

Add a wiki as an MCP resource from its URL. Disabled when allowWikiManagement is false.

remove-wiki

Remove a wiki resource. Disabled when allowWikiManagement is false or fewer than two wikis are configured.

OAuth

Name

Description

oauth-logout

Remove stored OAuth tokens. Stdio only.

oauth-status

List stored OAuth tokens with scopes and expiry (no token values). Stdio only.

Extension packs

Each pack's tools register only on wikis where its extension is installed.

NeoWiki

Name

Description

neowiki-list-schemas

List schemas (entity types) and their property counts.

neowiki-get-schema

Get one schema's property definitions, relations, and select options.

neowiki-cypher-query

Run a read-only Cypher query against the knowledge graph.

neowiki-search-subjects

Find subject IDs by label within a schema.

neowiki-get-subject

Fetch one subject's structured data by ID.

neowiki-get-page-subjects

List the subjects attached to a wiki page.

neowiki-create-subject

Create a subject (child or main) on a page. Requires the edit right.

neowiki-update-subject

Replace a subject's label and statements. Requires the edit right.

neowiki-delete-subject

Delete a subject by ID. Requires the edit right.

neowiki-set-main-subject

Set or clear a page's main subject. Requires the edit right.

neowiki-validate-subject

Dry-run validate a proposed subject and return violations.

Semantic MediaWiki

Name

Description

smw-list-properties

List Semantic MediaWiki properties with copy-paste templates for smw-query.

smw-query

Run a Semantic MediaWiki #ask query.

Bucket

Name

Description

bucket-query

Run a Bucket Lua query.

Cargo

Name

Description

cargo-list-tables

List Cargo tables defined on the wiki.

cargo-describe-table

List a Cargo table's fields with their types and list-flags.

cargo-query

Run a Cargo SQL-style query.

Wikibase

Name

Description

wikibase-search-entities

Find items and properties by label or alias.

wikibase-get-entity

Read one entity's terms and statements, with referenced IDs resolved to labels.

wikibase-query

Run a SPARQL query against the wiki's query service. Offered only for a repository whose siteinfo publishes one.

wikibase-edit-entity

Create or change an entity from Wikibase entity JSON. Requires the edit right.

wikibase-add-statement

Add one statement with an item, string, external-id or url value. Requires the edit right.

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-wiki or remove-wiki, the server sends notifications/resources/list_changed so clients refresh.

{
  "contents": [
    {
      "uri": "mcp://wikis/en.wikipedia.org",
      "mimeType": "application/json",
      "text": "{ \"sitename\":\"Wikipedia\",\"server\":\"https://en.wikipedia.org\",\"articlepath\":\"/wiki\",\"scriptpath\":\"/w\",\"private\":false }"
    }
  ]
}

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

CONFIG

Path to your configuration file

config.json

MCP_TRANSPORT

Type of MCP server transport (stdio or http)

stdio

MCP_LOG_LEVEL

Minimum severity for logger output. One of debug, info, notice, warning, error, critical, alert, emergency, or silent.

debug

MCP_CONTENT_MAX_BYTES

Byte cap for the content bodies and result blocks tools return (wikitext, rendered HTML, diffs, statement and row listings), applied once per response. Tune to the target LLM client's tool-response budget.

75000

MCP_FILE_DATA_MAX_BYTES

Hard cap on the base64-encoded size of a get-file-data response. A transport/safety backstop; tune the actual size per call with the tool's width. Over-cap calls error rather than truncate.

1000000

MCP_UPLOAD_MAX_BYTES

Memory cap on the server-side fetch used by upload-file-from-url / update-file-from-url. Files larger than this are handed to the wiki's own copy-upload instead of being buffered by the server. Guards this server's memory, not the wiki's $wgMaxUploadSize.

104857600

MCP_OAUTH_CREDENTIALS_FILE

Override the default credentials store path. Default: ~/.config/mediawiki-mcp/credentials.json (Linux/macOS) or %APPDATA%\mediawiki-mcp\credentials.json (Windows).

unset

MCP_OAUTH_NO_BROWSER

Set to 1 to skip launching a browser during the OAuth flow; the auth URL is logged to stderr instead. Useful in headless environments.

unset

Related MCP server: @profullstack/mcp-server

Configuration

NOTE

Config is only required when interacting with a private wiki or using authenticated tools.

Create a config.json file to configure wiki connections. Use the config.example.json as a starting point.

{
  "defaultWiki": "en.wikipedia.org",
  "wikis": {
    "en.wikipedia.org": {
      "sitename": "Wikipedia",
      "server": "https://en.wikipedia.org",
      "articlepath": "/wiki",
      "scriptpath": "/w"
    }
  }
}

Internal vs public address. The server you configure may be an internal hostname (e.g. http://mediawiki in Docker); URLs handed back to the caller are built from the wiki's public address, so internal hostnames don't leak into links. See docs/configuration.md — per-wiki fields.

For the full field reference, env-var substitution, secret sources, change tags, upload directories, and authentication options, see docs/configuration.md.

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.

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-wiki

The plugin takes an optional configuration file, which points the server at your own wiki. Set it from the prompt when enabling the plugin, or at any time with /plugin configure mediawiki-mcp-server@professional-wiki. A command-line install takes the same value via claude plugin install mediawiki-mcp-server@professional-wiki --config configPath=path/to/config.json.

When installed as a plugin, the tools are namespaced mcp__plugin_mediawiki-mcp-server_mediawiki__<tool>; update any tool allowlists or hooks accordingly.

To configure the server directly instead, see the Claude Code MCP docs. The short version:

claude mcp add mediawiki-mcp-server -- npx -y @professional-wiki/mediawiki-mcp-server@latest
# Environment variables go before the `--`:
claude mcp add mediawiki-mcp-server -e CONFIG=path/to/config.json -- npx -y @professional-wiki/mediawiki-mcp-server@latest

Codex

Add this repository as a plugin marketplace, then install the bundled server:

codex plugin marketplace add ProfessionalWiki/MediaWiki-MCP-Server
codex plugin add mediawiki-mcp-server@professional-wiki

To point the plugin at your own wiki, set CONFIG in the shell you launch Codex from, for example export CONFIG=path/to/config.json. Codex has no per-plugin configuration; if you would rather not set an environment variable, codex mcp add mediawiki --env CONFIG=path/to/config.json -- npx -y @professional-wiki/mediawiki-mcp-server@latest registers the server directly and takes precedence over the plugin's copy.

See the Codex plugins documentation for how to list, update, or remove plugins.

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

Install in VS Code Install in VS Code Insiders Install in 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

~/.cursor/mcp.json, or .cursor/mcp.json per project

mcpServers

VS Code

.vscode/mcp.json per workspace, or the MCP: Open User Configuration command

servers

Devin Desktop (formerly Windsurf)

~/.codeium/windsurf/mcp_config.json

mcpServers

Zed

~/.config/zed/settings.json

context_servers

LM Studio

~/.lmstudio/mcp.json

mcpServers

{
  "mcpServers": {
    "mediawiki-mcp-server": {
      "command": "npx",
      "args": ["-y", "@professional-wiki/mediawiki-mcp-server@latest"],
      "env": {
        "CONFIG": "path/to/config.json"
      }
    }
  }
}

For any other client, npx add-mcp @professional-wiki/mediawiki-mcp-server may work: add-mcp is a community CLI that writes your client's configuration file for you. It sets the launch command only; add CONFIG yourself to point at your own wiki.

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_BIND with MCP_ALLOWED_HOSTS and MCP_ALLOWED_ORIGINS. The HTTP transport binds to 127.0.0.1 by default. When you open it up with MCP_BIND=0.0.0.0, set MCP_ALLOWED_HOSTS to the hostnames your proxy forwards and MCP_ALLOWED_ORIGINS to the browser origins allowed to call the server — these block DNS-rebinding and cross-origin attacks respectively.

  • Uploads are opt-in. upload-file is disabled until you list allowed directories in uploadDirs or MCP_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 like mediawiki.svc) is refused until you list its host in MCP_TRUSTED_HOSTS. See docs/deployment.md — outbound SSRF guard.

Report a vulnerability via GitHub's security advisory form — full policy in SECURITY.md.

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 tools
add-wikiA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiUrlYesAny URL from the target wiki (e.g. https://en.wikipedia.org/wiki/Main_Page)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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-pagesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
toTextNoSupplied wikitext for the "to" side
toTitleNoWiki page title for the "to" side (latest revision is used)
fromTextNoSupplied wikitext for the "from" side
fromTitleNoWiki page title for the "from" side (latest revision is used)
toRevisionNoRevision ID for the "to" side
includeDiffNoInclude the diff body (default true). Set false for a cheap change-detection response.
fromRevisionNoRevision ID for the "from" side

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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-pageA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
botNoMarks 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.
wikiNoWiki 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.
titleYesWiki page title
sourceYesPage content in the format specified by the contentModel parameter
commentNoReason for creating the page
contentModelNoContent model of the new page. If omitted, MediaWiki picks the default for the title's namespace.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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-pageA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
titleYesWiki page title
commentNoReason for deleting the page

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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-membersA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
limitNoMaximum members to return (1..500)
typesNoTypes of members to include
categoryYesCategory name (with or without the "Category:" prefix)
namespacesNoNamespace IDs to filter by
continueFromNoOpaque continuation token from the previous response; omit on first call

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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-fileA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
titleYesFile title (with or without the "File:" prefix)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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-dataA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
titleYesFile title (with or without the "File:" prefix)
widthNoPixel 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.
formatNo'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

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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-pageA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
titleYesWiki page title
contentNoType of content to returnsource
sectionNoSection number (0 = lead; 1..N = heading sections). Narrows content to one section.
metadataNoWhether to include metadata (page ID, revision info, size, section outline) in the response

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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-historyA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
titleYesWiki page title
filterNoChange tag — return only revisions carrying this tag
newerThanNoRevision ID — return revisions newer than this (exclusive). Mutually exclusive with olderThan.
olderThanNoRevision ID — return revisions older than this (exclusive). Mutually exclusive with newerThan.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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-pagesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
titlesYesArray of wiki page titles (1..50)
contentNoType of content to return; "none" returns metadata onlysource
metadataNoWhether to include metadata (page ID, revision info) in the response
followRedirectsNoFollow 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

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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-changesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoChange tag — return only changes carrying this tag
userNoUsername — return only changes by this user. Mutually exclusive with excludeUser.
wikiNoWiki 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.
sinceNoISO 8601 timestamp — only return changes at or after this time
typesNoEvent types to include. Defaults to edit and new (content changes only).
untilNoISO 8601 timestamp — only return changes at or before this time
continueNoContinuation token from a prior call's truncation marker
hideAnonNoOmit edits by anonymous users
hideBotsNoOmit bot-flagged edits
hideMinorNoOmit minor-flagged edits
namespaceNoNamespace IDs to restrict the feed to — e.g. [0, 1] for main and talk
excludeUserNoUsername — exclude changes by this user. Mutually exclusive with user.
hidePatrolledNoOmit patrolled edits. Requires patrol rights.
hideRedirectsNoOmit changes whose target is a redirect
showPatrolStatusNoInclude per-row patrol status; adds an "Unpatrolled: yes" line to unpatrolled rows. Requires patrol rights.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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-revisionA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
contentNoType of content to returnsource
metadataNoWhether to include metadata (revision ID, page ID, page title, user ID, user name, timestamp, comment, size, minor, HTML URL) in the response
revisionIdYesRevision ID

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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-infoA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
includeStatisticsNoAlso return live wiki statistics (page, article, edit, image, user, active-user, and admin counts). Defaults to false.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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-wikisA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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-pageA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
commentNoReason for the move
toTitleYesNew title to move the page to
moveTalkNoAlso move the associated talk page
fromTitleYesCurrent title of the wiki page to move
moveSubpagesNoAlso move subpages, where the namespace allows subpages
leaveRedirectNoLeave a redirect at the old title. Suppressing it requires the suppressredirect right; without that right MediaWiki leaves the redirect regardless.
ignoreWarningsNoProceed past move warnings, e.g. when the target is an existing redirect. Moving over a non-redirect page still fails.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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-logoutA
DestructiveIdempotent

Removes stored OAuth tokens. With no argument, removes all stored tokens; with wiki, removes only that wiki. Stdio only.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki key to log out from. Omit to log out from all wikis.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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-statusA
Read-onlyIdempotent

Lists wikis with stored OAuth tokens, their scopes, and expiry. Stdio only. Never returns token values.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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-wikitextA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
titleNoWiki page title providing context for magic words like {{PAGENAME}}. Defaults to "API".
wikitextYesWikitext to render
applyPreSaveTransformNoApply pre-save transform (expand ~~~~ signatures, {{subst:}}, normalize whitespace). Matches editor "Show preview" behavior.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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-wikiA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesMCP resource URI of the wiki to remove (e.g. mcp://wikis/en.wikipedia.org)

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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-pageA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
limitNoMaximum number of search results to return
queryYesSearch terms
namespacesNoNamespace IDs to search — e.g. [0, 12] for main and help

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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-prefixA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
limitNoMaximum number of results to return
prefixYesWiki page title prefix
namespaceNoNamespace ID to restrict the search to

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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-pageA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
titleYesWiki page title
commentNoReason for undeleting the page

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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-fileA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
titleYesFile title (with or without the "File:" prefix)
commentNoReason for uploading the new revision
filepathYesFile path on the local disk

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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-urlA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL of the file to upload
wikiNoWiki 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.
titleYesFile title (with or without the "File:" prefix)
commentNoReason for uploading the new revision

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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-pageA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
botNoMarks 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.
findNoThe 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.
modeNoDeprecated older spelling of operation='append' and operation='prepend'. Send operation instead.
wikiNoWiki 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.
titleYesWiki page title
sourceNoThe 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.
commentNoSummary of the edit
sectionNoSection 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.
latestIdNoBase 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.
operationNoWhat 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'.
replaceWithNoWhat find becomes. Required when operation is 'find-replace'; an empty string deletes the text find matched.
removeSubsectionsNoConfirms 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.
removeUnreadContentNoConfirms 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

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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-fileA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesWikitext on the file page
wikiNoWiki 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.
titleYesFile title (with or without the "File:" prefix)
commentNoReason for uploading the file
filepathYesFile path on the local disk

TDQS

A4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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-urlA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL of the file to upload
textYesWikitext on the file page
wikiNoWiki 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.
titleYesFile title (with or without the "File:" prefix)
commentNoReason for uploading the file

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

whoamiA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
wikiNoWiki 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.
includeRightsNoAlso return the full list of user rights granted on this wiki (a long list). Defaults to false.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 2 tool updatesv0.18.0
    • Changedsearch-page1 field changed
      • addedInput schema / properties / namespaces
        Added 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"
        +}
    • Changedupdate-page15 fields changed
      • addedInput schema / properties / find
        Added 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"
        +}
      • changedInput schema / properties / latestId / description
        Previous 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."
      • changedInput schema / properties / mode / description
        Previous 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."
      • addedInput schema / properties / operation
        Added 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"
        +}
      • addedInput schema / properties / removeSubsections
        Added 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"
        +}
      • addedInput schema / properties / removeUnreadContent
        Added 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"
        +}
      • addedInput schema / properties / replaceWith
        Added value: +{
        +  "description": "What find becomes. Required when operation is 'find-replace'; an empty string deletes the text find matched.",
        +  "type": "string"
        +}
      • removedInput schema / properties / section / anyOf
        Removed value: -[
        -  {
        -    "maximum": 9007199254740991,
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  {
        -    "const": "new",
        -    "type": "string"
        -  }
        -]
      • changedInput schema / properties / section / description
        Previous 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."
      • addedInput schema / properties / section / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / section / minimum
        Added value: +0
      • addedInput schema / properties / section / type
        Added value: +"integer"
      • removedInput schema / properties / sectionTitle
        Removed value: -{
        -  "description": "Heading for a new section; required when section='new', rejected otherwise.",
        -  "type": "string"
        -}
      • changedInput schema / properties / source / description
        Previous 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."
      • changedInput schema / required
        Previous value: -[
        -  "title",
        -  "source"
        -]New value: +[
        +  "title"
        +]
  2. 29 tool updatesv0.15.0
    • Changedadd-wiki1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedcompare-pages1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedcreate-page1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changeddelete-page1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Addedget-category-members
    • Changedget-file1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget-file-data1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget-links-here1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget-page1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget-page-history1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget-pages1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget-recent-changes1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget-revision1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget-site-info1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedlist-wikis1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedmove-page1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedoauth-logout1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedoauth-status1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedparse-wikitext1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedremove-wiki1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsearch-page1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedsearch-page-by-prefix1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedundelete-page1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate-file1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate-file-from-url1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupdate-page1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupload-file1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedupload-file-from-url1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedwhoami1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  3. 1 tool updatev0.14.0
    • Removedget-category-members
  4. 4 tool updatesv0.12.0
    • Changedcreate-page1 field changed
      • addedInput schema / properties / bot
        Added 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"
        +}
    • Addedget-file-data
    • Changedupdate-page1 field changed
      • addedInput schema / properties / bot
        Added 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"
        +}
    • Addedwhoami
  5. 24 tool updatesv0.10.0
    • Changedcompare-pages1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changedcreate-page1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changeddelete-page1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changedget-category-members1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changedget-file1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Addedget-links-here
    • Changedget-page1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changedget-page-history1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changedget-pages1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changedget-recent-changes1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changedget-revision1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Addedget-site-info
    • Addedlist-wikis
    • Addedmove-page
    • Changedparse-wikitext1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changedsearch-page1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changedsearch-page-by-prefix1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Removedset-wiki
    • Changedundelete-page1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changedupdate-file1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changedupdate-file-from-url1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changedupdate-page1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changedupload-file1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
    • Changedupload-file-from-url1 field changed
      • addedInput schema / properties / wiki
        Added 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"
        +}
  6. 24 tool updatesv1.0.2
    • Addedadd-wiki
    • Addedcompare-pages
    • Addedcreate-page
    • Addeddelete-page
    • Addedget-category-members
    • Addedget-file
    • Addedget-page
    • Addedget-page-history
    • Addedget-pages
    • Addedget-recent-changes
    • Addedget-revision
    • Addedoauth-logout
    • Addedoauth-status
    • Addedparse-wikitext
    • Addedremove-wiki
    • Addedsearch-page
    • Addedsearch-page-by-prefix
    • Addedset-wiki
    • Addedundelete-page
    • Addedupdate-file
    • Addedupdate-file-from-url
    • Addedupdate-page
    • Addedupload-file
    • Addedupload-file-from-url
  7. 16 tool updatesv1.0.1
    • Removedadd-wiki
    • Removedcreate-page
    • Removeddelete-page
    • Removedget-category-members
    • Removedget-file
    • Removedget-page
    • Removedget-page-history
    • Removedget-revision
    • Removedremove-wiki
    • Removedsearch-page
    • Removedsearch-page-by-prefix
    • Removedset-wiki
    • Removedundelete-page
    • Removedupdate-page
    • Removedupload-file
    • Removedupload-file-from-url
  8. 16 tool updatesv1.0.0
    • Addedadd-wiki
    • Changedcreate-page3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / contentModel / default
        Added value: +"wikitext"
      • changedInput schema / properties / contentModel / description
        Previous value: -"Type of content on the page. Defaults to \"wikitext\""New value: +"Type of content on the page"
    • Addeddelete-page
    • Addedget-category-members
    • Changedget-file1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget-page5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / content / default
        Previous value: -"noContent"New value: +"source"
      • changedInput schema / properties / content / description
        Previous value: -"Format of the page content to retrieve"New value: +"Type of content to return"
      • changedInput schema / properties / content / enum
        Previous value: -[
        -  "noContent",
        -  "withSource",
        -  "withHtml"
        -]New value: +[
        +  "source",
        +  "html",
        +  "none"
        +]
      • addedInput schema / properties / metadata
        Added value: +{
        +  "default": false,
        +  "description": "Whether to include metadata (page ID, revision info, license) in the response",
        +  "type": "boolean"
        +}
    • Changedget-page-history9 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / newerThan / description
        Previous value: -"The ID of the newest revision to return"New value: +"Revision ID of the newest revision to return"
      • addedInput schema / properties / newerThan / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / newerThan / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / newerThan / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / olderThan / description
        Previous value: -"The ID of the oldest revision to return"New value: +"Revision ID of the oldest revision to return"
      • addedInput schema / properties / olderThan / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / olderThan / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / olderThan / type
        Previous value: -"number"New value: +"integer"
    • Addedget-revision
    • Addedremove-wiki
    • Changedsearch-page3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of search results to return (1-100)"New value: +"Maximum number of search results to return"
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
    • Addedsearch-page-by-prefix
    • Changedset-wiki4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / uri
        Added value: +{
        +  "description": "MCP resource URI of the wiki to use (e.g. mcp://wikis/en.wikipedia.org)",
        +  "type": "string"
        +}
      • removedInput schema / properties / wikiUrl
        Removed value: -{
        -  "description": "Any URL from the target wiki (e.g. https://en.wikipedia.org/wiki/Main_Page).",
        -  "format": "uri",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "wikiUrl"
        -]New value: +[
        +  "uri"
        +]
    • Addedundelete-page
    • Changedupdate-page5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / latestId / description
        Previous 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"
      • addedInput schema / properties / latestId / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / latestId / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / latestId / type
        Previous value: -"number"New value: +"integer"
    • Addedupload-file
    • Addedupload-file-from-url
  9. 7 tool updates
    • First observedcreate-page
    • First observedget-file
    • First observedget-page
    • First observedget-page-history
    • First observedsearch-page
    • First observedset-wiki
    • First observedupdate-page

TDQS

A4.2/5.0

Scored across 29 tools

Disambiguation5/5

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).

Naming Consistency5/5

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).

Tool Count3/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers