| """ |
| MCP服务器实现 - 使用FastMCP和Streamable HTTP transport |
| """ |
|
|
| import logging |
| from typing import Optional |
| from starlette.applications import Starlette |
| from mcp.server import FastMCP |
| from mcp.server.streamable_http import TransportSecuritySettings |
|
|
| logger = logging.getLogger(__name__) |
|
|
| |
| |
| _transport_security = TransportSecuritySettings( |
| enable_dns_rebinding_protection=False, |
| allowed_hosts=["*"], |
| ) |
|
|
| |
| |
| mcp = FastMCP( |
| "Message Function Center", |
| json_response=True, |
| streamable_http_path="/", |
| transport_security=_transport_security, |
| ) |
|
|
| |
| _mcp_app: Optional[Starlette] = None |
|
|
|
|
| def get_mcp_app() -> Starlette: |
| """获取 MCP ASGI 应用实例。 |
| |
| 必须在 lifespan 之前调用此方法来创建 session_manager, |
| 然后在 lifespan 中使用 session_manager.run() 启动 task group。 |
| |
| Returns: |
| MCP ASGI 应用实例 |
| """ |
| global _mcp_app |
| if _mcp_app is None: |
| _mcp_app = mcp.streamable_http_app() |
| logger.info("MCP ASGI应用已创建") |
| return _mcp_app |