{"id":31027630,"url":"https://github.com/handsomestwei/java-class-analyzer-mcp-server","last_synced_at":"2025-09-16T22:02:41.149Z","repository":{"id":314202294,"uuid":"1054040380","full_name":"handsomestWei/java-class-analyzer-mcp-server","owner":"handsomestWei","description":"java class反编译mcp server","archived":false,"fork":false,"pushed_at":"2025-09-12T08:49:26.000Z","size":159,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-13T19:49:33.800Z","etag":null,"topics":["cfr","decompiler","java-class","mcp-server"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/java-class-analyzer-mcp-server","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/handsomestWei.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-10T09:29:42.000Z","updated_at":"2025-09-12T08:49:29.000Z","dependencies_parsed_at":"2025-09-13T19:49:34.669Z","dependency_job_id":null,"html_url":"https://github.com/handsomestWei/java-class-analyzer-mcp-server","commit_stats":null,"previous_names":["handsomestwei/java-class-analyzer-mcp-server"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/handsomestWei/java-class-analyzer-mcp-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/handsomestWei%2Fjava-class-analyzer-mcp-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/handsomestWei%2Fjava-class-analyzer-mcp-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/handsomestWei%2Fjava-class-analyzer-mcp-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/handsomestWei%2Fjava-class-analyzer-mcp-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/handsomestWei","download_url":"https://codeload.github.com/handsomestWei/java-class-analyzer-mcp-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/handsomestWei%2Fjava-class-analyzer-mcp-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275165632,"owners_count":25416854,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-14T02:00:10.474Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cfr","decompiler","java-class","mcp-server"],"created_at":"2025-09-13T19:49:20.928Z","updated_at":"2025-09-15T21:09:42.970Z","avatar_url":"https://github.com/handsomestWei.png","language":"TypeScript","readme":"# Java Class Analyzer MCP Server\n\n一个基于Model Context Protocol (MCP)的Java类分析服务，可以扫描Maven项目依赖、反编译Java类文件、获取class方法列表等详细信息，并提供给LLM进行代码分析。\n\n## 适用场景\nCursor等AI工具直接生成调用二方（内部调用）、三方包（外部调用）接口的代码，但因AI无法读取未在当前工程中打开的依赖源码，导致生成的代码错误频出，甚至出现幻觉式编码。\n\n为解决此问题，一般会直接拷贝源码内容喂给LLM；或者先将源码文件放到当前工程内，再在对话中引用。\n\n而使用本地反编译MCP方案最有效，能精准解析jar包中的类与方法，显著提升代码生成的准确性和可用性。\n\n## 功能特性\n\n- **🚀使用方便**：mcp服务基于TypeScript实现，使用npm打包，方便分发和安装，弱环境依赖。\n- 🔍 **依赖扫描**: 自动扫描Maven项目的所有依赖JAR包\n- 📦 **类索引**: 建立类全名到JAR包路径的映射索引\n- 🔄 **反编译**: 使用CFR工具（已内置有）实时反编译.class文件为Java源码\n- 📊 **类分析**: 分析Java类的结构、方法、字段、继承关系等\n- 💾 **智能缓存**: 按包名结构缓存反编译结果，支持缓存控制\n- 🚀 **自动索引**: 执行分析前自动检查并创建索引\n- ⚙️ **灵活配置**: 支持外部指定CFR工具路径\n- 🤖 **LLM集成**: 通过MCP协议为LLM提供Java代码分析能力\n\n## 使用示例\n### 在IDE中注册mcp服务\n![工具列表](./doc/mcp-tools.jpg)\n\n### 在智能体对话中使用mcp\n![示例](./doc/mcp-use-case.jpg)\n\n## 使用说明\n\n### mcp服务安装\n\n#### 全局安装（推荐）\n\n```bash\nnpm install -g java-class-analyzer-mcp-server\n```\n\n安装后可以直接使用 `java-class-analyzer-mcp` 命令。\n\n#### 本地安装\n\n```bash\nnpm install java-class-analyzer-mcp-server\n```\n\n#### 从源码安装\n\n```bash\ngit clone https://github.com/handsomestWei/java-class-analyzer-mcp-server.git\ncd java-class-analyzer-mcp-server\nnpm install\nnpm run build\n```\n\n### MCP服务配置\n\n#### 方法1：使用生成的配置（推荐）\n\n运行以下命令生成配置模板：\n```bash\njava-class-analyzer-mcp config -o mcp-client-config.json\n```\n\n然后将生成的配置内容添加到你的MCP客户端配置文件中。\n\n#### 方法2：手动配置\n\n参考以下配置示例，添加到MCP客户端配置文件中：\n\n**全局安装后的配置：**\n```json\n{\n    \"mcpServers\": {\n        \"java-class-analyzer\": {\n            \"command\": \"java-class-analyzer-mcp\",\n            \"args\": [\"start\"],\n            \"env\": {\n                \"NODE_ENV\": \"production\",\n                \"MAVEN_REPO\": \"D:/maven/repository\",\n                \"JAVA_HOME\": \"C:/Program Files/Java/jdk-11\"\n            }\n        }\n    }\n}\n```\n\n**本地安装后的配置：**\n```json\n{\n    \"mcpServers\": {\n        \"java-class-analyzer\": {\n            \"command\": \"node\",\n            \"args\": [\n                \"node_modules/java-class-analyzer-mcp-server/dist/index.js\"\n            ],\n            \"env\": {\n                \"NODE_ENV\": \"production\",\n                \"MAVEN_REPO\": \"D:/maven/repository\",\n                \"JAVA_HOME\": \"C:/Program Files/Java/jdk-11\"\n            }\n        }\n    }\n}\n```\n\n#### 参数说明\n- `command`: 运行MCP服务器的命令，这里使用 `node`\n- `args`: 传递给Node.js的参数，指向`npm run build`编译后的dist文件夹内文件\n- `env`: 环境变量设置\n\n#### 环境变量说明\n- `NODE_ENV`: 运行环境标识\n  - `production`: 生产环境，减少日志输出，启用性能优化\n  - `development`: 开发环境，输出详细调试信息\n  - `test`: 测试环境\n- `MAVEN_REPO`: Maven本地仓库路径（可选）\n  - 如果设置，程序会使用指定的仓库路径扫描JAR包\n  - 如果未设置，程序会使用默认的 `~/.m2/repository` 路径\n- `JAVA_HOME`: Java安装路径（可选）\n  - 如果设置，程序会使用 `${JAVA_HOME}/bin/java` 执行Java命令（用于CFR反编译）\n  - 如果未设置，程序会使用PATH中的 `java` 命令\n- `CFR_PATH`: CFR反编译工具的路径（可选，程序会自动查找）\n\n### 可用的工具\n\n#### 1. scan_dependencies\n扫描Maven项目的所有依赖，建立类名到JAR包的映射索引。\n\n**参数:**\n- `projectPath` (string): Maven项目根目录路径\n- `forceRefresh` (boolean, 可选): 是否强制刷新索引，默认false\n\n**示例:**\n```json\n{\n  \"name\": \"scan_dependencies\",\n  \"arguments\": {\n    \"projectPath\": \"/path/to/your/maven/project\",\n    \"forceRefresh\": false\n  }\n}\n```\n\n#### 2. decompile_class\n反编译指定的Java类文件，返回Java源码。\n\n**参数:**\n- `className` (string): 要反编译的Java类全名，如：com.example.QueryBizOrderDO\n- `projectPath` (string): Maven项目根目录路径\n- `useCache` (boolean, 可选): 是否使用缓存，默认true。避免每次都重复生成。\n- `cfrPath` (string, 可选): CFR反编译工具的jar包路径。已内置有，可以额外指定版本。\n\n**示例:**\n```json\n{\n  \"name\": \"decompile_class\",\n  \"arguments\": {\n    \"className\": \"com.example.QueryBizOrderDO\",\n    \"projectPath\": \"/path/to/your/maven/project\",\n    \"useCache\": true,\n    \"cfrPath\": \"/path/to/cfr-0.152.jar\"\n  }\n}\n```\n\n#### 3. analyze_class\n分析Java类的结构、方法、字段等信息。\n\n**参数:**\n- `className` (string): 要分析的Java类全名\n- `projectPath` (string): Maven项目根目录路径\n\n**示例:**\n```json\n{\n  \"name\": \"analyze_class\",\n  \"arguments\": {\n    \"className\": \"com.example.QueryBizOrderDO\",\n    \"projectPath\": \"/path/to/your/maven/project\",\n  }\n}\n```\n\n### 缓存文件\n在当前工程，会生成以下缓存目录和文件。\n- `.mcp-class-index.json`: 类索引缓存文件\n- `.mcp-decompile-cache/`: 反编译结果缓存目录（按包名结构）\n- `.mcp-class-temp/`: 临时文件目录（按包名结构）\n\n## 工作流程\n\n1. **自动索引**: 首次调用`analyze_class`或`decompile_class`时，自动检查并创建索引\n2. **智能缓存**: 反编译结果按包名结构缓存，支持缓存控制\n3. **分析类**: 使用`analyze_class`或`decompile_class`获取类的详细信息\n4. **LLM分析**: 将反编译的源码提供给LLM进行代码分析\n\n## 技术架构\n\n### 核心组件\n\n- **DependencyScanner**: 负责扫描Maven依赖和建立类索引\n- **DecompilerService**: 负责反编译.class文件\n- **JavaClassAnalyzer**: 负责分析Java类结构\n- **MCP Server**: 提供标准化的MCP接口\n\n### 依赖扫描流程\n\n1. 执行`mvn dependency:tree`获取依赖树\n2. 解析每个JAR包，提取所有.class文件\n3. 建立\"类全名 -\u003e JAR包路径\"的映射索引\n4. 缓存索引到`.mcp-class-index.json`文件\n\n### 反编译流程\n\n1. 根据类名查找对应的JAR包路径\n2. 检查缓存，如果存在且启用缓存则直接返回\n3. 从JAR包中提取.class文件到`.mcp-class-temp`目录（按包名结构）\n4. 使用CFR工具反编译.class文件\n5. 保存反编译结果到缓存`.mcp-decompile-cache`目录（按包名结构）\n6. 返回Java源码\n\n## 故障排除\n\n### 常见问题\n\n1. **Maven命令失败**\n   - 确保Maven已安装并在PATH中\n   - 检查项目是否有有效的pom.xml文件\n\n2. **CFR反编译失败**\n   - 确保CFR jar包已下载（支持任意版本号）\n   - 检查Java环境是否正确配置\n   - 可通过`cfrPath`参数指定CFR路径\n\n3. **类未找到**\n   - 程序会自动检查并创建索引\n   - 检查类名是否正确\n   - 确保项目依赖已正确解析\n\n## 测试说明\n\n### 构建项目\n\n```bash\nnpm install\nnpm run build\n```\n\n### 测试工具使用\n\n项目提供了独立的测试工具，可以直接测试MCP服务的各个功能，无需通过MCP客户端。\n\n```bash\n# 测试所有工具\nnode test-tools.js\n\n# 测试特定工具\nnode test-tools.js --tool decompile_class --class com.alibaba.excel.EasyExcelFactory --project /path/to/project\n\n# 不使用缓存\nnode test-tools.js --tool decompile_class --no-cache\n\n# 指定CFR路径\nnode test-tools.js --tool decompile_class --cfr-path /path/to/cfr.jar\n```\n\n### 测试工具参数\n\n- `-t, --tool \u003c工具名\u003e`: 指定要测试的工具 (scan|decompile|analyze|all)\n- `-p, --project \u003c路径\u003e`: 项目路径\n- `-c, --class \u003c类名\u003e`: 要分析的类名\n- `--no-refresh`: 不强制刷新依赖索引\n- `--no-cache`: 不使用反编译缓存\n- `--cfr-path \u003c路径\u003e`: 指定CFR反编译工具的jar包路径\n- `-h, --help`: 显示帮助信息\n\n### 日志级别控制\n\n通过 `NODE_ENV` 环境变量控制日志输出：\n\n- `development`: 输出详细调试信息\n- `production`: 只输出关键信息\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhandsomestwei%2Fjava-class-analyzer-mcp-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhandsomestwei%2Fjava-class-analyzer-mcp-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhandsomestwei%2Fjava-class-analyzer-mcp-server/lists"}