代码安全分析服务器

joern-mcp是一个本地Joern实例的封装服务器,用于AI驱动的代码安全分析,支持导入代码库、查询代码属性图(CPG)、跟踪数据流和检测漏洞。

  • by BlockSecCA
  • TypeScript
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 BlockSecCA/joern-mcp

使用说明

乔尔·麦克普

包装本地数据的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

用法

  1. 启动Joern服务器: joern --server
  2. 在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该技能贯穿标准工作流程:

  1. 连接并导入 --确认乔恩已经起床,建立CPG
  2. 探索 --列出方法、类型、调用站点
  3. 导航 --跟踪调用者/被调用者、类层次结构
  4. 分析 --运行漏洞扫描、污染分析、数据流跟踪
  5. 原始查询 --任意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 便于对升级进行审核。

许可证

麻省理工学院