mcp-gen-material

This commit is contained in:
2025-10-15 14:43:57 +08:00
parent 9b0f835575
commit b11bf2417b
2 changed files with 533 additions and 9 deletions

View File

@@ -1,31 +1,42 @@
# main.py
# 将 Materials CIF MCP 与 System Tools MCP 一起挂载到 Starlette。
# 关键点:
# - 在 lifespan 中启动每个 MCP 的 session_manager.run()(参考 SDK README 的 Starlette 挂载示例与 streamable_http_app 用法 [1]
# - 通过 Mount 指定各自的子路径(如 /system 与 /materials
import contextlib
from starlette.applications import Starlette
from starlette.routing import Mount
from test_tools import create_test_mcp
from system_tools import create_system_mcp # 如果暂时不用可先不挂
from system_tools import create_system_mcp
from materialproject_mcp import create_materials_mcp
# 创建 MCP 实例
test_mcp = create_test_mcp()
# 创建 MCP 实例
system_mcp = create_system_mcp()
materials_mcp = create_materials_mcp()
# 关键:在 Starlette 的 lifespan 中启动 MCP 的 session manager
# 在 Starlette 的 lifespan 中启动 MCP 的 session manager
@contextlib.asynccontextmanager
async def lifespan(app: Starlette):
async with contextlib.AsyncExitStack() as stack:
# await stack.enter_async_context(test_mcp.session_manager.run())
await stack.enter_async_context(system_mcp.session_manager.run())
await stack.enter_async_context(materials_mcp.session_manager.run())
yield # 服务器运行期间
# 退出时自动清理
# 挂载两个 MCP 的 Streamable HTTP App
app = Starlette(
lifespan=lifespan,
routes=[
# Mount("/test", app=test_mcp.streamable_http_app()),
Mount("/system", app=system_mcp.streamable_http_app()),
Mount("/materials", app=materials_mcp.streamable_http_app()),
],
)
# 启动代码为uvicorn main:app --host 0.0.0.0 --port 8000
# url为http://localhost:8000/system
# 启动命令(终端执行):
# uvicorn main:app --host 0.0.0.0 --port 8000
# 访问:
# http://localhost:8000/system
# http://localhost:8000/materials
#
# 如果需要浏览器客户端访问CORS 暴露 Mcp-Session-Id请参考 README 中的 CORS 配置示例 [1]