PAYATHON 2026

如何配置 Claude Desktop 通过 MCP 查询 VS Code 文档?

技术老齐

可以通过通用 GitHub MCP server 搜索和读取 microsoft/vscode-docs,无需先开发索引服务。不过,@modelcontextprotocol/server-github 没有锁定仓库和目录的配置项,仅靠 claude_desktop_config.json 无法将访问范围严格限制在 docs/ 和 release-notes/。

如果只需要引导 Claude 查询这两个目录,可以在每次搜索时加入限定条件。要让服务端拒绝所有越界访问,则需要带路径校验的代理,或先克隆仓库,再通过 Filesystem MCP server 仅开放这两个本地目录。

搜索范围和访问权限的区别

做法能达到的效果
在提示词中要求只查指定目录引导模型选择工具参数
搜索时加入 repo:、path:过滤本次搜索结果
服务端校验仓库和路径拒绝范围外的工具调用
Filesystem server 配置允许目录限制该服务能够访问的本地路径

例如,搜索时加入 repo:microsoft/vscode-docs,不会阻止下一次 get_file_contents 请求读取其他仓库。旧版 GitHub server 的读取工具仍接受调用者传入的 owner、repo 和 path。读取工具源码

@modelcontextprotocol/server-github 是已经弃用的旧版参考实现,开发工作已转移到 GitHub 维护的 github/github-mcp-server。新接入应优先查看后者;已有环境仍可参考以下旧包配置。旧版弃用说明

旧版 GitHub server 的连接配置与搜索示例

在 Claude Desktop 的 claude_desktop_config.json 中加入以下配置。如果已经配置了其他 MCP server,请合并到现有的 mcpServers 对象中:

{
  "mcpServers": {
    "vscode-docs-github": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-github"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_GITHUB_TOKEN>"
      }
    }
  }
}

这是旧包文档给出的启动方式,用于启动进程并传入凭据,没有仓库或目录白名单。自行添加 allowedPaths、repository 等字段,也不会产生访问控制。旧版配置文档

配置文件通常位于:

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json

先安装 Node.js,并确认客户端能够找到 npx。保存配置后,完全退出并重新打开 Claude Desktop。如果出现 ENOENT,检查可执行文件路径和 MCP 日志。本地 MCP 接入指南

分别搜索两个目录

旧版 search_code 使用 q 和 per_page 参数。查询调试文档时,可以依次调用:

{
  "q": "debugging repo:microsoft/vscode-docs path:docs/ extension:md",
  "per_page": 5
}
{
  "q": "debugging repo:microsoft/vscode-docs path:release-notes/ extension:md",
  "per_page": 5
}

以上是工具调用参数,不应写入 claude_desktop_config.json。q 会传给 GitHub 的 /search/code REST API。搜索实现

该接口采用 GitHub 的 legacy code search 语法,不能直接照搬网页新版代码搜索中的所有表达式。分两次查询,便于分别检查两个目录的结果。path: 只能过滤搜索结果,不能替代精确的目录权限校验。GitHub API 搜索语法

得到文件路径后,再调用 get_file_contents:

{
  "owner": "microsoft",
  "repo": "vscode-docs",
  "path": "docs/editor/debugging.md"
}

这里的路径仅用于演示参数形式,实际读取时应使用搜索结果返回的路径。旧版工具还支持可选的 branch 参数。读取参数说明

可以给 Claude 设置以下工作指令:

查询 VS Code 文档时,先分别搜索 microsoft/vscode-docs 的 docs/
和 release-notes/,只查询 Markdown 文件。

先查看少量候选结果,再读取与问题直接相关的文件。
回答中注明文档路径和来源链接;不要批量读取整个目录。

这些指令可以引导查询流程,但无法强制限制访问范围。GitHub PAT 也不能为仓库内的两个目录设置独立的路径权限。如果只查询文档,不应额外授予写权限。

限制本地目录:克隆仓库并使用 Filesystem server

如果可以在本地保存一份文档,这个方案需要的配置较少。

先克隆仓库:

git clone --depth 1 https://github.com/microsoft/vscode-docs.git

然后只开放两个子目录。以下以 macOS 路径为例,使用时请替换为实际绝对路径:

