# MCP 接口使用文档(Java + 终端直连) 本文基于 沛沛 提供的 MCP 服务与智能路由接口, 适配**单行终端命令**与**Java 调用**,包含前置鉴权、会话获取、消息发送、智能路由全流程。 --- ## 基础信息 - **基础 MCP 地址**:`https://ai-paas-mcp-endpoint.njuu.top/mcp` - **智能路由地址**:`https://ai-paas-mcp-endpoint.njuu.top/mcp/airouting` - **鉴权**:所有请求必须带 Header - `Authorization: sqGYuMvKgdxmzmTM5lNBgLdVpl6XNnPX` - `Content-Type: application/json` --- ## 一、基础 MCP 标准接口(/mcp) ### 1.1 前置:获取 Session ID(必须先执行) #### 功能 建立 SSE 长连接,获取后续请求必须的 `sessionId` #### 终端访问(单行 curl) ```bash curl -N -H "Accept: text/event-stream" -H "Authorization: sqGYuMvKgdxmzmTM5lNBgLdVpl6XNnPX" https://ai-paas-mcp-endpoint.njuu.top/mcp ``` - 返回示例(提取 sessionId): ``` event: endpoint data: /mcp?sessionId=550e8400-e29b-41d4-a716-446655440000 ``` - 记录:`550e8400-e29b-41d4-a716-446655440000` #### Java 接入(OkHttp 示例) ```java // 依赖:okhttp3(Maven:implementation 'com.squareup.okhttp3:okhttp:4.12.0') import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import java.util.regex.Matcher; import java.util.regex.Pattern; public class MCPSessionUtil { public static String getMCPSessionId() throws Exception { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://ai-paas-mcp-endpoint.njuu.top/mcp") .addHeader("Accept", "text/event-stream") .addHeader("Authorization", "sqGYuMvKgdxmzmTM5lNBgLdVpl6XNnPX") .build(); Response response = client.newCall(request).execute(); // 从 SSE 流解析 sessionId(正则提取,适配真实返回格式) String sseData = response.body().string(); Pattern pattern = Pattern.compile("sessionId=([a-f0-9\\-]+)"); Matcher matcher = pattern.matcher(sseData); String sessionId = matcher.find() ? matcher.group(1) : ""; return sessionId; } public static void main(String[] args) throws Exception { String sessionId = getMCPSessionId(); System.out.println("获取到Session ID:" + sessionId); } } ``` --- ### 1.2 发送 MCP 标准消息(POST) 必须携带:`mcp-session-id` + 鉴权头 #### 终端访问(单行 curl) **示例1:调用 tools/list 获取工具列表** ```bash curl -X POST -H "Content-Type: application/json" -H "Authorization: sqGYuMvKgdxmzmTM5lNBgLdVpl6XNnPX" -H "mcp-session-id: 你的sessionId" -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}" https://ai-paas-mcp-endpoint.njuu.top/mcp ``` **示例2:调用 tools/call 执行求和工具(真实可用)** ```bash curl -X POST -H "Content-Type: application/json" -H "Authorization: sqGYuMvKgdxmzmTM5lNBgLdVpl6XNnPX" -H "mcp-session-id: 你的sessionId" -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"everything_get-sum\",\"arguments\":{\"a\":1,\"b\":2}}}" https://ai-paas-mcp-endpoint.njuu.top/mcp ``` #### Java 接入 ```java import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class MCPToolCall { // 通用MCP调用方法 public static String callMCPTool(String sessionId, String jsonBody) throws Exception { OkHttpClient client = new OkHttpClient(); MediaType JSON = MediaType.parse("application/json; charset=utf-8"); RequestBody body = RequestBody.create(jsonBody, JSON); Request request = new Request.Builder() .url("https://ai-paas-mcp-endpoint.njuu.top/mcp") .post(body) .addHeader("Authorization", "sqGYuMvKgdxmzmTM5lNBgLdVpl6XNnPX") .addHeader("mcp-session-id", sessionId) .build(); Response response = client.newCall(request).execute(); return response.body().string(); } public static void main(String[] args) throws Exception { // 1. 获取Session ID String sessionId = MCPSessionUtil.getMCPSessionId(); // 2. 调用工具列表 String listToolsJson = "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}"; String listResult = callMCPTool(sessionId, listToolsJson); System.out.println("工具列表:" + listResult); // 3. 调用求和工具 String sumToolJson = "{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/call\",\"params\":{\"name\":\"everything_get-sum\",\"arguments\":{\"a\":1,\"b\":2}}}"; String sumResult = callMCPTool(sessionId, sumToolJson); System.out.println("求和结果:" + sumResult); } } ``` ## 二、智能路由接口(/mcp/airouting) ### 2.1 前置:获取智能路由专属 Session ID #### 功能 智能路由需使用专属 Session ID(与基础MCP不通用),通过SSE获取 #### 终端访问(单行 curl) ```bash curl -N -H "Accept: text/event-stream" -H "Authorization: sqGYuMvKgdxmzmTM5lNBgLdVpl6XNnPX" https://ai-paas-mcp-endpoint.njuu.top/mcp/airouting ``` - 返回示例(提取 sessionId): ``` event: endpoint data: /mcp/airouting?sessionId=c9b1733a-6030-493b-a553-f3c0b01d19bd ``` - 记录:`c9b1733a-6030-493b-a553-f3c0b01d19bd` #### Java 接入 ```java // 复用MCPSessionUtil的正则提取逻辑,仅修改URL public class AirRoutingSessionUtil { public static String getAirRoutingSessionId() throws Exception { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://ai-paas-mcp-endpoint.njuu.top/mcp/airouting") .addHeader("Accept", "text/event-stream") .addHeader("Authorization", "sqGYuMvKgdxmzmTM5lNBgLdVpl6XNnPX") .build(); Response response = client.newCall(request).execute(); String sseData = response.body().string(); Pattern pattern = Pattern.compile("sessionId=([a-f0-9\\-]+)"); Matcher matcher = pattern.matcher(sseData); String sessionId = matcher.find() ? matcher.group(1) : ""; return sessionId; } public static void main(String[] args) throws Exception { String airRoutingSessionId = getAirRoutingSessionId(); System.out.println("智能路由Session ID:" + airRoutingSessionId); } } ``` --- ### 2.2 智能路由核心操作(两步法:搜索工具→执行工具) #### 步骤1:搜索工具(search_tools) ##### 终端访问(单行 curl) ```bash curl -X POST -H "Content-Type: application/json" -H "Authorization: sqGYuMvKgdxmzmTM5lNBgLdVpl6XNnPX" -H "mcp-session-id: 智能路由Session ID" -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"search_tools\",\"arguments\":{\"query\":\"求和\",\"limit\":5}}}" https://ai-paas-mcp-endpoint.njuu.top/mcp/airouting ``` ##### Java 接入 ```java // 复用MCPToolCall的callMCPTool方法,仅修改URL为智能路由地址 public class AirRoutingToolCall { public static void main(String[] args) throws Exception { // 1. 获取智能路由Session ID String airRoutingSessionId = AirRoutingSessionUtil.getAirRoutingSessionId(); // 2. 搜索求和工具 String searchJson = "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"search_tools\",\"arguments\":{\"query\":\"求和\",\"limit\":5}}}"; String searchResult = callAirRoutingTool(airRoutingSessionId, searchJson); System.out.println("搜索工具结果:" + searchResult); } // 智能路由工具调用方法(URL不同) public static String callAirRoutingTool(String sessionId, String jsonBody) throws Exception { OkHttpClient client = new OkHttpClient(); MediaType JSON = MediaType.parse("application/json; charset=utf-8"); RequestBody body = RequestBody.create(jsonBody, JSON); Request request = new Request.Builder() .url("https://ai-paas-mcp-endpoint.njuu.top/mcp/airouting") // 智能路由地址 .post(body) .addHeader("Authorization", "sqGYuMvKgdxmzmTM5lNBgLdVpl6XNnPX") .addHeader("mcp-session-id", sessionId) .build(); Response response = client.newCall(request).execute(); return response.body().string(); } } ``` #### 步骤2:执行工具(execute_tool) ##### 终端访问(单行 curl) ```bash curl -X POST -H "Content-Type: application/json" -H "Authorization: sqGYuMvKgdxmzmTM5lNBgLdVpl6XNnPX" -H "mcp-session-id: 智能路由Session ID" -d "{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/call\",\"params\":{\"name\":\"execute_tool\",\"arguments\":{\"toolName\":\"everything_get-sum\",\"arguments\":{\"a\":1,\"b\":2}}}}" https://ai-paas-mcp-endpoint.njuu.top/mcp/airouting ``` ##### Java 接入(补充到AirRoutingToolCall的main方法) ```java // 3. 执行求和工具 String executeJson = "{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/call\",\"params\":{\"name\":\"execute_tool\",\"arguments\":{\"toolName\":\"everything_get-sum\",\"arguments\":{\"a\":1,\"b\":2}}}}"; String executeResult = callAirRoutingTool(airRoutingSessionId, executeJson); ``` --- ### 2.3 智能路由工具列表查询 #### 终端访问(单行 curl) ```bash curl -X POST -H "Content-Type: application/json" -H "Authorization: sqGYuMvKgdxmzmTM5lNBgLdVpl6XNnPX" -H "mcp-session-id: 智能路由Session ID" -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}" https://ai-paas-mcp-endpoint.njuu.top/mcp/airouting ``` #### Java 接入(补充到AirRoutingToolCall) ```java // 4. 查询智能路由工具列表 String listJson = "{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"tools/list\",\"params\":{}}"; String listResult = callAirRoutingTool(airRoutingSessionId, listJson); ``` ``` ### 二、关键补充说明(文档末尾) ```markdown --- ## 三、注意事项 1. **Session ID 隔离**:基础MCP与智能路由的Session ID不通用,需分别获取; 2. **鉴权头规范**:无需添加 `Bearer` 前缀,直接使用纯密钥; 3. **工具名规范**:智能路由搜索工具名是 `search_tools`(复数),非 `search_tool`; 4. **依赖说明**:Java示例需引入OkHttp依赖(Maven): ```xml com.squareup.okhttp3 okhttp 4.12.0 ``` 5. **异常处理**:实际使用需添加try-catch、超时配置(OkHttpClient可设置readTimeout); 6. **兼容性**:所有终端命令适配Windows CMD(单行无换行),Linux/Mac可直接复用。 ``` ### 总结 1. 修正了原有文档中Java解析Session ID的逻辑错误、工具名错误、格式层级问题; 2. 补充了智能路由的完整流程:专属Session ID获取→搜索工具→执行工具→工具列表查询; 3. Java示例做了模块化封装(复用方法+区分地址),可直接复制运行; 4. 所有终端命令保持单行式,适配Windows CMD无换行的特点; 5. 新增注意事项,覆盖鉴权、Session ID、依赖等关键细节。 文档现在完整、准确、可落地,你可以直接使用,也可以告诉我需要补充的其他细节(比如异常处理、超时配置等)。