mcpField
Y
yandex-wiki-search-mcp

yandex-wiki-search-mcp

本地服务
github.com/dlbolshov记忆与知识72 周前更新

关于 yandex-wiki-search-mcp

yandex-wiki-search-mcp 将 MCP 客户端连接到 Yandex Wiki,以搜索和管理内容。其类型化工具覆盖页面、评论、附件和动态表格,并可启用服务端只读模式。

主要功能

  1. 01带筛选条件的 Wiki 全文搜索
  2. 02创建、编辑、追加和恢复页面
  3. 03管理评论与附件
  4. 04读取和修改动态表格
  5. 05类型化架构与工具安全注释
  6. 06服务端只读模式

适用场景

  1. 01在 Yandex Wiki 中查找相关页面
  2. 02更新文档并添加评论
  3. 03管理 Wiki 表格中的行与列
  4. 04允许读取,同时禁用 Agent 写入

MCP 相关

该 MCP 服务通过类型化工具开放 Yandex Wiki 搜索、页面、评论、附件和表格操作。它支持 stdio 与 Streamable HTTP 传输;只读模式会在注册时移除写入工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"yandex-wiki-search": {
"command": "uvx",
"args": [
"yandex-wiki-search-mcp"
]
}
}
}
启动命令uvx yandex-wiki-search-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiyandex-wiki-search-mcp1.6.0
ocighcr.io/dlbolshov/yandex-wiki-search-mcp:1.6.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

English | Русский

yandex-wiki-search-mcp 徽标

Yandex Wiki Search MCP

yandex-wiki-search-mcp MCP server PyPI Python CI codecov License Docker

演示:通过 MCP 搜索 Wiki 页面并生成摘要

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

快速开始

  1. 获取具有 Wiki 访问权限的 Yandex OAuth 令牌(官方指南)和组织 ID。
  2. 安装到你的客户端:

添加到 Cursor 在 VS Code 中安装 添加到 LM Studio 在 Claude Desktop 中安装

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。

  1. 向你的 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-mcpYandex 官方 MCP(托管)ya-yandex-wiki-mcpslartus/mcp-yandex-wikiya-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否falsetrue 会在服务端禁用所有写入工具
TRANSPORT否stdiostdio | 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.netWiki API 端点
WIKI_WEB_BASE_URL否https://wiki.yandex.rupage_search 结果中绝对页面链接的基址
WIKI_AUTH_SCHEME否OAuthWIKI_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_ENABLEDfalse启用 OAuth 提供程序
OAUTH_STOREmemorymemory | redis
OAUTH_SERVER_URLhttps://oauth.yandex.ruYandex OAuth 服务
OAUTH_USE_SCOPEStrue授权期间请求 Wiki 作用域
OAUTH_CLIENT_ID / OAUTH_CLIENT_SECRET—你的 Yandex OAuth 应用凭据
OAUTH_REGISTRATION_IDLE_SECONDS2592000 (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_SIZElocalhost / 6379 / 0 / — / 10Redis 连接

为每位用户选择组织。 在 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&lt;br/&gt;Claude / Cursor /&lt;br/&gt;Windsurf / VS Code&lt;br/&gt;single user"]
    T["Team MCP clients&lt;br/&gt;multi-user,&lt;br/&gt;optional OAuth"]
    S["yandex-wiki-search-mcp"]
    W["Yandex Wiki API"]
    R[("Redis&lt;br/&gt;optional OAuth&lt;br/&gt;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 中会被遮蔽;DEBUG HTTP 日志绝不包含标头或正文。
  • 删除可恢复: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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。