如何配置 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 工具。实现时需要:
- 在服务端固定
owner=microsoft、repo=vscode-docs,不允许模型更换仓库。 - 读取前校验规范化后的仓库相对路径,只接受以
docs/或release-notes/开头的 Markdown 文件。 - 拒绝路径穿越、范围外链接,以及可绕过校验的任意 URL 读取。
- 由服务端构造搜索限定条件,并再次检查返回路径,不能只信任模型提交的查询字符串。
- 只暴露搜索和读取能力,并限制结果数量及正文长度。
这层校验不需要向量数据库。初版可以复用 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 不能作为两个客户端共享的配置文件。
备注:内容仅供参考。
