🚀 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:只輸出關鍵信息。