yandex-wiki-search-mcp
English | Русский
Yandex Wiki Search MCP

Подключайте Claude, Cursor, Windsurf или любой другой MCP-клиент к Yandex Wiki: полнотекстовый поиск, страницы, комментарии, вложения и динамические таблицы («grids») — 33 инструмента с типизированными схемами.
Неофициальный проект — не аффилирован с Yandex и не одобрен им.
🔍 Полнотекстовый поиск по всей вики — тот же бэкенд, что стоит за строкой поиска в веб-версии Wiki, до 50 результатов на запрос
📄 Полный жизненный цикл страниц — создание, обновление, добавление (top / bottom / anchor), клонирование, удаление с recovery-токеном, комментарии, загрузка файлов
📊 Динамические таблицы (grids) — 11 инструментов для записи: строки, столбцы, ячейки, копирование, сортировка
🔒 Режим только чтения на стороне сервера — при
WIKI_READ_ONLY=trueинструменты записи просто не регистрируются, поэтому агент не сможет его обойти🧩 Типизированные инструменты — каждый инструмент поставляется с JSON-схемами входа и выхода, а также с аннотациями безопасности (подсказки read-only / destructive / idempotent)
🐳 Работает где угодно — stdio для десктопных клиентов, streamable-http + Docker (с опциональным multi-user OAuth) для команд
Быстрый старт
Получите OAuth-токен Yandex с доступом к Wiki (официальное руководство) и ID вашей организации.
Установите его в ваш клиент:
Бейдж Claude Desktop скачивает .mcpb-пакет последнего релиза — дважды щёлкните по нему, и Claude Desktop установит сервер, запрашивая токен и ID организации (uv должен быть установлен).
{
"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] Начните с
WIKI_READ_ONLY=true— сервер даже не зарегистрирует инструменты записи. Переключите его наfalse, когда доверите агенту редактирование.
Попросите агента решить задачу — примеры ниже.
Сервер работает на MCP Python SDK v2. Для клиентов это незаметно — один сервер v2 отвечает всем ревизиям протокола, вплоть до 2024-11-05, а также актуальной, поэтому вам не нужно ничего менять или переустанавливать.
Единственная причина остаться на старой версии — общая среда, в которой зафиксирован mcp<2 для других целей. 1.0.1 — последний релиз на 1.x SDK и он остаётся на PyPI:
pip install "yandex-wiki-search-mcp<1.1"Related MCP server: mediawiki-mcp-server
Что умеет
«Найди наши материалы по онбордингу и кратко изложи основные шаги».
«Что у нас есть по реагированию на инциденты? Открой самую подходящую страницу».
«Создай страницу
team/weekly-notesи добавь к ней сегодняшнюю стену-сводку».«Добавь строку в таблицу дежурств: alice, на следующей неделе».
«Загрузи этот PDF на страницу проекта и добавь ссылку на него внизу».
*«Удали черновик страницы, но сохрани recovery-токен на случай, если я передумаю“.»
Инструменты
33 инструмента. Все инструменты записи полностью исчезают при WIKI_READ_ONLY=true.
Поиск и чтение (10)
Инструмент | Что делает |
| Полнотекстовый поиск по всей Wiki (страницы и файлы) — ранжированные результаты с текстовым фрагментом для каждого; сервенные фильтры и постраничная навигация через курсор — около 100 результатов в режиме |
| Получить страницу по |
| Обойти постать страницы — один плоский список |
| Список коментарев страницы (поддерживается |
| Список ресурсов страницы (вложения и записи) с сервенным посиском по по названиия (поддерживается |
| Список вложений страницы (поддерживается |
| Читает содержимое вложения прямо в диалог (нигде ничего не сохраняется) — PNG/JPEG/GIF/WebP как встроенный image-блок, который рендится клиентами с подержкой vision; текстовые файлы как текст (включая SVG: он XML, и image-блок, который vision API не может декодировать, вызвает сбой следующего вызова хоста), остальные бинарные файлы — как blob в base64. Формат определяется магическими байтами файла, а не заявленным каналом; |
| Список гридц, прикрепленных к странице (поддерживается |
| Получить grid по |
| Кто я — |
Страницы: опись (12)
Инструмент | Что делает |
| Создать страницу |
| Обновить заголовок страницы и/или её полное содержимое; установить или сбросить перенаправление на другую страницу |
| Редактировать содержимое заменой по точному совпадению текста без повторной отправки всей страницы; если совпадение не найдено или неоднозначно, вызов завершается ошибкой до записи; запись обратно выполняется с |
| Добавить содержимое в начало, в конец или к именованному якорю |
| Скопировать страницу на новый slug — копия получает новый id; дочерние страницы, комментарии и история остаются у оригинала; занятые slug отклоняются. В API нет полноценной операции перемещения и переименования (подробнее) |
| Добавить комментарий или ответ в ветке обсуждения |
| Удалить комментарий; возвращает обновлённое количество комментариев на странице |
| Удалить вложение со страницы |
| Удалить страницу и получить токен восстановления |
| Восстановить удалённую страницу по токену восстановления |
| Загрузить локальный файл частями и прикрепить его к странице — не регистрируется при |
| Скачать вложение в локальный файл — потоково на диск без ограничения размера, ничего не попадает в диалог. Запись выполняется атомарно ( |
Сетки: запись (11)
Инструмент | Что делает |
| Создать сетку на странице |
| Обновить заголовок сетки и/или сортировку по умолчанию |
| Скопировать сетку на существующую целевую страницу (асинхронная операция) |
| Удалить сетку |
| Добавить строки в позицию или после указанной строки |
| Обновить отдельные ячейки по строке + столбцу |
| Удалить строки |
| Переместить строку |
| Добавить типизированные столбцы |
| Удалить столбцы по slug |
| Переместить столбец |
Особенности сеток:
Мутации используют оптимистическую блокировку — сначала получите сетку и передайте свежий
revision.Параметр
grid_update.default_sortпринимает элементы вида[{"column": "status", "direction": "asc"}]; сервер преобразует их в формат передачи, который ожидает API.Для
grid_add_columnsполеrequiredобязательно в каждом столбце, потому что реальный API проверяет его.grid_copyвозвращает метаданные операции, а не готовый объект скопированной сетки.
Как это сравнивается с аналогами
Факты проверены по документации аналогов и опубликованному коду в июле–августе 2026 года; список инструментов официального размещённого сервера получен напрямую с mcp.wiki.yandex.net (wiki-mcp-server 1.28.1, 2026-08-11).
yandex-wiki-search-mcp | официальный MCP Yandex (хостируемый) | ||||
Полнотекстовый поиск | ✅ до 50 результатов, серверные фильтры + подсветка | ❌ нет инструмента поиска | ❌ | ✅ до 10 результатов | ❌ |
Страницы: создание / обновление / добавление / удаление + восстановление | ✅ все, плюс частичное редактирование через замену текста ( | частично — нет добавления / восстановления; есть частичные правки через замену текста | ✅ все | частично — нет добавления / восстановления | частично — нет восстановления |
Страницы: клонирование в новый slug | ✅ | ❌ | ❌ | ❌ | ✅ |
Таблицы: инструменты записи | ✅ 11 | ✅ 12, вкл. обновление столбцов и закрепление строк/цвет | ✅ 11 | ❌ только чтение | ✅ 11, вкл. клонирование |
Комментарии, загрузка вложений | ✅ вкл. удаление, встроенный просмотр изображений и скачивание на диск | комментарии ✅ / загрузка ❌ (вместо этого — скачивание и просмотр) | ✅ | ❌ | ❌ |
Серверный режим только для чтения | ✅ | ❌ | ✅ | ❌ | ❌ |
Типизированные выходные схемы + аннотации инструментов | ✅ | ❌ | ❌ | ❌ | ❌ инструменты возвращают простые строки |
Помощники YFM | ✅ шпаргалка по синтаксису + | ❌ | ❌ | ❌ | ✅ конвертер Markdown→YFM + кеш дерева страниц, шаблоны промптов |
Docker / PyPI / MCP Registry | ✅ / ✅ / ✅ | — хостируемый сервис, закрытый исходный код, ничего устанавливали | ✅ / ✅ / ✅ | ❌ установка вручную | ❌ / ✅ / ❌ |
Многопользовательский OAuth для HTTP-развёртывания | ✅ | ❌ пользовательский токен вставляется в статичные заголовки, нет потока OAuth | ✅ | ❌ | ❌ |
Pages: клонирование в новый slug с помощью page_clone | ✅ page_clone | ❌ | ❌ | ❌ | ✅ |
Стóit ещё знать:
[best-doctor/mcp-andex-Wiki] (https://github.com/best-/bocuments...) (Python) — page: create / update plus reads, with a separate read-only entry point; no delete/recover, no grids, no search; PyPI only
[brekhov-ilya/andex-iki-mcp] (https://github...) (JavaScript) — page read / write / move, tables read-only; interactive PKCE toe-token flow with auto-refresh; no full-text search
[n-r-w/ya-wiki-mcp] (https://github...) — Yandex Tracker + Wiki in a single Go file? Actually it's Go: "Gо" — Yandex Tracker + Wiki в одном сервере, GO doesn't matter; designed as read-only (5 wiki read tools), no search; authorized only via IMA tokens from the
ycCLI — direct OAuth for Yandex not supported[bim-ba/ya-wiki-mcp] (https://github...) — Go bещs? Actually Python: "Pи-тоно" — One таольkit for Tracker + Wiki + Forms: CLI, Python SDK, Claude Code plugin and MCP server whose Wiki surface is 42
wiki_*tool (15 read / 27 write, annotations, with flag--read-only); no full-text search tool, attachments download remain only 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 official hosted service still does not include search tool — and the combination of search, table 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 POST /v1/search endpoint — the same backend that powers the Wiki web search, undocumented until Yandex published its API reference in August 2026. Seach first, then open a result with page_get by its slug.
Two wire modes. By default: up to 50 results in one call (
limitis clamped by the server to 1–50; the API rejects anything else) and no pagination — the response cursors are alwaysnull. Withhighlight=true: pages are limited to 10 results regardless oflimit, matches come wrapped in<em>, andcursor(the page number echoed back innext_cursor) walks up to ~100 results. The set ends whenresultscomes back empty ornext_cursorisnullon a non-empty page — past the endnext_cursorkeeps counting up over empty pages, so it alone does not mean “more exists”.Interactive server-side filters run before the limit — a filtered search does not lose matches to it:
slug_prefix(section filter, deep prefixes liketech-doc/mlare fine),result_type(page/file),authors(page owners byuid/cloud_uid—user_get_currentsupplies your own, turning “find my pages accountable about X” into two calls), andcreated_between/modified_betweendate intervals (both bounds required — the API rejects open ones).Quoted
"exact phrase"queries work;pageresults get absolutehttps://wiki.yandex.ru/...links,fileresults get direct download links.contentis 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. Passhighlight=trueto get matches wrapped in ``tags. Read the page withpage_getbefore answering from it. Empty forfileresults.
Traversing the tree
page_get_descendants (да, it’s) 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. Preer 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
Переменная | Обязательность | По умолчанию | Описание |
| один из двух | — | Yandex OAuth-токен (имеет приоритет, если заданы оба) |
| — | IAM-токен (организации Yandex Cloud) | |
| ровно один из двух | — | Идентификатор организации Yandex 360 ( |
| — | Идентификатор организации Yandex Cloud ( | |
| нет |
|
|
| нет |
|
|
| нет |
| Только для HTTP-транспортов |
| нет |
| Только |
| нет |
| Логи идут в stderr; |
| нет |
| Эндпоинт Wiki API |
| нет |
| Базовый URL для абсолютных ссылок на страницы в результатах |
| нет |
| Схема заголовка |
| нет |
| Повторные попытки при обрыве соединения и кодах |
| нет |
| Текстовая копия структурированных результатов инструментов: |
При OAUTH_ENABLED=true сервер становится OAuth-провайдером: каждый пользователь MCP авторизуется под своей учётной записью Yandex, а запросы к Wiki API выполняются с его персональным токеном. В этом режиме инструменты page_upload_attachment и page_download_attachment не регистрируются: они читают и записывают файлы на той машине, где запущен сервер, а при общем развертывании это не машина пользователя, вызывающего инструменты.
Переменная | По умолчанию | Описание |
|
| Включить OAuth-провайдера |
|
|
|
|
| Сервер Yandex OAuth |
|
| Запрашивать области доступа (scopes) Wiki при авторизации |
| — | Учётные данные вашего приложения Yandex OAuth |
|
| Срок жизни динамически зарегистрированного MCP-клиента. Регистрация по замыслу протокола не требует аутентификации, поэтому без срока действия каждая регистрация хранится вечно; клиенты узнаю́т предельный срок при регистрации и регистрируются заново после его наступления. Пустое значение отключает это поведение. |
| — | Публичный адрес этого сервера (OAuth-колбэки) |
| — | Ключи base64 по 32 байта через запятую (обязательны для хранилища |
|
| Подключение к Redis |
Выбор организации для каждого пользователя. WIKI_ORG_ID / WIKI_CLOUD_ORG_ID при OAuth необязательны, потому что каждый запрос может указать свою организацию: добавьте ?orgId=... (или ?cloudOrgId=...) к URL MCP-сервера, к которому подключается ваш клиент. Параметр запроса имеет приоритет над общесерверной настройкой, поэтому одно развертывание может обслуживать несколько организаций. Если в запросе нет ни того, ни другого, вызов инструмента завершается ошибкой с сообщением, указывающим оба варианта. Если все ваши пользователи используют одну организацию, задайте переменную окружения как значение по умолчанию.
Полный аннорированный список переменных см. в .env.example, а базовый вариант для Redis — в compose.yaml.
Развертывание
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-сервер в Docker (эндпоинт MCP: 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] Сервер не создаёт собственных лог-файлов — всё пишется в stderr, который драйвер Docker по умолчанию
json-fileсохраняет без ограничения размера. Указанные выше флаги--log-optограничивают его. Убирайте их только в том случае, если ваш демон уже задаёт значение по умолчанию.
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"Для хранения OAuth-токенов в Redis используйте существующий compose.yaml как базовый вариант.
Безопасность
Режим только для чтения реализован на сервере: при
WIKI_READ_ONLY=trueинструменты записи вообще не регистрируются — агенту просто нечего будет вызвать.Wiki API не соблюдает OAuth-scopes (перепроверено 2026-08-11, после того как Yandex документировал scopes — см. docs/api-notes.md): даже токен
wiki:readможет записывать, поэтому используйте режим только для чтения, а не полагайтесь на scopes токена.Секреты задаются через
SecretStrи всегда маскируются в логах и вrepr; при уровнеDEBUGникогда не логируются заголовки и тела запросов.Удаление обратимо:
page_deleteвозвращает токен восстановления дляpage_recover.Несвязанные ключи в общем
.envигнорируются, но из-за опечатки в настройке (WIKI_READ_ONL) сервер прекратит работу, а не молча подставит непреднамеренное значение по умолчанию.
Разработка
uv sync --dev
uv run yandex-wiki-search-mcp # run locally
uv run pytest # testsПеред коммитом прогоните полный набор проверок из CONTRIBUTING.md. Как устроен сервер — слои, структура кода, точки тестирования, CI и процесс релиза — описано в docs/architecture.md. Подтверждённое поведение Wiki API и пробные скрипты задокументированы в docs/api-notes.md.
API «Yandex Wiki» дрейфует (поисковый эндпоинт уже однажды молча изменил контракт, ещё когда тот был недокументирован) — scripts/contract_sweep.py заново проверяет каждый метоd клиента протива живой organization и сообщает о расхождениях валидации и незадекларированных ключах:
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Рабочий процесс [проверки API на дрейф] (.github/workflows/api-drift.yml) запускает ту же проверку еженедельно, когда настроены секреты репозитория DRIFT_* (инструкции — в шапке файла workflow); без них он тихо пропускается.
Благодарности
Этот проekt начался как форк APonkratov/yandex-wiki-mcp (ya-yandex-wiki-mcp) Александра Понкратова — отличного, хорошо протестированного Python MCP-сервера для API Yandex Wiki, распространяемого под лицензией Apache-2.0. С тех пор у него выросла собственная поверхность: полнотекстовый поиск, типизированные схемы входных и выходных данных во всех 33 инструментах, YFM-хелперы, выгрузка по курсорам, многопользовательский OAuth и живая проверка контракта против API, — при этом исходные авторские права и лицензия сохранены (см. LICENSE и NOTICE).
Идея и ключевые находки по API, лежащие в основе полнотекстового поика, пришли из проекта slartus/mcp-yandex-wiki (JavaScript, MIT): именно он первым обнаружил тогда ещё недокументированную POST /v1/search (Yandex опубликовал справку for it only в авусте 2026 годa) and сообщил, что OAuth-скоупе не применяются. Никакого кода от него не было взято — только находки и идеи, незавиником перепроверинные на живой organization и расширенные здесь.
Товарные знаки
«Yandex» и «Yandex Wiki» — товарные знаки YANDEX LLC. Это неофициальный проект, созданный сообщством: он не аффfiliрован с Yandex, не спонсортся им и не одобрен Yandex — названия использются жито в назывной функции, чтобы указать, с какim сервером обрщается сервер. Логотип — оригинальный знак, не воспроизводящий фирменный стиль ни Yandex Wiki, ни MCP (заметки о дизайне).
***р mcp-name: io.github.dlbolshov/yandex-wiki-search-mcp
Maintenance
Related MCP Servers
- AlicenseBqualityBmaintenanceA secure MCP server for interacting with MediaWiki instances, allowing users to search, read, create, and manage wiki content like pages, categories, and files. It supports both public and private wikis with comprehensive authentication for full read and write operations.19AGPL 3.0
- AlicenseAqualityAmaintenanceMCP server for MediaWiki wikis. Search, read, edit, and manage wiki content from AI assistants. Includes formatting, link checking, revision history, and markdown conversion.4320MIT
- AlicenseAqualityBmaintenanceEnables reading, creating, updating, and appending content to Yandex Wiki pages via MCP. Supports both read-write and read-only modes.79MIT
- AlicenseNot gradedqualityCmaintenanceMinimal MCP server for Yandex Wiki that enables reading, writing, searching, and managing wiki pages and attachments.1MIT
Related MCP Connectors
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
Self-hostable team wiki; agents read & write it via MCP; Atlas turns your repo into a cited wiki.
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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