FlowiseAI/Flowise · error · Error

URL is required for SSE transport

Error message

URL is required for SSE transport

What it means

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.

Source

Thrown at packages/components/nodes/tools/MCP/core.ts:121

        )

        let transport: StdioClientTransport | SSEClientTransport | StreamableHTTPClientTransport

        if (this.transportType === 'stdio') {
            // Compatible with overridden PATH configuration
            const params = {
                ...this.serverParams,
                env: {
                    ...(this.serverParams.env || {}),
                    PATH: process.env.PATH
                }
            }

            transport = new StdioClientTransport(params as StdioServerParameters)
            await client.connect(transport)
        } else {
            if (this.serverParams.url === undefined) {
                throw new Error('URL is required for SSE transport')
            }

            const baseUrl = new URL(this.serverParams.url)
            await checkDenyList(this.serverParams.url)
            const mergedHeaders = { ...this.serverParams?.headers, ...injectHeaders }
            const headers = Object.keys(mergedHeaders).length > 0 ? mergedHeaders : undefined
            try {
                if (headers) {
                    transport = new StreamableHTTPClientTransport(baseUrl, {
                        requestInit: {
                            headers
                        }
                    })
                } else {
                    transport = new StreamableHTTPClientTransport(baseUrl)
                }
                await client.connect(transport)
            } catch (error) {

View on GitHub (pinned to abe4a8601a)

Solutions

  1. Ensure serverParams.url is a fully-qualified URL string before constructing an SSE/HTTP MCPToolkit.
  2. If you intended a local server, construct the toolkit with transportType 'stdio' and a command instead of a url.
  3. Validate the URL at the node input layer (required field) so the error surfaces in the UI before toolkit construction.

Example fix

// before
const toolkit = new MCPToolkit({ headers: {} }, 'sse') // no url

// after
const toolkit = new MCPToolkit({ url: 'http://teradata-mcp-server:8001/mcp', headers: {} }, 'sse')
Defensive patterns

Strategy: validation

Validate before calling

if (transportType !== 'stdio' && (typeof serverParams?.url !== 'string' || serverParams.url.length === 0)) {
  throw new Error('A non-stdio MCPToolkit requires serverParams.url')
}

Type guard

const hasTransportUrl = (p: any, t: string): boolean => t === 'stdio' || typeof p?.url === 'string' && p.url.length > 0

Try / catch

try {
  await toolkit.initialize()
} catch (e) {
  if (e.message === 'URL is required for SSE transport') {
    // populate serverParams.url or switch transportType to 'stdio'
  }
  throw e
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12). Data as JSON: /api/errors/1eec34cf72de4100. Report an issue: GitHub.