Source code for pycycle_mcp.main

"""Entry point for the pyCycle MCP FastMCP server."""

from __future__ import annotations

import argparse
from collections.abc import Sequence
from typing import Any, Literal, cast

from pycycle_mcp.fastmcp_server import build_server

TransportName = Literal["stdio", "http", "sse", "streamable-http"]


[docs] def build_parser() -> argparse.ArgumentParser: """Create the argument parser for the FastMCP server CLI.""" parser = argparse.ArgumentParser(description="pyCycle MCP server") parser.add_argument( "--transport", choices=("stdio", "http", "sse", "streamable-http"), default="stdio", help=( "Transport for serving MCP (stdio for local/editor integrations, " "HTTP-compatible modes for network serving)." ), ) parser.add_argument( "--host", default="0.0.0.0", help="Host to bind for HTTP-compatible transports (default: 0.0.0.0)", ) parser.add_argument( "--port", type=int, default=8000, help="Port to bind for HTTP-compatible transports (default: 8000)", ) parser.add_argument( "--path", help=("Optional path to mount the HTTP endpoint (defaults to FastMCP's protocol-specific path)."), ) parser.add_argument( "--log-level", default="INFO", help="Logging level for server startup messages.", ) return parser
def _normalize_transport(transport: TransportName) -> TransportName: """Normalize legacy HTTP aliasing used by existing integrations.""" if transport == "http": return "streamable-http" return transport
[docs] def main(argv: Sequence[str] | None = None) -> int: """Register tools and start the FastMCP server.""" parser = build_parser() args = parser.parse_args(argv) app = build_server() transport = _normalize_transport(cast(TransportName, args.transport)) transport_kwargs: dict[str, Any] = { "show_banner": False, "log_level": args.log_level, } if transport in {"sse", "streamable-http"}: transport_kwargs["host"] = args.host transport_kwargs["port"] = args.port if args.path is not None: transport_kwargs["path"] = args.path app.run(transport=transport, **transport_kwargs) return 0
if __name__ == "__main__": raise SystemExit(main())