feat(x): expand curated Composio toolkits and fix broken Microsoft slugs

Expand the curated toolkit whitelist from 26 to 67 entries, adding
well-known services that support Composio-managed OAuth2 (the only
auth scheme the app's connect flow supports): Zoom, Discord, ClickUp,
monday.com, Confluence, GitLab, Bitbucket, Supabase, Sentry, PagerDuty,
Stripe, Square, QuickBooks, Mailchimp, Google Ads/Analytics/Search
Console, Figma, Canva, YouTube, Instagram, Facebook, Box, SharePoint,
and more. Adds three new categories: design, marketing, finance.

Also fix two entries that were never connectable: 'microsoft_outlook'
and 'onedrive' do not exist in Composio's catalog (the API returns 404,
so initiateConnection always failed). The real slugs are 'outlook' and
'one_drive'.

Excluded per curation policy: Composio's own utility toolkits
(composio_search, codeinterpreter, browser_tool), no-auth toolkits
(Hacker News, OpenWeatherMap), API-key-only toolkits the app cannot
connect (Firecrawl, Tavily, Exa, PostHog, etc.), and niche/low-quality
entries.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Arjun 2026-07-08 00:33:25 +05:30
parent 3261d64dd4
commit d3aeeb87d7
3 changed files with 89 additions and 7 deletions

View file

@ -22,30 +22,71 @@ export const skill = String.raw`
| Google Calendar | \`googlecalendar\` |
| Google Sheets | \`googlesheets\` |
| Google Docs | \`googledocs\` |
| Google Slides | \`googleslides\` |
| Google Drive | \`googledrive\` |
| Google Tasks | \`googletasks\` |
| Google Meet | \`googlemeet\` |
| Google Photos | \`googlephotos\` |
| Google Maps | \`google_maps\` |
| Google Analytics | \`google_analytics\` |
| Google Search Console | \`google_search_console\` |
| Google Ads | \`googleads\` |
| Google BigQuery | \`googlebigquery\` |
| Slack | \`slack\` |
| Discord | \`discord\` |
| GitHub | \`github\` |
| GitLab | \`gitlab\` |
| Bitbucket | \`bitbucket\` |
| Notion | \`notion\` |
| Linear | \`linear\` |
| Jira | \`jira\` |
| Confluence | \`confluence\` |
| Asana | \`asana\` |
| Trello | \`trello\` |
| ClickUp | \`clickup\` |
| monday.com | \`monday\` |
| Wrike | \`wrike\` |
| Basecamp | \`basecamp\` |
| Todoist | \`todoist\` |
| Productboard | \`productboard\` |
| Miro | \`miro\` |
| Figma | \`figma\` |
| Canva | \`canva\` |
| HubSpot | \`hubspot\` |
| Salesforce | \`salesforce\` |
| Attio | \`attio\` |
| LinkedIn | \`linkedin\` |
| X (Twitter) | \`twitter\` |
| Reddit | \`reddit\` |
| Reddit Ads | \`reddit_ads\` |
| Facebook | \`facebook\` |
| Instagram | \`instagram\` |
| YouTube | \`youtube\` |
| WhatsApp | \`whatsapp\` |
| Dropbox | \`dropbox\` |
| OneDrive | \`onedrive\` |
| Microsoft Outlook | \`microsoft_outlook\` |
| Box | \`box\` |
| OneDrive | \`one_drive\` |
| SharePoint | \`share_point\` |
| Microsoft Outlook | \`outlook\` |
| Microsoft Teams | \`microsoft_teams\` |
| Microsoft Excel | \`excel\` |
| Calendly | \`calendly\` |
| Cal.com | \`cal\` |
| Zoom | \`zoom\` |
| Intercom | \`intercom\` |
| Zendesk | \`zendesk\` |
| Airtable | \`airtable\` |
| Mailchimp | \`mailchimp\` |
| Typeform | \`typeform\` |
| Eventbrite | \`eventbrite\` |
| Stripe | \`stripe\` |
| Square | \`square\` |
| QuickBooks | \`quickbooks\` |
| Supabase | \`supabase\` |
| Sentry | \`sentry\` |
| PagerDuty | \`pagerduty\` |
**IMPORTANT:** Always use these exact slugs. Do NOT guess e.g., Google Sheets is \`googlesheets\` (no underscore), not \`google_sheets\`.
**IMPORTANT:** Always use these exact slugs. Do NOT guess e.g., Google Sheets is \`googlesheets\` (no underscore), not \`google_sheets\`, while OneDrive IS \`one_drive\` (with underscore) and Microsoft Outlook is just \`outlook\`.
## Critical: Check First, Connect Second

View file

@ -1546,7 +1546,7 @@ export const BuiltinTools: z.infer<typeof BuiltinToolsSchema> = {
'composio-list-toolkits': {
description: 'List available Composio integrations (Gmail, Slack, GitHub, etc.) and their connection status. Use this to show the user what services they can connect to.',
inputSchema: z.object({
category: z.enum(['all', 'communication', 'productivity', 'development', 'crm', 'social', 'storage', 'support']).optional()
category: z.enum(['all', 'communication', 'productivity', 'development', 'crm', 'social', 'storage', 'support', 'design', 'marketing', 'finance']).optional()
.describe('Filter by category. Defaults to "all".'),
}),
execute: async ({ category }: { category?: string }) => {