avoigt1121
M3 deploy surface: gradio_ui.py + src/server.py
0fdbc7e
Raw
History Blame Contribute Delete
2.05 kB
"""FastMCP server for pdac-genomics-agent — mirrors the sibling specialists.
One sub-`FastMCP` per tool module, mounted here, exactly as `pdac-subtype-agent/src/server.py`
and `DecoupleRpy_Agent/src/server.py` do. The MCP tools are thin registered wrappers over the
plain functions in `src/tools/`, which the Gradio handlers call directly — so the two surfaces
can never drift apart in behaviour, only in transport.
Run standalone::
python -m src.server # default transport (stdio)
python -m src.server --transport http --port 8765
In the deployed Space, MCP is served by `demo.launch(..., mcp_server=True)` in `gradio_ui.py`
instead — this entry point is for local/CLI use and for an orchestrator that prefers MCP over
`gradio_client`.
**Note on authorization.** The ADR-0004 allow-list gate lives in the *app* layer (`gradio_ui.py`
handlers and the `gr.api` endpoints), not here — this MCP surface has no HTTP identity to gate
on. Do not expose it publicly without putting a gate in front of it; that is the same open
question `pdac-subtype-agent` ADR-0018 raised about unauthenticated machine surfaces.
"""
from __future__ import annotations
import sys
from pathlib import Path
PROJECT_ROOT = Path(__file__).resolve().parents[1]
if str(PROJECT_ROOT) not in sys.path:
sys.path.insert(0, str(PROJECT_ROOT))
from fastmcp import FastMCP # noqa: E402
from src.tools.query_variant_status import variant_status_mcp # noqa: E402
from src.tools.variant_by_subtype import variant_by_subtype_mcp # noqa: E402
mcp = FastMCP(name="pdac-genomics-agent")
mcp.mount(variant_status_mcp)
mcp.mount(variant_by_subtype_mcp)
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument("--transport", default=None)
parser.add_argument("--port", type=int, default=8765)
args, _ = parser.parse_known_args()
if args.transport:
mcp.run(transport=args.transport, host="0.0.0.0", port=args.port)
else:
mcp.run()