关于 mcp-digger
mcp-digger 是一款 MCP 服务,为 AI 编码 Agent 提供渐进式的 .NET NuGet 仓库源码访问。它专注于 C# 索引,并以分层工具支持从包概览到单个文件的查阅,托管克隆不会放入工作区。
主要功能
- 01索引 .NET 与 NuGet 源码仓库
- 02发现仓库和程序包
- 03搜索符号、实现与引用
- 04查看公共 API 签名
- 05读取单个源文件
- 06刷新索引并检查仓库状态
适用场景
- 01编码时查询私有 C# 库 API
- 02跨配置程序包追踪类型
- 03先查看签名再读取完整源码
- 04仓库变更后刷新索引
MCP 相关
mcp-digger 向 MCP 客户端提供 10 种工具,用于查看仓库状态、发现程序包、搜索符号、检查签名、读取源码和维护索引。它仅面向包含 `.csproj` 程序包和 `.cs` 文件的 .NET/C# 仓库。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
2收录的工具列表 · 更新于 3 周前
此工具无需参数。
详细介绍
mcp-digger
为 AI 编码 Agent 提供代码上下文。 按需渐进式访问内部 .NET / NuGet 包源码——Agent 可自主浏览、搜索和读取私有 C# 库,且不会污染工作区。
⚠ 范围:仅限 .NET / C#。 mcp-digger 为包含
.csproj包和.cs源文件的 NuGet 风格仓库建立索引。它不是通用源代码索引工具——其他语言(TypeScript、Python、Java、Go 等)不在支持范围内。
✨ 为什么使用
公共 NuGet 包拥有完善的文档生态——API 参考、教程和社区问答。context7 等工具很适合处理这类内容。
内部 .NET 包通常以源代码作为主要文档。mcp-digger 将这些源代码转换为结构化、可搜索且节省 token 的上下文,供任何兼容 MCP 的 Agent 使用,从而弥补私有 C# 库生态中的文档缺口。
没有它:
- 🐢 收集上下文速度慢 —
git clone+find+grep+cat的命令链会在获取有用上下文之前,就把 token 消耗在基础设施操作上。 - 🔍 无法语义搜索 — 文件系统工具只能查找文本,无法查找 API 接口。“实现这个接口的所有类型”意味着要临时编写提取脚本。
- 💸 浪费 token — 只需一个方法签名,Agent 却要读取整个文件。
- 🖱 频繁点击授权 — 每个会话都要批准数十条 Shell 命令。
- 🧹 工作区杂乱 — 引用的仓库会污染文件搜索、Git 状态和 Agent 的上下文窗口。
使用它:
- ✅ 首次尝试就获得正确代码 — 真实签名、泛型约束、接口契约和基类模式。
- ⚡ 自主获取上下文 — 只需让 Agent 指向 NuGet 仓库一次;它便可自主浏览、搜索和读取。
- 🪙 渐进式披露 — 先查看 200 个 token 的概述,再深入阅读 5,000 个 token 的源码。大多数问题在 L1 或 L2 就能解决。
- 🧼 工作区零污染 — 托管克隆位于项目树之外。
- 🌐 支持任何 Git 托管平台 — GitHub、GitLab、Azure DevOps、Bitbucket、自托管平台——支持 HTTPS 或 SSH。
🛠 工作原理
十个专用工具,按由浅入深的顺序排列。Agent 会选择能回答问题且成本最低的工具。
┌─→ 📦 dig_package_overview ─┐
│ (docs, key types) │
🩺 dig_status → 📋 dig_list → 📖 dig_repo_overview ┤ ├─→ 🔎 dig_lookup → 📄 dig_file
(health) (discover) (README + summaries) │ │ (symbol → file) (full source)
├─→ 📁 dig_package_files ────┤
│ (file listing) │
└────────────────────────────┴─→ 📝 dig_signatures
(stripped API)
Operational: 🔄 dig_refresh (force cache invalidation, on demand)
Bootstrap: 🌱 dig_init (only when no config exists)
🧰 工具(10 个)
| 层级 | 工具 | 功能 |
|---|---|---|
| 健康状态 | 🩺 dig_status | 配置摘要、每个仓库的连接检查、索引健康统计 |
| 发现 | 📋 dig_list | 列出已配置的仓库及其包,并提供单行 .csproj 摘要 |
| L1 概述 | 📖 dig_repo_overview | 仓库 README.md(筛选架构相关章节)+ 包数量 |
| L1 概述 | 📦 dig_package_overview | 包文档、关键接口、抽象类、文件数量 |
| L1 概述 | 📁 dig_package_files | 列出包中的 .cs 文件,并附带目录摘要标题 |
| L2 搜索 | 🔎 dig_lookup | 已索引的符号搜索——支持 symbol、implements 或 references 模式。支持跨包搜索。 |
| L2 搜索 | 📝 dig_signatures | 按关键词筛选的 C# 公共 API 表面(不含方法体) |
| L3 源码 | 📄 dig_file | 单个文件的完整源码(上限为 1 MB) |
| 运维 | 🔄 dig_refresh | 强制重建一个或所有仓库的缓存 |
| 引导 | 🌱 dig_init | 创建初始 .digger/config.json(仅在未找到配置时注册) |
dig_lookup 的搜索模式:
| 模式 | 查找内容 |
|---|---|
symbol(默认) | 名称子字符串匹配的类型/方法声明 |
implements | 实现接口或扩展基类的类/结构体 |
references | 引用了给定类型名称的文件(按单词边界匹配,区分大小写) |
🚀 快速开始
安装
npm install -g mcp-digger
# or run directly
npx mcp-digger
需要 Node.js 20+、PATH 中可用的 git,以及 .NET / C# 源码仓库(包含 .csproj 和 .cs 源文件的 NuGet 包)。
最简配置
在工作区根目录创建 .digger/config.json:
{
"repos": [
{
"name": "my-libraries",
"url": "https://github.com/org/shared-libs.git",
"packageFilter": "MyCompany.*",
"auth": {
"strategy": "pat",
"PAT-EnvVarName": "GIT_PAT"
}
}
]
}
还没有配置文件?启动服务,然后调用 dig_init 来生成初始配置。
Agent 设置
Claude Code
添加到 .claude/settings.json 或项目设置中:
{
"mcpServers": {
"digger": {
"command": "npx",
"args": ["-y", "mcp-digger"]
}
}
}
Codex CLI
添加到 ~/.codex/config.toml(或项目级的 .codex/config.toml):
[mcp_servers.mcp-digger]
command = "npx"
args = ["-y", "mcp-digger"]
Claude Desktop
添加到 claude_desktop_config.json:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"digger": {
"command": "npx",
"args": ["-y", "mcp-digger"]
}
}
}
VS Code
添加到 .vscode/mcp.json(工作区)或用户级 mcp.json:
{
"servers": {
"digger": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-digger"]
}
}
}
Cursor
添加到 .cursor/mcp.json(项目级)或 ~/.cursor/mcp.json(全局):
{
"mcpServers": {
"digger": {
"command": "npx",
"args": ["-y", "mcp-digger"]
}
}
}
验证
连接后,让你的 Agent 调用 dig_status——它会报告配置验证结果、各仓库的连接状态和索引健康状况。
⚙ 配置
仓库和包
repos[] 条目有三种声明包的方式:
| 选项 | 行为 |
|---|---|
"packages": ["A", "B"] | 显式列表——这些包,以及它们通过 <ProjectReference> 引入的任何本地同级项目(传递依赖,仅限同级项目)。 |
"packageFilter": "MyCompany.*" | 通配符——通过扫描工作区中的 .sln/.slnx/Directory.Packages.props,筛选出匹配此前缀的包。自动跟踪传递性的 ProjectReference 链接。 |
| (省略两者) | 自动发现 sourceRoot 下所有非测试 .csproj 目录(递归扫描,支持嵌套布局)。 |
sourceRoot 默认为 "src"——将其设为存放包目录的目录。扫描会递归进行,因此也会找到 src/Group/Foo/Foo.csproj 这样的嵌套布局。
分支跟踪
默认情况下,托管克隆使用仓库的默认分支。若要固定到特定分支:
{
"repos": [
{
"name": "my-libraries",
"url": "https://github.com/org/shared-libs.git",
"branch": "develop"
}
]
}
该分支既用于初始克隆,也用于后续获取。此设置仅适用于托管克隆——对于本地仓库,需自行控制当前检出的分支。
本地仓库(模式 B)
如果仓库已存在于磁盘上,可跳过托管克隆。本地路径为只读——mcp-digger 不会获取或修改它。
{
"localRepos": {
"my-libraries": "C:/repos/shared-libs"
},
"repos": [
{
"name": "my-libraries",
"sourceRoot": "src"
}
]
}
身份验证策略
| 策略 | 行为 |
|---|---|
auto (默认) | 尝试不进行身份验证;如果已设置 PAT,则回退到 PAT |
pat | 始终使用 PAT(未设置时会报致命错误) |
none | 始终不进行身份验证 |
PAT 可以直接填写("PAT": "..."),也可以通过环境变量间接指定("PAT-EnvVarName": "MY_TOKEN")。工作区根目录中的 .env 文件会自动加载——包含 # 的值应加引号。
环境变量
| 变量 | 默认值 | 用途 |
|---|---|---|
DIGGER_CONFIG | .digger/config.json | 覆盖配置文件路径 |
MANAGED_SOURCE_DIR | .digger/source | 覆盖托管克隆目录 |
CACHE_DIR | .digger/cache | 覆盖缓存目录 |
密钥(PAT 值)应放在 .env 文件或实际环境中——切勿将其作为此表中的环境变量。
🩺 诊断与恢复
| 症状 | 首次调用 | 然后 |
|---|---|---|
| 连接/身份验证问题 | dig_status | 报告身份验证尝试、具体错误和可操作的提示 |
| 显示“没有匹配项”,但你预计会有结果 | dig_refresh <repo> | 强制重建索引,并应用新的提取逻辑 |
| 服务已启动,但看不到任何工具 | dig_status | 如果尚未配置,只会注册 dig_status 和 dig_init |
| 需要从头开始创建配置 | dig_init | 创建 .digger/config.json 脚手架(以原子方式操作,不会覆盖现有文件) |
调试日志
在配置中启用调试日志:
{ "debug": true, "repos": [...] }
日志写入 .digger/debug.log(上限为 5 MB,并会自动截断)。严重错误和崩溃输出会写入 .digger/error.log。
💬 反馈
在你的代码库上试用了 mcp-digger?欢迎在 GitHub Discussions 分享哪些功能有效、哪些出了问题,以及还缺少什么。错误报告请提交至 Issues。
📜 许可证
MIT 许可证 — 详见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。