|
7 | 7 |
|
8 | 8 | from pydantic_core import PydanticUndefined |
9 | 9 | from fastmcp import Client |
| 10 | +from fastmcp.client.transports import StreamableHttpTransport, SSETransport |
10 | 11 | import jsonref |
11 | 12 | from mcpadapt.smolagents_adapter import _sanitize_function_name |
12 | 13 |
|
13 | 14 | from consts.const import LOCAL_MCP_SERVER, DATA_PROCESS_SERVICE |
14 | 15 | from consts.exceptions import MCPConnectionError, ToolExecutionException, NotFoundException |
15 | 16 | from consts.model import ToolInstanceInfoRequest, ToolInfo, ToolSourceEnum, ToolValidateRequest |
16 | | -from database.remote_mcp_db import get_mcp_records_by_tenant, get_mcp_server_by_name_and_tenant |
| 17 | +from database.remote_mcp_db import ( |
| 18 | + get_mcp_records_by_tenant, |
| 19 | + get_mcp_server_by_name_and_tenant, |
| 20 | + get_mcp_authorization_token_by_name_and_url, |
| 21 | +) |
17 | 22 | from database.tool_db import ( |
18 | 23 | create_or_update_tool_by_tool_info, |
19 | 24 | query_all_tools, |
|
31 | 36 | logger = logging.getLogger("tool_configuration_service") |
32 | 37 |
|
33 | 38 |
|
| 39 | +def _create_mcp_transport(url: str, authorization_token: Optional[str] = None): |
| 40 | + """ |
| 41 | + Create appropriate MCP transport based on URL ending. |
| 42 | +
|
| 43 | + Args: |
| 44 | + url: MCP server URL |
| 45 | + authorization_token: Optional authorization token |
| 46 | +
|
| 47 | + Returns: |
| 48 | + Transport instance (SSETransport or StreamableHttpTransport) |
| 49 | + """ |
| 50 | + url_stripped = url.strip() |
| 51 | + headers = {"Authorization": authorization_token} if authorization_token else {} |
| 52 | + |
| 53 | + if url_stripped.endswith("/sse"): |
| 54 | + return SSETransport(url=url_stripped, headers=headers) |
| 55 | + elif url_stripped.endswith("/mcp"): |
| 56 | + return StreamableHttpTransport(url=url_stripped, headers=headers) |
| 57 | + else: |
| 58 | + # Default to StreamableHttpTransport for unrecognized formats |
| 59 | + return StreamableHttpTransport(url=url_stripped, headers=headers) |
| 60 | + |
| 61 | + |
34 | 62 | def python_type_to_json_schema(annotation: Any) -> str: |
35 | 63 | """ |
36 | 64 | Convert Python type annotations to JSON Schema types |
|
0 commit comments