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
- 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.
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
- 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.
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
- Missing Browserless API Token
- MCP Server Config is required
- Security validation failed: ${error.message}
- MCP Server is required
- Workspace context is required to load MCP server
AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12).
Data as JSON: /api/errors/1eec34cf72de4100.
Report an issue: GitHub.