yandex-wiki-search-mcp
English | Русский
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") — 26 tools with typed schemas.
🔍 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), 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=truesimply 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
Get a Yandex OAuth token with Wiki access (official guide) and your organization ID.
Install into your client:
{
"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"}
}
}
}Start withWIKI_READ_ONLY=true — the server won't even register write tools.
Flip it to false once you trust your agent with edits.
Ask your agent something — see below.
Related MCP server: mcp-mediawiki-crunchtools
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-notesand 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
26 tools. All write tools disappear when WIKI_READ_ONLY=true.
Search & read (8)
Tool | What it does |
| Full-text search across the entire Wiki (pages and files), up to 50 ranked results with snippets |
| Get a page by |
| Traverse a page subtree with pagination |
| List page comments |
| List page resources (attachments + grids) with server-side title search |
| List page attachments |
| List grids attached to a page |
| Get a grid by |
Pages: write (7)
Tool | What it does |
| Create a page |
| Update page title and/or full content |
| Append content to top, bottom, or a named anchor |
| Add a comment or reply in a thread |
| Delete a page and receive a recovery token |
| Recover a deleted page by recovery token |
| Upload a local file in chunks and attach it to a page |
Grids: write (11)
Tool | What it does |
| Create a grid on a page |
| Update grid title and/or default sort |
| Copy a grid to an existing target page (async operation) |
| Delete a grid |
| Add rows at a position or after a given row |
| Update individual cells by row + column |
| Delete rows |
| Move a row |
| Add typed columns |
| Delete columns by slug |
| Move a column |
Grid specifics:
Mutations use optimistic locking — fetch the grid first and pass the latest
revision.grid_update.default_sorttakes[{"column": "status", "direction": "asc"}]entries; the server converts them to the wire format the API expects.grid_add_columnsrequiresrequiredon every column because the real API validates it.grid_copyreturns operation metadata, not a ready copied grid object.
How it compares
Facts verified against the alternatives' docs and published code, July 2026.
yandex-wiki-search-mcp | |||||
Full-text search | ✅ up to 50 results, client-side filters | ❌ | ✅ up to 10 results | ❌ | ❌ |
Pages: create / update / append / delete + recover | ✅ all | ✅ all | partial — no append / recover | partial — no delete / recover | partial — no recover; has clone |
Grids: write tools | ✅ 11 | ✅ 11 | ❌ read-only | ❌ no grid tools | ✅ 11, incl. clone |
Comments, attachment upload | ✅ | ✅ | ❌ | ❌ | ❌ |
Server-side read-only mode | ✅ | ✅ | ❌ | ✅ separate | ❌ |
Typed output schemas + tool annotations | ✅ | ❌ | ❌ | ❌ | ❌ tools return plain strings |
YFM helpers (Markdown→YFM converter, syntax guide) | planned (ROADMAP) | ❌ | ❌ | ❌ | ✅ + page-tree cache, prompt templates |
Docker / PyPI / MCP Registry | ✅ / ✅ / ✅ | ✅ / ✅ / ✅ | ❌ manual install | PyPI only | PyPI only; no source repo linked |
Multi-user OAuth for HTTP deployments | ✅ | ✅ | ❌ | ❌ | ❌ |
Also worth knowing:
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
ycCLI only — Yandex OAuth tokens are not supported
As of July 2026, full-text search exists only here (up to 50 results) and in slartus (up to 10); 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.
Full-text search
page_search wraps the undocumented-but-public POST /v1/search endpoint — the same
backend that powers the Wiki web search bar. Search first, then open a result with
page_get by its slug.
Up to 50 results per call (
page_sizeis clamped to 1–50; the API rejects anything else).Search is global only —
slug_prefixandresult_typefilters are applied client-side after fetching, so combine them withpage_size=50to avoid missing matches.Quoted
"exact phrase"queries work;pageresults get absolutehttps://wiki.yandex.ru/...links,fileresults get direct download links.
More verified API behavior (scopes, 403 semantics, error envelopes, limits): docs/api-notes.md.
Configuration
Variable | Required | Default | Description |
| one of the two | — | Yandex OAuth token (takes precedence when both are set) |
| — | IAM token (Yandex Cloud organizations) | |
| exactly one of the two | — | Yandex 360 organization ID ( |
| — | Yandex Cloud organization ID ( | |
| no |
|
|
| no |
|
|
| no |
| HTTP transports only |
| no |
| Logs go to stderr; |
| no |
| Wiki API endpoint |
| no |
| Base for absolute page links in |
| no |
|
|
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.
Variable | Default | Description |
|
| Enable the OAuth provider |
|
|
|
|
| Yandex OAuth server |
|
| Request Wiki scopes during authorization |
| — | Your Yandex OAuth app credentials |
| — | Public URL of this server (OAuth callbacks) |
| — | Comma-separated base64 32-byte keys (required for |
|
| Redis connection |
See .env.example for the full annotated list and compose.yaml for a Redis baseline.
Deployment
flowchart LR
C["MCP client<br/>Claude / Cursor / Windsurf / VS Code"]
S["yandex-wiki-search-mcp"]
W["Yandex Wiki API"]
R[("Redis<br/>optional OAuth token store")]
C -- "stdio (local, single user)" --> S
C -- "streamable-http (+ OAuth, multi-user)" --> S
S --> W
S -.-> RHTTP server via Docker (the MCP endpoint is http://localhost:8000/mcp):
docker run --env-file .env -e TRANSPORT=streamable-http -p 8000:8000 \
ghcr.io/dlbolshov/yandex-wiki-search-mcp:latestservices:
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-httpFor Redis-backed OAuth storage, use the existing compose.yaml as the baseline.
Security
Read-only is server-side: with
WIKI_READ_ONLY=truewrite tools are never registered — there is nothing for a confused agent to call.Wiki API does not enforce OAuth scopes (verified live — see docs/api-notes.md): a
wiki:readtoken can write, so use the read-only mode rather than relying on token scopes.Secrets are
SecretStrthroughout — masked in logs andrepr;DEBUGHTTP logging never includes headers or bodies.Deletion is recoverable:
page_deletereturns a recovery token forpage_recover.
Development
uv sync --dev
uv run yandex-wiki-search-mcp # run locally
uv run pytest # testsBefore committing, run the full verification set from CONTRIBUTING.md. Verified API behavior and probe scripts are documented in docs/api-notes.md.
Credits
This project is 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. This fork adds full-text search
(page_search), typed tool schemas, and more; 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 undocumented POST /v1/search endpoint 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.
mcp-name: io.github.dlbolshov/yandex-wiki-search-mcp
Maintenance
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dlbolshov/yandex-wiki-search-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server