{"record":{"id":"ef30a661edbc6499","repo":"PrefectHQ/fastmcp","slug":"unknown-transport-transport","errorCode":null,"errorMessage":"Unknown transport: {transport}","messagePattern":"Unknown transport: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"fastmcp_slim/fastmcp/server/mixins/transport.py","lineNumber":92,"sourceCode":"    async def run_async(\n        self: FastMCP,\n        transport: Transport | None = None,\n        show_banner: bool | None = None,\n        **transport_kwargs: Any,\n    ) -> None:\n        \"\"\"Run the FastMCP server asynchronously.\n\n        Args:\n            transport: Transport protocol to use (\"stdio\", \"http\", \"sse\", or \"streamable-http\")\n            show_banner: Whether to display the server banner. If None, uses the\n                FASTMCP_SHOW_SERVER_BANNER setting (default: True).\n        \"\"\"\n        if show_banner is None:\n            show_banner = fastmcp.settings.show_server_banner\n        if transport is None:\n            transport = fastmcp.settings.transport\n        if transport not in {\"stdio\", \"http\", \"sse\", \"streamable-http\"}:\n            raise ValueError(f\"Unknown transport: {transport}\")\n\n        if transport == \"stdio\":\n            await self.run_stdio_async(\n                show_banner=show_banner,\n                **transport_kwargs,\n            )\n        elif transport in {\"http\", \"sse\", \"streamable-http\"}:\n            await self.run_http_async(\n                transport=transport,\n                show_banner=show_banner,\n                **transport_kwargs,\n            )\n        else:\n            raise ValueError(f\"Unknown transport: {transport}\")\n\n    def run(\n        self: FastMCP,\n        transport: Transport | None = None,","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/PrefectHQ/fastmcp/blob/1f021142978e0861cd910c8df4e8074bc7cf3978/fastmcp_slim/fastmcp/server/mixins/transport.py#L74-L110","documentation":"FastMCP.run_async() validates the transport name against the fixed set {stdio, http, sse, streamable-http} before dispatching. Any other value raises ValueError('Unknown transport: ...').","triggerScenarios":"Calling server.run_async(transport='websocket') or passing an invalid string, or having fastmcp.settings.transport (env FASTMCP_TRANSPORT) set to an unrecognized value with transport=None.","commonSituations":"Typo like 'streamable_http' or 'https'; environment variable FASTMCP_TRANSPORT set to a legacy/unsupported name; copying transport names from other frameworks.","solutions":["Pass one of 'stdio', 'http', 'sse', 'streamable-http' as transport","Fix the FASTMCP_TRANSPORT environment variable or the settings file if transport defaults from settings","Use 'http' for the modern streamable HTTP transport"],"exampleFix":"// before\nserver.run(transport='streamable_http')\n\n// after\nserver.run(transport='streamable-http')","handlingStrategy":"validation","validationCode":"VALID = {'stdio', 'http', 'sse', 'streamable-http'}\ntransport = transport or fastmcp.settings.transport\nif transport not in VALID:\n    raise ValueError(f'Unsupported transport {transport!r}; choose from {sorted(VALID)}')","typeGuard":null,"tryCatchPattern":"try:\n    await server.run_async(transport=transport)\nexcept ValueError as e:\n    if 'Unknown transport' in str(e):\n        logger.error(f'Bad transport config: {e}; falling back to stdio')\n        await server.run_async(transport='stdio')\n    else:\n        raise","preventionTips":["Never rely on env FASTMCP_TRANSPORT without validating it","Keep transport names in a Literal/enum in your deployment code","Match hyphenated names exactly: 'streamable-http'"],"tags":["transport","configuration","valueerror"],"backgroundTag":"invalid-transport-name","analyzedSha":"1f021142978e0861cd910c8df4e8074bc7cf3978","analyzedAt":"2026-08-29T14:31:16.082Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}