Token导航 LogoToken导航

MCP Server · 数据服务

Call Graph

一个基于ASM字节码分析的调用图分析服务,用于智能查询项目中的调用关系、分析变更影响和导航依赖关系。

stdio官方级别未说明来源级核验工具 0
PythonClaude数据分析

快速开始

作者 / 组织
NicolasVautrin
提供方
NicolasVautrin

工具数量

0

来源目录标注

资源数量

0

来源目录标注

提示词数量

0

来源目录标注

GitHub Star

0

仓库热度

收录来源

1 个

MCP World

选型结论

Call Graph 属于数据服务类 MCP Server,公开资料标注 0 个工具,通过stdio 本地进程接入,适配 Claude,有可以直接复制的安装命令;接入前先确认权限范围。

分类

数据服务

传输方式

stdio

认证方式

无需认证

部署方式

公开资料未说明

安装与配置

安装命令

pip install -r requirements.txt

公开命令不是通用的启动方式,拼不出可靠配置示例;请在客户端 MCP 配置里按官方文档填写 command 和 args。

上手步骤

  1. 1

    准备运行环境

    stdio 服务在本地起进程,需要先装好 对应的运行时,再按安装命令拉取依赖。

  2. 2

    安装服务

    复制下面的安装命令执行;命令里带占位符的位置换成自己的密钥或路径。

  3. 3

    写入客户端配置

    在客户端的 MCP 配置里填启动命令和参数,保存后完全退出客户端再打开,让新配置生效。

  4. 4

    验证是否可用

    连接成功后客户端会列出 0 个工具,随便调一个只读工具确认能返回结果。

接入前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

详细介绍

CallGraph MCP服务器

MCP服务器,用于使用ASM字节码分析分析Axelor项目中的调用图。

这是什么?

一个模型上下文协议(MCP)服务器,允许Claude Code智能地查询项目的调用图:

  • 查找方法/类的使用位置
  • 分析变更影响
  • 导航依赖关系
  • 跨Java字节码跟踪调用链

主要特点:

  • ASM字节码分析 而不是源解析(100%准确)
  • SQLite关系数据库 代替矢量数据库
  • Gradle依赖关系发现 用于自动Axelor包裹检测
  • 智能缓存 基于SHA256的失效

快速开始

1.安装依赖项

pip install -r requirements.txt

2.配置克劳德代码

添加到您的 .claude/mcp.json 或 claude_desktop_config.json:

视窗: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "sqlite-callgraph": {
      "command": "uvx",
      "args": ["mcp-server-sqlite", "--db-path", "C:/path/to/project/.callgraph.db"]
    }
  }
}

3.提取项目的调用图

cd /path/to/your/axelor/project

# Incremental extraction (default, uses cache)
python /path/to/CallGraph/run_asm_extraction.py .

# Full reset (first time or after schema changes)
python /path/to/CallGraph/run_asm_extraction.py . --init

# Limit extraction for testing (requires --init)
python /path/to/CallGraph/run_asm_extraction.py . --init --limit 100

这创造了 .callgraph.db 在您的项目目录中。

模式:

  • 默认值(增量):智能缓存-仅重新提取修改过的包
  • --init:完全重置-删除所有表并从头开始重建

4.重新启动克劳德桌面

MCP服务器提供对调用图数据库的直接SQLite访问。

架构概述

Project (.callgraph.db SQLite database)
    ↓ Extraction via
run_asm_extraction.py
    ├─> GradleDependencyManager   # Auto-discover Axelor deps
    └─> ASMExtractor               # Python client
        ↓ REST API
    ASMAnalysisService (Java)      # Port 8766
        ↓ ASM ClassVisitor
    Bytecode Analysis (.class files)
        ↓ Storage
    SQLite Tables:
    ├─> symbol_index   # FQN → URI → package
    ├─> nodes          # classes, methods
    └─> edges          # calls, inheritance, member_of

组件

1. run_asm_extraction.py

提取管道的CLI入口点。

用法:

# Incremental extraction (default, uses cache)
python run_asm_extraction.py /path/to/project

