npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@jianxiancyf/java-class-analyzer-mcp-server

v1.0.9

Published

MCP server for Java class file analysis and decompilation

Downloads

111

Readme

Java Class Analyzer MCP Server

一个基于Model Context Protocol (MCP)的Java类分析服务,可以扫描Maven项目依赖、反编译Java类文件、获取class方法列表等详细信息,并提供给LLM进行代码分析。

致谢

本项目源自 handsomestWei/java-class-analyzer-mcp-server,感谢原作者的开源贡献。

🚀 核心突破与改进

  • 修复 Cursor/stdio 兼容性:修复原版只支持字节跳动Trae,而在 Cursor 下 完全不可用的致命问题。
  • 全版本 JDK 深度适配:补齐了原版缺失的 JDK 类扫描能力,完美支持 Java 8 (rt.jar) 及 Java 9+ 模块化系统 (jrt://)。
  • CFR 反编译引擎工程化:内置 CFR 0.152 核心,解决了原版 npm 安装后找不到反编译工具、环境变量不生效等分发难题。
  • 工业级 Maven 执行器:重写了依赖扫描逻辑,支持 Windows 环境下含空格路径、.cmd 脚本,并加入超时与健壮的错误处理机制。
  • 智能项目隔离缓存:重构了缓存架构,按项目根目录和包名进行强隔离,彻底解决临时文件污染工程根目录的问题。
  • 企业级分发优化:适配公网 npm/npx 分发,并针对 AI Agent 优化了 Tool Definitions,使其能更精准地自动按需触发。

适用场景

Cursor等AI工具直接生成调用二方(内部调用)、三方包(外部调用)接口的代码,但因AI无法读取未在当前工程中打开的依赖源码,导致生成的代码错误频出,甚至出现幻觉式编码。

为解决此问题,一般会直接拷贝源码内容喂给LLM;或者先将源码文件放到当前工程内,再在对话中引用。

而使用本地反编译MCP方案最有效,能精准解析jar包中的类与方法,显著提升代码生成的准确性和可用性。

功能特性

  • 🚀 使用方便:mcp服务基于TypeScript实现,使用npm打包,方便分发和安装,弱环境依赖。
  • 🔍 依赖扫描: 自动扫描Maven项目的所有依赖JAR包
  • 📦 类索引: 建立类全名到JAR包路径的映射索引
  • 🔄 反编译: 使用CFR工具(已内置有)实时反编译.class文件为Java源码
  • 📊 类分析: 分析Java类的结构、方法、字段、继承关系等
  • 💾 智能缓存: 按包名结构缓存反编译结果,支持缓存控制
  • 🚀 自动索引: 执行分析前自动检查并创建索引
  • ⚙️ 灵活配置: 支持外部指定CFR工具路径
  • 🤖 LLM集成: 通过MCP协议为LLM提供Java代码分析能力

使用示例

在IDE中注册mcp服务

工具列表

在智能体对话中使用mcp

示例

使用说明

mcp服务安装

推荐方式:直接在 MCP 客户端配置文件中添加以下配置:

{
  "mcpServers": {
    "java-class-analyzer": {
      "command": "npx",
      "args": [
        "-y",
        "@jianxiancyf/java-class-analyzer-mcp-server@latest",
        "start",
        "--stdio"
      ],
      "env": {
        "npm_config_registry": "https://registry.npmjs.org/",
        "NODE_ENV": "production"
      }
    }
  }
}

可选方式

  • 全局安装:
    npm install -g @jianxiancyf/java-class-analyzer-mcp-server
  • 本地安装:
    npm install @jianxiancyf/java-class-analyzer-mcp-server

可选环境变量

在配置的 env 中可以添加以下可选环境变量:

  • MAVEN_REPO: Maven 本地仓库路径(默认:~/.m2/repository
  • JAVA_HOME: Java 安装路径(默认:使用 PATH 中的 java)
  • CFR_PATH: CFR 反编译工具路径(默认:使用内置版本)

示例(添加可选环境变量):

{
  "mcpServers": {
    "java-class-analyzer": {
      "command": "npx",
      "args": [
        "-y",
        "@jianxiancyf/java-class-analyzer-mcp-server@latest",
        "start"
      ],
      "env": {
        "npm_config_registry": "https://registry.npmjs.org/",
        "NODE_ENV": "production",
        "MAVEN_REPO": "D:/maven/repository",
        "JAVA_HOME": "C:/Program Files/Java/jdk-11"
      }
    }
  }
}

可选:SSE 传输方式

如果需要使用 SSE 方式(需要手动启动服务器):

  1. 手动启动服务器:
java-class-analyzer-mcp start --sse --port 6666
  1. 在客户端配置中使用 URL:
{
  "mcpServers": {
    "java-class-analyzer": {
      "url": "http://localhost:6666/sse",
      "env": {
        "npm_config_registry": "https://registry.npmjs.org/",
        "NODE_ENV": "production"
      }
    }
  }
}

让Cursor Agent自动使用MCP工具

为了让Cursor Agent在识别到三方依赖时自动使用MCP工具(无需手动指定),请按以下步骤配置:

  1. 确保MCP服务器已正确配置(参考上面的配置说明)

  2. 创建 .cursorrules 文件(项目根目录): 项目已包含 .cursorrules 文件,其中定义了自动使用MCP工具的规则。Cursor Agent会根据这些规则自动识别需要使用MCP的场景。

  3. 工具描述已优化: MCP工具的描述已优化,明确说明了何时应该自动使用这些工具,AI会更容易识别触发场景。

  4. 自动触发场景

    • 代码中出现 import 三方包时
    • 生成调用三方库API的代码时
    • 需要了解三方类的结构、方法签名时
    • 错误排查涉及三方依赖时

可用的工具

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源码。当代码中使用了三方依赖类(如import语句、类引用),或需要查看三方类的实现细节、方法签名时,Cursor Agent应自动使用此工具,获取准确的类信息,避免生成错误的代码。

参数:

  • 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类的结构、方法、字段等信息。当需要了解三方依赖类的API(方法名、参数类型、返回类型、字段定义)时,Cursor Agent应自动使用此工具。特别适用于生成调用三方库代码的场景,确保方法签名和参数类型完全正确。

参数:

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

工作流程

  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|decompile|analyze|all)
  • -p, --project <路径>: 项目路径
  • -c, --class <类名>: 要分析的类名
  • --no-refresh: 不强制刷新依赖索引
  • --no-cache: 不使用反编译缓存
  • --cfr-path <路径>: 指定CFR反编译工具的jar包路径
  • -h, --help: 显示帮助信息

日志级别控制

通过 NODE_ENV 环境变量控制日志输出:

  • development: 输出详细调试信息
  • production: 只输出关键信息

更新日志

v1.0.3 (feature/sse分支)

🚀 新增功能

  • JDK类支持:完整支持Java标准库类的扫描和反编译

    • 支持Java 8及之前的rt.jar扫描
    • 支持Java 9+模块化JDK(jrt://文件系统)的类扫描
    • 自动检测JDK版本并使用相应的扫描策略
    • 使用Java命令访问jrt://文件系统,支持所有JDK模块类
  • 内置CFR工具:内置CFR 0.152版本jar包(lib/cfr-0.152.jar

    • 无需单独下载CFR工具即可使用
    • 优先检查CFR_PATH环境变量
    • 改进CFR查找路径,支持npm包安装后的路径结构
    • 仍支持通过CFR_PATH环境变量指定自定义CFR路径

🔧 核心改进

  • Maven命令执行优化

    • 使用spawn替代exec,正确处理包含空格的路径
    • Windows平台特殊处理:支持.cmd文件和包含空格的路径
    • 改进错误处理和超时机制(60秒超时)
    • 更好的跨平台兼容性
  • JAR包解析增强

    • 处理JAR包中的绝对路径条目(跳过以/开头的无效条目)
    • 支持.jmod文件格式(Java模块文件,处理classes/目录结构)
    • 改进错误处理:单个条目处理失败不中断整个流程
    • 处理absolute path错误,避免因无效条目导致解析失败
    • 跳过内部类(包含$符号的类文件)
  • 缓存路径优化

    • 使用项目路径作为缓存根目录,而不是process.cwd()
    • 统一管理临时文件目录(.mcp-class-temp
    • 临时Java文件统一放在项目缓存目录下,避免污染根目录
    • 改进缓存路径结构,按包名组织
  • 工具描述优化:优化MCP工具的描述文本,使AI更容易自动识别和使用

    • scan_dependencies: 明确说明在缺类/引入三方或JDK类时自动调用
    • decompile_class: 明确说明在需查看依赖或JDK类实现时自动调用
    • analyze_class: 明确说明在需生成调用代码或确认签名时自动调用
  • 错误处理改进

    • 更详细的错误信息和警告提示
    • 索引文件验证:检查索引文件是否存在且有效
    • 工具调用异常处理:提供友好的错误提示和建议
    • stdio模式下完全静默,避免干扰MCP协议通信
  • 版本管理:从package.json动态读取版本号,确保版本一致性

🐛 Bug修复

  • 修复Maven命令执行问题

    • 修复Windows平台路径包含空格时命令执行失败的问题
    • 修复.cmd文件无法执行的问题
    • 修复超时处理不生效的问题
  • 修复JAR包解析问题

    • 修复JAR包包含绝对路径条目导致解析失败的问题
    • 修复.jmod文件无法解析的问题
    • 修复单个条目处理失败导致整个JAR解析失败的问题
    • 修复内部类被错误包含的问题
  • 修复JDK类扫描问题

    • 修复Java 9+模块化JDK无法扫描的问题
    • 修复JDK类无法反编译的问题
    • 修复jrt://文件系统访问问题
  • 修复CFR工具查找问题

    • 修复npm包安装后CFR工具找不到的问题
    • 修复CFR_PATH环境变量不生效的问题
    • 改进CFR查找路径优先级
  • 修复缓存路径问题

    • 修复缓存文件保存到错误位置的问题
    • 修复临时文件污染根目录的问题
  • 修复其他问题

    • 修复索引文件为空时的处理问题
    • 修复类查找超时无提示的问题
    • 修复错误信息不够详细的问题

📦 依赖更新

  • archiver: ^6.0.1^7.0.1
  • jest: ^29.7.0^30.2.0
  • @types/jest: ^29.5.8^30.0.0
  • 新增overrides配置:强制使用glob ^10.0.0

📝 文档更新

  • 添加"让Cursor Agent自动使用MCP工具"章节
  • 完善工具使用说明,强调自动触发场景
  • 添加致谢章节
  • 更新配置示例,说明默认使用SSE模式

📁 文件变更

  • 新增:.cursorignore - Cursor忽略文件配置
  • 新增:lib/cfr-0.152.jar - 内置CFR工具
  • 删除:mcp-server-config.json - 配置文件模板(改为通过CLI命令生成)
  • 修改:src/index.ts - 改进错误处理、工具描述优化
  • 修改:src/cli.ts - 版本号动态读取、改进配置生成
  • 修改:src/scanner/DependencyScanner.ts - JDK类支持、Maven命令优化、JAR解析增强
  • 修改:src/decompiler/DecompilerService.ts - JDK模块类反编译、CFR查找优化、缓存路径优化
  • 修改:package.json - 更新版本号和依赖
  • 修改:.gitignore - 更新忽略规则