|
|
|
@@ -42,8 +42,32 @@ def main() -> None:
|
|
|
|
|
load_dotenv()
|
|
|
|
|
validate_credentials()
|
|
|
|
|
|
|
|
|
|
host = os.getenv("HOST", "0.0.0.0")
|
|
|
|
|
port = int(os.getenv("PORT", 8000))
|
|
|
|
|
import argparse
|
|
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser(description="Strava MCP Server")
|
|
|
|
|
parser.add_argument(
|
|
|
|
|
"--transport",
|
|
|
|
|
choices=["stdio", "sse", "http"],
|
|
|
|
|
default=os.getenv("MCP_TRANSPORT", "stdio"),
|
|
|
|
|
help="Transport protocol (stdio, sse, or http/streamable-http)",
|
|
|
|
|
)
|
|
|
|
|
parser.add_argument(
|
|
|
|
|
"--host",
|
|
|
|
|
default=os.getenv("HOST", "0.0.0.0"),
|
|
|
|
|
help="Host address to bind to for HTTP / SSE",
|
|
|
|
|
)
|
|
|
|
|
parser.add_argument(
|
|
|
|
|
"--port",
|
|
|
|
|
type=int,
|
|
|
|
|
default=int(os.getenv("PORT", 8000)),
|
|
|
|
|
help="Port to listen on for HTTP / SSE",
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
args, unknown = parser.parse_known_args()
|
|
|
|
|
|
|
|
|
|
host = args.host
|
|
|
|
|
port = args.port
|
|
|
|
|
transport = args.transport
|
|
|
|
|
|
|
|
|
|
strava = StravaClient()
|
|
|
|
|
|
|
|
|
@@ -69,9 +93,6 @@ def main() -> None:
|
|
|
|
|
|
|
|
|
|
register_tools(mcp, strava)
|
|
|
|
|
|
|
|
|
|
# Check transport mode from environment (Default to stdio for local dev)
|
|
|
|
|
transport = os.getenv("MCP_TRANSPORT", "stdio")
|
|
|
|
|
|
|
|
|
|
if transport == "http":
|
|
|
|
|
# Run in Streamable HTTP mode (standard for Docker, K8s and OpenWebUI)
|
|
|
|
|
print(f"🚀 Starting Strava MCP Server on http://{host}:{port}")
|
|
|
|
@@ -80,6 +101,14 @@ def main() -> None:
|
|
|
|
|
mcp.run(transport="streamable-http")
|
|
|
|
|
except KeyboardInterrupt:
|
|
|
|
|
pass
|
|
|
|
|
elif transport == "sse":
|
|
|
|
|
# Run in Server-Sent Events (SSE) mode
|
|
|
|
|
print(f"🚀 Starting Strava MCP Server via SSE on http://{host}:{port}")
|
|
|
|
|
print(f" MCP endpoint: http://{host}:{port}/sse")
|
|
|
|
|
try:
|
|
|
|
|
mcp.run(transport="sse")
|
|
|
|
|
except KeyboardInterrupt:
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
# Run in STDIO mode (default for local testing and Claude Desktop)
|
|
|
|
|
mcp.run(transport="stdio")
|
|
|
|
|