仓库文档MCP服务器

一个通用的MCP标准输入输出服务器,用于将本地仓库检出(文档和代码)暴露给任何MCP主机,支持多实例工作流。

  • by pepperfm
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 pepperfm/mcp

使用说明

回购文件MCP(Bun)

通用的 MCP stdio服务器 这暴露了a 本地存储库签出 (文档+代码)到任何MCP主机。

专为“一个代码库,多个实例”工作流而设计:

  • 您多次运行同一服务器二进制文件,
  • 每个实例通过env指向不同的仓库,
  • 每个实例都有自己的工具前缀+URI方案。

它提供了什么

工具(名称有前缀)

给定 MCP_TOOL_PREFIX=telegraph,工具包括:

  • telegraph_read_repo_file --从repo签出读取任何文本文件
  • telegraph_list_docs --将文档页面列为 slug -> docs/... (slug是从文档文件路径推断出来的)
  • telegraph_get_doc --阅读slug的文档页面
  • telegraph_search_docs --在文档目录中搜索
  • telegraph_search_code --在通用代码目录中搜索
  • telegraph_refresh_index --重建文档索引
  • telegraph_git_fetch — git fetch --prune --tags 用于仓库(可选助手)
  • telegraph_info --打印服务器设置(路径、前缀等)

资源(名称以URI方案作为前缀)

给定 MCP_URI_SCHEME=telegraph,资源包括:

  • telegraph://readme
  • telegraph://contributing
  • telegraph://doc/{slug}

提示

  • {prefix}_doc_writer --“编写关于此仓库的指南/答案”的入门工作流。

安装

bun install
bun run build

运行(stdio)

MCP_REPO_ROOT=/ABS/PATH/to/repo \
MCP_TOOL_PREFIX=myrepo \
MCP_URI_SCHEME=myrepo \
bun run start

在stdio模式下,日志将转到 标准错误 有目的(stdout是为MCP JSON-RPC保留的)。

环境变量

必修的:

  • MCP_REPO_ROOT --本地仓库结账的绝对路径

可选:

  • MCP_TOOL_PREFIX --工具名称前缀(默认值: repo)
  • MCP_URI_SCHEME --资源URI方案(默认:从工具前缀派生)
  • MCP_REPO_LABEL --提示中使用的文本标签(默认值:repo根的basename)
  • MCP_DOCS_DIR --相对于repo根目录的docs目录(默认: docs)
  • MCP_DOCS_DISCOVERY_DEPTH --如果 > 0 和 MCP_DOCS_DIR 是一个普通文件夹名称,自动发现此深度以下的匹配文档目录(默认值: 3)
  • MCP_DOCS_EXTS --逗号分隔的文档扩展名(默认: .md,.mdx)
  • MCP_CODE_DIRS --逗号分隔的dirs用于搜索代码(默认值: src,config,routes,database,resources,tests)
  • MCP_CODE_EXTS --逗号分隔的代码搜索扩展名(默认: .php,.md,.json,.yml,.yaml,.xml,.ts,.js)

限制:

  • MCP_MAX_FILE_BYTES (默认值:512KB)
  • MCP_DEFAULT_MAX_CHARS (默认值:50k个字符)

Git助手:

  • MCP_GIT_AUTO_FETCH=1 --奔跑 git fetch --prune --tags 服务器启动时一次(默认:关闭)
  • MCP_GIT_FETCH_TIMEOUT_MS --fetch命令超时(默认值:30000)

兼容性:

  • 如果 MCP_REPO_ROOT 如果未设置,服务器将回退到 MCP_TELEGRAPH_ROOT (旧名称)。

Codex配置(两个实例;一个代码库)

将此添加到 ~/.codex/config.toml:

[mcp_servers.telegraph_docs]
command = "/ABS/PATH/TO/bun"
cwd = "/ABS/PATH/TO/mcp"
args = ["run", "build/index.js"]

[mcp_servers.telegraph_docs.env]
MCP_REPO_ROOT = "/ABS/PATH/TO/telegraph"
MCP_TOOL_PREFIX = "telegraph"
MCP_URI_SCHEME = "telegraph"
MCP_REPO_LABEL = "defstudio/telegraph"


[mcp_servers.laravel_data_docs]
command = "/ABS/PATH/TO/bun"
cwd = "/ABS/PATH/TO/mcp"
args = ["run", "build/index.js"]

[mcp_servers.laravel_data_docs.env]
MCP_REPO_ROOT = "/ABS/PATH/TO/laravel-data"
MCP_TOOL_PREFIX = "laravel_data"
MCP_URI_SCHEME = "laravel-data"
MCP_REPO_LABEL = "spatie/laravel-data"

Claude桌面配置(两个实例)

看 claude_desktop_config.example.json.

备注

  • 文档slug是从文件路径推断出来的(排序前缀如 01., 01-, 01_ 被剥离)。
  • 如果文档文件是 index.md 在文件夹中,slug是文件夹名称(例如。 guide/index.md → guide).
  • 随着 MCP_DOCS_DISCOVERY_DEPTH > 0,嵌套文档,如 packages/*/docs 也会被索引,它们的slug会得到一个前缀(例如。 packages/actions/...).