← back to Ventura Claw
app/lib/mcp/all-connectors.ts
94 lines
// VenturaClaw — All 56 connectors with Zapier-style triggers + actions
import { register, type Connector } from "./framework";
const sensitive = (id: string) => /\b(send|publish|create|update|delete|refund|cancel|adjust|purge|deploy|move|share|ship|assign|tag|reply|upload|invite|upsert|post|trigger|deactivate|fulfill|activate|capture)\b/.test(id);
interface Spec {
id: string; name: string; category: string; docs: string;
auth: "oauth2" | "api_key" | "hmac" | "basic" | "smtp" | "none";
envKeys: string[]; triggers: string[]; actions: string[];
}
const SPECS: Spec[] = [
{ id:"shopify", name:"Shopify", category:"commerce", docs:"https://shopify.dev/docs/api", auth:"oauth2", envKeys:["SHOPIFY_API_KEY","SHOPIFY_API_SECRET","SHOPIFY_ACCESS_TOKEN"], triggers:["order.created","order.paid","product.updated","refund.created","customer.created"], actions:["product.create","product.update","product.delete","order.fulfill","inventory.adjust","collection.create","customer.upsert","discount.create"] },
{ id:"etsy", name:"Etsy", category:"commerce", docs:"https://developers.etsy.com/documentation", auth:"oauth2", envKeys:["ETSY_KEYSTRING","ETSY_SHARED_SECRET","ETSY_ACCESS_TOKEN"], triggers:["listing.created","order.received"], actions:["listing.create","listing.update","listing.deactivate","order.ship"] },
{ id:"woocommerce", name:"WooCommerce", category:"commerce", docs:"https://woocommerce.github.io/woocommerce-rest-api-docs/", auth:"api_key", envKeys:["WC_URL","WC_CONSUMER_KEY","WC_CONSUMER_SECRET"], triggers:["order.created","product.updated"], actions:["product.create","product.update","order.refund"] },
{ id:"stripe", name:"Stripe", category:"payments", docs:"https://stripe.com/docs/api", auth:"api_key", envKeys:["STRIPE_SECRET_KEY","STRIPE_WEBHOOK_SECRET"], triggers:["charge.succeeded","charge.refunded","subscription.created","invoice.paid"], actions:["charge.create","refund.create","customer.create","subscription.cancel","payment_link.create"] },
{ id:"paypal", name:"PayPal", category:"payments", docs:"https://developer.paypal.com/api/rest/", auth:"oauth2", envKeys:["PAYPAL_CLIENT_ID","PAYPAL_CLIENT_SECRET"], triggers:["order.completed","refund.completed"], actions:["order.create","order.capture","refund.create","payout.create"] },
{ id:"shopify_payments", name:"Shopify Payments", category:"payments", docs:"https://shopify.dev/docs/api/admin-rest/2024-10/resources/shopifypayments", auth:"oauth2", envKeys:["SHOPIFY_ACCESS_TOKEN"], triggers:["payout.scheduled"], actions:["payout.list"] },
{ id:"square", name:"Square", category:"payments", docs:"https://developer.squareup.com/reference/square", auth:"oauth2", envKeys:["SQUARE_ACCESS_TOKEN"], triggers:["payment.created"], actions:["payment.create","refund.create","catalog.upsert"] },
{ id:"gmail", name:"Gmail", category:"email_office", docs:"https://developers.google.com/gmail/api", auth:"oauth2", envKeys:["GOOGLE_CLIENT_ID","GOOGLE_CLIENT_SECRET","GOOGLE_REFRESH_TOKEN"], triggers:["message.received","thread.new"], actions:["message.send","message.search","draft.create","label.apply"] },
{ id:"google_sheets", name:"Google Sheets", category:"email_office", docs:"https://developers.google.com/sheets/api", auth:"oauth2", envKeys:["GOOGLE_CLIENT_ID","GOOGLE_CLIENT_SECRET","GOOGLE_REFRESH_TOKEN"], triggers:["row.added"], actions:["row.append","row.update","sheet.create","range.read"] },
{ id:"google_drive", name:"Google Drive", category:"email_office", docs:"https://developers.google.com/drive/api", auth:"oauth2", envKeys:["GOOGLE_CLIENT_ID","GOOGLE_CLIENT_SECRET","GOOGLE_REFRESH_TOKEN"], triggers:["file.created"], actions:["file.upload","file.move","file.share"] },
{ id:"outlook", name:"Outlook", category:"email_office", docs:"https://learn.microsoft.com/en-us/graph/api/overview", auth:"oauth2", envKeys:["MS_CLIENT_ID","MS_CLIENT_SECRET","MS_REFRESH_TOKEN"], triggers:["message.received","event.created"], actions:["message.send","calendar.create","event.create"] },
{ id:"purelymail", name:"Purelymail", category:"email_office", docs:"https://purelymail.com/docs/api", auth:"api_key", envKeys:["PURELYMAIL_API_TOKEN"], triggers:[], actions:["smtp.send","domain.add","mailbox.create"] },
{ id:"slack", name:"Slack", category:"communication", docs:"https://api.slack.com/", auth:"oauth2", envKeys:["SLACK_BOT_TOKEN","SLACK_SIGNING_SECRET"], triggers:["message.posted","channel.created"], actions:["chat.postMessage","channel.create","reaction.add","user.lookup"] },
{ id:"ringcentral", name:"RingCentral", category:"communication", docs:"https://developers.ringcentral.com/", auth:"oauth2", envKeys:["RC_CLIENT_ID","RC_CLIENT_SECRET","RC_JWT"], triggers:["sms.received","call.completed"], actions:["sms.send","fax.send","call.log"] },
{ id:"twilio", name:"Twilio", category:"communication", docs:"https://www.twilio.com/docs/usage/api", auth:"api_key", envKeys:["TWILIO_ACCOUNT_SID","TWILIO_AUTH_TOKEN"], triggers:["sms.received"], actions:["sms.send","voice.call","whatsapp.send"] },
{ id:"discord", name:"Discord", category:"communication", docs:"https://discord.com/developers/docs", auth:"api_key", envKeys:["DISCORD_BOT_TOKEN"], triggers:["message.created"], actions:["channel.message","role.assign","thread.create"] },
{ id:"instagram", name:"Instagram", category:"social", docs:"https://developers.facebook.com/docs/instagram-api", auth:"oauth2", envKeys:["META_APP_ID","META_APP_SECRET","IG_BUSINESS_TOKEN"], triggers:["comment.received"], actions:["media.publish","story.publish","reply.dm"] },
{ id:"facebook", name:"Facebook Pages", category:"social", docs:"https://developers.facebook.com/docs/pages-api", auth:"oauth2", envKeys:["META_APP_ID","META_APP_SECRET","FB_PAGE_TOKEN"], triggers:["comment.received"], actions:["post.create","reply.comment","event.create"] },
{ id:"tiktok", name:"TikTok", category:"social", docs:"https://developers.tiktok.com/doc/content-posting-api", auth:"oauth2", envKeys:["TIKTOK_CLIENT_KEY","TIKTOK_CLIENT_SECRET"], triggers:["video.published"], actions:["video.publish","photo.publish"] },
{ id:"pinterest", name:"Pinterest", category:"social", docs:"https://developers.pinterest.com/docs/api/v5/", auth:"oauth2", envKeys:["PINTEREST_APP_ID","PINTEREST_APP_SECRET","PINTEREST_TOKEN"], triggers:["pin.created"], actions:["pin.create","board.create"] },
{ id:"linkedin", name:"LinkedIn", category:"social", docs:"https://learn.microsoft.com/en-us/linkedin/", auth:"oauth2", envKeys:["LI_CLIENT_ID","LI_CLIENT_SECRET","LI_TOKEN"], triggers:["post.published"], actions:["post.create","share.create"] },
{ id:"youtube_shorts", name:"YouTube Shorts", category:"social", docs:"https://developers.google.com/youtube/v3", auth:"oauth2", envKeys:["GOOGLE_CLIENT_ID","GOOGLE_CLIENT_SECRET","GOOGLE_REFRESH_TOKEN"], triggers:["video.uploaded"], actions:["short.upload","playlist.add"] },
{ id:"x_twitter", name:"X / Twitter", category:"social", docs:"https://developer.x.com/en/docs", auth:"oauth2", envKeys:["X_API_KEY","X_API_SECRET","X_BEARER_TOKEN"], triggers:["mention.received"], actions:["post.create","dm.send"] },
{ id:"threads", name:"Threads", category:"social", docs:"https://developers.facebook.com/docs/threads", auth:"oauth2", envKeys:["META_APP_ID","META_APP_SECRET","THREADS_TOKEN"], triggers:["post.published"], actions:["post.create","reply.create"] },
{ id:"bluesky", name:"Bluesky", category:"social", docs:"https://docs.bsky.app/", auth:"api_key", envKeys:["BLUESKY_HANDLE","BLUESKY_APP_PASSWORD"], triggers:["post.received"], actions:["post.create","follow.add"] },
{ id:"reddit", name:"Reddit", category:"social", docs:"https://www.reddit.com/dev/api", auth:"oauth2", envKeys:["REDDIT_CLIENT_ID","REDDIT_CLIENT_SECRET","REDDIT_REFRESH_TOKEN"], triggers:["new_submission","comment.received"], actions:["submission.create","comment.reply"] },
{ id:"mailchimp", name:"Mailchimp", category:"marketing_email", docs:"https://mailchimp.com/developer/marketing/api/", auth:"api_key", envKeys:["MAILCHIMP_API_KEY","MAILCHIMP_DC"], triggers:["subscriber.added","campaign.sent"], actions:["campaign.send","member.upsert","segment.update"] },
{ id:"klaviyo", name:"Klaviyo", category:"marketing_email", docs:"https://developers.klaviyo.com/en/reference", auth:"api_key", envKeys:["KLAVIYO_PRIVATE_KEY"], triggers:["profile.created"], actions:["event.track","profile.upsert","flow.trigger"] },
{ id:"constant_contact", name:"Constant Contact", category:"marketing_email", docs:"https://developer.constantcontact.com/", auth:"oauth2", envKeys:["CTCT_CLIENT_ID","CTCT_CLIENT_SECRET","CTCT_REFRESH_TOKEN"], triggers:["contact.added"], actions:["contact.upsert","campaign.send"] },
{ id:"action_network", name:"Action Network", category:"marketing_email", docs:"https://actionnetwork.org/docs/", auth:"api_key", envKeys:["AN_API_KEY"], triggers:["signup.received","donation.received"], actions:["person.create","outreach.send","event.create"] },
{ id:"clickup", name:"ClickUp", category:"project_task", docs:"https://clickup.com/api", auth:"oauth2", envKeys:["CLICKUP_CLIENT_ID","CLICKUP_CLIENT_SECRET","CLICKUP_TOKEN"], triggers:["task.created","task.updated"], actions:["task.create","task.update","comment.add"] },
{ id:"asana", name:"Asana", category:"project_task", docs:"https://developers.asana.com/", auth:"oauth2", envKeys:["ASANA_CLIENT_ID","ASANA_CLIENT_SECRET","ASANA_PAT"], triggers:["task.created","task.completed"], actions:["task.create","task.update","project.create"] },
{ id:"trello", name:"Trello", category:"project_task", docs:"https://developer.atlassian.com/cloud/trello/", auth:"api_key", envKeys:["TRELLO_KEY","TRELLO_TOKEN"], triggers:["card.created"], actions:["card.create","card.move","checklist.add"] },
{ id:"monday", name:"Monday", category:"project_task", docs:"https://developer.monday.com/", auth:"api_key", envKeys:["MONDAY_API_TOKEN"], triggers:["item.created"], actions:["item.create","column.update","update.post"] },
{ id:"notion", name:"Notion", category:"project_task", docs:"https://developers.notion.com/", auth:"oauth2", envKeys:["NOTION_CLIENT_ID","NOTION_CLIENT_SECRET","NOTION_TOKEN"], triggers:["page.created","db.row.added"], actions:["page.create","db.row.append","block.append"] },
{ id:"hubspot", name:"HubSpot", category:"crm_support", docs:"https://developers.hubspot.com/docs/api/overview", auth:"oauth2", envKeys:["HUBSPOT_CLIENT_ID","HUBSPOT_CLIENT_SECRET","HUBSPOT_TOKEN"], triggers:["contact.created","deal.stage.changed"], actions:["contact.upsert","deal.create","task.create"] },
{ id:"salesforce", name:"Salesforce", category:"crm_support", docs:"https://developer.salesforce.com/docs", auth:"oauth2", envKeys:["SF_CLIENT_ID","SF_CLIENT_SECRET","SF_REFRESH_TOKEN"], triggers:["lead.created","opportunity.won"], actions:["lead.create","contact.upsert","opportunity.create"] },
{ id:"zendesk", name:"Zendesk", category:"crm_support", docs:"https://developer.zendesk.com/api-reference/", auth:"api_key", envKeys:["ZENDESK_SUBDOMAIN","ZENDESK_EMAIL","ZENDESK_TOKEN"], triggers:["ticket.created"], actions:["ticket.reply","ticket.tag","macro.apply"] },
{ id:"gorgias", name:"Gorgias", category:"crm_support", docs:"https://developers.gorgias.com/", auth:"api_key", envKeys:["GORGIAS_DOMAIN","GORGIAS_USERNAME","GORGIAS_API_KEY"], triggers:["ticket.created"], actions:["ticket.reply","ticket.tag","customer.upsert"] },
{ id:"intercom", name:"Intercom", category:"crm_support", docs:"https://developers.intercom.com/", auth:"oauth2", envKeys:["INTERCOM_CLIENT_ID","INTERCOM_CLIENT_SECRET","INTERCOM_TOKEN"], triggers:["conversation.created"], actions:["conversation.reply","user.upsert","article.create"] },
{ id:"canva", name:"Canva", category:"creative", docs:"https://www.canva.dev/docs/connect/", auth:"oauth2", envKeys:["CANVA_CLIENT_ID","CANVA_CLIENT_SECRET","CANVA_TOKEN"], triggers:["design.exported"], actions:["design.create","asset.upload","export.start"] },
{ id:"figma", name:"Figma", category:"creative", docs:"https://www.figma.com/developers/api", auth:"oauth2", envKeys:["FIGMA_CLIENT_ID","FIGMA_CLIENT_SECRET","FIGMA_TOKEN"], triggers:["file.updated"], actions:["file.read","comment.add","export.image"] },
{ id:"adobe", name:"Adobe", category:"creative", docs:"https://developer.adobe.com/", auth:"oauth2", envKeys:["ADOBE_CLIENT_ID","ADOBE_CLIENT_SECRET","ADOBE_TOKEN"], triggers:["asset.created"], actions:["asset.export","asset.upload"] },
{ id:"paper", name:"Paper", category:"creative", docs:"https://paper.design/", auth:"oauth2", envKeys:["PAPER_CLIENT_ID","PAPER_CLIENT_SECRET","PAPER_TOKEN"], triggers:["doc.updated"], actions:["doc.create","doc.share"] },
{ id:"cloudflare", name:"Cloudflare", category:"security_hosting", docs:"https://developers.cloudflare.com/api/", auth:"api_key", envKeys:["CF_API_TOKEN"], triggers:["alert.received"], actions:["dns.update","zone.list","firewall.rule.create","page.purge","worker.deploy"] },
{ id:"godaddy", name:"GoDaddy", category:"security_hosting", docs:"https://developer.godaddy.com/doc", auth:"api_key", envKeys:["GODADDY_API_KEY","GODADDY_API_SECRET"], triggers:[], actions:["domain.list","dns.update","domain.renew"] },
{ id:"vercel", name:"Vercel", category:"security_hosting", docs:"https://vercel.com/docs/rest-api", auth:"api_key", envKeys:["VERCEL_TOKEN"], triggers:["deploy.completed"], actions:["deploy.create","deploy.list","domain.add"] },
{ id:"aws", name:"AWS", category:"security_hosting", docs:"https://docs.aws.amazon.com/", auth:"api_key", envKeys:["AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_REGION"], triggers:[], actions:["s3.upload","ses.send","sqs.send"] },
{ id:"sucuri", name:"Sucuri", category:"security_hosting", docs:"https://docs.sucuri.net/api/", auth:"api_key", envKeys:["SUCURI_API_KEY","SUCURI_API_SECRET"], triggers:["alert.received"], actions:["scan.run","firewall.update","site.add"] },
{ id:"n8n", name:"n8n", category:"automation_data", docs:"https://docs.n8n.io/api/", auth:"api_key", envKeys:["N8N_BASE_URL","N8N_API_KEY"], triggers:["workflow.completed"], actions:["workflow.run","workflow.activate","credentials.list"] },
{ id:"zapier", name:"Zapier", category:"automation_data", docs:"https://platform.zapier.com/", auth:"api_key", envKeys:["ZAPIER_NLA_API_KEY"], triggers:[], actions:["zap.trigger","nla.search"] },
{ id:"make", name:"Make", category:"automation_data", docs:"https://www.make.com/en/api-documentation", auth:"api_key", envKeys:["MAKE_API_TOKEN"], triggers:["scenario.completed"], actions:["scenario.run","scenario.create"] },
{ id:"browserbase", name:"Browserbase", category:"automation_data", docs:"https://docs.browserbase.com/", auth:"api_key", envKeys:["BROWSERBASE_API_KEY","BROWSERBASE_PROJECT_ID"], triggers:[], actions:["session.create","page.goto","page.screenshot","page.scrape"] },
{ id:"postgresql", name:"PostgreSQL", category:"automation_data", docs:"https://www.postgresql.org/docs/", auth:"basic", envKeys:["PG_HOST","PG_PORT","PG_DB","PG_USER","PG_PASSWORD"], triggers:["listen.notify"], actions:["query.run","row.insert","row.upsert","row.delete"] },
{ id:"supabase", name:"Supabase", category:"automation_data", docs:"https://supabase.com/docs/reference/api", auth:"api_key", envKeys:["SUPABASE_URL","SUPABASE_SERVICE_ROLE_KEY"], triggers:["row.inserted"], actions:["row.insert","row.update","storage.upload","auth.invite"] },
{ id:"airtable", name:"Airtable", category:"automation_data", docs:"https://airtable.com/developers/web/api", auth:"api_key", envKeys:["AIRTABLE_PAT","AIRTABLE_BASE_ID"], triggers:["record.created"], actions:["record.create","record.update","record.delete"] }
];
export const ALL_CONNECTORS: Connector[] = SPECS.map(s => register({
meta: {
id: s.id, name: s.name, category: s.category,
homepage: s.docs.split("/").slice(0, 3).join("/"),
docsUrl: s.docs, difficulty: "medium", priority: "v1",
mcpServer: null, rateLimit: "TBD", webhookSupport: s.triggers.length > 0
},
auth: { method: s.auth, envKeys: s.envKeys, docsUrl: s.docs },
triggers: s.triggers.map(t => ({
id: `${s.id}.${t}`, label: t.replace(/\./g, " "),
kind: "polling" as const, inputs: [], sample: {},
poll: async () => []
})),
actions: s.actions.map(a => ({
id: `${s.id}.${a}`, label: a.replace(/\./g, " "),
sensitive: sensitive(a), inputs: [], sample: {},
run: async (ctx, input) => { ctx.log(`[${s.id}.${a}] mock`, "info"); return { mocked: true, input }; }
}))
}));
export const CONNECTOR_COUNT = ALL_CONNECTORS.length;
export const TRIGGER_COUNT = ALL_CONNECTORS.reduce((n, c) => n + c.triggers.length, 0);
export const ACTION_COUNT = ALL_CONNECTORS.reduce((n, c) => n + c.actions.length, 0);