{"record":{"id":"44820f6295434a90","repo":"different-ai/openwork","slug":"unsupported-transport","errorCode":"unsupported_transport","errorMessage":"MCP Apps currently require a configured remote HTTP MCP server.","messagePattern":"MCP Apps currently require a configured remote HTTP MCP server\\.","errorType":"error_code","errorClass":"McpAppHostError","httpStatus":null,"severity":"error","filePath":"apps/server/src/mcp-app-host.ts","lineNumber":171,"sourceCode":"  }\n}\n\nfunction clientOptions() {\n  return {\n    capabilities: {\n      extensions: {\n        [MCP_APP_EXTENSION]: { mimeTypes: [MCP_APP_MIME_TYPE] },\n      },\n    },\n  };\n}\n\nasync function withRemoteClient<T>(\n  config: Record<string, unknown>,\n  run: (client: Client) => Promise<T>,\n): Promise<T> {\n  const url = remoteUrl(config);\n  if (!url) throw new McpAppHostError(\"unsupported_transport\", \"MCP Apps currently require a configured remote HTTP MCP server.\");\n  try {\n    await assertLocalManagedMcpUrl(url.toString());\n  } catch (error) {\n    if (error instanceof LocalManagedMcpPrivateUrlError) {\n      throw new McpAppHostError(\"unsafe_server_url\", error.message);\n    }\n    throw error;\n  }\n  const guardedFetch = createLocalManagedMcpGuardedFetch();\n  const requestInit = {\n    headers: stringHeaders(config.headers),\n  };\n  const attempts = [\n    () => new StreamableHTTPClientTransport(url, { requestInit, fetch: guardedFetch }),\n    () => new SSEClientTransport(url, { requestInit, fetch: guardedFetch }),\n  ];\n  let lastError: unknown;\n  for (const createTransport of attempts) {","sourceCodeStart":153,"sourceCodeEnd":189,"githubUrl":"https://github.com/different-ai/openwork/blob/2b7df46e8ae1517d64c896c7793d2d52ec845669/apps/server/src/mcp-app-host.ts#L153-L189","documentation":"withRemoteClient resolves the configured remote MCP URL for the MCP App host and throws unsupported_transport when none is configured. OpenWork's MCP Apps slice only supports apps served by a configured remote HTTP MCP server; stdio/local-only transports are not supported for Apps.","triggerScenarios":"Listing apps, matching, resolving a connect resource, or calling an app tool when the MCP connection config has no remote HTTP URL (missing url field, stdio command config, or empty remoteUrl).","commonSituations":"User added a local stdio MCP server and expects MCP Apps to work; connection configured via command args instead of HTTP endpoint; url field typo'd or empty in the server config.","solutions":["Configure the MCP connection with a remote HTTP server URL (streamable HTTP endpoint).","Replace the stdio/local server with a hosted HTTP MCP endpoint that serves the app resources.","Verify the url key exists in the connection's config JSON and is a valid absolute URL.","If the app must run locally, host it behind a local HTTP MCP server exposed at a loopback URL the config points to."],"exampleFix":"// before\n'{ \"mcpServers\": { \"my-app\": { \"command\": \"node\", \"args\": [\"server.js\"] } } }'\n// after\n'{ \"mcpServers\": { \"my-app\": { \"url\": \"https://mcp.example.com/mcp\" } } }'","handlingStrategy":"validation","validationCode":"const cfg = mcpServerConfig(name)\nif (typeof (cfg as { url?: unknown }).url !== 'string' || !/^https?:\\/\\//.test(cfg.url)) {\n  throw new Error(`MCP server '${name}' must have a remote HTTP url to use MCP Apps`)\n}","typeGuard":"function hasRemoteHttpUrl(config: Record<string, unknown>): config is { url: string } {\n  const url = config.url\n  return typeof url === 'string' && URL.canParse(url)\n}","tryCatchPattern":"try {\n  const apps = await host.apps(connection)\n} catch (e) {\n  if (e instanceof McpAppHostError && e.code === 'unsupported_transport') {\n    showSetupHint('configure a remote HTTP MCP server to use Apps')\n  } else throw e\n}","preventionTips":["Configure MCP servers via url (HTTP) when MCP Apps are needed","Avoid stdio/command configs for app-serving connections","Validate connection config contains a parseable absolute URL before connecting","Document transport requirements for app developers"],"tags":["mcp","mcp-apps","transport","configuration"],"backgroundTag":"unsupported-mcp-transport","analyzedSha":"2b7df46e8ae1517d64c896c7793d2d52ec845669","analyzedAt":"2026-09-01T07:59:23.713Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}