依赖源码解析工具

libsrc是一个自动解决项目依赖并提供本地源码路径的工具,适用于AI代理检查源码。

  • by fprochazka
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 fprochazka/libsrc-mcp

使用说明

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 cleanup

MCP工具: 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.

源存储库发现

分层策略(首场比赛获胜):

  1. deps.dev API --谷歌的统一包到仓库映射(Maven、PyPI、npm、Go等)。响应在本地缓存。
  2. 注册表回退 --Maven中央POM <scm> 元素;PyPI JSON API project_urls.
  3. 启发法 --Maven组ID模式(com.github.*),包名称匹配。

克隆和工作树管理

  • 完整克隆到 <output_dir>/<hostname>/<owner>/<repo>
  • git fetch --all --tags 在每次标签查找之前
  • 版本工作树位于 <clone_path>.versions/<version> (在不同版本上启用并行代理)
  • 标签匹配:尝试 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/mcp

VS代码副本(.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<version>
git push origin v<version>

这 publish.yml GitHub Action通过可信发布自动构建并发布到PyPI。