Skip to main content

MCP 协议支持

Cool Request 支持 Model Context Protocol (MCP) 协议,允许 AI 助手(如 Cursor、Claude Desktop 等)直接调用正在运行的 Java 应用中的方法。

什么是 MCP

MCP(Model Context Protocol)是一种开放协议,允许 AI 模型与外部工具和数据源进行交互。通过 Cool Request 的 MCP 支持,您可以让 AI 助手:

  1. 查询运行中的 Java 应用实例
  2. 调用任意 Java 方法(包括静态方法和实例方法)
  3. 获取方法执行结果

启用 MCP 服务器

步骤 1:打开设置

在 IDEA 中,选择 Cool Request > MCP

步骤 2:启用 MCP

勾选 Enable MCP Server,并设置端口号(默认为 8019

MCP 设置

步骤 3:确保应用运行

MCP 需要目标 Java 应用正在运行,并且已经加载了 Cool Request Agent。

配置 MCP 客户端

Cursor 配置

在 Cursor 的 MCP 配置文件中添加:

Windows: C:\Users\<用户名>\.cursor\mcp.json

macOS: ~/.cursor/mcp.json

{
"mcpServers": {
"cool-request": {
"url": "http://localhost:8019/message"
}
}
}

Claude Desktop 配置

在 Claude Desktop 配置文件中添加:

Windows: %APPDATA%\Claude\claude_desktop_config.json

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{
"mcpServers": {
"cool-request": {
"url": "http://localhost:8019/message"
}
}
}

Claude CLI 配置

使用命令行快速添加 MCP 服务器:

claude mcp add --transport http cool-request http://localhost:8019/message

查看已添加的 MCP 服务器:

claude mcp list

移除 MCP 服务器:

claude mcp remove cool-request

Codex 配置

在 Codex 配置文件中添加(TOML 格式):

Windows: %USERPROFILE%\.codex\config.toml

macOS/Linux: ~/.codex/config.toml

[mcp_servers.cool-request]
url = "http://localhost:8019/message"
enabled_tools = ["callMethod", "getObjectInstances"]
startup_timeout_sec = 20
tool_timeout_sec = 45
enabled = true

配置说明:

配置项说明
urlMCP 服务器地址
enabled_tools启用的工具列表,留空则启用全部
disabled_tools禁用的工具列表(在 enabled_tools 之后应用)
startup_timeout_sec启动超时时间(秒)
tool_timeout_sec工具调用超时时间(秒)
enabled是否启用此 MCP 服务器
tip

配置完成后需要重启对应的 AI 客户端以使配置生效。

可用工具

Cool Request MCP 提供两个工具:

1. getObjectInstances

获取指定类在 JVM 中的所有实例对象。

参数:

参数名类型必填说明
classNamestring全限定类名,如 com.example.UserService

返回示例:

[
{
"hashCode": "0x1a2b3c4d",
"hashCodeDecimal": 439041101,
"className": "com.example.UserService",
"toString": "UserService@1a2b3c4d",
"mainClass": "com.example.Application",
"webPort": 8080
}
]

2. callMethod

调用 Java 方法,支持静态方法和实例方法。

参数:

参数名类型必填说明
classNamestring全限定类名
methodNamestring方法名
parametersarray参数值数组,对象类型需传 JSON 字符串
parameterTypesarray参数类型数组,如 ["java.lang.String", "int"]
targetHashCodeinteger目标对象的 hashCode,实例方法必填
isCallTargetObjectboolean是否调用目标对象方法,实例方法设为 true

返回示例:

{
"success": true,
"result": "方法返回值"
}

使用示例

示例 1:调用静态方法

假设有以下 Java 类:

package com.example.util;

public class MathUtils {
public static int add(int a, int b) {
return a + b;
}
}

在 AI 助手中输入:

调用 com.example.util.MathUtils 的 add 方法,参数是 10 和 20

AI 会自动调用 callMethod 工具:

{
"className": "com.example.util.MathUtils",
"methodName": "add",
"parameters": [10, 20],
"parameterTypes": ["int", "int"]
}

示例 2:调用实例方法

假设有以下 Spring Service:

package com.example.service;

@Service
public class UserService {
public User getUserById(Long id) {
// ...
}
}

步骤 1:获取实例

在 AI 助手中输入:

获取 com.example.service.UserService 的所有实例

AI 会调用 getObjectInstances 工具并返回实例列表,包含 hashCode。

步骤 2:调用方法

调用 UserService 的 getUserById 方法,参数是 1

AI 会使用获取到的 hashCode 调用 callMethod

{
"className": "com.example.service.UserService",
"methodName": "getUserById",
"parameters": [1],
"parameterTypes": ["java.lang.Long"],
"targetHashCode": 439041101,
"isCallTargetObject": true
}

示例 3:传递复杂对象参数

对于对象类型参数,需要传递 JSON 字符串:

public void createUser(User user) {
// ...
}

调用时:

{
"className": "com.example.service.UserService",
"methodName": "createUser",
"parameters": ["{\"name\":\"张三\",\"age\":25}"],
"parameterTypes": ["com.example.entity.User"],
"targetHashCode": 439041101,
"isCallTargetObject": true
}

常见问题

Q: MCP 服务器启动失败,提示端口被占用?

A: 修改 MCP 端口号,或关闭占用该端口的程序。

Q: 调用方法时提示 "No agent services available"?

A: 确保目标 Java 应用正在运行,并且 Cool Request Agent 已成功加载。可以在 IDEA 的 Cool Request 面板中查看 Agent 状态。

Q: 如何调用带有泛型参数的方法?

A: 在 parameterTypes 中使用原始类型,如 java.util.List 而不是 java.util.List<String>

Q: 静态方法需要传 targetHashCode 吗?

A: 不需要。静态方法只需要提供 classNamemethodNameparametersparameterTypes 即可。

注意事项

  1. 安全性:MCP 服务器仅在本地监听,请勿将端口暴露到公网
  2. Agent 连接:确保目标应用已正确加载 Cool Request Agent
  3. 参数类型:调用时尽量提供 parameterTypes,避免方法重载导致的歧义
  4. 对象参数:复杂对象需要序列化为 JSON 字符串传递