@morris131/jdtls-mcp-server
v1.3.1
Published
MCP server for Eclipse JDT.LS (Java Language Server), providing Java IDE features as MCP tools
Maintainers
Readme
JDTLS MCP Server
基于模型上下文协议(MCP)的 Eclipse JDT.LS Java 语言服务桥接服务器,提供诊断、导航、重构、代码操作等 Java IDE 能力。
特性
- 代码诊断 - 获取 Java 源文件的错误、警告和提示
- 跳转到定义 - 跳转到符号定义位置(LSP 精度获取符号名和类型)
- 查找引用 - 查找工作空间中符号的所有引用
- 查找实现 - 查找接口的实现或抽象类的子类
- 工作空间符号 - 搜索整个工作空间中的符号
- 文档符号 - 列出 Java 文件中的所有符号(分层结构)
- 类型层次 - 获取类型的超类/接口和子类/实现
- 重命名 - 跨工作空间重命名符号(返回编辑,不直接写盘)
- 组织导入 - 移除未使用的导入并排序(支持单文件和目录递归)
- 格式化代码 - 格式化 Java 文件(支持单文件和目录递归)
- 跨平台 - 支持 Windows、Linux 和 macOS
- 快速启动 - 自动启动 JDT.LS,支持预热
前提条件
- Node.js >= 18
- Java >= 17
配置
| 环境变量 | 说明 | 默认值 |
| :--- | :--- | :--- |
| JDTLS_TOOLS | 逗号分隔的工具名称,只启用指定工具(可选) | 全部工具 |
可用的工具名称:get_diagnostics、goto_definition、find_references、workspace_symbols、find_implementations、get_document_symbols、get_type_hierarchy、rename_symbol、organize_imports、format_code。
使用方式
OpenCode 配置
{
"mcp": {
"jdtls": {
"type": "local",
"command": ["npx", "-y", "@morris131/jdtls-mcp-server"]
}
}
}Claude Code 配置
运行以下命令添加 MCP 服务器:
claude mcp add jdtls -- npx -y @morris131/jdtls-mcp-server可用工具
get_diagnostics
获取 Java 源文件或整个工作空间的错误、警告和提示。
参数:
filePath(可选)- 文件路径或目录路径;不传时默认检查当前工作空间severity(可选)- 按严重级别过滤:error、warning、all(默认)maxResults(可选)- 返回的最大诊断条数(默认100,需为大于等于0的整数)
返回字段(structuredContent):
diagnostics- 诊断数组,每项包含message、severity、filePath、category、code、source、rangeerrorCount/warningCount- 按严重级别统计数totalDiagnostics- 总诊断数truncated- 当命中诊断数超过maxResults时为true
示例:
{
"filePath": "src/main/java/com/example/App.java",
"severity": "error",
"maxResults": 50
}检查整个工作空间示例:
{
"severity": "error",
"maxResults": 200
}goto_definition
跳转到符号定义位置。返回符号名、种类和定义位置。
参数:
filePath(必填)- 包含符号的源文件line(必填)- 基于 0 的行号column(必填)- 基于 0 的列号
返回字段(structuredContent):
symbol- 符号名称(来自 LSP documentSymbol)kind- 符号类型(class/method/interface/field 等)location- 定义位置(filePath/line/column)
find_references
查找工作空间中符号的所有引用。返回符号信息和引用位置列表。
参数:
filePath(必填)- 包含符号的源文件line(必填)- 基于 0 的行号column(必填)- 基于 0 的列号maxResults(可选)- 最大返回数(默认100)
返回字段(structuredContent):
symbol- 符号名称(来自 LSP documentSymbol)symbolKind- 符号类型(class/method/interface/field 等)totalCount- 引用总数locations- 引用位置数组(filePath/line/column)truncated- 当结果数超过maxResults时为true
workspace_symbols
搜索整个工作空间中的符号。支持通配符模式。
参数:
query(必填)- 符号查询文本maxResults(可选)- 最大返回数(默认100)
返回字段(structuredContent):
symbols- 符号数组,每项包含name、kind(LSP SymbolKind 数值)、containerName、filePath、line、columntotalSymbols- 匹配到的符号总数(用于判断是否被截断)truncated- 当结果数超过maxResults时为true
find_implementations
查找接口的实现或抽象类的子类。将光标定位在类型或方法名上。
参数:
filePath(必填)- 源文件路径line(必填)- 基于 0 的行号column(必填)- 基于 0 的列号maxResults(可选)- 最大返回数(默认100)
返回字段(structuredContent):
symbol- 符号名称isInterface- 是否为接口symbolKind- 符号类型(class/interface/method 等)totalImplementations- 实现总数implementations- 实现位置数组(filePath/line/column)truncated- 当结果数超过maxResults时为true
get_document_symbols
列出 Java 文件中的所有符号,返回分层结构(类型 > 方法/字段 > 内部类等)。
参数:
filePath(必填)- 文件路径maxResults(可选)- 最大返回数(默认100)
返回字段(structuredContent):
symbols- 分层符号数组,每项包含name、kind、detail、line、column、children(嵌套子符号)totalSymbols- 符号总数truncated- 当结果数超过maxResults时为true
get_type_hierarchy
获取类型在指定位置上的超类/接口(supertypes)和子类/实现(subtypes)。
参数:
filePath(必填)- 源文件路径line(必填)- 基于 0 的行号column(必填)- 基于 0 的列号direction(可选)- 层次方向:supertypes、subtypes、both(默认)
返回字段(structuredContent):
symbol- 类型名称kind- 类型种类(class/interface 等)filePath/line/column- 类型位置supertypes- 超类/接口数组subtypes- 子类/实现数组
rename_symbol
跨工作空间重命名符号。返回所有出现位置的文本编辑,由调用方自行应用(不直接写盘)。
参数:
filePath(必填)- 源文件路径line(必填)- 基于 0 的行号column(必填)- 基于 0 的列号newName(必填)- 新符号名称
返回字段(structuredContent):
oldName- 原符号名newName- 新符号名symbolKind- 符号类型(Type/Method/Symbol)totalEdits- 编辑总数filesAffected- 涉及文件数editsByFile- 按文件分组的编辑(line/column/endColumn/oldText/newText/startOffset/endOffset)note- 特殊提示(如重命名类型需要重命名文件)
organize_imports
组织导入:移除未使用的导入、添加缺少的导入并重新排序。单文件和目录均直接写入磁盘。
参数:
filePath(必填)- 文件路径或目录路径(目录时自动递归)
单文件响应字段:
filePath- 文件路径totalImports- 文件中总导入数usedImports- 保留的常规导入数unusedImports- 被移除的导入全限定名列表organizedImportBlock- 组织后的导入块文本hasChanges- 是否发生变化importRange- 导入块在原文件中的范围(startLine/endLine/startOffset/endOffset)textEdit- 文本编辑内容(startLine/endLine/newText)
目录响应字段:
filePath- 目录路径totalFiles- 找到的 Java 文件数changed- 已修改文件数unchanged- 无需修改文件数failed- 失败文件列表
format_code
格式化 Java 源文件。目录时自动递归,直接写入磁盘(使用 LSP 服务端默认缩进设置)。
参数:
filePath(必填)- 文件路径或目录路径(目录时自动递归)
返回字段(structuredContent):
filePath- 文件路径hasChanges- 是否发生变化editsApplied- 应用的编辑数totalFiles- 目录模式下找到的文件数changed/unchanged/failed- 目录模式统计
