From 8ffed6a3d9decc1540a269f29c4b96848fa3424e Mon Sep 17 00:00:00 2001 From: Jeremiah Lowin <153965+jlowin@users.noreply.github.com> Date: Wed, 3 Sep 2025 17:24:22 -0400 Subject: [PATCH] Hotfix: restore --transport streamable http at CLI (#1743) --- docs/docs.json | 2 +- .../{workos-oauth.mdx => workos.mdx} | 0 .../mcp_server_config/v1/mcp_server_config.py | 2 +- .../cli/test_mcp_server_config_integration.py | 14 +++++------ tests/cli/test_mcp_server_config_schema.py | 25 ++++++++++++++++++- 5 files changed, 33 insertions(+), 10 deletions(-) rename docs/integrations/{workos-oauth.mdx => workos.mdx} (100%) diff --git a/docs/docs.json b/docs/docs.json index 1bf672fad..52a297e2c 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -159,7 +159,7 @@ "integrations/azure", "integrations/github", "integrations/google", - "integrations/workos-oauth" + "integrations/workos" ] }, { diff --git a/docs/integrations/workos-oauth.mdx b/docs/integrations/workos.mdx similarity index 100% rename from docs/integrations/workos-oauth.mdx rename to docs/integrations/workos.mdx diff --git a/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py b/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py index 3513df172..eb1937166 100644 --- a/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +++ b/src/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py @@ -36,7 +36,7 @@ EnvironmentType: TypeAlias = UVEnvironment class Deployment(BaseModel): """Configuration for server deployment and runtime settings.""" - transport: Literal["stdio", "http", "sse"] | None = Field( + transport: Literal["stdio", "http", "sse", "streamable-http"] | None = Field( default=None, description="Transport protocol to use", ) diff --git a/tests/cli/test_mcp_server_config_integration.py b/tests/cli/test_mcp_server_config_integration.py index 1a25d14dd..2f9640b5e 100644 --- a/tests/cli/test_mcp_server_config_integration.py +++ b/tests/cli/test_mcp_server_config_integration.py @@ -248,13 +248,13 @@ class TestConfigValidation: deployment={"transport": "invalid_transport"}, # type: ignore[arg-type] ) - def test_streamable_http_transport_rejected(self): - """Test that streamable-http transport is rejected in fastmcp.json config.""" - with pytest.raises(ValueError): - MCPServerConfig( - source={"path": "server.py"}, - deployment={"transport": "streamable-http"}, # type: ignore[arg-type] - ) + def test_streamable_http_transport_accepted(self): + """Test that streamable-http transport is accepted as a valid value.""" + config = MCPServerConfig( + source={"path": "server.py"}, + deployment={"transport": "streamable-http"}, # type: ignore[arg-type] + ) + assert config.deployment.transport == "streamable-http" def test_invalid_log_level_rejected(self): """Test that invalid log level values are rejected.""" diff --git a/tests/cli/test_mcp_server_config_schema.py b/tests/cli/test_mcp_server_config_schema.py index d4f739911..2be2c6938 100644 --- a/tests/cli/test_mcp_server_config_schema.py +++ b/tests/cli/test_mcp_server_config_schema.py @@ -1,6 +1,11 @@ """Test that the generated JSON schema has the correct structure.""" -from fastmcp.utilities.mcp_server_config.v1.mcp_server_config import generate_schema +import pytest + +from fastmcp.utilities.mcp_server_config.v1.mcp_server_config import ( + Deployment, + generate_schema, +) def test_schema_has_correct_id(): @@ -97,6 +102,7 @@ def test_schema_transport_enum(): assert "stdio" in valid_transports assert "http" in valid_transports assert "sse" in valid_transports + assert "streamable-http" in valid_transports break elif "properties" in deploy_schema: transport_schema = deploy_schema["properties"].get("transport", {}) @@ -107,6 +113,7 @@ def test_schema_transport_enum(): assert "stdio" in valid_transports assert "http" in valid_transports assert "sse" in valid_transports + assert "streamable-http" in valid_transports break @@ -147,3 +154,19 @@ def test_schema_log_level_enum(): assert "ERROR" in valid_levels assert "CRITICAL" in valid_levels break + + +@pytest.mark.parametrize( + "transport", + [ + "streamable-http", + "http", + "stdio", + "sse", + None, + ], +) +def test_transport_values_accepted(transport): + """Test that all valid transport values are accepted.""" + deployment = Deployment(transport=transport) + assert deployment.transport == transport