From d3aeeb87d7c58dc2c51cbf4ce7668404edb27146 Mon Sep 17 00:00:00 2001 From: Arjun <6592213+arkml@users.noreply.github.com> Date: Wed, 8 Jul 2026 00:33:25 +0530 Subject: [PATCH] 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 --- .../skills/composio-integration/skill.ts | 47 +++++++++++++++++-- .../core/src/application/lib/builtin-tools.ts | 2 +- apps/x/packages/shared/src/composio.ts | 47 +++++++++++++++++-- 3 files changed, 89 insertions(+), 7 deletions(-) diff --git a/apps/x/packages/core/src/application/assistant/skills/composio-integration/skill.ts b/apps/x/packages/core/src/application/assistant/skills/composio-integration/skill.ts index fd9a5d02..17c5ab6b 100644 --- a/apps/x/packages/core/src/application/assistant/skills/composio-integration/skill.ts +++ b/apps/x/packages/core/src/application/assistant/skills/composio-integration/skill.ts @@ -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 diff --git a/apps/x/packages/core/src/application/lib/builtin-tools.ts b/apps/x/packages/core/src/application/lib/builtin-tools.ts index f0425199..edd04270 100644 --- a/apps/x/packages/core/src/application/lib/builtin-tools.ts +++ b/apps/x/packages/core/src/application/lib/builtin-tools.ts @@ -1546,7 +1546,7 @@ export const BuiltinTools: z.infer = { '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 }) => { diff --git a/apps/x/packages/shared/src/composio.ts b/apps/x/packages/shared/src/composio.ts index 8a15e8d2..f8ac47be 100644 --- a/apps/x/packages/shared/src/composio.ts +++ b/apps/x/packages/shared/src/composio.ts @@ -32,7 +32,7 @@ export const ZListToolkitsResponse = z.object({ * Sorted by slug (ASC) for maintainability. */ -export type ToolkitCategory = 'communication' | 'productivity' | 'development' | 'crm' | 'social' | 'storage' | 'support'; +export type ToolkitCategory = 'communication' | 'productivity' | 'development' | 'crm' | 'social' | 'storage' | 'support' | 'design' | 'marketing' | 'finance'; export interface CuratedToolkit { slug: string; @@ -43,30 +43,71 @@ export interface CuratedToolkit { export const CURATED_TOOLKITS: CuratedToolkit[] = [ { slug: 'airtable', displayName: 'Airtable', category: 'productivity' }, { slug: 'asana', displayName: 'Asana', category: 'productivity' }, + { slug: 'attio', displayName: 'Attio', category: 'crm' }, + { slug: 'basecamp', displayName: 'Basecamp', category: 'productivity' }, + { slug: 'bitbucket', displayName: 'Bitbucket', category: 'development' }, + { slug: 'box', displayName: 'Box', category: 'storage' }, { slug: 'cal', displayName: 'Cal.com', category: 'productivity' }, { slug: 'calendly', displayName: 'Calendly', category: 'productivity' }, + { slug: 'canva', displayName: 'Canva', category: 'design' }, + { slug: 'clickup', displayName: 'ClickUp', category: 'productivity' }, + { slug: 'confluence', displayName: 'Confluence', category: 'productivity' }, + { slug: 'discord', displayName: 'Discord', category: 'communication' }, { slug: 'dropbox', displayName: 'Dropbox', category: 'storage' }, + { slug: 'eventbrite', displayName: 'Eventbrite', category: 'marketing' }, + { slug: 'excel', displayName: 'Microsoft Excel', category: 'productivity' }, + { slug: 'facebook', displayName: 'Facebook', category: 'social' }, + { slug: 'figma', displayName: 'Figma', category: 'design' }, { slug: 'github', displayName: 'GitHub', category: 'development' }, + { slug: 'gitlab', displayName: 'GitLab', category: 'development' }, { slug: 'gmail', displayName: 'Gmail', category: 'communication' }, + { slug: 'google_analytics', displayName: 'Google Analytics', category: 'marketing' }, + { slug: 'google_maps', displayName: 'Google Maps', category: 'productivity' }, + { slug: 'google_search_console', displayName: 'Google Search Console', category: 'marketing' }, + { slug: 'googleads', displayName: 'Google Ads', category: 'marketing' }, + { slug: 'googlebigquery', displayName: 'Google BigQuery', category: 'development' }, { slug: 'googlecalendar', displayName: 'Google Calendar', category: 'productivity' }, { slug: 'googledocs', displayName: 'Google Docs', category: 'productivity' }, { slug: 'googledrive', displayName: 'Google Drive', category: 'storage' }, + { slug: 'googlemeet', displayName: 'Google Meet', category: 'communication' }, + { slug: 'googlephotos', displayName: 'Google Photos', category: 'storage' }, { slug: 'googlesheets', displayName: 'Google Sheets', category: 'productivity' }, + { slug: 'googleslides', displayName: 'Google Slides', category: 'productivity' }, + { slug: 'googletasks', displayName: 'Google Tasks', category: 'productivity' }, { slug: 'hubspot', displayName: 'HubSpot', category: 'crm' }, + { slug: 'instagram', displayName: 'Instagram', category: 'social' }, { slug: 'intercom', displayName: 'Intercom', category: 'support' }, { slug: 'jira', displayName: 'Jira', category: 'development' }, { slug: 'linear', displayName: 'Linear', category: 'development' }, { slug: 'linkedin', displayName: 'LinkedIn', category: 'social' }, - { slug: 'microsoft_outlook', displayName: 'Microsoft Outlook', category: 'communication' }, + { slug: 'mailchimp', displayName: 'Mailchimp', category: 'marketing' }, { slug: 'microsoft_teams', displayName: 'Microsoft Teams', category: 'communication' }, + { slug: 'miro', displayName: 'Miro', category: 'productivity' }, + { slug: 'monday', displayName: 'monday.com', category: 'productivity' }, { slug: 'notion', displayName: 'Notion', category: 'productivity' }, - { slug: 'onedrive', displayName: 'OneDrive', category: 'storage' }, + { slug: 'one_drive', displayName: 'OneDrive', category: 'storage' }, + { slug: 'outlook', displayName: 'Microsoft Outlook', category: 'communication' }, + { slug: 'pagerduty', displayName: 'PagerDuty', category: 'development' }, + { slug: 'productboard', displayName: 'Productboard', category: 'productivity' }, + { slug: 'quickbooks', displayName: 'QuickBooks', category: 'finance' }, { slug: 'reddit', displayName: 'Reddit', category: 'social' }, + { slug: 'reddit_ads', displayName: 'Reddit Ads', category: 'marketing' }, { slug: 'salesforce', displayName: 'Salesforce', category: 'crm' }, + { slug: 'sentry', displayName: 'Sentry', category: 'development' }, + { slug: 'share_point', displayName: 'SharePoint', category: 'storage' }, { slug: 'slack', displayName: 'Slack', category: 'communication' }, + { slug: 'square', displayName: 'Square', category: 'finance' }, + { slug: 'stripe', displayName: 'Stripe', category: 'finance' }, + { slug: 'supabase', displayName: 'Supabase', category: 'development' }, + { slug: 'todoist', displayName: 'Todoist', category: 'productivity' }, { slug: 'trello', displayName: 'Trello', category: 'productivity' }, { slug: 'twitter', displayName: 'X', category: 'social' }, + { slug: 'typeform', displayName: 'Typeform', category: 'productivity' }, + { slug: 'whatsapp', displayName: 'WhatsApp', category: 'communication' }, + { slug: 'wrike', displayName: 'Wrike', category: 'productivity' }, + { slug: 'youtube', displayName: 'YouTube', category: 'social' }, { slug: 'zendesk', displayName: 'Zendesk', category: 'support' }, + { slug: 'zoom', displayName: 'Zoom', category: 'communication' }, ]; /** Slug → display-name lookup. */