{"record":{"id":"49ec9161446b4b6e","repo":"tinyhumansai/openhuman","slug":"composio-v3-list-tool-schemas-err","errorCode":null,"errorMessage":"Composio v3 list_tool_schemas: {err}","messagePattern":"Composio v3 list_tool_schemas: (.+?)","errorType":"http","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/openhuman/integrations/composio/tools/direct.rs","lineNumber":354,"sourceCode":"        tags: Option<&[&str]>,\n    ) -> anyhow::Result<Vec<ComposioToolSchemaV3>> {\n        let url = format!(\"{}/tools\", self.base_v3);\n        let params = Self::build_list_tool_schemas_v3_query(toolkits, tags);\n        tracing::debug!(\n            toolkits = toolkits.len(),\n            tags = tags.map(<[&str]>::len).unwrap_or(0),\n            \"[composio-direct] list_tool_schemas_v3: GET v3 /tools query built\"\n        );\n        let req = self\n            .client()\n            .get(&url)\n            .header(\"x-api-key\", &self.api_key)\n            .query(&params);\n\n        let resp = req.send().await?;\n        if !resp.status().is_success() {\n            let err = response_error(resp).await;\n            anyhow::bail!(\"Composio v3 list_tool_schemas: {err}\");\n        }\n\n        let body: ComposioToolsResponse = resp\n            .json()\n            .await\n            .context(\"Failed to decode Composio v3 tools response\")?;\n        Ok(body\n            .items\n            .into_iter()\n            .map(ComposioToolSchemaV3::from_v3_tool)\n            .collect())\n    }\n\n    /// Execute a Composio action/tool with given parameters.\n    ///\n    /// Uses v3 endpoint first and falls back to v2 for compatibility.\n    pub async fn execute_action(\n        &self,","sourceCodeStart":336,"sourceCodeEnd":372,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/integrations/composio/tools/direct.rs#L336-L372","documentation":"Non-2xx from GET v3 /tools when used to build agent tool schemas (list_tool_schemas_v3). Same endpoint as the action listing but a different call path: the result feeds ComposioToolSchemaV3 generation, so a failure here means the agent's Composio tool catalogue cannot be built — tools silently missing from the agent surface if the caller swallows the error.","triggerScenarios":"401 invalid key; 400 from malformed toolkits/tags query params (tags are forwarded only when should_forward_tags passes); 429 rate limit; 5xx. Called during tool-registry refresh or connection setup.","commonSituations":"Key revoked between catalog refreshes; a toolkit slug or tag list with characters Composio rejects; heavy parallel schema pulls for many toolkits tripping 429.","solutions":["Read {err} (status + body) to classify: auth (401), request shape (400), rate limit (429), or transient (5xx)","Fix the API key if 401 — the same key failure will also hit connected_accounts polling","Check the toolkit slugs and tags being forwarded in the query params","Retry 429/5xx with backoff; cache the last good schema list so the agent keeps working during brief outages"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"match tool.list_tool_schemas(toolkits, tags).await {\n    Ok(schemas) => registry.publish(schemas),\n    Err(e) => {\n        // Schema refresh failing must not break the agent — keep the last good set\n        tracing::warn!(\"[composio] schema refresh failed, keeping cached tools: {e:#}\");\n        registry.keep_cached();\n    }\n}","preventionTips":["Cache the last good schema list so a listing failure degrades instead of removing Composio tools from the agent","Validate toolkit slugs and tags before the request (should_forward_tags already trims risky input)","Back off on 429 — schema pulls for many toolkits in parallel are the usual trigger"],"tags":["composio","api","http-error","v3","tool-schemas","agent-tools"],"backgroundTag":"upstream-api-error-status","analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}