本文作者:杨雨龙,蚂蚁集团安全工程师。主要从事面向 Agent 程序分析研发和模型评测,专注给模型提高更加友好、更高效的程序分析工具。
github 主页:github.com/Raindragon-…
YASA(Yet Another Static Analyzer)是蚂蚁集团安全团队开源的静态程序分析项目。其核心是定义了一种多语言通用的中间表达——统一抽象语法树(Unified Abstract Syntax Tree,简称 UAST),并基于 UAST 实现了一套高精度的静态程序分析框架。
用户可通过编写检查器(Checker),灵活实现 AST 查询、数据流分析、函数调用图分析等程序分析任务,并通过 SDK、自研统一声明式查询语言 UQL、MCP 等方式使用这些能力。
YASA-MCP 是基于 YASA 能力实现的面向 Agent 的程序分析工具,为 AI 在代码审计场景中提供结构化代码图谱查询能力。
- YASA 官网:cybersec.antgroup.com/station
- YASA:github.com/antgroup/YA…
- YASA-MCP:https://github.com/antgroup/YASA-Engine/tree/main/yasamcp
Part 01|YASA-MCP 是什么?
YASA-MCP 是基于 YASA 程序分析能力构建的开源工具,提供 CLI 命令行工具和 本地 MCP 服务两种使用形式,为开发者与 Agent 提供结构化代码查询能力,支持代码审计、代码理解和 AI coding。
CLI 面向终端与脚本使用,MCP 面向 Agent 工具调用,两者共享同一套分析能力与数据。
它将仓库中的符号、源码上下文和调用关系组织为结构化可查询数据,帮助 Agent 定位功能入口、阅读具体实现、追踪调用链路,为分析业务逻辑和判断漏洞提供代码依据。核心能力包括:
- 符号检索、源码与上下文查询:找到相关代码,查看类、函数定义及文件内容。
- 调用图&调用关系分析:定位接口处理函数,查询调用位置与目标函数。
- 接口实现定位、文件依赖查询:展开可能的调用链路,查看文件导入信息。
目前支持 Java、Python、Go、JavaScript、PHP 五种语言。
实现原理
- 初始化:从原始仓库提取符号与关系。 Client 调用 YASA 分析引擎和 CodeGraph(代码结构抽取工具),解析源码中的类、函数、接口等符号,提取定义位置及源码信息,并构建调用、引用等关系;YASA 结合类型解析与模拟执行,提高调用关系的分析精度。
- 存储:将分析结果组织为可查询的数据。 符号及关系写入高性能嵌入式数据库并构建索引,后续查询复用这些结果,无需每次重新分析整个仓库。
- 服务:将查询能力封装为 CLI 和 MCP 工具。 开发者可以通过 Client 在终端查询,也可以启动本地 MCP 服务,由 Agent 按需获取源码、符号和调用关系;两种方式复用同一份分析数据。
使用场景:代码审计中,用于定位接口、追踪调用链路;AI coding 中,用于理解已有实现、查找调用方和探索变更涉及的代码;也可通过 CLI 接入日常开发脚本。
Part 02|YASA-MCP 的特点与优势
1. 面向 Agent 的程序分析突破传统 SAST 工具的局限性
传统 SAST(静态应用安全测试)工具主要依赖预设规则和代码分析来识别漏洞。面对越权、业务流程绕过等逻辑漏洞,仅识别危险函数或追踪数据流往往不够,还需要结合业务规则、用户身份和操作上下文判断。不同业务的逻辑约束难以统一表达为通用规则,限制了传统 SAST 工具对这类漏洞的检测能力。
面向 Agent 的程序分析,旨在结合 Agent 的语义理解与推理能力,突破传统程序分析在逻辑类漏洞检测中的局限。 YASA-MCP 为 Agent 提供符号、源码上下文和调用关系等结构化查询能力,帮助其获取分析依据、判断业务逻辑,减少反复搜索与阅读,提高分析效率,降低工具调用和 Tokens 成本。
2. 工具更加 AI friendly
AI friendly:在结果准确、质量达标的前提下,相比仅使用通用搜索、阅读工具,让 Agent 以更少的工具调用、更短的时间和更少的 Tokens 消耗完成任务。
YASA-MCP 提供更加 AI friendly 的工具,特点如下:
- 统一符号检索:多个查询入口汇聚为符号搜索,Agent 只需提供符号,减少工具选择与切换。
- 直接查询调用链路:通过调用图获取请求可能经过的执行链路,减少反复搜索、阅读和逐层拼接。
- 多参数批量输入:符号、类、函数等查询支持一次输入多个目标,将多次工具调用合并为一次。
3. 发挥 YASA 高精度分析优势
YASA-MCP 将 YASA 的高精度程序分析能力通过工具提供给 Agent 使用。通过模拟执行、变量类型解析和 CHA(类层次分析),结合类型与方法签名确定调用目标,相比同类工具中基于名字匹配的调用解析方式具有更高的精度,减少同名但不相关的方法之间的误连,为 Agent 理解执行链路、判断漏洞提供更准确的代码关系依据。
Part 03|效果如何?
程序分析准确性
在内部 Java 仓库测试中,YASA 在七类共接口的 F1 均高于对照工具,其中调用函数和代码定位的提升最明显。F1 综合衡量准确率与召回率,数值越高越好。
Agent 任务效率
使用 Claude Code + DeepSeek,在 10 个开源仓库中各评测 3 轮,让 Agent 回答开发任务涉及的代码理解问题,例如路由如何经过中间件、请求如何经过拦截器链。
- AI friendly 改造前后:平均工具调用 12.2→7.7 次,减少约 37%;耗时降低约 6%,Tokens 减少约 5%。
- 相比只使用 Claude Code 原生工具:在这组任务中,工具调用减少约 68%,耗时降低约 76%,Tokens 减少约 38%。
Part 04|如何使用 YASA-MCP
安装后,通过 yasamcp 命令使用 CLI 工具,也可启动 本地 MCP 服务供 Agent 调用。
安装与初始化
支持 macOS Apple Silicon、macOS Intel 和 Linux x86-64。一键安装:
curl -fsSL https://raw.githubusercontent.com/antgroup/YASA-Engine/main/yasamcp/script/install.sh | bash
安装后,先通过 Client 初始化项目,再使用 CLI 或本地 MCP 工具查询:
yasamcp init /path/to/project
CLI 工具
在终端执行 yasamcp <命令>,查询时使用 -p 指定项目,添加 -j 可输出 JSON。
| 命令 | 用途 |
|---|---|
init / status | 初始化分析数据、检查缓存状态 |
search | 统一符号检索 |
class / func | 查询类、函数定义与源码 |
keywords | 按关键字搜索文件内容 |
api | 按接口名查找实现函数 |
callers / callees | 查询调用位置、定位被调用函数 |
callgraph | 获取函数调用图 |
server | 启动本地 MCP 服务 |
本地 MCP 工具
支持 stdio、Streamable HTTP 接入 Cursor、Claude Code、Codex 等客户端,提供以下 9 个只读查询工具:
| 工具 | 用途 |
|---|---|
search_symbol | 统一搜索函数、类、接口、文件 |
get_class_by_name | 查询类定义及方法信息 |
get_function | 按名称、文件或代码片段定位函数 |
get_file_by_keyword | 按关键字搜索文件内容 |
get_api_by_name | 按接口名查找实现函数 |
get_reference_by_function | 查询函数被调用的位置 |
get_function_by_call | 根据调用点定位目标函数 |
get_call_graph | 获取函数调用图 |
get_import_by_file | 查询文件中的导入信息 |
下载地址: github.com/antgroup/YA…
详细安装、工具参数和 MCP 配置见官方 README: github.com/antgroup/YA…
欢迎通过 Issue 反馈使用问题和分析案例,通过 Pull Request 参与能力、文档和测试建设。YASA-MCP 采用 Apache License 2.0。
Part 05|致谢
感谢所有 YASA 程序分析团队同学们对底层能力的打磨和贡献(排名不分先后):
- @ryokoCL:github.com/ryokoCL
- @alipaydeshui:github.com/alipaydeshu…
- @jiachunpeng:github.com/jiachunpeng
- @AntJiuFo:github.com/AntJiuFo
- @Arielwyy:github.com/Arielwyy
特别感谢李婷 @ryokoCL 在前期工作中的贡献,为后续能力建设与落地奠定基础。
感谢所有用户的使用与反馈,帮助我们持续改进工具能力。
感谢 CodeGraph、Ripgrep、SCC 开源社区的贡献与分享,为 YASA-MCP 的建设提供支持。
欢迎关注【开放式安全基础设施】公众号,与上千名技术精英交流技术干货&程序分析
点击了解【开放式统一多语言程序分析产品YASA】