Java语言服务器协议MCP服务器

一个通过Eclipse JDT语言服务器为Claude Code提供IDE级Java代码导航功能的MCP服务器。

  • by AleksandrRodichev-Eath
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 AleksandrRodichev-Eath/java-lsp-claude-mcp

使用说明

javalsp-mcp服务器

MCP服务器,通过Eclipse JDT语言服务器提供Claude Code IDE质量的Java代码导航。

它做什么

此MCP服务器不依赖grep/glob按文本模式搜索Java代码,而是提供 类型感知导航 --转到定义、查找引用、获取实现等等——由VS Code和Eclipse使用的相同语言引擎提供支持。

Claude Code  --MCP/stdio-->  java-lsp-mcp-server  --LSP/stdio-->  Eclipse JDT LS  -->  Your Java Project

先决条件

  • Java 21+ (JDK)--在PATH上或通过 JAVA_HOME
  • Node.js 18+

安装

git clone https://github.com/AIDevelopmentTools/java-lsp-mcp-server.git
cd java-lsp-mcp-server
npm install
npm run build

配置

1.注册MCP服务器

添加一个 .mcp.json 文件到Java项目的根目录:

{
  "mcpServers": {
    "java-lsp": {
      "command": "node",
      "args": ["/absolute/path/to/java-lsp-mcp-server/dist/index.js"]
    }
  }
}

替换 /absolute/path/to/java-lsp-mcp-server 使用克隆仓库的实际路径。

2.将CLAUDE.md添加到Java项目中

复制 CLAUDE.md 从这个仓库到Java项目根目录。这条消息告诉Claude使用MCP工具进行Java导航,而不是默认为grep。

cp /path/to/java-lsp-mcp-server/CLAUDE.md /path/to/your-java-project/CLAUDE.md

如果没有这个文件,Claude仍然可以访问这些工具,但不知道是否更喜欢它们而不是grep/glob。看 CLAUDE.md 完整的内容。

工具

工具 描述 关键输入
java_go_to_definition 跳转到类、方法、字段或变量的定义 filePath, line, column
java_find_references 查找使用符号的所有位置 filePath, line, column
java_get_implementations 查找实现类、子类和方法重写 filePath, line, column
java_get_hover 获取类型信息、Javadoc和方法签名 filePath, line, column
java_get_call_hierarchy 获取方法的传入调用者或传出调用者 filePath, line, column, direction
java_get_workspace_symbols 在整个项目中按名称搜索符号 query, projectRoot
java_get_diagnostics 获取文件的编译错误、警告和提示 filePath
java_rename_symbol 预览重命名重构将更改的内容(不修改文件) filePath, line, column, newName
java_lsp_status 检查所有活动JDT LS实例的状态 (无)

所有基于职位的工具都接受基于1的 line 和 column 数字(与Claude的Read工具的输出相匹配)。可选 projectRoot 从以下位置步行即可自动检测参数 filePath 寻找 pom.xml 或 build.gradle.

例子

转到定义

输入:

{
  "filePath": "/home/user/myapp/src/main/java/com/example/OrderService.java",
  "line": 42,
  "column": 15
}

输出:

/home/user/myapp/src/main/java/com/example/repository/OrderRepository.java:18:1
  15 | import java.util.Optional;
  16 |
  17 | @Repository
> 18 | public interface OrderRepository extends JpaRepository<Order, Long> {
  19 |
  20 |     Optional<Order> findByOrderNumber(String orderNumber);
  21 |

查找引用

输入:

{
  "filePath": "/home/user/myapp/src/main/java/com/example/model/Order.java",
  "line": 12,
  "column": 20
}

输出:

Found 4 reference(s):

/home/user/myapp/src/main/java/com/example/service/OrderService.java:
  Line 31:5
  Line 58:12

/home/user/myapp/src/main/java/com/example/controller/OrderController.java:
  Line 24:9

/home/user/myapp/src/main/java/com/example/repository/OrderRepository.java:
  Line 18:52

运作原理

  • 自动下载: 首次使用时,服务器会下载Eclipse JDT LS v1.43.0(约50MB)到 ~/.java-lsp-mcp/jdtls/。无需手动设置。
  • 每个项目一个实例: 每个Java项目都有自己的JDT LS进程,在第一次工具调用时缓慢启动。工作区数据存储在 ~/.java-lsp-mcp/workspaces/.
  • 项目检测: 服务器从文件路径向上查找最上面的路径 pom.xml 或 build.gradle/build.gradle.kts,因此多模块项目可以正常工作。
  • 碰撞恢复: 如果JDT LS实例崩溃,它将在下一次工具调用时自动重新启动(每个会话最多3次)。

故障排除

问题 解决方案
Java not found 错误 安装JDK 21+并确保 java 位于PATH中,或已设置 JAVA_HOME
第一次工具调用很慢 JDT LS正在下载(约50MB)并为您的项目编制索引。后续的通话速度很快。
长时间处于“初始化”状态 大型项目的初始索引可能需要1-2分钟。与核对 java_lsp_status.
找不到定义/引用 文件可能有编译错误。跑 java_get_diagnostics 检查。
代码更改后的过时结果 JDT LS会自动拾取已保存的文件更改。确保文件已保存。

环境变量

变量 描述
JAVA_HOME JDK安装路径。如果设置,则使用 $JAVA_HOME/bin/java 而不是 java 从PATH。
JAVA_LSP_DEBUG 设置为 true 启用stderr的详细调试日志记录。

许可证

麻省理工学院