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

Подключайте 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) для команд

Быстрый старт

  1. Получите OAuth-токен Yandex с доступом к Wiki (официальное руководство) и ID вашей организации.

  2. Установите его в ваш клиент:

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

Бейдж 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, когда доверите агенту редактирование.

  1. Попросите агента решить задачу — примеры ниже.

Сервер работает на 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)

Инструмент

Что делает

page_search

Полнотекстовый поиск по всей Wiki (страницы и файлы) — ранжированные результаты с текстовым фрагментом для каждого; сервенные фильтры и постраничная навигация через курсор — около 100 результатов в режиме highlight (до 50 за один вызов в пробычном случае).

page_get

Получить страницу по page_id или slug (принимает также полные URL Wiki).

page_get_descendants

Обойти постать страницы — один плоский список {id, slug} со всех уровней вложенности; from_root=true обходит то wiki; fetch_all полностью читает курсор за один вызов.

page_get_comments

Список коментарев страницы (поддерживается fetch_all).

page_get_resources

Список ресурсов страницы (вложения и записи) с сервенным посиском по по названиия (поддерживается fetch_all).

page_get_attachments

Список вложений страницы (поддерживается fetch_all).

page_read_attachment

Читает содержимое вложения прямо в диалог (нигде ничего не сохраняется) — PNG/JPEG/GIF/WebP как встроенный image-блок, который рендится клиентами с подержкой vision; текстовые файлы как текст (включая SVG: он XML, и image-блок, который vision API не может декодировать, вызвает сбой следующего вызова хоста), остальные бинарные файлы — как blob в base64. Формат определяется магическими байтами файла, а не заявленным каналом; заявленным типом. Объем ограничен для защиты контекстового окна модели: 128 КиБ для текста/бинарнных, 64 МиБ для изобрений; превышающее откланяется с указает на page_download_attachment или download_url из page_get_attachments.

page_get_grids

Список гридц, прикрепленных к странице (поддерживается fetch_all).

grid_get

Получить grid по grid_id с фильтрами по строкам/столбцам/ревизии.

user_get_current

Кто я — username и home_cluster (слаг персональной секции вызывающего).

Страницы: опись (12)

Инструмент

Что делает

page_create

Создать страницу

page_update

Обновить заголовок страницы и/или её полное содержимое; установить или сбросить перенаправление на другую страницу

page_edit

Редактировать содержимое заменой по точному совпадению текста без повторной отправки всей страницы; если совпадение не найдено или неоднозначно, вызов завершается ошибкой до записи; запись обратно выполняется с allow_merge, поэтому параллельное редактирование сливается, а не перезаписывается

page_append_content

Добавить содержимое в начало, в конец или к именованному якорю

page_clone

Скопировать страницу на новый slug — копия получает новый id; дочерние страницы, комментарии и история остаются у оригинала; занятые slug отклоняются. В API нет полноценной операции перемещения и переименования (подробнее)

page_add_comment

Добавить комментарий или ответ в ветке обсуждения

page_delete_comment

Удалить комментарий; возвращает обновлённое количество комментариев на странице

page_delete_attachment

Удалить вложение со страницы

page_delete

Удалить страницу и получить токен восстановления

page_recover

Восстановить удалённую страницу по токену восстановления

page_upload_attachment

Загрузить локальный файл частями и прикрепить его к странице — не регистрируется при OAUTH_ENABLED=true, где «локальный» означало бы файловую систему общего сервера

page_download_attachment

Скачать вложение в локальный файл — потоково на диск без ограничения размера, ничего не попадает в диалог. Запись выполняется атомарно (.part → fsync → rename), без явного запроса существующий файл не перезаписывается; итоговый файл получает права обычной записи (0666 & ~umask, никогда не становится исполняемым); при замене файла сохраняется режим этого файла. fsync каталога, который делает само переименование устойчивым к сбоям, и наследование режима действуют только в POSIX. При OAuth операция скрыта так же, как page_upload_attachment

Сетки: запись (11)

Инструмент

Что делает

grid_create

Создать сетку на странице

grid_update

Обновить заголовок сетки и/или сортировку по умолчанию

grid_copy

Скопировать сетку на существующую целевую страницу (асинхронная операция)

grid_delete

Удалить сетку

grid_add_rows

Добавить строки в позицию или после указанной строки

grid_update_cells

Обновить отдельные ячейки по строке + столбцу

grid_delete_rows

Удалить строки

grid_move_row

Переместить строку

grid_add_columns

Добавить типизированные столбцы

grid_delete_columns

Удалить столбцы по slug

grid_move_column

Переместить столбец

Особенности сеток:

  • Мутации используют оптимистическую блокировку — сначала получите сетку и передайте свежий 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 (хостируемый)

ya-yandex-wiki-mcp

slartus/mcp-yandex-wiki

ya-wiki-mcp

Полнотекстовый поиск

✅ до 50 результатов, серверные фильтры + подсветка

❌ нет инструмента поиска

✅ до 10 результатов

Страницы: создание / обновление / добавление / удаление + восстановление

✅ все, плюс частичное редактирование через замену текста (page_edit)

частично — нет добавления / восстановления; есть частичные правки через замену текста

✅ все

частично — нет добавления / восстановления

частично — нет восстановления

Страницы: клонирование в новый slug

page_clone

Таблицы: инструменты записи

✅ 11

✅ 12, вкл. обновление столбцов и закрепление строк/цвет