# Full reset (first time or after schema changes)
python run_asm_extraction.py /path/to/project --init

# Limit extraction for testing (requires --init to avoid partial data)
python run_asm_extraction.py /path/to/project --init --limit 100

模式:

  • 增量(默认):使用SHA256缓存-仅重新提取修改过的包
  • --init:完全重置-删除所有表并从头开始重建

过程(始终运行两个步骤):

  1. 包发现 通过 GradleDependencyManager (Gradle)
  2. 符号索引 通过 ASMExtractor.build_symbol_index() (FQN→类型)
  3. 调用图提取 通过 ASMExtractor.extract() (节点+边)

______________________________________________________________________

2. GradleDependencyManager.py

通过Gradle发现和管理Axelor依赖关系。

特性:

  • 查询Gradle以获取运行时JAR依赖关系(仅限Axelor)
  • 提取JAR文件 axelor-repos/ 缓存目录
  • 提供包元数据(组、工件、版本、jar、源代码、类)

缓存结构:

axelor-repos/
├── axelor-core-7.2.6/
│   ├── classes/    # .class files from JAR
│   └── sources/    # .java files from sources JAR
└── axelor-base-8.2.9/
    ├── classes/
    └── sources/

______________________________________________________________________

3. ASMExtractor.py

Python客户端 ASMAnalysisService 使用SQLite存储。

数据库模式:

-- Symbol index (FQN → URI → package)
CREATE TABLE symbol_index (
    fqn TEXT PRIMARY KEY,
    uri TEXT NOT NULL,
    package TEXT NOT NULL,
    line INTEGER                    -- Line number (methods only)
);

-- Nodes (classes and methods)
CREATE TABLE nodes (
    fqn TEXT PRIMARY KEY,
    type TEXT NOT NULL,             -- 'class', 'interface', 'enum', 'method'
    package TEXT NOT NULL,
    line INTEGER,
    visibility TEXT,                -- 'public', 'private', 'protected', 'package'
    has_override BOOLEAN,           -- TRUE if @Override annotation present
    is_transactional BOOLEAN        -- TRUE if @Transactional annotation present
);

-- Edges (relationships)
CREATE TABLE edges (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    from_fqn TEXT NOT NULL,
    edge_type TEXT NOT NULL,        -- 'call', 'inheritance', 'member_of'
    to_fqn TEXT NOT NULL,
    kind TEXT,                      -- 'invoke', 'extends', 'implements', 'argument', 'return'
    from_package TEXT NOT NULL,
    to_package TEXT NOT NULL,
    from_line INTEGER
);

构造函数:

ASMExtractor(db_path=".callgraph.db", service_url="http://localhost:8766", init=False)
  • init=True:完全重置-删除并重新创建所有表(INIT模式)
  • init=False (默认):增量模式-如果表不存在,则创建表

关键方法:

  • init_database():完全重置-删除并重新创建所有表(当init=True时自动调用)
  • clean_package_data(package_name):删除特定包的所有数据(在增量模式下自动使用)
  • build_symbol_index():构建FQN→ 具有自动缓存无效的URI映射
  • extract():从字节码中提取调用图

演出:

  • 符号索引:39个包(107k个符号,9.4k个类别)约6分钟
  • 调用图提取:9466.class文件约40秒(252个文件/秒)
  • 总提取时间(--init):~6-7分钟完成项目
  • 增量模式:仅重新提取修改过的包(后续运行速度提高70%以上)

优化:

  • 批处理SQL查询(IN子句):数据库查询减少99.95%
  • 之前:约65万次查询→ 之后:约220次查询
  • 按5000行批量插入

______________________________________________________________________

4. ASMAnalysisService Java

使用ASM分析Java字节码的REST服务。

技术:

  • ASM:字节码操作框架
  • Spark Java:轻量级HTTP框架
  • 杰克逊:JSON序列化

端点:

  • GET /health -健康检查
  • POST /index -使用nodeType和line提取符号(类和方法)
  • POST /analyze -使用元数据提取完整的调用图
  • POST /shutdown -优雅地关闭了服务

