Skip to main content
Glama

English | Русский

Yandex Wiki Search MCP

yandex-wiki-search-mcp MCP server PyPI Python CI codecov License Docker

Demo: search a wiki page and summarize it via MCP

Connect Claude, Cursor, Windsurf, or any MCP client to Yandex Wiki: full-text search, pages, comments, attachments, and dynamic tables ("grids") — 33 tools with typed schemas.

An unofficial project — not affiliated with or endorsed by Yandex.

  • 🔍 Full-text search across the entire wiki — the same backend that powers the Wiki web search bar, up to 50 results per query

  • 📄 Full page lifecycle — create, update, append (top / bottom / anchor), clone, delete with a recovery token, comments, file uploads

  • 📊 Dynamic tables (grids) — 11 write tools: rows, columns, cells, copy, sort

  • 🔒 Server-side read-only modeWIKI_READ_ONLY=true simply doesn't register write tools, so the agent can't bypass it

  • 🧩 Typed tool surface — every tool ships input and output JSON schemas plus safety annotations (read-only / destructive / idempotent hints)

  • 🐳 Runs anywhere — stdio for desktop clients, streamable-http + Docker (with optional multi-user OAuth) for teams

Quick start

  1. Get a Yandex OAuth token with Wiki access (official guide) and your organization ID.

  2. Install into your client:

Add to Cursor Install in VS Code Add to LM Studio Install in Claude Desktop

The Claude Desktop badge downloads the .mcpb bundle of the latest release — double-click it and Claude Desktop installs the server, prompting for the token and org ID (uv must be installed).

{
  "mcpServers": {
    "yandex-wiki-search": {
      "command": "uvx",
      "args": ["yandex-wiki-search-mcp"],
      "env": {
        "WIKI_TOKEN": "YOUR_TOKEN",
        "WIKI_ORG_ID": "YOUR_ORG_ID",
        "WIKI_READ_ONLY": "true"
      }
    }
  }
}
claude mcp add yandex-wiki-search \
  -e WIKI_TOKEN=YOUR_TOKEN -e WIKI_ORG_ID=YOUR_ORG_ID -e WIKI_READ_ONLY=true \
  -- uvx yandex-wiki-search-mcp
{
  "mcpServers": {
    "yandex-wiki-search": {
      "command": "docker",
      "args": ["run","--rm","-i",
        "-e","WIKI_TOKEN","-e","WIKI_ORG_ID","-e","WIKI_READ_ONLY=true",
        "ghcr.io/dlbolshov/yandex-wiki-search-mcp:latest"],
      "env": {"WIKI_TOKEN":"YOUR_TOKEN","WIKI_ORG_ID":"YOUR_ORG_ID"}
    }
  }
}
TIP

Start withWIKI_READ_ONLY=true — the server won't even register write tools. Flip it to false once you trust your agent with edits.

  1. Ask your agent something — see below.

The server runs on MCP Python SDK v2. That is invisible to clients — one v2 server answers every protocol revision back to 2024-11-05 as well as the current one, so there is nothing to change on your side and nothing to reinstall.

The only reason to hold back is a shared environment that pins mcp<2 for something else. 1.0.1 is the last release built on the 1.x SDK and stays on PyPI:

pip install "yandex-wiki-search-mcp<1.1"

Related MCP server: mediawiki-mcp-server

What can it do

"Find our onboarding docs and summarize the key steps."

"What do we have on incident response? Open the most relevant page."

"Create a page team/weekly-notes and append today's standup summary."

"Add a row to the on-call rotation grid: alice, next week."

"Upload this PDF to the project page and link it at the bottom."

"Delete the draft page, but keep the recovery token in case I change my mind."

Tools

33 tools. All write tools disappear when WIKI_READ_ONLY=true.

Search & read (10)

Tool

What it does

page_search

Full-text search across the entire Wiki (pages and files), ranked results with a text excerpt each; server-side filters, and cursor paging through ~100 results in the highlight mode (up to 50 in one call otherwise)

page_get

Get a page by page_id or slug (accepts full Wiki URLs too)

page_get_descendants

Traverse a page subtree — one flat list of {id, slug} from all nesting levels; from_root=true walks the whole Wiki; fetch_all drains the cursor in one call

page_get_comments

List page comments (fetch_all supported)

page_get_resources

List page resources (attachments + grids) with server-side title search (fetch_all supported)

page_get_attachments

List page attachments (fetch_all supported)

page_read_attachment

Read an attachment's content straight into the conversation (nothing is saved anywhere) — PNG/JPEG/GIF/WebP as a native image block that vision-capable clients render, text as text (SVG included: it is XML, and an image block a vision API cannot decode fails the host's next call), other binaries as a base64 blob. The format is decided by the file's magic bytes, not by the wire's claim. Capped to protect the model's context window: 128 KiB for text/binary, 2 MiB for images; anything larger is refused with a pointer to page_download_attachment or download_url from page_get_attachments

page_get_grids

List grids attached to a page (fetch_all supported)

grid_get

Get a grid by grid_id with row/column/revision filters

user_get_current

