libsrc
一个MCP服务器,用于解析项目依赖关系,并为AI代理检查提供本地源代码路径。它自动检测构建系统,解析依赖关系,查找源代码存储库,克隆它们,并作为git工作树签出正确的版本——所有这些都在一次工具调用中完成。
为什么
当AI编码代理能够检查项目中使用的库的源代码时,它们的工作效果最好。但要找到这些来源比应有的要困难得多:
- 已发布的包是不透明的 --Java分发编译后的JAR,即使在
-sources.jar如果可用,则必须单独提取。Python轮子包含字节码和剥离的元数据。在这两种情况下,将可读源代码交到代理手中都是不必要的困难。 - 包失去上下文 --原始源代码存储库通常包含从已发布包中剥离的文档、示例和markdown文件。
- 准确的版本很重要 --代理需要项目所依赖的精确版本,而不是“最新”或“足够接近”。libsrc从锁文件和构建工具中解析出确切的版本,然后检查出匹配的git标签。
- 标准工具仅适用于克隆的存储库 --为代理提供git签出的本地路径,使其能够轻松、可预测地使用标准文件工具进行探索。没有JAR提取,没有归档解包,没有猜测——只是一个普通的源文件目录。
- 平行友好 --每个版本都有自己的git工作树,因此多个代理(或跨任务的同一代理)可以同时检查同一库的不同版本,而不会发生冲突。
libsrc弥合了这一差距:一个工具调用将依赖项名称转换为代理可以立即探索的本地路径。
支持的生态系统
- Java:Maven(
pom.xml)Gradle(build.gradle,build.gradle.kts) - python:诗歌(
pyproject.toml+poetry.lock),紫外线(pyproject.toml+uv.lock)
普通pip/ requirements.txt 不支持(没有锁定文件就没有可靠的版本解析)。
安装
# Install as a tool
uv tool install libsrc-mcp
# Or run directly without installing
uvx libsrc-mcp serve
# Auto-register in detected AI coding tools
libsrc-mcp install自动安装到AI工具中
libsrc-mcp install 检测已安装的AI编码工具,并将MCP服务器添加到其配置中。支持:Claude Code、Cursor、Windsurf、Codex CLI、Gemini CLI、JetBrains Junie、VS Code Copilot。跳过未安装或已配置的工具。
libsrc-mcp install
libsrc-mcp install --port 8080 # if using a non-default port配置
创建 ~/.config/libsrc/config.yml (所有字段均为可选):
# Directory where library sources are cloned (default: ~/devel/libs/)
output_dir: ~/devel/libs/
# HTTP server port (default: 7890)
port: 7890
# Trusted git hostings for cloning (default: github.com, gitlab.com)
trusted_hosts:
- github.com
- gitlab.com
# deps.dev API cache TTL in hours (default: 24)
deps_dev_cache_ttl: 24用法
启动服务器
libsrc-mcp serve
libsrc-mcp serve --port 8080系统服务(Linux)
mkdir -p ~/.config/systemd/user
cp systemd/libsrc-mcp.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now libsrc-mcp工作树清理
服务器启动时,7天以上未访问的工作树会自动清理。手动清理:
libsrc-mcp cleanupMCP工具: get_library_sources
| 参数 | 类型 | 说明 |
|---|---|---|
project_dir | string | 项目根目录的绝对路径。自动检测构建系统。 |
library_name | string? | 用完整标识符替换过滤器(例如。 "hibernate" 火柴 org.hibernate:hibernate-core:6.4.1).省略时,列出依赖项而不进行克隆。 |
transitive | bool | 包括传递依赖关系(默认值: false). |
没有 library_name: 返回用于查找的依赖关系列表。 随着 library_name: 解析源代码仓库,克隆,创建版本工作树,返回本地路径。
运作原理
依赖解析
锁定文件可用时是首选,CLI工具是备用:
| 生态系统 | 锁定文件(首选) | CLI回退 |
|---|---|---|
| Maven | -- | mvnw dependency:tree -DoutputType=json |
| Gradle | -- | gradlew dependencies --configuration runtimeClasspath |
| 诗歌 | poetry.lock (汤姆) | poetry show --tree |
| 紫外线 | uv.lock (汤姆) | uv tree |
首选构建工具包装器: mvnw > mvn, gradlew > gradle.
源存储库发现
分层策略(首场比赛获胜):
- deps.dev API --谷歌的统一包到仓库映射(Maven、PyPI、npm、Go等)。响应在本地缓存。
- 注册表回退 --Maven中央POM `
元素;PyPI JSON APIproject_urls`. - 启发法 --Maven组ID模式(
com.github.*),包名称匹配。
克隆和工作树管理
- 完整克隆到
/// git fetch --all --tags在每次标签查找之前- 版本工作树位于
.versions/(在不同版本上启用并行代理) - 标签匹配:尝试
v{ver},{ver},release-{ver},{artifact}-{ver},后缀/包含回退 - 条带发布限定符(
.Final,.RELEASE,.GA)对于在标签中省略它们的项目 - Monrepo dedup:相同的repo+版本=一个跨工件共享的工作树
- 基于文件的锁定(
fcntl.flock)为了并发安全
缓存
- 依赖缓存:
~/.cache/libsrc/deps/由所有构建/锁定文件的内容哈希键控(在任何文件更改时无效) - deps.dev缓存:
~/.cache/libsrc/depsdev/带可配置TTL - 工作树跟踪器:
~/.cache/libsrc/worktree-access.json用于LRU清理
MCP客户端配置
克劳德代码
claude mcp add libsrc --transport http http://127.0.0.1:7890/mcpVS代码副本(.vscode/mcp.json)
{
"servers": {
"libsrc": { "type": "http", "url": "http://127.0.0.1:7890/mcp" }
}
}其他工具
{
"mcpServers": {
"libsrc": { "type": "http", "url": "http://127.0.0.1:7890/mcp" }
}
}看 docs/mcp-auto-install.md 有关特定工具的配置详细信息(Cursor、Windsurf、Gemini CLI、Codex CLI、Cline、Continue.dev、JetBrains Junie)。
释放
版本是通过git标签自动导出的 hatch-vcs --不需要手动版本升级。
git tag v
git push origin v这 publish.yml GitHub Action通过可信发布自动构建并发布到PyPI。
