{"record":{"id":"1eec34cf72de4100","repo":"FlowiseAI/Flowise","slug":"url-is-required-for-sse-transport","errorCode":null,"errorMessage":"URL is required for SSE transport","messagePattern":"URL is required for SSE transport","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/components/nodes/tools/MCP/core.ts","lineNumber":121,"sourceCode":"        )\n\n        let transport: StdioClientTransport | SSEClientTransport | StreamableHTTPClientTransport\n\n        if (this.transportType === 'stdio') {\n            // Compatible with overridden PATH configuration\n            const params = {\n                ...this.serverParams,\n                env: {\n                    ...(this.serverParams.env || {}),\n                    PATH: process.env.PATH\n                }\n            }\n\n            transport = new StdioClientTransport(params as StdioServerParameters)\n            await client.connect(transport)\n        } else {\n            if (this.serverParams.url === undefined) {\n                throw new Error('URL is required for SSE transport')\n            }\n\n            const baseUrl = new URL(this.serverParams.url)\n            await checkDenyList(this.serverParams.url)\n            const mergedHeaders = { ...this.serverParams?.headers, ...injectHeaders }\n            const headers = Object.keys(mergedHeaders).length > 0 ? mergedHeaders : undefined\n            try {\n                if (headers) {\n                    transport = new StreamableHTTPClientTransport(baseUrl, {\n                        requestInit: {\n                            headers\n                        }\n                    })\n                } else {\n                    transport = new StreamableHTTPClientTransport(baseUrl)\n                }\n                await client.connect(transport)\n            } catch (error) {","sourceCodeStart":103,"sourceCodeEnd":139,"githubUrl":"https://github.com/FlowiseAI/Flowise/blob/abe4a8601a058047b350c260676826e21dd14101/packages/components/nodes/tools/MCP/core.ts#L103-L139","documentation":"Thrown by MCPToolkit.createClient when transportType is not 'stdio' (i.e. SSE or streamable-HTTP) but serverParams.url is undefined. The code only constructs a URL and transport when url is present; for non-stdio transports a missing URL is fatal because there is no endpoint to dial.","triggerScenarios":"new MCPToolkit(serverParams, 'sse') (or 'http') called with a serverParams object that has no url key, or url set to undefined. Happens when a caller builds serverParams from optional inputs that were left empty.","commonSituations":"Custom MCP node configured for SSE/HTTP transport with a blank URL field; migration from stdio to SSE where the url field was never added; URL pulled from nodeData.inputs that the user left empty.","solutions":["Ensure serverParams.url is a fully-qualified URL string before constructing an SSE/HTTP MCPToolkit.","If you intended a local server, construct the toolkit with transportType 'stdio' and a command instead of a url.","Validate the URL at the node input layer (required field) so the error surfaces in the UI before toolkit construction."],"exampleFix":"// before\nconst toolkit = new MCPToolkit({ headers: {} }, 'sse') // no url\n\n// after\nconst toolkit = new MCPToolkit({ url: 'http://teradata-mcp-server:8001/mcp', headers: {} }, 'sse')","handlingStrategy":"validation","validationCode":"if (transportType !== 'stdio' && (typeof serverParams?.url !== 'string' || serverParams.url.length === 0)) {\n  throw new Error('A non-stdio MCPToolkit requires serverParams.url')\n}","typeGuard":"const hasTransportUrl = (p: any, t: string): boolean => t === 'stdio' || typeof p?.url === 'string' && p.url.length > 0","tryCatchPattern":"try {\n  await toolkit.initialize()\n} catch (e) {\n  if (e.message === 'URL is required for SSE transport') {\n    // populate serverParams.url or switch transportType to 'stdio'\n  }\n  throw e\n}","preventionTips":["Mark the URL field required in the UI for SSE/HTTP transports.","Construct MCPToolkit via a factory that validates transport/url pairing.","Unit-test toolkit construction with a matrix of transport types and missing url."],"tags":["mcp","transport","sse","validation"],"backgroundTag":null,"analyzedSha":"abe4a8601a058047b350c260676826e21dd14101","analyzedAt":"2026-08-12T16:04:40.823Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}