关于 Lain Mcp
Lain 为编码 Agent 构建并查询代码图,适用于需要了解代码调用关系和变更影响的开发者。它通过 MCP 提供符号、调用链、依赖及 Git 协同变更信息;图谱保存在本地,语义搜索为可选功能。
主要功能
- 01构建符号、调用者和依赖关系图
- 02查询调用链、变更影响和架构入口
- 03利用 Git 提交协同变更信息
- 04支持跨仓库搜索与影响分析
- 05通过 intents、presence 和文件声明协调 Agent
适用场景
- 01修改函数前检查潜在影响范围
- 02追踪两个函数之间的调用路径
- 03查找经常随某文件共同变更的文件
- 04查看其他 Agent 是否正在处理相同代码
MCP 相关
Lain 通过 MCP 将本地代码图查询工具提供给编码 Agent,包括符号搜索、调用链、变更影响和跨仓库查询。它通过 stdio 服务仓库索引。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Lain
面向编码 Agent 的代码图谱。 Lain 会映射调用方、依赖项、符号和 Git 协同变更,然后通过模型上下文协议(MCP)提供这些信息。Agent 修改函数前,可以先检查哪些内容依赖它,以及代码的其他部分如何调用它。

此演示会跨 bytes 和 tokio 仓库追踪一个符号。Agent 通过 MCP 查询同一张图谱;浏览器则展示 Lain 编入索引的内容,以及答案的来源。
向你的 Agent 提问:
If I change validate_token, what breaks?
Show me the call chain from entry to helper_a.
Which files usually change with auth.rs?
Is another agent already editing this code?
Lain 会根据本地索引,使用符号名称和源代码路径作答。索引会在运行之间保留在磁盘上,也可以涵盖多个仓库。它追踪的是提交,而非未提交的编辑:提交后,重新索引(lain reindex 或启动新会话)即可更新索引;如果答案可能遗漏近期工作,Lain 会明确说明,而不是保持沉默。语义搜索是可选的;无需嵌入模型也能查询图谱。
安装
使用发行版安装程序:
curl -fsSL https://raw.githubusercontent.com/spuentesp/lain/main/install.sh | bash
source ~/.zshrc # or ~/.bashrc
lain --version
或通过 npm 安装(macOS、Linux 和 x64 Windows):
npm install -g @spuentesp/lain-mcp
lain --version
关于 npm 的两点说明:
- 如果 npm 的全局 bin 目录中已有无关的
lain文件,npm install -g会因EEXIST失败。例如,当 npm 前缀为~/.local时,~/.local/bin中可能有旧的手动副本。npm 错误本身无法判断该文件是否无关;请移动或删除该文件,或使用其他前缀安装:npm install -g --prefix ~/.local/lain-npm @spuentesp/lain-mcp(然后将~/.local/lain-npm/bin添加到PATH)。 - 如果禁用了 npm 安装脚本(使用了
--ignore-scripts,或在受限的 CI 环境中),安装期间不会获取平台二进制文件。首次运行lain时会下载并验证该文件,因此首次运行需要网络连接;缓存后,lain 即可离线运行。
仅从源代码构建时才需要 Rust 1.89 或更高版本。快速入门介绍了非交互式安装和可选的本地嵌入模型。
连接 Agent
在你希望 Lain 编入索引的仓库中,运行一条设置命令:
lain setup --agent claude-code
lain setup --agent codex
lain setup --agent cursor
lain setup --agent vscode
lain setup --agent continue
对于其他 MCP 主机,请使用 lain setup --agent generic。每个适配器都会写入客户端自己的配置:Claude Code 使用 claude mcp add,Codex 使用 ~/.codex/config.toml,Cursor 使用 ~/.cursor/mcp.json,VS Code 使用 .vscode/mcp.json(或用户级 mcp.json),Continue 则使用仓库 .continue/mcpServers/ 下的区块文件。generic 会写入此项目级 .mcp.json:
{
"mcpServers": {
"lain": {
"command": "/home/you/.local/lain/lain",
"args": ["mcp"]
}
}
}
command 始终是运行设置命令的 lain 二进制文件的绝对路径,而非单独的名称,因此无论 Agent 继承哪个 PATH,都会运行同一个二进制文件。该路径取决于安装方式:发行版安装程序会将二进制文件放在 ~/.local/lain/lain,而 npm 包会注册它启动的、经过验证的缓存二进制文件(Linux 上为 ~/.cache/lain/<version>/<target>/lain,macOS 上为 ~/Library/Caches/lain/…,Windows 上为 %LOCALAPPDATA%\lain\Cache\…)。设置完成后,会恰好启动该命令一次,并验证 MCP 握手。
在终端中,不带 --agent 运行 lain setup 时,会询问要配置哪个客户端(按 Enter 键选择 Claude Code);不带 --lsp 时,会询问要安装哪些可选语言服务器(按 Enter 键表示不安装)。非交互式运行默认使用 generic,且不安装语言服务器,因此脚本应明确传入 --agent 和 --lsp。
设置完成后,重启 Agent。Lain 会从 Agent 的工作目录向上查找 .git,构建 .lain/graph.bin,并通过 stdio 提供仓库服务。只有一个仓库时,无需 repos.yaml。
语言
Rust、Python、TypeScript、JavaScript、Go、Java、C、C++、C#、Ruby、
Swift、Kotlin、Scala 和 PHP 的解析器都内置于二进制文件中,Vue 和 Svelte 组件的 <script>
代码块也不例外。每种语言都能生成定义和调用图,无需安装其他任何内容。
语言服务器是可选的,只能提升精度。lain setup 会列出检测到的语言,并询问要安装哪些服务器;按 Enter 键则不安装任何服务器。非交互式运行时不会安装任何服务器,除非你指定:
lain setup --lsp python,go # just these
lain setup --lsp detected # every missing one for this repository
lain setup --lsp none
首次查询
向已连接的 Agent 提问:
Use Lain to show the blast radius of validate_token.
也可以在终端中调用同一个工具:
lain oneshot get_blast_radius validate_token
请用仓库中的符号替换 validate_token。如果图尚未就绪,或者答案看起来已过时,请运行 lain doctor。
多个仓库
lain repos add bytes https://github.com/tokio-rs/bytes.git
lain repos add tokio https://github.com/tokio-rs/tokio.git
lain workspaces create tokio-stack --members bytes,tokio
lain server --config ./repos.yaml --transport http --port 9999
打开 http://localhost:9999 访问 Command Center。服务器仅监听 localhost;设置 LAIN_BIND_ADDR=0.0.0.0(并设置 LAIN_API_KEYS=key1,…)即可在网络中公开访问。联邦功能支持组织范围的搜索和跨仓库影响范围查询。联邦指南介绍了配置、来源类型和故障状态。联邦架构升级后,运行 lain reindex,从来源重建磁盘上的图。
检查图
在源代码检出目录中:
scripts/demo.sh --quick
该脚本会创建一个调用图已知的小型仓库,启动真实的 Lain 服务器,并将答案与该调用图进行比较。检查失败时,脚本会以非零状态码退出。完整运行还会记录针对当前仓库的耗时。
Lain 提供的功能
| 需求 | 工具或功能 |
|---|---|
| 修改符号前查看调用方 | get_blast_radius、assess_change |
| 追踪两个函数之间的连接路径 | get_call_chain |
| 查找架构入口点 | find_anchors、list_entry_points |
| 按名称或含义搜索 | find_symbol、search_code |
| 跨仓库追踪符号 | get_cross_repo_blast_radius、search_org |
| 避免 Agent 在不了解情况时同时编辑同一段代码 | 意图、状态信息和建议性文件声明 |
静态分析无法证明每个通过消息总线、依赖注入容器或反射式路由器触发的动态调用。explain_dispatch 会结合静态调用方、约定匹配、运行时追踪和 Git 联合变更证据;结果为空时会标记为 insufficient_evidence,而不会声称编辑是安全的。
文档
| 从这里开始 | 内容 |
|---|---|
| 快速入门 | 安装、首次查询和故障排查 |
| 用户手册 | CLI 参考、调优、操作和故障排查 |
| 工具指南 | MCP 工具、参数、输出和限制 |
| 技能包 | 可由 Agent 加载的技能和角色配方 |
| 联邦 | 多仓库配置和查询 |
| 多人协作 | Agent 状态、意图、声明和钩子 |
| 架构 | 图的构建和设计选择 |
| 文档索引 | 所有维护中的文档 |
项目状态
许可证
MIT — 版权所有 (c) 2026 spuentesp
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。