Eclipse JDT MCP服务器
](https://github.com/hauschel-ai-tools/jdt-mcp-server)
注: GitHub存储库是一个只读镜像。请打开问题并拉取请求 忘记.
一个MCP服务器(模型上下文协议),将Eclipse JDT功能暴露给Claude Code、Cursor等AI编码助手。它提供 52工具 涵盖9个类别,包括导航、重构、代码生成、测试执行等。作为一个 独立CLI (stdio),而不需要Eclipse IDE。使用单个 curl | bash 命令,然后在任何Java项目中使用它。
______________________________________________________________________
Java Development Tools (JDT) 的模型上下文协议 (MCP) 服务器。为 AI 编码助手(如 Claude Code、Cursor 等)提供 JDT 功能。
独立CLI - 直接作为MCP子进程(stdio)在没有Eclipse IDE的情况下运行。只需安装,切换到Java项目,启动Claude代码。
灵感来自: Spring Tools 5嵌入式MCP服务器von Martin Lippert
特性
服务器设置 52 MCP工具 分为9个类别:
项目信息(5个工具)
| 工具 | 描述 |
|---|---|
jdt_list_projects | 从这里开始列出Workspace中的所有Java项目。 |
jdt_get_classpath 获取项目的类路径(源文件夹、库、输出文件夹) | |
jdt_get_compilation_errors | 文件、行和消息的编译错误和警告 |
jdt_get_project_structure | 项目结构概述(Java版本,源文件夹,包) |
jdt_refresh_project | 重要在外部文件更改后更新工作区 (Write/Edit, git) |
导航(4个工具)
| 工具 | 描述 |
|---|---|
jdt_find_type 按名称模式搜索类型(*Service, User*) | |
jdt_get_method_signature | 带参数的方法签名, 返回类型, 修改 |
jdt_find_implementations 查找接口或子类的所有实现 | |
jdt_find_callers 查找一个方法的所有调用者 |
代码分析(4个工具)
| 工具 | 描述 |
|---|---|
jdt_parse_java_file | 解析Java文件:包,导入,类型,方法,具有偏移的字段 |
jdt_get_type_hierarchy 类型层次结构:超级类,接口,子类 | |
jdt_find_references 查找工作空间中类/方法/字段的所有用途 | |
jdt_get_source_range | 阅读代码以文本形式返回方法/类的实际代码。 |
创建(3个工具)
| 工具 | 描述 |
|---|---|
jdt_create_class 创建一个新的Java类 | |
jdt_create_interface 创建新的Java接口 | |
jdt_create_enum 使用常量创建新的 Java Enum |
代码生成(9个工具)
| 工具 | 描述 |
|---|---|
jdt_add_method 将方法添加到现有类 | |
jdt_add_field 添加到现有类。 | |
jdt_add_import | 添加导入语句(正确的位置,不重复) |
jdt_implement_interface 实现接口并生成方法Stubs | |
jdt_generate_getters_setters | 生成 Getter/Setter(跳过现有的) |
jdt_generate_constructor | 生成构造符(JPA/Jackson可选的无参数) |
jdt_generate_equals_hashcode equals() 和 hashCode() 使用 java.util。生成对象。 | |
jdt_generate_tostring toString() 生成: User{id=1, name='John'} | |
jdt_generate_delegate_methods | Delegation Pattern: 委派给另一个对象的方法 |
重构(10个工具)
| 工具 | 描述 |
|---|---|
jdt_rename_element 安全重命名:重命名类/方法/字段,更新所有引用。 | |
jdt_extract_method 将代码提取到新方法(自动检测参数/返回类型) | |
jdt_move_type 将类移动到其他包,更新所有导入。 | |
jdt_organize_imports | 清理导入:删除未使用,排序 |
jdt_inline Variable/Expression inline(与 Extract 相反) | |
jdt_extract_interface 从类中提取接口 | |
jdt_change_method_signature 更改方法签名,更新所有调用者 | |
jdt_convert_to_lambda 将匿名类转换为lambda表达式 | |
jdt_encapsulate_field 封装字段: 私有化 + Getter/Setter, 更新所有访问 | |
jdt_introduce_parameter 提取本地变量作为方法参数 |
执行(6个工具)
| 工具 | 描述 |
|---|---|
jdt_maven_build Maven-Build 自动检测 Maven Wrapper 和 Java 版本 | |
jdt_run_main 使用 main() 运行 Java 类,获取 stdout/stderr | |
jdt_list_tests 测试列表(pattern='unit' 对于 \*Test.java, 'integration' 对于 \*IT.java) | |
jdt_run_tests 使用结构化JSON输出进行测试 | |
jdt_start_tests_async | 异步启动长期运行的测试(>30s,例如 Spring Boot) |
jdt_get_test_result 检索异步测试运行的状态/结果 |
文档(4个工具)
| 工具 | 描述 |
|---|---|
jdt_get_javadoc 获取类/方法/字段的 Javadoc | |
jdt_get_annotations 检索具有值的元素的所有注释。 | |
jdt_find_annotated_elements 查找所有带有特定注释的元素(@Service、@Test、@Entity) | |
jdt_generate_javadoc 使用 @param, @return, @throws 生成 Javadoc 注释 |
代码质量(2个工具)
| 工具 | 描述 |
|---|---|
jdt_find_unused_code 查找未使用的导入、私有字段和方法 | |
jdt_find_dead_code 查找无法访问的代码(在return/throw之后,死亡分支) |
前提条件
- Java 21+
- Maven 3.9+(仅限源代码构建)
支持的平台
| 平台 | 架构 | 安装脚本 | 手动 | |
|---|---|---|---|---|
| Linux | x86_64,aarch64 | `curl ... \ | bash` | tar.gz |
| macOS | x86_64,aarch64(苹果硅) | `curl ... \ | bash` | tar.gz |
| Windows | x86_64 | - | zip+ jdtls-mcp.cmd |
安装(Linux和macOS)
curl -sSL https://git.changinggraph.org/ai-tools/jdt-mcp-server/raw/branch/main/install.sh | bash该脚本检测操作系统和架构,下载最新版本,安装后 ~/.local/share/jdtls-mcp/ 并自动配置Claude代码。
之后 :
cd /dein/java-projekt
claude更新
只需再次执行相同的命令:
curl -sSL https://git.changinggraph.org/ai-tools/jdt-mcp-server/raw/branch/main/install.sh | bash该脚本将识别现有安装并显示更新路径(例如: Update: 0.2.1 -> 0.2.2).
检查已安装版本:
jdtls-mcp --version从本地构建安装
git clone https://git.changinggraph.org/ai-tools/jdt-mcp-server.git
cd jdt-mcp-server
./install-local.sh卸载
curl -sSL https://git.changinggraph.org/ai-tools/jdt-mcp-server/raw/branch/main/uninstall.sh | bash或手动:
rm -rf ~/.local/share/jdtls-mcp ~/.local/bin/jdtls-mcp
claude mcp remove jdt-mcpManuelle安装(Linux/macOS)
# Archiv herunterladen von:
# https://git.changinggraph.org/ai-tools/jdt-mcp-server/releases
# Entpacken
mkdir -p ~/.local/share/jdtls-mcp
tar xzf jdtls-mcp-linux.gtk.x86_64.tar.gz -C ~/.local/share/jdtls-mcp
# Claude Code konfigurieren
claude mcp add -s user jdt-mcp ~/.local/share/jdtls-mcp/bin/jdtls-mcpManuelle安装(Windows)
# ZIP-Archiv herunterladen von:
# https://git.changinggraph.org/ai-tools/jdt-mcp-server/releases
# Entpacken (z.B. nach %LOCALAPPDATA%\jdtls-mcp)
Expand-Archive jdtls-mcp-win32.win32.x86_64.zip -DestinationPath "$env:LOCALAPPDATA\jdtls-mcp"
# Claude Code konfigurieren
claude mcp add -s user jdt-mcp "$env:LOCALAPPDATA\jdtls-mcp\bin\jdtls-mcp.cmd"高级选项
| 环境变量 | 描述 | 标准 |
|---|---|---|
JDTMCP_TRANSPORT | 运输: stdio 或 http | stdio |
JDTMCP_WORKSPACE Eclipse Workspace 目录 ~/.jdt-mcp/workspaces/ | ||
JDTMCP_SOURCE | install.sh 的下载来源: forgejo 或 github | 自动检测 |
JAVA_HOME | Java安装 | 系统Java |
# HTTP-Modus (für Debugging)
jdtls-mcp --http工作区管理
JDT MCP 服务器管理 Eclipse工作区 每个工作目录。工作空间包含 JDT 元数据(索引、类路径、构建状态)——实际项目文件保留在其位置。
Workspaces 如何运作
~/mein-java-projekt/ ← Arbeitsverzeichnis (user.dir)
├── pom.xml ← Maven-Projekt wird automatisch importiert
├── modul-a/ ← Multi-Module: jedes Modul wird ein eigenes JDT-Projekt
└── modul-b/
~/.jdt-mcp/
├── workspaces// ← Eclipse Workspace (pro Arbeitsverzeichnis)
│ └── .metadata/ ← JDT-Index, Build-State, Projekt-Referenzen
└── jdt-mcp-mein-java-projekt.log ← Log (pro Arbeitsverzeichnis)- 自动导入启动时,服务器将从工作目录(Maven,Gradle,Eclipse)导入所有项目
.project) - 持久工作区重新启动之间保留工作空间 - 无需重新导入
- 每个目录一个工作空间每个工作目录都有自己的隔离工作空间(路径的MD5哈希)
重置工作空间
如果工作区已损坏或无法正确识别项目:
# Workspace-Verzeichnis für aktuelles Arbeitsverzeichnis finden
HASH=$(printf '%s' "$PWD" | md5sum | cut -d' ' -f1)
rm -rf ~/.jdt-mcp/workspaces/$HASH
# Server neu starten (Claude Code neu starten oder Session beenden)下次启动时,工作区将自动重新创建并导入所有新项目。
导入其他项目
不在工作目录中的项目可以稍后导入:
jdt_import_project(path="/pfad/zum/anderen/projekt")工作空间环境变量
| 变量 | 描述 | 标准 |
|---|---|---|
JDTMCP_WORKSPACE 设置自己的 Workspace 目录 ~/.jdt-mcp/workspaces/ |
日志
每个服务器实例根据工作目录登录到自己的文件:
# Logs für ein bestimmtes Projekt anschauen
tail -f ~/.jdt-mcp/jdt-mcp-mein-java-projekt.log典型的工作流程
- 开始:
jdt_list_projects打电话查看可用项目 - 探索:
jdt_get_project_structure为了概述,jdt_find_type搜索 - 分析:
jdt_parse_java_file对于文件详情,jdt_find_references用于应用 - 修改:
jdt_create_class,jdt_generate_*,jdt_rename_element - 更新:
jdt_refresh_project外部变化后 - 构建/测试:
jdt_maven_build,jdt_run_tests
参数格式
- 项目名称Eclipse 项目名称
jdt_list_projects) - 类名 (完全合格):
com.example.MyClass - 方法Name/ 字段Name:
com.example.MyClass#methodName - 文件路径Java 文件的绝对路径
- 抵消文件中的字符位置(从
jdt_parse_java_file)
故障排除
服务器未启动
- 检查日志 : `~/.jdt-mcp/jdt-mcp-
.log`
- 查看Java版本:
java -version(需要21+) - 二进制测试:
jdtls-mcp直接运行,观察 stderr 输出
文件更改后过时的数据
jdt_refresh_project 打电话!服务器不会自动检测到外部更改。
测试过长
jdt_start_tests_async 而非 jdt_run_tests 使用。MCP客户端超时为60s。
已知的限制
| 限制 | 受影响的工具 | 原因 | 问题 |
|---|---|---|---|
| 使用通用的接口方法重命名不会更新实现 | jdt_rename_element | JDT错误: RenameVirtualMethodProcessor 可以在无头模式下 Processor.process(T) 不是太 SimpleProcessor.process(String) 通用绑定(Generics-Binding)不存在。调用者会正确更新,覆盖方法不会。 | #29 |
Eclipse JUnit Runner 与 JUnit Platform 1.x 不兼容 jdt_run_tests, jdt_start_tests_async | NoClassDefFoundError: OutputDirectoryCreator --Eclipse JDT JUnit5 Runner erwarte JUnit Platform 6.x解决方法: jdt_maven_build(goals="test") | #71 | |
无法识别未使用的 package-private 字段。 jdt_find_unused_code JDT 只能识别未使用的私有成员,而不是包私有。 #72 | |||
jdt_inline 无法嵌入某些静态工厂方法。 jdt_inline | JDT错误: InlineMethodRefactoring.create() 提供 null 对于一些无头模式的方法模式 | ||
jdt_extract_interface 使用字符串操作而不是ASTRewrite。 jdt_extract_interface 可能在复杂的类声明(嵌套通用,多个注释)中失败。 #52 |
发展
冒烟测试
该服务器具有基于stdio的烟雾测试,用于测试MCP协议握手和基本工具调用:
tests/smoke-test.sh [path/to/jdtls-mcp-binary]没有争论 jdtls-mcp 从 PATH 中使用。
许可证
EUPL-1.2 -欧盟公共许可证
参与
欢迎贡献!请创建问题或Pull请求: https://git.changinggraph.org/ai-tools/jdt-mcp-server
