{"record":{"id":"494197d087157ace","repo":"openai/codex","slug":"originating-mcp-tool-requires-an-explicit-account","errorCode":null,"errorMessage":"originating MCP tool requires an explicit account link","messagePattern":"originating MCP tool requires an explicit account link","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"codex-rs/codex-mcp/src/resource_origin.rs","lineNumber":282,"sourceCode":"        if tool_info.connector_id.as_deref() != Some(self.connector_id.as_str()) {\n            anyhow::bail!(\"originating MCP tool connector does not match its app context\");\n        }\n        let tool_meta = tool_info.tool.meta.as_ref().map(|meta| &meta.0);\n        let current_link_id = tool_meta\n            .and_then(|meta| meta.get(\"link_id\"))\n            .and_then(serde_json::Value::as_str)\n            .filter(|value| !value.trim().is_empty());\n        if current_link_id != self.link_id.as_deref() {\n            anyhow::bail!(\"originating MCP tool link does not match its app context\");\n        }\n        if self.link_id.is_none()\n            && tool_meta\n                .and_then(|meta| meta.get(\"_codex_apps\"))\n                .and_then(|meta| meta.get(\"requires_explicit_link_id\"))\n                .and_then(serde_json::Value::as_bool)\n                == Some(true)\n        {\n            anyhow::bail!(\"originating MCP tool requires an explicit account link\");\n        }\n\n        let annotations = tool_info.tool.annotations.as_ref();\n        if !AppToolPolicyEvaluator::new(&binding.config().config_layer_stack)\n            .policy(AppToolPolicyInput {\n                connector_id: Some(&self.connector_id),\n                tool_name: tool_info.tool.name.as_ref(),\n                tool_title: tool_info.tool.title.as_deref(),\n                destructive_hint: annotations.and_then(|value| value.destructive_hint),\n                open_world_hint: annotations.and_then(|value| value.open_world_hint),\n            })\n            .enabled\n        {\n            anyhow::bail!(\"originating MCP tool is disabled by app configuration\");\n        }\n\n        let meta = serde_json::from_value(serde_json::json!({\n            \"threadId\": thread_id,","sourceCodeStart":264,"sourceCodeEnd":300,"githubUrl":"https://github.com/openai/codex/blob/339751715c64496cb86246bfb3935f40e309dd3d/codex-rs/codex-mcp/src/resource_origin.rs#L264-L300","documentation":"Error \"originating MCP tool requires an explicit account link\" thrown in openai/codex.","triggerScenarios":"Thrown at codex-rs/codex-mcp/src/resource_origin.rs:282 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide an explicit account link when invoking the originating MCP tool."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"339751715c64496cb86246bfb3935f40e309dd3d","analyzedAt":"2026-08-25T05:35:09.876Z","schemaVersion":2},"datasetVersion":"2026-08-25T06:17:31.827Z"}