{"record":{"id":"c8ce7ea92a43c259","repo":"paperclipai/paperclip","slug":"local-stdio-unavailable-in-public-mode","errorCode":"local_stdio_unavailable_in_public_mode","errorMessage":"Local stdio MCP runtime is unavailable in authenticated public deployments without a trusted runtime host","messagePattern":"Local stdio MCP runtime is unavailable in authenticated public deployments without a trusted runtime host","errorType":"http","errorClass":"ToolRuntimeSupervisorError","httpStatus":403,"severity":"error","filePath":"server/src/services/tool-runtime-supervisor.ts","lineNumber":156,"sourceCode":"    ?? process.env.PAPERCLIP_TOOL_RUNTIME_TRUSTED_HOST\n    ?? null;\n  const hostId = options.hostId ?? trustedLocalStdioRuntimeHost ?? process.env.HOSTNAME ?? \"local-host\";\n  const idleTtlMs = numberOption(options.idleTtlMs, DEFAULT_IDLE_TTL_MS, 1);\n  const stuckSlotMs = numberOption(options.stuckSlotMs, DEFAULT_STUCK_SLOT_MS, 1);\n  const restartBackoffMs = numberOption(options.restartBackoffMs, DEFAULT_RESTART_BACKOFF_MS, 0);\n  const restartBackoffMaxMs = numberOption(options.restartBackoffMaxMs, DEFAULT_RESTART_BACKOFF_MAX_MS, 0);\n  const restartStormWindowMs = numberOption(options.restartStormWindowMs, DEFAULT_RESTART_STORM_WINDOW_MS, 1);\n  const restartStormLimit = numberOption(options.restartStormLimit, DEFAULT_RESTART_STORM_LIMIT, 1);\n  const maxCompanySlots = numberOption(options.maxCompanySlots, DEFAULT_MAX_COMPANY_SLOTS, 1);\n  const maxHostSlots = numberOption(options.maxHostSlots, DEFAULT_MAX_HOST_SLOTS, 1);\n  const maxLogEntries = numberOption(options.maxLogEntries, DEFAULT_MAX_LOG_ENTRIES, 1);\n  const maxLogBytes = numberOption(options.maxLogBytes, DEFAULT_MAX_LOG_BYTES, 1);\n  const memoryLimitMb = options.memoryLimitMb ?? null;\n  const now = options.now ?? (() => new Date());\n\n  function assertLocalStdioAvailable() {\n    if (deploymentMode === \"authenticated\" && deploymentExposure === \"public\" && !trustedLocalStdioRuntimeHost) {\n      throw new ToolRuntimeSupervisorError(\n        403,\n        \"Local stdio MCP runtime is unavailable in authenticated public deployments without a trusted runtime host\",\n        \"local_stdio_unavailable_in_public_mode\",\n        { deploymentMode, deploymentExposure },\n      );\n    }\n  }\n\n  async function writeAudit(input: {\n    companyId: string;\n    slotId?: string | null;\n    runId?: string | null;\n    issueId?: string | null;\n    agentId?: string | null;\n    action: string;\n    outcome: \"success\" | \"failure\";\n    reasonCode?: string | null;\n    details?: Record<string, unknown>;","sourceCodeStart":138,"sourceCodeEnd":174,"githubUrl":"https://github.com/paperclipai/paperclip/blob/120ae5428fa29bee300bcf806491cd4d965fbb7c/server/src/services/tool-runtime-supervisor.ts#L138-L174","documentation":"assertLocalStdioAvailable refuses to spawn local stdio MCP processes when the deployment is authenticated/public and no trusted runtime host is configured (PAPERCLIP_TOOL_RUNTIME_TRUSTED_HOST / options.hostId absent). Spawning arbitrary local processes on a shared public host would be unsafe, so the capability is hard-disabled; configure a trusted host to enable it.","triggerScenarios":"Thrown at server/src/services/tool-runtime-supervisor.ts:156 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Local stdio MCP runtimes are disabled in authenticated public deployments. Use remote MCP connections or configure a trusted runtime host."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"120ae5428fa29bee300bcf806491cd4d965fbb7c","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}