Install
openclaw skills install app-connectorsConnect your AI agent to 1000+ apps — discover tools, manage OAuth connections, execute actions, and provide a self-service connector dashboard.
openclaw skills install app-connectorsConnect your AI agent to Gmail, Slack, GitHub, Notion, Google Calendar, LinkedIn, HubSpot, Stripe, and 1000+ more apps via Composio OAuth.
On first use, check credentials:
# Check environment variables
[ -n "$COMPOSIO_API_KEY" ] && echo "✅ API key" || echo "⏳ Not set"
Required:
COMPOSIO_API_KEY — Project-scoped API key from ComposioIf not in env, check the framework's secrets provider (vault, secrets.json, .env). If missing, stop and report to the operator.
Base URL: https://backend.composio.dev/api
Auth header: x-api-key: $COMPOSIO_API_KEY
Use the v1 REST API to get all active connections for the current entity:
curl -s "https://backend.composio.dev/api/v1/connectedAccounts?user_uuid=default&showActiveOnly=true" \
-H "x-api-key: $COMPOSIO_API_KEY"
Returns { "items": [...] } — each item has appName, status, id.
Find the right tool for a task. Returns matching tools, schemas, connection status, and execution plan.
curl -s -X POST "https://backend.composio.dev/api/v3/tools/execute/COMPOSIO_SEARCH_TOOLS" \
-H "x-api-key: $COMPOSIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"arguments": {
"queries": [
{
"use_case": "send an email via gmail",
"known_fields": "recipient_name: John"
}
],
"session": { "generate_id": true }
}
}'
Key fields in response:
primary_tool_slugs — best matching toolstool_schemas — input schemas for each tooltoolkit_connection_statuses — whether there's an active connectionknown_pitfalls — common mistakes to avoidRules:
session.id from the first response in subsequent callsIf has_active_connection is false, or the user wants to connect a new app:
curl -s -X POST "https://backend.composio.dev/api/v3/tools/execute/COMPOSIO_MANAGE_CONNECTIONS" \
-H "x-api-key: $COMPOSIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"arguments": {
"toolkits": ["gmail"]
}
}'
Response statuses:
active — ready to use, no action neededinitiated — returns redirect_url → send to user to complete OAuthfailed — error (often: wrong toolkit slug)Common toolkit slugs: gmail, outlook, slack, github, notion, clickup, linkedin, googlecalendar, googledrive, googlesheets, jira, trello, hubspot, figma, discord, airtable, stripe, youtube, calendly, supabase, asana, dropbox, twitter
Note: slugs are lowercase, no underscores (e.g. googlecalendar not google_calendar).
Only after connection is active:
curl -s -X POST "https://backend.composio.dev/api/v3/tools/execute/COMPOSIO_MULTI_EXECUTE_TOOL" \
-H "x-api-key: $COMPOSIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"arguments": {
"tools": [
{
"tool_slug": "GMAIL_SEND_EMAIL",
"arguments": {
"to": "john@example.com",
"subject": "Hello",
"body": "Welcome!"
}
}
],
"sync_response_to_workbench": false
}
}'
Rules:
SEARCH_TOOLS returnedWhen SEARCH_TOOLS returns a schemaRef instead of full input_schema:
curl -s -X POST "https://backend.composio.dev/api/v3/tools/execute/COMPOSIO_GET_TOOL_SCHEMAS" \
-H "x-api-key: $COMPOSIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"arguments": {
"tool_slugs": ["GMAIL_SEND_EMAIL"]
}
}'
When the user types /apps:
/v1/connectedAccounts?user_uuid=default&showActiveOnly=true)🟢 prefix, human-readable name:
🟢 Gmail
🟢 LinkedIn
🟢 ClickUp
🟢 Notion
If none connected: "No apps connected yet."COMPOSIO_MANAGE_CONNECTIONS with the matching slug, get the redirect_url, and send it as a clickable link.Display name mapping (slug → display):
gmail → Gmail, outlook → Outlook, googlecalendar → Google Calendar, googledrive → Google Drive, googlesheets → Google Sheets, linkedin → LinkedIn, notion → Notion, clickup → ClickUp, slack → Slack, github → GitHub, jira → Jira, trello → Trello, hubspot → HubSpot, figma → Figma, discord → Discord, airtable → Airtable, stripe → Stripe, youtube → YouTube, calendly → Calendly, supabase → Supabase, asana → Asana, dropbox → Dropbox, twitter → Twitter/X, shopify → Shopify
For unknown slugs, capitalize the first letter.
| User says | What to do |
|---|---|
/apps | List connected apps → prompt to connect |
| "Connect Slack" | MANAGE_CONNECTIONS with ["slack"] → send OAuth link |
| "Send an email to X" | SEARCH_TOOLS → check connection → MULTI_EXECUTE_TOOL |
| "Disconnect Slack" | Use MANAGE_CONNECTIONS |