local-repo-mcp-server
一个简单的 MCP 服务器,用来把本地文档/代码目录暴露给 MCP 客户端使用,作为“外置知识库”。支持:
- 在一个根目录下按子目录划分多个知识库(例如
picasso、xxx等); - 根据自然语言问题在所有子目录中检索相关文档片段。
安装依赖
在 mcp-local-repo 目录下执行:
npm install @modelcontextprotocol/sdk zod如需指定版本,可以用: ``bash npm install @modelcontextprotocol/sdk@latest zod@latest ``启动方式
在 mcp-local-repo 目录下:
# 当前目录作为知识库根目录
npm run mcp:repo
# 或者显式指定知识库根目录
node local-repo-mcp-server.js --repo /path/to/your/kb-root不传 --repo 时,默认使用启动命令所在的当前工作目录(process.cwd())作为“知识库根目录”。 知识库根目录下的子目录会被视为一个个独立的知识域,例如:
/Users/xxx/offical-docs
├── picasso # Picasso 相关文档
├── xxx # 其他主题
└── mcp-local-repo # 当前 MCP 服务器工程如果根目录下没有子目录,则将根目录本身视为单一知识库。
工具说明
本服务器当前暴露两个核心工具(tools):
get-docs
- 作用:根据自然语言问题在所有子目录知识库中按关键字搜索文本文件,返回命中的文档片段列表。非常适合作为“外置知识库检索”入口。
- 入参:
- query: string — 问题或关键字,例如 "Picasso 布局"。 - maxResults?: number — 可选,最多返回多少条命中,默认 20。
- 返回:
- query: string — 原始查询字符串。 - results: { domain: string; file: string; line: number; snippet: string }[] - domain:命中的知识库域(即子目录名,例如 picasso)。 - file:在该知识库中的相对文件路径,例如 aaa.md、docs/layout.md。 - line:命中行号(从 1 开始)。 - snippet:包含命中行在内的若干行文本片段,供 LLM 直接阅读和总结。
read-file
- 作用:从知识库根目录出发,按相对路径读取单个文件内容。通常作为调试或在已经通过
get-docs找到目标文件后使用。 - 入参:
- path: string — 相对仓库根目录的文件路径,例如: - "README.md" - "src/index.ts" - "docs/guide/intro.md"
- 返回:
- path: string — 归一化后的相对路径。 - content: string — 文件内容文本。
工具的 content 字段会把文件内容直接作为 text 返回,方便 LLM 阅读;structuredContent 中是结构化结果,方便客户端做二次处理。
在 MCP 客户端中的配置示例
具体配置方式取决于你的 MCP 客户端,这里给一个类似 JSON 的示例(例如某些客户端的 mcp.json):
{
"servers": {
"local-repo": {
"command": "node",
"args": [
"/绝对路径/到/your-project/offical-docs/mcp-local-repo/local-repo-mcp-server.js",
"--repo",
"/绝对路径/到/你的知识库根目录" // 例如 /Users/你/offical-docs
]
}
}
}配置好之后,客户端中就可以:
- 调用
get-docs按问题检索所有子目录知识库中的相关文档片段; - 必要时调用
read-file按路径读取完整文件内容;
从而把本地文档/代码当成一个可被 LLM 检索和阅读的“外置知识库”。
