mcpField
P
Python Docs MCP Server

Python Docs MCP Server

本地服务
github.com开发工具91 周前更新

关于 Python Docs MCP Server

Python Docs MCP Server 为编码 Agent 提供 Python 标准库官方文档的本地检索,适合需要核对符号、章节和版本差异的开发者。它通过本地索引返回指定版本的相关片段,而非整页内容。

主要功能

  1. 01按符号、模块或文本搜索
  2. 02检索文档页面和章节
  3. 03按已索引的 Python 版本查询
  4. 04比较标准库符号的版本变化
  5. 05浏览各版本 What's New
  6. 06本地只读索引与离线查询

适用场景

  1. 01核对 Python 标准库 API 签名和行为
  2. 02查找特定 Python 版本的文档
  3. 03比较不同版本中的标准库变化
  4. 04为编码 Agent 提供精简的官方文档片段

MCP 相关

该 MCP 服务提供七种只读工具,用于搜索和读取官方 Python 文档、查看已索引版本及比较版本。查询使用本地索引;索引构建时会下载文档源。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"ayhammouda-python-docs": {
"command": "uvx",
"args": [
"python-docs-mcp-server"
]
}
}
}
启动命令uvx python-docs-mcp-server

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

安装包
pypipython-docs-mcp-server0.4.0

工具

还没有获取到工具列表

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

详细介绍

python-docs-mcp-server

对于编写 Python 的 AI 编码 Agent,python-docs-mcp-server 是权威的 Python 标准库参考:符号、章节和版本精准无误;离线运行,始终免费,始终采用 MIT 许可,节省令牌。

CI Security Audit CodeQL OpenSSF Scorecard python-docs-mcp-server MCP server MCP Registry License: MIT Python 3.12+ No API Keys Official Python Docs

当 Agent 需要查询 asyncio.TaskGroup 的签名、pathlib.Path 的语义,或了解 3.12 版本中的变化时,它就能派上用场——无需抓取网页,无需托管 API,也不会像向量存储那样虚构章节锚点。它只会从 docs.python.org 中检索索引内容,按符号或查询返回,并限定为你实际使用的版本。

为什么要构建这个工具

上下文长,不等于上下文好用。Lost in the Middle 研究(Liu 等人,2023 年)发现,模型难以利用长输入中间部分埋藏的相关信息。将整页文档粘贴给模型,容易导致这一问题。只返回确切的符号、章节和版本,就能让答案处于简短且信息密集的上下文中。

通用文档检索不太适合回答 Python 标准库问题:

  • asyncio.TaskGroup 应解析到实际符号,而不是模糊的页面匹配结果
  • Python 版本很重要(3.12 和 3.13 的内容并不总是相同)
  • 只需一个章节就能回答问题时,抓取整页会浪费令牌
  • 官方文档具有权威性,但没有以 MCP 服务的形式提供

此服务在本地为官方文档建立索引,并提供一组简洁的 MCP 工具,用于查询和检索章节。

为什么使用它

  • 无需管理 API 密钥
  • 查询针对本地索引运行,而非托管的文档 API
  • 结果来自官方 Python 文档
  • 此服务在运行时为只读
  • 在严格的环境中,需要审核的依赖项更少

你将获得

  • 通过 Python objects.inv 查找符号
  • 检索页面和章节,并支持截断和分页
  • 本地 SQLite + FTS5 索引;运行时不会抓取网页
  • 返回你为每个 Python 版本建立索引的结果
  • 七种只读 MCP 工具

快速示例

提示词

asyncio.TaskGroup 在 Python 3.13 中有什么作用?

典型流程

  1. search_docs("asyncio.TaskGroup", kind="symbol", version="3.13")
  2. 使用最佳匹配结果返回的 slug 和锚点调用 get_docs(...)

结果

模型会获得匹配的符号和相关文档章节,而非整页内容。

30 秒演示

向你的 MCP 客户端提问:

在 Python 3.13 中,我该如何使用 asyncio.TaskGroup?它与旧版 asyncio 模式相比有哪些变化?

