🚀 Java Class Analyzer MCP Server
Java Class Analyzer MCP Server是一个基于Model Context Protocol (MCP)的Java类分析服务,能够扫描Maven项目依赖、反编译Java类文件,还能获取class方法列表等详细信息,并将这些信息提供给LLM进行代码分析,从而有效提升代码生成的准确性和可用性。
🚀 快速开始
Cursor等AI工具在直接生成调用二方(内部调用)、三方包(外部调用)接口的代码时,由于无法读取未在当前工程中打开的依赖源码,导致生成的代码错误频出,甚至出现幻觉式编码。为解决这一问题,常见的做法是直接拷贝源码内容喂给LLM,或者先将源码文件放到当前工程内,再在对话中引用。而使用本地反编译MCP方案最为有效,它能精准解析jar包中的类与方法,显著提升代码生成的准确性和可用性。
✨ 主要特性
- 🚀使用方便:mcp服务基于TypeScript实现,使用npm打包,方便分发和安装,弱环境依赖。
- 🔍 依赖扫描:自动扫描Maven项目的所有依赖JAR包。
- 📦 类索引:建立类全名到JAR包路径的映射索引。
- 🔄 反编译:使用CFR工具(已内置有)实时反编译.class文件为Java源码。
- 📊 类分析:分析Java类的结构、方法、字段、继承关系等。
- 💾 智能缓存:按包名结构缓存反编译结果,支持缓存控制。
- 🚀 自动索引:执行分析前自动检查并创建索引。
- ⚙️ 灵活配置:支持外部指定CFR工具路径。
- 🤖 LLM集成:通过MCP协议为LLM提供Java代码分析能力。
💻 使用示例
基础用法
在IDE中注册mcp服务
在智能体对话中使用mcp
📦 安装指南
mcp服务安装
全局安装(推荐)
npm install -g java-class-analyzer-mcp-server
安装后可以直接使用 java-class-analyzer-mcp
命令。
本地安装
npm install java-class-analyzer-mcp-server
从源码安装
git clone https://github.com/handsomestWei/java-class-analyzer-mcp-server.git
cd java-class-analyzer-mcp-server
npm install
npm run build
MCP服务配置
方法1:使用生成的配置(推荐)
运行以下命令生成配置模板:
java-class-analyzer-mcp config -o mcp-client-config.json
然后将生成的配置内容添加到你的MCP客户端配置文件中。
方法2:手动配置
参考以下配置示例,添加到MCP客户端配置文件中:
全局安装后的配置:
{
"mcpServers": {
"java-class-analyzer": {
"command": "java-class-analyzer-mcp",
"args": ["start"],
"env": {
"NODE_ENV": "production",
"MAVEN_REPO": "D:/maven/repository",
"JAVA_HOME": "C:/Program Files/Java/jdk-11"
}
}
}
}
本地安装后的配置:
{
"mcpServers": {
"java-class-analyzer": {
"command": "node",
"args": [
"node_modules/java-class-analyzer-mcp-server/dist/index.js"
],
"env": {
"NODE_ENV": "production",
"MAVEN_REPO": "D:/maven/repository",
"JAVA_HOME": "C:/Program Files/Java/jdk-11"
}
}
}
}
参数说明
属性 |
详情 |
command |
运行MCP服务器的命令,这里使用 node |
args |
传递给Node.js的参数,指向npm run build 编译后的dist文件夹内文件 |
env |
环境变量设置 |
环境变量说明
属性 |
详情 |
NODE_ENV |
运行环境标识: - production :生产环境,减少日志输出,启用性能优化 - development :开发环境,输出详细调试信息 - test :测试环境 |
MAVEN_REPO |
Maven本地仓库路径(可选): - 如果设置,程序会使用指定的仓库路径扫描JAR包 - 如果未设置,程序会使用默认的 ~/.m2/repository 路径 |
JAVA_HOME |
Java安装路径(可选): - 如果设置,程序会使用 ${JAVA_HOME}/bin/java 执行Java命令(用于CFR反编译) - 如果未设置,程序会使用PATH中的 java 命令 |
CFR_PATH |
CFR反编译工具的路径(可选,程序会自动查找) |
可用的工具
1. scan_dependencies
扫描Maven项目的所有依赖,建立类名到JAR包的映射索引。
参数:
projectPath
(string):Maven项目根目录路径。
forceRefresh
(boolean, 可选):是否强制刷新索引,默认false。
示例:
{
"name": "scan_dependencies",
"arguments": {
"projectPath": "/path/to/your/maven/project",
"forceRefresh": false
}
}
2. decompile_class
反编译指定的Java类文件,返回Java源码。
参数:
className
(string):要反编译的Java类全名,如:com.example.QueryBizOrderDO。
projectPath
(string):Maven项目根目录路径。
useCache
(boolean, 可选):是否使用缓存,默认true。避免每次都重复生成。
cfrPath
(string, 可选):CFR反编译工具的jar包路径。已内置有,可以额外指定版本。
示例:
{
"name": "decompile_class",
"arguments": {
"className": "com.example.QueryBizOrderDO",
"projectPath": "/path/to/your/maven/project",
"useCache": true,
"cfrPath": "/path/to/cfr-0.152.jar"
}
}
3. analyze_class
分析Java类的结构、方法、字段等信息。
参数:
className
(string):要分析的Java类全名。
projectPath
(string):Maven项目根目录路径。
示例:
{
"name": "analyze_class",
"arguments": {
"className": "com.example.QueryBizOrderDO",
"projectPath": "/path/to/your/maven/project"
}
}
缓存文件
在当前工程,会生成以下缓存目录和文件:
.mcp-class-index.json
:类索引缓存文件。
.mcp-decompile-cache/
:反编译结果缓存目录(按包名结构)。
.mcp-class-temp/
:临时文件目录(按包名结构)。
📚 详细文档
工作流程
- 自动索引:首次调用
analyze_class
或decompile_class
时,自动检查并创建索引。
- 智能缓存:反编译结果按包名结构缓存,支持缓存控制。
- 分析类:使用
analyze_class
或decompile_class
获取类的详细信息。
- LLM分析:将反编译的源码提供给LLM进行代码分析。
技术架构
核心组件
- DependencyScanner:负责扫描Maven依赖和建立类索引。
- DecompilerService:负责反编译.class文件。
- JavaClassAnalyzer:负责分析Java类结构。
- MCP Server:提供标准化的MCP接口。
依赖扫描流程
- 执行
mvn dependency:tree
获取依赖树。
- 解析每个JAR包,提取所有.class文件。
- 建立"类全名 -> JAR包路径"的映射索引。
- 缓存索引到
.mcp-class-index.json
文件。
反编译流程
- 根据类名查找对应的JAR包路径。
- 检查缓存,如果存在且启用缓存则直接返回。
- 从JAR包中提取.class文件到
.mcp-class-temp
目录(按包名结构)。
- 使用CFR工具反编译.class文件。
- 保存反编译结果到缓存
.mcp-decompile-cache
目录(按包名结构)。
- 返回Java源码。
故障排除
常见问题
- Maven命令失败
- 确保Maven已安装并在PATH中。
- 检查项目是否有有效的pom.xml文件。
- CFR反编译失败
- 确保CFR jar包已下载(支持任意版本号)。
- 检查Java环境是否正确配置。
- 可通过
cfrPath
参数指定CFR路径。
- 类未找到
- 程序会自动检查并创建索引。
- 检查类名是否正确。
- 确保项目依赖已正确解析。
测试说明
构建项目
npm install
npm run build
测试工具使用
项目提供了独立的测试工具,可以直接测试MCP服务的各个功能,无需通过MCP客户端。
node test-tools.js
node test-tools.js --tool decompile_class --class com.alibaba.excel.EasyExcelFactory --project /path/to/project
node test-tools.js --tool decompile_class --no-cache
node test-tools.js --tool decompile_class --cfr-path /path/to/cfr.jar
测试工具参数
属性 |
详情 |
-t, --tool <工具名> |
指定要测试的工具 (scan |
-p, --project <路径> |
项目路径 |
-c, --class <类名> |
要分析的类名 |
--no-refresh |
不强制刷新依赖索引 |
--no-cache |
不使用反编译缓存 |
--cfr-path <路径> |
指定CFR反编译工具的jar包路径 |
-h, --help |
显示帮助信息 |
日志级别控制
通过 NODE_ENV
环境变量控制日志输出:
development
:输出详细调试信息。
production
:只输出关键信息。