tinyhumansai/openhuman · error

list_tools failed for toolkit `{toolkit_slug}`: {e}

Error message

list_tools failed for toolkit `{toolkit_slug}`: {e}

What it means

fetch_toolkit_actions failed when ComposioClient::list_tools errored for the given toolkit slug after trimming and tag-forwarding decisions were made. The toolkit slug is included so the failing catalog query is identifiable.

Source

Thrown at src/openhuman/integrations/composio/connected_integrations.rs:1035

pub async fn fetch_toolkit_actions(
    client: &ComposioClient,
    toolkit: &str,
    tags: Option<&[String]>,
) -> anyhow::Result<Vec<ConnectedIntegrationTool>> {
    let toolkit_slug = toolkit.trim();
    if toolkit_slug.is_empty() {
        anyhow::bail!("fetch_toolkit_actions: toolkit must not be empty");
    }
    let effective_tags = if should_forward_tags(Some(&[toolkit_slug.to_string()])) {
        tags
    } else {
        None
    };
    tracing::debug!(toolkit = %toolkit_slug, ?effective_tags, "[composio] fetch_toolkit_actions");
    let resp = client
        .list_tools(Some(&[toolkit_slug.to_string()]), effective_tags)
        .await
        .map_err(|e| anyhow::anyhow!("list_tools failed for toolkit `{toolkit_slug}`: {e}"))?;
    let action_prefix = format!("{}_", toolkit_slug.to_uppercase());
    // Apply curated whitelist + user scope so spawn-time tool
    // discovery agrees with the bulk path and the meta-tool layer.
    let pref = super::providers::load_user_scope_or_default(toolkit_slug).await;
    let actions: Vec<ConnectedIntegrationTool> = resp
        .tools
        .into_iter()
        .filter(|t| t.function.name.starts_with(&action_prefix))
        .filter(|t| super::providers::is_action_visible_with_pref(&t.function.name, &pref))
        .map(|t| ConnectedIntegrationTool {
            name: t.function.name,
            description: t.function.description.unwrap_or_default(),
            parameters: t.function.parameters,
        })
        .collect();
    tracing::debug!(
        toolkit = %toolkit_slug,
        action_count = actions.len(),

View on GitHub (pinned to 7491200858)

Solutions

  1. Retry — Composio catalog endpoints intermittently fail
  2. Verify the toolkit slug is valid and the Composio credential/session is still good
  3. Check the underlying error {e} for auth vs network vs not-found detail
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at src/openhuman/integrations/composio/connected_integrations.rs:1035 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/2f5be2e49f69ff51. Report an issue: GitHub.