本地MCP服务器(Git和文件读取器)
本地人 模型上下文协议 (MCP)服务器,将您的AI客户端(Claude Desktop、Claude Code、Cursor、VS Code Continue/Cline等)转换为本地git存储库的高级用户。克隆转发、浏览代码、搜寻符号和检查提交历史记录—所有这些都无需在远程获取时燃烧API令牌。
v3.0 船舶 18工具 跨仓库管理、git检查和文件/代码探索。
______________________________________________________________________
✨ 功能概览
回购管理
| 工具 | 目的 |
|---|---|
add_repo | 在本地克隆公共仓库(支持 `tree/ |
| ` URL) | |
sync_repo | git pull 一个回购或全部回购 |
list_repos | 列出带有分支和上次同步的跟踪存储库 |
remove_repo | 解开并删除(或保留文件 keep_files=true) |
Git检查
| 工具 | 目的 |
|---|---|
git_log | 提交历史;筛选依据 file 或 since (“2周前”) |
git_show | 民政事务局局长一次提交的全部细节/差异 |
git_diff | 引用之间的差异(分支、标签、提交); stat_only 对于较大的差异 |
list_branches | 当地分支机构(或所有分支机构,包括。 origin/* 和 include_remote) |
list_tags | 标签/发布排序最新的第一 |
文件和代码探索
| 工具 | 目的 |
|---|---|
list_files | 带有ext+size+深度过滤器的递归列表 |
read_file | 全范围或行范围读取; 负面的 start_line 尾式阅读 |
search_code | 文本/正则表达式grep; 跳过二进制文件;区分大小写、正则表达式、整词、上下文行 |
get_tree | 可视化ASCII目录树 |
find_docs | 智能README/文档发现,排名+预览 |
batch_read | 在一次调用中读取多个文件(每个文件上限) |
find_files | 按glob名称查找(例如。 **/*Config*.ts) |
find_symbol | 定位 函数/类/接口/类型定义 跨TS/JS、Python、Go、Rust、Java、Kotlin、C#、PHP、Ruby |
search_all_repos | 一次跨每个跟踪的仓库运行查询 |
为什么这比原始的“让AI读取远程仓库”要好
- 无API代币成本 用于获取文件。
- 更快:本地磁盘上的glob+grep与往返GitHub。
- 分行意识:固定特定版本(例如。
filament-v5在分行5.x). - 符号感知:
find_symbol跳转到定义而不是模糊文本匹配。
______________________________________________________________________
📋 先决条件
- 包子 v1.0+
- Git打开
PATH
______________________________________________________________________
🚀 安装
git clone https://github.com/az-ka/my-local-mcp.git
cd my-local-mcp
bun install
bun run build # produces server.exe (Windows) or server (macOS/Linux)为了发展而不重建:
bun run start # runs src/index.ts directly
bun run typecheck # tsc --noEmit
bun run test.ts # 43 integration tests______________________________________________________________________
🔌 连接您的AI客户端
将示例路径替换为 绝对的 通往你的路 server.exe (Windows)或 server 二元的。
克劳德桌面版
编辑:
- 视窗:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"local-docs": {
"command": "D:/Ngoding/Bun/my-local-mcp/server.exe",
"args": []
}
}
}在Windows JSON上,转义反斜杠(\\) 或 使用正斜杠。保存后重新启动应用程序。克劳德代码(CLI)
claude mcp add local-docs "D:/Ngoding/Bun/my-local-mcp/server.exe"
claude mcp list # verify光标
Settings → Features → MCP → + Add New MCP Server
- 名称:
local-docs - 类型:
command - 命令:
D:/Ngoding/Bun/my-local-mcp/server.exe
VS代码——Cline/Roo代码
打开 MCP服务器 侧边栏中的面板→ Edit MCP Settings → 添加与Claude Desktop相同的JSON形状。
VS代码--继续
编辑 ~/.continue/config.json:
{
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "stdio",
"command": "D:/Ngoding/Bun/my-local-mcp/server.exe"
}
}
]
}
}验证是否已加载
启动时,服务器会记录到stderr:
Local MCP Server v3.0 running on StdIO — 18 tools loadedClaude桌面日志位于 %APPDATA%\Claude\logs\mcp-server-local-docs.log (Windows)。如果没有出现工具:检查路径是否为绝对路径,运行 server.exe 手动确认它启动,然后重新启动客户端。
更新二进制文件:客户端保持可执行文件打开。为了安装新版本, 先关闭客户端那么 bun run build,然后重新打开。______________________________________________________________________
💬 示例提示
"Check if I have the 'svelte' repo locally. If not,
add https://github.com/sveltejs/svelte."
"Add https://github.com/filamentphp/filament/tree/5.x as filament-v5."
"Sync all my local repositories."
"Where is `useAuth` defined in better-auth-docs?"
→ uses find_symbol
"Show me the last 10 commits to src/index.ts in atlas."
→ uses git_log with file filter
"Diff v1.5.0 vs v2.0.0 in drizzle-orm — stat only."
→ uses git_diff with stat_only=true
"Find all files matching **/test_*.py under src/ in convex-backend."
→ uses find_files
"Search for 'rate limit' across all my repos."
→ uses search_all_repos
"Read the last 100 lines of CHANGELOG.md in effect."
→ uses read_file with start_line=-100______________________________________________________________________
🌿 分行特定存储库
add_repo 以两种方式接受非默认分支:
{ "url": "https://github.com/filamentphp/filament", "name": "filament-v5", "branch": "5.x" }{ "url": "https://github.com/filamentphp/filament/tree/5.x", "name": "filament-v5" }两个克隆都有 --single-branch 以节省空间和速度。
______________________________________________________________________
🛡️ 安全和安保注意事项
- 路径遍历被阻止:每个文件op在repo根目录下通过以下方式解析
path.relative. - 跳过二进制文件 在
search_code(扩展块列表+前4KB中的空字节嗅探)。 - 标识符验证:
find_symbol拒绝任何非[A-Za-z_$][A-Za-z0-9_$]*. - SHA验证:
git_show只接受4-40个十六进制字符,没有外壳注入表面。 - 差分截断:过大的差异/文件将被截断,并使用清晰的
[WARNING: ...]标记。 - 无写访问权限:此服务器 不 修改克隆的存储库。它只克隆、拉取和读取。
______________________________________________________________________
🗂️ 项目结构
my-local-mcp/
├── src/
│ ├── index.ts # MCP server entry — registers all 18 tools
│ ├── config.ts # settings.json + storage path resolution
│ └── tools/
│ ├── git.ts # repo + history tools
│ └── files.ts # file + symbol + search tools
├── storage/ # cloned repos live here (gitignored)
├── settings.json # auto-generated tracked-repo registry (gitignored)
├── test.ts # 43 integration tests
├── server.exe # compiled binary (after bun run build)
└── package.json______________________________________________________________________
🧪 测试
bun run test.ts针对真实的测试仓库,涵盖所有端到端的工具(godotenv):
- URL规范化(包括。 `tree/
` 解析和拒绝无效路径)
- 使用每个标记列出/读取/搜索文件
- 负面的
start_line(最后N行) - 路径遍历拒绝
- 正则表达式拒绝无效 在
search_code - 二进制文件跳过 (隐式搜索避免垃圾解码)
find_symbol快乐+无效标识符路径git_log/git_show/git_diff/list_branches/list_tags
______________________________________________________________________
🛠️ 科技
- 包子 --运行时+bundler+独立二进制编译器
- 模型上下文协议SDK
- 简单git --包裹系统
git - 快速地球仪 --快速文件定位
- 黄道带 --输入模式验证
______________________________________________________________________
🙏 学分
- 受到启发 更好的上下文 用于本地上下文管理。
- 建立在官方 模型上下文协议SDK.
______________________________________________________________________
📜 许可证
麻省理工学院
