update:服务端MCP新增支持Streamable HTTP传输协议

This commit is contained in:
3030332422
2025-10-29 23:14:42 +08:00
parent cde093dd20
commit 5149a8049a
2 changed files with 39 additions and 6 deletions
@@ -13,6 +13,7 @@ from typing import Optional, List, Dict, Any
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
from mcp.client.sse import sse_client
from mcp.client.streamable_http import streamablehttp_client
from config.logger import setup_logging
from core.utils.util import sanitize_tool_name
@@ -172,8 +173,31 @@ class ServerMCPClient:
if "API_ACCESS_TOKEN" in self.config:
headers["Authorization"] = f"Bearer {self.config['API_ACCESS_TOKEN']}"
self.logger.bind(tag=TAG).warning(f"你正在使用旧过时的配置 API_ACCESS_TOKEN ,请在.mcp_server_settings.json中将API_ACCESS_TOKEN直接设置在headers中,例如 'Authorization': 'Bearer API_ACCESS_TOKEN'")
# 根据transport类型选择不同的客户端,默认为SSE
transport_type = self.config.get("transport", "sse")
if transport_type == "streamable-http" or transport_type == "http":
# 使用 Streamable HTTP 传输
http_r, http_w, get_session_id = await stack.enter_async_context(
streamablehttp_client(
url=self.config["url"],
headers=headers,
timeout=self.config.get("timeout", 30),
sse_read_timeout=self.config.get("sse_read_timeout", 60 * 5),
terminate_on_close=self.config.get("terminate_on_close", True)
)
)
read_stream, write_stream = http_r, http_w
else:
# 使用传统的 SSE 传输
sse_r, sse_w = await stack.enter_async_context(
sse_client(self.config["url"], headers=headers, timeout=self.config.get("timeout", 5), sse_read_timeout=self.config.get("sse_read_timeout", 60 * 5))
sse_client(
url=self.config["url"],
headers=headers,
timeout=self.config.get("timeout", 5),
sse_read_timeout=self.config.get("sse_read_timeout", 60 * 5)
)
)
read_stream, write_stream = sse_r, sse_w
+11 -2
View File
@@ -4,7 +4,7 @@
"后面不断测试补充好用的mcp服务,欢迎大家一起补充。",
"记得删除注释行,des属性仅为说明,不会被解析。",
"des和link属性,仅为说明安装方式,方便大家查看原始链接,不是必须项。",
"当前支持stdio/sse两种模式。"
"当前支持三种传输模式:stdio(标准输入输出), sse(Server-Sent Events), streamable-http(流式HTTP)。"
],
"mcpServers": {
"Home Assistant": {
@@ -41,7 +41,16 @@
"url": "http://localhost:8080/sse",
"headers": {
"Authorization": "Bearer YOUR TOKEN"
}
},
"des": "使用SSE传输模式(默认)"
},
"streamable-http-mcp-server": {
"url": "http://localhost:8000/mcp",
"transport": "streamable-http",
"headers": {
"Authorization": "Bearer YOUR TOKEN"
},
"des": "使用Streamable HTTP传输模式,适用于生产环境的Web部署"
}
}
}