使用说明
乔尔·麦克普
包装本地数据的MCP服务器 年份 AI驱动的代码安全分析实例。使Claude Code能够导入代码库、查询代码属性图(CPG)、跟踪数据流和检测漏洞。
建筑
Claude Code <--stdio--> joern-mcp (TypeScript) <--HTTP--> Joern server (JVM)
乔尔·麦克普就是这座桥。它将MCP工具调用转换为发送到Joern的CPGQL查询 /query-sync HTTP端点。
先决条件
- Node.js 18+
- 年份 已安装并位于PATH上(安装指南)
使用Joern v4.x进行测试。自2023年年中以来,HTTP API一直保持稳定。
安装
bun install
bun run build
使用克劳德代码注册
claude mcp add joern-mcp -- node /path/to/joern-mcp/dist/index.js
用法
- 启动Joern服务器:
joern --server - 在Claude Code会话中,使用以下工具:
# Import a codebase (one-time, builds the CPG)
import_code("/path/to/repo", "my-project")
# Scan for vulnerabilities
find_vulnerabilities()
# Trace data flow from source to sink
taint_analysis({ source: "method.name(\"gets\").parameter", sink: "method.name(\"strcpy\").parameter" })
# Run any CPGQL query
query("cpg.method.name.l")
配置
| 环境变量 | 默认值 | 用途 |
|---|---|---|
JOERN_HOST |
localhost |
Joern服务器主机名 |
JOERN_PORT |
8080 |
Joern服务器端口 |
JOERN_QUERY_TIMEOUT |
30000 |
查询超时(毫秒) |
JOERN_IMPORT_TIMEOUT |
300000 |
导入/分析超时(毫秒) |
工具
工作空间管理
| 工具 | 说明 |
|---|---|
import_code |
将代码库导入Joern(构建CPG) |
list_projects |
列出工作区中的所有项目 |
switch_project |
设置活动项目 |
close_project |
从内存中卸载CPG |
查询
| 工具 | 说明 |
|---|---|
query |
对活动CPG运行任意CPGQL |
get_methods |
列出方法(可选名称过滤器) |
get_calls |
查找调用站点(可选方法筛选器) |
get_types |
列出类型/类(可选名称过滤器) |
安全分析
| 工具 | 说明 |
|---|---|
find_vulnerabilities |
运行默认漏洞检测 |
taint_analysis |
跟踪从源到汇的数据流 |
reachable_by |
检查水槽是否可从源头触及 |
get_data_flows |
获取两点之间的所有数据流路径 |
导航
| 工具 | 说明 |
|---|---|
get_source |
读取方法的源代码 |
get_callers |
查找方法的所有调用者 |
get_callees |
查找某个方法调用的所有方法 |
get_parameters |
获取参数类型和名称 |
克劳德代码技能
该仓库包括Claude Code技能 .claude/skills/joern-analysis/SKILL.md 它指导了完整的安全分析工作流程——从导入代码到漏洞扫描再到数据流跟踪。
要使其在全球范围内可用,请将其符号链接:
ln -s /path/to/joern-mcp/.claude/skills/joern-analysis ~/.claude/skills/joern-analysis
然后在任何Claude Code会话中调用它 /joern-analysis该技能贯穿标准工作流程:
- 连接并导入 --确认乔恩已经起床,建立CPG
- 探索 --列出方法、类型、调用站点
- 导航 --跟踪调用者/被调用者、类层次结构
- 分析 --运行漏洞扫描、污染分析、数据流跟踪
- 原始查询 --任意CPGQL用于结构化工具未涵盖的任何内容
发展
bun run build # Compile TypeScript
bun run dev # Watch mode
bun run test # Run unit + integration tests (no Joern needed)
bun run test:watch # Watch mode for tests
# Smoke tests (requires running Joern server)
JOERN_SMOKE=1 bun run test tests/smoke.test.ts
测试策略
- 解析器 --ANSI剥离和Scala REPL输出解析的纯函数测试
- CPGQL模板 --管柱结构试验
- HTTP客户端 --嘲笑
fetch,涵盖所有错误路径 - MCP集成 --全程往返
InMemoryTransport(没有约恩,没有性病) - 冒烟测试 --真正的约恩,跳过除非
JOERN_SMOKE=1
Joern兼容性
HTTP API(/query-sync)通过以下方式实现 scala-repl-pp 自2023年年中以来一直保持稳定。CPGQL查询语法可以在任何Joern夜间版本中更改——所有查询模板都集中在 src/cpgql.ts 便于对升级进行审核。
许可证
麻省理工学院