Who am I — username and home_cluster (the caller's personal-section slug)

Pages: write (12)

Tool

What it does

page_create

Create a page

page_update

Update page title and/or full content; set or clear a redirect to another page

page_edit

Edit content by exact-text replacements without resending the whole page; a missing or ambiguous match fails the call before anything is written; writes back with allow_merge so a concurrent edit is merged, not overwritten

page_append_content

Append content to top, bottom, or a named anchor

page_clone

Copy a page to a new slug — the copy gets a new id; children, comments, and history stay with the original; occupied slugs are refused. The API has no true move/rename (details)

page_add_comment

Add a comment or reply in a thread

page_delete_comment

Delete a comment; returns the page's updated comment count

page_delete_attachment

Delete an attachment from a page

page_delete

Delete a page and receive a recovery token

page_recover

Recover a deleted page by recovery token

page_upload_attachment

Upload a local file in chunks and attach it to a page — not registered under OAUTH_ENABLED=true, where "local" would mean the shared server's filesystem

page_download_attachment

Download an attachment to a local file — streamed to disk with no size cap, nothing enters the conversation. Written atomically (.part → fsync → rename), refuses to overwrite unless asked, and lands with the permissions a normal write would give (0666 & ~umask, never executable); replacing a file keeps that file's own mode. The directory fsync that makes the rename itself crash-durable, and the mode inheritance, are POSIX-only. Gated the same way as page_upload_attachment under OAuth

Grids: write (11)

Tool

What it does

grid_create

Create a grid on a page

grid_update

Update grid title and/or default sort

grid_copy

Copy a grid to an existing target page (async operation)

grid_delete

Delete a grid

grid_add_rows

Add rows at a position or after a given row

grid_update_cells

Update individual cells by row + column

grid_delete_rows

Delete rows

grid_move_row

Move a row

grid_add_columns

Add typed columns

grid_delete_columns

Delete columns by slug

grid_move_column

Move a column

Grid specifics:

  • Mutations use optimistic locking — fetch the grid first and pass the latest revision.

  • grid_update.default_sort takes [{"column": "status", "direction": "asc"}] entries; the server converts them to the wire format the API expects.

  • grid_add_columns requires required on every column because the real API validates it.

  • grid_copy returns operation metadata, not a ready copied grid object.

How it compares

Facts verified against the alternatives' docs and published code, July–August 2026; the official hosted server's tool list captured live from mcp.wiki.yandex.net (wiki-mcp-server 1.28.1, 2026-08-11).

yandex-wiki-search-mcp

Yandex's official MCP (hosted)

ya-yandex-wiki-mcp

slartus/mcp-yandex-wiki

ya-wiki-mcp

Full-text search

✅ up to 50 results, server-side filters + highlighting

❌ no search tool

✅ up to 10 results

Pages: create / update / append / delete + recover

✅ all, plus partial edits via text replacement (page_edit)

partial — no append / recover; has partial edits via text replacement

✅ all

partial — no append / recover

partial — no recover

Pages: clone to a new slug

page_clone

Grids: write tools

✅ 11

✅ 12, incl. column update + row pin/color

✅ 11

❌ read-only

✅ 11, incl. clone

Comments, attachment upload

✅ incl. deletion, inline image preview, and download to disk

comments ✅ / upload ❌ (download + preview instead)

Server-side read-only mode

Typed output schemas + tool annotations

❌ tools return plain strings

YFM helpers

✅ syntax cheat sheet resource + yfm_warnings in write tools

✅ Markdown→YFM converter + page-tree cache, prompt templates

Docker / PyPI / MCP Registry

✅ / ✅ / ✅

— hosted service, closed source, nothing to install

✅ / ✅ / ✅

❌ manual install

❌ / ✅ / ❌

Multi-user OAuth for HTTP deployments

❌ per-user token pasted into static headers, no OAuth flow

Also worth knowing:

  • best-doctor/mcp-yandex-wiki (Python) — page create / update plus reads, with a separate -ro read-only entry point; no delete / recover, no grids, no search; PyPI only

  • brekhov-ilya/yandex-wiki-mcp (npm) — pages read / write / move, grids read-only; interactive PKCE token flow with auto-refresh, no full-text search

  • n-r-w/yandex-mcp (Go) — Yandex Tracker + Wiki in one server, read-only by design (5 wiki read tools), no search; auth via IAM tokens from the yc CLI only — Yandex OAuth tokens are not supported

  • bim-ba/ycli (Python) — one toolkit for Tracker + Wiki + Forms: a CLI, a Python SDK, a Claude Code plugin, and an MCP server whose Wiki surface is 42 wiki_* tools (15 read / 27 write, annotated, with a --read-only flag); no full-text search tool, and attachment downloads stay CLI/SDK-only

As of August 2026, full-text search exists only here (up to 50 results) and in slartus (up to 10) — Yandex's own hosted server ships without a search tool — and the combination of search, grid writes, server-side read-only mode, and typed schemas is unique to this project.

This project is a fork of ya-yandex-wiki-mcp and builds on findings from slartus/mcp-yandex-wiki — see Credits.

page_search wraps the POST /v1/search endpoint — the same backend that powers the Wiki web search bar, undocumented until Yandex published its API reference in August 2026. Search first, then open a result with page_get by its slug.

  • Two wire modes. By default: up to 50 results in one call (limit is clamped to 1–50; the API rejects anything else) and no pagination — the response cursors are always null. With highlight=true: pages are hard-capped at 10 results regardless of limit, matches come wrapped in <em>, and cursor (the page number echoed back in next_cursor) walks up to ~100 results. The set ends when results comes back empty or next_cursor is null on a non-empty page — past the end next_cursor keeps counting up over empty pages, so it alone does not mean "more exists".

  • Filters run server-side, before the limit — a filtered search does not lose matches to it: slug_prefix (section filter, deep prefixes like tech-doc/ml are fine), result_type (page/file), authors (page owners by uid/cloud_uiduser_get_current supplies your own, turning "find my pages about X" into two calls), and created_between/modified_between date intervals (both bounds required — the API rejects open ones).

  • Quoted "exact phrase" queries work; page results get absolute https://wiki.yandex.ru/... links, file results get direct download links.

  • content is a ~510-character excerpt, not the page and not a summary: it is cut from wherever the match sits, the query terms need not be inside it, and its line breaks and tabs are the page's own layout (table cells arrive tab-separated) rather than separators between fragments. Pass highlight=true to get matches wrapped in <em> tags. Read the page with page_get before answering from it. Empty for file results.

Traversing the tree

page_get_descendants returns a subtree as one flat list of {id, slug} from every nesting level. Passing from_root=true instead of page_id/slug walks the whole Wiki — the way in when no starting slug is known, so search is not the only entry point. Prefer a section slug when you have one: wikis run to thousands of pages, and fetch_all stops at its ~500-item cap with truncated: true.

More verified API behavior (scopes, 403 semantics, error envelopes, limits): docs/api-notes.md.

Configuration

Variable

Required

Default

Description

WIKI_TOKEN

one of the two

Yandex OAuth token (takes precedence when both are set)

WIKI_IAM_TOKEN

IAM token (Yandex Cloud organizations)

WIKI_ORG_ID

exactly one of the two

Yandex 360 organization ID (X-Org-Id)

WIKI_CLOUD_ORG_ID

Yandex Cloud organization ID (X-Cloud-Org-Id)

WIKI_READ_ONLY

no

false

true disables all write tools server-side

TRANSPORT

no

stdio

stdio | sse | streamable-http

HOST / PORT

no

0.0.0.0 / 8000

HTTP transports only

STATELESS_HTTP / JSON_RESPONSE

no

true / true

streamable-http only: keep no per-session state / answer with JSON instead of SSE

LOG_LEVEL

no

INFO

Logs go to stderr; DEBUG additionally logs Wiki API requests (method, path, status, duration — never headers or bodies)

WIKI_API_BASE_URL

no

https://api.wiki.yandex.net

Wiki API endpoint

WIKI_WEB_BASE_URL

no

https://wiki.yandex.ru

Base for absolute page links in page_search results

WIKI_AUTH_SCHEME

no

OAuth

Authorization header scheme for WIKI_TOKEN (OAuth | Bearer)

WIKI_MAX_RETRIES

no

2

Retries for dropped connections and 429/502/503/504 on read requests; 0 disables them

TOOL_RESULT_TEXT

no

pretty

Text duplicate of structured tool results: pretty (indent=2) | compact (single line, 10-30% off the text block) | none (structured only — check your client renders structuredContent first)

With OAUTH_ENABLED=true the server becomes an OAuth provider: each MCP user authorizes with their own Yandex account, and requests to the Wiki API are made with their personal token. page_upload_attachment and page_download_attachment are not registered in this mode: they read and write files on the machine the server runs on, which is not the caller's machine in a shared deployment.

Variable

Default

Description

OAUTH_ENABLED

false

Enable the OAuth provider

OAUTH_STORE

memory

memory | redis

OAUTH_SERVER_URL

https://oauth.yandex.ru

Yandex OAuth server

OAUTH_USE_SCOPES

true

Request Wiki scopes during authorization

OAUTH_CLIENT_ID / OAUTH_CLIENT_SECRET

Your Yandex OAuth app credentials

OAUTH_CLIENT_SECRET_EXPIRY_SECONDS

2592000 (30 days)

Lifetime of a dynamically registered MCP client. Registration is unauthenticated by protocol design, so without an expiry every registration is kept forever; clients are told the deadline at registration and re-register when it passes. Empty disables it

MCP_SERVER_PUBLIC_URL

Public URL of this server (OAuth callbacks)

OAUTH_ENCRYPTION_KEYS

Comma-separated base64 32-byte keys (required for redis store)

REDIS_ENDPOINT / REDIS_PORT / REDIS_DB / REDIS_PASSWORD / REDIS_POOL_MAX_SIZE

localhost / 6379 / 0 / — / 10

Redis connection

Choosing the organization per user. WIKI_ORG_ID / WIKI_CLOUD_ORG_ID are optional under OAuth, because each request can name its own organization: append ?orgId=... (or ?cloudOrgId=...) to the MCP server URL your client connects to. A query parameter wins over the server-wide setting, so one deployment can serve several organizations. If a request carries neither, the tool call fails with a message pointing at both options — set the environment variable as the default if all your users share one organization.

See .env.example for the full annotated list and compose.yaml for a Redis baseline.

Deployment

flowchart LR
    C["MCP client&lt;br/&gt;Claude / Cursor / Windsurf / VS Code"]
    S["yandex-wiki-search-mcp"]
    W["Yandex Wiki API"]
    R[("Redis&lt;br/&gt;optional OAuth token store")]
    C -- "stdio (local, single user)" --> S
    C -- "streamable-http (+ OAuth, multi-user)" --> S
    S --> W
    S -.-> R

HTTP server via Docker (the MCP endpoint is http://localhost:8000/mcp):

docker run --env-file .env -e TRANSPORT=streamable-http -p 8000:8000 \
  --log-opt max-size=10m --log-opt max-file=3 \
  ghcr.io/dlbolshov/yandex-wiki-search-mcp:latest
NOTE

The server writes no log files of its own — everything goes to stderr, which Docker's defaultjson-file driver stores without a size limit. The --log-opt flags above cap it; drop them only if your daemon already sets a default.

services:
  mcp-wiki:
    image: ghcr.io/dlbolshov/yandex-wiki-search-mcp:latest  # or: build: .
    ports:
      - "8000:8000"
    environment:
      - WIKI_TOKEN=${WIKI_TOKEN}
      - WIKI_ORG_ID=${WIKI_ORG_ID}
      - TRANSPORT=streamable-http
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

For Redis-backed OAuth storage, use the existing compose.yaml as the baseline.

Security

  • Read-only is server-side: with WIKI_READ_ONLY=true write tools are never registered — there is nothing for a confused agent to call.

  • Wiki API does not enforce OAuth scopes (re-verified 2026-08-11, after Yandex documented the scopes — see docs/api-notes.md): a wiki:read token can still write, so use the read-only mode rather than relying on token scopes.

  • Secrets are SecretStr throughout — masked in logs and repr; DEBUG HTTP logging never includes headers or bodies.

  • Deletion is recoverable: page_delete returns a recovery token for page_recover.

  • Unrelated keys in a shared .env are ignored, but a misspelled setting (WIKI_READ_ONL) stops the server instead of silently falling back to a default you did not choose.

Development

uv sync --dev
uv run yandex-wiki-search-mcp   # run locally
uv run pytest                   # tests

Before committing, run the full verification set from CONTRIBUTING.md. How the server is put together — the layers, the code map, testing seams, CI and the release process — is described in docs/architecture.md. Verified API behavior and probe scripts are documented in docs/api-notes.md.

The Wiki API drifts (the search endpoint silently changed contract once already, back when it was undocumented) — scripts/contract_sweep.py re-verifies every client method against a live organization and reports validation mismatches and undeclared keys:

uv run python scripts/contract_sweep.py users/YOU/contract-sweep            # ~30 live checks
uv run python scripts/contract_sweep.py users/YOU/contract-sweep --cleanup  # remove fixtures

The API drift check workflow runs the same sweep weekly when the DRIFT_* repository secrets are configured (instructions in the workflow header); without them it skips quietly.

Credits

This project began as a fork of APonkratov/yandex-wiki-mcp (ya-yandex-wiki-mcp) by Aleksandr Ponkratov, an excellent, well-tested Python MCP server for the Yandex Wiki API, licensed under Apache-2.0. It has since grown its own surface — full-text search, typed input and output schemas across all 33 tools, YFM helpers, cursor draining, multi-user OAuth and a live contract sweep against the API — while the original copyright and license are preserved (see LICENSE and NOTICE).

The idea and key API findings behind full-text search come from slartus/mcp-yandex-wiki (JavaScript, MIT): it was the first to discover the then-undocumented POST /v1/search endpoint (Yandex published a reference for it only in August 2026) and to report that OAuth scopes are not enforced. No code was taken from it — only findings and ideas, independently re-verified against a live organization and extended here.

Trademarks

"Yandex" and "Yandex Wiki" are trademarks of YANDEX LLC. This is an unofficial, community-built project: not affiliated with, sponsored, or endorsed by Yandex — the names are used nominatively, to state which service the server talks to. The logo is an original mark that reproduces neither Yandex Wiki nor MCP branding (design notes).


mcp-name: io.github.dlbolshov/yandex-wiki-search-mcp

Available Tools

33 tools
grid_add_columnsAdd Wiki Grid ColumnsA

Add columns to a Yandex Wiki dynamic table. Fetch the grid first and pass the latest revision. This changes structured data.

ParametersJSON Schema
NameRequiredDescriptionDefault
columnsYesColumns to add. Each object must include title, slug, type, and required.
grid_idYesWiki dynamic table ID.
positionNoOptional zero-based insertion position for new columns.
revisionYesCurrent grid revision for optimistic locking. Fetch the grid first and pass its latest revision.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
revisionNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the tool 'changes structured data,' which is a key behavioral trait not captured by annotations. It also hints at optimistic locking by requiring the latest revision. This adds meaningful context beyond the annotations, though not exhaustive.

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 short sentences, with the main action stated first and no redundant filler. Every sentence earns its place.

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?

The tool has a well-covered schema, annotations, and the description addresses the main concurrency concern (passing the latest revision). While it doesn't describe return values or error cases, the presence of an output schema reduces that burden. It is complete enough for a mutation 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 all parameters are already described. The description adds context about the revision parameter (fetch the grid first), which reinforces its purpose, but does not deeply enhance parameter understanding 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 action: 'Add columns to a Yandex Wiki dynamic table.' This uses a specific verb and resource, and distinguishes it from sibling tools like grid_delete_columns or grid_move_column.

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 explicit workflow context: 'Fetch the grid first and pass the latest revision.' This tells the agent what to do before calling, but does not explicitly name alternatives or exclusions, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grid_add_rowsAdd Wiki Grid RowsA

Add rows to a Yandex Wiki dynamic table. Fetch the grid first and pass the latest revision. This changes structured data.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsYesRows to add. Each row is a mapping of column slug or column ID to a typed cell value.
grid_idYesWiki dynamic table ID.
positionNoOptional zero-based insertion position. Mutually exclusive with after_row_id.
revisionYesCurrent grid revision for optimistic locking. Fetch the grid first and pass its latest revision.
after_row_idNoOptional row ID after which to insert new rows. Mutually exclusive with position.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
revisionNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the caveat 'This changes structured data,' which informs the agent that this is a mutating operation—useful context given the annotations do not include readOnlyHint. However, beyond this, it does not disclose additional behavioral traits such as error handling, conflict behavior, or the effect of optimistic locking failures. The schema already covers the revision mechanism, so the description contributes little extra 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?

The description is two sentences, with the main purpose in the first sentence and a critical prerequisite plus a caution in the second. Every sentence adds value, there is no redundancy, and the structure is front-loaded with the verb and resource. This is a model of conciseness.

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 has 5 parameters, an output schema, and annotations, the description provides the essential context: what the tool does, the necessity of fetching the grid first, and a warning that it changes data. The schema covers parameter detail, so the description does not need to enumerate every field. It is complete enough for a competent agent to invoke the tool correctly, though it could mention error/rejection conditions.

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?

The input schema provides 100% description coverage for all parameters, including details about rows, grid_id, position, revision, and after_row_id. The description does not add meaning beyond the schema—it merely restates the requirement to fetch the latest revision. Therefore, the baseline score of 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 clearly states the tool's function: 'Add rows to a Yandex Wiki dynamic table.' This uses a specific verb ('Add') and resource ('rows', 'Yandex Wiki dynamic table'), and it is clearly distinct from sibling tools like grid_delete_rows or grid_update_cells. The purpose is unambiguous and immediately understandable.

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 provides a clear prerequisite: 'Fetch the grid first and pass the latest revision.' This tells the agent the necessary pre-step and the locking requirement. However, it does not mention when to avoid this tool or how it compares to alternatives beyond the inherent nature of adding rows, so it misses explicit exclusion or alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grid_copyCopy Wiki GridA

Copy a Yandex Wiki dynamic table to an existing target page. This starts an asynchronous operation and returns operation metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoTarget Wiki page slug or full Wiki URL. Provide either page_id or slug.
titleNoOptional title for the copied grid.
grid_idYesWiki dynamic table ID.
page_idNoTarget Wiki page numeric ID. Provide either page_id or slug.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dry_runNo
operationNo
status_urlNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the operation is asynchronous and returns operation metadata, which is valuable beyond the annotations (destructiveHint=false, openWorldHint=false). This tells the agent that immediate results are not returned. However, it does not detail post-completion behavior or error cases.

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, front-loaded with the core purpose, and contains no redundant information. Every word earns its place, making it highly 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 the output schema exists and the operation is relatively simple, the description covers the essential aspects: what is copied, where, and the async nature. It does not mention edge cases or prerequisites beyond 'existing target page', but the schema and output schema fill most gaps.

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?

The schema description coverage is 100%, so the baseline is 3. The description itself adds no parameter-specific details beyond what the schema already provides, but the schema is well-documented with clear explanations for slug, page_id, grid_id, and title.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool copies a Yandex Wiki dynamic table to an existing target page, using the specific verb 'copy' and naming the resource. It does not explicitly name sibling tools, but the action is distinct from create, update, and delete operations.

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 implies usage: copy a dynamic table to an existing page. It does not explicitly state when to prefer this over alternatives, nor does it mention prerequisites such as needing a target page ID or slug. The guidance is minimal but not misleading.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grid_createCreate Wiki GridA

Create a Yandex Wiki dynamic table resource on a page. This changes structured data.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
titleYesGrid title. Must be between 1 and 255 characters.
page_idNoWiki page numeric ID. Provide either page_id or slug.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
pageNo
rowsNo
titleNo
revisionNo
structureNo
attributesNo
created_atNo
template_idNo
rich_text_formatNo
user_permissionsNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include openWorldHint=false and destructiveHint=false but no readOnlyHint, so the description's added statement 'This changes structured data' provides a useful mutation warning. However, it does not elaborate on permissions, whether the operation is reversible, or how it affects the host page, leaving only partial behavioral 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?

The description is extremely concise: two short sentences, front-loaded with the action and resource. The second sentence adds a behavioral warning without redundancy, making every word useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and the parameter schema is fully described, the description does not need to restate those details. However, for a creation tool, it is thin on context such as page requirements ('on a page' is vague), how page_id/slug selection works, or what the resulting grid looks like. It is adequate but not 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?

All three parameters (slug, title, page_id) already have descriptive text in the input schema, giving 100% schema coverage. The description adds no parameter-level meaning beyond what the schema provides, so the baseline score of 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 action ('Create') and a specific resource ('a Yandex Wiki dynamic table resource on a page'), which clearly distinguishes it from sibling tools like grid_update, grid_delete, and grid_get. The title reinforces the same clear intent.

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 phrasing 'Create a Yandex Wiki dynamic table resource' implies the tool is for creating a new grid, but it does not explicitly say when to prefer this over alternatives such as grid_add_rows or grid_update. It also does not mention prerequisites like the need for an existing page.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grid_deleteDelete Wiki GridB
Destructive

Delete a Yandex Wiki dynamic table. This changes structured data and is destructive.

ParametersJSON Schema
NameRequiredDescriptionDefault
grid_idYesWiki dynamic table ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedYes
grid_idYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint: true, and the description merely repeats this by saying 'This changes structured data and is destructive'. It adds no new behavioral context beyond the annotation, such as whether the deletion is irreversible, whether it cascades to rows, or what happens to dependent data.

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 short sentences. The first sentence states the core action, and the second reinforces the destructive nature. No irrelevant information is included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter destructive delete with an output schema, the description is minimally adequate. However, it omits context about the consequences of deletion (e.g., whether all rows are deleted, if there is any recovery path) and does not mention any permissions or prerequisites, which would be valuable for a destructive operation.

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?

The schema fully documents grid_id with a description ('Wiki dynamic table ID'), and schema coverage is 100%. The tool description adds no additional meaning to the parameter, so the baseline score of 3 applies.

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 action 'Delete' and the resource 'Yandex Wiki dynamic table', which is specific and immediately distinguishes it from sibling tools like page_delete or grid_update. The name grid_delete aligns perfectly with the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives such as grid_delete_rows (deleting specific rows) or page_delete (deleting pages). The usage is implied by the name, but the description does not clarify the scope (entire grid vs. part) or mention any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grid_delete_columnsDelete Wiki Grid ColumnsA
Destructive

Delete columns from a Yandex Wiki dynamic table. Fetch the grid first and pass the latest revision. This changes structured data.

ParametersJSON Schema
NameRequiredDescriptionDefault
grid_idYesWiki dynamic table ID.
revisionYesCurrent grid revision for optimistic locking. Fetch the grid first and pass its latest revision.
column_slugsYesColumn slugs to delete from the grid.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
revisionNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true. The description adds valuable context about the need to fetch the latest revision for optimistic locking, and reinforces the destructive nature with 'This changes structured data.' This goes beyond the annotation.

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 the main purpose front-loaded. The warning about changing data is brief and earns its place.

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 output schema and full parameter descriptions, the description covers the essential workflow (fetch first) and safety profile. It lacks explicit mention of irreversibility or failure on stale revision, but is reasonably complete for a destructive operation.

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 each parameter (grid_id, revision, column_slugs) fully described. The description reiterates the revision requirement but does not add semantic meaning beyond what the schema already provides.

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 'Delete columns from a Yandex Wiki dynamic table,' specifying the exact verb and resource. This distinguishes it from sibling tools like grid_add_columns or grid_delete_rows by focusing on columns.

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 a concrete prerequisite: 'Fetch the grid first and pass the latest revision.' This tells the agent the proper workflow before invoking the tool. Does not explicitly name alternatives, but the instruction is actionable and clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grid_delete_rowsDelete Wiki Grid RowsA
Destructive

Delete rows from a Yandex Wiki dynamic table. Fetch the grid first and pass the latest revision. This changes structured data.

ParametersJSON Schema
NameRequiredDescriptionDefault
grid_idYesWiki dynamic table ID.
row_idsYesRow IDs to delete from the grid.
revisionYesCurrent grid revision for optimistic locking. Fetch the grid first and pass its latest revision.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
revisionNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint: true, so the baseline is lower, but the description adds valuable behavioral context: the need to fetch the grid first and pass the latest revision, indicating optimistic locking behavior. The statement 'This changes structured data' reinforces the destructive nature, but the revision requirement is the key extra transparency 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no redundancy: the first sentence states the function, and the second provides a critical prerequisite and consequence. It is front-loaded and every word earns its place.

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 destructive delete tool with annotations and an output schema, the description is nearly complete. It covers the operation, the prerequisite of fetching the grid, and the revision requirement. It could explicitly mention what happens on stale revision, but the schema already explains optimistic locking, and the description is sufficient for an agent with access to structured data.

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 new parameter semantics beyond the schema; it simply restates the revision requirement already described in the schema. The workflow hint (fetch first) is useful but does not provide additional syntax or format details for the 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 action: 'Delete rows from a Yandex Wiki dynamic table.' This is a specific verb+resource pair that distinguishes it from sibling tools like grid_add_rows or grid_delete. The added context about fetching the grid and passing the latest revision further clarifies the tool's exact purpose.

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 context by instructing to 'Fetch the grid first and pass the latest revision,' which is a clear prerequisite for correct use. However, it does not mention alternatives or when not to use this tool, such as distinguishing it from grid_delete (which may delete the entire grid). This is a clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grid_getGet Wiki GridA
Read-only

Get a Yandex Wiki dynamic table by grid ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoOptional sort expression for grid rows.
fieldsNoAdditional grid fields to fetch. Supported values: attributes, user_permissions. Pass them as an array, for example ['attributes'].
filterNoOptional row filter expression for the grid.
grid_idYesWiki dynamic table ID.
revisionNoOptional grid revision for historical reads.
only_colsNoOptional comma-separated list of column slugs to return.
only_rowsNoOptional comma-separated list of row IDs to return.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
pageNo
rowsNo
titleNo
revisionNo
structureNo
attributesNo
created_atNo
template_idNo
rich_text_formatNo
user_permissionsNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds no further behavioral context, such as side effects, limitations, or pagination behavior, but it does not contradict 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 a single, direct sentence with no filler or redundancy. It is appropriately concise for a simple retrieval tool.

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?

Though short, the description is sufficient given that the schema fully documents all parameters and an output schema exists. It could mention the optional filtering/column selection capabilities, but those are already covered by the schema, so the description remains contextually 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%, with all 7 parameters having clear descriptions in the input schema. The tool description itself adds no parameter details beyond mentioning grid_id, so the baseline score of 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 clearly states the action ('Get') and the resource ('Yandex Wiki dynamic table'), and specifies the key identifier (grid ID). It distinguishes the tool from siblings like grid_create, grid_update, or page_get_grids, which are clearly different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as page_get_grids for listing grids or grid_update for modifying one. The intended use is only implied by the verb 'Get' and the resource name, with no explicit exclusions or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grid_move_columnMove Wiki Grid ColumnA
Idempotent

Move a column inside a Yandex Wiki dynamic table. Fetch the grid first and pass the latest revision. This changes structured data.

ParametersJSON Schema
NameRequiredDescriptionDefault
grid_idYesWiki dynamic table ID.
positionYesZero-based target position for the column.
revisionYesCurrent grid revision for optimistic locking. Fetch the grid first and pass its latest revision.
column_slugYesColumn slug to move.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
revisionNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, but the description adds valuable context by stating 'This changes structured data' and requiring the latest revision for optimistic locking. This goes beyond what annotations provide, alerting the agent to potential side effects and the need for a fresh read.

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 three short sentences, front-loaded with the primary action. Every sentence serves a purpose: what it does, a critical prerequisite, and a behavioral warning. 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?

Given the tool has 4 required parameters, an output schema, and annotations, the description provides the key operational detail (fetch grid first, pass revision) and flags that it changes structured data. It is sufficiently complete for an agent to use the tool correctly without further clarification.

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?

The input schema covers all 4 parameters with descriptions, so the baseline is 3. The description reinforces the revision parameter's purpose ('pass the latest revision') but does not add significant new semantics beyond what the schema already 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 clearly states 'Move a column inside a Yandex Wiki dynamic table,' which is a specific verb+resource combination. It distinguishes from sibling tools like grid_move_row (move row) and grid_delete_columns (delete columns) by explicitly naming the column as the target.

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 instruction 'Fetch the grid first and pass the latest revision' provides a clear prerequisite and usage pattern. It does not explicitly mention alternatives or exclusions, but the context of moving a column and the need for a fresh revision is clear enough for an agent to know 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.

grid_move_rowMove Wiki Grid RowA
Idempotent

Move a row inside a Yandex Wiki dynamic table. Fetch the grid first and pass the latest revision. This changes structured data.

ParametersJSON Schema
NameRequiredDescriptionDefault
row_idYesRow ID to move.
grid_idYesWiki dynamic table ID.
positionNoOptional zero-based target position. Mutually exclusive with after_row_id.
revisionYesCurrent grid revision for optimistic locking. Fetch the grid first and pass its latest revision.
after_row_idNoOptional row ID after which the row should be placed. Mutually exclusive with position.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
revisionNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, the description discloses that the operation changes structured data and requires the latest revision for optimistic locking. This adds practical behavioral context without contradicting the annotations. It could further explain consequences of stale revisions, but the current level is solid.

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 exactly two sentences, front-loading the purpose and following with a key usage note. Every word earns its place, with no 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?

With a full input schema, existing output schema, and suitable annotations, the description covers the essential usage context. It could mention the mutual exclusivity of position and after_row_id, but that is already in the schema, so the current level is sufficient.

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 reinforces the revision parameter's purpose but does not add new semantic details beyond the schema's already thorough 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 uses the specific verb 'move' with the resource 'row inside a Yandex Wiki dynamic table', clearly distinguishing it from siblings like grid_move_column. It immediately communicates the tool's core function without ambiguity.

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?

It provides clear usage context by instructing the user to 'Fetch the grid first and pass the latest revision', which is a critical prerequisite. It also notes that the operation changes structured data, implying caution. However, it does not explicitly mention alternatives or when not to use the tool, so it misses the top tier.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grid_updateUpdate Wiki GridA
Idempotent

Update a Yandex Wiki dynamic table. Fetch the grid first and pass the latest revision. This changes structured data.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoNew grid title.
grid_idYesWiki dynamic table ID.
revisionYesCurrent grid revision for optimistic locking. Fetch the grid first and pass its latest revision.
default_sortNoOptional default sort order, for example [{'column': 'status', 'direction': 'asc'}].

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
pageNo
rowsNo
titleNo
revisionNo
structureNo
attributesNo
created_atNo
template_idNo
rich_text_formatNo
user_permissionsNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include idempotentHint=true, but the description adds that the operation 'changes structured data,' which clarifies it is a mutation. It also discloses the revision requirement for safe updates. No contradiction 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the core action. However, the sentence 'This changes structured data' is largely redundant with the verb 'Update' and does not add meaningful new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the prerequisite of fetching the revision but fails to state what aspects of the grid are updated (title, default_sort). Given sibling tools like grid_update_cells exist, this omission could lead to incorrect tool selection. Output schema exists, so return values are not required, but the scope of the update is ambiguous.

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 repeats the revision guidance already present in the schema ('Fetch the grid first and pass its latest revision') and adds no additional parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states 'Update a Yandex Wiki dynamic table' with a clear verb and resource, but does not differentiate from sibling tools like grid_update_cells or grid_add_rows. The input schema clarifies the update targets (title, default_sort), but the description alone is broad.

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 usage context by instructing 'Fetch the grid first and pass the latest revision,' indicating an optimistic-locking prerequisite. Does not explicitly mention alternatives or when-not-to-use, but the fetch instruction is valuable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grid_update_cellsUpdate Wiki Grid CellsA
Idempotent

Update cells in a Yandex Wiki dynamic table. This changes structured data. Each cell patch must include row_id, value, and exactly one of column_id or column_slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
cellsYesCell patches. Each object must include row_id, value, and exactly one of column_id or column_slug.
grid_idYesWiki dynamic table ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
cellsNo
revisionNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide idempotentHint=true but no readOnly/destructive hints. The description adds 'This changes structured data,' signaling mutation, which is useful. It does not, however, describe the effect on existing values (e.g., full replacement) or error behavior. This is acceptable given annotations cover idempotency, but still leaves gaps.

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, ~23 words. It front-loads the action and resource, then immediately states the critical constraint. No filler or redundancy. Every sentence earns its place.

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 mutation that takes an array of cell patches, the description covers the essential purpose and constraint. An output schema exists, so return value explanation is handled. The only minor gap is not mentioning that cells is an array or that multiple patches are allowed, but the schema already defines this.

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 grid_id and cells. The description reiterates the 'exactly one of column_id or column_slug' constraint, which is also present in the schema. It adds no new meaning beyond schema, so 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 opens with 'Update cells in a Yandex Wiki dynamic table,' clearly stating the verb and resource. It distinguishes from sibling tools like grid_update (grid-level) and grid_add_rows (row-level) by specifying 'cells.' The phrase 'This changes structured data' reinforces the mutation scope.

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 clearly indicates when to use it (updating cells) and the required argument structure (row_id, value, exactly one of column_id/column_slug). However, it does not explicitly state exclusions or alternatives, such as using grid_add_rows for inserting rows or grid_update for changing grid settings, so it falls short of a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_add_commentAdd Page CommentB

Add a comment to a Yandex Wiki page.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesComment body.
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
page_idNoWiki page numeric ID. Provide either page_id or slug.
parent_idNoOptional parent comment ID for a reply.
thread_idNoOptional thread ID when replying in an existing thread.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
bodyNo
authorNo
parent_idNo
reactionsNo
thread_idNo
created_atNo
is_deletedNo
inline_textNo
thread_infoNo
resolve_statusNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide destructiveHint=false but no readOnlyHint. The description adds no extra behavioral context beyond the obvious additive nature of 'add'. It doesn't disclose side effects like comment visibility, permission requirements, or what happens if parent_id is provided.

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 a single concise sentence, front-loaded with the action. It is not bloated, though it does closely mirror the title 'Add Page Comment' with the added 'Yandex Wiki' context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a relatively simple write tool, the description plus schema and annotations provide the necessary mechanics. However, it lacks any high-level guidance on how the parameters relate (e.g., 'use parent_id to reply in a thread'), though the schema individually covers this. An output schema exists, so return values need no explanation.

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% and each parameter already has clear descriptions (e.g., 'Provide either page_id or slug', 'Optional parent comment ID'). The tool description adds no additional parameter semantics, so 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 clearly states the action ('Add a comment') and the target ('a Yandex Wiki page'). This distinguishes it from sibling tools like page_get_comments (read) and page_update (modify page content).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no indication of when to use this tool versus alternatives, nor does it mention any exclusions or required prerequisites. For example, it doesn't say 'Use this to add comments, use page_get_comments to read them'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_append_contentAppend Wiki ContentA

Append content to the top, bottom, or anchor of a Yandex Wiki page. Content is Markdown (YFM): plain Markdown renders as-is, but GitHub-specific extensions ('[!NOTE]' alerts, raw HTML) do not — see the wiki-mcp://yfm-cheatsheet resource for YFM equivalents.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
anchorNoAnchor name like '#release-notes'. Overrides location when provided.
contentYesContent block to append.
page_idNoWiki page numeric ID. Provide either page_id or slug.
locationNoTarget location in the page body when anchor is not provided.bottom

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
slugNo
ownerNo
titleNo
contentNo
redirectNo
page_typeNo
attributesNo
created_atNo
breadcrumbsNo
modified_atNo
access_listsNo
yfm_warningsNoMarkup warnings for the written content (the write itself succeeded): parts that will not render as intended on Yandex Wiki. See the wiki-mcp://yfm-cheatsheet resource for fixes.
access_policyNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are minimal (non-destructive, open-world false). The description adds value by disclosing YFM format specifics, warning that GitHub extensions like '[!NOTE]' and raw HTML are not supported, and pointing to a YFM cheatsheet resource. This is meaningful behavioral context beyond the schema and 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 two sentences: the first states the core purpose, the second adds format guidance. No redundant text. Every sentence earns its place, and critical info is front-loaded.

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 the existence of an output schema, the description covers the main operation and content format. It could be more explicit about the mutual exclusivity of slug and page_id (though the schema mentions it). The reference to a YFM resource is helpful. Overall, it is sufficiently complete for a focused append 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%, baseline 3. The description adds significant context for the 'content' parameter by explaining the YFM Markdown format and unsupported extensions. Other parameters (slug, page_id, location, anchor) rely on schema descriptions. Overall, the description enriches one parameter, raising the score above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Append content to the top, bottom, or anchor of a Yandex Wiki page') with a specific verb and resource. However, it does not explicitly differentiate this tool from siblings like page_update or page_edit, which would help an agent decide when to use append versus replacement.

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 implies usage context (appending to an existing page at specific locations) but provides no direct guidance on when to use this tool versus alternatives (e.g., page_update for full content replacement, page_add_comment for comments). It also does not state prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_cloneClone Wiki PageA

Copy a Yandex Wiki page to a new slug and return the copy's id and slug once the operation completes. Copies title and content only: child pages, comments, attachments, and edit history stay with the original, and the copy gets a new page id. Fails when the target slug is already occupied. The Wiki API has no true move/rename; to relocate a page, clone it and delete the original — re-uploading attachments and re-creating grids on the copy if they must follow.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
titleNoOptional title for the copied page.
targetYesSlug for the copy, like 'users/login/project/copy-name'. A full Wiki page URL is also accepted. Must not be occupied by an existing page.
page_idNoWiki page numeric ID. Provide either page_id or slug.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
slugYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It discloses that only title and content are copied, while child pages, comments, attachments, and edit history remain with the original, and that the copy gets a new page id. This adds significant context beyond the annotations (destructiveHint false) about side effects and limitations.

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 yet information-dense, with four sentences covering purpose, copied fields, failure mode, and the move workaround. It is front-loaded with the primary action and contains 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?

Given the presence of an output schema and the extensive behavioral details, the description is fully complete. It covers what is copied, what is not, failure conditions, and how to handle relocation, making it self-sufficient for an AI agent.

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 schema already fully describes all parameters. The description does not add new parameter-specific details beyond the schema; for example, the schema already notes 'Must not be occupied by an existing page' for target. Hence baseline 3.

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 action: 'Copy a Yandex Wiki page to a new slug' and specifies the return value ('return the copy's id and slug'). It distinguishes this from sibling tools like page_create and page_update by focusing on cloning existing content and noting its limitations.

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 relocating pages, stating 'The Wiki API has no true move/rename; to relocate a page, clone it and delete the original.' It also mentions the failure condition on occupied targets, which helps in planning usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_createCreate Wiki PageA

Create a Yandex Wiki page. Content is Markdown (YFM): plain Markdown renders as-is, but GitHub-specific extensions ('[!NOTE]' alerts, raw HTML) do not — see the wiki-mcp://yfm-cheatsheet resource for YFM equivalents.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesWiki page slug like 'users/login/project/page'. A full Wiki page URL is also accepted.
titleYesWiki page title.
contentYesFull page content.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
slugNo
ownerNo
titleNo
contentNo
redirectNo
page_typeNo
attributesNo
created_atNo
breadcrumbsNo
modified_atNo
access_listsNo
yfm_warningsNoMarkup warnings for the written content (the write itself succeeded): parts that will not render as intended on Yandex Wiki. See the wiki-mcp://yfm-cheatsheet resource for fixes.
access_policyNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=false and openWorldHint=false, which the description complements by mentioning non-destructive creation. The description adds value by disclosing the behavioral nuance of content rendering (Markdown limitations and YFM requirements), which goes beyond the annotations. 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?

The description is two sentences long, front-loaded with the core action, and immediately provides actionable detail about content formatting. Every sentence earns its place with no 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 that the tool has only 3 required parameters, a clear input schema, an output schema (not shown but mentioned in signals), and good annotations, the description is complete. It addresses the key nuance (content rendering) that could trip up an AI agent, and the reference to a resource for YFM equivalents is a helpful touch.

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 parameters are already well-documented in the schema. The description adds context about the 'content' parameter (Markdown/YFM format) but does not elaborate on 'slug' or 'title' beyond the schema. Baseline 3 is appropriate given full schema 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 clearly states the action ('Create a Yandex Wiki page') and the resource ('Wiki page'). It distinguishes from siblings like page_update or page_edit by specifying creation. The mention of Markdown (YFM) adds specificity about the content format.

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 implies when to use this tool (to create a new wiki page) and provides a crucial detail about content formatting (YFM vs plain Markdown). However, it does not explicitly state when not to use it or contrast with similar tools like page_clone or page_update, leaving some room for ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_deleteDelete Wiki PageA
Destructive

Delete a Yandex Wiki page and return a recovery token.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
page_idNoWiki page numeric ID. Provide either page_id or slug.

Output Schema

ParametersJSON Schema
NameRequiredDescription
recovery_tokenNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, and the description is consistent. It adds the behavioral detail that a recovery token is returned, which goes beyond the annotation. However, it doesn't elaborate on consequences like deleted comments or descendants, so it adds some but not rich context.

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?

A single sentence that is direct and informative. It highlights the core action and the notable return value without filler. Every word earns its place.

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?

With destructive annotation and an output schema present, the description covers the main purpose and key behavior. The recovery token is mentioned. For a simple deletion tool, this is sufficient.

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%: both slug and page_id have descriptions explaining the either/or requirement. The tool description adds no additional parameter detail, so the baseline 3 applies.

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 ('Delete') and resource ('Yandex Wiki page'), and adds a distinctive outcome ('return a recovery token'). This clearly distinguishes it from sibling tools like page_recover or grid_delete.

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 intended use is obvious: when you want to delete a wiki page. It does not explicitly mention alternatives like page_recover for restoring, but the recovery token hints at reversibility. The context is clear, though not without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_delete_attachmentDelete Page AttachmentA
Destructive

Delete an attachment from a Yandex Wiki page. File ids come from page_get_attachments. Does not touch page content — any file macro referencing the attachment stays behind, broken.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
file_idYesAttachment (file) numeric ID, as listed by page_get_attachments.
page_idNoWiki page numeric ID. Provide either page_id or slug.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedYes
file_idYes
page_idYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true, so the description goes beyond by warning that file macros referencing the attachment will become broken, despite page content being untouched. This adds valuable side-effect context not captured by 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 concise sentences with no wasted words. Every sentence adds value: first states the primary action and source of file IDs, second clarifies what happens to content and macros. Front-loaded with the key action.

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 that annotations declare destructiveHint=true, the description covers the behavioral side-effect (broken macros), and the output schema likely explains return values. The tool is simple with few parameters, and the description is complete enough for safe usage.

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 doesn't need to detail parameters. It mentions file_id indirectly by referencing page_get_attachments, which adds some context, but doesn't explain slug vs page_id ambiguity; 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 ('Delete') and resource ('attachment from a Yandex Wiki page'), clearly distinguishing it from siblings like page_get_attachments (listing) or page_upload_attachment (adding). It also notes the source of file IDs, adding precision.

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 tells the agent to use file IDs from page_get_attachments, providing a prerequisite. It doesn't explicitly say when not to use this tool or name alternatives for similar actions, but the context is clear enough for a destructive attachment operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_delete_commentDelete Page CommentA
Destructive

Delete a comment from a Yandex Wiki page and return the page's updated comment count. Comment ids come from page_get_comments.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
page_idNoWiki page numeric ID. Provide either page_id or slug.
comment_idYesWiki comment numeric ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedYes
page_idYes
comment_idYes
comments_countNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already set destructiveHint=true, so the description doesn't need to repeat that. It adds value by disclosing the return value ('updated comment count'), which is a behavioral trait beyond the annotation. No 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 sentences with no wasted words. Front-loaded with the action and outcome, making it efficient for an agent to parse.

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 a destructive tool with 3 params (1 required), existing output schema, and sibling tools, the description adequately covers the action, return value, and source of required input. Nothing essential is missing.

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%, baseline is 3. The description adds minimal extra meaning: it mentions that comment IDs come from page_get_comments, which is useful context but not a semantic definition 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 action ('Delete a comment') and the specific resource ('from a Yandex Wiki page'), and distinguishes it from siblings like page_add_comment and page_get_comments by specifying the verb and return value.

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 provides a prerequisite ('Comment ids come from page_get_comments') but does not explicitly state when to use this tool vs alternatives, nor does it give conditions or warnings about irreversibility beyond what annotations provide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_download_attachmentDownload Page AttachmentA

Download a Yandex Wiki page attachment to a local file: the bytes stream to disk without a size cap and never enter the conversation — the counterpart to page_read_attachment, for getting the artifact itself (a PDF, an archive, a large export). Writes atomically; refuses to replace an existing file unless overwrite is true. File ids come from page_get_attachments.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
file_idYesAttachment (file) numeric ID, as listed by page_get_attachments.
page_idNoWiki page numeric ID. Provide either page_id or slug.
save_toYesLocal filesystem path (a file, not a directory) to save the attachment to. Missing parent directories are created; '~' expands to the home directory.
overwriteNoWhether an existing file at save_to may be replaced. When false (default), the call fails instead of overwriting.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
file_idYes
page_idYes
mimetypeNo
size_bytesYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only 'openWorldHint: false' in annotations, the description carries the full behavioral burden and handles it well. It discloses atomic writes, refusal to overwrite unless overwrite is true, unbounded byte streaming, and the fact that content never enters the conversation. These are meaningful behavioral details beyond the schema.

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 packs a lot of decision-critical information into two tight sentences. It front-loads the core purpose, then adds the most important behavioral caveats without redundant 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?

For a tool with five parameters, full schema coverage, and an output schema, the description is complete enough. It names the source of file IDs, gives the counterpart alternative, explains overwrite semantics, and covers the side-effecting download behavior. Nothing an agent needs to choose or invoke the tool correctly is missing.

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 parameters adequately. The description repeats that file IDs come from page_get_attachments, which is useful but already present in the file_id schema description. It adds no significant parameter-level meaning beyond what the schema already provides.

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 downloads a Yandex Wiki page attachment to a local file. It also explicitly distinguishes itself from the sibling page_read_attachment as the counterpart for obtaining the artifact itself, so an agent can identify the right tool without inspecting schemas.

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 clear context for when to use the tool: it is for getting the raw artifact bytes, such as a PDF, archive, or large export, and it explicitly names page_read_attachment as the counterpart. It does not spell out hard 'use this instead of X' rules, but the alternative is clearly identified and the artifact-focused purpose is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_editEdit Wiki Page ContentA

Edit a Yandex Wiki page by exact-text replacements, without resending the whole page: reads the current content, applies the replacements in order, and writes the result back with a single update. Each old_text must match the stored YFM markup exactly (copy it from page_get, whitespace included) and occur exactly once unless replace_all is set — a missing or ambiguous match fails the whole call before anything is written. NOTE: the Wiki API has no page revisions, so the read-modify-write is not atomic; allow_merge (on by default) asks Wiki to merge a concurrent edit that landed in between rather than overwrite it. Do NOT blindly retry a call whose result you did not see: a replacement whose new_text contains its own old_text applies again on a repeat. Content is Markdown (YFM): plain Markdown renders as-is, but GitHub-specific extensions ('[!NOTE]' alerts, raw HTML) do not — see the wiki-mcp://yfm-cheatsheet resource for YFM equivalents.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
page_idNoWiki page numeric ID. Provide either page_id or slug.
is_silentNoWhether to suppress notifications when supported by the API.
allow_mergeNoLet Yandex Wiki three-way merge an edit that landed between this tool's read and its write. On by default: the read-modify-write has no revision to lock against, so without it a concurrent edit is overwritten.
replacementsYesReplacements to apply sequentially: each old_text is matched against the content as already edited by the preceding entries.

Output Schema

ParametersJSON Schema
NameRequiredDescription
slugNo
titleNo
page_idYes
yfm_warningsNoMarkup warnings for the written content (the write itself succeeded): parts that will not render as intended on Yandex Wiki. See the wiki-mcp://yfm-cheatsheet resource for fixes.
occurrences_replacedYesTotal occurrences replaced across all entries. Every entry applied — a replacement that did not match fails the whole call before anything is written.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses multiple critical behaviors beyond the minimal annotations (only openWorldHint: false): read-modify-write non-atomicity, allow_merge for concurrent edits, exact matching requirements (including replace_all semantics), failure conditions for missing/ambiguous matches, and YFM content limitations. 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 front-loaded with the core purpose and then incrementally adds necessary details (exact matching, atomicity warning, retry danger, YFM note). Every sentence serves a distinct purpose, and there is no redundancy. It is appropriately sized for a complex mutation tool.

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 (5 params, sequential replacements, non-atomic behavior), the description covers all essential aspects: how it works, failure modes, concurrency handling, content format, and a pointer to a YFM cheatsheet resource. The presence of an output schema (from context signals) means return values need not be explained. No gaps remain for an agent to safely invoke 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% with descriptions for all 5 parameters, setting a baseline of 3. The description adds significant value beyond the schema: it explains that replacements are applied sequentially, that each old_text must match exactly once unless replace_all is set, and that failures abort the entire call. It also clarifies the merge parameter's role in concurrent edits.

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 'Edit a Yandex Wiki page by exact-text replacements, without resending the whole page', which clearly identifies the verb (edit), resource (Wiki page), and method (exact-text replacements). This distinguishes it from sibling tools like page_update (full page rewrite) and page_append_content (appending), as it specifies the targeted, in-place replacement approach.

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 implies usage for small, precise edits (vs. full page resend) and warns against blind retries. However, it does not explicitly list when not to use it or compare directly to siblings like page_update or page_append_content. The context is clear but lacks explicit exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_getGet Wiki PageA
Read-only

Get a Yandex Wiki page by page_id or slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
fieldsNoAdditional page fields to fetch. Supported values: content, attributes, breadcrumbs, redirect, access_policy, access_lists, owner. Pass them as an array, for example ['content', 'breadcrumbs'].
page_idNoWiki page numeric ID. Provide either page_id or slug.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
slugNo
ownerNo
titleNo
contentNo
redirectNo
page_typeNo
attributesNo
created_atNo
breadcrumbsNo
modified_atNo
access_listsNo
access_policyNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, so the read-only nature is known. The description adds the scope (page_id or slug) but does not disclose behavior like default fields returned, pagination, or error handling. It is consistent with annotations, adding minimal context beyond them.

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, focused sentence that conveys the essential purpose without unnecessary words. It is front-loaded with the action and resource, earning a high score for conciseness.

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's simplicity, the rich schema with 100% parameter coverage, and the presence of an output schema, the description is mostly adequate. However, it lacks any usage guidance or context about when to prefer this over sibling getters, which is a minor gap.

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%, with each parameter having a detailed description. The tool description repeats the 'page_id or slug' relationship but adds no additional meaning beyond what the schema already provides, so the baseline of 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 clearly states the tool's function: 'Get a Yandex Wiki page by page_id or slug.' It specifies the verb (get), the resource (Yandex Wiki page), and the scope (by page_id or slug), which distinguishes it from sibling tools like page_get_descendants or page_get_comments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as page_search or page_get_descendants. The description only states what it does, not the conditions or contexts for choosing it over other page-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_get_attachmentsGet Page AttachmentsB
Read-only

Get attachments for a Yandex Wiki page.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
cursorNoOpaque pagination cursor returned by the previous call.
page_idNoWiki page numeric ID. Provide either page_id or slug.
fetch_allNoFollow pagination automatically and return all items in one call (up to ~500). The response then carries truncated=false when the list is complete, or truncated=true with next_cursor to continue.
page_sizeNoPage size for cursor-based endpoints.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
truncatedNo
next_cursorNo
prev_cursorNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond what the annotations already provide (readOnlyHint=true). It does not mention pagination behavior, permission requirements, or that it returns metadata rather than file contents. With annotations already covering the read-only safety profile, the description adds no additional value.

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, concise sentence with no wasted words. It is front-loaded with the verb and resource, making it immediately clear what the tool does. The brevity is appropriate for a simple read-only operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the detailed schema and presence of an output schema, the description is adequate but minimal. It does not mention pagination or the option to use either page_id or slug, though these are covered in the schema. The description could be slightly more complete by noting the list-return nature, but overall it suffices for a straightforward read 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?

The schema provides 100% parameter coverage with detailed descriptions, so the baseline is 3. The description itself mentions no parameters, adding no extra semantic meaning beyond what the schema already documents. This meets the minimum viable level.

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 action ('Get') and resource ('attachments for a Yandex Wiki page'). It distinguishes from sibling tools such as page_get and page_get_resources by specifically targeting attachments, making the tool's 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like page_upload_attachment or page_get_resources. It simply restates the tool's function, leaving usage decisions entirely to the reader. No exclusions or alternative pointers are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_get_commentsGet Page CommentsB
Read-only

Get comments for a Yandex Wiki page.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
cursorNoOpaque pagination cursor returned by the previous call.
page_idNoWiki page numeric ID. Provide either page_id or slug.
fetch_allNoFollow pagination automatically and return all items in one call (up to ~500). The response then carries truncated=false when the list is complete, or truncated=true with next_cursor to continue.
page_sizeNoPage size for cursor-based endpoints.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
truncatedNo
next_cursorNo
prev_cursorNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already signals a safe read operation, so the description doesn't need to restate that. However, it adds no behavioral context beyond the literal action—no mention of pagination, response shape, or any side effects. The bare statement adds minimal value beyond the annotation.

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 a single, front-loaded sentence with no filler words. It is appropriately concise for a simple read endpoint, though it could be slightly more informative without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a rich output schema, complete parameter descriptions, and annotations indicating read-only, the description's brevity is acceptable. However, it lacks any high-level context about pagination or the need to provide a page identifier, which the schema covers indirectly. It is adequate but minimal.

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?

The input schema provides 100% coverage, with each parameter described in detail (e.g., slug/page_id mutually exclusive, cursor for pagination, fetch_all behavior). The description itself adds no parameter explanation, but the schema fully compensates, meeting the baseline of 3.

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 action ('Get') and the resource ('comments for a Yandex Wiki page'). It distinguishes itself from siblings like page_add_comment and page_get by specifying exactly what is retrieved.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It neither mentions exclusions nor describes scenarios where this tool is preferred over siblings like page_get or page_get_resources. The name implies usage, but explicit context is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_get_descendantsGet Page DescendantsA
Read-only

Get the subtree of Yandex Wiki pages under a parent page. Returns descendants from ALL nesting levels as one flat list of {id, slug} items — slugs encode the hierarchy ('/x/y' is nested under '/x'), so the tree can be reconstructed without further calls. Combine with fetch_all=true to map a whole section at once; if the result comes back truncated=true, continue via next_cursor or narrow down by calling this tool on a subsection's slug. Pass from_root=true instead of page_id/slug to enumerate the WHOLE Wiki, top-level pages included — the way to inventory an organization when no starting slug is known. Prefer a section slug when you have one: a full wiki is routinely thousands of pages, so a root walk costs many requests and a large reply, and fetch_all stops at its ~500-item cap with truncated=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
cursorNoOpaque pagination cursor returned by the previous call.
page_idNoWiki page numeric ID. Provide either page_id or slug.
fetch_allNoFollow pagination automatically and return all items in one call (up to ~500). The response then carries truncated=false when the list is complete, or truncated=true with next_cursor to continue.
from_rootNoTraverse the whole Wiki instead of one page's subtree. Mutually exclusive with page_id and slug.
page_sizeNoPage size for cursor-based endpoints.
include_selfNoWhether to include the parent page itself in the subtree. Ignored with from_root=true — the root is not a page.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
truncatedNo
next_cursorNo
prev_cursorNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral detail beyond the readOnlyHint annotation: it explains the flat list format, how slugs encode hierarchy for tree reconstruction, pagination behavior (truncated, next_cursor), and the cost/impact of whole-wiki walks. This transparency enables accurate expectations without contradicting 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy but every sentence adds essential context (output format, pagination, performance tradeoffs, from_root usage). It is information-dense, yet a slight trimming of the final sentence about 'thousands of pages' might improve focus without losing 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 the tool's complexity (7 parameters, pagination, multiple modes), the description covers all key aspects: output structure, hierarchy reconstruction, from_root behavior, pagination continuation, and performance guidance. With an output schema present, the description need not repeat return type details, and it adequately complements the schema.

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?

Although schema coverage is 100%, the description enriches parameter meaning substantially: it explains slug hierarchy encoding, the semantics of from_root (mutually exclusive with page_id/slug), and fetch_all's automatic pagination with a ~500-item cap. These clarifications go well beyond the schema's per-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 clearly states the tool's function: 'Get the subtree of Yandex Wiki pages under a parent page.' It specifies the resource (Yandex Wiki pages) and distinguishes itself from siblings like page_get and page_search by emphasizing hierarchical descendants and the from_root option for whole-wiki enumeration.

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?

Explicit guidance is provided: 'Prefer a section slug when you have one' and 'narrow down by calling this tool on a subsection's slug' directly addresses when to use this vs alternatives. It also instructs on using from_root when no starting slug is known, and warns about fetch_all's ~500-item cap with truncated=true.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_get_gridsGet Page GridsA
Read-only

Get dynamic tables attached to a Yandex Wiki page.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
cursorNoOpaque pagination cursor returned by the previous call.
page_idNoWiki page numeric ID. Provide either page_id or slug.
order_byNoOptional grid sorting field.
fetch_allNoFollow pagination automatically and return all items in one call (up to ~500). The response then carries truncated=false when the list is complete, or truncated=true with next_cursor to continue.
page_sizeNoPage size for page grid list endpoints.
order_directionNoOptional grid sorting direction.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
truncatedNo
next_cursorNo
prev_cursorNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already declares the tool is safe and non-mutating, and the description does not contradict this. The description adds minor context by specifying 'dynamic tables' and 'attached to a page', but it does not disclose pagination behavior, return format, or any operational characteristics beyond what the annotations state. With annotations present, this is acceptable but not rich.

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 sentence that immediately states the core action and resource. There is no redundant information or filler, achieving maximum economy while remaining clear.

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 that an output schema exists and the tool has 7 optional parameters with full documentation, the description does not need to explain return values or parameter details. The one-liner is sufficient for an agent to select the tool correctly. However, it could hint that the result is a list or that pagination is involved, but the schema compensates for this, so the description is almost complete for selection purposes.

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?

The input schema has 100% description coverage, with each parameter (slug, cursor, page_id, order_by, fetch_all, page_size, order_direction) carrying its own description. The tool description adds no additional parameter semantics, so the baseline of 3 is appropriate. The schema already explains the optionality and pagination 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?

The description 'Get dynamic tables attached to a Yandex Wiki page' uses a specific verb ('Get') and resource ('dynamic tables attached to a Yandex Wiki page'), clearly distinguishing it from sibling tools like grid_get (single grid) and page_get (page content). The phrase 'attached to a page' implies a collection operation, 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving grids associated with a page, but it provides no explicit guidance on when to use it over alternatives (e.g., grid_get) or when not to use it. There is no mention of prerequisites like needing a page_id or slug, although the schema covers that. No exclusions or comparative context is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_get_resourcesGet Page ResourcesB
Read-only

Get resources linked to a Yandex Wiki page, including attachments and grids.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
cursorNoOpaque pagination cursor returned by the previous call.
searchNoOptional title search query for resources.
page_idNoWiki page numeric ID. Provide either page_id or slug.
order_byNoOptional resource sorting field.
fetch_allNoFollow pagination automatically and return all items in one call (up to ~500). The response then carries truncated=false when the list is complete, or truncated=true with next_cursor to continue.
page_sizeNoPage size for cursor-based endpoints.
resource_typesNoOptional resource types filter. Supported values: attachment, grid. Pass them as an array, for example ['attachment'].
order_directionNoOptional resource sorting direction.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsNo
truncatedNo
next_cursorNo
prev_cursorNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description's 'Get' is consistent with that (no contradiction). The description adds the scope of the operation ('including attachments and grids') but offers no additional behavioral context such as pagination behavior, permission requirements, or return format. Since the schema covers pagination details, the description adds only minimal value.

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, compact sentence that immediately conveys the tool's purpose without filler. It is front-loaded with the action and resource, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema is rich (all params described, output schema present), but the description itself is minimal and lacks usage context. It does not clarify how this tool relates to sibling resource-specific tools, nor does it mention that it aggregates multiple resource types. An agent would need to infer its role from the name and schema, limiting contextual completeness.

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?

The input schema provides 100% coverage with descriptive text for all 9 parameters (e.g., 'Opaque pagination cursor', 'Optional resource types filter'). The description itself doesn't mention any parameters, so the schema carries the full semantic burden. With complete schema coverage, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('resources linked to a Yandex Wiki page') and mentions the resource types (attachments and grids). However, it does not distinguish this tool from sibling tools like page_get_attachments or page_get_grids, so an agent might not know which to select.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus the alternative resource-specific tools (page_get_attachments, page_get_grids). It doesn't mention that this tool can fetch multiple resource types in one call or any exclusion criteria, leaving the agent without a basis for choosing it over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_read_attachmentRead Page AttachmentA
Read-only

Read a Yandex Wiki page attachment's content into the conversation (nothing is saved anywhere): PNG/JPEG/GIF/WebP images arrive as a native image block — vision-capable clients render and see them — text files (SVG included, it is XML) as text, anything else base64-encoded. Meant for images and text attachments — diagrams, screenshots, configs, CSVs, logs. Refuses non-image content over 128 KiB and images over 2 MiB. Use page_download_attachment to save it locally, or fetch the attachment's download_url from page_get_attachments yourself. page_get_attachments is also where file ids come from.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
file_idYesAttachment (file) numeric ID, as listed by page_get_attachments.
page_idNoWiki page numeric ID. Provide either page_id or slug.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description details content handling (images as native blocks, text as text, else base64) and refusal conditions. This adds substantial transparency about behavior, without contradicting 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is informative but somewhat verbose, with multiple clauses and parentheticals. It is well-structured and front-loaded with the core purpose, but could be trimmed slightly without losing essential details.

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 absence of an output schema, the description adequately explains what the tool returns (content into the conversation) and covers failure modes (size limits). It does not mention error handling for missing files, but that is not strictly required and the description is otherwise 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?

The schema already provides full descriptions for all three parameters (file_id, page_id, slug) with 100% coverage. The tool description does not add extra meaning beyond what the schema states, so it does not improve parameter understanding.

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 'Read' and the resource 'Yandex Wiki page attachment's content', and explicitly differentiates from sibling tools like page_download_attachment by saying to use that for saving locally. It also clarifies that nothing is saved, aligning with the read-only nature.

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 specifies when to use this tool (for images and text within size limits) and when not to (refuses non-image over 128 KiB, images over 2 MiB). It also points to alternatives (page_download_attachment for saving, page_get_attachments for download URL), giving clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_recoverRecover Wiki PageA

Recover a deleted Yandex Wiki page using a recovery token.

ParametersJSON Schema
NameRequiredDescriptionDefault
recovery_tokenYesRecovery token returned by the page_delete tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
slugNo
pages_countNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide destructiveHint:false and openWorldHint:false, but no readOnlyHint. The description adds the requirement of a recovery token, which is useful, but it does not disclose post-recovery behavior, potential side effects, or any restrictions. This is similar to a baseline where the description adds minimal context beyond what the title and schema already convey.

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 sentence that is front-loaded with the main verb and resource. It contains no filler or redundant wording, conveying the core functionality efficiently.

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's simplicity (one parameter, presence of an output schema, and clear prerequisites from the schema), the description is complete enough. It does not need to explain return values because the output schema covers that, and the token origin is already in the schema. Minor gaps like error handling are not essential for this simple 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?

The input schema already documents the sole parameter with 100% coverage, including the fact that the token is returned by page_delete. The tool description does not add any additional semantic information about the parameter, so the baseline score of 3 applies.

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 the specific verb 'Recover' with the resource 'a deleted Yandex Wiki page' and the mechanism 'using a recovery token.' This clearly distinguishes it from sibling tools like page_delete, page_create, or page_update. No ambiguity exists about the tool's function.

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 implies usage when a user has a recovery token obtained from page_delete, which gives clear context. However, it does not explicitly state exclusions or alternatives, so it falls short of a full 5. The phrase 'recovery token' itself signals the prerequisite without further elaboration.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_updateUpdate Wiki PageA
Idempotent

Update an existing Yandex Wiki page: title, content, or a redirect to another page. Content replacement is full-page when content is provided. Content is Markdown (YFM): plain Markdown renders as-is, but GitHub-specific extensions ('[!NOTE]' alerts, raw HTML) do not — see the wiki-mcp://yfm-cheatsheet resource for YFM equivalents.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
titleNoNew page title.
contentNoNew full page content. Replaces the existing body.
page_idNoWiki page numeric ID. Provide either page_id or slug.
is_silentNoWhether to suppress notifications when supported by the API.
allow_mergeNoWhether to allow Yandex Wiki three-way merge on concurrent edits.
clear_redirectNoRemove this page's existing redirect.
redirect_to_page_idNoMake this page redirect to the page with this id. The page keeps its own content; the redirect state reads back via page_get with fields=['redirect'].

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
slugNo
ownerNo
titleNo
contentNo
redirectNo
page_typeNo
attributesNo
created_atNo
breadcrumbsNo
modified_atNo
access_listsNo
yfm_warningsNoMarkup warnings for the written content (the write itself succeeded): parts that will not render as intended on Yandex Wiki. See the wiki-mcp://yfm-cheatsheet resource for fixes.
access_policyNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare idempotentHint=true, which implies the tool is safe to retry. The description adds behavioral details beyond annotations: it explains that content replacement is full-page, describes Markdown rendering limitations (YFM vs GitHub-specific extensions), and provides a reference to a YFM cheatsheet resource. No annotation contradiction exists.

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 and highly efficient. The first sentence front-loads the core purpose and resource, while the second adds critical behavioral nuance (full-page replacement, Markdown compatibility). Every word earns its place—no filler or 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 tool has 8 optional parameters and an output schema (which presumably documents return values), the description covers the essential update behaviors and Markdown caveats. It could be more complete by noting that parameters like allow_merge or is_silent are optional and have default behaviors, but the schema already documents those. The pointer to the YFM cheatsheet resource fills a gap for users unfamiliar with Yandex Markdown.

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 adds minimal value beyond the schema for parameters—it doesn't provide examples, format details, or behavioral notes for parameters like allow_merge or is_silent. It does imply that redirect_to_page_id and clear_redirect relate to redirect behavior, but this is already clear from 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 verb 'Update,' the resource 'an existing Yandex Wiki page,' and specifies the modifiable fields: title, content, or redirect. It distinguishes itself from siblings like 'page_create' (which creates a new page) and 'page_edit' (which might imply a different editing flow), leaving no ambiguity about its purpose.

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 provides useful context such as 'Content replacement is full-page when content is provided,' which guides when to use this tool versus incremental tools like 'page_append_content.' However, it lacks explicit 'when-not-to-use' guidance or alternatives, like mentioning that for adding comments or attachments, other sibling tools (page_add_comment, page_upload_attachment) should be used instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_upload_attachmentUpload Page AttachmentA

Upload a local file to Yandex Wiki and attach it to a page.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoWiki page slug or full Wiki URL. Provide either page_id or slug.
page_idNoWiki page numeric ID. Provide either page_id or slug.
file_pathYesLocal filesystem path to the file that should be uploaded.
append_markupNoWhether to append Wiki file macro markup to the page after uploading the attachment.
append_locationNoWhere to append the generated file macro when append_markup is true.bottom

Output Schema

ParametersJSON Schema
NameRequiredDescription
page_idYes
attachmentsNo
appended_markupNo
appended_contentNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds that the tool attaches the file to a page, but does not disclose nuances like whether append_markup modifies page content or how duplicate filenames are handled. 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 a single, front-loaded sentence that efficiently states the tool's purpose. Every word serves a function, with 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?

Given the full schema coverage, output schema presence, and clear annotations, the description is nearly sufficient. A slightly richer note about side effects (e.g., append_markup triggering page edits) or when to prefer this over other upload mechanisms would make it fully 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?

The input schema provides 100% coverage for all parameters, including descriptions for slug, page_id, file_path, append_markup, and append_location. The description itself adds no parameter-level detail, so the baseline of 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 clearly states the action ('Upload a local file'), the target system ('Yandex Wiki'), and the purpose ('attach it to a page'). It distinguishes this from sibling tools like page_get_attachments (which lists attachments) and page_append_content (which appends content).

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 implies the appropriate use case: when a user needs to upload a local file and attach it to a Wiki page. It does not explicitly name alternatives or provide exclusions, but the context is clear enough to guide tool selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

user_get_currentGet Current UserA
Read-only

Get the calling Yandex Wiki user: username, home_cluster (the caller's personal-section slug, e.g. 'users/' — where 'create it in my section' requests belong), and identity/org ids.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
orgNo
identityNo
usernameNo
home_clusterNoSlug of the caller's personal section, e.g. 'users/<login>' — the parent for pages that belong in 'my' space.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description adds value by detailing the return fields and explaining the meaning of 'home_cluster' (personal-section slug). This contextual elaboration goes beyond the structured annotations, even though it does not cover all possible return value attributes (output schema handles that).

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 sentence (with a parenthetical elaboration) that promptly states the purpose and key outputs. Every word earns its place, and there is no superfluous content.

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 zero parameters and an output schema present, the description sufficiently covers the tool's behavior. It explains the most salient return field (home_cluster) and implies the others. The fact that it does not list every field in detail is acceptable given the output schema's existence.

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, so the description has no parameter documentation burden. Baseline is 4. The description adds meaning to the return values, particularly 'home_cluster', which is valuable beyond the schema's type definition.

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 retrieves the calling Yandex Wiki user and enumerates specific fields (username, home_cluster, identity/org ids). It distinguishes itself from sibling tools, which are all page/grid operations, leaving no ambiguity about what this tool does.

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?

No explicit when-to-use or when-not-to-use guidance is provided. However, since no sibling tools serve a similar user-identification purpose, the usage context is implied: use this to get current user info. The absence of exclusions or alternatives makes it minimally adequate.

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. 1 tool updatev1.5.0
    • Changedpage_search3 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 500,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Page number for paging through results, as echoed in `next_cursor` (pages count from 1). Works only together with highlight=true — without it the backend ignores the cursor, so this tool refuses the combination.",
        +  "title": "Cursor"
        +}
      • changedInput schema / properties / highlight / description
        Previous value: -"Wrap query matches inside `content` excerpts in <em>…</em> tags."New value: +"Wrap query matches inside `content` excerpts in <em>…</em> tags. Also a mode switch, not just markup: it caps every page at 10 results regardless of `limit`, and it is the only mode where `cursor` pages deeper (up to ~100 results)."
      • changedInput schema / properties / limit / description
        Previous value: -"Number of search results to return (1-50). Filters are applied by the search backend before this limit, so filtered searches do not need a larger limit to compensate."New value: +"Number of search results to return (1-50). Filters are applied by the search backend before this limit, so filtered searches do not need a larger limit to compensate. With highlight=true every page is hard-capped at 10 results, and this value only trims below that cap."
  2. 1 tool updatev1.4.0
    • Addedpage_download_attachment
  3. 9 tool updatesv1.3.0
    • Changedpage_append_content1 field changed
      • changedOutput schema / properties / yfm_warnings / description
        Previous value: -"Markup warnings for the submitted content (the write itself succeeded): parts that will not render as intended on Yandex Wiki. See the wiki-mcp://yfm-cheatsheet resource for fixes."New value: +"Markup warnings for the written content (the write itself succeeded): parts that will not render as intended on Yandex Wiki. See the wiki-mcp://yfm-cheatsheet resource for fixes."
    • Changedpage_create1 field changed
      • changedOutput schema / properties / yfm_warnings / description
        Previous value: -"Markup warnings for the submitted content (the write itself succeeded): parts that will not render as intended on Yandex Wiki. See the wiki-mcp://yfm-cheatsheet resource for fixes."New value: +"Markup warnings for the written content (the write itself succeeded): parts that will not render as intended on Yandex Wiki. See the wiki-mcp://yfm-cheatsheet resource for fixes."
    • Addedpage_delete_attachment
    • Addedpage_delete_comment
    • Addedpage_edit
    • Addedpage_read_attachment
    • Changedpage_search9 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "SearchAuthor": {
        +    "description": "Search author filter entry: a user identity, matched against page owner.\n\nDeliberately the same shape as `UserIdentity` — these are the two ends of\none round trip, since the ids come from `user_get_current`. Subclassing\nrather than re-declaring keeps them from drifting when the API grows a\nthird identifier.\n\nThe wire shape is `{uid, cloud_uid}` and either field alone filters\n(verified live 2026-08-18); when both are present the backend matches on\n`uid`. An entry carrying neither is silently ignored by the wire, so it is\nrejected here instead — and a blank string counts as \"neither\": it is\naccepted by the API and answers 200 with zero results, which reads as\n\"this user wrote nothing\" rather than \"you sent an empty id\".",
        +    "properties": {
        +      "cloud_uid": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "description": "Cloud user id — the alternative identifier for Yandex Cloud organizations."
        +      },
        +      "uid": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "description": "User id, e.g. from user_get_current's identity.uid or a page owner."
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "SearchDateInterval": {
        +    "description": "Closed date-time interval for search filters.\n\nThe API requires both bounds: `from` alone is a 400 SEARCH_BAD_REQUEST\n(verified live 2026-08-11), so both fields are required here and the\nschema says so instead of the wire error.",
        +    "properties": {
        +      "from": {
        +        "description": "Interval start, ISO 8601 date-time, e.g. '2026-01-01T00:00:00Z'.",
        +        "type": "string"
        +      },
        +      "to": {
        +        "description": "Interval end, ISO 8601 date-time. The API rejects an open-ended interval, so both bounds are required.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "from",
        +      "to"
        +    ],
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / authors
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "$ref": "#/$defs/SearchAuthor"
        +      },
        +      "minItems": 1,
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Optional server-side filter by page owner: a list of user identities (each with uid or cloud_uid), ORed together. Take your own from user_get_current's identity. Omit it to search every author — an empty list is rejected, because it would silently mean the same thing. An unknown identity simply yields no results.",
        +  "title": "Authors"
        +}
      • addedInput schema / properties / created_between
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/SearchDateInterval"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Optional server-side filter by creation time. Both bounds are required — the API rejects open intervals."
        +}
      • addedInput schema / properties / highlight
        Added value: +{
        +  "default": false,
        +  "description": "Wrap query matches inside `content` excerpts in <em>…</em> tags.",
        +  "title": "Highlight",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Number of search results to return (1-50). Use 50 when combining with the client-side filters (slug_prefix/result_type)."New value: +"Number of search results to return (1-50). Filters are applied by the search backend before this limit, so filtered searches do not need a larger limit to compensate."
      • addedInput schema / properties / modified_between
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/SearchDateInterval"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Optional server-side filter by last-modification time. Both bounds are required — the API rejects open intervals."
        +}
      • changedInput schema / properties / result_type / description
        Previous value: -"Optional client-side filter by result type."New value: +"Optional server-side filter by result type."
      • changedInput schema / properties / slug_prefix / description
        Previous value: -"Optional client-side filter: keep only results whose slug equals this prefix or lies under it as a path segment, e.g. 'tech-doc/ml'."New value: +"Optional server-side section filter: only results whose slug equals this prefix or lies under it, e.g. 'tech-doc/ml'. Deep prefixes are fine. An unknown prefix simply yields no results."
      • changedOutput schema / $defs / SearchResultItem / properties / content / description
        Previous value: -"Rendered text excerpt from the page, capped at ~510 characters. It is NOT the page's content and NOT a summary of it: the excerpt is a window taken from wherever the match is, which on a long page can start thousands of characters in. The query terms are not highlighted and need not appear in the excerpt at all, so never answer from this field — call page_get with the result's slug to read the page. Line breaks and tabs inside it are the source page's own layout (table cells arrive tab-separated), not separators between excerpts. Empty for type='file' results."New value: +"Rendered text excerpt from the page, capped at ~510 characters. It is NOT the page's content and NOT a summary of it: the excerpt is a window taken from wherever the match is, which on a long page can start thousands of characters in. The query terms need not appear in the excerpt at all, and matches are marked with <em>…</em> only when the search was called with highlight=true — so never answer from this field: call page_get with the result's slug to read the page. Line breaks and tabs inside it are the source page's own layout (table cells arrive tab-separated), not separators between excerpts. Empty for type='file' results."
    • Changedpage_update3 fields changed
      • addedInput schema / properties / clear_redirect
        Added value: +{
        +  "default": false,
        +  "description": "Remove this page's existing redirect.",
        +  "title": "Clear Redirect",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / redirect_to_page_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Make this page redirect to the page with this id. The page keeps its own content; the redirect state reads back via page_get with fields=['redirect'].",
        +  "title": "Redirect To Page Id"
        +}
      • changedOutput schema / properties / yfm_warnings / description
        Previous value: -"Markup warnings for the submitted content (the write itself succeeded): parts that will not render as intended on Yandex Wiki. See the wiki-mcp://yfm-cheatsheet resource for fixes."New value: +"Markup warnings for the written content (the write itself succeeded): parts that will not render as intended on Yandex Wiki. See the wiki-mcp://yfm-cheatsheet resource for fixes."
    • Addeduser_get_current
  4. 2 tool updatesv1.2.0
    • Changedpage_get_descendants2 fields changed
      • addedInput schema / properties / from_root
        Added value: +{
        +  "default": false,
        +  "description": "Traverse the whole Wiki instead of one page's subtree. Mutually exclusive with page_id and slug.",
        +  "title": "From Root",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / include_self / description
        Previous value: -"Whether to include the root page itself in the subtree."New value: +"Whether to include the parent page itself in the subtree. Ignored with from_root=true — the root is not a page."
    • Changedpage_search1 field changed
      • addedOutput schema / $defs / SearchResultItem / properties / content / description
        Added value: +"Rendered text excerpt from the page, capped at ~510 characters. It is NOT the page's content and NOT a summary of it: the excerpt is a window taken from wherever the match is, which on a long page can start thousands of characters in. The query terms are not highlighted and need not appear in the excerpt at all, so never answer from this field — call page_get with the result's slug to read the page. Line breaks and tabs inside it are the source page's own layout (table cells arrive tab-separated), not separators between excerpts. Empty for type='file' results."
  5. 29 tool updatesv1.0.1
    • Changedgrid_add_columns10 fields changed
      • removedOutput schema / $defs / WikiGridRow / properties / color / title
        Removed value: -"Color"
      • removedOutput schema / $defs / WikiGridRow / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WikiGridRow / properties / pinned / title
        Removed value: -"Pinned"
      • removedOutput schema / $defs / WikiGridRow / properties / row / title
        Removed value: -"Row"
      • removedOutput schema / $defs / WikiGridRow / title
        Removed value: -"WikiGridRow"
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / description
        Added value: +"Row and column mutations answer with `results` (+ `revision`)."
      • removedOutput schema / properties / results / title
        Removed value: -"Results"
      • removedOutput schema / properties / revision / title
        Removed value: -"Revision"
      • removedOutput schema / title
        Removed value: -"GridMutationResponse"
    • Addedgrid_add_rows
    • Changedgrid_copy8 fields changed
      • removedOutput schema / $defs / GridOperationRef / additionalProperties
        Removed value: -true
      • removedOutput schema / $defs / GridOperationRef / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / GridOperationRef / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / GridOperationRef / title
        Removed value: -"GridOperationRef"
      • removedOutput schema / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / dry_run / title
        Removed value: -"Dry Run"
      • removedOutput schema / properties / status_url / title
        Removed value: -"Status Url"
      • removedOutput schema / title
        Removed value: -"GridOperationResponse"
    • Addedgrid_create
    • Changedgrid_delete5 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / description
        Added value: +"Acknowledgment for `DELETE /grids/{id}`.\n\nThe endpoint answers 204 No Content (documented and verified live), so\nboth fields are filled in client-side: they confirm which grid the\ndeletion was applied to. Any JSON object the API starts sending in the\nfuture still passes through validation, where the contract sweep will\nsee it; a non-object body would be dropped in the client instead."
      • addedOutput schema / properties
        Added value: +{
        +  "deleted": {
        +    "type": "boolean"
        +  },
        +  "grid_id": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "grid_id",
        +  "deleted"
        +]
      • removedOutput schema / title
        Removed value: -"grid_deleteDictOutput"
    • Changedgrid_delete_columns10 fields changed
      • removedOutput schema / $defs / WikiGridRow / properties / color / title
        Removed value: -"Color"
      • removedOutput schema / $defs / WikiGridRow / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WikiGridRow / properties / pinned / title
        Removed value: -"Pinned"
      • removedOutput schema / $defs / WikiGridRow / properties / row / title
        Removed value: -"Row"
      • removedOutput schema / $defs / WikiGridRow / title
        Removed value: -"WikiGridRow"
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / description
        Added value: +"Row and column mutations answer with `results` (+ `revision`)."
      • removedOutput schema / properties / results / title
        Removed value: -"Results"
      • removedOutput schema / properties / revision / title
        Removed value: -"Revision"
      • removedOutput schema / title
        Removed value: -"GridMutationResponse"
    • Changedgrid_delete_rows10 fields changed
      • removedOutput schema / $defs / WikiGridRow / properties / color / title
        Removed value: -"Color"
      • removedOutput schema / $defs / WikiGridRow / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WikiGridRow / properties / pinned / title
        Removed value: -"Pinned"
      • removedOutput schema / $defs / WikiGridRow / properties / row / title
        Removed value: -"Row"
      • removedOutput schema / $defs / WikiGridRow / title
        Removed value: -"WikiGridRow"
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / description
        Added value: +"Row and column mutations answer with `results` (+ `revision`)."
      • removedOutput schema / properties / results / title
        Removed value: -"Results"
      • removedOutput schema / properties / revision / title
        Removed value: -"Revision"
      • removedOutput schema / title
        Removed value: -"GridMutationResponse"
    • Addedgrid_get
    • Addedgrid_move_column
    • Removedgrid_move_columns
    • Addedgrid_move_row
    • Removedgrid_move_rows
    • Addedgrid_update
    • Changedgrid_update_cells7 fields changed
      • removedOutput schema / $defs
        Removed value: -{
        -  "WikiGridRow": {
        -    "additionalProperties": true,
        -    "properties": {
        -      "color": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Color"
        -      },
        -      "id": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Id"
        -      },
        -      "pinned": {
        -        "anyOf": [
        -          {
        -            "type": "boolean"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Pinned"
        -      },
        -      "row": {
        -        "items": {},
        -        "title": "Row",
        -        "type": "array"
        -      }
        -    },
        -    "title": "WikiGridRow",
        -    "type": "object"
        -  }
        -}
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / description
        Added value: +"`POST /grids/{id}/cells` answers with `cells`, not `results`.\n\nIts own model rather than a shared one: `results` has a list default, so\nit is never dropped as empty, and a mutation reply carrying\n`\"results\": []` reads as \"nothing changed\" to an agent checking it."
      • addedOutput schema / properties / cells
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {},
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • removedOutput schema / properties / results
        Removed value: -{
        -  "items": {
        -    "$ref": "#/$defs/WikiGridRow"
        -  },
        -  "title": "Results",
        -  "type": "array"
        -}
      • removedOutput schema / properties / revision / title
        Removed value: -"Revision"
      • removedOutput schema / title
        Removed value: -"GridMutationResponse"
    • Addedpage_add_comment
    • Changedpage_append_content5 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "WikiOwner": {
        +    "description": "Page owner: the API nests the full identity payload under `user`.",
        +    "properties": {
        +      "group": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "user": {
        +        "anyOf": [
        +          {
        +            "$ref": "#/$defs/WikiUser"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "WikiUser": {
        +    "description": "Trimmed user reference — the API sends much more (identity, flags…).",
        +    "properties": {
        +      "display_name": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "id": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "username": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "access_lists": {
        +    "anyOf": [
        +      {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "access_policy": {
        +    "anyOf": [
        +      {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "attributes": {
        +    "anyOf": [
        +      {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "breadcrumbs": {
        +    "anyOf": [
        +      {
        +        "items": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "content": {
        +    "default": null
        +  },
        +  "created_at": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "id": {
        +    "type": "integer"
        +  },
        +  "modified_at": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "owner": {
        +    "anyOf": [
        +      {
        +        "$ref": "#/$defs/WikiOwner"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "page_type": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "redirect": {
        +    "anyOf": [
        +      {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "slug": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "title": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "yfm_warnings": {
        +    "anyOf": [
        +      {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null,
        +    "description": "Markup warnings for the submitted content (the write itself succeeded): parts that will not render as intended on Yandex Wiki. See the wiki-mcp://yfm-cheatsheet resource for fixes."
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "id"
        +]
      • removedOutput schema / title
        Removed value: -"page_append_contentDictOutput"
    • Addedpage_clone
    • Changedpage_create18 fields changed
      • removedInput schema / properties / page_type
        Removed value: -{
        -  "default": "wysiwyg",
        -  "description": "Wiki page type. Prefer 'wysiwyg' unless a different editor type is required.",
        -  "title": "Page Type",
        -  "type": "string"
        -}
      • addedOutput schema / $defs
        Added value: +{
        +  "WikiOwner": {
        +    "description": "Page owner: the API nests the full identity payload under `user`.",
        +    "properties": {
        +      "group": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "user": {
        +        "anyOf": [
        +          {
        +            "$ref": "#/$defs/WikiUser"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "WikiUser": {
        +    "description": "Trimmed user reference — the API sends much more (identity, flags…).",
        +    "properties": {
        +      "display_name": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "id": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "username": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties / access_lists
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / access_policy
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • removedOutput schema / properties / attributes / title
        Removed value: -"Attributes"
      • removedOutput schema / properties / breadcrumbs / title
        Removed value: -"Breadcrumbs"
      • removedOutput schema / properties / content / title
        Removed value: -"Content"
      • removedOutput schema / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / properties / modified_at / title
        Removed value: -"Modified At"
      • addedOutput schema / properties / owner
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/WikiOwner"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • removedOutput schema / properties / page_type / title
        Removed value: -"Page Type"
      • removedOutput schema / properties / redirect / title
        Removed value: -"Redirect"
      • removedOutput schema / properties / slug / title
        Removed value: -"Slug"
      • removedOutput schema / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / properties / yfm_warnings / title
        Removed value: -"Yfm Warnings"
      • removedOutput schema / title
        Removed value: -"PageWriteResponse"
    • Changedpage_delete3 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / recovery_token / title
        Removed value: -"Recovery Token"
      • removedOutput schema / title
        Removed value: -"DeletePageResponse"
    • Addedpage_get
    • Addedpage_get_attachments
    • Addedpage_get_comments
    • Addedpage_get_descendants
    • Addedpage_get_grids
    • Addedpage_get_resources
    • Changedpage_recover5 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / id / title
        Removed value: -"Id"
      • addedOutput schema / properties / pages_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / slug
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • removedOutput schema / title
        Removed value: -"RecoverPageResponse"
    • Addedpage_search
    • Changedpage_update17 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "WikiOwner": {
        +    "description": "Page owner: the API nests the full identity payload under `user`.",
        +    "properties": {
        +      "group": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "user": {
        +        "anyOf": [
        +          {
        +            "$ref": "#/$defs/WikiUser"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "WikiUser": {
        +    "description": "Trimmed user reference — the API sends much more (identity, flags…).",
        +    "properties": {
        +      "display_name": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "id": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "username": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties / access_lists
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / access_policy
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • removedOutput schema / properties / attributes / title
        Removed value: -"Attributes"
      • removedOutput schema / properties / breadcrumbs / title
        Removed value: -"Breadcrumbs"
      • removedOutput schema / properties / content / title
        Removed value: -"Content"
      • removedOutput schema / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / properties / modified_at / title
        Removed value: -"Modified At"
      • addedOutput schema / properties / owner
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/WikiOwner"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • removedOutput schema / properties / page_type / title
        Removed value: -"Page Type"
      • removedOutput schema / properties / redirect / title
        Removed value: -"Redirect"
      • removedOutput schema / properties / slug / title
        Removed value: -"Slug"
      • removedOutput schema / properties / title / title
        Removed value: -"Title"
      • removedOutput schema / properties / yfm_warnings / title
        Removed value: -"Yfm Warnings"
      • removedOutput schema / title
        Removed value: -"PageWriteResponse"
    • Changedpage_upload_attachment21 fields changed
      • removedOutput schema / $defs / WikiAttachment / additionalProperties
        Removed value: -true
      • removedOutput schema / $defs / WikiAttachment / properties / check_status / title
        Removed value: -"Check Status"
      • removedOutput schema / $defs / WikiAttachment / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / $defs / WikiAttachment / properties / description / title
        Removed value: -"Description"
      • removedOutput schema / $defs / WikiAttachment / properties / download_url / title
        Removed value: -"Download Url"
      • removedOutput schema / $defs / WikiAttachment / properties / has_preview / title
        Removed value: -"Has Preview"
      • removedOutput schema / $defs / WikiAttachment / properties / id / title
        Removed value: -"Id"
      • addedOutput schema / $defs / WikiAttachment / properties / is_downloadable
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • removedOutput schema / $defs / WikiAttachment / properties / mimetype / title
        Removed value: -"Mimetype"
      • removedOutput schema / $defs / WikiAttachment / properties / name / title
        Removed value: -"Name"
      • removedOutput schema / $defs / WikiAttachment / properties / size / title
        Removed value: -"Size"
      • changedOutput schema / $defs / WikiAttachment / properties / user / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/WikiUser"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / $defs / WikiAttachment / properties / user / title
        Removed value: -"User"
      • removedOutput schema / $defs / WikiAttachment / title
        Removed value: -"WikiAttachment"
      • addedOutput schema / $defs / WikiUser
        Added value: +{
        +  "description": "Trimmed user reference — the API sends much more (identity, flags…).",
        +  "properties": {
        +    "display_name": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "id": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "username": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    }
        +  },
        +  "type": "object"
        +}
      • removedOutput schema / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / appended_content / title
        Removed value: -"Appended Content"
      • removedOutput schema / properties / appended_markup / title
        Removed value: -"Appended Markup"
      • removedOutput schema / properties / attachments / title
        Removed value: -"Attachments"
      • removedOutput schema / properties / page_id / title
        Removed value: -"Page Id"
      • removedOutput schema / title
        Removed value: -"UploadAttachmentResult"
  6. 12 tool updatesv0.7.0
    • Removedgrid_add_rows
    • Removedgrid_create
    • Removedpage_add_comment
    • Changedpage_create2 fields changed
      • addedOutput schema / properties / yfm_warnings
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Markup warnings for the submitted content (the write itself succeeded): parts that will not render as intended on Yandex Wiki. See the wiki-mcp://yfm-cheatsheet resource for fixes.",
        +  "title": "Yfm Warnings"
        +}
      • changedOutput schema / title
        Previous value: -"WikiPage"New value: +"PageWriteResponse"
    • Removedpage_get
    • Removedpage_get_attachments
    • Removedpage_get_comments
    • Removedpage_get_descendants
    • Removedpage_get_grids
    • Removedpage_get_resources
    • Removedpage_search
    • Changedpage_update2 fields changed
      • addedOutput schema / properties / yfm_warnings
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Markup warnings for the submitted content (the write itself succeeded): parts that will not render as intended on Yandex Wiki. See the wiki-mcp://yfm-cheatsheet resource for fixes.",
        +  "title": "Yfm Warnings"
        +}
      • changedOutput schema / title
        Previous value: -"WikiPage"New value: +"PageWriteResponse"
  7. 6 tool updatesv0.6.0
    • Addedgrid_delete
    • Removedgrid_get
    • Removedgrid_update
    • Addedpage_get_comments
    • Addedpage_get_descendants
    • Addedpage_get_resources
  8. 17 tool updatesv0.6.0
    • Addedgrid_add_columns
    • Addedgrid_add_rows
    • Addedgrid_copy
    • Addedgrid_create
    • Addedgrid_delete_columns
    • Addedgrid_delete_rows
    • Addedgrid_get
    • Addedgrid_move_columns
    • Addedgrid_move_rows
    • Addedgrid_update
    • Addedgrid_update_cells
    • Addedpage_create
    • Addedpage_get
    • Addedpage_get_attachments
    • Addedpage_get_grids
    • Addedpage_search
    • Addedpage_update
  9. 5 tool updatesv0.5.0
    • First observedpage_add_comment
    • First observedpage_append_content
    • First observedpage_delete
    • First observedpage_recover
    • First observedpage_upload_attachment

TDQS

A3.8/5.0

Scored across 33 tools

Disambiguation4/5

Most tools target distinct resources or actions, and the detailed descriptions make choices clear. However, page_get_resources overlaps with page_get_attachments and page_get_grids, and grid_update vs grid_update_cells could be confused at first glance.

Naming Consistency5/5

All tools follow a consistent resource-prefixed snake_case pattern (page_, grid_, user_) with clear verbs and optional objects. Even related mutations like grid_add_rows, grid_delete_rows, and grid_move_column are predictable.

Tool Count2/5

At 33 tools, the surface is well beyond the 16-25 range and feels heavy for an agent to navigate. While the coverage is broad, several operations could likely be consolidated or grouped to reduce cognitive load.

Completeness5/5

The server covers the full page lifecycle, search and hierarchy navigation, comments, attachments, and dynamic tables with CRUD and row/column operations. The only gaps (e.g., move/rename) are explicitly acknowledged with documented workarounds, so agents are not left at dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers