使用说明
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的详细调试日志记录。 |
许可证
麻省理工学院