使用说明
mcp-rag服务器(适用于任何存储库的rag mcp服务器)
mcp-rag-server 是一个轻量级的检索增强生成助手,您可以插入其中 任何使用[模型上下文协议(MCP)]的客户端Visual Studio/VS Code中的GitHub Copilot代理模式只是一种选择——您还可以使用官方的MCP检查器、未来的MCP感知IDE或自定义工具。
它为目标存储库目录建立索引,对内容进行分块(默认块大小 2400 人物,约 800 代币,与 400 重叠字符,约 120 代币;两者均可通过以下方式配置 CHUNK_SIZE / CHUNK_OVERLAP),使用以下任一方法构建嵌入 局部推理 通过 @huggingface/transformers 或a 与OpenAI兼容的嵌入API,并公开MCP工具:
rag_query-语义搜索返回评分片段(路径、分数、片段)read_file–安全文件读取(可选行范围)限制为REPO_ROOT。对于PDF文件,如果可用,将自动从统一缓存文件中检索文本list_files–列出目录内容(文件和子目录),可选递归、深度和扩展名过滤
支持两种传输方式(选择 MCP_TRANSPORT=stdio|http):
stdio–生成进程的IDE的最简单集成(默认向后兼容)http(流式HTTP)-建议用于大型存储库/首次运行,这样您就可以在连接客户端之前查看日志和轮询准备情况。通过启用MCP_TRANSPORT=http。默认情况下包括DNS重新绑定保护。
特性
- 通过局部推理嵌入(
@huggingface/transformers)或与OpenAI兼容的API - 多语言源代码+文档支持(可通过以下方式配置
ALLOWED_EXT) - PDF支持:在索引过程中自动从PDF文件中提取文本,并将其缓存在统一的
pdf-text-cache.json文件(位于索引存储旁边)用于快速检索。PDF文本与任何其他文本文件一样进行语义搜索 - 排除的文件夹模式支持(可通过配置
EXCLUDED_FOLDERS) - 快速的glob文件发现和重叠分块,以提高召回率
- 简单的余弦相似性排名(稍后可选择切换到ANN)
- 通过以下方式选择可插拔型号
MODEL_NAME(见下文指导) - 可选的持久索引(多文件存储)+热启动和增量重新索引
INDEX_STORE_PATH - 增量更改检测(添加/删除/文件大小更改),以避免完全重建
- Stdio或流式HTTP传输(具有可选的主机允许列表/DNS重新绑定保护)
- 安全路径处理(拒绝逃跑企图
REPO_ROOT) - 最小依赖性;首次本地模型加载或远程API配置验证后快速启动
- 准备扩展:添加新的MCP工具或ANN/混合检索后端
计划/理想:混合BM25+嵌入搜索、ANN加速(HNSW/IVF)、每种语言标记器启发式、批处理/并行嵌入、语义边界感知分块。
需求
- Node.js 20+
- 存储库路径(
REPO_ROOT)
可选MCP客户端(任何一个就足够了):
- 官方 MCP检查员
- Visual Studio 2022 17.14+,带GitHub Copilot(启用代理模式)
- VS代码与GitHub副本代理模式
- 任何其他MCP感知工具
安装
npm install
npm run build
运行(本地测试)
构建然后启动(默认情况下为stdio传输)。使用其中之一 npm start 或者直接调用构建的文件。
Windows PowerShell
npm run build
$env:REPO_ROOT="C:\path\to\your-repo"; node dist/index.js
或者:
$env:REPO_ROOT="C:\path\to\your-repo"; npm start
macOS/Linux(bash/zsh)
npm run build
export REPO_ROOT="/path/to/your-repo"; node dist/index.js
或者:
export REPO_ROOT="/path/to/your-repo"; npm start
可选择设置模型缓存以加快后续运行(首次启动下载模型一次):
export TRANSFORMERS_CACHE="/path/to/cache" # macOS/Linux
$env:TRANSFORMERS_CACHE="C:\path\to\cache" # Windows PowerShell
与OpenAI兼容的API嵌入
集 EMBEDDING_PROVIDER=openai 呼叫遥控器 /embeddings 端点,而不是加载本地变压器模型。请求格式遵循OpenAI嵌入API,并与公开兼容协议的提供商合作,如OpenAI、Mistral和Jina AI。
Windows PowerShell:
$env:REPO_ROOT="C:\path\to\your-repo"
$env:EMBEDDING_PROVIDER="openai"
$env:EMBEDDING_API_BASE_URL="https://api.openai.com/v1"
$env:EMBEDDING_API_KEY="<your-api-key>"
$env:MODEL_NAME="text-embedding-3-small"
npm start
macOS/Linux:
export REPO_ROOT="/path/to/your-repo"
export EMBEDDING_PROVIDER="openai"
export EMBEDDING_API_BASE_URL="https://api.openai.com/v1"
export EMBEDDING_API_KEY="<your-api-key>"
export MODEL_NAME="text-embedding-3-small"
npm start
笔记:
EMBEDDING_API_BASE_URL应该指向提供者的API基础(例如https://api.openai.com/v1),而不是/embeddings路径本身。MODEL_NAME在以下情况下逐字传递到远程嵌入APIEMBEDDING_PROVIDER=openai.EMBEDDING_API_BATCH_SIZE控制索引期间每个远程嵌入请求发送多少块。违约:200.TRANSFORMERS_CACHE仅与局部推理相关。
流式HTTP模式(建议用于大型初始索引)
将MCP服务器作为HTTP端点运行,仅在以下情况下打开IDE Embeddings ready. 显示(避免冷启动时客户端超时):
npm run build
$env:REPO_ROOT="C:\path\to\your-repo"; $env:MCP_TRANSPORT="http"; npm start
export REPO_ROOT="/path/to/your-repo"; MCP_TRANSPORT=http npm start
默认HTTP绑定:http://127.0.0.1:3000/mcp.覆盖 HOST 和 MCP_PORT envs。准备就绪端点位于 http://127.0.0.1:3000/health 返回JSON格式:
{
"version": "0.x.y",
"repoRoot": "C:/abs/path",
"modelName": "<embedding model>",
"transport": "stdio" | "http",
"ready": true | false,
"startedAt": "2025-01-01T00:00:00.000Z",
"indexing": {
"filesDiscovered": 123,
"chunksTotal": 456,
"chunksEmbedded": 456
}
}
ready 只有当所有发现的块都有嵌入时(冷构建后或增量更新完成),才会变为true。
指令端点
服务器还公开 GET /instructions,它提供Markdown文件 docs/copilot-instructions.md 随着所有事件的发生 <FOLDER_INFO_NAME> 被替换为 FOLDER_INFO_NAME 环境中的值(默认值 REPO_ROOT).
笔记:
- 从存储库根目录启动服务器,以便
docs/copilot-instructions.md通过当前工作目录解析。 - 响应内容类型为
text/markdown; charset=utf-8.
装订和格式化
- 类型检查(无排放):
npm run typecheck - 运行ESLint(检查):
npm run lint - 自动修复ESLint问题:
npm run lint:fix - 带Prettier的格式:
npm run format - 检查格式:
npm run format:check
使用MCP检验员进行测试(无VS)
使用MCP检查器在本地运行服务器,并在没有Visual Studio的情况下尝试这些工具。
Windows PowerShell:
npm run build
$env:REPO_ROOT="C:\path\to\your-repo"; npx @modelcontextprotocol/inspector node .\\dist\\index.js
通过检查器流式传输HTTP(Windows):
npm run build
$env:REPO_ROOT="C:\path\to\your-repo"; $env:MCP_TRANSPORT="http"; npx @modelcontextprotocol/inspector http://localhost:3000/mcp --transport http
macOS/Linux(bash/zsh):
export REPO_ROOT="/path/to/your-repo"
npx @modelcontextprotocol/inspector node dist/index.js
流式HTTP(macOS/Linux):
export REPO_ROOT="/path/to/your-repo"; MCP_TRANSPORT=http npx @modelcontextprotocol/inspector http://localhost:3000/mcp --transport http
笔记:
- 首先在本地模式下运行,下载嵌入模型并构建嵌入;检查器将仅在启动完成后连接。观察终端上打印到stderr的进度日志。
- 您还可以在
.env项目根目录下的文件(例如。,REPO_ROOT,TRANSFORMERS_CACHE,EMBEDDING_PROVIDER,EMBEDDING_API_BASE_URL).
在检查器UI中:
- 单击“列出工具”以验证这些工具是否可用:
rag_query,read_file,list_files. - 选择一个工具,然后单击“调用工具”。提供JSON输入,如下所示。
示例
- 仓库语义搜索
Tool: rag_query
Input JSON:
{
"query": "protobuf message X schema",
"top_k": 5
}
响应包括一系列匹配项 path, score,以及 snippet.
- 列出目录中的文件(默认情况下为非递归)
Tool: list_files
Input JSON:
{
"dir": "src",
"recursive": false
}
带过滤器和限制的递归:
Tool: list_files
Input JSON:
{
"dir": "src",
"recursive": true,
"maxDepth": 3,
"includeExtensions": ["ts", "md"],
"limit": 200
}
响应形状:
{
"entries": [
{ "path": "src/", "type": "dir" },
{ "path": "src/index.ts", "type": "file", "size": 1234 },
{ "path": "src/lib/", "type": "dir" }
]
}
- 读取文件(可选带行范围)
Tool: read_file
Input JSON:
{
"path": "src/path/to/file.txt", // relative to REPO_ROOT
"startLine": 1,
"endLine": 120
}
故障排除
- 启动缓慢:设置
TRANSFORMERS_CACHE到快速本地文件夹并(可选)设置ALLOWED_EXT(例如。,ts,tsx,js仅适用于TypeScript/JS,或您需要的任何列表)。 - 路径错误:
path必须相对于REPO_ROOT为了安全起见,绝对路径被拒绝。 - Inspector中几分钟内没有显示任何内容:服务器仍在初始化(模型下载+嵌入)。预计在首次运行时会出现这种情况。
- 缓慢的热重启:提供
INDEX_STORE_PATH因此嵌入会持续存在,只有更改的文件才会重新嵌入。
环境配置(.env)
您可以通过本地配置环境变量 .env 文件。
步骤:
- 复制
.env.example到.env. - 根据需要编辑值。
支持的变量:
REPO_ROOT(必填):要索引的存储库路径。FOLDER_INFO_NAME(可选):显示存储库根的MCP工具描述中使用的标签(默认REPO_ROOT).这纯粹是客户用户体验的装饰;它不会影响索引的目录(仅由控制)REPO_ROOT).如果你喜欢一个更友好的名字(例如。,frontend-app或monorepo-root)出现在返回给客户端的工具元数据和路径指南中。EMBEDDING_PROVIDER(可选):local(默认)或openai.openai意思是“使用与OpenAI兼容的/embeddingsAPI”,而不是专门作为供应商的OpenAI。TRANSFORMERS_CACHE(可选):本地模型文件的缓存文件夹。EMBEDDING_API_BASE_URL(需要时EMBEDDING_PROVIDER=openai):与OpenAI兼容的API的基本URL,例如https://api.openai.com/v1,https://api.mistral.ai/v1,或您的提供商特定的等效物。EMBEDDING_API_KEY(需要时EMBEDDING_PROVIDER=openai):用于嵌入API的承载令牌。EMBEDDING_API_BATCH_SIZE(可选时EMBEDDING_PROVIDER=openai):索引期间每个远程嵌入请求发送的块数。违约:200.ALLOWED_EXT(可选):以逗号分隔的要索引的文件扩展名列表。默认包括常见的文本/代码格式以及pdf.PDF文件会自动处理:在索引过程中提取一次文本,并将其缓存在统一的pdf-text-cache.json用于快速检索的文件。EXCLUDED_FOLDERS(可选):以逗号分隔的文件夹模式列表,用于从索引中排除。支持两个精确的文件夹名称(例如。,node_modules,dist,build,.git)以及基本的球体图案(例如。,**/test/**,**/tests/**).在索引过程中,这些文件夹中的文件将被跳过。默认设置包括常见的构建/依赖文件夹:node_modules,dist,build,.git,target,bin,obj,.cache,coverage,.nyc_output.MCP_TRANSPORT(可选):http或stdio.VERBOSE(可选):true/1/yes/on,用于索引和嵌入过程中更精细的进度日志。INDEX_STORE_PATH(可选):用于持久嵌入索引存储的基本路径(例如。,C:\repo\.mcp-index或/repo/.mcp-index).索引被存储为具有该前缀的多个JSON文件(例如。,.mcp-index.part0000.json,.mcp-index.part0001.json等等)以及清单文件(.mcp-index.manifest.json)它跟踪元数据、兼容性参数和数据文件列表。启用快速热启动+增量重新索引(仅限新/删除/更改大小的文件)。MODEL_NAME(可选):覆盖默认嵌入模型(jinaai/jina-embeddings-v2-base-code).对于EMBEDDING_PROVIDER=local,这必须是由支持的模型@huggingface/transformers.为EMBEDDING_PROVIDER=openai,这将直接传递给远程/embeddingsAPI示例:MODEL_NAME=jinaai/jina-embeddings-v2-base-code(默认)——平衡的多语言/代码嵌入模型;强大的混合自然语言+源代码语义搜索能力。MODEL_NAME=Xenova/bge-base-en-v1.5--高质量的英语通用文本嵌入(适用于文档/wiki风格的语料库)。MODEL_NAME=Xenova/bge-small-en-v1.5--当延迟或记忆比几个回忆点更重要时,更快/更轻的英语模型。 支持的任何兼容的句子/特征提取模型@huggingface/transformers应该适用于本地模式。
HOST(可选,HTTP模式):绑定主机(默认127.0.0.1).MCP_PORT(可选,HTTP模式):TCP端口(默认3000).ENABLE_DNS_REBINDING_PROTECTION(可选,HTTP模式):默认为true;设置为false禁用主机允许列表检查。ALLOWED_HOSTS(可选,HTTP模式):启用DNS重新绑定保护时允许使用逗号分隔的主机列表。默认值包括localhost和127.0.0.1(带/不带端口)。CHUNK_SIZE(可选):嵌入前每个块的最大字符数(默认值为2400,根据标记器/模型,大约为800个标记)。较大的值会减少总嵌入(构建速度更快,内存更少),但会模糊细粒度匹配。典型范围:- 2100‑2700(大约700‑900个代币;平衡默认值)
- 3000‑4200(大约1000‑1400个令牌;大型散文/长函数;更少的向量)
- 1200‑1800(大约400‑600个令牌;细粒度代码导航;更多向量/内存)
CHUNK_OVERLAP(可选):将尾随字符带入下一个块中(默认值为400,大约120个标记,约为默认块大小的15%)。建议10-20%CHUNK_SIZE(例如240‑540CHUNK_SIZE=2400).如果您发现答案缺少跨境上下文,则略有增加(高达~20-25%);减少以加速构建。
安全帽: CHUNK_SIZE 被夹紧到8000 CHUNK_OVERLAP 至4000;如果重叠>=大小,则会自动减小(记录)以保持前进的进度。
DOCS_PER_FILE(可选):持久化索引时,单个JSON文件中存储的最大文档数(默认值为10000)。这可以防止JSON.stringify创建可能导致内存问题的过大字符串。较低的值会创建更多的文件,但会减少保存/加载操作期间的内存压力。最小值为100。
持久性和增量重新索引
集 INDEX_STORE_PATH 以实现跨多个JSON文件存储块+嵌入的持久索引。启动时:
- 如果清单文件存在(
<INDEX_STORE_PATH>.manifest.json)如果其元数据(模型名称、块大小、重叠)匹配,则从清单中引用的数据文件加载索引。 - 重新扫描存储库;删除的文件块将被丢弃,新的或大小更改的文件将被重新分块并重新嵌入。
- 合并后的索引将保存回磁盘(配置后冷构建路径也会保持不变)。
清单文件包含有关索引的元数据(版本、块参数、模型名称、时间戳)和所有数据文件的列表(<INDEX_STORE_PATH>.part####.json)它们构成了完整的索引。
优点:
- 对于大型存储库来说,热启动速度要快得多。
- 避免重新嵌入未更改的内容。
当前限制:
- 更改检测仅使用文件大小(保持相同大小的内容编辑将不会重新嵌入)。
- 嵌入生成尚未并行化;OpenAI兼容的提供者支持请求批处理,但本地嵌入仍然一次运行一个块。
- 存储架构最小(版本1);未来的版本可能会添加哈希或mtime启发式算法。
通过删除清单文件强制完全重建(<INDEX_STORE_PATH>.manifest.json)和数据文件(<INDEX_STORE_PATH>.part*.json)或更改块/模型/提供者参数。
Visual Studio集成(MCP)
复制 example.mcp.json 致:
- %用户文件%.mcp.json(Windows),或
- 您的解决方案根为
.mcp.json(推荐给团队)
调整“command”/“args”中的路径和 REPO_ROOT 环境。
对于Streamable HTTP,使用如下配置条目:
{
"servers": {
"mcp-rag-server": {
"url": "http://127.0.0.1:3000/mcp"
}
}
}
打开VS->副驾驶聊天->切换到代理模式->启用“mcp-rag服务器”及其工具(首次使用时会要求您授予权限)。如果使用HTTP传输,请确保服务器已完成索引(检查 /health).
在代理模式下使用
示例提示:
“修改消息X的C#处理程序。在开始之前,请使用该工具 rag_query 使用查询“message X schema”,并将找到的合约考虑在内。如果你得到了文件路径,请通过以下方式读取它们 read_file."
备注
- 在本地模式下首次运行将下载并缓存模型(数十到约100 MB)并构建嵌入——这可能需要几分钟的时间,具体取决于仓库的大小。
- 日志被写入stderr(console.error)以保持MCP stdout的干净。
- 对于非常大的回购,考虑添加ANN索引(
hnswlib-node)或混合BM25+嵌入设置。
选型指南
根据您的存储库特性选择嵌入设置。有两个正交选择: 提供者 和 模型.
提供者 (EMBEDDING_PROVIDER):
local(默认):通过下载初始模型后,完全本地工作流@huggingface/transformers查询时没有出站网络呼叫。openai:通过任何兼容OpenAI的托管嵌入/embeddingsAPI(OpenAI、Mistral、Jina AI等)。用于集中式凭据或更大的托管模型。
模型 (MODEL_NAME):
jinaai/jina-embeddings-v2-base-code(本地默认):平衡的多语言/代码嵌入模型。当你的语料库包含大量源代码和README/设计文档时使用。代码符号+自然语言查询的强跨域对齐。Xenova/bge-base-en-v1.5(本地):高质量的英语通用文本嵌入。当内容主要是英语自然语言(文档、知识库)时使用。Xenova/bge-small-en-v1.5(当地):更快/更轻的英国型号。用于内存较低或索引非常大的存储库时,吞吐量比几个召回点更重要。text-embedding-3-small(openai, 首选):快速、经济高效的托管模型,具有强大的通用质量。良好的默认值EMBEDDING_PROVIDER=openai.text-embedding-3-large(openai):更高维度的模型,以获得最大的召回质量;成本和延迟比text-embedding-3-small.
随意尝试——通过交换 MODEL_NAME 并重建嵌入缓存(如果在外部持久化,请删除任何现有的缓存向量)。改变 EMBEDDING_PROVIDER 或 MODEL_NAME 故意使持久化索引无效。
大块尺寸指南
为什么是800/120代币?实现按字符分块,因此默认值为2400/400个字符,对于典型的代码和散文来说,这大约是800/120个标记。从经验上讲,这将大多数自包含的代码构造(函数/类)和短文档部分保存在一个块中,同时为跨块语义匹配提供了足够的连续性。基于语料库进行调整:
- 主要是短函数或配置文件:较小的块(500‑700)有助于精确检索。
- 大型叙事文档/设计规范:较大的块(1000‑1400)可以减少矢量计数,而不会造成太大的回忆损失。
- 在上下文跨越多个文件的情况下,高度相互依赖的代码:保持默认值或适度增加重叠(约500-600个字符),而不是缩小大小。
经验法则:重叠≈尺寸的15%。避免重叠>=大小(自动校正),避免极小的大小(<300),除非你有一个下游的重新排名阶段。
一步一步:索引Java仓库(IntelliJ中的ProjectB)并从C#中使用它(Visual Studio 2022中的ProjectA)
本演练展示了如何在Visual Studio 2022中使用单独的C#解决方案(ProjectA)时,对Java项目(ProjectB)进行索引,并使GitHub Copilot(代理模式)可以使用这些知识。
假设
- 您使用的是Windows并使用PowerShell。
- ProjectB是您通常在IntelliJ IDEA中打开的Java代码库(位置:
C:\path\to\ProjectB).IntelliJ不需要打开索引。 - ProjectA是您在Visual Studio 2022中打开的C#解决方案(位置:
C:\path\to\ProjectA).
1) 构建此MCP服务器
npm install
npm run build
2) 以HTTP模式启动服务器,指向ProjectB
在PowerShell会话中设置一次环境变量,然后启动。可选的索引存储加快了热启动。
$env:REPO_ROOT = "C:\path\to\ProjectB"
$env:MCP_TRANSPORT = "http"
$env:INDEX_STORE_PATH = "C:\path\to\ProjectB\.mcp-index" # optional but recommended
$env:ALLOWED_EXT = "java,kt,kts,md,xml,gradle,properties" # tailor for Java projects
# Optional: cache model files to a fast local folder
# $env:TRANSFORMERS_CACHE = "C:\model-cache"
npm start
等待控制台打印“嵌入准备就绪”。您也可以确认准备就绪:
- 健康:http://127.0.0.1:3000/health(就绪:true)
- 工具暴露在以下位置:http://127.0.0.1:3000/mcp(适用于MCP客户)
让这个窗口运行。
3) 将Visual Studio(ProjectA)指向此服务器
创建一个 .mcp.json 在ProjectA解决方案文件旁边(或将其放置在 %USERPROFILE%\.mcp.json 适用于全球)。使用HTTP条目,这样VS就不需要生成服务器。
{
"servers": {
"mcp-rag-server": {
"url": "http://127.0.0.1:3000/mcp"
}
}
}
在Visual Studio 2022中打开ProjectA,打开Copilot Chat,切换到代理模式,并启用“mcp-rag服务器”。如果系统提示,授予权限。
提示
- 如果这是您第一次在大型仓库上运行,请在从VS连接之前保持MCP服务器窗口打开,直到索引完成。使用HTTP可以避免冷构建期间的超时。
- 对于后续运行
INDEX_STORE_PATH使启动速度更快。
4) 在ProjectA中编码时从Copilot使用它
在回答问题或在ProjectA中生成代码之前,请Copilot搜索ProjectB。示例提示:
- “使用工具rag_query在ProjectB中查找负责身份验证的Java服务;然后在这里向我展示我应该在C#中实现的等效接口。”
- 在src/main/java下列出在ProjectB中引用“Invoice”的文件,然后打开密钥文件
在幕后,Copilot会打电话给:
rag_query–从ProjectB中查找相关片段read_file–获取精确的代码/行list_files–浏览目录
5) (可选)使用MCP检查器进行健全性检查
如果你想在使用Visual Studio之前测试这些工具:
# In a separate PowerShell
$env:REPO_ROOT = "C:\path\to\ProjectB"
$env:MCP_TRANSPORT = "http"
npm run build
npx @modelcontextprotocol/inspector http://127.0.0.1:3000/mcp --transport http
如何使用 docs/copilot-instructions.md
文件 docs/copilot-instructions.md 包含清晰、可复制的指导,教导助手如何有效地利用此MCP服务器(何时调用 rag_query, read_file, list_files如何引用代码等)。
有两种简单的方法可以使用它:
- 通过服务器/指令端点(最好使用HTTP模式)
-
确保服务器正在运行
MCP_TRANSPORT=http. -
在UI中为您的仓库设置一个友好的标签(可选):
$env:FOLDER_INFO_NAME = "ProjectB" -
打开http://127.0.0.1:3000/instructions在浏览器中。该页面以如下方式呈现指令
<FOLDER_INFO_NAME>已替换(例如“项目B”)。 -
将内容复制到Visual Studio中的Copilot Chat中,并将其固定在当前会话/对话中,以指导助手的行为。
- 同步并存储在ProjectA的.github文件夹中(来自/reinstructions)
-
确保服务器正在运行
MCP_TRANSPORT=http并设置一个友好的标签:$env:FOLDER_INFO_NAME = "ProjectB" -
创建(如果不存在)
C:\path\to\ProjectA\.github\. -
提取最新呈现的指令并将其保存到仓库:
$dest = "C:\path\to\ProjectA\.github\copilot-instructions.md" Invoke-RestMethod 'http://127.0.0.1:3000/instructions' | Set-Content -Encoding UTF8 $dest -
提交该文件,以便您的团队可以重用它。每当您更新此服务器中的说明并希望刷新签入副本时,请重新运行上述命令。
备注
- 这些指令是可选的,但有助于保持Copilot的纪律性:它将在回答之前进行搜索,引用路径,并在引用之前获取确切的代码行。
- 服务器的工具描述也参考
FOLDER_INFO_NAME在工具元数据中提供一致的、特定于仓库的指导。
