关于 yandex-wiki-search-mcp
yandex-wiki-search-mcp 将 MCP 客户端连接到 Yandex Wiki,以搜索和管理内容。其类型化工具覆盖页面、评论、附件和动态表格,并可启用服务端只读模式。
主要功能
- 01带筛选条件的 Wiki 全文搜索
- 02创建、编辑、追加和恢复页面
- 03管理评论与附件
- 04读取和修改动态表格
- 05类型化架构与工具安全注释
- 06服务端只读模式
适用场景
- 01在 Yandex Wiki 中查找相关页面
- 02更新文档并添加评论
- 03管理 Wiki 表格中的行与列
- 04允许读取,同时禁用 Agent 写入
MCP 相关
该 MCP 服务通过类型化工具开放 Yandex Wiki 搜索、页面、评论、附件和表格操作。它支持 stdio 与 Streamable HTTP 传输;只读模式会在注册时移除写入工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
English | Русский

将 Claude、Cursor、Windsurf 或任意 MCP 客户端连接到 Yandex Wiki:全文搜索、 页面、评论、附件和动态表格(“网格”)——共 33 个工具,并提供类型化模式。
非官方项目,与 Yandex 无关,也未获其认可。
- 🔍 全文搜索整个 Wiki——使用与 Wiki 网页搜索栏相同的后端,每次查询最多返回 50 条结果
- 📄 完整的页面生命周期——创建、更新、追加(顶部 / 底部 / 锚点)、克隆、删除(附恢复令牌)、评论、文件上传
- 📊 动态表格(网格)——11 个写入工具:行、列、单元格、复制、排序
- 🔒 服务端只读模式——
WIKI_READ_ONLY=true会直接取消注册写入工具,因此 Agent 无法绕过该限制 - 🧩 类型化工具接口——每个工具都提供输入 JSON 模式和安全注解(只读 / 破坏性 / 幂等提示);除
page_read_attachment外,每个工具也都提供输出模式。该工具会返回原生图像或资源块 - 🐳 可在任何环境运行——桌面客户端使用 stdio,团队使用 streamable-http + Docker(可选多用户 OAuth)
快速开始
- 获取具有 Wiki 访问权限的 Yandex OAuth 令牌(官方指南)和组织 ID。
- 安装到你的客户端:
Claude Desktop 徽章会下载最新版本的 .mcpb 捆绑包——
双击即可由 Claude Desktop 安装服务,并提示输入令牌
和组织 ID(必须安装 uv)。
Claude Desktop / Windsurf / 任意 JSON 配置客户端(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(无需 Python)
{
"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"}
}
}
}
提示
建议从
WIKI_READ_ONLY=true开始——服务甚至不会注册写入工具。 确认可以信任你的 Agent 进行编辑后,再将其改为false。
- 向你的 Agent 提问——见下文。
需要旧版 MCP SDK(1.x)?
该服务基于 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"
能做什么
“帮我们找出入职文档,并总结关键步骤。”
“我们有哪些关于事件响应的资料?打开最相关的页面。”
“创建页面
team/weekly-notes,并附上今天的站会摘要。”“在值班轮班表中添加一行:alice,下周。”
“将这份 PDF 上传到项目页面,并在底部添加链接。”
“删除草稿页面,但保留恢复令牌,以防我改变主意。”
工具
共有 33 个工具。设置 WIKI_READ_ONLY=true 后,所有写入工具都会消失。
搜索与读取(10)
| 工具 | 功能 |
|---|---|
page_search | 在整个 Wiki(页面和文件)中进行全文搜索,按相关性排序,并为每条结果提供文本摘录;支持服务端筛选,并可在 highlight 模式下通过游标翻阅约 100 条结果(其他模式下单次调用最多 50 条) |
page_get | 按 page_id 或 slug 获取页面(也接受完整 Wiki URL) |
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 会作为原生图像块传递,由具备视觉能力的客户端渲染;文本会作为文本传递(包括 SVG:它是 XML,而视觉 API 无法解码图像块,这会导致宿主的下一次调用失败);其他二进制文件则作为 Base64 数据块传递。格式由文件的魔数决定,而非线路声明的类型。为保护模型的上下文窗口,内容大小上限为:文本/二进制文件 128 KiB,图像 2 MiB;超过上限时会拒绝读取,并提示使用 page_download_attachment 或 page_get_attachments 返回的 download_url |
page_get_grids | 列出附加到页面的表格(支持 fetch_all) |
grid_get | 按 grid_id 获取表格,并支持行、列和修订版本筛选 |
user_get_current | 查询当前用户身份——username 和 home_cluster(调用者个人分区的 slug) |
页面:写入(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 | 分块上传本地文件并将其附加到页面——仅在 TRANSPORT=stdio 且关闭 OAuth 时注册:通过 HTTP 上传时,“本地”指的是服务端文件系统,而非调用者的文件系统 |
page_download_attachment | 将附件下载到本地文件——流式写入磁盘,不受大小限制,内容不会进入对话。采用原子方式写入(.part → fsync → 重命名);除非明确要求,否则不会覆盖文件;文件权限与普通写入相同(0666 & ~umask,绝不会设为可执行);替换文件时会保留被替换文件自身的权限模式。确保重命名操作在崩溃后仍持久化的目录 fsync,以及权限模式继承,仅适用于 POSIX。与 page_upload_attachment 一样,仅限 stdio |
表格:写入(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 年 7 月至 8 月查阅的替代方案文档和已发布代码核实的信息;
官方托管服务的工具列表于 2026-08-11 从 mcp.wiki.yandex.net 实时获取
(wiki-mcp-server 1.28.1)。
| yandex-wiki-search-mcp | Yandex 官方 MCP(托管) | ya-yandex-wiki-mcp | slartus/mcp-yandex-wiki | ya-wiki-mcp | |
|---|---|---|---|---|---|
| 全文搜索 | ✅ 最多 50 条结果,服务端筛选 + 高亮 | ❌ 无搜索工具 | ❌ | ✅ 最多 10 条结果 | ❌ |
| 页面:创建 / 更新 / 追加 / 删除 + 恢复 | ✅ 全部支持,另有通过文本替换进行的部分编辑(page_edit) | 部分支持 — 不支持追加 / 恢复;支持通过文本替换进行的部分编辑 | ✅ 全部支持 | 部分支持 — 不支持追加 / 恢复 | 部分支持 — 不支持恢复 |
| 页面:克隆为新 slug | ✅ page_clone | ❌ | ❌ | ❌ | ✅ |
| 表格:写入工具 | ✅ 11 个 | ✅ 12 个,包括列更新 + 行固定 / 颜色 | ✅ 11 个 | ❌ 只读 | ✅ 11 个,包括克隆 |
| 评论、附件上传 | ✅ 包括删除、行内图片预览和下载到磁盘 | 评论 ✅ / 上传 ❌(改为下载 + 预览) | ✅ | ❌ | ❌ |
| 服务端只读模式 | ✅ | ❌ 将每位用户的令牌粘贴到静态标头中,不支持 OAuth 流程 | ✅ | ❌ | ❌ |
| 类型化输出架构 + 工具注释 | ✅ | ❌ | ❌ | ❌ | ❌ 工具返回纯文本 |
| YFM 辅助功能 | ✅ 语法速查表资源 + 写入工具中的 yfm_warnings | ❌ | ❌ | ❌ | ✅ Markdown→YFM 转换器 + 页面树缓存、提示词模板 |
| Docker / PyPI / MCP Registry | ✅ / ✅ / ✅ | — 托管服务,闭源,无需安装 | ✅ / ✅ / ✅ | ❌ 手动安装 | ❌ / ✅ / ❌ |
| HTTP 部署的多用户 OAuth | ✅ | ❌ 每位用户的令牌都要粘贴到静态标头中,不支持 OAuth 流程 | ✅ | ❌ | ❌ |
另有一些值得了解的方案:
- best-doctor/mcp-yandex-wiki(Python)— 创建 / 更新页面并读取页面;另有独立的
-ro只读入口;不支持删除 / 恢复、表格或搜索;仅提供 PyPI - brekhov-ilya/yandex-wiki-mcp(npm)— 页面读 / 写 / 移动,表格只读;支持交互式 PKCE 令牌流程并自动刷新,不支持全文搜索
- n-r-w/yandex-mcp(Go)— 在同一服务中整合 Yandex Tracker + Wiki,按设计为只读(5 个 Wiki 读取工具),不支持搜索;仅通过
yc命令行获取 IAM 令牌进行身份验证 — 不支持 Yandex OAuth 令牌 - bim-ba/ycli(Python)— 一套整合 Tracker + Wiki + Forms 的工具包:包含 CLI、Python SDK、Claude Code 插件,以及 Wiki 功能涵盖 42 个
wiki_*工具的 MCP 服务(15 个读取 / 27 个写入,带注释,并提供--read-only标志);无全文搜索工具,附件下载仅支持 CLI/SDK
截至 2026 年 8 月,只有本项目(最多 50 条结果)和 slartus(最多 10 条)支持全文搜索 — Yandex 自己的托管服务并未提供搜索工具 — 而搜索、表格写入、服务端只读模式和类型化架构的组合,是本项目独有的。
本项目是 ya-yandex-wiki-mcp 的分支,并以 slartus/mcp-yandex-wiki 的研究成果为基础 — 请参阅致谢。
全文搜索
page_search 封装了 POST /v1/search 端点——与 Wiki 网页搜索栏使用同一后端。该 API 一直未公开,直到 Yandex 于 2026 年 8 月发布了
API 参考。先搜索,再通过结果的 slug 用 page_get 打开页面。
- 两种传输模式。默认模式:单次调用最多返回 50 条结果(
limit会被限制在 1–50 之间;API 不接受其他值),且不支持分页——响应中的游标始终为null。设置highlight=true时:每页最多返回 10 条结果,不受limit影响;匹配内容会用<em>包裹,cursor(在next_cursor中原样返回的页码)最多可遍历约 100 条结果。如果results为空,或非空页面的next_cursor为null,则表示结果集结束——到达末尾后,next_cursor会在空页面上继续递增,因此它本身并不表示“还有更多结果”。 - 筛选条件在服务端、应用 limit 之前执行——筛选后的搜索不会因此漏掉匹配项:
slug_prefix(分区筛选,支持tech-doc/ml等深层前缀)、result_type(page/file)、authors(通过uid/cloud_uid指定页面所有者——user_get_current可提供你自己的标识,让“查找我关于 X 的页面”只需两次调用),以及created_between/modified_between日期范围(必须提供起止边界——API 不接受开放范围)。 - 支持带引号的
"exact phrase"查询;page结果会返回绝对的https://wiki.yandex.ru/...链接,file结果会返回直接下载链接。 content是约 510 个字符的摘录,不是页面内容,也不是摘要:摘录取自匹配内容所在的位置,其中不一定包含查询词;其中的换行和制表符是页面自身的排版(表格单元格以制表符分隔),而不是片段之间的分隔符。传入highlight=true可用<em>标签包裹匹配内容。回答相关问题前,请先用page_get阅读页面。file结果的content为空。
遍历树结构
page_get_descendants 会将任意嵌套层级的子树作为一份由 {id, slug} 组成的扁平列表返回。传入 from_root=true 而不是 page_id/slug,即可遍历整个 Wiki——当不知道起始 slug 时,可用这种方式进入,因此搜索并非唯一入口。知道分区 slug 时,优先使用它:Wiki 的页面数量可达数千,而 fetch_all 达到约 500 项的上限后会停止,并返回 truncated: true。
更多已验证的 API 行为(作用域、403 语义、错误封装、限制):docs/api-notes.md。
配置
| 变量 | 必填 | 默认值 | 描述 |
|---|---|---|---|
WIKI_TOKEN | 两者之一 | — | Yandex OAuth 令牌(两者都设置时优先使用) |
WIKI_IAM_TOKEN | — | IAM 令牌(Yandex Cloud 组织) | |
WIKI_ORG_ID | 两者必须且仅设置一个 | — | Yandex 360 组织 ID(X-Org-Id) |
WIKI_CLOUD_ORG_ID | — | Yandex Cloud 组织 ID(X-Cloud-Org-Id) | |
WIKI_READ_ONLY | 否 | false | true 会在服务端禁用所有写入工具 |
TRANSPORT | 否 | stdio | stdio | sse | streamable-http |
HOST / PORT | 否 | 127.0.0.1 / 8000 | 仅用于 HTTP 传输。Docker 镜像会设置 HOST=0.0.0.0,以便通过已发布的端口访问;原生运行时,仅在需要向其他机器提供服务时设置此项 |
MCP_ALLOWED_HOSTS | 否 | 未启用 OAuth 时为环回地址 | 仅用于 HTTP 传输:MCP 端点响应的逗号分隔 Host 名称,每个名称可带端口,也可不带(wiki.example.com,mcp-wiki:8000)。未设置时,未启用 OAuth 的服务只响应 localhost、127.0.0.1 和 [::1],以防网页通过 DNS 重绑定驱动该服务;请列出客户端使用的其他名称——Compose 服务名称、局域网地址、反向代理的主机名——否则会收到 421。设置列表后会取代默认的环回地址,因此如果本地客户端仍需连接,请在列表中保留 localhost 和 127.0.0.1。启用 OAuth 时,除非设置此项,否则不会进行任何检查。* 会关闭检查 |
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 | page_search 结果中绝对页面链接的基址 |
WIKI_AUTH_SCHEME | 否 | OAuth | WIKI_TOKEN 的 Authorization 标头方案(OAuth | Bearer) |
WIKI_MAX_RETRIES | 否 | 2 | 对连接断开以及请求安全可重试时出现的 429/502/503/504 进行重试——GET 请求(附件下载除外)、搜索和上传分块;超时不重试。0 可禁用重试。因 429 被拒绝的写入不会重试:错误会说明操作未执行,可以重新发送 |
TOOL_RESULT_TEXT | 否 | pretty | 结构化工具结果的文本副本:pretty(indent=2)| compact(单行,文本块缩短 10-30%)| none(仅结构化结果——请确认客户端会优先呈现 structuredContent) |
多用户 OAuth + Redis(仅限 HTTP 部署)
设置 OAUTH_ENABLED=true 后,服务将成为 OAuth 提供方:每位 MCP 用户都使用自己的 Yandex 账号授权,向 Wiki API 发出的请求也会使用其个人令牌。在此模式下,page_upload_attachment 和 page_download_attachment 不会注册;任何 HTTP 传输也不会注册这两个工具:它们会在服务运行的机器上读写文件,而通过 HTTP 访问时,那并非调用方的机器。
| 变量 | 默认值 | 描述 |
|---|---|---|
OAUTH_ENABLED | false | 启用 OAuth 提供程序 |
OAUTH_STORE | memory | memory | redis |
OAUTH_SERVER_URL | https://oauth.yandex.ru | Yandex OAuth 服务 |
OAUTH_USE_SCOPES | true | 授权期间请求 Wiki 作用域 |
OAUTH_CLIENT_ID / OAUTH_CLIENT_SECRET | — | 你的 Yandex OAuth 应用凭据 |
OAUTH_REGISTRATION_IDLE_SECONDS | 2592000 (30 days) | 动态注册的 MCP 客户端未使用时保留的时长。根据协议设计,注册无需身份验证,因此若不设置过期时间,每项注册都会永久保留。无人登录的注册会在注册这么长时间后被删除;每次登录或令牌刷新都会重新开始计时,从所签发令牌过期时算起:31 天的刷新令牌,或 Yandex 签发的有效期更长的访问令牌(通常为一年)。客户端密钥不会自行过期(client_secret_expires_at: 0)。如果客户端返回时其注册已被删除,就必须重新注册:基于 TypeScript MCP SDK 的客户端(包括 mcp-remote)会自行完成此操作;MCP Python SDK 客户端则不会,需要清除其已存储的客户端信息。留空会禁用过期;如果某项注册是在设置此项的情况下保留的,则会在下次登录或刷新时失去过期时间。以前的名称为 OAUTH_CLIENT_SECRET_EXPIRY_SECONDS,目前仍会读取 |
MCP_SERVER_PUBLIC_URL | — | 此服务的公共 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 连接 |
为每位用户选择组织。 在 OAuth 模式下,WIKI_ORG_ID / WIKI_CLOUD_ORG_ID 为可选项,
因为每个请求都可以指定自己的组织:在客户端连接的 MCP 服务 URL 后追加 ?orgId=...(或
?cloudOrgId=...)。查询参数优先于服务级设置,因此一次部署可以为多个组织提供服务。如果请求中
两者都没有,工具调用会失败,并提示这两个选项——如果所有用户共用一个组织,可将
环境变量设为默认值。
完整的注释列表请参阅 .env.example,Redis 基础配置请参阅 compose.yaml。
部署
%%{init: {"flowchart": {"wrappingWidth": 300}}}%%
flowchart LR
L["Local MCP client<br/>Claude / Cursor /<br/>Windsurf / VS Code<br/>single user"]
T["Team MCP clients<br/>multi-user,<br/>optional OAuth"]
S["yandex-wiki-search-mcp"]
W["Yandex Wiki API"]
R[("Redis<br/>optional OAuth<br/>token store")]
L -- "stdio" --> S
T -- "streamable-http" --> S
S --> W
S -.-> R
通过 Docker 运行 HTTP 服务(MCP 端点为 http://localhost:8000/mcp):
docker run --env-file .env -e TRANSPORT=streamable-http -p 127.0.0.1:8000:8000 \
--log-opt max-size=10m --log-opt max-file=3 \
ghcr.io/dlbolshov/yandex-wiki-search-mcp:latest
警告
如果未设置
OAUTH_ENABLED=true,HTTP 端点本身不进行身份验证:任何能访问该端口的人都可以使用你的WIKI_TOKEN。示例仅在回环地址上发布端口,因此其他机器无法访问;服务也只响应回环地址的Host名称,因此网页无法通过将自身名称重新绑定到127.0.0.1来访问服务(参见MCP_ALLOWED_HOSTS)。 这两者都不属于身份验证:本机上的任何进程仍可使用该服务。只有在通过身份验证的反向代理后,或启用 OAuth 后,才应扩大访问范围。
说明
服务不会写入自己的日志文件——所有内容都会写入 stderr,而 Docker 默认的
json-file驱动会将其存储起来,且不设大小限制。 上方的--log-opt标志会限制日志大小;仅当你的守护进程已设置默认限制时才可移除这些标志。
Docker Compose
services:
mcp-wiki:
image: ghcr.io/dlbolshov/yandex-wiki-search-mcp:latest # or: build: .
ports:
- "127.0.0.1:8000:8000"
environment:
- WIKI_TOKEN=${WIKI_TOKEN}
- WIKI_ORG_ID=${WIKI_ORG_ID}
- TRANSPORT=streamable-http
# Only if another container reaches it as http://mcp-wiki:8000:
# - MCP_ALLOWED_HOSTS=localhost,127.0.0.1,mcp-wiki
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
如需使用 Redis 支持的 OAuth 存储,请以现有的 compose.yaml 为基础。
- 只读在服务端强制执行:设置
WIKI_READ_ONLY=true后,不会注册写入工具——困惑的 Agent 无从调用。 - 使用纯令牌的 HTTP 未经身份验证:使用 HTTP 传输且关闭 OAuth 时,任何能访问该端口的调用方都将以
WIKI_TOKEN所有者的身份行事——该令牌能够访问的任何组织都不例外,因为端点上的?orgId=/?cloudOrgId=会覆盖已配置的组织。请仅在环回地址上使用,或置于可进行身份验证的代理之后,或者启用 OAuth。仅使用环回地址无法阻止这样一种网页:它将自己的名称重新绑定到127.0.0.1。因此,服务也只响应MCP_ALLOWED_HOSTS中列出的Host名称——默认仅限环回地址。本地文件系统工具(page_upload_attachment、page_download_attachment)仅通过 stdio 注册,因此 HTTP 服务绝不会代替调用方读写自己的磁盘。 - Wiki API 不会强制执行 OAuth 范围(Yandex 记录这些范围后,于 2026-08-11 再次验证——参见 docs/api-notes.md):
wiki:read令牌仍然可以写入,因此请使用只读模式,不要依赖令牌范围。 - 密钥始终使用
SecretStr——在日志和repr中会被遮蔽;DEBUGHTTP 日志绝不包含标头或正文。 - 删除可恢复:
page_delete会返回一个用于page_recover的恢复令牌。 - 共享
.env中无关的键会被忽略,但拼错的设置(WIKI_READ_ONL)会导致服务停止,而不是悄悄回退到你未选择的默认值。
开发
uv sync --dev
uv run yandex-wiki-search-mcp # run locally
uv run pytest # tests
uv 会从 Python 3.11–3.14 中选择解释器,这是 uv.lock 包含 wheel 的版本范围
(.python-versions);如果机器上没有合适的解释器,uv 会下载一个。
提交前,请运行 CONTRIBUTING.md 中列出的完整验证流程。 服务的架构——各层、代码索引、测试接缝、CI 和发布流程——见 docs/architecture.md。 已验证的 API 行为和探测脚本见 docs/api-notes.md。
Wiki API 会发生变化(搜索端点曾在未公开文档时悄然更改过一次契约)——scripts/contract_sweep.py 会针对实时组织重新验证每个客户端方法,并报告验证不匹配和未声明的键:
uv run python scripts/contract_sweep.py users/YOU/contract-sweep # live contract checks
uv run python scripts/contract_sweep.py users/YOU/contract-sweep --cleanup # remove fixtures
在 .env 中设置 SWEEP_SLUG=users/YOU/contract-sweep(参见 .env.example)后,可以省略 slug 参数;服务本身绝不会读取该变量。
配置好 DRIFT_* 仓库密钥后,API drift check 工作流会每周运行相同的扫描
(说明见工作流文件头);未配置这些密钥时,工作流会静默跳过。
致谢
本项目最初是 APonkratov/yandex-wiki-mcp
(ya-yandex-wiki-mcp)的分支,原项目由 Aleksandr Ponkratov 开发,是一个出色且经过充分测试的 Yandex Wiki API Python MCP 服务,采用 Apache-2.0 许可证。此后,本项目发展出了自己的功能——全文搜索、全部 33 个工具的类型化输入架构和 32 个工具的输出架构、YFM 助手、游标清空、多用户 OAuth,以及针对 API 的实时契约扫描——同时保留了原始版权和许可证(参见 LICENSE 和 NOTICE)。
全文搜索背后的构想和关键 API 发现来自
slartus/mcp-yandex-wiki(JavaScript,MIT):
它最早发现了当时尚未公开文档的 POST /v1/search 端点(Yandex 直到 2026 年 8 月才发布其参考文档),并报告了 OAuth 范围不会被强制执行。项目没有采用其任何代码,只借鉴了相关发现和构想,并在此独立地针对实时组织重新验证和扩展。
商标
“Yandex”和“Yandex Wiki”是 YANDEX LLC 的商标。这是一个由社区构建的非官方项目:与 Yandex 无关联,也未获得其赞助或认可——使用这些名称仅用于说明该服务连接的是哪个服务。此 Logo 为原创标识,既不复刻 Yandex Wiki,也不复刻 MCP 品牌形象(设计说明)。
mcp-name: io.github.dlbolshov/yandex-wiki-search-mcp
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。