0nmcp 2.9.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/catalog.js CHANGED
@@ -255,20 +255,82 @@ export const SERVICE_CATALOG = {
255
255
  slack: {
256
256
  name: "Slack",
257
257
  type: "communication",
258
- description: "Team messaging — channels, direct messages, notifications",
258
+ description: "Team messaging — channels, messages, threads, users, files, reactions, bookmarks, reminders, canvases, search, scheduled messages, pins",
259
259
  baseUrl: "https://slack.com/api",
260
+ mcpServer: "https://mcp.slack.com/mcp",
260
261
  authType: "bot_token",
261
262
  credentialKeys: ["botToken"],
262
263
  capabilities: [
263
- { name: "send_message", actions: ["send"], description: "Post messages to channels" },
264
- { name: "manage_channels", actions: ["list", "create"], description: "List and create channels" },
265
- { name: "manage_users", actions: ["list"], description: "List workspace users" },
264
+ { name: "send_message", actions: ["send", "update", "delete", "schedule"], description: "Post, update, delete, and schedule messages" },
265
+ { name: "manage_channels", actions: ["list", "create", "archive", "rename", "set_topic", "set_purpose", "invite", "kick"], description: "Full channel lifecycle management" },
266
+ { name: "manage_threads", actions: ["reply", "list_replies"], description: "Thread replies and conversation management" },
267
+ { name: "manage_users", actions: ["list", "get", "set_status"], description: "List users, get profiles, set status" },
268
+ { name: "manage_files", actions: ["upload", "list", "delete", "share"], description: "Upload, list, delete, and share files" },
269
+ { name: "manage_reactions", actions: ["add", "remove", "list"], description: "Emoji reactions on messages" },
270
+ { name: "manage_pins", actions: ["add", "remove", "list"], description: "Pin and unpin messages in channels" },
271
+ { name: "manage_bookmarks", actions: ["add", "remove", "list"], description: "Channel bookmarks" },
272
+ { name: "manage_reminders", actions: ["add", "list", "delete"], description: "Set and manage reminders" },
273
+ { name: "search", actions: ["messages", "files", "users"], description: "Search across messages, files, and users" },
274
+ { name: "manage_canvases", actions: ["create", "update", "read"], description: "Create and edit Slack canvases" },
266
275
  ],
267
276
  endpoints: {
268
- send_message: { method: "POST", path: "/chat.postMessage", body: { channel: "", text: "" } },
269
- list_channels: { method: "GET", path: "/conversations.list" },
270
- list_users: { method: "GET", path: "/users.list" },
271
- create_channel: { method: "POST", path: "/conversations.create", body: { name: "" } },
277
+ // Messages
278
+ send_message: { method: "POST", path: "/chat.postMessage", body: { channel: "", text: "" } },
279
+ update_message: { method: "POST", path: "/chat.update", body: { channel: "", ts: "", text: "" } },
280
+ delete_message: { method: "POST", path: "/chat.delete", body: { channel: "", ts: "" } },
281
+ schedule_message: { method: "POST", path: "/chat.scheduleMessage", body: { channel: "", text: "", post_at: 0 } },
282
+ get_permalink: { method: "GET", path: "/chat.getPermalink", query: ["channel", "message_ts"] },
283
+ // Threads
284
+ reply_to_thread: { method: "POST", path: "/chat.postMessage", body: { channel: "", thread_ts: "", text: "" } },
285
+ get_thread_replies: { method: "GET", path: "/conversations.replies", query: ["channel", "ts"] },
286
+ // Channels
287
+ list_channels: { method: "GET", path: "/conversations.list", query: ["types", "limit", "cursor"] },
288
+ create_channel: { method: "POST", path: "/conversations.create", body: { name: "" } },
289
+ archive_channel: { method: "POST", path: "/conversations.archive", body: { channel: "" } },
290
+ unarchive_channel: { method: "POST", path: "/conversations.unarchive", body: { channel: "" } },
291
+ rename_channel: { method: "POST", path: "/conversations.rename", body: { channel: "", name: "" } },
292
+ set_channel_topic: { method: "POST", path: "/conversations.setTopic", body: { channel: "", topic: "" } },
293
+ set_channel_purpose: { method: "POST", path: "/conversations.setPurpose", body: { channel: "", purpose: "" } },
294
+ invite_to_channel: { method: "POST", path: "/conversations.invite", body: { channel: "", users: "" } },
295
+ kick_from_channel: { method: "POST", path: "/conversations.kick", body: { channel: "", user: "" } },
296
+ channel_history: { method: "GET", path: "/conversations.history", query: ["channel", "limit", "oldest", "latest"] },
297
+ channel_info: { method: "GET", path: "/conversations.info", query: ["channel"] },
298
+ join_channel: { method: "POST", path: "/conversations.join", body: { channel: "" } },
299
+ leave_channel: { method: "POST", path: "/conversations.leave", body: { channel: "" } },
300
+ // Users
301
+ list_users: { method: "GET", path: "/users.list", query: ["limit", "cursor"] },
302
+ get_user: { method: "GET", path: "/users.info", query: ["user"] },
303
+ get_user_profile: { method: "GET", path: "/users.profile.get", query: ["user"] },
304
+ set_user_status: { method: "POST", path: "/users.profile.set", body: { profile: { status_text: "", status_emoji: "" } } },
305
+ // Files
306
+ upload_file: { method: "POST", path: "/files.upload", body: { channels: "", filename: "", content: "" } },
307
+ list_files: { method: "GET", path: "/files.list", query: ["channel", "types", "count"] },
308
+ delete_file: { method: "POST", path: "/files.delete", body: { file: "" } },
309
+ share_file: { method: "POST", path: "/files.sharedPublicURL", body: { file: "" } },
310
+ // Reactions
311
+ add_reaction: { method: "POST", path: "/reactions.add", body: { channel: "", timestamp: "", name: "" } },
312
+ remove_reaction: { method: "POST", path: "/reactions.remove", body: { channel: "", timestamp: "", name: "" } },
313
+ list_reactions: { method: "GET", path: "/reactions.get", query: ["channel", "timestamp"] },
314
+ // Pins
315
+ pin_message: { method: "POST", path: "/pins.add", body: { channel: "", timestamp: "" } },
316
+ unpin_message: { method: "POST", path: "/pins.remove", body: { channel: "", timestamp: "" } },
317
+ list_pins: { method: "GET", path: "/pins.list", query: ["channel"] },
318
+ // Bookmarks
319
+ add_bookmark: { method: "POST", path: "/bookmarks.add", body: { channel_id: "", title: "", type: "link", link: "" } },
320
+ remove_bookmark: { method: "POST", path: "/bookmarks.remove", body: { bookmark_id: "", channel_id: "" } },
321
+ list_bookmarks: { method: "GET", path: "/bookmarks.list", query: ["channel_id"] },
322
+ // Reminders
323
+ add_reminder: { method: "POST", path: "/reminders.add", body: { text: "", time: "" } },
324
+ list_reminders: { method: "GET", path: "/reminders.list" },
325
+ delete_reminder: { method: "POST", path: "/reminders.delete", body: { reminder: "" } },
326
+ // Search
327
+ search_messages: { method: "GET", path: "/search.messages", query: ["query", "count", "sort", "sort_dir"] },
328
+ search_files: { method: "GET", path: "/search.files", query: ["query", "count"] },
329
+ // Canvases
330
+ create_canvas: { method: "POST", path: "/canvases.create", body: { title: "", document_content: { type: "markdown", markdown: "" } } },
331
+ update_canvas: { method: "POST", path: "/canvases.edit", body: { canvas_id: "", changes: [] } },
332
+ // Team info
333
+ get_team_info: { method: "GET", path: "/team.info" },
272
334
  },
273
335
  authHeader: (creds) => ({
274
336
  "Authorization": `Bearer ${creds.botToken}`,
@@ -1244,35 +1306,94 @@ export const SERVICE_CATALOG = {
1244
1306
  square: {
1245
1307
  name: "Square",
1246
1308
  type: "payments",
1247
- description: "Payments and commerce payments, customers, orders, catalog, inventory",
1309
+ description: "Payments, commerce, POS, invoices, subscriptions, loyalty, gift cards, bookings, team, locations — full Square ecosystem",
1248
1310
  baseUrl: "https://connect.squareup.com/v2",
1249
1311
  authType: "access_token",
1250
1312
  credentialKeys: ["accessToken"],
1251
1313
  capabilities: [
1252
- { name: "manage_payments", actions: ["create", "list", "get", "refund"], description: "Process and manage payments" },
1253
- { name: "manage_customers", actions: ["create", "list", "get", "update", "delete"], description: "Manage customer directory" },
1254
- { name: "manage_orders", actions: ["create", "list", "get"], description: "Create and manage orders" },
1255
- { name: "manage_catalog", actions: ["create", "list", "search"], description: "Manage product catalog" },
1256
- { name: "manage_inventory", actions: ["get", "adjust"], description: "Track and adjust inventory" },
1314
+ { name: "manage_payments", actions: ["create", "list", "get", "refund", "complete"], description: "Process payments, refunds, and completions" },
1315
+ { name: "manage_customers", actions: ["create", "list", "get", "update", "delete", "search"], description: "Full customer directory management" },
1316
+ { name: "manage_orders", actions: ["create", "list", "get", "update", "pay"], description: "Create, manage, and pay orders" },
1317
+ { name: "manage_catalog", actions: ["create", "list", "search", "update", "delete"], description: "Product catalog lifecycle" },
1318
+ { name: "manage_inventory", actions: ["get", "adjust", "transfer"], description: "Inventory tracking and transfers" },
1319
+ { name: "manage_invoices", actions: ["create", "list", "get", "update", "publish", "cancel"], description: "Create and send invoices" },
1320
+ { name: "manage_subscriptions", actions: ["create", "list", "get", "update", "cancel"], description: "Recurring billing subscriptions" },
1321
+ { name: "manage_loyalty", actions: ["create_account", "list_accounts", "accumulate", "redeem"], description: "Loyalty program management" },
1322
+ { name: "manage_gift_cards", actions: ["create", "list", "get", "link", "unlink"], description: "Gift card operations" },
1323
+ { name: "manage_bookings", actions: ["create", "list", "get", "update", "cancel"], description: "Appointment scheduling" },
1324
+ { name: "manage_team", actions: ["create", "list", "get", "update"], description: "Team member management" },
1325
+ { name: "manage_locations", actions: ["list", "get", "create", "update"], description: "Multi-location management" },
1257
1326
  ],
1258
1327
  endpoints: {
1328
+ // Payments
1259
1329
  create_payment: { method: "POST", path: "/payments", body: { source_id: "", idempotency_key: "", amount_money: { amount: 0, currency: "USD" } } },
1260
1330
  list_payments: { method: "GET", path: "/payments", query: ["begin_time", "end_time", "sort_order", "cursor", "limit"] },
1261
1331
  get_payment: { method: "GET", path: "/payments/{paymentId}" },
1332
+ complete_payment: { method: "POST", path: "/payments/{paymentId}/complete" },
1262
1333
  create_refund: { method: "POST", path: "/refunds", body: { idempotency_key: "", payment_id: "", amount_money: {} } },
1334
+ list_refunds: { method: "GET", path: "/refunds", query: ["begin_time", "end_time", "cursor", "limit"] },
1335
+ // Customers
1263
1336
  create_customer: { method: "POST", path: "/customers", body: { given_name: "", family_name: "", email_address: "" } },
1264
1337
  list_customers: { method: "GET", path: "/customers", query: ["cursor", "limit", "sort_field", "sort_order"] },
1265
1338
  get_customer: { method: "GET", path: "/customers/{customerId}" },
1266
1339
  update_customer: { method: "PUT", path: "/customers/{customerId}", body: {} },
1267
1340
  delete_customer: { method: "DELETE", path: "/customers/{customerId}" },
1341
+ search_customers: { method: "POST", path: "/customers/search", body: { query: {} } },
1342
+ // Orders
1268
1343
  create_order: { method: "POST", path: "/orders", body: { order: { location_id: "", line_items: [] }, idempotency_key: "" } },
1269
- list_orders: { method: "POST", path: "/orders/search", body: { location_ids: [], query: {} } },
1344
+ search_orders: { method: "POST", path: "/orders/search", body: { location_ids: [], query: {} } },
1270
1345
  get_order: { method: "GET", path: "/orders/{orderId}" },
1346
+ update_order: { method: "PUT", path: "/orders/{orderId}", body: { order: {} } },
1347
+ pay_order: { method: "POST", path: "/orders/{orderId}/pay", body: { idempotency_key: "" } },
1348
+ // Catalog
1271
1349
  create_catalog_object:{ method: "POST", path: "/catalog/object", body: { idempotency_key: "", object: {} } },
1272
1350
  list_catalog: { method: "GET", path: "/catalog/list", query: ["types", "cursor"] },
1273
1351
  search_catalog: { method: "POST", path: "/catalog/search", body: { object_types: [], query: {} } },
1352
+ update_catalog_object:{ method: "POST", path: "/catalog/object", body: { idempotency_key: "", object: {} } },
1353
+ delete_catalog_object:{ method: "DELETE", path: "/catalog/object/{objectId}" },
1354
+ // Inventory
1274
1355
  get_inventory: { method: "POST", path: "/inventory/counts/batch-retrieve", body: { catalog_object_ids: [] } },
1275
1356
  adjust_inventory: { method: "POST", path: "/inventory/changes/batch-create", body: { idempotency_key: "", changes: [] } },
1357
+ transfer_inventory: { method: "POST", path: "/inventory/transfers/batch-create", body: { idempotency_key: "", transfers: [] } },
1358
+ // Invoices
1359
+ create_invoice: { method: "POST", path: "/invoices", body: { invoice: {}, idempotency_key: "" } },
1360
+ list_invoices: { method: "GET", path: "/invoices", query: ["location_id", "cursor", "limit"] },
1361
+ get_invoice: { method: "GET", path: "/invoices/{invoiceId}" },
1362
+ update_invoice: { method: "PUT", path: "/invoices/{invoiceId}", body: { invoice: {} } },
1363
+ publish_invoice: { method: "POST", path: "/invoices/{invoiceId}/publish", body: { version: 0, idempotency_key: "" } },
1364
+ cancel_invoice: { method: "POST", path: "/invoices/{invoiceId}/cancel" },
1365
+ // Subscriptions
1366
+ create_subscription: { method: "POST", path: "/subscriptions", body: { idempotency_key: "", location_id: "", plan_variation_id: "", customer_id: "" } },
1367
+ list_subscriptions: { method: "POST", path: "/subscriptions/search", body: { query: {} } },
1368
+ get_subscription: { method: "GET", path: "/subscriptions/{subscriptionId}" },
1369
+ update_subscription: { method: "PUT", path: "/subscriptions/{subscriptionId}", body: {} },
1370
+ cancel_subscription: { method: "POST", path: "/subscriptions/{subscriptionId}/cancel" },
1371
+ // Loyalty
1372
+ create_loyalty_account: { method: "POST", path: "/loyalty/accounts", body: { account: {}, idempotency_key: "" } },
1373
+ search_loyalty_accounts:{ method: "POST", path: "/loyalty/accounts/search", body: { query: {} } },
1374
+ accumulate_loyalty: { method: "POST", path: "/loyalty/accounts/{accountId}/accumulate", body: { accumulate_points: {}, idempotency_key: "" } },
1375
+ redeem_loyalty: { method: "POST", path: "/loyalty/rewards", body: { reward: {}, idempotency_key: "" } },
1376
+ // Gift Cards
1377
+ create_gift_card: { method: "POST", path: "/gift-cards", body: { idempotency_key: "", location_id: "", type: "DIGITAL" } },
1378
+ list_gift_cards: { method: "GET", path: "/gift-cards", query: ["type", "state", "cursor", "limit"] },
1379
+ get_gift_card: { method: "GET", path: "/gift-cards/{giftCardId}" },
1380
+ link_gift_card: { method: "POST", path: "/gift-cards/{giftCardId}/link-customer", body: { customer_id: "" } },
1381
+ // Bookings
1382
+ create_booking: { method: "POST", path: "/bookings", body: { booking: {}, idempotency_key: "" } },
1383
+ list_bookings: { method: "GET", path: "/bookings", query: ["limit", "cursor", "team_member_id", "location_id", "start_at_min", "start_at_max"] },
1384
+ get_booking: { method: "GET", path: "/bookings/{bookingId}" },
1385
+ update_booking: { method: "PUT", path: "/bookings/{bookingId}", body: { booking: {} } },
1386
+ cancel_booking: { method: "POST", path: "/bookings/{bookingId}/cancel" },
1387
+ // Team
1388
+ create_team_member: { method: "POST", path: "/team-members", body: { idempotency_key: "", team_member: {} } },
1389
+ search_team_members: { method: "POST", path: "/team-members/search", body: { query: {} } },
1390
+ get_team_member: { method: "GET", path: "/team-members/{teamMemberId}" },
1391
+ update_team_member: { method: "PUT", path: "/team-members/{teamMemberId}", body: { team_member: {} } },
1392
+ // Locations
1393
+ list_locations: { method: "GET", path: "/locations" },
1394
+ get_location: { method: "GET", path: "/locations/{locationId}" },
1395
+ create_location: { method: "POST", path: "/locations", body: { location: {} } },
1396
+ update_location: { method: "PUT", path: "/locations/{locationId}", body: { location: {} } },
1276
1397
  },
1277
1398
  authHeader: (creds) => ({
1278
1399
  "Authorization": `Bearer ${creds.accessToken}`,
@@ -1281,6 +1402,85 @@ export const SERVICE_CATALOG = {
1281
1402
  }),
1282
1403
  },
1283
1404
 
1405
+ // ── WooCommerce ──────────────────────────────────────────────
1406
+ woocommerce: {
1407
+ name: "WooCommerce",
1408
+ type: "ecommerce",
1409
+ description: "WordPress e-commerce — products, orders, customers, coupons, categories, reports, shipping, taxes, refunds",
1410
+ baseUrl: "https://{siteUrl}/wp-json/wc/v3",
1411
+ authType: "basic",
1412
+ credentialKeys: ["siteUrl", "consumerKey", "consumerSecret"],
1413
+ capabilities: [
1414
+ { name: "manage_products", actions: ["create", "list", "get", "update", "delete"], description: "Full product lifecycle management" },
1415
+ { name: "manage_orders", actions: ["create", "list", "get", "update", "delete"], description: "Order processing and fulfillment" },
1416
+ { name: "manage_customers", actions: ["create", "list", "get", "update", "delete"], description: "Customer directory" },
1417
+ { name: "manage_coupons", actions: ["create", "list", "get", "update", "delete"], description: "Discount coupon management" },
1418
+ { name: "manage_categories", actions: ["create", "list", "get", "update", "delete"], description: "Product categories" },
1419
+ { name: "manage_shipping", actions: ["list_zones", "list_methods"], description: "Shipping configuration" },
1420
+ { name: "manage_reports", actions: ["sales", "top_sellers", "coupons"], description: "Sales and performance reports" },
1421
+ { name: "manage_refunds", actions: ["create", "list"], description: "Order refunds" },
1422
+ ],
1423
+ endpoints: {
1424
+ // Products
1425
+ create_product: { method: "POST", path: "/products", body: { name: "", type: "simple", regular_price: "" } },
1426
+ list_products: { method: "GET", path: "/products", query: ["per_page", "page", "search", "status", "category", "sku", "orderby", "order"] },
1427
+ get_product: { method: "GET", path: "/products/{productId}" },
1428
+ update_product: { method: "PUT", path: "/products/{productId}", body: {} },
1429
+ delete_product: { method: "DELETE", path: "/products/{productId}", query: ["force"] },
1430
+ // Product Variations
1431
+ list_variations: { method: "GET", path: "/products/{productId}/variations" },
1432
+ create_variation: { method: "POST", path: "/products/{productId}/variations", body: { regular_price: "" } },
1433
+ update_variation: { method: "PUT", path: "/products/{productId}/variations/{variationId}", body: {} },
1434
+ // Product Categories
1435
+ create_category: { method: "POST", path: "/products/categories", body: { name: "" } },
1436
+ list_categories: { method: "GET", path: "/products/categories", query: ["per_page", "page", "search"] },
1437
+ get_category: { method: "GET", path: "/products/categories/{categoryId}" },
1438
+ update_category: { method: "PUT", path: "/products/categories/{categoryId}", body: {} },
1439
+ delete_category: { method: "DELETE", path: "/products/categories/{categoryId}" },
1440
+ // Orders
1441
+ create_order: { method: "POST", path: "/orders", body: { payment_method: "", billing: {}, line_items: [] } },
1442
+ list_orders: { method: "GET", path: "/orders", query: ["per_page", "page", "status", "customer", "after", "before", "orderby", "order"] },
1443
+ get_order: { method: "GET", path: "/orders/{orderId}" },
1444
+ update_order: { method: "PUT", path: "/orders/{orderId}", body: {} },
1445
+ delete_order: { method: "DELETE", path: "/orders/{orderId}" },
1446
+ // Order Notes
1447
+ create_order_note: { method: "POST", path: "/orders/{orderId}/notes", body: { note: "" } },
1448
+ list_order_notes: { method: "GET", path: "/orders/{orderId}/notes" },
1449
+ // Refunds
1450
+ create_refund: { method: "POST", path: "/orders/{orderId}/refunds", body: { amount: "", reason: "" } },
1451
+ list_refunds: { method: "GET", path: "/orders/{orderId}/refunds" },
1452
+ // Customers
1453
+ create_customer: { method: "POST", path: "/customers", body: { email: "", first_name: "", last_name: "" } },
1454
+ list_customers: { method: "GET", path: "/customers", query: ["per_page", "page", "search", "role", "orderby", "order"] },
1455
+ get_customer: { method: "GET", path: "/customers/{customerId}" },
1456
+ update_customer: { method: "PUT", path: "/customers/{customerId}", body: {} },
1457
+ delete_customer: { method: "DELETE", path: "/customers/{customerId}" },
1458
+ // Coupons
1459
+ create_coupon: { method: "POST", path: "/coupons", body: { code: "", discount_type: "percent", amount: "" } },
1460
+ list_coupons: { method: "GET", path: "/coupons", query: ["per_page", "page", "search"] },
1461
+ get_coupon: { method: "GET", path: "/coupons/{couponId}" },
1462
+ update_coupon: { method: "PUT", path: "/coupons/{couponId}", body: {} },
1463
+ delete_coupon: { method: "DELETE", path: "/coupons/{couponId}" },
1464
+ // Shipping
1465
+ list_shipping_zones: { method: "GET", path: "/shipping/zones" },
1466
+ list_shipping_methods:{ method: "GET", path: "/shipping/zones/{zoneId}/methods" },
1467
+ // Reports
1468
+ sales_report: { method: "GET", path: "/reports/sales", query: ["period", "date_min", "date_max"] },
1469
+ top_sellers_report: { method: "GET", path: "/reports/top_sellers", query: ["period"] },
1470
+ coupons_report: { method: "GET", path: "/reports/coupons/totals" },
1471
+ // Taxes
1472
+ list_tax_classes: { method: "GET", path: "/taxes/classes" },
1473
+ list_tax_rates: { method: "GET", path: "/taxes" },
1474
+ // Settings
1475
+ list_settings: { method: "GET", path: "/settings" },
1476
+ get_setting_group: { method: "GET", path: "/settings/{group}" },
1477
+ },
1478
+ authHeader: (creds) => ({
1479
+ "Authorization": `Basic ${Buffer.from(`${creds.consumerKey}:${creds.consumerSecret}`).toString('base64')}`,
1480
+ "Content-Type": "application/json",
1481
+ }),
1482
+ },
1483
+
1284
1484
  // ── TikTok Ads ──────────────────────────────────────────────
1285
1485
  tiktok_ads: {
1286
1486
  name: "TikTok Ads",
@@ -1539,38 +1739,142 @@ export const SERVICE_CATALOG = {
1539
1739
  pipedrive: {
1540
1740
  name: "Pipedrive",
1541
1741
  type: "crm",
1542
- description: "Sales CRM — deals, persons, organizations, activities, pipelines, notes",
1742
+ description: "Sales CRM — deals, persons, organizations, activities, pipelines, products, leads, goals, projects, files, mail, webhooks, subscriptions, notes, stages, users",
1543
1743
  baseUrl: "https://api.pipedrive.com/v1",
1544
1744
  authType: "api_key",
1545
1745
  credentialKeys: ["apiKey"],
1546
1746
  capabilities: [
1547
- { name: "manage_deals", actions: ["create", "list", "get", "update", "delete"], description: "Full deal lifecycle management" },
1548
- { name: "manage_persons", actions: ["create", "list", "get", "update", "delete"], description: "Manage contact persons" },
1549
- { name: "manage_organizations", actions: ["create", "list", "get"], description: "Manage organizations" },
1550
- { name: "manage_activities", actions: ["create", "list", "get"], description: "Schedule and track activities" },
1551
- { name: "manage_pipelines", actions: ["list", "get"], description: "View sales pipelines and stages" },
1552
- { name: "manage_notes", actions: ["create", "list"], description: "Add and view notes" },
1747
+ { name: "manage_deals", actions: ["create", "list", "get", "update", "delete", "search", "merge", "duplicate"], description: "Full deal lifecycle with merge and duplicate" },
1748
+ { name: "manage_persons", actions: ["create", "list", "get", "update", "delete", "search", "merge"], description: "Contact persons with merge" },
1749
+ { name: "manage_organizations", actions: ["create", "list", "get", "update", "delete", "search", "merge"], description: "Organizations with merge" },
1750
+ { name: "manage_activities", actions: ["create", "list", "get", "update", "delete"], description: "Schedule, track, and manage activities" },
1751
+ { name: "manage_pipelines", actions: ["list", "get", "create", "update", "delete"], description: "Pipeline CRUD + stage management" },
1752
+ { name: "manage_stages", actions: ["list", "get", "create", "update", "delete"], description: "Deal stages within pipelines" },
1753
+ { name: "manage_products", actions: ["create", "list", "get", "update", "delete", "search"], description: "Product catalog management" },
1754
+ { name: "manage_leads", actions: ["create", "list", "get", "update", "delete"], description: "Lead management before conversion to deals" },
1755
+ { name: "manage_notes", actions: ["create", "list", "get", "update", "delete"], description: "Notes on deals, persons, organizations" },
1756
+ { name: "manage_files", actions: ["list", "get", "create", "delete"], description: "File attachments" },
1757
+ { name: "manage_mail", actions: ["list_threads", "get_thread", "list_messages", "send"], description: "Email integration" },
1758
+ { name: "manage_goals", actions: ["create", "list", "get", "update", "delete"], description: "Sales goals and targets" },
1759
+ { name: "manage_projects", actions: ["create", "list", "get", "update"], description: "Project management" },
1760
+ { name: "manage_webhooks", actions: ["create", "list", "delete"], description: "Event webhooks" },
1761
+ { name: "manage_subscriptions", actions: ["create", "list", "get", "update", "cancel"], description: "Recurring revenue subscriptions" },
1762
+ { name: "manage_users", actions: ["list", "get", "update"], description: "Team user management" },
1553
1763
  ],
1554
1764
  endpoints: {
1765
+ // Deals
1555
1766
  create_deal: { method: "POST", path: "/deals", query: ["api_token"], body: { title: "" } },
1556
- list_deals: { method: "GET", path: "/deals", query: ["api_token", "start", "limit", "status", "sort"] },
1767
+ list_deals: { method: "GET", path: "/deals", query: ["api_token", "start", "limit", "status", "sort", "filter_id"] },
1557
1768
  get_deal: { method: "GET", path: "/deals/{dealId}", query: ["api_token"] },
1558
1769
  update_deal: { method: "PUT", path: "/deals/{dealId}", query: ["api_token"], body: {} },
1559
1770
  delete_deal: { method: "DELETE", path: "/deals/{dealId}", query: ["api_token"] },
1771
+ search_deals: { method: "GET", path: "/deals/search", query: ["api_token", "term", "fields", "exact_match", "start", "limit"] },
1772
+ merge_deals: { method: "PUT", path: "/deals/{dealId}/merge", query: ["api_token"], body: { merge_with_id: 0 } },
1773
+ duplicate_deal: { method: "POST", path: "/deals/{dealId}/duplicate", query: ["api_token"] },
1774
+ list_deal_activities: { method: "GET", path: "/deals/{dealId}/activities", query: ["api_token", "start", "limit"] },
1775
+ list_deal_files: { method: "GET", path: "/deals/{dealId}/files", query: ["api_token", "start", "limit"] },
1776
+ list_deal_products: { method: "GET", path: "/deals/{dealId}/products", query: ["api_token", "start", "limit"] },
1777
+ add_deal_product: { method: "POST", path: "/deals/{dealId}/products", query: ["api_token"], body: { product_id: 0, item_price: 0, quantity: 1 } },
1778
+ list_deal_participants:{ method: "GET", path: "/deals/{dealId}/participants", query: ["api_token", "start", "limit"] },
1779
+ add_deal_participant: { method: "POST", path: "/deals/{dealId}/participants", query: ["api_token"], body: { person_id: 0 } },
1780
+ list_deal_followers: { method: "GET", path: "/deals/{dealId}/followers", query: ["api_token"] },
1781
+ // Persons
1560
1782
  create_person: { method: "POST", path: "/persons", query: ["api_token"], body: { name: "" } },
1561
- list_persons: { method: "GET", path: "/persons", query: ["api_token", "start", "limit", "sort"] },
1783
+ list_persons: { method: "GET", path: "/persons", query: ["api_token", "start", "limit", "sort", "filter_id"] },
1562
1784
  get_person: { method: "GET", path: "/persons/{personId}", query: ["api_token"] },
1563
1785
  update_person: { method: "PUT", path: "/persons/{personId}", query: ["api_token"], body: {} },
1564
1786
  delete_person: { method: "DELETE", path: "/persons/{personId}", query: ["api_token"] },
1787
+ search_persons: { method: "GET", path: "/persons/search", query: ["api_token", "term", "fields", "exact_match", "start", "limit"] },
1788
+ merge_persons: { method: "PUT", path: "/persons/{personId}/merge", query: ["api_token"], body: { merge_with_id: 0 } },
1789
+ list_person_deals: { method: "GET", path: "/persons/{personId}/deals", query: ["api_token", "start", "limit"] },
1790
+ list_person_activities:{ method: "GET", path: "/persons/{personId}/activities", query: ["api_token", "start", "limit"] },
1791
+ // Organizations
1565
1792
  create_organization: { method: "POST", path: "/organizations", query: ["api_token"], body: { name: "" } },
1566
- list_organizations: { method: "GET", path: "/organizations", query: ["api_token", "start", "limit", "sort"] },
1793
+ list_organizations: { method: "GET", path: "/organizations", query: ["api_token", "start", "limit", "sort", "filter_id"] },
1794
+ get_organization: { method: "GET", path: "/organizations/{orgId}", query: ["api_token"] },
1795
+ update_organization: { method: "PUT", path: "/organizations/{orgId}", query: ["api_token"], body: {} },
1796
+ delete_organization: { method: "DELETE", path: "/organizations/{orgId}", query: ["api_token"] },
1797
+ search_organizations: { method: "GET", path: "/organizations/search", query: ["api_token", "term", "fields", "exact_match"] },
1798
+ merge_organizations: { method: "PUT", path: "/organizations/{orgId}/merge", query: ["api_token"], body: { merge_with_id: 0 } },
1799
+ // Activities
1567
1800
  create_activity: { method: "POST", path: "/activities", query: ["api_token"], body: { subject: "", type: "" } },
1568
- list_activities: { method: "GET", path: "/activities", query: ["api_token", "start", "limit", "type"] },
1801
+ list_activities: { method: "GET", path: "/activities", query: ["api_token", "start", "limit", "type", "user_id", "done"] },
1802
+ get_activity: { method: "GET", path: "/activities/{activityId}", query: ["api_token"] },
1803
+ update_activity: { method: "PUT", path: "/activities/{activityId}", query: ["api_token"], body: {} },
1804
+ delete_activity: { method: "DELETE", path: "/activities/{activityId}", query: ["api_token"] },
1805
+ // Pipelines + Stages
1569
1806
  list_pipelines: { method: "GET", path: "/pipelines", query: ["api_token"] },
1570
1807
  get_pipeline: { method: "GET", path: "/pipelines/{pipelineId}", query: ["api_token"] },
1808
+ create_pipeline: { method: "POST", path: "/pipelines", query: ["api_token"], body: { name: "" } },
1809
+ update_pipeline: { method: "PUT", path: "/pipelines/{pipelineId}", query: ["api_token"], body: {} },
1810
+ delete_pipeline: { method: "DELETE", path: "/pipelines/{pipelineId}", query: ["api_token"] },
1811
+ list_stages: { method: "GET", path: "/stages", query: ["api_token", "pipeline_id"] },
1812
+ get_stage: { method: "GET", path: "/stages/{stageId}", query: ["api_token"] },
1813
+ create_stage: { method: "POST", path: "/stages", query: ["api_token"], body: { name: "", pipeline_id: 0 } },
1814
+ update_stage: { method: "PUT", path: "/stages/{stageId}", query: ["api_token"], body: {} },
1815
+ delete_stage: { method: "DELETE", path: "/stages/{stageId}", query: ["api_token"] },
1816
+ list_stage_deals: { method: "GET", path: "/stages/{stageId}/deals", query: ["api_token", "start", "limit"] },
1817
+ // Products
1818
+ create_product: { method: "POST", path: "/products", query: ["api_token"], body: { name: "" } },
1819
+ list_products: { method: "GET", path: "/products", query: ["api_token", "start", "limit"] },
1820
+ get_product: { method: "GET", path: "/products/{productId}", query: ["api_token"] },
1821
+ update_product: { method: "PUT", path: "/products/{productId}", query: ["api_token"], body: {} },
1822
+ delete_product: { method: "DELETE", path: "/products/{productId}", query: ["api_token"] },
1823
+ search_products: { method: "GET", path: "/products/search", query: ["api_token", "term", "fields"] },
1824
+ // Leads
1825
+ create_lead: { method: "POST", path: "/leads", query: ["api_token"], body: { title: "" } },
1826
+ list_leads: { method: "GET", path: "/leads", query: ["api_token", "start", "limit", "sort", "filter_id"] },
1827
+ get_lead: { method: "GET", path: "/leads/{leadId}", query: ["api_token"] },
1828
+ update_lead: { method: "PATCH", path: "/leads/{leadId}", query: ["api_token"], body: {} },
1829
+ delete_lead: { method: "DELETE", path: "/leads/{leadId}", query: ["api_token"] },
1830
+ // Notes
1571
1831
  create_note: { method: "POST", path: "/notes", query: ["api_token"], body: { content: "" } },
1572
1832
  list_notes: { method: "GET", path: "/notes", query: ["api_token", "start", "limit", "sort"] },
1573
- search_items: { method: "GET", path: "/itemSearch", query: ["api_token", "term", "item_types", "fields"] },
1833
+ get_note: { method: "GET", path: "/notes/{noteId}", query: ["api_token"] },
1834
+ update_note: { method: "PUT", path: "/notes/{noteId}", query: ["api_token"], body: {} },
1835
+ delete_note: { method: "DELETE", path: "/notes/{noteId}", query: ["api_token"] },
1836
+ // Files
1837
+ list_files: { method: "GET", path: "/files", query: ["api_token", "start", "limit", "sort"] },
1838
+ get_file: { method: "GET", path: "/files/{fileId}", query: ["api_token"] },
1839
+ delete_file: { method: "DELETE", path: "/files/{fileId}", query: ["api_token"] },
1840
+ // Mail
1841
+ list_mail_threads: { method: "GET", path: "/mailbox/mailThreads", query: ["api_token", "folder", "start", "limit"] },
1842
+ get_mail_thread: { method: "GET", path: "/mailbox/mailThreads/{threadId}", query: ["api_token"] },
1843
+ list_mail_messages: { method: "GET", path: "/mailbox/mailMessages", query: ["api_token", "start", "limit"] },
1844
+ // Goals
1845
+ create_goal: { method: "POST", path: "/goals", query: ["api_token"], body: { title: "", assignee: {} } },
1846
+ list_goals: { method: "GET", path: "/goals", query: ["api_token"] },
1847
+ get_goal: { method: "GET", path: "/goals/{goalId}", query: ["api_token"] },
1848
+ update_goal: { method: "PUT", path: "/goals/{goalId}", query: ["api_token"], body: {} },
1849
+ delete_goal: { method: "DELETE", path: "/goals/{goalId}", query: ["api_token"] },
1850
+ // Projects
1851
+ create_project: { method: "POST", path: "/projects", query: ["api_token"], body: { title: "", board_id: 0 } },
1852
+ list_projects: { method: "GET", path: "/projects", query: ["api_token", "start", "limit", "status"] },
1853
+ get_project: { method: "GET", path: "/projects/{projectId}", query: ["api_token"] },
1854
+ update_project: { method: "PUT", path: "/projects/{projectId}", query: ["api_token"], body: {} },
1855
+ // Webhooks
1856
+ create_webhook: { method: "POST", path: "/webhooks", query: ["api_token"], body: { subscription_url: "", event_action: "", event_object: "" } },
1857
+ list_webhooks: { method: "GET", path: "/webhooks", query: ["api_token"] },
1858
+ delete_webhook: { method: "DELETE", path: "/webhooks/{webhookId}", query: ["api_token"] },
1859
+ // Subscriptions
1860
+ create_subscription: { method: "POST", path: "/subscriptions/recurring", query: ["api_token"], body: { deal_id: 0, currency: "USD" } },
1861
+ list_subscriptions: { method: "GET", path: "/subscriptions/{dealId}", query: ["api_token"] },
1862
+ get_subscription: { method: "GET", path: "/subscriptions/{subscriptionId}", query: ["api_token"] },
1863
+ update_subscription: { method: "PUT", path: "/subscriptions/recurring/{subscriptionId}", query: ["api_token"], body: {} },
1864
+ cancel_subscription: { method: "DELETE", path: "/subscriptions/recurring/{subscriptionId}", query: ["api_token"] },
1865
+ // Users
1866
+ list_users: { method: "GET", path: "/users", query: ["api_token"] },
1867
+ get_user: { method: "GET", path: "/users/{userId}", query: ["api_token"] },
1868
+ update_user: { method: "PUT", path: "/users/{userId}", query: ["api_token"], body: {} },
1869
+ // Search
1870
+ search_items: { method: "GET", path: "/itemSearch", query: ["api_token", "term", "item_types", "fields", "exact_match", "start", "limit"] },
1871
+ search_field: { method: "GET", path: "/itemSearch/field", query: ["api_token", "term", "field_type", "field_key", "exact_match"] },
1872
+ // Filters
1873
+ list_filters: { method: "GET", path: "/filters", query: ["api_token", "type"] },
1874
+ get_filter: { method: "GET", path: "/filters/{filterId}", query: ["api_token"] },
1875
+ create_filter: { method: "POST", path: "/filters", query: ["api_token"], body: { name: "", type: "", conditions: {} } },
1876
+ // Recents
1877
+ list_recents: { method: "GET", path: "/recents", query: ["api_token", "since_timestamp", "items"] },
1574
1878
  },
1575
1879
  authHeader: (creds) => ({
1576
1880
  "Content-Type": "application/json",
@@ -1581,25 +1885,86 @@ export const SERVICE_CATALOG = {
1581
1885
  linkedin: {
1582
1886
  name: "LinkedIn",
1583
1887
  type: "social",
1584
- description: "Professional network — posts, profile, connections, organizations via LinkedIn API",
1585
- baseUrl: "https://api.linkedin.com/rest",
1586
- authType: "oauth",
1888
+ description: "Professional network — profile, posts, comments, likes, organizations, page analytics, events, advertising, ad reporting via LinkedIn API v2",
1889
+ baseUrl: "https://api.linkedin.com",
1890
+ authType: "oauth2",
1891
+ scopes: ["rw_organization_admin", "w_member_social", "r_profile_basicinfo", "rw_events", "r_ads", "r_basicprofile", "r_organization_admin", "email", "r_1st_connections_size", "openid", "profile", "r_ads_reporting", "r_organization_social", "r_verify", "w_organization_social", "rw_ads", "r_events"],
1587
1892
  credentialKeys: ["access_token"],
1588
1893
  capabilities: [
1589
- { name: "manage_posts", actions: ["create", "list", "delete"], description: "Create and manage posts" },
1590
- { name: "manage_profile", actions: ["get"], description: "View profile information" },
1591
- { name: "manage_connections", actions: ["list"], description: "View connections" },
1592
- { name: "manage_organizations", actions: ["get", "list_posts"], description: "View company pages and posts" },
1894
+ { name: "manage_profile", actions: ["get", "get_email", "get_connections", "get_verification", "get_photos"], description: "View profile, email, connections count, verification status, and photos" },
1895
+ { name: "manage_posts", actions: ["create", "get", "delete"], description: "Create, read, and delete posts for members or organizations" },
1896
+ { name: "manage_social_actions", actions: ["comment", "list_comments", "like", "unlike"], description: "Comment on and like/unlike posts" },
1897
+ { name: "manage_shares", actions: ["list"], description: "List shared content" },
1898
+ { name: "manage_media", actions: ["upload_image", "upload_video"], description: "Upload images and videos for posts" },
1899
+ { name: "manage_organizations", actions: ["get", "list_admin_orgs", "update", "get_brand_pages"], description: "View and manage organization pages" },
1900
+ { name: "manage_org_analytics", actions: ["page_stats", "follower_stats", "share_stats", "follower_count", "visitor_stats"], description: "Organization page analytics and statistics" },
1901
+ { name: "manage_ads", actions: ["list_accounts", "get_account", "create_campaign_group", "list_campaign_groups", "create_campaign", "list_campaigns", "update_campaign", "create_creative", "list_creatives", "update_creative"], description: "Manage ad accounts, campaigns, and creatives" },
1902
+ { name: "manage_ad_extras", actions: ["get_analytics", "get_budget_pricing", "create_sponsored_content", "get_targeting", "get_form_responses"], description: "Ad analytics, targeting, budget suggestions, and lead gen forms" },
1903
+ { name: "manage_ad_reporting", actions: ["get_performance", "get_statistics", "get_conversions", "get_budget_reports", "get_inmail_analytics"], description: "Campaign performance metrics, conversion tracking, and InMail analytics" },
1904
+ { name: "manage_events", actions: ["create", "get", "update", "delete", "list_attendees"], description: "Create, manage, and track events and attendees" },
1593
1905
  ],
1594
1906
  endpoints: {
1595
- create_post: { method: "POST", path: "/posts", body: { author: "", commentary: "", visibility: "PUBLIC", distribution: { feedDistribution: "MAIN_FEED" }, lifecycleState: "PUBLISHED" } },
1596
- get_profile: { method: "GET", path: "/me", query: ["projection"] },
1597
- list_connections: { method: "GET", path: "/connections", query: ["start", "count", "projection"] },
1598
- get_organization: { method: "GET", path: "/organizations/{organizationId}", query: ["projection"] },
1599
- list_org_posts: { method: "GET", path: "/posts", query: ["author", "q", "count", "start"] },
1600
- delete_post: { method: "DELETE", path: "/posts/{postId}" },
1601
- get_post: { method: "GET", path: "/posts/{postId}" },
1602
- upload_image: { method: "POST", path: "/images", query: ["action=initializeUpload"], body: { initializeUploadRequest: { owner: "" } } },
1907
+ // ── Profile (5) ───────────────────────────────────────────
1908
+ get_profile: { method: "GET", path: "/v2/me", query: ["projection"] },
1909
+ get_email: { method: "GET", path: "/v2/emailAddress", query: ["q=members", "projection=(elements*(handle~))"] },
1910
+ get_connections_size: { method: "GET", path: "/v2/connections", query: ["q=viewer", "start", "count"] },
1911
+ get_verification: { method: "GET", path: "/v2/profileVerification", query: ["q=member"] },
1912
+ get_profile_pictures: { method: "GET", path: "/v2/profilePictures", query: ["q=member", "projection"] },
1913
+
1914
+ // ── Social / Posts (10) ───────────────────────────────────
1915
+ create_post: { method: "POST", path: "/v2/posts", body: { author: "", commentary: "", visibility: "PUBLIC", distribution: { feedDistribution: "MAIN_FEED" }, lifecycleState: "PUBLISHED" } },
1916
+ get_post: { method: "GET", path: "/v2/posts/{postId}" },
1917
+ delete_post: { method: "DELETE", path: "/v2/posts/{postId}" },
1918
+ add_comment: { method: "POST", path: "/v2/socialActions/{activityId}/comments", body: { actor: "", message: { text: "" } } },
1919
+ list_comments: { method: "GET", path: "/v2/socialActions/{activityId}/comments", query: ["start", "count"] },
1920
+ like_post: { method: "POST", path: "/v2/socialActions/{activityId}/likes", body: { actor: "" } },
1921
+ unlike_post: { method: "DELETE", path: "/v2/socialActions/{activityId}/likes/{likeId}" },
1922
+ list_shares: { method: "GET", path: "/v2/shares", query: ["q", "owners", "count", "start"] },
1923
+ upload_image: { method: "POST", path: "/v2/images", query: ["action=initializeUpload"], body: { initializeUploadRequest: { owner: "" } } },
1924
+ upload_video: { method: "POST", path: "/v2/videos", query: ["action=initializeUpload"], body: { initializeUploadRequest: { owner: "", fileSizeBytes: 0 } } },
1925
+
1926
+ // ── Organization Pages (10) ───────────────────────────────
1927
+ get_organization: { method: "GET", path: "/v2/organizations/{organizationId}", query: ["projection"] },
1928
+ list_admin_orgs: { method: "GET", path: "/v2/organizationalEntityAcls", query: ["q=roleAssignee", "role", "projection"] },
1929
+ create_org_post: { method: "POST", path: "/v2/posts", body: { author: "urn:li:organization:{organizationId}", commentary: "", visibility: "PUBLIC", distribution: { feedDistribution: "MAIN_FEED" }, lifecycleState: "PUBLISHED" } },
1930
+ get_page_statistics: { method: "GET", path: "/v2/organizationPageStatistics", query: ["q=organization", "organization", "timeIntervals"] },
1931
+ get_follower_statistics: { method: "GET", path: "/v2/organizationalEntityFollowerStatistics", query: ["q=organizationalEntity", "organizationalEntity", "timeIntervals"] },
1932
+ get_share_statistics: { method: "GET", path: "/v2/organizationalEntityShareStatistics", query: ["q=organizationalEntity", "organizationalEntity", "shares"] },
1933
+ get_follower_count: { method: "GET", path: "/v2/networkSizes/{organizationUrn}", query: ["edgeType=CompanyFollowedByMember"] },
1934
+ update_organization: { method: "PUT", path: "/v2/organizations/{organizationId}", body: {} },
1935
+ get_brand_pages: { method: "GET", path: "/v2/organizationBrandPages", query: ["q=parentOrganization", "parentOrganization"] },
1936
+ get_visitor_statistics: { method: "GET", path: "/v2/organizationPageVisitorStatistics", query: ["q=organization", "organization", "timeIntervals"] },
1937
+
1938
+ // ── Advertising (15) ──────────────────────────────────────
1939
+ list_ad_accounts: { method: "GET", path: "/v2/adAccountsV2", query: ["q=search", "search", "count", "start"] },
1940
+ get_ad_account: { method: "GET", path: "/v2/adAccountsV2/{adAccountId}" },
1941
+ create_campaign_group: { method: "POST", path: "/v2/adCampaignGroupsV2", body: { account: "", name: "", status: "ACTIVE" } },
1942
+ list_campaign_groups: { method: "GET", path: "/v2/adCampaignGroupsV2", query: ["q=search", "search", "count", "start"] },
1943
+ create_campaign: { method: "POST", path: "/v2/adCampaignsV2", body: { account: "", campaignGroup: "", name: "", type: "SPONSORED_UPDATES", costType: "CPM", status: "PAUSED" } },
1944
+ list_campaigns: { method: "GET", path: "/v2/adCampaignsV2", query: ["q=search", "search", "count", "start"] },
1945
+ update_campaign: { method: "PATCH", path: "/v2/adCampaignsV2/{campaignId}", body: {} },
1946
+ create_creative: { method: "POST", path: "/v2/adCreativesV2", body: { campaign: "", reference: "" } },
1947
+ list_creatives: { method: "GET", path: "/v2/adCreativesV2", query: ["q=search", "search", "campaigns", "count"] },
1948
+ update_creative: { method: "PATCH", path: "/v2/adCreativesV2/{creativeId}", body: {} },
1949
+ get_ad_analytics: { method: "GET", path: "/v2/adAnalyticsV2", query: ["q=analytics", "dateRange", "campaigns", "pivot", "timeGranularity", "fields"] },
1950
+ get_budget_pricing: { method: "GET", path: "/v2/adBudgetPricingV2", query: ["account", "campaign", "bidType", "match"] },
1951
+ create_sponsored_content: { method: "POST", path: "/v2/adDirectSponsoredContents", body: { account: "", owner: "", content: {} } },
1952
+ get_targeting_facets: { method: "GET", path: "/v2/adTargetingFacets", query: ["q=search", "search", "queryType"] },
1953
+ get_form_responses: { method: "GET", path: "/v2/adFormResponses", query: ["q=account", "account", "versionedLeadGenFormUrn", "count", "start"] },
1954
+
1955
+ // ── Ad Reporting (5) ──────────────────────────────────────
1956
+ get_performance_metrics: { method: "GET", path: "/v2/adAnalyticsV2", query: ["q=analytics", "dateRange", "accounts", "campaigns", "creatives", "pivot", "timeGranularity", "fields"] },
1957
+ get_aggregate_statistics: { method: "GET", path: "/v2/adAnalyticsV2", query: ["q=statistics", "accounts", "dateRange", "fields"] },
1958
+ get_conversion_tracking: { method: "GET", path: "/v2/conversionTrackingV2", query: ["q=account", "account", "count", "start"] },
1959
+ get_budget_reports: { method: "GET", path: "/v2/adBudgetV2", query: ["q=account", "account", "count", "start"] },
1960
+ get_inmail_analytics: { method: "GET", path: "/v2/adInMailContentV2", query: ["q=account", "account", "campaign", "count", "start"] },
1961
+
1962
+ // ── Events (5) ────────────────────────────────────────────
1963
+ create_event: { method: "POST", path: "/v2/events", body: { organizer: "", name: { locale: { language: "en", country: "US" }, value: "" }, description: {}, startAt: "", endAt: "" } },
1964
+ get_event: { method: "GET", path: "/v2/events/{eventId}" },
1965
+ update_event: { method: "PUT", path: "/v2/events/{eventId}", body: {} },
1966
+ delete_event: { method: "DELETE", path: "/v2/events/{eventId}" },
1967
+ list_event_attendees: { method: "GET", path: "/v2/eventAttendees", query: ["q=event", "event", "count", "start"] },
1603
1968
  },
1604
1969
  authHeader: (creds) => ({
1605
1970
  "Authorization": `Bearer ${creds.access_token}`,
@@ -1918,6 +2283,1055 @@ export const SERVICE_CATALOG = {
1918
2283
  }),
1919
2284
  },
1920
2285
 
2286
+ // ── Figma ─────────────────────────────────────────────────
2287
+ figma: {
2288
+ name: "Figma",
2289
+ type: "design",
2290
+ description: "Design platform — files, components, styles, variables, images, comments, webhooks, dev resources",
2291
+ baseUrl: "https://api.figma.com",
2292
+ authType: "api_key",
2293
+ credentialKeys: ["personalAccessToken"],
2294
+ capabilities: [
2295
+ { name: "manage_files", actions: ["get", "list"], description: "Read design files and nodes" },
2296
+ { name: "export_images", actions: ["export"], description: "Export frames as PNG/SVG/PDF" },
2297
+ { name: "manage_components", actions: ["list", "get"], description: "List and read components and styles" },
2298
+ { name: "manage_variables", actions: ["get", "update"], description: "Read and write design tokens/variables" },
2299
+ { name: "manage_comments", actions: ["list", "create", "delete"], description: "Manage file comments" },
2300
+ { name: "manage_webhooks", actions: ["create", "list", "delete"], description: "Subscribe to design events" },
2301
+ { name: "manage_dev_resources", actions: ["create", "list", "delete"], description: "Manage developer annotations" },
2302
+ ],
2303
+ endpoints: {
2304
+ get_file: { method: "GET", path: "/v1/files/{file_key}" },
2305
+ get_file_nodes: { method: "GET", path: "/v1/files/{file_key}/nodes", query: ["ids", "depth"] },
2306
+ get_file_meta: { method: "GET", path: "/v1/files/{file_key}/meta" },
2307
+ get_file_versions: { method: "GET", path: "/v1/files/{file_key}/versions" },
2308
+ export_images: { method: "GET", path: "/v1/images/{file_key}", query: ["ids", "scale", "format", "svg_outline_text"] },
2309
+ get_image_fills: { method: "GET", path: "/v1/files/{file_key}/images" },
2310
+ get_team_components: { method: "GET", path: "/v1/teams/{team_id}/components", query: ["page_size", "after"] },
2311
+ get_file_components: { method: "GET", path: "/v1/files/{file_key}/components" },
2312
+ get_component: { method: "GET", path: "/v1/components/{key}" },
2313
+ get_team_component_sets: { method: "GET", path: "/v1/teams/{team_id}/component_sets" },
2314
+ get_team_styles: { method: "GET", path: "/v1/teams/{team_id}/styles" },
2315
+ get_file_styles: { method: "GET", path: "/v1/files/{file_key}/styles" },
2316
+ get_style: { method: "GET", path: "/v1/styles/{key}" },
2317
+ get_local_variables: { method: "GET", path: "/v1/files/{file_key}/variables/local" },
2318
+ get_published_variables: { method: "GET", path: "/v1/files/{file_key}/variables/published" },
2319
+ update_variables: { method: "POST", path: "/v1/files/{file_key}/variables", body: {} },
2320
+ get_comments: { method: "GET", path: "/v1/files/{file_key}/comments" },
2321
+ post_comment: { method: "POST", path: "/v1/files/{file_key}/comments", body: { message: "" } },
2322
+ delete_comment: { method: "DELETE", path: "/v1/files/{file_key}/comments/{comment_id}" },
2323
+ react_to_comment: { method: "POST", path: "/v1/files/{file_key}/comments/{comment_id}/reactions", body: { emoji: "" } },
2324
+ create_webhook: { method: "POST", path: "/v2/webhooks", body: { event_type: "", team_id: "", endpoint: "", passcode: "" } },
2325
+ list_webhooks: { method: "GET", path: "/v2/webhooks", query: ["team_id"] },
2326
+ get_webhook: { method: "GET", path: "/v2/webhooks/{webhook_id}" },
2327
+ update_webhook: { method: "PUT", path: "/v2/webhooks/{webhook_id}", body: {} },
2328
+ delete_webhook: { method: "DELETE", path: "/v2/webhooks/{webhook_id}" },
2329
+ get_dev_resources: { method: "GET", path: "/v1/files/{file_key}/dev_resources", query: ["node_ids"] },
2330
+ create_dev_resources: { method: "POST", path: "/v1/dev_resources", body: { dev_resources: [] } },
2331
+ update_dev_resources: { method: "PUT", path: "/v1/dev_resources", body: { dev_resources: [] } },
2332
+ delete_dev_resource: { method: "DELETE", path: "/v1/files/{file_key}/dev_resources/{dev_resource_id}" },
2333
+ list_projects: { method: "GET", path: "/v1/teams/{team_id}/projects" },
2334
+ list_project_files: { method: "GET", path: "/v1/projects/{project_id}/files" },
2335
+ get_me: { method: "GET", path: "/v1/me" },
2336
+ },
2337
+ authHeader: (creds) => ({ "X-Figma-Token": creds.personalAccessToken }),
2338
+ },
2339
+
2340
+ // ── ElevenLabs ──────────────────────────────────────────
2341
+ elevenlabs: {
2342
+ name: "ElevenLabs",
2343
+ type: "ai",
2344
+ description: "AI voice synthesis — text-to-speech, voice cloning, audio generation",
2345
+ baseUrl: "https://api.elevenlabs.io",
2346
+ authType: "api_key",
2347
+ credentialKeys: ["apiKey"],
2348
+ capabilities: [
2349
+ { name: "text_to_speech", actions: ["generate"], description: "Convert text to natural speech" },
2350
+ { name: "manage_voices", actions: ["list", "get", "clone"], description: "List, get, and clone voices" },
2351
+ { name: "manage_audio", actions: ["get_history"], description: "View generation history" },
2352
+ ],
2353
+ endpoints: {
2354
+ text_to_speech: { method: "POST", path: "/v1/text-to-speech/{voice_id}", body: { text: "", model_id: "eleven_monolingual_v1" } },
2355
+ text_to_speech_stream: { method: "POST", path: "/v1/text-to-speech/{voice_id}/stream", body: { text: "", model_id: "eleven_monolingual_v1" } },
2356
+ list_voices: { method: "GET", path: "/v1/voices" },
2357
+ get_voice: { method: "GET", path: "/v1/voices/{voice_id}" },
2358
+ delete_voice: { method: "DELETE", path: "/v1/voices/{voice_id}" },
2359
+ get_models: { method: "GET", path: "/v1/models" },
2360
+ get_history: { method: "GET", path: "/v1/history", query: ["page_size", "start_after_history_item_id"] },
2361
+ get_user: { method: "GET", path: "/v1/user" },
2362
+ },
2363
+ authHeader: (creds) => ({ "xi-api-key": creds.apiKey, "Content-Type": "application/json" }),
2364
+ },
2365
+
2366
+ // ── Deepgram ────────────────────────────────────────────
2367
+ deepgram: {
2368
+ name: "Deepgram",
2369
+ type: "ai",
2370
+ description: "Speech-to-text and audio intelligence — transcription, summarization, topic detection",
2371
+ baseUrl: "https://api.deepgram.com",
2372
+ authType: "api_key",
2373
+ credentialKeys: ["apiKey"],
2374
+ capabilities: [
2375
+ { name: "transcribe", actions: ["transcribe_url", "transcribe_file"], description: "Convert speech to text" },
2376
+ { name: "manage_projects", actions: ["list", "get"], description: "Manage Deepgram projects" },
2377
+ { name: "manage_keys", actions: ["list", "create"], description: "Manage API keys" },
2378
+ ],
2379
+ endpoints: {
2380
+ transcribe_url: { method: "POST", path: "/v1/listen", query: ["model", "language", "punctuate", "diarize", "summarize", "topics"], body: { url: "" } },
2381
+ list_projects: { method: "GET", path: "/v1/projects" },
2382
+ get_project: { method: "GET", path: "/v1/projects/{project_id}" },
2383
+ list_keys: { method: "GET", path: "/v1/projects/{project_id}/keys" },
2384
+ create_key: { method: "POST", path: "/v1/projects/{project_id}/keys", body: { comment: "", scopes: [] } },
2385
+ get_usage: { method: "GET", path: "/v1/projects/{project_id}/usage", query: ["start", "end"] },
2386
+ list_balances: { method: "GET", path: "/v1/projects/{project_id}/balances" },
2387
+ },
2388
+ authHeader: (creds) => ({ "Authorization": `Token ${creds.apiKey}`, "Content-Type": "application/json" }),
2389
+ },
2390
+
2391
+ // ── Groq ────────────────────────────────────────────────
2392
+ groq: {
2393
+ name: "Groq",
2394
+ type: "ai",
2395
+ description: "Ultra-fast AI inference — chat completions, embeddings, audio transcription",
2396
+ baseUrl: "https://api.groq.com/openai",
2397
+ authType: "api_key",
2398
+ credentialKeys: ["apiKey"],
2399
+ capabilities: [
2400
+ { name: "chat", actions: ["complete"], description: "Chat completions with Llama, Mixtral, Gemma" },
2401
+ { name: "audio", actions: ["transcribe"], description: "Audio transcription via Whisper" },
2402
+ { name: "models", actions: ["list"], description: "List available models" },
2403
+ ],
2404
+ endpoints: {
2405
+ chat_completion: { method: "POST", path: "/v1/chat/completions", body: { model: "llama-3.3-70b-versatile", messages: [] } },
2406
+ create_transcription: { method: "POST", path: "/v1/audio/transcriptions", contentType: "multipart/form-data" },
2407
+ list_models: { method: "GET", path: "/v1/models" },
2408
+ },
2409
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.apiKey}`, "Content-Type": "application/json" }),
2410
+ },
2411
+
2412
+ // ── Cohere ──────────────────────────────────────────────
2413
+ cohere: {
2414
+ name: "Cohere",
2415
+ type: "ai",
2416
+ description: "Enterprise AI — text generation, embeddings, reranking, classification",
2417
+ baseUrl: "https://api.cohere.com",
2418
+ authType: "api_key",
2419
+ credentialKeys: ["apiKey"],
2420
+ capabilities: [
2421
+ { name: "generate", actions: ["chat", "generate"], description: "Text generation and chat" },
2422
+ { name: "embed", actions: ["embed"], description: "Create text embeddings" },
2423
+ { name: "rerank", actions: ["rerank"], description: "Rerank search results" },
2424
+ { name: "classify", actions: ["classify"], description: "Text classification" },
2425
+ ],
2426
+ endpoints: {
2427
+ chat: { method: "POST", path: "/v2/chat", body: { model: "command-r-plus", messages: [] } },
2428
+ generate: { method: "POST", path: "/v1/generate", body: { model: "command", prompt: "" } },
2429
+ embed: { method: "POST", path: "/v2/embed", body: { model: "embed-english-v3.0", texts: [], input_type: "search_document" } },
2430
+ rerank: { method: "POST", path: "/v2/rerank", body: { model: "rerank-english-v3.0", query: "", documents: [] } },
2431
+ classify: { method: "POST", path: "/v1/classify", body: { model: "embed-english-v3.0", inputs: [], examples: [] } },
2432
+ list_models: { method: "GET", path: "/v1/models" },
2433
+ },
2434
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.apiKey}`, "Content-Type": "application/json" }),
2435
+ },
2436
+
2437
+ // ── Mistral ─────────────────────────────────────────────
2438
+ mistral: {
2439
+ name: "Mistral",
2440
+ type: "ai",
2441
+ description: "Open-weight AI models — chat, embeddings, code generation, function calling",
2442
+ baseUrl: "https://api.mistral.ai",
2443
+ authType: "api_key",
2444
+ credentialKeys: ["apiKey"],
2445
+ capabilities: [
2446
+ { name: "chat", actions: ["complete"], description: "Chat completions" },
2447
+ { name: "embed", actions: ["embed"], description: "Text embeddings" },
2448
+ { name: "models", actions: ["list"], description: "List available models" },
2449
+ ],
2450
+ endpoints: {
2451
+ chat_completion: { method: "POST", path: "/v1/chat/completions", body: { model: "mistral-large-latest", messages: [] } },
2452
+ create_embedding: { method: "POST", path: "/v1/embeddings", body: { model: "mistral-embed", input: [] } },
2453
+ list_models: { method: "GET", path: "/v1/models" },
2454
+ },
2455
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.apiKey}`, "Content-Type": "application/json" }),
2456
+ },
2457
+
2458
+ // ── Replicate ───────────────────────────────────────────
2459
+ replicate: {
2460
+ name: "Replicate",
2461
+ type: "ai",
2462
+ description: "Run open-source AI models — image generation, LLMs, video, audio",
2463
+ baseUrl: "https://api.replicate.com",
2464
+ authType: "api_key",
2465
+ credentialKeys: ["apiKey"],
2466
+ capabilities: [
2467
+ { name: "predictions", actions: ["create", "get", "list", "cancel"], description: "Run model predictions" },
2468
+ { name: "models", actions: ["list", "get", "search"], description: "Browse and search models" },
2469
+ ],
2470
+ endpoints: {
2471
+ create_prediction: { method: "POST", path: "/v1/predictions", body: { version: "", input: {} } },
2472
+ get_prediction: { method: "GET", path: "/v1/predictions/{prediction_id}" },
2473
+ list_predictions: { method: "GET", path: "/v1/predictions" },
2474
+ cancel_prediction: { method: "POST", path: "/v1/predictions/{prediction_id}/cancel" },
2475
+ get_model: { method: "GET", path: "/v1/models/{owner}/{name}" },
2476
+ list_model_versions:{ method: "GET", path: "/v1/models/{owner}/{name}/versions" },
2477
+ search_models: { method: "GET", path: "/v1/models", query: ["query"] },
2478
+ list_collections: { method: "GET", path: "/v1/collections" },
2479
+ },
2480
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.apiKey}`, "Content-Type": "application/json" }),
2481
+ },
2482
+
2483
+ // ── Stability AI ────────────────────────────────────────
2484
+ stability: {
2485
+ name: "Stability AI",
2486
+ type: "ai",
2487
+ description: "Image generation — Stable Diffusion, upscaling, inpainting, image-to-image",
2488
+ baseUrl: "https://api.stability.ai",
2489
+ authType: "api_key",
2490
+ credentialKeys: ["apiKey"],
2491
+ capabilities: [
2492
+ { name: "generate_image", actions: ["generate", "upscale", "edit"], description: "Generate and edit images" },
2493
+ { name: "engines", actions: ["list"], description: "List available engines" },
2494
+ ],
2495
+ endpoints: {
2496
+ text_to_image: { method: "POST", path: "/v1/generation/{engine_id}/text-to-image", body: { text_prompts: [{ text: "" }], cfg_scale: 7, steps: 30 } },
2497
+ image_to_image: { method: "POST", path: "/v1/generation/{engine_id}/image-to-image", contentType: "multipart/form-data" },
2498
+ upscale: { method: "POST", path: "/v1/generation/{engine_id}/image-to-image/upscale", contentType: "multipart/form-data" },
2499
+ list_engines: { method: "GET", path: "/v1/engines/list" },
2500
+ get_account: { method: "GET", path: "/v1/user/account" },
2501
+ get_balance: { method: "GET", path: "/v1/user/balance" },
2502
+ },
2503
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.apiKey}`, "Content-Type": "application/json" }),
2504
+ },
2505
+
2506
+ // ── Telegram ────────────────────────────────────────────
2507
+ telegram: {
2508
+ name: "Telegram",
2509
+ type: "messaging",
2510
+ description: "Messaging platform — send messages, manage bots, groups, channels",
2511
+ baseUrl: "https://api.telegram.org/bot{botToken}",
2512
+ authType: "api_key",
2513
+ credentialKeys: ["botToken"],
2514
+ capabilities: [
2515
+ { name: "send_messages", actions: ["send_text", "send_photo", "send_document"], description: "Send messages, photos, files" },
2516
+ { name: "manage_chats", actions: ["get_chat", "get_members"], description: "Manage chats and groups" },
2517
+ { name: "manage_updates", actions: ["get_updates", "set_webhook"], description: "Receive and handle updates" },
2518
+ ],
2519
+ endpoints: {
2520
+ send_message: { method: "POST", path: "/sendMessage", body: { chat_id: "", text: "", parse_mode: "HTML" } },
2521
+ send_photo: { method: "POST", path: "/sendPhoto", body: { chat_id: "", photo: "", caption: "" } },
2522
+ send_document: { method: "POST", path: "/sendDocument", contentType: "multipart/form-data" },
2523
+ get_updates: { method: "GET", path: "/getUpdates", query: ["offset", "limit", "timeout"] },
2524
+ set_webhook: { method: "POST", path: "/setWebhook", body: { url: "" } },
2525
+ delete_webhook: { method: "POST", path: "/deleteWebhook" },
2526
+ get_chat: { method: "GET", path: "/getChat", query: ["chat_id"] },
2527
+ get_chat_member_count: { method: "GET", path: "/getChatMemberCount", query: ["chat_id"] },
2528
+ get_me: { method: "GET", path: "/getMe" },
2529
+ },
2530
+ authHeader: () => ({ "Content-Type": "application/json" }),
2531
+ },
2532
+
2533
+ // ── Postmark ────────────────────────────────────────────
2534
+ postmark: {
2535
+ name: "Postmark",
2536
+ type: "email",
2537
+ description: "Transactional email — send, templates, webhooks, bounce management",
2538
+ baseUrl: "https://api.postmarkapp.com",
2539
+ authType: "api_key",
2540
+ credentialKeys: ["serverToken"],
2541
+ capabilities: [
2542
+ { name: "send_email", actions: ["send", "send_batch", "send_template"], description: "Send transactional emails" },
2543
+ { name: "manage_templates", actions: ["list", "get", "create"], description: "Manage email templates" },
2544
+ { name: "manage_bounces", actions: ["list", "get"], description: "Track bounces and deliverability" },
2545
+ ],
2546
+ endpoints: {
2547
+ send_email: { method: "POST", path: "/email", body: { From: "", To: "", Subject: "", HtmlBody: "" } },
2548
+ send_batch: { method: "POST", path: "/email/batch", body: [] },
2549
+ send_template: { method: "POST", path: "/email/withTemplate", body: { TemplateId: 0, To: "", TemplateModel: {} } },
2550
+ list_templates: { method: "GET", path: "/templates", query: ["Count", "Offset"] },
2551
+ get_template: { method: "GET", path: "/templates/{templateId}" },
2552
+ create_template: { method: "POST", path: "/templates", body: { Name: "", Subject: "", HtmlBody: "" } },
2553
+ list_bounces: { method: "GET", path: "/bounces", query: ["count", "offset", "type"] },
2554
+ get_delivery_stats: { method: "GET", path: "/deliverystats" },
2555
+ get_server: { method: "GET", path: "/server" },
2556
+ },
2557
+ authHeader: (creds) => ({ "X-Postmark-Server-Token": creds.serverToken, "Content-Type": "application/json", "Accept": "application/json" }),
2558
+ },
2559
+
2560
+ // ── Mailgun ─────────────────────────────────────────────
2561
+ mailgun: {
2562
+ name: "Mailgun",
2563
+ type: "email",
2564
+ description: "Email API — send, receive, validate, track deliverability",
2565
+ baseUrl: "https://api.mailgun.net/v3",
2566
+ authType: "api_key",
2567
+ credentialKeys: ["apiKey", "domain"],
2568
+ capabilities: [
2569
+ { name: "send_email", actions: ["send"], description: "Send emails" },
2570
+ { name: "manage_domains", actions: ["list", "get"], description: "Manage sending domains" },
2571
+ { name: "track_events", actions: ["list"], description: "Track email events" },
2572
+ { name: "validate_email", actions: ["validate"], description: "Validate email addresses" },
2573
+ ],
2574
+ endpoints: {
2575
+ send_message: { method: "POST", path: "/{domain}/messages", contentType: "multipart/form-data" },
2576
+ list_domains: { method: "GET", path: "/domains" },
2577
+ get_domain: { method: "GET", path: "/domains/{domain}" },
2578
+ list_events: { method: "GET", path: "/{domain}/events", query: ["begin", "end", "event", "limit"] },
2579
+ get_stats: { method: "GET", path: "/{domain}/stats/total", query: ["event", "start", "end"] },
2580
+ validate_email: { method: "GET", path: "/address/validate", query: ["address"] },
2581
+ list_bounces: { method: "GET", path: "/{domain}/bounces" },
2582
+ list_unsubscribes: { method: "GET", path: "/{domain}/unsubscribes" },
2583
+ },
2584
+ authHeader: (creds) => ({ "Authorization": "Basic " + Buffer.from("api:" + creds.apiKey).toString("base64") }),
2585
+ },
2586
+
2587
+ // ── ConvertKit ──────────────────────────────────────────
2588
+ convertkit: {
2589
+ name: "ConvertKit",
2590
+ type: "email_marketing",
2591
+ description: "Creator email marketing — subscribers, sequences, broadcasts, forms, tags",
2592
+ baseUrl: "https://api.convertkit.com/v3",
2593
+ authType: "api_key",
2594
+ credentialKeys: ["apiSecret"],
2595
+ capabilities: [
2596
+ { name: "manage_subscribers", actions: ["list", "get", "create", "tag"], description: "Manage subscribers" },
2597
+ { name: "manage_sequences", actions: ["list", "subscribe"], description: "Manage email sequences" },
2598
+ { name: "manage_broadcasts", actions: ["list", "create"], description: "Send broadcasts" },
2599
+ { name: "manage_tags", actions: ["list", "create"], description: "Manage subscriber tags" },
2600
+ { name: "manage_forms", actions: ["list", "subscribe"], description: "Manage signup forms" },
2601
+ ],
2602
+ endpoints: {
2603
+ list_subscribers: { method: "GET", path: "/subscribers", query: ["api_secret", "page", "sort_order"] },
2604
+ get_subscriber: { method: "GET", path: "/subscribers/{subscriber_id}", query: ["api_secret"] },
2605
+ create_subscriber: { method: "POST", path: "/forms/{form_id}/subscribe", body: { api_secret: "", email: "" } },
2606
+ tag_subscriber: { method: "POST", path: "/tags/{tag_id}/subscribe", body: { api_secret: "", email: "" } },
2607
+ list_tags: { method: "GET", path: "/tags", query: ["api_secret"] },
2608
+ create_tag: { method: "POST", path: "/tags", body: { api_secret: "", tag: { name: "" } } },
2609
+ list_sequences: { method: "GET", path: "/sequences", query: ["api_secret"] },
2610
+ add_to_sequence: { method: "POST", path: "/sequences/{sequence_id}/subscribe", body: { api_secret: "", email: "" } },
2611
+ list_forms: { method: "GET", path: "/forms", query: ["api_secret"] },
2612
+ list_broadcasts: { method: "GET", path: "/broadcasts", query: ["api_secret"] },
2613
+ create_broadcast: { method: "POST", path: "/broadcasts", body: { api_secret: "", subject: "", content: "" } },
2614
+ },
2615
+ authHeader: () => ({ "Content-Type": "application/json" }),
2616
+ },
2617
+
2618
+ // ── Brevo (Sendinblue) ──────────────────────────────────
2619
+ brevo: {
2620
+ name: "Brevo",
2621
+ type: "email_marketing",
2622
+ description: "Email & SMS marketing — campaigns, transactional, contacts, automation",
2623
+ baseUrl: "https://api.brevo.com/v3",
2624
+ authType: "api_key",
2625
+ credentialKeys: ["apiKey"],
2626
+ capabilities: [
2627
+ { name: "send_email", actions: ["send_transactional", "send_campaign"], description: "Send transactional and campaign emails" },
2628
+ { name: "manage_contacts", actions: ["create", "update", "list"], description: "Manage contact lists" },
2629
+ { name: "send_sms", actions: ["send"], description: "Send SMS messages" },
2630
+ ],
2631
+ endpoints: {
2632
+ send_transactional: { method: "POST", path: "/smtp/email", body: { sender: {}, to: [{}], subject: "", htmlContent: "" } },
2633
+ list_contacts: { method: "GET", path: "/contacts", query: ["limit", "offset", "sort"] },
2634
+ create_contact: { method: "POST", path: "/contacts", body: { email: "", attributes: {} } },
2635
+ update_contact: { method: "PUT", path: "/contacts/{identifier}", body: { attributes: {} } },
2636
+ get_contact: { method: "GET", path: "/contacts/{identifier}" },
2637
+ list_lists: { method: "GET", path: "/contacts/lists", query: ["limit", "offset"] },
2638
+ send_sms: { method: "POST", path: "/transactionalSMS/sms", body: { sender: "", recipient: "", content: "" } },
2639
+ get_account: { method: "GET", path: "/account" },
2640
+ },
2641
+ authHeader: (creds) => ({ "api-key": creds.apiKey, "Content-Type": "application/json" }),
2642
+ },
2643
+
2644
+ // ── ActiveCampaign ──────────────────────────────────────
2645
+ activecampaign: {
2646
+ name: "ActiveCampaign",
2647
+ type: "email_marketing",
2648
+ description: "Email marketing + CRM — contacts, automations, deals, campaigns, tags",
2649
+ baseUrl: "https://{accountName}.api-us1.com/api/3",
2650
+ authType: "api_key",
2651
+ credentialKeys: ["apiKey", "accountName"],
2652
+ capabilities: [
2653
+ { name: "manage_contacts", actions: ["create", "update", "list", "search"], description: "Manage contacts" },
2654
+ { name: "manage_tags", actions: ["list", "add", "remove"], description: "Tag contacts" },
2655
+ { name: "manage_automations", actions: ["list"], description: "List automations" },
2656
+ { name: "manage_deals", actions: ["create", "list", "update"], description: "Manage CRM deals" },
2657
+ ],
2658
+ endpoints: {
2659
+ create_contact: { method: "POST", path: "/contacts", body: { contact: { email: "", firstName: "", lastName: "" } } },
2660
+ list_contacts: { method: "GET", path: "/contacts", query: ["search", "limit", "offset"] },
2661
+ get_contact: { method: "GET", path: "/contacts/{id}" },
2662
+ update_contact: { method: "PUT", path: "/contacts/{id}", body: { contact: {} } },
2663
+ add_tag: { method: "POST", path: "/contactTags", body: { contactTag: { contact: "", tag: "" } } },
2664
+ list_tags: { method: "GET", path: "/tags", query: ["search", "limit"] },
2665
+ list_automations: { method: "GET", path: "/automations" },
2666
+ create_deal: { method: "POST", path: "/deals", body: { deal: { title: "", value: 0 } } },
2667
+ list_deals: { method: "GET", path: "/deals", query: ["search", "limit"] },
2668
+ list_lists: { method: "GET", path: "/lists" },
2669
+ },
2670
+ authHeader: (creds) => ({ "Api-Token": creds.apiKey, "Content-Type": "application/json" }),
2671
+ },
2672
+
2673
+ // ── Lemlist ─────────────────────────────────────────────
2674
+ lemlist: {
2675
+ name: "Lemlist",
2676
+ type: "cold_email",
2677
+ description: "Cold email outreach — campaigns, leads, sequences, email warmup",
2678
+ baseUrl: "https://api.lemlist.com/api",
2679
+ authType: "api_key",
2680
+ credentialKeys: ["apiKey"],
2681
+ capabilities: [
2682
+ { name: "manage_campaigns", actions: ["list", "get"], description: "Manage outreach campaigns" },
2683
+ { name: "manage_leads", actions: ["add", "list", "delete"], description: "Manage campaign leads" },
2684
+ { name: "manage_activities", actions: ["list"], description: "Track email activities" },
2685
+ ],
2686
+ endpoints: {
2687
+ list_campaigns: { method: "GET", path: "/campaigns" },
2688
+ get_campaign: { method: "GET", path: "/campaigns/{campaignId}" },
2689
+ add_lead: { method: "POST", path: "/campaigns/{campaignId}/leads/{email}", body: { firstName: "", lastName: "", companyName: "" } },
2690
+ list_leads: { method: "GET", path: "/campaigns/{campaignId}/leads" },
2691
+ delete_lead: { method: "DELETE", path: "/campaigns/{campaignId}/leads/{email}" },
2692
+ list_activities: { method: "GET", path: "/activities", query: ["campaignId", "type", "limit"] },
2693
+ get_team: { method: "GET", path: "/team" },
2694
+ },
2695
+ authHeader: (creds) => ({ "Authorization": "Basic " + Buffer.from(":" + creds.apiKey).toString("base64") }),
2696
+ },
2697
+
2698
+ // ── AWS ─────────────────────────────────────────────────
2699
+ aws: {
2700
+ name: "AWS",
2701
+ type: "cloud",
2702
+ description: "Amazon Web Services — S3 storage, Lambda functions, SES email, SNS notifications",
2703
+ baseUrl: "https://s3.amazonaws.com",
2704
+ authType: "aws_signature",
2705
+ credentialKeys: ["accessKeyId", "secretAccessKey", "region"],
2706
+ capabilities: [
2707
+ { name: "manage_s3", actions: ["list_buckets", "put_object", "get_object", "delete_object"], description: "S3 storage operations" },
2708
+ { name: "send_email", actions: ["send"], description: "Send email via SES" },
2709
+ { name: "manage_lambda", actions: ["invoke", "list"], description: "Lambda function management" },
2710
+ ],
2711
+ endpoints: {
2712
+ list_buckets: { method: "GET", path: "/" },
2713
+ list_objects: { method: "GET", path: "/{bucket}", query: ["prefix", "max-keys", "delimiter"] },
2714
+ put_object: { method: "PUT", path: "/{bucket}/{key}" },
2715
+ get_object: { method: "GET", path: "/{bucket}/{key}" },
2716
+ delete_object: { method: "DELETE", path: "/{bucket}/{key}" },
2717
+ },
2718
+ authHeader: (creds) => ({ "Content-Type": "application/json" }),
2719
+ },
2720
+
2721
+ // ── Webflow ─────────────────────────────────────────────
2722
+ webflow: {
2723
+ name: "Webflow",
2724
+ type: "websites",
2725
+ description: "Visual web builder — sites, CMS collections, forms, e-commerce, memberships",
2726
+ baseUrl: "https://api.webflow.com/v2",
2727
+ authType: "api_key",
2728
+ credentialKeys: ["accessToken"],
2729
+ capabilities: [
2730
+ { name: "manage_sites", actions: ["list", "get", "publish"], description: "Manage Webflow sites" },
2731
+ { name: "manage_collections", actions: ["list", "get", "create_item"], description: "Manage CMS collections" },
2732
+ { name: "manage_forms", actions: ["list", "get_submissions"], description: "Get form submissions" },
2733
+ { name: "manage_ecommerce", actions: ["list_products", "create_order"], description: "E-commerce operations" },
2734
+ ],
2735
+ endpoints: {
2736
+ list_sites: { method: "GET", path: "/sites" },
2737
+ get_site: { method: "GET", path: "/sites/{site_id}" },
2738
+ publish_site: { method: "POST", path: "/sites/{site_id}/publish", body: { domains: [] } },
2739
+ list_collections: { method: "GET", path: "/sites/{site_id}/collections" },
2740
+ get_collection: { method: "GET", path: "/collections/{collection_id}" },
2741
+ list_items: { method: "GET", path: "/collections/{collection_id}/items", query: ["limit", "offset"] },
2742
+ create_item: { method: "POST", path: "/collections/{collection_id}/items", body: { fieldData: {} } },
2743
+ update_item: { method: "PATCH", path: "/collections/{collection_id}/items/{item_id}", body: { fieldData: {} } },
2744
+ delete_item: { method: "DELETE", path: "/collections/{collection_id}/items/{item_id}" },
2745
+ list_forms: { method: "GET", path: "/sites/{site_id}/forms" },
2746
+ list_form_submissions: { method: "GET", path: "/forms/{form_id}/submissions" },
2747
+ list_products: { method: "GET", path: "/sites/{site_id}/products" },
2748
+ },
2749
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.accessToken}`, "Content-Type": "application/json" }),
2750
+ },
2751
+
2752
+ // ── WordPress ───────────────────────────────────────────
2753
+ wordpress: {
2754
+ name: "WordPress",
2755
+ type: "websites",
2756
+ description: "WordPress REST API — posts, pages, media, users, comments, plugins",
2757
+ baseUrl: "https://{siteUrl}/wp-json/wp/v2",
2758
+ authType: "basic",
2759
+ credentialKeys: ["siteUrl", "username", "applicationPassword"],
2760
+ capabilities: [
2761
+ { name: "manage_posts", actions: ["create", "update", "list", "delete"], description: "Manage blog posts" },
2762
+ { name: "manage_pages", actions: ["create", "update", "list"], description: "Manage pages" },
2763
+ { name: "manage_media", actions: ["upload", "list"], description: "Manage media library" },
2764
+ { name: "manage_users", actions: ["list", "get"], description: "Manage users" },
2765
+ ],
2766
+ endpoints: {
2767
+ list_posts: { method: "GET", path: "/posts", query: ["per_page", "page", "search", "status"] },
2768
+ create_post: { method: "POST", path: "/posts", body: { title: "", content: "", status: "draft" } },
2769
+ update_post: { method: "PUT", path: "/posts/{id}", body: {} },
2770
+ delete_post: { method: "DELETE", path: "/posts/{id}" },
2771
+ list_pages: { method: "GET", path: "/pages", query: ["per_page", "page", "search"] },
2772
+ create_page: { method: "POST", path: "/pages", body: { title: "", content: "", status: "draft" } },
2773
+ update_page: { method: "PUT", path: "/pages/{id}", body: {} },
2774
+ list_media: { method: "GET", path: "/media", query: ["per_page", "page"] },
2775
+ upload_media: { method: "POST", path: "/media", contentType: "multipart/form-data" },
2776
+ list_users: { method: "GET", path: "/users" },
2777
+ list_comments: { method: "GET", path: "/comments", query: ["post", "per_page"] },
2778
+ list_categories: { method: "GET", path: "/categories" },
2779
+ list_tags: { method: "GET", path: "/tags" },
2780
+ },
2781
+ authHeader: (creds) => ({ "Authorization": "Basic " + Buffer.from(creds.username + ":" + creds.applicationPassword).toString("base64"), "Content-Type": "application/json" }),
2782
+ },
2783
+
2784
+ // ── Monday.com ──────────────────────────────────────────
2785
+ monday: {
2786
+ name: "Monday.com",
2787
+ type: "project_mgmt",
2788
+ description: "Work management — boards, items, columns, updates, automations via GraphQL",
2789
+ baseUrl: "https://api.monday.com/v2",
2790
+ authType: "api_key",
2791
+ credentialKeys: ["apiKey"],
2792
+ capabilities: [
2793
+ { name: "manage_boards", actions: ["list", "create"], description: "Manage boards" },
2794
+ { name: "manage_items", actions: ["create", "update", "list"], description: "Manage items/rows" },
2795
+ { name: "manage_updates", actions: ["create", "list"], description: "Post updates on items" },
2796
+ ],
2797
+ endpoints: {
2798
+ graphql: { method: "POST", path: "/", body: { query: "" } },
2799
+ },
2800
+ authHeader: (creds) => ({ "Authorization": creds.apiKey, "Content-Type": "application/json" }),
2801
+ },
2802
+
2803
+ // ── Trello ──────────────────────────────────────────────
2804
+ trello: {
2805
+ name: "Trello",
2806
+ type: "project_mgmt",
2807
+ description: "Kanban boards — cards, lists, boards, checklists, labels, members",
2808
+ baseUrl: "https://api.trello.com/1",
2809
+ authType: "api_key",
2810
+ credentialKeys: ["apiKey", "apiToken"],
2811
+ capabilities: [
2812
+ { name: "manage_boards", actions: ["list", "get", "create"], description: "Manage Trello boards" },
2813
+ { name: "manage_cards", actions: ["create", "update", "move", "delete"], description: "Manage cards" },
2814
+ { name: "manage_lists", actions: ["create", "list"], description: "Manage lists" },
2815
+ ],
2816
+ endpoints: {
2817
+ list_boards: { method: "GET", path: "/members/me/boards", query: ["key", "token"] },
2818
+ get_board: { method: "GET", path: "/boards/{id}", query: ["key", "token"] },
2819
+ create_board: { method: "POST", path: "/boards", query: ["key", "token", "name"] },
2820
+ get_lists: { method: "GET", path: "/boards/{boardId}/lists", query: ["key", "token"] },
2821
+ create_list: { method: "POST", path: "/lists", query: ["key", "token", "name", "idBoard"] },
2822
+ create_card: { method: "POST", path: "/cards", query: ["key", "token", "name", "idList"] },
2823
+ update_card: { method: "PUT", path: "/cards/{id}", query: ["key", "token"] },
2824
+ delete_card: { method: "DELETE", path: "/cards/{id}", query: ["key", "token"] },
2825
+ get_card: { method: "GET", path: "/cards/{id}", query: ["key", "token"] },
2826
+ list_labels: { method: "GET", path: "/boards/{boardId}/labels", query: ["key", "token"] },
2827
+ },
2828
+ authHeader: () => ({}),
2829
+ },
2830
+
2831
+ // ── Typeform ────────────────────────────────────────────
2832
+ typeform: {
2833
+ name: "Typeform",
2834
+ type: "forms",
2835
+ description: "Interactive forms — create forms, collect responses, webhooks",
2836
+ baseUrl: "https://api.typeform.com",
2837
+ authType: "api_key",
2838
+ credentialKeys: ["accessToken"],
2839
+ capabilities: [
2840
+ { name: "manage_forms", actions: ["list", "get", "create"], description: "Manage forms" },
2841
+ { name: "manage_responses", actions: ["list"], description: "Get form responses" },
2842
+ { name: "manage_webhooks", actions: ["create", "list"], description: "Manage form webhooks" },
2843
+ ],
2844
+ endpoints: {
2845
+ list_forms: { method: "GET", path: "/forms", query: ["page", "page_size", "search"] },
2846
+ get_form: { method: "GET", path: "/forms/{form_id}" },
2847
+ create_form: { method: "POST", path: "/forms", body: { title: "", fields: [] } },
2848
+ list_responses: { method: "GET", path: "/forms/{form_id}/responses", query: ["page_size", "since", "until"] },
2849
+ create_webhook: { method: "PUT", path: "/forms/{form_id}/webhooks/{tag}", body: { url: "", enabled: true } },
2850
+ list_webhooks: { method: "GET", path: "/forms/{form_id}/webhooks" },
2851
+ list_workspaces: { method: "GET", path: "/workspaces" },
2852
+ },
2853
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.accessToken}`, "Content-Type": "application/json" }),
2854
+ },
2855
+
2856
+ // ── DocuSign ────────────────────────────────────────────
2857
+ docusign: {
2858
+ name: "DocuSign",
2859
+ type: "productivity",
2860
+ description: "E-signatures — envelopes, templates, recipients, signing workflows",
2861
+ baseUrl: "https://demo.docusign.net/restapi/v2.1",
2862
+ authType: "oauth",
2863
+ credentialKeys: ["accessToken", "accountId"],
2864
+ capabilities: [
2865
+ { name: "manage_envelopes", actions: ["create", "get", "list", "send"], description: "Create and send documents for signing" },
2866
+ { name: "manage_templates", actions: ["list", "get"], description: "Manage document templates" },
2867
+ ],
2868
+ endpoints: {
2869
+ create_envelope: { method: "POST", path: "/accounts/{accountId}/envelopes", body: { emailSubject: "", documents: [], recipients: {}, status: "sent" } },
2870
+ get_envelope: { method: "GET", path: "/accounts/{accountId}/envelopes/{envelopeId}" },
2871
+ list_envelopes: { method: "GET", path: "/accounts/{accountId}/envelopes", query: ["from_date", "status"] },
2872
+ list_recipients: { method: "GET", path: "/accounts/{accountId}/envelopes/{envelopeId}/recipients" },
2873
+ list_templates: { method: "GET", path: "/accounts/{accountId}/templates" },
2874
+ get_template: { method: "GET", path: "/accounts/{accountId}/templates/{templateId}" },
2875
+ },
2876
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.accessToken}`, "Content-Type": "application/json" }),
2877
+ },
2878
+
2879
+ // ── Xero ────────────────────────────────────────────────
2880
+ xero: {
2881
+ name: "Xero",
2882
+ type: "accounting",
2883
+ description: "Cloud accounting — invoices, contacts, payments, bank reconciliation, reports",
2884
+ baseUrl: "https://api.xero.com/api.xro/2.0",
2885
+ authType: "oauth",
2886
+ credentialKeys: ["accessToken", "tenantId"],
2887
+ capabilities: [
2888
+ { name: "manage_invoices", actions: ["create", "list", "get"], description: "Manage invoices" },
2889
+ { name: "manage_contacts", actions: ["create", "list", "get"], description: "Manage accounting contacts" },
2890
+ { name: "manage_payments", actions: ["create", "list"], description: "Record payments" },
2891
+ ],
2892
+ endpoints: {
2893
+ list_invoices: { method: "GET", path: "/Invoices" },
2894
+ create_invoice: { method: "POST", path: "/Invoices", body: { Type: "ACCREC", Contact: {}, LineItems: [] } },
2895
+ get_invoice: { method: "GET", path: "/Invoices/{InvoiceID}" },
2896
+ list_contacts: { method: "GET", path: "/Contacts" },
2897
+ create_contact: { method: "POST", path: "/Contacts", body: { Name: "", EmailAddress: "" } },
2898
+ list_payments: { method: "GET", path: "/Payments" },
2899
+ create_payment: { method: "PUT", path: "/Payments", body: { Invoice: {}, Account: {}, Amount: 0 } },
2900
+ list_accounts: { method: "GET", path: "/Accounts" },
2901
+ get_organisation: { method: "GET", path: "/Organisation" },
2902
+ },
2903
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.accessToken}`, "xero-tenant-id": creds.tenantId, "Content-Type": "application/json" }),
2904
+ },
2905
+
2906
+ // ── Freshdesk ───────────────────────────────────────────
2907
+ freshdesk: {
2908
+ name: "Freshdesk",
2909
+ type: "support",
2910
+ description: "Help desk — tickets, contacts, agents, groups, automations",
2911
+ baseUrl: "https://{domain}.freshdesk.com/api/v2",
2912
+ authType: "api_key",
2913
+ credentialKeys: ["apiKey", "domain"],
2914
+ capabilities: [
2915
+ { name: "manage_tickets", actions: ["create", "update", "list", "get"], description: "Manage support tickets" },
2916
+ { name: "manage_contacts", actions: ["create", "list", "get"], description: "Manage contacts" },
2917
+ ],
2918
+ endpoints: {
2919
+ list_tickets: { method: "GET", path: "/tickets", query: ["per_page", "page", "filter"] },
2920
+ create_ticket: { method: "POST", path: "/tickets", body: { subject: "", description: "", email: "", priority: 1, status: 2 } },
2921
+ update_ticket: { method: "PUT", path: "/tickets/{id}", body: {} },
2922
+ get_ticket: { method: "GET", path: "/tickets/{id}" },
2923
+ list_contacts: { method: "GET", path: "/contacts", query: ["per_page", "page"] },
2924
+ create_contact: { method: "POST", path: "/contacts", body: { name: "", email: "" } },
2925
+ get_contact: { method: "GET", path: "/contacts/{id}" },
2926
+ list_agents: { method: "GET", path: "/agents" },
2927
+ },
2928
+ authHeader: (creds) => ({ "Authorization": "Basic " + Buffer.from(creds.apiKey + ":X").toString("base64"), "Content-Type": "application/json" }),
2929
+ },
2930
+
2931
+ // ── WooCommerce ─────────────────────────────────────────
2932
+ woocommerce: {
2933
+ name: "WooCommerce",
2934
+ type: "ecommerce",
2935
+ description: "WordPress e-commerce — products, orders, customers, coupons, reports",
2936
+ baseUrl: "https://{siteUrl}/wp-json/wc/v3",
2937
+ authType: "basic",
2938
+ credentialKeys: ["siteUrl", "consumerKey", "consumerSecret"],
2939
+ capabilities: [
2940
+ { name: "manage_products", actions: ["create", "update", "list", "delete"], description: "Manage products" },
2941
+ { name: "manage_orders", actions: ["create", "update", "list"], description: "Manage orders" },
2942
+ { name: "manage_customers", actions: ["create", "list", "get"], description: "Manage customers" },
2943
+ { name: "manage_coupons", actions: ["create", "list"], description: "Manage coupons" },
2944
+ ],
2945
+ endpoints: {
2946
+ list_products: { method: "GET", path: "/products", query: ["per_page", "page", "search", "status"] },
2947
+ create_product: { method: "POST", path: "/products", body: { name: "", type: "simple", regular_price: "" } },
2948
+ update_product: { method: "PUT", path: "/products/{id}", body: {} },
2949
+ get_product: { method: "GET", path: "/products/{id}" },
2950
+ list_orders: { method: "GET", path: "/orders", query: ["per_page", "page", "status"] },
2951
+ create_order: { method: "POST", path: "/orders", body: { line_items: [] } },
2952
+ update_order: { method: "PUT", path: "/orders/{id}", body: {} },
2953
+ list_customers: { method: "GET", path: "/customers", query: ["per_page", "page", "search"] },
2954
+ create_customer: { method: "POST", path: "/customers", body: { email: "", first_name: "", last_name: "" } },
2955
+ list_coupons: { method: "GET", path: "/coupons" },
2956
+ create_coupon: { method: "POST", path: "/coupons", body: { code: "", amount: "", discount_type: "percent" } },
2957
+ get_reports: { method: "GET", path: "/reports/sales", query: ["period"] },
2958
+ },
2959
+ authHeader: (creds) => ({ "Authorization": "Basic " + Buffer.from(creds.consumerKey + ":" + creds.consumerSecret).toString("base64"), "Content-Type": "application/json" }),
2960
+ },
2961
+
2962
+ // ── YouTube ─────────────────────────────────────────────
2963
+ youtube: {
2964
+ name: "YouTube",
2965
+ type: "social_media",
2966
+ description: "Video platform — channels, videos, playlists, comments, analytics",
2967
+ baseUrl: "https://www.googleapis.com/youtube/v3",
2968
+ authType: "oauth",
2969
+ credentialKeys: ["accessToken", "apiKey"],
2970
+ capabilities: [
2971
+ { name: "manage_videos", actions: ["list", "search"], description: "Search and list videos" },
2972
+ { name: "manage_channels", actions: ["list"], description: "Get channel information" },
2973
+ { name: "manage_playlists", actions: ["list", "create"], description: "Manage playlists" },
2974
+ { name: "manage_comments", actions: ["list"], description: "List video comments" },
2975
+ ],
2976
+ endpoints: {
2977
+ search: { method: "GET", path: "/search", query: ["q", "type", "part", "maxResults", "order", "key"] },
2978
+ list_videos: { method: "GET", path: "/videos", query: ["id", "part", "chart", "maxResults", "key"] },
2979
+ list_channels: { method: "GET", path: "/channels", query: ["id", "part", "mine", "key"] },
2980
+ list_playlists: { method: "GET", path: "/playlists", query: ["channelId", "part", "maxResults", "key"] },
2981
+ list_playlist_items:{ method: "GET", path: "/playlistItems", query: ["playlistId", "part", "maxResults", "key"] },
2982
+ list_comments: { method: "GET", path: "/commentThreads", query: ["videoId", "part", "maxResults", "key"] },
2983
+ },
2984
+ authHeader: (creds) => creds.accessToken ? { "Authorization": `Bearer ${creds.accessToken}` } : {},
2985
+ },
2986
+
2987
+ // ── Netlify ─────────────────────────────────────────────
2988
+ netlify: {
2989
+ name: "Netlify",
2990
+ type: "cloud",
2991
+ description: "Web deployment — sites, deploys, forms, functions, DNS",
2992
+ baseUrl: "https://api.netlify.com/api/v1",
2993
+ authType: "api_key",
2994
+ credentialKeys: ["accessToken"],
2995
+ capabilities: [
2996
+ { name: "manage_sites", actions: ["list", "get", "create"], description: "Manage sites" },
2997
+ { name: "manage_deploys", actions: ["list", "create"], description: "Manage deployments" },
2998
+ { name: "manage_forms", actions: ["list"], description: "Get form submissions" },
2999
+ ],
3000
+ endpoints: {
3001
+ list_sites: { method: "GET", path: "/sites" },
3002
+ get_site: { method: "GET", path: "/sites/{site_id}" },
3003
+ create_site: { method: "POST", path: "/sites", body: { name: "" } },
3004
+ list_deploys: { method: "GET", path: "/sites/{site_id}/deploys" },
3005
+ get_deploy: { method: "GET", path: "/deploys/{deploy_id}" },
3006
+ list_forms: { method: "GET", path: "/sites/{site_id}/forms" },
3007
+ list_form_submissions: { method: "GET", path: "/forms/{form_id}/submissions" },
3008
+ list_dns_zones: { method: "GET", path: "/dns_zones" },
3009
+ get_account: { method: "GET", path: "/accounts" },
3010
+ },
3011
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.accessToken}` }),
3012
+ },
3013
+
3014
+ // ── Cloudflare (already exists but ensure it's comprehensive) ──
3015
+
3016
+ // ── Pinterest ───────────────────────────────────────────
3017
+ pinterest: {
3018
+ name: "Pinterest",
3019
+ type: "social_media",
3020
+ description: "Visual discovery — pins, boards, ads, analytics",
3021
+ baseUrl: "https://api.pinterest.com/v5",
3022
+ authType: "oauth",
3023
+ credentialKeys: ["accessToken"],
3024
+ capabilities: [
3025
+ { name: "manage_pins", actions: ["create", "list", "get"], description: "Manage pins" },
3026
+ { name: "manage_boards", actions: ["create", "list"], description: "Manage boards" },
3027
+ { name: "analytics", actions: ["get"], description: "Get account analytics" },
3028
+ ],
3029
+ endpoints: {
3030
+ create_pin: { method: "POST", path: "/pins", body: { board_id: "", title: "", description: "", media_source: {} } },
3031
+ list_pins: { method: "GET", path: "/pins", query: ["bookmark", "page_size"] },
3032
+ get_pin: { method: "GET", path: "/pins/{pin_id}" },
3033
+ list_boards: { method: "GET", path: "/boards", query: ["bookmark", "page_size"] },
3034
+ create_board: { method: "POST", path: "/boards", body: { name: "", description: "" } },
3035
+ get_user_account: { method: "GET", path: "/user_account" },
3036
+ get_analytics: { method: "GET", path: "/user_account/analytics", query: ["start_date", "end_date", "metric_types"] },
3037
+ },
3038
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.accessToken}`, "Content-Type": "application/json" }),
3039
+ },
3040
+
3041
+ // ── BigCommerce ──────────────────────────────────────────
3042
+ bigcommerce: {
3043
+ name: "BigCommerce", type: "ecommerce",
3044
+ description: "E-commerce platform — products, orders, customers, categories",
3045
+ baseUrl: "https://api.bigcommerce.com/stores/{store_hash}/v3",
3046
+ authType: "api_key", credentialKeys: ["accessToken", "storeHash"],
3047
+ capabilities: [
3048
+ { name: "manage_products", actions: ["create", "list", "get"], description: "Manage products" },
3049
+ { name: "manage_orders", actions: ["list", "get"], description: "Manage orders" },
3050
+ { name: "manage_customers", actions: ["create", "list"], description: "Manage customers" },
3051
+ ],
3052
+ endpoints: {
3053
+ list_products: { method: "GET", path: "/catalog/products", query: ["page", "limit"] },
3054
+ create_product: { method: "POST", path: "/catalog/products", body: { name: "", type: "physical", weight: 0, price: 0 } },
3055
+ get_product: { method: "GET", path: "/catalog/products/{product_id}" },
3056
+ list_orders: { method: "GET", path: "/orders", query: ["page", "limit"] },
3057
+ get_order: { method: "GET", path: "/orders/{order_id}" },
3058
+ list_customers: { method: "GET", path: "/customers", query: ["page", "limit"] },
3059
+ create_customer:{ method: "POST", path: "/customers", body: [{ email: "", first_name: "", last_name: "" }] },
3060
+ list_categories:{ method: "GET", path: "/catalog/categories" },
3061
+ },
3062
+ authHeader: (creds) => ({ "X-Auth-Token": creds.accessToken, "Content-Type": "application/json" }),
3063
+ },
3064
+
3065
+ // ── Twitch ──────────────────────────────────────────────
3066
+ twitch: {
3067
+ name: "Twitch", type: "social_media",
3068
+ description: "Live streaming — streams, users, channels, clips, chat",
3069
+ baseUrl: "https://api.twitch.tv/helix",
3070
+ authType: "oauth", credentialKeys: ["accessToken", "clientId"],
3071
+ capabilities: [
3072
+ { name: "manage_streams", actions: ["list"], description: "Get stream info" },
3073
+ { name: "manage_users", actions: ["get", "search"], description: "Get user data" },
3074
+ { name: "manage_clips", actions: ["list", "create"], description: "Manage clips" },
3075
+ ],
3076
+ endpoints: {
3077
+ get_streams: { method: "GET", path: "/streams", query: ["user_id", "user_login", "game_id", "first"] },
3078
+ get_users: { method: "GET", path: "/users", query: ["id", "login"] },
3079
+ search_channels: { method: "GET", path: "/search/channels", query: ["query", "first"] },
3080
+ get_clips: { method: "GET", path: "/clips", query: ["broadcaster_id", "id", "first"] },
3081
+ create_clip: { method: "POST", path: "/clips", query: ["broadcaster_id"] },
3082
+ get_channel_info: { method: "GET", path: "/channels", query: ["broadcaster_id"] },
3083
+ get_top_games: { method: "GET", path: "/games/top", query: ["first"] },
3084
+ },
3085
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.accessToken}`, "Client-Id": creds.clientId }),
3086
+ },
3087
+
3088
+ // ── Wave ────────────────────────────────────────────────
3089
+ wave: {
3090
+ name: "Wave", type: "accounting",
3091
+ description: "Free accounting — invoicing, payments, expenses via GraphQL",
3092
+ baseUrl: "https://gql.waveapps.com/graphql/public",
3093
+ authType: "oauth", credentialKeys: ["accessToken"],
3094
+ capabilities: [
3095
+ { name: "manage_invoices", actions: ["create", "list"], description: "Manage invoices" },
3096
+ { name: "manage_customers", actions: ["create", "list"], description: "Manage customers" },
3097
+ ],
3098
+ endpoints: {
3099
+ graphql: { method: "POST", path: "/", body: { query: "" } },
3100
+ },
3101
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.accessToken}`, "Content-Type": "application/json" }),
3102
+ },
3103
+
3104
+ // ── Loom ────────────────────────────────────────────────
3105
+ loom: {
3106
+ name: "Loom", type: "productivity",
3107
+ description: "Video messaging — recordings, transcripts, workspace",
3108
+ baseUrl: "https://developer.loom.com",
3109
+ authType: "api_key", credentialKeys: ["accessToken"],
3110
+ capabilities: [
3111
+ { name: "manage_videos", actions: ["list", "get", "delete"], description: "Manage recordings" },
3112
+ ],
3113
+ endpoints: {
3114
+ list_videos: { method: "POST", path: "/v1/videos", body: {} },
3115
+ get_video: { method: "GET", path: "/v1/videos/{id}" },
3116
+ delete_video: { method: "DELETE", path: "/v1/videos/{id}" },
3117
+ get_video_transcript:{ method: "GET", path: "/v1/videos/{id}/transcript" },
3118
+ },
3119
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.accessToken}`, "Content-Type": "application/json" }),
3120
+ },
3121
+
3122
+ // ── Google Cloud ────────────────────────────────────────
3123
+ gcloud: {
3124
+ name: "Google Cloud", type: "cloud",
3125
+ description: "GCP — Cloud Storage, Compute Engine, BigQuery",
3126
+ baseUrl: "https://storage.googleapis.com/storage/v1",
3127
+ authType: "oauth", credentialKeys: ["accessToken", "projectId"],
3128
+ capabilities: [
3129
+ { name: "manage_storage", actions: ["list_buckets", "list_objects"], description: "Cloud Storage" },
3130
+ ],
3131
+ endpoints: {
3132
+ list_buckets: { method: "GET", path: "/b", query: ["project"] },
3133
+ get_bucket: { method: "GET", path: "/b/{bucket}" },
3134
+ list_objects: { method: "GET", path: "/b/{bucket}/o", query: ["prefix", "maxResults"] },
3135
+ get_object: { method: "GET", path: "/b/{bucket}/o/{object}" },
3136
+ delete_object: { method: "DELETE", path: "/b/{bucket}/o/{object}" },
3137
+ },
3138
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.accessToken}` }),
3139
+ },
3140
+
3141
+ // ── Neon ────────────────────────────────────────────────
3142
+ neon: {
3143
+ name: "Neon", type: "database",
3144
+ description: "Serverless Postgres — projects, branches, databases, endpoints",
3145
+ baseUrl: "https://console.neon.tech/api/v2",
3146
+ authType: "api_key", credentialKeys: ["apiKey"],
3147
+ capabilities: [
3148
+ { name: "manage_projects", actions: ["create", "list", "delete"], description: "Manage projects" },
3149
+ { name: "manage_branches", actions: ["create", "list"], description: "Manage branches" },
3150
+ ],
3151
+ endpoints: {
3152
+ list_projects: { method: "GET", path: "/projects" },
3153
+ create_project: { method: "POST", path: "/projects", body: { project: { name: "" } } },
3154
+ get_project: { method: "GET", path: "/projects/{project_id}" },
3155
+ delete_project: { method: "DELETE", path: "/projects/{project_id}" },
3156
+ list_branches: { method: "GET", path: "/projects/{project_id}/branches" },
3157
+ create_branch: { method: "POST", path: "/projects/{project_id}/branches", body: {} },
3158
+ list_databases: { method: "GET", path: "/projects/{project_id}/branches/{branch_id}/databases" },
3159
+ list_endpoints: { method: "GET", path: "/projects/{project_id}/endpoints" },
3160
+ },
3161
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.apiKey}`, "Content-Type": "application/json" }),
3162
+ },
3163
+
3164
+ // ── PlanetScale ─────────────────────────────────────────
3165
+ planetscale: {
3166
+ name: "PlanetScale", type: "database",
3167
+ description: "Serverless MySQL — databases, branches, deploy requests",
3168
+ baseUrl: "https://api.planetscale.com/v1",
3169
+ authType: "oauth", credentialKeys: ["accessToken", "organizationId"],
3170
+ capabilities: [
3171
+ { name: "manage_databases", actions: ["create", "list", "delete"], description: "Manage databases" },
3172
+ { name: "manage_branches", actions: ["create", "list"], description: "Manage branches" },
3173
+ ],
3174
+ endpoints: {
3175
+ list_databases: { method: "GET", path: "/organizations/{organization}/databases" },
3176
+ create_database: { method: "POST", path: "/organizations/{organization}/databases", body: { name: "" } },
3177
+ get_database: { method: "GET", path: "/organizations/{organization}/databases/{database}" },
3178
+ delete_database: { method: "DELETE", path: "/organizations/{organization}/databases/{database}" },
3179
+ list_branches: { method: "GET", path: "/organizations/{organization}/databases/{database}/branches" },
3180
+ create_branch: { method: "POST", path: "/organizations/{organization}/databases/{database}/branches", body: { name: "" } },
3181
+ list_deploy_requests: { method: "GET", path: "/organizations/{organization}/databases/{database}/deploy-requests" },
3182
+ },
3183
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.accessToken}`, "Content-Type": "application/json" }),
3184
+ },
3185
+
3186
+ // ── Turso ───────────────────────────────────────────────
3187
+ turso: {
3188
+ name: "Turso", type: "database",
3189
+ description: "Edge SQLite — databases, groups, locations, tokens",
3190
+ baseUrl: "https://api.turso.tech/v1",
3191
+ authType: "api_key", credentialKeys: ["apiToken", "organizationName"],
3192
+ capabilities: [
3193
+ { name: "manage_databases", actions: ["create", "list", "delete"], description: "Manage databases" },
3194
+ { name: "manage_groups", actions: ["create", "list"], description: "Manage groups" },
3195
+ ],
3196
+ endpoints: {
3197
+ list_databases: { method: "GET", path: "/organizations/{organizationName}/databases" },
3198
+ create_database: { method: "POST", path: "/organizations/{organizationName}/databases", body: { name: "", group: "default" } },
3199
+ get_database: { method: "GET", path: "/organizations/{organizationName}/databases/{databaseName}" },
3200
+ delete_database: { method: "DELETE", path: "/organizations/{organizationName}/databases/{databaseName}" },
3201
+ list_groups: { method: "GET", path: "/organizations/{organizationName}/groups" },
3202
+ create_group: { method: "POST", path: "/organizations/{organizationName}/groups", body: { name: "", location: "ord" } },
3203
+ list_locations: { method: "GET", path: "/organizations/{organizationName}/locations" },
3204
+ create_token: { method: "POST", path: "/organizations/{organizationName}/databases/{databaseName}/auth/tokens" },
3205
+ },
3206
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.apiToken}`, "Content-Type": "application/json" }),
3207
+ },
3208
+
3209
+ // ── CockroachDB ─────────────────────────────────────────
3210
+ cockroachdb: {
3211
+ name: "CockroachDB", type: "database",
3212
+ description: "Distributed SQL — clusters, databases, SQL users, backups",
3213
+ baseUrl: "https://cockroachlabs.cloud/api/v1",
3214
+ authType: "api_key", credentialKeys: ["apiKey"],
3215
+ capabilities: [
3216
+ { name: "manage_clusters", actions: ["create", "list", "get"], description: "Manage clusters" },
3217
+ ],
3218
+ endpoints: {
3219
+ list_clusters: { method: "GET", path: "/clusters" },
3220
+ create_cluster: { method: "POST", path: "/clusters", body: { name: "", provider: "GCP", spec: {} } },
3221
+ get_cluster: { method: "GET", path: "/clusters/{cluster_id}" },
3222
+ delete_cluster: { method: "DELETE", path: "/clusters/{cluster_id}" },
3223
+ list_sql_users: { method: "GET", path: "/clusters/{cluster_id}/sql-users" },
3224
+ create_sql_user: { method: "POST", path: "/clusters/{cluster_id}/sql-users", body: { name: "", password: "" } },
3225
+ list_databases: { method: "GET", path: "/clusters/{cluster_id}/databases" },
3226
+ },
3227
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.apiKey}`, "Content-Type": "application/json" }),
3228
+ },
3229
+
3230
+ // ── Railway ─────────────────────────────────────────────
3231
+ railway: {
3232
+ name: "Railway", type: "cloud",
3233
+ description: "Deploy anything — projects, services, environments via GraphQL",
3234
+ baseUrl: "https://backboard.railway.app/graphql/v2",
3235
+ authType: "api_key", credentialKeys: ["apiToken"],
3236
+ capabilities: [
3237
+ { name: "manage_projects", actions: ["create", "list"], description: "Manage projects" },
3238
+ ],
3239
+ endpoints: {
3240
+ graphql: { method: "POST", path: "/", body: { query: "" } },
3241
+ },
3242
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.apiToken}`, "Content-Type": "application/json" }),
3243
+ },
3244
+
3245
+ // ── Render ──────────────────────────────────────────────
3246
+ render: {
3247
+ name: "Render", type: "cloud",
3248
+ description: "Cloud platform — web services, static sites, databases, cron jobs",
3249
+ baseUrl: "https://api.render.com/v1",
3250
+ authType: "api_key", credentialKeys: ["apiKey"],
3251
+ capabilities: [
3252
+ { name: "manage_services", actions: ["create", "list", "get"], description: "Manage services" },
3253
+ { name: "manage_deploys", actions: ["list", "create"], description: "Manage deploys" },
3254
+ ],
3255
+ endpoints: {
3256
+ list_services: { method: "GET", path: "/services", query: ["limit", "cursor", "type"] },
3257
+ get_service: { method: "GET", path: "/services/{serviceId}" },
3258
+ create_service: { method: "POST", path: "/services", body: { type: "web_service", name: "" } },
3259
+ list_deploys: { method: "GET", path: "/services/{serviceId}/deploys", query: ["limit"] },
3260
+ create_deploy: { method: "POST", path: "/services/{serviceId}/deploys", body: {} },
3261
+ get_deploy: { method: "GET", path: "/services/{serviceId}/deploys/{deployId}" },
3262
+ list_env_groups:{ method: "GET", path: "/env-groups" },
3263
+ },
3264
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.apiKey}`, "Content-Type": "application/json" }),
3265
+ },
3266
+
3267
+ // ── CloudConvert ────────────────────────────────────────────────
3268
+ cloudconvert: {
3269
+ name: "CloudConvert",
3270
+ type: "utility",
3271
+ description: "File conversion API — convert between 200+ formats (PDF, DOCX, PNG, MP4, etc.), optimize, merge, capture websites, create thumbnails",
3272
+ baseUrl: "https://api.cloudconvert.com/v2",
3273
+ authType: "apiKey",
3274
+ credentialKeys: ["apiKey"],
3275
+ capabilities: [
3276
+ "convert files between 200+ formats",
3277
+ "merge PDFs and documents",
3278
+ "optimize images and PDFs",
3279
+ "capture website screenshots",
3280
+ "create thumbnails from documents",
3281
+ "extract text from PDFs (OCR)",
3282
+ "convert spreadsheets to CSV/JSON",
3283
+ "watermark PDFs",
3284
+ "compress videos",
3285
+ "manage conversion jobs and tasks",
3286
+ ],
3287
+ endpoints: {
3288
+ // Jobs (multi-step conversion pipelines)
3289
+ create_job: { method: "POST", path: "/jobs", body: { tasks: {} } },
3290
+ list_jobs: { method: "GET", path: "/jobs", query: ["status", "tag", "per_page", "page"] },
3291
+ get_job: { method: "GET", path: "/jobs/{jobId}" },
3292
+ delete_job: { method: "DELETE", path: "/jobs/{jobId}" },
3293
+ wait_job: { method: "GET", path: "/jobs/{jobId}/wait" },
3294
+
3295
+ // Tasks
3296
+ create_task: { method: "POST", path: "/tasks", body: { operation: "", input: "" } },
3297
+ list_tasks: { method: "GET", path: "/tasks", query: ["status", "operation", "job_id", "per_page", "page"] },
3298
+ get_task: { method: "GET", path: "/tasks/{taskId}" },
3299
+ delete_task: { method: "DELETE", path: "/tasks/{taskId}" },
3300
+ wait_task: { method: "GET", path: "/tasks/{taskId}/wait" },
3301
+ cancel_task: { method: "POST", path: "/tasks/{taskId}/cancel" },
3302
+ retry_task: { method: "POST", path: "/tasks/{taskId}/retry" },
3303
+
3304
+ // Conversion operations
3305
+ convert: { method: "POST", path: "/convert", body: { input: "", input_format: "", output_format: "" } },
3306
+ optimize: { method: "POST", path: "/optimize", body: { input: "", input_format: "" } },
3307
+ capture_website: { method: "POST", path: "/capture-website", body: { url: "", output_format: "pdf" } },
3308
+ create_thumbnail: { method: "POST", path: "/thumbnail", body: { input: "", output_format: "png" } },
3309
+ merge: { method: "POST", path: "/merge", body: { input: [], output_format: "pdf" } },
3310
+ create_archive: { method: "POST", path: "/archive", body: { input: [], output_format: "zip" } },
3311
+ watermark: { method: "POST", path: "/watermark", body: { input: "", input_format: "pdf" } },
3312
+ metadata: { method: "POST", path: "/metadata", body: { input: "", input_format: "" } },
3313
+
3314
+ // Import/Export (file transfer)
3315
+ import_url: { method: "POST", path: "/import/url", body: { url: "" } },
3316
+ import_upload: { method: "POST", path: "/import/upload" },
3317
+ import_s3: { method: "POST", path: "/import/s3", body: { bucket: "", region: "", key: "" } },
3318
+ import_google_cloud: { method: "POST", path: "/import/google-cloud-storage", body: { bucket: "", key: "" } },
3319
+ export_url: { method: "POST", path: "/export/url", body: { input: "" } },
3320
+ export_s3: { method: "POST", path: "/export/s3", body: { input: "", bucket: "", region: "", key: "" } },
3321
+ export_google_cloud: { method: "POST", path: "/export/google-cloud-storage", body: { input: "", bucket: "", key: "" } },
3322
+
3323
+ // Users & Usage
3324
+ get_user: { method: "GET", path: "/users/me" },
3325
+ get_balance: { method: "GET", path: "/users/me/balance" },
3326
+
3327
+ // Webhooks
3328
+ create_webhook: { method: "POST", path: "/webhooks", body: { url: "", events: [] } },
3329
+ list_webhooks: { method: "GET", path: "/webhooks" },
3330
+ delete_webhook: { method: "DELETE", path: "/webhooks/{webhookId}" },
3331
+ },
3332
+ authHeader: (creds) => ({ "Authorization": `Bearer ${creds.apiKey}`, "Content-Type": "application/json" }),
3333
+ },
3334
+
1921
3335
  };
1922
3336
 
1923
3337
  // ── Helpers ────────────────────────────────────────────────