nabi-codegraph-mcp — 最小化代码图 + MCP 服务器(TS + Python)
这是一个 自给自足的启动器 在(某个基础之上)构建一个轻量级的代码图 TypeScript 并且 python,然后通过一个(接口/方式)将其暴露出来 MCP服务器 因此,具有代理功能的客户端(如Claude桌面版、Cursor、Copilot Studio、OpenAI Agents、Azure)可以对其进行查询。
设计目标小巧、实用、易于扩展。无需重型的LSIF/SCIP索引器即可开始使用(不过之后也可以集成它们)。
______________________________________________________________________
你得到的是
- 摄入(无需构建):
- TypeScript 使用官方方法解析 typescript 编译器API。 - python 使用标准库进行解析 ast 模块。 - 我们提取符号(函数、类、方法、变量、按文件划分的模块)和边(import, call, member_of, defines)。
- 图表格式:
- 简单的JSON文件位于 ./data/graph.json 和;带有;用 symbols[] 并且 edges[]。 - 之后很容易替换为 SQLite 或 SCIP。
- MCP 服务器(
code-graph):
- graph.resolve_symbol({ q }) → 通过名称模糊查找符号。 - graph.references({ id }) → 输入边(调用/导入此符号的实体)。 - graph.related({ id, k }) → k 个邻居(导入/调用)。 - graph.impact_from_diff({ patch }) → 已更改的文件 + 一跳邻居影响集。 - 资源: code://file/{path}?s=..&e=.. → 为上下文窗口流式传输代码片段。
- 示例仓库 以测试摄入(或摄取)
./example(包含TS + Py文件)。
______________________________________________________________________
先决条件
- Node.js 20多个版本 (建议使用长期支持版本)。
- Python 3.10及以上版本 (仅限标准库)。
提示:此仓库避免使用原生数据库绑定,以实现最大程度的可移植性。图数据以JSON格式存储,并由服务器加载到内存中。
______________________________________________________________________
快速入门(5分钟)
# 1) Install deps
npm install
# 2) Build a graph from the example code
npm run ingest -- --target ./example
# 3) Run the MCP server (stdio)
npm run dev:server你应该能看到 code-graph 启动并宣布工具。
______________________________________________________________________
与Claude桌面版(macOS/Linux/Windows)配合使用
在你的(列表/日志/文件等)中添加一项 Claude Desktop 配置 通过标准输入输出(stdio)注册MCP服务器。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
使用随附的模板,并将此文件夹的绝对路径替换为:
{
"mcpServers": {
"code-graph": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/dist/mcp/server.js"],
"environment": {
"NABI_GRAPH_JSON": "/ABSOLUTE/PATH/TO/data/graph.json"
}
}
}
}重启Claude桌面版。在新的聊天中,让它 连接到 code-graph MCP服务器 并尝试使用以下工具:
graph.resolve_symbol(与……一起)带着;用;凭借{ "q": "greet" }graph.related带有返回的符号idgraph.impact_from_diff贴上补丁
注客户在展示MCP(可能是指某种工具或平台)工具的方式上存在差异。在Claude中,您可以在会话侧边栏中查看已连接的工具/资源。
______________________________________________________________________
命令与脚本
# Dev server (TypeScript via tsx)
npm run dev:server
# Compile to dist/ (pure JS ESM)
npm run build
npm start # runs the built server
# Ingest (scan target directory and build ./data/graph.json)
npm run ingest -- --target ./example
npm run ingest -- --target /path/to/your/repo
# Optional: re-run impact analysis from a diff file
cat my.patch | npm run impact______________________________________________________________________
如何摄入工作(太长了,读不下去了)
- TypeScript我们使用TS编译器API遍历每个文件的抽象语法树(AST),收集符号(函数/类/方法/变量)、调用和导入。我们还为每个文件创建了一个 模块符号 作为主播。
- python一个小
py/ingest_py.py使用ast做同样的事情。它打印 NDJSON(Newline Delimited JSON) 在标准输出(stdout)上,节点编排器会读取并合并这些信息。 - 边缘分辨率调用通过名称与定义进行匹配,采用了一种简单的启发式方法(首先优先匹配同一文件中的符号,否则匹配第一个找到的)。这种方法设计得相当简洁——足以帮助你初始化图表并使MCP查询变得有用。
之后,你可以插上 Tree-sitter(树坐者,但通常直接译为“树解析器”或保持原名,因其是一个用于解析源代码的库) 或者 SCIP(Secure, Compliant, Integrated, and Portable,可理解为“安全、合规、集成、便携”) 以实现更深入、跨仓库的精确度。
______________________________________________________________________
数据模型
type Range = { startLine: number; startCol: number; endLine: number; endCol: number };
type Symbol = {
id: string; kind: 'function'|'class'|'method'|'variable'|'module';
name: string; file: string; range: Range; language: 'typescript'|'python';
signature?: string; parentId?: string|null;
};
type EdgeType = 'defines'|'call'|'import'|'member_of';
type Edge = { src: string; type: EdgeType; dst: string };
type Graph = { symbols: Symbol[]; edges: Edge[] };______________________________________________________________________
路线图:该往何处去
- 添加 SCIP摄入 (scip-ts / scip-python) 并沿着此 AST 路径合并边。
- 将JSON存储替换为 SQLite 并为大型单体仓库添加索引。
- 添加 结构重写/代码转换 钩子和
graph.impact_from_diff精细化处理(图半径加权、流失先验)。 - 暴露于 搜索资源:
graph://symbol?q=...直接流式传输代码片段。
______________________________________________________________________
故障排除
- 如果服务器显示“未加载图表”,请运行
npm run ingest并确认./data/graph.json存在。 - Windows路径问题?在Claude配置中使用绝对路径,并用引号括起来。
- 未找到 Python?编辑
PYTHON_BIN在src/ingest/make_graph.ts到你的解释器路径。
______________________________________________________________________
许可证麻省理工学院(MIT)
