Eclipse测试运行程序MCP
   
Eclipse IDE插件,允许AI编码助手(克劳德代码, )运行JUnit测试,检查结果,检查编译错误,并通过 模型上下文协议.
- 运行JUnit测试 --带有刷新、构建和错误检查的完整构建管道
- 进度流 --长时间运行的工具通过SSE流式传输进度,实时报告每次测试通过/失败
- 代码覆盖率 --通过EclEma/JaCoCo实现每行和每种方法的覆盖率
- 交互式调试 --断点、步进、变量检查、表达式求值
- 代码智能 --在工作区中查找对类、方法和字段的引用
- 工作区诊断 --编译错误、控制台输出、项目列表
安装
该插件在Eclipse中作为OSGi包运行,并在 127.0.0.1:5188.
- 下载
eclipse.mcp.server_VERSION.jar从 发布页面 - 把它放进去
/dropins/ - 重新启动Eclipse
所有工具(核心、调试、BPMN2)都包含在一个JAR中。默认情况下启用调试工具。BPMN2工具默认情况下是禁用的--在中启用它们 Window > Preferences > MCP Server.
连接AI助手
服务器通过HTTP与MCP通信 http://127.0.0.1:5188/mcp。它支持Streamable HTTP——当客户端发送 Accept: text/event-stream 带着一个 progressToken,长时间运行的工具(run_test, clean_build)通过SSE流式传输进度通知,防止客户端超时。
克劳德代码:
claude mcp add eclipse --transport http http://127.0.0.1:5188/mcp -s userGitHub Copilot命令行界面:
- 进入交互模式并键入
/mcp add - 服务器名称 --进入
eclipse - 服务器类型 --选择 超文本传输协议
- 统一资源定位符 --进入
http://127.0.0.1:5188/mcp - 按 控制键+S 保存
工具
标记为的参数 \* 是必需的。其他都是可选的。
核心
| 工具 | 说明 |
|---|---|
run_test | 完整流水线——刷新、构建、检查错误、启动测试。支持 methods 用于在单个JVM中执行多方法的数组。 |
get_test_results | 最近一次测试运行的结果(通过类+方法进行全栈跟踪) |
get_coverage | 类的每行和每方法代码覆盖率 |
list_test_configs | 工作区中的所有JUnit启动配置 |
list_test_runs | 当前和最近的JUnit发布 |
list_projects | 工作区中所有打开的项目 |
get_problems | 编译错误(以及可选的警告) |
get_console_output | 启动时的stdout/stderr |
terminate | 停止运行启动 |
find_references | 查找对类、方法或字段的所有引用 |
clean_build | 从头开始清理和重建项目(在Eclipse严重不同步时使用) |
调试
| 工具 | 说明 |
|---|---|
breakpoint | 管理断点(操作:设置/删除/清除/列出) |
get_debug_state | 检查调试器是否处于活动/挂起状态 |
get_stack_trace | 挂起线程的堆栈跟踪 |
list_variables | 列出当前堆栈帧中的所有可见变量 |
evaluate_expression | 在挂起的框架中计算Java表达式 |
step | 跨过、进入、返回或继续 |
BPMN2(默认禁用)
| 工具 | 说明 |
|---|---|
bpmn2_create_process | 使用样板XML创建新的BPMN2流程文件 |
bpmn2_get_process | 读取BPMN2文件并返回所有节点、流、变量和信号 |
bpmn2_service_task | 添加一个调用Java服务方法的服务任务 |
bpmn2_subflow_call | 添加调用另一个BPMN2子流程的调用活动 |
bpmn2_script_task | 添加一个执行内联Java代码的脚本任务 |
bpmn2_gateway | 添加用于分支或合并的专用网关 |
bpmn2_node | 添加开始/结束事件或扩展点,更新或删除节点(操作:添加/更新/删除) |
bpmn2_flow | 添加、更新或删除序列流(操作:添加/更新/删除) |
bpmn2_variable | 添加或删除流程变量(操作:添加/删除) |
bpmn2_signal | 添加或删除信号定义(操作:添加/删除) |
bpmn2_import | 添加或删除Java类导入(操作:添加/删除) |
bpmn2_item_definition | 添加或删除类型定义(操作:添加/删除) |
bpmn2_text_annotation | 添加或删除图表注释(操作:添加/删除) |
bpmn2_auto_layout | 自动布局图中的所有节点和边 |
典型会话
list_test_configs → discover available JUnit configurations
run_test → edit code, then refresh + build + run
run_test (mode=coverage) → same, but with code coverage enabled
run_test (mode=debug) → run with debugger (set breakpoints first)
get_test_results → re-check results or wait for completion
get_test_results (class+method) → drill into a specific failure's full stack trace
get_coverage → inspect per-line coverage for a source class调试会话示例:
breakpoint (action=set) → set breakpoint at a suspicious line
run_test (mode=debug) → launch test with debugger attached
get_debug_state → check if breakpoint was hit
list_variables → see all variables in scope
evaluate_expression → evaluate a Java expression in context
step (action=over) → step to the next line
step (action=resume) → let the test finishBPMN2工作流示例:
bpmn2_create_process → create a new .bpmn2 file with process boilerplate
bpmn2_variable (add) → add processCommandFlow variable
bpmn2_import (add) → import a utility class for use in script tasks
bpmn2_signal (add) → define a signal for event-driven start events
bpmn2_node (add start_event)→ add the main start event
bpmn2_service_task → call a Java service (validated against workspace)
bpmn2_gateway → add a diverging gateway for conditional branching
bpmn2_script_task → add inline Java logic
bpmn2_subflow_call → delegate to another BPMN2 subprocess
bpmn2_node (add ext_point) → add a web extension point (human task)
bpmn2_gateway → add a converging gateway to merge branches
bpmn2_node (add end_event) → add the end event
bpmn2_flow (add) → connect nodes with sequence flows
bpmn2_flow (add+condition) → add conditional branch with Java expression
bpmn2_text_annotation (add)→ annotate a node with a diagram comment
bpmn2_auto_layout → arrange all shapes and edges on the diagram
bpmn2_get_process → verify the complete process structureDetailed tool reference
测试执行
run_test (config*, class*, method, methods[], project, dependencies[], mode) → {steps, success, compilationErrors[], launchResult{status, totalTests, passed, failed, failures[]}}
完整管道——从磁盘刷新项目,构建(首先按顺序构建依赖关系),检查编译错误,然后启动测试。如果发现编译错误,则快速失败。如果另一个测试已在运行,则拒绝调用。这 mode 参数控制测试的启动方式: run (默认), coverage (EclEmma/JaCoCo-使用 get_coverage 之后),或 debug (先设置断点)。
使用现有的启动配置作为模板——继承VM参数、类路径和环境——同时只覆盖测试目标(类/方法)。
多方法执行: 通过 methods (方法名称数组)在单个JVM启动中运行多个特定的测试方法,共享构建和初始化时间。两者 method 和 methods 可以提供——它们被合并和去重。使用捆绑的Java代理拦截Eclipse的 RemoteTestRunner 仅执行指定的方法。需要Eclipse 2019-06或更新版本。
测试结果
get_test_results (wait, class, method) → {status, totalTests, passed, failed, errors, ignored, failures[]} 或 {class, method, trace}
返回最近一次测试运行的结果。每个失败都包括异常消息和一个紧凑的堆栈跟踪:前3个应用程序帧加上所有测试类帧,框架内部被过滤,其余帧被折叠为 ... N more.通行证 wait=true 直到运行测试完成。通过 class 和 method 获取特定故障的完整堆栈跟踪。
get_coverage (class*) → {class, summary{lineCoverage, branchCoverage, methodCoverage}, methods[{name, lineCoverage, branchCoverage, uncoveredLines[]}], lines[{line, status, branches}]}
覆盖运行后源类的详细代码覆盖率。按方法覆盖率返回未覆盖的行号和每行状态(COVERED, NOT_COVERED, PARTLY_COVERED).如果仍在加载,则等待覆盖率分析完成。
工作区和诊断
list_test_configs () → {testConfigurations[{name, type}]}
枚举所有JUnit启动配置——常规JUnit、JUnit插件测试和SWTBot。
list_test_runs () → {testRuns[{name, mode, terminated}]}
显示活动和最近的JUnit启动及其运行/终止状态。
list_projects () → {projects[]}
工作区中所有打开项目的名称。
get_problems (project, includeWarnings) → {errorCount, warningCount, errors[{project, file, line, message}], warnings[]}
Eclipse的Problems视图中的Java编译错误。可选地包括警告。可以限定为单个项目。
get_console_output (name) → {configName, terminated, stdout, stderr}
从最近的启动(或按名称指定的启动)中捕获stdout和stderr。当流监视器缓冲区被清除时,自动返回到读取Eclipse控制台视图。
terminate (name) → {terminated}
停止运行启动。可选择按配置名称进行筛选。返回终止的启动次数。
代码智能
find_references (class*, member) → {element, totalReferences, files[{class, references[{line, source}]}]}
在所有打开的工作区项目中查找对Java类、方法或字段的所有引用。使用Eclipse的语义搜索引擎——查找实际用法,而不仅仅是名称匹配。如果 member 省略,查找对类本身的引用。处理方法重载(一起搜索所有重载)。结果按文件、行号和源代码行上下文分组。
clean_build (projects[]) → {projects[]}
从头开始清理和重建Eclipse项目。从磁盘刷新,执行完全清理(删除所有构建工件),然后进行完整的重建。当Eclipse严重不同步时使用——过时的编译错误、幻影缺失的类或损坏的增量构建状态。通过 projects 以针对特定项目,或省略清理/重建所有打开的项目。
调试
breakpoint (action*, class, line, condition, id) → 因行动而异
管理断点。 action='set' (要求 class, line;可选 condition):设置行断点,返回 {id, class, line, condition, enabled}. action='remove' (要求 id):按断点ID删除断点,返回 {removed, id}. action='clear':删除所有断点,返回 {removed} (计数)。 action='list':列出工作区中的所有Java行断点,返回 {breakpoints[{id, class, line, condition, enabled, hitCount}]}.
get_debug_state () → {active, suspended, thread, threadId, location{class, method, line, sourceName, source}, reason}
检查调试会话是否处于活动状态,以及线程是否挂起(例如在断点处或步骤后)。
get_stack_trace (thread_id) → {thread, frames[{index, class, method, line, sourceName}]}
获取挂起线程的堆栈跟踪。使用帧索引 evaluate_expression 在特定框架的上下文中工作。
list_variables (thread_id, frame_index) → {frame, variableCount, variables[{name, type, value, fields[], length, elements[], truncated}]}
列出当前堆栈帧中所有可见的变量及其类型和浅值。显示局部变量、方法参数和 this 领域。对于对象,显示字段名称;对于数组,显示长度和前几个元素。使用 evaluate_expression 检查他们。
evaluate_expression (expression*, thread_id, frame_index) → {type, value, fields[]}
在挂起的堆栈帧的上下文中计算Java表达式。可以读取值、调用方法或修改变量。
step (action*, thread_id, timeout) → {action, thread, reason, location{class, method, line, sourceName, source}, terminated, testResults}
控制调试器执行: over (下一行), into (输入方法调用), return (退出当前方法),或 resume (运行到下一个断点或终止)。返回带有源上下文的新位置。终止时,包括测试结果(如有)。
从源头构建
需要Java 17+和Maven 3.9+。
mvn package -B输出JAR落在 eclipse.mcp.server/target/.复制到Eclipse dropins/ 并重新启动。
更新日志
许可证
致谢
灵感来自 eclipse mcp服务器 马克斯·马丁森。
