Skip to main content

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") — 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 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

Claude Desktop / Windsurf / any JSON-config client (uvx)
{
  "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 Code (CLI)
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
Docker (no Python required)
{
  "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 with WIKI_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.

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

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

Search & read (8)

Tool What it does
page_search Full-text search across the entire Wiki (pages and files), up to 50 ranked results with snippets
page_get Get a page by page_id or slug (accepts full Wiki URLs too)
page_get_descendants Traverse a page subtree with pagination
page_get_comments List page comments
page_get_resources List page resources (attachments + grids) with server-side title search
page_get_attachments List page attachments
page_get_grids List grids attached to a page
grid_get Get a grid by grid_id with row/column/revision filters

Pages: write (7)

Tool What it does
page_create Create a page
page_update Update page title and/or full content
page_append_content Append content to top, bottom, or a named anchor
page_add_comment Add a comment or reply in a thread
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

Grids: write (11)

Expand the table
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_rows Move a row
grid_add_columns Add typed columns
grid_delete_columns Delete columns by slug
grid_move_columns 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 2026.

yandex-wiki-search-mcp ya-yandex-wiki-mcp slartus/mcp-yandex-wiki best-doctor/mcp-yandex-wiki ya-wiki-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 -ro entry point
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 ✅ / ✅ / ✅ ✅ / ✅ / ✅ ❌ 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 yc CLI 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_size is clamped to 1–50; the API rejects anything else).
  • Search is global onlyslug_prefix and result_type filters are applied client-side after fetching, so combine them with page_size=50 to avoid missing matches.
  • Quoted "exact phrase" queries work; page results get absolute https://wiki.yandex.ru/... links, file results get direct download links.

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
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
Multi-user OAuth + Redis (HTTP deployments only)

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

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 -.-> 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 \
  ghcr.io/dlbolshov/yandex-wiki-search-mcp:latest
Docker Compose
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

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 (verified live — see docs/api-notes.md): a wiki:read token can 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.

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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yandex_wiki_search_mcp-0.7.0.tar.gz (53.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yandex_wiki_search_mcp-0.7.0-py3-none-any.whl (53.7 kB view details)

Uploaded Python 3

File details

Details for the file yandex_wiki_search_mcp-0.7.0.tar.gz.

File metadata

  • Download URL: yandex_wiki_search_mcp-0.7.0.tar.gz
  • Upload date:
  • Size: 53.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for yandex_wiki_search_mcp-0.7.0.tar.gz
Algorithm Hash digest
SHA256 ce0f432f22bb734c16b69a2b5ec6e312e40b1cadd267ba74b67a49e17e3fcb55
MD5 bb73ec794d39afb2fbfe6100d431aadd
BLAKE2b-256 a4f4a10c9c994a51c146f692fbfbd5ae8a549356f0d26c189a927ecc16e409fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for yandex_wiki_search_mcp-0.7.0.tar.gz:

Publisher: release.yml on dlbolshov/yandex-wiki-search-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file yandex_wiki_search_mcp-0.7.0-py3-none-any.whl.

File metadata

File hashes

Hashes for yandex_wiki_search_mcp-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e426bac1ee25a8030710b1fd3692262e57641419794c91d27a0ab0a8730cda6e
MD5 0c09a4c75594f34e4de6f41f14b58891
BLAKE2b-256 1168067e48ef4c4ea089db087720566e4ead57afaa8e38c774d40aaf13fe2b00

See more details on using hashes here.

Provenance

The following attestation bundles were made for yandex_wiki_search_mcp-0.7.0-py3-none-any.whl:

Publisher: release.yml on dlbolshov/yandex-wiki-search-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.5.0

2 files

1.4.0

2 files

1.3.0

2 files

1.2.1

2 files

1.2.0

2 files

1.1.0

2 files

1.0.1

2 files

1.0.0

2 files

0.8.0

2 files

This release

0.7.0 This release

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page