{
  "mcpServers": {
    "vscode-docs-local": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/yourname/repos/vscode-docs/docs",
        "/Users/yourname/repos/vscode-docs/release-notes"
      ]
    }
  }
}

不要同时将整个仓库、用户主目录或它们的上级目录加入允许列表。

Filesystem server 会根据允许目录检查文件访问。其文档说明,客户端提供的 MCP Roots 会替换命令行配置的允许目录,因此启动后应调用 list_allowed_directories,确认最终生效的范围只有这两个目录。Filesystem server 目录控制说明

使用这个方案时,还需要注意两点:

  • search_files 按文件或目录的路径模式搜索,不提供 Markdown 正文全文检索。要按主题词搜索正文,需要额外接入检索工具。
  • 该 server 包含文件写入工具,开放目录并不等于只读。需要强制只读时,应配合操作系统权限、只读挂载,或使用只暴露读取工具的实现。Filesystem server 工具说明

本地副本需要定期更新,例如:

git -C /Users/yourname/repos/vscode-docs pull --ff-only

这些限制只适用于该 MCP server,不会同时限制 Claude 已连接的其他工具。

严格限制远程访问:增加服务端校验

如果必须始终读取远程仓库,并确保所有工具调用都只能访问指定目录,就需要使用支持这类访问策略的 server,或在通用 GitHub server 前增加代理。

可以只暴露两个工具,例如:

search_vscode_docs(query, limit)
read_vscode_doc(path)

这两个名称是自定义接口示例,不是标准 MCP 工具。实现时需要:

  1. 在服务端固定 owner=microsoft、repo=vscode-docs,不允许模型更换仓库。
  2. 读取前校验规范化后的仓库相对路径,只接受以 docs/ 或 release-notes/ 开头的 Markdown 文件。
  3. 拒绝路径穿越、范围外链接,以及可绕过校验的任意 URL 读取。
  4. 由服务端构造搜索限定条件,并再次检查返回路径,不能只信任模型提交的查询字符串。
  5. 只暴露搜索和读取能力,并限制结果数量及正文长度。

这层校验不需要向量数据库。初版可以复用 GitHub 搜索和文件读取 API,等到需要语义搜索、稳定的段落检索或更高查询频率时,再考虑全文索引或向量索引。

stdio 是客户端与本地进程之间的传输方式,与是否需要索引没有直接关系。通过 stdio 启动的 server 也可以在内部请求远程 GitHub API。

GitHub 当前维护的 server 支持 --read-only 和工具选择配置,可以减少不需要的能力,但这些选项无法将访问范围限定为这两个目录。GitHub server 工具配置

如何控制上下文占用

MCP 让模型可以按需获取文档,工具返回的正文仍会进入模型上下文。要避免一次返回过多内容,可以调整查询流程或服务端响应:

  • 搜索时先返回少量路径、标题和短片段,再读取相关文件。
  • 长文档按标题或段落读取。如果通用工具只能返回全文,可以在代理层增加分段能力。
  • 回答中附上文件路径和来源链接;需要复现时,记录读取所用的 commit SHA。

没有搜索结果,也可能是搜索范围或索引限制所致。GitHub legacy code search 只索引默认分支,并有文件大小等限制。能够读取指定分支的文件,不代表搜索也会针对该分支执行。GitHub 搜索限制

Microsoft Learn 与 claude.ai 的适用范围

Microsoft Learn MCP server 支持搜索 Learn 内容、读取文章和查询代码示例,适合检索 Microsoft Learn,但无法保证内容只来自 microsoft/vscode-docs 的两个目录。需要精确控制仓库、路径或提交版本时,应直接使用仓库数据源。Microsoft Learn MCP 概述

Claude 已支持通过自定义连接器接入远程 MCP server,具体可用性受账户和组织设置影响。网页连接器由 Anthropic 云端连接远程服务,不能直接启动你电脑上的 stdio 进程。本地 Filesystem 方案仍需使用支持本地进程的客户端。Claude 远程 MCP 连接说明

Claude Code 也支持 MCP,需要使用它自己的 MCP 配置入口。claude_desktop_config.json 不能作为两个客户端共享的配置文件。

备注:内容仅供参考。