提取的元数据:

  • 类修饰符(public、abstract、final等)
  • 方法修饰符和可见性
  • 注释: @Override, @Transactional (春季,雅加达,javax)
  • 方法的行号
  • 继承关系
  • 带有行号的方法调用

运行服务:

cd Extracteurs/ASMAnalysisService
./gradlew.bat run
# Service starts on port 8766
# Logs written to asm-service.log

______________________________________________________________________

MCP工具(SQLite)

使用您配置的SQLite MCP服务器进行直接SQL查询。

查询示例

查找使用类X作为参数的方法:

SELECT DISTINCT e.to_fqn AS method_fqn, e.from_fqn AS argument_type
FROM edges e
WHERE e.edge_type = 'member_of' AND e.kind = 'argument'
  AND e.from_fqn = 'com.axelor.apps.openauction.db.Lot'
ORDER BY e.to_fqn;

查找对某个方法的所有调用:

SELECT e.from_fqn AS caller, e.to_fqn AS callee, e.from_line AS line, e.from_package
FROM edges e
WHERE e.edge_type = 'call' AND e.to_fqn LIKE '%setStatus%'
ORDER BY e.from_package;

按包装计数符号:

SELECT package, COUNT(*) as symbol_count,
       SUM(CASE WHEN type = 'class' THEN 1 ELSE 0 END) as class_count,
       SUM(CASE WHEN type = 'method' THEN 1 ELSE 0 END) as method_count
FROM nodes
GROUP BY package ORDER BY symbol_count DESC;

查找事务处理方法:

SELECT fqn, package, line
FROM nodes
WHERE type = 'method' AND is_transactional = 1
ORDER BY package, line;

使用@Override查找公共方法:

SELECT fqn, package, line
FROM nodes
WHERE type = 'method' AND visibility = 'public' AND has_override = 1
ORDER BY package, line;

______________________________________________________________________

比较:JavaParser与ASM

特性JavaParser(旧)ASM(新)
输入源代码(.java)字节码(.class)
需要来源是否(适用于JAR)
分析速度较慢(解析)较快(字节码)
准确度源代码级别字节码级别(100%)
依赖项手动下载Gradle自动发现
存储ChromaDB(约150 MB)SQLite(约50 MB)
查询速度~50ms~10ms

______________________________________________________________________

ASM方法的好处

  1. 无需源代码:直接使用Maven/Gradle缓存中的JAR
  2. 自动依赖关系发现:Gradle集成
  3. 100%准确:字节码分析反映了实际编译
  4. 更快:无解析开销
  5. 较小的数据库:关系存储与向量嵌入
  6. 更好的缓存:基于SHA256的失效
  7. 更简单的查询:SQL与向量相似性搜索

______________________________________________________________________

演出

提取时间(实际项目-39个包)

完全提取(--init):总共约6-7分钟

  • 第一步(Gradle发现):约10秒
  • 第2步(符号索引):107k个符号约6分钟
  • 步骤3(调用图提取):9466.class文件约40秒(252个文件/秒)

增量模式:仅重新提取修改过的包(速度提高70%以上)

数据库统计信息

实际项目示例:

  • 尺寸:约292 MB
  • 符号:107312(9466个类+97846个方法)
  • 边缘:319272(调用、继承、member_of)
  • 包裹:39个阿克塞尔包
  • 实体:2089(占班级总数的22%)

数据库内容:

  • symbol_index:107312行(约60 MB)
  • nodes:94267行(约52 MB)
  • edges:319272行(约180 MB)

查询性能

  • 简单查询(COUNT、SELECT WHERE):~10ms
  • 复杂连接(调用链):~50-100ms
  • 全文搜索(LIKE):约20-30ms

______________________________________________________________________

故障排除

ASMAnalysisService未启动

解决方案:

  1. 检查Java: java -version (需要Java 11+)
  2. 构建服务: cd Extracteurs/ASMAnalysisService && gradlew.bat build
  3. 手动启动: gradlew.bat service:run

未检测到缓存

验证:

