cli.py•2.38 kB
"""Command-line interface for polyagent-mcp server."""
from __future__ import annotations
import argparse
import sys
def main() -> None:
"""Entry point for polyagent-mcp console script.
This function is called when users run:
- uvx --from git+https://... polyagent-mcp
- pip install polyagent-mcp && polyagent-mcp
For local development, you can still use:
- fastmcp run polyagent_mcp.server:mcp
- fastmcp dev polyagent_mcp.server:mcp (with auto-reload)
"""
parser = argparse.ArgumentParser(
prog="polyagent-mcp",
description="Run the polyagent MCP server - exposes Claude agents to any MCP client",
)
parser.add_argument(
"--transport",
default="stdio",
choices=["stdio", "http", "sse"],
help="Transport protocol (default: stdio)",
)
parser.add_argument(
"--host",
default="127.0.0.1",
help="Host address for HTTP/SSE transport (default: 127.0.0.1)",
)
parser.add_argument(
"--port",
type=int,
default=8000,
help="Port number for HTTP/SSE transport (default: 8000)",
)
parser.add_argument(
"--path",
default="/mcp",
help="Path for HTTP/SSE endpoint (default: /mcp)",
)
args = parser.parse_args()
# Import and create server after argument parsing
# This allows --help to work without needing agents directory
from polyagent_mcp.server import create_mcp_server
try:
mcp = create_mcp_server()
except RuntimeError as exc:
print(f"Error: {exc}", file=sys.stderr)
sys.exit(1)
# Call mcp.run() directly with parsed parameters
# No need to spawn subprocess or invoke fastmcp CLI
try:
# Only pass host/port/path for http/sse transports
kwargs = {"transport": args.transport} # type: ignore[dict-item]
if args.transport in ("http", "sse"):
kwargs.update({
"host": args.host,
"port": args.port,
"path": args.path,
})
mcp.run(**kwargs)
except KeyboardInterrupt:
print("\nShutting down polyagent-mcp server...", file=sys.stderr)
sys.exit(0)
except Exception as exc:
print(f"Error running server: {exc}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()