如果配置正常,客户端应针对这个确切符号使用 search_docs, 然后使用 get_docs 获取匹配章节。它不会返回通用网页搜索结果或 整页文档,而是会获取适用于所请求 Python 版本的官方标准库文本, 并截取与问题相关的章节。

安装

直接使用 uvx 运行:

uvx python-docs-mcp-server --version

或者使用 pipx 安装一次:

pipx install python-docs-mcp-server

如果已安装 uv,但 uv 命令不在 PATH 中,请重新打开 Shell,或在本地贡献者命令中使用 python -m uv ... 作为备用方式。

搜索结果行为

对于带有显式版本的 kind="auto",如果搜索结果非空且还有剩余结果位, 当提示词中包含该版本下一个已知的限定标识符时,搜索结果可以追加一个 精确的索引目标。原有命中项、摘要、分数、顺序和备注均会保留。完整结果、 有歧义的标识符、其他类型以及未指定版本的查询均不变;现有的空结果回退 行为也不变。规范位置会去重,包括索引别名。

只有当使用 Pydantic 的紧凑 model_dump_json() 序列化的完整拟议响应 不超过 8000 UTF-8 字节时,才会追加该结果。这不是全局搜索上限:超出 大小限制的原始响应保持不变。它与限制内容字符数的 get_docs(max_chars=8000) 不同。

首次运行

构建本地文档索引:

uvx python-docs-mcp-server build-index --versions 3.10,3.11,3.12,3.13,3.14

如果你已持久安装软件包,可以省略 uvx 前缀:

python-docs-mcp-server build-index --versions 3.10,3.11,3.12,3.13,3.14

首次构建会下载 Python 的 objects.inv 文件,克隆 CPython 文档源码, 运行 sphinx-build -b json,并将 SQLite 索引写入本地缓存。整个过程可能需要几分钟。

Python 3.15 文档(选择加入)

源码固定的文档目标包括 Python 3.10–3.15。若要将 3.15 与 3.14 一同建立索引,请显式运行:

uvx python-docs-mcp-server build-index --versions 3.14,3.15

构建会用所请求的版本替换本地索引;请包含所有想要保留的版本。上面的 首次运行示例有意保持不变。构建器仍会将最高的所请求版本设为索引默认版本; 添加此目标不会在现有索引中选择 3.15。未指定版本的 get_docs 会使用已配置或检测到的默认版本,而未指定版本的搜索会跨已索引版本进行。传入 version="3.15" 可获取仅针对 3.15 的回答。list_versions 会报告实际索引中的版本,而不是所有构建目标;显式指定未建立索引的版本会引发错误,不会回退到较旧的文档。

这是文档覆盖范围,并不意味着该服务能在 Python 3.15 上运行,也不表示已使用某个指定的 MCP 客户端进行测试。成功构建后,查询仍为离线且只读。在建立索引之前,请直接参阅官方 3.15 文档。

3.15 目标使用 CPython 标签 v3.15.0、提交 d220409a13b77de7a6c30abe16ea90db01528edc 和 Sphinx 8.2.3。 有关显式版本和比较示例,请参阅集成检查。

配置 MCP 客户端

Claude Code

此仓库包含项目范围的 .mcp.json,供支持已纳入仓库的 MCP 服务配置的客户端使用。它指向已发布的软件包:

{
  "mcpServers": {
    "python-docs": {
      "type": "stdio",
      "command": "uvx",
      "args": ["python-docs-mcp-server"]
    }
  }
}

在预期文档查询返回基于语料库的结果之前,请先使用上面的首次运行命令构建本地文档索引。

Claude Desktop

将以下内容添加到你的 Claude Desktop 配置文件中:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Linux: ~/.config/Claude/claude_desktop_config.json

Windows: %APPDATA%\\Claude\\claude_desktop_config.json

{
  "mcpServers": {
    "python-docs": {
      "command": "uvx",
      "args": ["python-docs-mcp-server"]
    }
  }
}

编辑配置文件后,重新启动 Claude Desktop。

Cursor

将以下内容添加到你的 Cursor MCP 设置中(项目中的 .cursor/mcp.json 或全局设置):

