代码图集
    
一个开源MCP服务器,构建任何存储库的实时代码知识图,并将其暴露给人工智能编码代理,如Claude code和Cursor,以及同一图上的CLI、HTTP API和React web UI。
问题
人工智能编码代理在做实际工作之前,浪费了60-80%的上下文窗口在代码库中定位自己。CodeAtlas为他们提供了预先构建的结构和语义知识,这样他们就可以从第一个标记开始智能导航。
为什么选择CodeAtlas
- 持久SQLite+FTS5图 --缩放超过1M符号,增量更新;不是公寓
graph.json每次运行都重新序列化。 - 基于真正嵌入的语义搜索 --FAISS+句子转换,而不仅仅是关键字匹配。混合模式通过互易秩融合来混合FTS5+矢量。
- PageRank中心性 --呼叫者加权重要性,而不是基于程度的“上帝节点”启发式方法。加上标签传播社区、git流失热点和覆盖缺口。
- 29个MCP工具,27个CLI子命令,6种导出格式 --该类别中最宽的试剂和终端表面。
- 完整的React web用户界面 --交互式力图、搜索、符号详细信息、分析选项卡——所有这些都由FastAPI层支持。只需一个命令即可启动:
codeatlas ui. - 26种语言通过树保姆 --Python、Types/TSX、Go、Rust、Java、C、C++、C#、Ruby、JavaScript、Kotlin、PHP、Scala、Bash、Lua、Elixir、Swift、Haskell、SQL、Zig、OCaml、Julia、PowerShell、Svelte。
特性
- 多语言解析 --26种语言的树型AST解析(如上所列)。
- 知识图谱 --SQLite+FTS5,具有递归CTE图遍历(零基础设施)。
- 语义搜索 --使用句子变换器进行自然语言代码查询的FAISS向量搜索。
- 混合搜索 --将关键字(FTS5)和向量(FAISS)结果进行交互排名融合。
- 图分析 --PageRank、社区检测、循环检测、死代码、热点、覆盖缺口、最短路径、文件耦合。
- 交互式可视化 --React+反应力图web UI,以及独立的D3.js HTML导出。
- HTTP/JSON API --FastAPI层位于图形之上,用于定制前端和工具。
- 实时同步 --监视器文件监视器和GitHub webhook处理程序,用于增量更新。
- 变更影响分析 --Git感知差异分析,显示哪些符号和文件受到影响。
- MCP服务器 --通过模型上下文协议公开了29个用于AI代理消费的工具。
- 图形导出 --DOT(Graphviz)、JSON(D3.js)、Mermaid、GraphML、CSV和Cypher格式。
- 配置文件 --可选
codeatlas.toml用于每个repo设置。
快速开始
pip install codeatlas
# Initialize a config file (optional)
codeatlas init
# Index a repository
codeatlas index /path/to/repo
# View graph statistics
codeatlas stats
# Search by keyword
codeatlas query "authentication"
# Search by natural language (requires sentence-transformers)
codeatlas query "where do we handle login errors" --semantic
# Inspect a specific symbol
codeatlas show UserService
# Run code quality audit (cycles, dead code, complexity)
codeatlas audit
# Visualize the graph in your browser
codeatlas viz --open
# Watch for file changes
codeatlas watch /path/to/repo
# Export the graph
codeatlas export --format dot -o graph.dot
codeatlas export --format json -o graph.json
codeatlas export --format mermaid -o diagram.md
# Launch the web UI (API + React frontend, one command)
codeatlas uiWeb用户界面
CodeAtlas附带了基于Vite、Tailwind和反作用力图构建的React+TypeScript前端。它与同一图形存储上的FastAPI层进行通信,因此CLI、MCP服务器和web UI都看到了相同的数据。
# Build the frontend once
cd frontend && npm install && npm run build && cd ..
# Serve API + UI on localhost:8080
codeatlas ui
# Or run them separately during development
codeatlas server --port 8080 # API only
cd frontend && npm run dev # Vite dev server with /api proxyUI表面:
- 仪表盘 --按PageRank、文件热点、语言和符号细分、统计数据列出的顶级符号
- 搜索 --全文+语义搜索,结果详细信息窗格显示签名、文档字符串、传入/传出引用
- 分析 --标签式界面,具有PageRank排名、热点识别、社区检测、覆盖差距分析
- 图 --具有种类/社区着色、图例和文件过滤的交互式力量导向可视化
- 符号 --详细的符号页面,包括签名、文件、文件位置、进出参考卡
- 差异 --比较两个git引用之间的符号(添加/删除/修改的列)
- 设置 -配置API凭据,触发增量/完整重新索引,查看版本信息
安装
# Core (parsing + graph + CLI)
pip install codeatlas
# With MCP server
pip install codeatlas[mcp]
# With semantic search
pip install codeatlas[search]
# Everything
pip install codeatlas[all]支持的语言
| 语言 | 扩展名 | 摘录 |
|---|---|---|
| python | .py | 类、函数、方法、装饰器、文档字符串、导入、继承 |
| Types/TSX | .ts, .tsx | 函数、类、接口、类型别名、导出、泛型、JSDoc |
| JavaScript | .js, .mjs, .cjs | 类、函数、箭头函数、导入、导出、JSDoc |
| 去 | .go | 函数、方法、结构、接口、包、类型别名 |
| 锈 | .rs | 结构、特征、枚举、impl块、类型别名, /// 文档注释 |
| Java | .java | 类、接口、枚举、记录、构造函数、Javadoc、注释 |
| Kotlin | .kt, .kts | 类、接口、对象、伴随对象、函数、KDoc |
| C/C++ | .cpp, .cc, .cxx, .hpp, .hxx, .h | 类、结构、枚举、命名空间、模板、继承, /////** */ docs |
| C | .cs | 类、接口、结构、枚举、记录、属性、XML文档注释、继承 |
| 红宝石 | .rb | 类、模块、方法、常量,需要导入, # 文档注释 |
| PHP | .php | 类、接口、特性、函数、使用导入、PHPDoc |
| Scala | .scala, .sc | 类、特征、对象、函数、val/var、Scaladoc |
| Bash | .sh, .bash | 函数、UPPER_CASE常数、, # 文档注释、调用关系 |
| 路亚 | .lua | 函数、局部函数、函数表达式、变量, -- 文档注释 |
| 灵药 | .ex, .exs | 模块、协议(接口)、def/defp函数、, @doc 文档字符串 |
| 迅速 | .swift | 类、结构、协议(接口)、函数、方法、类型别名、, /////** */ docs |
| 哈斯克尔 | .hs, .lhs | 函数、数据类型、类型别名、新类型、类型类(接口)、导入、调用关系 |
| 结构化查询语言 | .sql | 表、视图(类)、函数/过程(函数)、来自视图和函数的跨表调用 |
| C | .c | 函数、typedef结构/枚举(CLASS)、类型别名、包含(IMPORT)、调用关系 |
| 之字形 | .zig | 函数、结构/枚举/联合(CLASS), @import (IMPORT)、UPPER_CASE常量、调用关系 |
| OCaml | .ml, .mli | 功能(let)、类型(CLASS)、模块(MODULE)、模块方法, open 导入、调用关系 |
| 朱莉娅 | .jl | 模块、结构(类)、抽象类型(接口)、函数、宏, import/using常数, # 文档注释 |
| PowerShell | .ps1, .psm1, .psd1 | 函数、类、方法、构造函数, # doc注释、cmdlet调用关系 |
| 斯维尔特 | .svelte | 组件(类别), ` 功能、箭头功能, import` 语句、调用关系 |
配置
CodeAtlas可以配置为 codeatlas.toml 存储库根目录中的文件。生成一个:
codeatlas init示例 codeatlas.toml:
[codeatlas]
exclude_dirs = [".git", ".venv", "node_modules", "__pycache__", "dist", "build"]
[codeatlas.parser]
max_file_size_kb = 500
include_extensions = [".py", ".ts", ".tsx", ".js", ".mjs", ".go", ".rs", ".java", ".kt", ".kts", ".cpp", ".cc", ".cxx", ".hpp", ".hxx", ".h", ".cs", ".rb", ".php", ".scala", ".sc", ".sh", ".bash", ".lua", ".ex", ".exs", ".swift", ".hs", ".lhs", ".sql", ".c", ".zig", ".ml", ".mli"]
[codeatlas.graph]
db_path = ".codeatlas/graph.db"如果找不到配置文件,则使用合理的默认值。
忽略包含以下内容的文件 .gitignore / .codeatlas-ignore
CodeAtlas自动尊重回购 .gitignore (如果存在)。添加a .codeatlas-ignore 当你需要额外的规则或否定时,在repo根目录中 gitignore条目;其模式在gitignore规则和 可以覆盖它们。
地点a .codeatlas-ignore 存储库根目录中的文件以排除特定 从索引中删除文件或目录。语法镜像 .gitignore:
# Skip generated artifacts
dist/
build/
*.log
# Skip a specific file (but re-include one via negation)
src/generated/
!src/generated/manifest.ts支持:评论(#)、空白线条、球形图案(*, **, ?), 仅目录模式(foo/),和否定(!pattern).
关系信心
图中的每条边都标记了置信度,以便代理可以分辨 AST证明了除启发式猜测之外的事实:
| 信心 | 意义 |
|---|---|
extracted | 直接出现在解析器输出中(相同的文件分辨率)。信任。 |
inferred | 通过跨文件的唯一名称查找来解决。可能是正确的。 |
ambiguous | 存在多个候选目标;启发式选择了一个。小心对待。 |
codeatlas report 表面计数;原始统计数据也可通过以下方式获得 GraphStore.get_confidence_stats()导出的JSON边带有相同的标签: codeatlas export --format json 发射 {"source", "target", "kind", "confidence"}, 交互式可视化绘制了推断出的虚边和模糊边 点状排列,因此启发式猜测一目了然。
社区观点
通过 --communities 到 codeatlas export 或 codeatlas viz 运行标签 在图上传播,并包括 community_id 在每个节点上。在 交互式可视化,节点由社区和工具栏切换绘制 在社区着色和善良着色之间切换。
CLI命令
| 命令 | 描述 |
|---|---|
codeatlas init | 生成一个 codeatlas.toml 配置文件 |
codeatlas index [path] | 将存储库索引到知识图中 |
codeatlas index [path] --incremental | 仅重新索引已更改的文件 |
codeatlas index [path] --watch | 索引,然后继续关注文件更改 |
codeatlas index [path] --workers N | 跨N个进程并行解析文件 |
codeatlas diff [path] | 显示自上次索引以来更改的文件 |
codeatlas stats | 显示图形统计信息(文件、符号、关系) |
codeatlas list-files | 列出所有带有语言和符号计数的索引文件 |
codeatlas query | 在代码库中进行全文搜索 |
codeatlas query --semantic | 自然语言语义搜索 |
codeatlas query --hybrid | FTS+语义搜索组合 |
codeatlas query --json | 将结果输出为JSON数组 |
codeatlas show | 检查符号的签名、文档、deps和调用链 |
codeatlas show --json | 以JSON格式输出符号详细信息 |
codeatlas audit | 运行代码质量分析(周期、死代码、复杂性) |
codeatlas audit --json | 以JSON格式输出审核结果 |
codeatlas audit --include-tests | 在死代码分析中包含测试文件符号 |
codeatlas find-path | 查找两个符号之间的最短依赖路径 |
codeatlas coupling | 显示文件耦合分析 |
codeatlas hotspots [path] | 显示风险最高的文件(数字流失×程度图) |
codeatlas hotspots [path] --json | 将热点输出为JSON |
codeatlas hubs | 显示中心符号,图中连接最紧密的(“上帝”)节点 |
codeatlas hubs --json | 将集线器符号输出为JSON |
codeatlas rank | 按PageRank对符号进行排名(按呼叫者重要性加权,而不是原始程度) |
codeatlas rank --kind class --json | 排名限制为一种,输出为JSON |
codeatlas communities | 通过标签传播检测紧密连接的子系统 |
codeatlas communities --json | 将社区分组输出为JSON |
codeatlas coverage-gaps | 显示测试覆盖率为零的公共符号 |
codeatlas report [path] | 生成完整的健康报告(周期、死代码、热点、差距) |
codeatlas report [path] --json | 以JSON格式输出健康报告 |
codeatlas pre-commit | 添加CodeAtlas增量索引挂钩 .pre-commit-config.yaml |
codeatlas impact [path] | 分析当前git更改对图形的影响 |
codeatlas export | 以DOT或JSON格式导出图形 |
codeatlas export --communities | 包括每个节点 community_id (以及DOT中社区的颜色节点) |
codeatlas viz | 生成交互式D3.js图形可视化 |
codeatlas viz --communities | 按检测到的社区划分颜色节点;添加工具栏切换(社区/种类) |
codeatlas watch [path] | 实时监视文件更改和更新图形 |
codeatlas webhook [path] | 启动GitHub webhook服务器以进行推送触发的更新 |
codeatlas trace | 从符号跟踪调用链(深度受限的BFS) |
codeatlas find-usages | 查找每个呼叫站点和符号参考 |
codeatlas languages | 列出所有支持的语言和文件扩展名 |
codeatlas clean | 删除 .codeatlas 目录 |
codeatlas serve | 启动MCP服务器 |
codeatlas server | 启动HTTP/JSON API(FastAPI+Uvicorn) |
codeatlas ui | 启动API并在一个命令中提供构建的web UI |
codeatlas install-completion [shell] | 打印shell完成激活行(bash/zsh/fish) |
MCP服务器
启动MCP服务器,以便与Claude Code、Cursor或任何与MCP兼容的代理一起使用:
codeatlas serveClaude代码配置
添加到您的Claude Code MCP设置中:
{
"mcpServers": {
"codeatlas": {
"command": "codeatlas",
"args": ["serve"]
}
}
}可用的MCP工具(29)
| 工具 | 说明 |
|---|---|
get_file_overview | 源文件的结构摘要 |
get_dependencies | 符号取决于什么,取决于什么 |
get_symbol_details | 一次调用中符号的完整元数据+关系 |
list_symbols_by_kind | 列出一种类型的所有符号(例如“显示所有类别”) |
trace_call_chain | 从符号遍历完整调用图 |
get_impact_analysis | 如果符号发生变化,会发生什么 |
search_symbols | 带有可选种类/文件过滤器和查询扩展的全文搜索 |
find_similar_code | 自然语言语义搜索 |
get_module_overview | 目录/模块摘要 |
get_file_dependencies | 文件级依赖关系图 |
get_graph_stats | 索引图的汇总统计 |
export_graph | 以DOT或JSON格式导出图形 |
detect_circular_dependencies | 在代码库中查找导入/调用周期 |
find_dead_code | 查找传入引用为零的符号 |
analyze_complexity | 符号中心性(最耦合/关键代码) |
find_path_between_symbols | 两个符号之间的最短依赖路径 |
get_file_coupling | 跨文件关系密度分析 |
get_change_impact | Git感知的变更影响分析 |
find_by_decorator | 查找所有标记有给定装饰器/注释的符号 |
get_symbol_history | Git责备/记录符号的历史记录(触及它的提交) |
get_hotspots | 最高风险文件:git流失×程度图 |
get_symbol_coverage | 哪些测试函数引用给定的符号 |
get_api_surface | 所有公共非测试符号-导出的API |
get_coverage_gaps | 测试覆盖率为零的公共符号——在新测试中优先考虑这些符号 |
get_file_content | 返回文件的原始源内容,可以选择切片到行范围 |
find_usages | 查找每个调用点、导入和引用一个符号(与跟踪相反) |
get_symbol_context | 一次调用中的符号元数据+周围的源代码片段 |
图形可视化
生成代码库的交互式力导向图:
# Generate and open in browser
codeatlas viz --open
# Save to a specific file
codeatlas viz -o my-graph.html
# Filter to specific directory
codeatlas viz --file-filter src/core/可视化功能:
- 使用D3.js进行强制布局
- 按符号类型(类、函数、接口等)对节点进行颜色编码
- 悬停以突出显示符号的直接连接
- 按名称筛选符号的搜索栏
- 用鼠标缩放和平移
- 拖动节点以重新排列
GitHub 网络钩子
对于推送时的自动图形更新:
codeatlas webhook /path/to/repo --port 9000 --secret YOUR_WEBHOOK_SECRET然后将您的GitHub repo webhook配置为POST到 http://your-server:9000/webhook.
建筑
Source Files --> Tree-sitter AST --> Symbols + Relationships --> SQLite Graph
|
+--------+---------+--------+
| | | |
FTS5 FAISS Graph D3.js
Search Vectors Analysis Viz
| | | |
+--------+---------+--------+
|
CLI + MCP Server --> AI Agents设计决策:
- SQLite over Neo4j:零基础设施,Python附带,FTS5用于关键字搜索,递归CTE用于图遍历
- pgvector上的FAISS:在没有数据库服务器的情况下本地运行
- 正则表达式上的树保姆:增量解析,处理所有边缘情况,跨语言一致性
发展
# Clone and set up
git clone https://github.com/AryanSaini26/CodeAtlas.git
cd CodeAtlas
python3.12 -m venv .venv
.venv/bin/pip install -e ".[all,dev]"
# Run tests with coverage (1038 tests, 92.2%)
.venv/bin/pytest -v --cov=codeatlas --cov-report=term-missing
# Lint / format
.venv/bin/ruff check src tests
.venv/bin/ruff format src tests
# Benchmarks (clones requests + click, runs timing/memory/token-savings)
python benchmarks/bench.py释放
发布是通过GitHub Actions完全自动化的。要剪切新版本,请执行以下操作:
# Bump version, tag, and push — CI will build and publish to PyPI
make release VERSION=0.2.0要求:
- 在PyPI.org上为此回购配置了PyPI可信发布(不需要API令牌)
GITHUB_TOKEN是自动的,不需要额外的秘密
许可证
麻省理工学院
