tinyhumansai/openhuman · error · anyhow::Error

No auth config found for toolkit '{app_name}'. Create one in

Error message

No auth config found for toolkit '{app_name}'. Create one in Composio first.

What it means

The v3 auth-config lookup succeeded (HTTP 200) but returned zero items for the toolkit: this workspace has no auth config for that app, so there is nothing to connect through. The code prefers an enabled config and falls back to the first item — but items is empty, so it bails with instructions to create one in Composio first.

Source

Thrown at src/openhuman/integrations/composio/tools/direct.rs:689

                ("toolkit_slug", app_name),
                ("show_disabled", "true"),
                ("limit", "25"),
            ])
            .send()
            .await?;

        if !resp.status().is_success() {
            let err = response_error(resp).await;
            anyhow::bail!("Composio v3 auth config lookup failed: {err}");
        }

        let body: ComposioAuthConfigsResponse = resp
            .json()
            .await
            .context("Failed to decode Composio v3 auth configs response")?;

        if body.items.is_empty() {
            anyhow::bail!(
                "No auth config found for toolkit '{app_name}'. Create one in Composio first."
            );
        }

        let preferred = body
            .items
            .iter()
            .find(|cfg| cfg.is_enabled())
            .or_else(|| body.items.first())
            .context("No usable auth config returned by Composio")?;

        Ok(preferred.id.clone())
    }
}

#[async_trait]
impl Tool for ComposioTool {
    fn name(&self) -> &str {

View on GitHub (pinned to 7491200858)

Solutions

  1. Create an auth config for the toolkit in the Composio dashboard (workspace settings → Auth / API keys), then retry connect
  2. Verify the API key belongs to the same workspace where the auth config was created
  3. Double-check the toolkit slug against Composio's current registry — a renamed toolkit yields the same empty result
  4. Alternatively, look up the auth config id in the dashboard and pass auth_config_id directly, skipping the lookup

Example fix

// before — app-only connect triggers the lookup that finds nothing
tool.get_connection_url(Some("jira"), None, &entity_id).await?;

// after — pass the auth config id from the Composio dashboard explicitly
tool.get_connection_url(None, Some("ac_01j8z..."), &entity_id).await?;
Defensive patterns

Strategy: try-catch

Try / catch

match tool.get_connection_url(Some(slug), None, &entity).await {
    Ok(url) => ui.open(url),
    Err(e) => {
        let msg = format!("{e:#}");
        if msg.contains("No auth config found") {
            ui.explain("Create an auth config for '{slug}' in the Composio dashboard, then retry");
        } else { ui.show_connect_error(&msg); }
    }
}

Prevention

When it happens

Trigger: get_connection_url(Some("<toolkit>"), None, entity) where the Composio workspace backing the API key has no auth config for that toolkit (show_disabled=true means disabled ones would still be listed — empty means genuinely none exist).

Common situations: First-time setup of a new toolkit where the Composio workspace admin has not created the auth config; API key pointing at a different workspace/org than the one configured; toolkit renamed upstream so the slug matches nothing.

Related errors


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