Spaces:
Sleeping
Sleeping
| import contextlib | |
| from fastapi import FastAPI | |
| from fastapi.responses import HTMLResponse, FileResponse | |
| from fastapi.staticfiles import StaticFiles | |
| from echo_server import mcp as echo_mcp | |
| from math_server import mcp as math_mcp | |
| import os | |
| # Create a combined lifespan to manage both session managers | |
| async def lifespan(app: FastAPI): | |
| async with contextlib.AsyncExitStack() as stack: | |
| await stack.enter_async_context(echo_mcp.session_manager.run()) | |
| await stack.enter_async_context(math_mcp.session_manager.run()) | |
| yield | |
| BASE_DIR = os.path.dirname(__file__) | |
| STATIC_DIR = os.path.join(BASE_DIR, "static") | |
| app = FastAPI(lifespan=lifespan) | |
| # Serve static assets (screenshot, styles) and the root HTML page | |
| app.mount("/static", StaticFiles(directory=STATIC_DIR), name="static") | |
| async def index(): | |
| return FileResponse(os.path.join(STATIC_DIR, "index.html"), media_type="text/html") | |
| app.mount("/echo", echo_mcp.streamable_http_app()) | |
| app.mount("/math", math_mcp.streamable_http_app()) | |
| PORT = int(os.environ.get("PORT", "10000")) | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host="0.0.0.0", port=PORT) | |