From acb9ce45e7594b69401fa88d37c3dcf93bd1f811 Mon Sep 17 00:00:00 2001 From: ClawdBot Date: Thu, 19 Feb 2026 09:38:43 +1100 Subject: [PATCH] fix(runtime): run server.py and force FastMCP SSE bind on 0.0.0.0:8000 --- Dockerfile | 4 ++-- server.py | 20 ++++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 14c7e1f..35604ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,5 +22,5 @@ USER appuser # Expose the SSE port EXPOSE 8000 -# Run via MCP CLI in SSE mode -CMD ["mcp", "run", "server.py:mcp", "--transport", "sse"] +# Run via python entrypoint (server.py forces FastMCP SSE on 0.0.0.0:8000) +CMD ["python", "server.py"] diff --git a/server.py b/server.py index faaf036..b598749 100644 --- a/server.py +++ b/server.py @@ -209,10 +209,18 @@ def query_notebook(notebook: str, query: str, limit: int = 5) -> str: except Exception as e: return f"Query failed: {e}" -# NOTE: -# We intentionally do NOT call mcp.run() here. -# This module is meant to be run via the FastMCP CLI: -# fastmcp run server.py:mcp --transport sse --host 0.0.0.0 --port 8000 -# The CLI handles proper server startup; calling mcp.run() directly has been -# exiting cleanly (exit code 0) under this container setup. +if __name__ == "__main__": + import sys + logging.info("Starting knowledge-mcp server via embedded FastMCP runner...") + + # Force FastMCP.run() to start SSE listener on all interfaces. + # We intentionally reset argv so container/entrypoint args cannot break startup. + sys.argv = [sys.argv[0], "sse", "--host", "0.0.0.0", "--port", "8000"] + logging.info(f"Forced argv: {sys.argv}") + + try: + mcp.run() + except BaseException as e: + logging.critical(f"Server crashed: {e}", exc_info=True) + raise