本地知识库检索服务器

一个简单的MCP服务器,用于将本地文档/代码目录暴露给MCP客户端使用,支持按自然语言问题检索相关文档片段。

  • by naFeKnehC
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 naFeKnehC/mcp-local-repo

使用说明

local-repo-mcp-server

一个简单的 MCP 服务器,用来把本地文档/代码目录暴露给 MCP 客户端使用,作为“外置知识库”。支持:

  • 在一个根目录下按子目录划分多个知识库(例如 picasso、xxx 等);
  • 根据自然语言问题在所有子目录中检索相关文档片段。

安装依赖

在 mcp-local-repo 目录下执行:

npm install @modelcontextprotocol/sdk zod

如需指定版本,可以用:

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 检索和阅读的“外置知识库”。