这个项目能做什么

Scantool是一款代码结构分析工具,旨在帮助AI编码代理(Claude Code、Cursor、VS Code Copilot等)高效理解代码库。代理无需读取整个文件来查找函数或类,而是通过一次调用即可获得结构图谱——每个类、函数、调用者和标题及其行号。 它既可作为MCP(模型上下文协议)服务器,也可作为shell命令(`sct`)运行,因此代理可以通过任一接口使用它。该工具由tree-sitter解析器驱动,支持20多种语言,无需索引、无需API密钥,除一条命令外无需任何设置。 主要功能包括:搜索带有上下文和调用者线索的结构;扫描目录以查找入口点、热点函数和中心文件;聚焦单个函数或标题及其逐字代码和一层大纲;计算git引用之间的结构差异;查找函数的实际调用点;检测分支重叠和合并冲突;检查公共API表面变化;识别与兄弟调用模式不同的函数;以及跨git引用解析地址。 除源代码外,Scantool还将文档——Markdown标题、SQL表和视图、YAML/TOML/JSON键、CSS选择器等——作为带行范围的可寻址结构来处理。 该工具按需解析文件,并按git blob ID缓存,因此同一字节在引用处、stdin或下一个进程中不会重复解析。函数以压缩骨架形式显示,保留控制流、调用和返回,同时折叠琐碎语句。每个答案都包含一行覆盖统计,说明看到的文件、显示的结构以及被排除的内容。 在真实代理会话中测量,Scantool在目标搜索中将令牌使用量减少了25倍(378个令牌 vs grep的9,370个),在聚焦读取中减少了75%(13,523 vs 54,337个令牌),而事实覆盖率保持不变。在22个会话中,使用Scantool的代理达到了88%的事实覆盖率,而仅使用grep的代理为73%。Grep在纯字面查找和顶层概览方面仍然分别以1.4倍和1.6倍的优势胜出。 支持的语言包括Python、JavaScript、TypeScript、Rust、Go、C、C++、Java、PHP、C#、Ruby、Zig、Swift、SQL、HTML、CSS、SCSS、YAML、Markdown、Jupyter笔记本、纯文本、JSON、TOML和图像。损坏的文件将回退到正则表达式提取。 与其他代码探索MCP服务器相比:Repomix将整个仓库打包到一个文件中;Serena使用语言服务器逐个符号处理,并且可以编辑代码;claude-context使用带有向量数据库的嵌入索引,并需要API密钥。Scantool的方法——按需解析且无需索引——避免了这些成本,同时还提取了其他工具均未处理的文档结构。 安装需要uv,然后使用一条命令注册MCP服务器。该工具采用MIT许可,基于FastMCP、tree-sitter和uv构建。