MCP server for Yandex Wiki: full-text search, pages, comments, attachments and dynamic tables. 33 typed tools, server-side read-only mode, Docker-ready.
**English** | Русский
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
Yandex Wiki Search 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 mode** — WIKI_READ_ONLY=true simply doesn't register write tools, so the agent can't bypass it
- 🧩 **Typed tool surface** — every tool ships an input JSON schema and safety annotations (read-only / destructive / idempotent hints), and all but page_read_attachment, which answers with a native image or resource block, an output schema too
- 🐳 **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:
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).
Claude Desktop / Windsurf / any JSON-config client (uvx)
Claude Code (CLI)
Docker (no Python required)
> [!TIP]
> Start with WIKI_READ_ONLY=true — the server won't even register write tools.
> Flip it to false once you trust your agent with edits.
3. Ask your agent something — see below.
Need the old MCP SDK (1.x)?
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
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 |