{
  "mcpServers": {
    "python-docs": {
      "command": "uvx",
      "args": ["python-docs-mcp-server"]
    }
  }
}
Codex

将以下内容添加到 .codex/config.toml:

[mcp_servers.python-docs]
command = "uvx"
args = ["python-docs-mcp-server"]

质量检查

  • CI 会在 macOS 和 Linux 上,使用 Python 3.12 和 3.13 运行 ruff、pyright 和 pytest
  • 基于子进程的 stdio 和冒烟测试会覆盖 MCP 协议管道
  • 打包测试会检查 wheel 内容和 CLI 入口点
  • 检索回归测试会覆盖精确符号匹配、版本行为、缺失符号、截断和本地版本默认值
  • 手动 MCP QA 流程见 .github/INTEGRATION-TEST.md,使用 MCP Inspector 执行本地检查,并使用 Claude/Cursor 执行真实客户端检查

贡献者命令和验证步骤见 CONTRIBUTING.md。

工具

该服务目前提供七个 MCP 工具:

工具描述
search_docs按查询搜索 Python 标准库文档。支持符号查找(asyncio.TaskGroup)、模块搜索(json)和自由文本搜索。返回按 BM25 评分排序的结果及摘要摘录。
get_docs按 slug 和可选锚点检索特定文档页面或章节。返回受预算限制并经过截断和分页的 Markdown 内容。检索结果会根据 Python 文档版本和请求标识缓存在磁盘上。
lookup_package_docs查询 PyPI 官方软件包元数据,并返回软件包声明的文档、主页和源代码 URL。这是受控的 PyPI 元数据查询,不是通用网页搜索。
list_versions列出所有已索引的 Python 版本及其元数据。
detect_python_version检测用户本地的 Python 版本,并报告该版本是否已编入索引。
compare_versions对比两个已编入索引的版本之间的 Python 标准库符号差异。返回 `change=added
whatsnew_for_version浏览一个 Python 版本已编入索引的官方 What's New 页面中的非空章节。可选的 kind 用于按保守的标题层级类别筛选。start_index 和 max_sections 可对筛选结果分页;结构化响应上限为 20,000 个字符,截断的摘录会包含稳定锚点和后续调用 get_docs 的提示。规范标题和锚点保持不变;如果某个章节连同其元数据、非空索引文本及任何必要的续读提示都无法放入上限内,则会返回明确且有界的错误。页面大小可能会缩小,以确保摘录仍有可用内容。上限按模型 JSON 中的 Unicode 字符计数,不包括 MCP 信封。查询过程离线。

对于 kind="auto" 且显式指定了已编入索引的 version 的 search_docs,会先执行原有查找和全文搜索。如果两者都没有结果,服务会在提示词中查找带点号的 Python 标识符。该版本中恰好有一个已注册的不同标识符时,会启用符号查找回退;重复提及只计一次,未知标识符不计入。存在多个已知标识符时,结果为空。结果说明会标明回退匹配;这些匹配属于符号文档,并非对完整提示词的回答。显式指定的类型、未指定版本的搜索、非空结果和结果预算均保持不变。

为什么不使用 Context7 或通用文档检索?

如果你需要精确检索本地 Python 文档,而非广泛的网页搜索,请使用此服务:

  • 使用 Python 官方文档,而非抓取的镜像或摘要
  • 从 objects.inv 精确解析符号
  • 支持 Python 3.10 至 3.14 的版本感知结果
  • 检索章节,而非转储完整页面
  • 通过 lookup_package_docs 获取 PyPI 声明的文档、主页和源代码链接
  • 本地只读运行,无需 API 密钥

对于第三方库、任意网页或框架研究,请使用 Context7 或通用文档抓取工具。此服务并非通用文档搜索引擎,而是面向 AI 编码 Agent 的专用标准库检索工具。

已检索文档缓存

get_docs 响应会在 MCP 客户端或服务重启后,继续缓存在平台缓存目录中:

<platform cache dir>/mcp-python-docs/retrieved-docs-cache.sqlite3

缓存会保存已完成的 get_docs 结果,缓存键由解析后的 Python 文档版本和请求标识(slug、可选的 anchor、max_chars 和 start_index)组成。缓存未命中时,会使用常规的本地索引检索路径,然后写入结果。

缓存条目还会关联到本地 index.db 文件的指纹(路径、大小和修改时间戳)。如果重建或替换本地文档索引,旧条目会自动忽略。可以安全地删除 retrieved-docs-cache.sqlite3;这会移除缓存的检索结果,而不是文档索引。

PyPI 软件包文档查询

lookup_package_docs 会查询官方 PyPI JSON API,其文档位于 https://docs.pypi.org/api/json/(GET /pypi/<project>/json),并且只返回该软件包 PyPI 元数据中声明的来源:PyPI 项目 URL、 docs_url、home_page,以及允许列表中的 project_urls 标签,例如 Documentation、Homepage、Source 和 Repository。

该工具通过 trust_boundary="pypi-declared-metadata" 明确标示信任边界。它不会抓取网页、执行网页搜索,也不会悄悄回退到非官方的社区镜像。

诊断

检查本地环境:

uvx python-docs-mcp-server doctor

此命令会检查运行时 Python 版本、SQLite FTS5、缓存和索引路径、磁盘空间,以及 build-index 所需的 venv/ensurepip 支持。

验证现有索引:

uvx python-docs-mcp-server validate-corpus

故障排除

FTS5 不可用

如果你的 Python 构建不包含 SQLite FTS5:

Linux x86-64

Linux x86-64 用户可以安装可选的内置 SQLite 软件包:

pip install 'python-docs-mcp-server[pysqlite3]'

macOS / Windows / Linux ARM

从 python.org 安装 Python,或使用:

uv python install
Debian/Ubuntu 缺少 pythonX.Y-venv

如果 doctor 提示构建 venv 支持不可用,请安装与运行服务的 Python 次版本相同的 venv 软件包:

sudo apt install python3.12-venv

请将 3.12 调整为 doctor 显示的版本。如果没有此软件包, build-index 就无法创建用于构建 JSON 文档内容的一次性 Sphinx 环境。

从重命名前的 CLI 迁移

本项目早期开发快照使用的 PyPI 名称是 mcp-server-python-docs。已发布的 PyPI 项目名称是 python-docs-mcp-server。如果你的 MCP 客户端配置仍通过 uvx 引用旧名称, 就会看到 Package not found 错误,因为 uvx 根据 PyPI 名称解析项目。

将配置中的 args 从:

"args": ["mcp-server-python-docs"]

改为:

"args": ["python-docs-mcp-server"]

对于已经安装该软件包并通过 $PATH 按名称调用二进制文件的用户,wheel 仍会安装旧版 mcp-server-python-docs 控制台脚本。该脚本是一个别名,将在未来版本中移除。

uvx 缓存过期

如果 uvx python-docs-mcp-server 运行的是旧版本:

uvx --reinstall python-docs-mcp-server

或者清除 uv 缓存:

uv cache clean python-docs-mcp-server
Windows 上的 Claude Desktop(MSIX)

Windows 上以 MSIX 打包的 Claude Desktop 可能无法访问受限的 PATH。如果找不到 uvx,请在配置中指定完整路径:

{
  "mcpServers": {
    "python-docs": {
      "command": "C:\\Users\\YOU\\.local\\bin\\uvx.exe",
      "args": ["python-docs-mcp-server"]
    }
  }
}

将 YOU 替换为你的 Windows 用户名。使用 where uvx 查找确切路径。

重建后重启

运行 build-index 后,请重启 MCP 客户端,使其加载新的数据库文件。服务会在启动时以只读方式打开索引,运行期间不会重新加载。

在 Windows 上,如果索引文件被锁定,请在重建前关闭 MCP 客户端。

贡献者工作流

有关贡献者设置和验证,请参阅:

支持

已在 macOS 和 Linux 上测试。Windows 应该也能运行,但并未在每个版本中验证。

运行该服务需要 Python 3.12+。源码锁定的文档目标覆盖 Python 3.10 至 3.15;Python 3.15 需选择启用。可供查询的版本取决于构建索引时选择的文档版本。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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