初始化提交
This commit is contained in:
commit
887c1f449e
963 files changed
+166869
No files matched your search
@@ -0,0 +1,67 @@
|
||||
"""MCP 传输层工厂。
|
||||
|
||||
根据 server 的 transport 字段创建对应的 TransportProtocol 实例。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from typing import Any
|
||||
|
||||
import httpx
|
||||
|
||||
from app.integrations.mcp.transports.base import TransportProtocol
|
||||
from app.integrations.mcp.transports.http import StreamableHttpTransport
|
||||
from app.integrations.mcp.transports.stdio import StdioTransport
|
||||
|
||||
|
||||
def get_transport(
|
||||
server: Any,
|
||||
http_client: httpx.AsyncClient | None = None,
|
||||
) -> TransportProtocol:
|
||||
"""根据 server 的 transport 字段创建传输层实例。"""
|
||||
transport = server.transport if hasattr(server, "transport") else "streamable-http"
|
||||
|
||||
if transport == "stdio":
|
||||
args: list[str] = []
|
||||
if hasattr(server, "args_json") and server.args_json:
|
||||
try:
|
||||
parsed = json.loads(server.args_json)
|
||||
if isinstance(parsed, list):
|
||||
args = [str(a) for a in parsed]
|
||||
except (json.JSONDecodeError, TypeError):
|
||||
pass
|
||||
|
||||
env: dict[str, str] | None = None
|
||||
if hasattr(server, "env_json") and server.env_json:
|
||||
try:
|
||||
parsed = json.loads(server.env_json)
|
||||
if isinstance(parsed, dict):
|
||||
env = {str(k): str(v) for k, v in parsed.items()}
|
||||
except (json.JSONDecodeError, TypeError):
|
||||
pass
|
||||
|
||||
cwd: str | None = None
|
||||
if hasattr(server, "cwd") and server.cwd:
|
||||
cwd = server.cwd
|
||||
|
||||
cmd = getattr(server, "command", None) or ""
|
||||
return StdioTransport(
|
||||
server_id=server.id,
|
||||
server_name=server.name,
|
||||
command=cmd,
|
||||
args=args,
|
||||
env=env,
|
||||
cwd=cwd,
|
||||
)
|
||||
|
||||
# 默认 streamable-http
|
||||
endpoint_url = getattr(server, "endpoint_url", None) or ""
|
||||
auth_token = getattr(server, "auth_token", None)
|
||||
return StreamableHttpTransport(
|
||||
server_id=server.id,
|
||||
server_name=server.name,
|
||||
endpoint_url=endpoint_url,
|
||||
auth_token=auth_token,
|
||||
http_client=http_client,
|
||||
)
|
||||
Reference in new issue
Block a user