返回市场
Java类分析器MCP服务器

Java类分析器MCP服务器

作者:handsomestWei9 星标更新:2025-09-12

项目介绍

Java 类分析器 MCP 服务器

基于模型上下文协议(MCP)的 Java 类分析服务,能够扫描 Maven 项目的依赖项、反编译 Java 类文件,并获取类方法列表等详细信息,提供给大语言模型(LLM)进行代码分析。

适用场景

AI 工具如光标直接生成调用两方(内部调用)和三方包(外部调用)接口的代码,但由于 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 (字符串):Maven 项目根目录路径
  • forceRefresh (布尔值,可选):强制刷新索引,默认为 false

示例:

{
  "name": "scan_dependencies",
  "arguments": {
    "projectPath": "/path/to/your/maven/project",
    "forceRefresh": false
  }
}

2. decompile_class

反编译指定的 Java 类文件并返回 Java 源代码。

参数:

  • className (字符串):要反编译的 Java 类的全名,例如:com.example.QueryBizOrderDO
  • projectPath (字符串):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"
  }
}

3. analyze_class

分析 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/:临时文件目录(按包名结构组织)

工作流程

  1. 索引:首先调用 analyze_classdecompile_class 自动检查并创建索引
  2. 智能缓存:根据包名结构缓存反编译结果,支持缓存控制
  3. 分析:使用 analyze_classdecompile_class 获取类的详细信息
  4. LLM 分析:提供反编译源代码给 LLM 进行代码分析

技术架构

核心组件

  • DependencyScanner:负责扫描 Maven 依赖项并建立类索引
  • DecompilerService:负责反编译 .class 文件
  • JavaClassAnalyzer:负责分析 Java 类结构
  • MCP Server:提供标准化的 MCP 接口

依赖扫描过程

  1. 执行 mvn dependency:tree 获取依赖树
  2. 分析每个 JAR 包并提取所有 .class 文件
  3. 建立 '类全名 -> JAR 包路径' 的映射索引
  4. 将索引缓存到 .mcp-class-index.json 文件

反编译过程

  1. 根据类名查找对应的 JAR 包路径
  2. 检查缓存,如果存在且启用,则直接返回
  3. 从 JAR 包中提取 .class 文件到 .mcp-class-temp 目录(按包名结构组织)
  4. 使用 CFR 工具反编译 .class 文件
  5. 将反编译结果保存到缓存 .mcp-decompile-cache 目录(按包名结构组织)
  6. 返回 Java 源代码

故障排除

常见问题

  1. Maven 命令失败

    • 确保 Maven 已安装并在 PATH 中
    • 检查项目是否有有效的 pom.xml 文件
  2. CFR 反编译失败

    • 确保已下载 CFR jar 包(支持任意版本号)
    • 检查 Java 环境是否配置正确
    • 可以通过 cfrPath 参数指定 CFR 路径
  3. 类未找到

    • 程序会自动检查并创建索引
    • 检查类名是否正确
    • 确保项目依赖项已正确解析

测试说明

构建

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:仅输出关键信息