ls axelor-repos/axelor-core-7.2.6/classes/
# Should contain .class files

FQN解析失败或数据过时

解决方案:

  • 完全重置: python run_asm_extraction.py /path/to/project --init
  • 这将删除所有表并从头开始重建

杀死卡住的Java进程

# Windows
wmic process where "name='java.exe' and CommandLine like '%ASMAnalysisService%'" delete

______________________________________________________________________

发展

项目结构

CallGraph/
├── run_asm_extraction.py            # CLI entry point
├── mcp_callgraph_server.py          # Legacy MCP server
├── mcp.json                         # MCP configuration
├── ASM_ARCHITECTURE.md              # Detailed architecture
├── Extracteurs/
│   ├── GradleDependencyManager.py   # Gradle integration
│   ├── ASMExtractor.py              # Python client
│   └── ASMAnalysisService/          # Java service
│       └── service/                 # Kotlin/Gradle implementation
└── axelor-repos/                    # Cached Axelor packages

文件命名约定

帕斯卡命名法 对于Python文件(匹配主类):

  • ASMExtractor.py → class ASMExtractor
  • GradleDependencyManager.py → class GradleDependencyManager

______________________________________________________________________

许可证

麻省理工学院

资源

工具与能力

工具数量

0

资源数量

0

提示词数量

0

能力标签

字节码分析Python本地部署调用图依赖分析Java项目SQLite存储

支持客户端

Claude

数量来自来源目录的标注,具体工具清单以官方文档为准。

典型使用场景

用自然语言查库

不用手写 SQL,直接问数据,让模型组织查询语句。

数据巡检

定期拉指标、做对比,把异常项整理成一段说明。

打通业务数据

把数据库、数仓和接口接进同一个上下文,减少导出再上传。

选择建议

值得选的地方

  • 只提供 0 个工具,职责集中,接入后不容易误操作。
  • 有现成的安装命令,不用自己找入口,照着跑就能起服务。
  • 公开说明写得比较完整,接入前能看清能力边界。

先想清楚的地方

  • stdio 方式要求本地装好 运行环境,换机器要重新装一遍。
  • 公开摘要偏短,具体能力和限制要回到仓库确认。
  • 第三方目录整理,版本更新和行为细节以官方仓库为准。

更适合

  • 需要在数据服务场景里让模型直接调用外部能力的人。
  • 已经在用 Claude 的用户,接入路径最短。
  • 想先快速试一下、能接受在本地跑服务的人。

不太适合

  • 完全不想在本地装环境的人。
  • 需要厂商级 SLA 和技术支持的生产环境。

同类对比

5 个同类
MCP Server工具数传输方式安装命令收录来源最后核验
Call Graph

MCP World · 本页

0stdio有1 个2026-05-17
Memory 9d25f64e

MCP World

9未说明未标注1 个2026-05-17
Prisma MCP Server

MCP World

0stdio有3 个2026-05-17
Astr Bot

MCP World

0stdio有1 个2026-05-17
Getzep MCP

MCP World

9stdio有1 个2026-05-17

按同分类和工具数量挑出最接近的几条,字段以各自详情页为准。

常见问题

5 条

Call Graph 怎么安装?

公开资料给出的安装命令是 pip install -r requirements.txt,运行环境为 未标注。装完后按客户端要求写进 MCP 配置,重启客户端生效。

Call Graph 怎么在 Claude Desktop、Cursor 里配置?

它是stdio 本地进程,客户端配置里要写启动命令和参数,运行环境是 未标注;保存后完全退出客户端再打开,配置才会生效。

Call Graph 收费吗?

本站只整理公开资料,不代收费用,也没有标注具体价格。是否收费取决于服务本身和背后的接口额度,正式使用前按官方说明确认。

Call Graph 需要 API Key 吗?

公开资料标注为无需认证,装好就能连;如果实际调用时报鉴权错误,按官方文档补上凭据。

Call Graph 支持哪些客户端?

公开资料标注支持 Claude;其他客户端只要能配置 MCP Server,也能用同样的命令或地址接入。

来源信息

继续浏览同类 MCP