{"record":{"id":"112d7801bad3bfe1","repo":"nanocoai/nanoclaw","slug":"unsupported-transport-sse","errorCode":null,"errorMessage":"unsupported transport \"sse\"","messagePattern":"unsupported transport \"sse\"","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/container-config.ts","lineNumber":134,"sourceCode":"\n// The Agent Plugins fixed cwd shapes: ./p, ${PLUGIN_ROOT}[/p], ${PLUGIN_DATA}[/p].\nconst CWD_FORM_RE = /^(?:\\.\\/|\\$\\{PLUGIN_ROOT\\}(?:\\/|$)|\\$\\{PLUGIN_DATA\\}(?:\\/|$))/;\n\n/**\n * Parse one CLI or approval payload into the persisted MCP config shape.\n * Duplicated in container/agent-runner/src/mcp-tools/self-mod.ts\n * (parseMcpServerInput) — no shared modules across the host/container\n * boundary; keep the two in sync.\n */\nexport function parseMcpServerConfig(input: Record<string, unknown>): McpServerConfig {\n  const command = typeof input.command === 'string' && input.command.trim() ? input.command : undefined;\n  const url = typeof input.url === 'string' && input.url.trim() ? input.url.trim() : undefined;\n\n  // A declared transport is honored; absence keeps the legacy CLI inference\n  // (url → http, command → stdio). \"streamable-http\" is the Agent Plugins\n  // spelling of the internal \"http\".\n  const type = input.type === 'streamable-http' ? 'http' : input.type;\n  if (type === 'sse') throw new Error('unsupported transport \"sse\"');\n  if (type !== undefined && type !== 'stdio' && type !== 'http') {\n    throw new Error('type must be \"stdio\", \"http\", or \"streamable-http\"');\n  }\n  if (type === 'stdio' && !command) throw new Error('type \"stdio\" requires command');\n  if (type === 'http' && !url) throw new Error('type \"http\" requires url');\n\n  const instructions = input.instructions;\n  if (instructions !== undefined && typeof instructions !== 'string') {\n    throw new Error('MCP instructions must be a string');\n  }\n\n  if (url !== undefined) {\n    if (command !== undefined) throw new Error('Provide exactly one of command or url');\n    if (input.args !== undefined || input.env !== undefined || input.cwd !== undefined) {\n      throw new Error('args, env, and cwd are only valid with command');\n    }\n    let parsed: URL;\n    try {","sourceCodeStart":116,"sourceCodeEnd":152,"githubUrl":"https://github.com/nanocoai/nanoclaw/blob/294ef2aee85218b23ad30eda9dfe10e590b54a8c/src/container-config.ts#L116-L152","documentation":"parseMcpServerConfig explicitly rejects the deprecated SSE transport: only stdio and http (with streamable-http accepted as an alias for http) are supported. SSE servers must be migrated to streamable-http.","triggerScenarios":"An MCP server entry with \"type\": \"sse\" in container config, via add-mcp-server or a stored config (legacy configs from when SSE was tolerated).","commonSituations":"Copying an MCP server definition from older Claude/other MCP client configs that used the SSE transport; upstream servers migrated to streamable-http.","solutions":["Change \"type\": \"sse\" to \"type\": \"streamable-http\" (usually same URL)","Verify the server actually supports streamable-http (most former SSE servers do)","Update the stored config via ncl groups config update or remove/re-add the MCP server"],"exampleFix":"// before\n{\"type\": \"sse\", \"url\": \"https://mcp.example.com/sse\"}\n// after\n{\"type\": \"streamable-http\", \"url\": \"https://mcp.example.com/mcp\"}","handlingStrategy":"fallback","validationCode":"if (entry.type === 'sse') entry = { ...entry, type: 'streamable-http' }; // migrate before submit","typeGuard":"function isSupportedTransport(t: string | undefined): boolean {\n  return t === undefined || t === 'stdio' || t === 'http' || t === 'streamable-http';\n}","tryCatchPattern":null,"preventionTips":["Check server docs for a streamable-http endpoint before migrating","Audit stored container configs after upgrading from versions that tolerated SSE"],"tags":["mcp","transport","deprecated","container-config"],"backgroundTag":"unsupported-transport","analyzedSha":"294ef2aee85218b23ad30eda9dfe10e590b54a8c","analyzedAt":"2026-08-28T13:59:10.357Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}