Spaces:
Running
Running
Jeremiah Lowin commited on
Ensure fastmcp run supports v1 servers (#1332)
Browse files- src/fastmcp/cli/run.py +30 -0
src/fastmcp/cli/run.py
CHANGED
|
@@ -5,9 +5,12 @@ import json
|
|
| 5 |
import re
|
| 6 |
import subprocess
|
| 7 |
import sys
|
|
|
|
| 8 |
from pathlib import Path
|
| 9 |
from typing import Any, Literal
|
| 10 |
|
|
|
|
|
|
|
| 11 |
from fastmcp.server.server import FastMCP
|
| 12 |
from fastmcp.utilities.logging import get_logger
|
| 13 |
|
|
@@ -295,6 +298,12 @@ def run_command(
|
|
| 295 |
logger.debug(f'Found server "{server.name}" in {file}')
|
| 296 |
|
| 297 |
# Run the server
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 298 |
kwargs = {}
|
| 299 |
if transport:
|
| 300 |
kwargs["transport"] = transport
|
|
@@ -315,3 +324,24 @@ def run_command(
|
|
| 315 |
except Exception as e:
|
| 316 |
logger.error(f"Failed to run server: {e}")
|
| 317 |
sys.exit(1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
import re
|
| 6 |
import subprocess
|
| 7 |
import sys
|
| 8 |
+
from functools import partial
|
| 9 |
from pathlib import Path
|
| 10 |
from typing import Any, Literal
|
| 11 |
|
| 12 |
+
from mcp.server.fastmcp import FastMCP as FastMCP1x
|
| 13 |
+
|
| 14 |
from fastmcp.server.server import FastMCP
|
| 15 |
from fastmcp.utilities.logging import get_logger
|
| 16 |
|
|
|
|
| 298 |
logger.debug(f'Found server "{server.name}" in {file}')
|
| 299 |
|
| 300 |
# Run the server
|
| 301 |
+
|
| 302 |
+
# handle v1 servers
|
| 303 |
+
if isinstance(server, FastMCP1x):
|
| 304 |
+
run_v1_server(server, host=host, port=port, transport=transport)
|
| 305 |
+
return
|
| 306 |
+
|
| 307 |
kwargs = {}
|
| 308 |
if transport:
|
| 309 |
kwargs["transport"] = transport
|
|
|
|
| 324 |
except Exception as e:
|
| 325 |
logger.error(f"Failed to run server: {e}")
|
| 326 |
sys.exit(1)
|
| 327 |
+
|
| 328 |
+
|
| 329 |
+
def run_v1_server(
|
| 330 |
+
server: FastMCP1x,
|
| 331 |
+
host: str | None = None,
|
| 332 |
+
port: int | None = None,
|
| 333 |
+
transport: TransportType | None = None,
|
| 334 |
+
) -> None:
|
| 335 |
+
if host:
|
| 336 |
+
server.settings.host = host
|
| 337 |
+
if port:
|
| 338 |
+
server.settings.port = port
|
| 339 |
+
match transport:
|
| 340 |
+
case "stdio":
|
| 341 |
+
runner = partial(server.run)
|
| 342 |
+
case "http" | "streamable-http" | None:
|
| 343 |
+
runner = partial(server.run, transport="streamable-http")
|
| 344 |
+
case "sse":
|
| 345 |
+
runner = partial(server.run, transport="sse")
|
| 346 |
+
|
| 347 |
+
runner()
|