基于模型上下文协议(MCP)的 Java 类分析服务,能够扫描 Maven 项目的依赖项、反编译 Java 类文件,并获取类方法列表等详细信息,提供给大语言模型(LLM)进行代码分析。
AI 工具如光标直接生成调用两方(内部调用)和三方包(外部调用)接口的代码,但由于 AI 无法读取当前项目中未公开的依赖源代码,生成的代码经常出错甚至出现幻觉编码。
为了解决这个问题,通常会直接复制源代码内容并提供给 LLM;或者首先将源代码文件放置在当前项目中,然后在对话中引用它。
使用本地反编译 MCP 方案是最有效的,它可以准确解析 Jar 包中的类和方法,显著提高代码生成的准确性和可用性。


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
运行以下命令生成配置模板:
java-class-analyzer-mcp config -o mcp-client-config.json
然后将生成的配置内容添加到您的 MCP 客户端配置文件中。
参考以下配置示例并将其添加到 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 服务器的命令,这里使用的是 nodeargs:传递给 Node.js 的参数,指向 npm run build 编译的 dist 文件夹中的文件env:环境变量设置NODE_ENV:操作环境标识
production:生产环境,减少日志输出,启用性能优化development:开发环境,输出详细的调试信息test:测试环境MAVEN_REPO:Maven 本地仓库路径(可选)
~/.m2/repository 路径JAVA_HOME:Java 安装路径(可选)
${JAVA_HOME}/bin/java 执行 Java 命令(用于 CFR 反编译)java 命令CFR_PATH:CFR 反编译工具路径(可选,程序会自动搜索)扫描 Maven 项目的全部依赖项,并建立从类名到 JAR 包的映射索引。
参数:
projectPath (字符串):Maven 项目根目录路径forceRefresh (布尔值,可选):强制刷新索引,默认为 false示例:
{
"name": "scan_dependencies",
"arguments": {
"projectPath": "/path/to/your/maven/project",
"forceRefresh": false
}
}
反编译指定的 Java 类文件并返回 Java 源代码。
参数:
className (字符串):要反编译的 Java 类的全名,例如:com.example.QueryBizOrderDOprojectPath (字符串):Maven 项目根目录路径useCache (布尔值,可选):是否使用缓存,默认为 true。避免每次重复生成。cfrPath (字符串,可选):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"
}
}
分析 Java 类的结构、方法、字段等信息。
参数:
className (字符串):要分析的 Java 类的全名projectPath (字符串):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 获取类的详细信息mvn dependency:tree 获取依赖树.mcp-class-index.json 文件.mcp-class-temp 目录(按包名结构组织).mcp-decompile-cache 目录(按包名结构组织)Maven 命令失败
CFR 反编译失败
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
# 指定 CFR 路径
node test-tools.js --tool decompile_class --cfr-path /path/to/cfr.jar
-t, --tool <工具名>:指定要测试的工具(scan | decode | analyze | all)-p, --project <路径>:项目路径-c, --class <类名>:要分析的类名--no-refresh:不强制刷新依赖索引--no-cache:不使用反编译缓存--cfr-path <路径>:指定 CFR 反编译工具的 jar 包路径-h, --help:显示帮助信息通过 NODE_ENV 环境变量控制日志输出:
development:输出详细的调试信息production:仅输出关键信息