RAG检索增强生成服务器

mcp-rag-server是一个轻量级的检索增强生成助手,可集成到任何支持模型上下文协议(MCP)的客户端中,用于索引存储库内容、构建嵌入并进行语义搜索。

  • by Daniel-Barta
  • TypeScript
  • 本地部署
  • 12 星标
  • 更新于
在 GitHub 查看 Daniel-Barta/mcp-rag-server

使用说明

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 在以下情况下逐字传递到远程嵌入API EMBEDDING_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输入,如下所示。

示例

  1. 仓库语义搜索
Tool: rag_query
Input JSON:
{
	"query": "protobuf message X schema",
	"top_k": 5
}

响应包括一系列匹配项 path, score,以及 snippet.

  1. 列出目录中的文件(默认情况下为非递归)
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" }
	]
}
  1. 读取文件(可选带行范围)
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兼容的 /embeddings API”,而不是专门作为供应商的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,这将直接传递给远程 /embeddings API示例:
    • 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‑540 CHUNK_SIZE=2400).如果您发现答案缺少跨境上下文,则略有增加(高达~20-25%);减少以加速构建。

安全帽: CHUNK_SIZE 被夹紧到8000 CHUNK_OVERLAP 至4000;如果重叠>=大小,则会自动减小(记录)以保持前进的进度。

  • DOCS_PER_FILE (可选):持久化索引时,单个JSON文件中存储的最大文档数(默认值为10000)。这可以防止JSON.stringify创建可能导致内存问题的过大字符串。较低的值会创建更多的文件,但会减少保存/加载操作期间的内存压力。最小值为100。

持久性和增量重新索引

集 INDEX_STORE_PATH 以实现跨多个JSON文件存储块+嵌入的持久索引。启动时:

  1. 如果清单文件存在(<INDEX_STORE_PATH>.manifest.json)如果其元数据(模型名称、块大小、重叠)匹配,则从清单中引用的数据文件加载索引。
  2. 重新扫描存储库;删除的文件块将被丢弃,新的或大小更改的文件将被重新分块并重新嵌入。
  3. 合并后的索引将保存回磁盘(配置后冷构建路径也会保持不变)。

清单文件包含有关索引的元数据(版本、块参数、模型名称、时间戳)和所有数据文件的列表(<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的托管嵌入 /embeddings API(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如何引用代码等)。

有两种简单的方法可以使用它:

  1. 通过服务器/指令端点(最好使用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中,并将其固定在当前会话/对话中,以指导助手的行为。

  1. 同步并存储在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 在工具元数据中提供一致的、特定于仓库的指导。