✅ 11

❌ только чтение

✅ 11, вкл. клонирование

Комментарии, загрузка вложений

✅ вкл. удаление, встроенный просмотр изображений и скачивание на диск

комментарии ✅ / загрузка ❌ (вместо этого — скачивание и просмотр)

Серверный режим только для чтения

Типизированные выходные схемы + аннотации инструментов

❌ инструменты возвращают простые строки

Помощники YFM

✅ шпаргалка по синтаксису + yfm_warnings в инструментах записи

✅ конвертер 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 yc CLI — 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.

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 (limit is clamped by the server to 1–50; the API rejects anything else) and no pagination — the response cursors are always null. With highlight=true: pages are limited to 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”.

  • Interactive server-side filters run 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 accountable 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 ``tags. Read the page with page_get before answering from it. Empty for file results.

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

Переменная

Обязательность

По умолчанию

Описание

WIKI_TOKEN

один из двух

Yandex OAuth-токен (имеет приоритет, если заданы оба)

WIKI_IAM_TOKEN

IAM-токен (организации Yandex Cloud)

WIKI_ORG_ID

ровно один из двух

Идентификатор организации Yandex 360 (X-Org-Id)

WIKI_CLOUD_ORG_ID

Идентификатор организации Yandex Cloud (X-Cloud-Org-Id)

WIKI_READ_ONLY

нет

false

true отключает все инструменты записи на стороне сервера

TRANSPORT

нет

stdio

stdio | sse | streamable-http

HOST / PORT

нет

0.0.0.0 / 8000

Только для HTTP-транспортов

STATELESS_HTTP / JSON_RESPONSE

нет

true / true

Только streamable-http: не хранить состояние сессии / отвечать JSON вместо SSE

LOG_LEVEL

нет

INFO

Логи идут в stderr; DEBUG дополнительно логирует запросы к Wiki API (метод, путь, статус, длительность — но никогда заголовки и тела)

WIKI_API_BASE_URL

нет

https://api.wiki.yandex.net

Эндпоинт Wiki API

WIKI_WEB_BASE_URL

нет

https://wiki.yandex.ru

Базовый URL для абсолютных ссылок на страницы в результатах page_search

WIKI_AUTH_SCHEME

нет

OAuth

Схема заголовка Authorization для токена WIKI_TOKEN (OAuth | Bearer)

WIKI_MAX_RETRIES

нет

2

Повторные попытки при обрыве соединения и кодах 429/502/503/504 на запросах чтения; 0 отключает их

TOOL_RESULT_TEXT

нет

pretty

Текстовая копия структурированных результатов инструментов: pretty (indent=2) | compact (одна строка, на 10–30 % меньше текстового блока) | none (только структурированные данные — проверьте, что ваш клиент корректно отображает structuredContent)

При OAUTH_ENABLED=true сервер становится OAuth-провайдером: каждый пользователь MCP авторизуется под своей учётной записью Yandex, а запросы к Wiki API выполняются с его персональным токеном. В этом режиме инструменты page_upload_attachment и page_download_attachment не регистрируются: они читают и записывают файлы на той машине, где запущен сервер, а при общем развертывании это не машина пользователя, вызывающего инструменты.

Переменная

По умолчанию

Описание

OAUTH_ENABLED

false

Включить OAuth-провайдера

OAUTH_STORE

memory

memory | redis

OAUTH_SERVER_URL

https://oauth.yandex.ru

Сервер Yandex OAuth

OAUTH_USE_SCOPES

true

Запрашивать области доступа (scopes) Wiki при авторизации

OAUTH_CLIENT_ID / OAUTH_CLIENT_SECRET

Учётные данные вашего приложения Yandex OAuth

OAUTH_CLIENT_SECRET_EXPIRY_SECONDS

2592000 (30 дней)

Срок жизни динамически зарегистрированного MCP-клиента. Регистрация по замыслу протокола не требует аутентификации, поэтому без срока действия каждая регистрация хранится вечно; клиенты узнаю́т предельный срок при регистрации и регистрируются заново после его наступления. Пустое значение отключает это поведение.

MCP_SERVER_PUBLIC_URL

Публичный адрес этого сервера (OAuth-колбэки)

OAUTH_ENCRYPTION_KEYS

Ключи base64 по 32 байта через запятую (обязательны для хранилища redis)

REDIS_ENDPOINT / REDIS_PORT / REDIS_DB / REDIS_PASSWORD / REDIS_POOL_MAX_SIZE

localhost / 6379 / 0 / — / 10

Подключение к Redis

Выбор организации для каждого пользователя. WIKI_ORG_ID / WIKI_CLOUD_ORG_ID при OAuth необязательны, потому что каждый запрос может указать свою организацию: добавьте ?orgId=... (или ?cloudOrgId=...) к URL MCP-сервера, к которому подключается ваш клиент. Параметр запроса имеет приоритет над общесерверной настройкой, поэтому одно развертывание может обслуживать несколько организаций. Если в запросе нет ни того, ни другого, вызов инструмента завершается ошибкой с сообщением, указывающим оба варианта. Если все ваши пользователи используют одну организацию, задайте переменную окружения как значение по умолчанию.

Полный аннорированный список переменных см. в .env.example, а базовый вариант для Redis — в compose.yaml.

Развертывание

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-сервер в 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

A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
2dRelease cycle
14Releases (12mo)
Commit activity

Related MCP Servers

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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