内容
lens-mcp
**确定性导航映射,适用于代码和 Markdown —— 适用于代理。** 一个 MCP 服务器,两个镜头:用于源代码-sitter(TypeScript / JavaScript / Python)和用于文档的一个廉价的调用回答“X 在哪里,这个是什么?”——因此代理将思考,而不是用于浏览文件。
[模型上下文协议](httpscontextprotocol.io); MCP 客户端配合使用 — Claude Code、Cursor、Codex 或代理。
## 为什么
在不熟悉的仓库中,代理人通常 `ls`、`grep` 和阅读整个文件来定位某个正确的文档。lens 返回映射而不是领域:
- **`` 读取一个函数** — 通常比阅读它所在的整个文件少约 99%。
- **`heading` 读取一个文档部分** — 引用的标题及其子部分,其他内容不包括。
- **`map` 返回整个项目的表面** — 每个代码文件的结构 **和** 每个文档的大纲 — 只需一次调用。
每个输出都是确定性的(真正的解析,而不是模型汇总),上限带有诚实的 `truncated` 标志,并受一个契约约束:
> **lens 是一个导航地图。 使用它来定位,然后在判断或修改之前读取真正的源代码/部分。 签名不是函数体;大纲不是部分。**
## 工具(13 个)
### 导航
| 工具 | 功能 |
|---|---|
| `map` | 一次调用获取整个树的表面:每个代码文件 → 结构;每个文档 → 标题 + 大纲。两类工具,统一响应。 |
| `info` | 版本、沙盒根目录、支持的扩展、工具列表输出上限和 lens约。 |
| `lens_system` | 安装状态、自我更新(背后是 `update.sh`)和获取当前的 AGENTS.md — lens 的自我维护工具。 |
### 代码-sitter — `.ts .tsx .mts .cts .js .jsx .mjs .cjs .py` Prisma(`.prisma`)
| 工具 | 功能 |
|---|---|
| `overview` | 一个文件的导入、类(+ 方法)、顶级函数,行范围。 |
| `functions` | 每个函数(包括嵌套函数)——签名、参数/类型、`作用域、类型。 |
| `function_body` |逐字源代码 — 关注的读取内容。 |
| 注释 + `TODO/FIXME/ACK/…` 标记(`markersOnly` 用于债务 |
| `find` | 按名称定位**定义**、类和 `const`/`type`/`enum`/ 跨目录。 |
| `references` | 反之亦然:谁**使用**一个符号 — 调用站点、导入、类型引用 — tree-sitter 精确,无 grep 假阳性。 |
### 文档(Markdown — `.md .markdown .mdx`)
| 工具 | 功能 |
|---|---|
| `outline` | 完整的标题层次结构(目录)附带行号。 |
| `heading` | 按标题文本/斜杠/行号读取**一个部分**。 |
| `links` | 提取内联/图像/维基链接/自动链接/引用链接。 |
| `search` | 文档的区分大小写全文搜索(标题命中优先)。 |
`overview`/`find`/`map` 也涵盖 **Prisma 模式**(`schema.prisma` → 模型、枚举、字段、关系)。JSON 配置/i18n 没有结构化映射 — lens 诚实地说明并指向 grep。
在 `.md` 上调用代码工具(或在 `.ts` 上调用文档工具)会失败,并带有指向正确工具的有用指针 — 没有静默混淆。
## 诚实至上
- **绝不静默数据丢失** — 具有语法错误的 文件返回 `hasErrors` + `parseErrors`,仍然提取它能提取的内容;`map`/`find` 中无法解析的文件内联显示 `error`,永远不会消失。
- **处处都有上限** — 每个列表都有界限(参见 `info.limits`),每个上限都用真实总数报告。带有无界输出的上下文节省工具是自相。
- ** — 只有服务器工作目录下的文件可读;拒绝转义符号链接。`info` 报告根目录。
- **错误指出解决方法** — `{error, path,设置 `isError`。
## 安装
一行命令克安装并写入一个可用的 MCP 配置,包含此安装的绝对路径:
```bash
git clone https://github.com/segentic-lab/lens-mcp && cd lens-mcp && ./install.sh
```
无需系统软件包和原生构建 — tree-sitter 以 WebAssembly 运行,因此在 **Node 18+** 运行的任何地方(Linux、macOS、Windows via WSL/Git Bash)都能运行。安装程序检查 Node,运行 `npm ci`,构建(`tsc → dist/`),自我测试整个套件(143 个测试),并生成 `mcp-config.json`。
**与您的客户端注册** — 生成的 `mcp-config.json` 类似:
```json
{
"mcpServers": {
"lens": { "command": "node", "args": ["/abs/path/lens-mcp/dist/index.js"] }
}
}
```
- ** Code:** `claude mcp add lens -- node /abs/path/lens-mcp/dist/index.js` (或将 `m.json` 复制到项目中作为 `.mcp.json`)
- **Cursor / Windsurf:** 将 `mcp-config.json` 合并到 `~/.cursor/mcp.json`
- **Codex CLI:** 在 `~/.codex/config.toml` 中添加 `[mcp_servers.lens]`,并使用相同的命令/参数
lens 在其**工作目录**下读取文件 — 您的客户端启动它的项目。指向一个项目并调用 `map(".")`。工作目录之外没有任何文件可读。
**后续更新**:
```bash
./update.sh # --ff-only + reinstall +
```
<sub>如果您更喜欢手动操作?` && npm run build && npm test`,然后运行 `.js`。</sub 血统
lens-mcp **取代** 较早的独立服务器 `codelens-mcp`(代码)和 `docslens-mcp`(文档)— 相同的引擎,一个服务器,一个管道。 与 [periscope-mcp](https://github.com/segentic-lab/periscope-mcp)(Web 应用程序 QA)是 sibling; 构建到相同的标准:诚实的错误, 上限 + 截断标志 everywhere, 文档 == 行为,发布前测试。
由 **[Segentic Lab](https://lab.segentic.dev)** 构建。 AGPL-3.0.