|
13 | 13 | from mcp import ClientSession, StdioServerParameters |
14 | 14 | from mcp.client.stdio import stdio_client |
15 | 15 | from mcp.client.sse import sse_client |
| 16 | +from mcp.client.streamable_http import streamablehttp_client |
16 | 17 | from config.logger import setup_logging |
17 | 18 | from core.utils.util import sanitize_tool_name |
18 | 19 |
|
@@ -172,10 +173,33 @@ async def _worker(self): |
172 | 173 | if "API_ACCESS_TOKEN" in self.config: |
173 | 174 | headers["Authorization"] = f"Bearer {self.config['API_ACCESS_TOKEN']}" |
174 | 175 | self.logger.bind(tag=TAG).warning(f"你正在使用旧过时的配置 API_ACCESS_TOKEN ,请在.mcp_server_settings.json中将API_ACCESS_TOKEN直接设置在headers中,例如 'Authorization': 'Bearer API_ACCESS_TOKEN'") |
175 | | - sse_r, sse_w = await stack.enter_async_context( |
176 | | - sse_client(self.config["url"], headers=headers, timeout=self.config.get("timeout", 5), sse_read_timeout=self.config.get("sse_read_timeout", 60 * 5)) |
177 | | - ) |
178 | | - read_stream, write_stream = sse_r, sse_w |
| 176 | + |
| 177 | + # 根据transport类型选择不同的客户端,默认为SSE |
| 178 | + transport_type = self.config.get("transport", "sse") |
| 179 | + |
| 180 | + if transport_type == "streamable-http" or transport_type == "http": |
| 181 | + # 使用 Streamable HTTP 传输 |
| 182 | + http_r, http_w, get_session_id = await stack.enter_async_context( |
| 183 | + streamablehttp_client( |
| 184 | + url=self.config["url"], |
| 185 | + headers=headers, |
| 186 | + timeout=self.config.get("timeout", 30), |
| 187 | + sse_read_timeout=self.config.get("sse_read_timeout", 60 * 5), |
| 188 | + terminate_on_close=self.config.get("terminate_on_close", True) |
| 189 | + ) |
| 190 | + ) |
| 191 | + read_stream, write_stream = http_r, http_w |
| 192 | + else: |
| 193 | + # 使用传统的 SSE 传输 |
| 194 | + sse_r, sse_w = await stack.enter_async_context( |
| 195 | + sse_client( |
| 196 | + url=self.config["url"], |
| 197 | + headers=headers, |
| 198 | + timeout=self.config.get("timeout", 5), |
| 199 | + sse_read_timeout=self.config.get("sse_read_timeout", 60 * 5) |
| 200 | + ) |
| 201 | + ) |
| 202 | + read_stream, write_stream = sse_r, sse_w |
179 | 203 |
|
180 | 204 | else: |
181 | 205 | raise ValueError("MCP客户端配置必须包含'command'或'url'") |
|
0 commit comments