@jskit-ai/connectors-catalog 0.1.1

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.
Files changed (399) hide show
  1. package/README.md +192 -0
  2. package/docs/ai-upstream-notices.md +51 -0
  3. package/docs/ai.md +191 -0
  4. package/docs/airtable.md +130 -0
  5. package/docs/algolia.md +190 -0
  6. package/docs/amazon-redshift.md +229 -0
  7. package/docs/amplitude.md +210 -0
  8. package/docs/apify.md +162 -0
  9. package/docs/apollo-io.md +200 -0
  10. package/docs/asana.md +126 -0
  11. package/docs/ashby.md +188 -0
  12. package/docs/atlassian.md +224 -0
  13. package/docs/attention.md +162 -0
  14. package/docs/aws-athena.md +150 -0
  15. package/docs/aws-credentials.md +75 -0
  16. package/docs/aws-s3.md +193 -0
  17. package/docs/bigquery.md +146 -0
  18. package/docs/brevo.md +122 -0
  19. package/docs/calendly.md +158 -0
  20. package/docs/canva.md +191 -0
  21. package/docs/chargebee.md +192 -0
  22. package/docs/clay.md +194 -0
  23. package/docs/clickhouse.md +242 -0
  24. package/docs/confidence-exp.md +74 -0
  25. package/docs/confidence-flags.md +75 -0
  26. package/docs/confidence-oauth.md +137 -0
  27. package/docs/contentful.md +123 -0
  28. package/docs/databricks.md +180 -0
  29. package/docs/dbt-semantic-layer.md +175 -0
  30. package/docs/elevenlabs.md +102 -0
  31. package/docs/figma.md +132 -0
  32. package/docs/firebase-cloud-messaging.md +262 -0
  33. package/docs/firecrawl.md +137 -0
  34. package/docs/fireflies.md +95 -0
  35. package/docs/fireworks-ai.md +53 -0
  36. package/docs/gatewayapi.md +113 -0
  37. package/docs/gemini-enterprise.md +224 -0
  38. package/docs/github-api.md +133 -0
  39. package/docs/gitlab-api.md +138 -0
  40. package/docs/gmail.md +133 -0
  41. package/docs/gong.md +205 -0
  42. package/docs/google-ads.md +156 -0
  43. package/docs/google-analytics.md +202 -0
  44. package/docs/google-docs.md +105 -0
  45. package/docs/google-drive.md +108 -0
  46. package/docs/google-maps-platform.md +208 -0
  47. package/docs/google-oauth.md +123 -0
  48. package/docs/google-search-console.md +124 -0
  49. package/docs/google-sheets.md +94 -0
  50. package/docs/google-slides.md +95 -0
  51. package/docs/granola.md +178 -0
  52. package/docs/hex.md +161 -0
  53. package/docs/heygen.md +124 -0
  54. package/docs/hubspot.md +142 -0
  55. package/docs/incident-io.md +118 -0
  56. package/docs/inngest.md +178 -0
  57. package/docs/klipy.md +149 -0
  58. package/docs/lexware.md +144 -0
  59. package/docs/lightspeed.md +193 -0
  60. package/docs/linear.md +137 -0
  61. package/docs/linkedin.md +196 -0
  62. package/docs/logo-dev.md +152 -0
  63. package/docs/mailgun.md +153 -0
  64. package/docs/mapbox.md +174 -0
  65. package/docs/microsoft-excel.md +97 -0
  66. package/docs/microsoft-fabric.md +249 -0
  67. package/docs/microsoft-oauth.md +143 -0
  68. package/docs/microsoft-onedrive.md +76 -0
  69. package/docs/microsoft-onenote.md +75 -0
  70. package/docs/microsoft-outlook.md +90 -0
  71. package/docs/microsoft-powerpoint.md +119 -0
  72. package/docs/microsoft-sharepoint.md +75 -0
  73. package/docs/microsoft-teams.md +72 -0
  74. package/docs/microsoft-word.md +119 -0
  75. package/docs/miro.md +117 -0
  76. package/docs/n8n.md +169 -0
  77. package/docs/notion.md +137 -0
  78. package/docs/oura.md +161 -0
  79. package/docs/paddle.md +168 -0
  80. package/docs/perplexity.md +85 -0
  81. package/docs/pipedrive.md +120 -0
  82. package/docs/polar.md +63 -0
  83. package/docs/posthog.md +227 -0
  84. package/docs/prestashop.md +151 -0
  85. package/docs/replicate.md +60 -0
  86. package/docs/resend.md +153 -0
  87. package/docs/salesforce.md +234 -0
  88. package/docs/sanity.md +122 -0
  89. package/docs/semrush.md +276 -0
  90. package/docs/sentry.md +112 -0
  91. package/docs/sevdesk.md +107 -0
  92. package/docs/shopify.md +206 -0
  93. package/docs/slack.md +257 -0
  94. package/docs/snowflake.md +271 -0
  95. package/docs/storyblok.md +130 -0
  96. package/docs/stripe.md +77 -0
  97. package/docs/supabase.md +51 -0
  98. package/docs/tally.md +105 -0
  99. package/docs/telegram.md +165 -0
  100. package/docs/tiktok.md +201 -0
  101. package/docs/twilio.md +284 -0
  102. package/docs/twitch.md +428 -0
  103. package/docs/wave.md +440 -0
  104. package/docs/wix.md +1249 -0
  105. package/docs/wiz.md +177 -0
  106. package/docs/woocommerce.md +400 -0
  107. package/docs/wordpress-com.md +358 -0
  108. package/docs/wordpress-self-hosted.md +252 -0
  109. package/docs/workday.md +292 -0
  110. package/docs/x-twitter.md +188 -0
  111. package/docs/xero.md +429 -0
  112. package/docs/zoho-books.md +214 -0
  113. package/docs/zoho-crm.md +192 -0
  114. package/package.json +153 -0
  115. package/patterns/ai-connections/PATTERN.md +84 -0
  116. package/patterns/ai-connections/example/ai-model.js +11 -0
  117. package/patterns/ai-connections/example/perplexity-answer.js +29 -0
  118. package/patterns/api-key-connection/PATTERN.md +368 -0
  119. package/patterns/api-key-connection/example/connections.js +18 -0
  120. package/patterns/api-key-connection/example/integrations.json +19 -0
  121. package/patterns/assistant-mcp/PATTERN.md +110 -0
  122. package/patterns/assistant-mcp/example/integrations.json +13 -0
  123. package/patterns/assistant-mcp-oauth/PATTERN.md +235 -0
  124. package/patterns/assistant-mcp-oauth/example/integrations.json +102 -0
  125. package/patterns/aws-storage-queries/PATTERN.md +169 -0
  126. package/patterns/aws-storage-queries/example/formats/data-formats.js +35 -0
  127. package/patterns/aws-storage-queries/example/formats/package-lock.json +49 -0
  128. package/patterns/aws-storage-queries/example/formats/package.json +12 -0
  129. package/patterns/aws-storage-queries/example/formats/verify-formats.mjs +37 -0
  130. package/patterns/aws-storage-queries/example/integrations.json +38 -0
  131. package/patterns/aws-storage-queries/example/s3-transfer.js +34 -0
  132. package/patterns/event-delivery/PATTERN.md +151 -0
  133. package/patterns/event-delivery/example/integrations.json +17 -0
  134. package/patterns/firebase-messaging/PATTERN.md +156 -0
  135. package/patterns/firebase-messaging/example/server/notifications.js +23 -0
  136. package/patterns/google-ads-search/PATTERN.md +92 -0
  137. package/patterns/google-ads-search/example/ads-setup.js +25 -0
  138. package/patterns/oauth-connection/PATTERN.md +724 -0
  139. package/patterns/oauth-connection/example/integrations.json +20 -0
  140. package/patterns/paddle-catalogue/PATTERN.md +78 -0
  141. package/patterns/paddle-catalogue/example/create-products.js +38 -0
  142. package/patterns/public-image/PATTERN.md +84 -0
  143. package/patterns/public-image/example/integrations.json +13 -0
  144. package/patterns/public-image/example/logo-url.js +16 -0
  145. package/patterns/redshift-queries/PATTERN.md +150 -0
  146. package/patterns/redshift-queries/example/integrations.json +33 -0
  147. package/patterns/source-scanning/PATTERN.md +83 -0
  148. package/patterns/source-scanning/example/source-scanner.js +13 -0
  149. package/src/client/firebase-cloud-messaging.js +10 -0
  150. package/src/client/google-analytics.js +72 -0
  151. package/src/client/google-maps-platform.js +39 -0
  152. package/src/client/logo-dev.js +36 -0
  153. package/src/server/ai.js +46 -0
  154. package/src/server/airtable.js +67 -0
  155. package/src/server/algolia.js +63 -0
  156. package/src/server/amazon-redshift.js +96 -0
  157. package/src/server/amplitude.js +31 -0
  158. package/src/server/apify.js +68 -0
  159. package/src/server/apollo-io.js +85 -0
  160. package/src/server/asana.js +64 -0
  161. package/src/server/ashby.js +61 -0
  162. package/src/server/atlassian.js +32 -0
  163. package/src/server/attention.js +93 -0
  164. package/src/server/aws-athena.js +82 -0
  165. package/src/server/aws-s3.js +49 -0
  166. package/src/server/awsTransport.js +75 -0
  167. package/src/server/bigquery.js +97 -0
  168. package/src/server/brevo.js +97 -0
  169. package/src/server/calendly.js +77 -0
  170. package/src/server/canva.js +13 -0
  171. package/src/server/chargebee.js +88 -0
  172. package/src/server/clay.js +78 -0
  173. package/src/server/clickhouse.js +66 -0
  174. package/src/server/confidence.js +29 -0
  175. package/src/server/contentful.js +40 -0
  176. package/src/server/databricks.js +55 -0
  177. package/src/server/dbt-semantic-layer.js +95 -0
  178. package/src/server/elevenlabs.js +81 -0
  179. package/src/server/figma.js +24 -0
  180. package/src/server/firebase-cloud-messaging.js +111 -0
  181. package/src/server/firecrawl.js +70 -0
  182. package/src/server/fireflies.js +31 -0
  183. package/src/server/fireworks-ai.js +16 -0
  184. package/src/server/gatewayapi.js +48 -0
  185. package/src/server/gemini-enterprise.js +47 -0
  186. package/src/server/github-api.js +90 -0
  187. package/src/server/gitlab-api.js +67 -0
  188. package/src/server/gmail.js +60 -0
  189. package/src/server/gong.js +52 -0
  190. package/src/server/google-ads-search.js +134 -0
  191. package/src/server/google-ads.js +80 -0
  192. package/src/server/google-docs.js +36 -0
  193. package/src/server/google-drive.js +71 -0
  194. package/src/server/google-maps-platform.js +90 -0
  195. package/src/server/google-search-console.js +31 -0
  196. package/src/server/google-sheets.js +60 -0
  197. package/src/server/google-slides.js +36 -0
  198. package/src/server/google.js +61 -0
  199. package/src/server/granola.js +115 -0
  200. package/src/server/graphqlOperation.js +15 -0
  201. package/src/server/hex.js +29 -0
  202. package/src/server/heygen.js +54 -0
  203. package/src/server/hubspot.js +85 -0
  204. package/src/server/incident-io.js +68 -0
  205. package/src/server/inngest.js +86 -0
  206. package/src/server/jsonOperation.js +34 -0
  207. package/src/server/klipy.js +34 -0
  208. package/src/server/lexware.js +59 -0
  209. package/src/server/lightspeed.js +82 -0
  210. package/src/server/linear.js +52 -0
  211. package/src/server/linkedin.js +74 -0
  212. package/src/server/mailgun.js +76 -0
  213. package/src/server/mapbox.js +46 -0
  214. package/src/server/mcpRegistration.js +41 -0
  215. package/src/server/mcpTransport.js +60 -0
  216. package/src/server/microsoft-excel.js +67 -0
  217. package/src/server/microsoft-fabric.js +81 -0
  218. package/src/server/microsoft-onedrive.js +58 -0
  219. package/src/server/microsoft-onenote.js +52 -0
  220. package/src/server/microsoft-outlook.js +58 -0
  221. package/src/server/microsoft-powerpoint.js +5 -0
  222. package/src/server/microsoft-sharepoint.js +46 -0
  223. package/src/server/microsoft-teams.js +29 -0
  224. package/src/server/microsoft-word.js +5 -0
  225. package/src/server/microsoft.js +88 -0
  226. package/src/server/miro.js +29 -0
  227. package/src/server/n8n.js +78 -0
  228. package/src/server/notion.js +76 -0
  229. package/src/server/oura.js +48 -0
  230. package/src/server/paddle.js +83 -0
  231. package/src/server/perplexity.js +15 -0
  232. package/src/server/pipedrive.js +95 -0
  233. package/src/server/polar.js +20 -0
  234. package/src/server/posthog.js +44 -0
  235. package/src/server/prestashop.js +42 -0
  236. package/src/server/replicate.js +42 -0
  237. package/src/server/resend.js +93 -0
  238. package/src/server/salesforce.js +84 -0
  239. package/src/server/sanity.js +31 -0
  240. package/src/server/semrush.js +359 -0
  241. package/src/server/sentry.js +30 -0
  242. package/src/server/sevdesk.js +20 -0
  243. package/src/server/shopify.js +99 -0
  244. package/src/server/slack.js +143 -0
  245. package/src/server/snowflake.js +139 -0
  246. package/src/server/storyblok.js +49 -0
  247. package/src/server/stripe.js +13 -0
  248. package/src/server/supabase.js +13 -0
  249. package/src/server/tally.js +78 -0
  250. package/src/server/telegram.js +55 -0
  251. package/src/server/tiktok.js +86 -0
  252. package/src/server/twilio.js +90 -0
  253. package/src/server/twitch.js +409 -0
  254. package/src/server/wave.js +520 -0
  255. package/src/server/wix.js +1048 -0
  256. package/src/server/wiz.js +117 -0
  257. package/src/server/woocommerce.js +412 -0
  258. package/src/server/wordpress-com.js +236 -0
  259. package/src/server/wordpress-self-hosted.js +134 -0
  260. package/src/server/workday.js +136 -0
  261. package/src/server/x-twitter.js +110 -0
  262. package/src/server/xero.js +397 -0
  263. package/src/server/zoho-books.js +90 -0
  264. package/src/server/zoho-crm.js +89 -0
  265. package/src/server/zohoOAuth.js +21 -0
  266. package/src/shared/ai-models.json +8049 -0
  267. package/src/shared/ai.js +63 -0
  268. package/src/shared/algolia.js +29 -0
  269. package/src/shared/amazon-redshift.js +51 -0
  270. package/src/shared/amplitude.js +28 -0
  271. package/src/shared/atlassian.js +43 -0
  272. package/src/shared/aws.js +72 -0
  273. package/src/shared/canva.js +66 -0
  274. package/src/shared/chargebee.js +26 -0
  275. package/src/shared/clickhouse.js +38 -0
  276. package/src/shared/confidence.js +28 -0
  277. package/src/shared/databricks.js +33 -0
  278. package/src/shared/dbt-semantic-layer.js +32 -0
  279. package/src/shared/definitions.js +140 -0
  280. package/src/shared/figma.js +21 -0
  281. package/src/shared/firebase-cloud-messaging.js +45 -0
  282. package/src/shared/gemini-enterprise.js +33 -0
  283. package/src/shared/gong.js +33 -0
  284. package/src/shared/google-ads-search.js +31 -0
  285. package/src/shared/google-ads.js +28 -0
  286. package/src/shared/google-maps-platform.js +28 -0
  287. package/src/shared/google.js +133 -0
  288. package/src/shared/granola.js +25 -0
  289. package/src/shared/hex.js +28 -0
  290. package/src/shared/inngest.js +35 -0
  291. package/src/shared/lightspeed.js +75 -0
  292. package/src/shared/linkedin.js +27 -0
  293. package/src/shared/logo-dev.js +21 -0
  294. package/src/shared/mapbox.js +38 -0
  295. package/src/shared/mcp.js +92 -0
  296. package/src/shared/microsoft-fabric.js +47 -0
  297. package/src/shared/microsoft.js +231 -0
  298. package/src/shared/miro.js +27 -0
  299. package/src/shared/oura.js +23 -0
  300. package/src/shared/posthog.js +33 -0
  301. package/src/shared/prestashop.js +23 -0
  302. package/src/shared/salesforce.js +36 -0
  303. package/src/shared/semrush.js +24 -0
  304. package/src/shared/shopify.js +51 -0
  305. package/src/shared/siteUrl.js +12 -0
  306. package/src/shared/slack.js +88 -0
  307. package/src/shared/snowflake.js +55 -0
  308. package/src/shared/tiktok.js +22 -0
  309. package/src/shared/tokens.js +747 -0
  310. package/src/shared/twilio.js +41 -0
  311. package/src/shared/twitch.js +49 -0
  312. package/src/shared/wave.js +52 -0
  313. package/src/shared/wix.js +40 -0
  314. package/src/shared/wiz.js +41 -0
  315. package/src/shared/wordpress-com.js +30 -0
  316. package/src/shared/wordpress.js +69 -0
  317. package/src/shared/workday.js +50 -0
  318. package/src/shared/x-twitter.js +19 -0
  319. package/src/shared/xero.js +46 -0
  320. package/src/shared/zoho-books.js +39 -0
  321. package/src/shared/zoho-crm.js +43 -0
  322. package/src/shared/zoho-regions.js +12 -0
  323. package/test/ai.test.js +136 -0
  324. package/test/airtable.test.js +125 -0
  325. package/test/algolia.test.js +207 -0
  326. package/test/amazon-redshift.test.js +272 -0
  327. package/test/amplitude.test.js +239 -0
  328. package/test/apify.test.js +93 -0
  329. package/test/apollo-io.test.js +125 -0
  330. package/test/asana.test.js +99 -0
  331. package/test/ashby.test.js +97 -0
  332. package/test/atlassian.test.js +249 -0
  333. package/test/attention.test.js +79 -0
  334. package/test/aws.test.js +405 -0
  335. package/test/brevo.test.js +71 -0
  336. package/test/calendly.test.js +136 -0
  337. package/test/canva.test.js +258 -0
  338. package/test/chargebee.test.js +195 -0
  339. package/test/clickhouse.test.js +278 -0
  340. package/test/confidence.test.js +205 -0
  341. package/test/databricks.test.js +253 -0
  342. package/test/dbt-semantic-layer.test.js +221 -0
  343. package/test/designMcp.test.js +336 -0
  344. package/test/elevenlabs.test.js +52 -0
  345. package/test/firebase-cloud-messaging.test.js +242 -0
  346. package/test/firecrawl.test.js +66 -0
  347. package/test/gemini-enterprise.test.js +218 -0
  348. package/test/github-api.test.js +167 -0
  349. package/test/gitlab-api.test.js +160 -0
  350. package/test/gong.test.js +192 -0
  351. package/test/google-ads.test.js +350 -0
  352. package/test/google-maps-platform.test.js +191 -0
  353. package/test/google.test.js +710 -0
  354. package/test/granola.test.js +240 -0
  355. package/test/hex.test.js +253 -0
  356. package/test/heygen.test.js +121 -0
  357. package/test/hubspot.test.js +103 -0
  358. package/test/inngest.test.js +219 -0
  359. package/test/lightspeed.test.js +250 -0
  360. package/test/linear.test.js +146 -0
  361. package/test/linkedin.test.js +243 -0
  362. package/test/logo-dev.test.js +79 -0
  363. package/test/mailgun.test.js +107 -0
  364. package/test/mapbox.test.js +181 -0
  365. package/test/mcp.test.js +227 -0
  366. package/test/microsoft-fabric.test.js +258 -0
  367. package/test/microsoft.test.js +554 -0
  368. package/test/n8nOAuth.test.js +188 -0
  369. package/test/notionOAuth.test.js +183 -0
  370. package/test/oura.test.js +211 -0
  371. package/test/paddleCatalogue.test.js +51 -0
  372. package/test/paddlePermissions.test.js +101 -0
  373. package/test/perplexityComposition.test.js +39 -0
  374. package/test/pipedriveOAuth.test.js +140 -0
  375. package/test/posthog.test.js +200 -0
  376. package/test/prestashop.test.js +207 -0
  377. package/test/resend.test.js +163 -0
  378. package/test/salesforce.test.js +276 -0
  379. package/test/semrush.test.js +479 -0
  380. package/test/sentry.test.js +35 -0
  381. package/test/shopify.test.js +247 -0
  382. package/test/slack.test.js +320 -0
  383. package/test/snowflake.test.js +391 -0
  384. package/test/tally.test.js +75 -0
  385. package/test/telegram.test.js +58 -0
  386. package/test/tiktok.test.js +243 -0
  387. package/test/tokens.test.js +1079 -0
  388. package/test/twilio.test.js +221 -0
  389. package/test/twitch.test.js +573 -0
  390. package/test/wave.test.js +678 -0
  391. package/test/wix.test.js +1099 -0
  392. package/test/wiz.test.js +185 -0
  393. package/test/wordpress-com.test.js +469 -0
  394. package/test/wordpress.test.js +660 -0
  395. package/test/workday.test.js +314 -0
  396. package/test/x-twitter.test.js +256 -0
  397. package/test/xero.test.js +700 -0
  398. package/test/zoho-books.test.js +253 -0
  399. package/test/zoho-crm.test.js +223 -0
package/docs/brevo.md ADDED
@@ -0,0 +1,122 @@
1
+ # Brevo
2
+
3
+ Import `brevoProvider` from `@jskit-ai/connectors-catalog/server/brevo`.
4
+ The adapter uses an ordinary Brevo API key for contacts, transactional email/SMS,
5
+ marketing campaigns, sender/domain setup and automation events.
6
+
7
+ ## Set up access
8
+
9
+ 1. Sign in to the intended Brevo account with API-key management permission.
10
+ 2. Open the account dropdown and choose **Settings → SMTP & API → API Keys & MCP**.
11
+ 3. Generate a new API key and give it a name identifying the application and
12
+ environment. Copy the full value while it is shown.
13
+ 4. Store it outside source, for example as `BREVO_API_KEY` in the backend's
14
+ environment. An SMTP key is a different credential.
15
+ 5. In `integrations.json`, choose provider `brevo`, mode `shared` or `assistant`,
16
+ empty `scopes`, and `authentication: { "method": "api-key", "secretRef":
17
+ "env:BREVO_API_KEY" }`. This slot needs no OAuth registration.
18
+ 6. In Vibe64 save configuration, choose **Set credential in Env**, save the key,
19
+ return and choose **Connect account** or **Verify again**. **Check connection**
20
+ reloads status only. CLI apps call `connectApiKey`. Manage/revoke keys through
21
+ the same console; disconnect only removes the local runtime grant.
22
+ See [Brevo key management](https://help.brevo.com/hc/en-us/articles/209467485-Create-and-manage-your-API-keys).
23
+
24
+ ## Runtime and AI composition
25
+
26
+ `contacts.list` calls `GET /v3/contacts` with the `api-key` header. Inputs are
27
+ `limit` (1–1000, default 50), `offset` (nonnegative, default 0), and `sort`
28
+ (`asc`/`desc`, default `desc`). The result keeps `contacts` and `count`; advance
29
+ the offset in application code when another page is needed. The verifier uses
30
+ this operation, avoiding an account-details response that may contain unrelated
31
+ provider credentials. See [Get contacts](https://developers.brevo.com/reference/get-contacts).
32
+
33
+ Use the [API-key source pattern](../patterns/api-key-connection/PATTERN.md).
34
+ The application owns access to contact information and sending
35
+ workflows. A CLI and Vibe64 configure the same slot and reference; connection
36
+ metadata lives in the chosen runtime file directory.
37
+
38
+ ## Provisioning automation and capacity
39
+
40
+ An AI can wire the adapter and read contacts after an operator supplies a key.
41
+ No API for ordinary-account key creation was verified in this pass. Enterprise
42
+ subaccount provisioning must not be assumed available to normal accounts.
43
+ Operator setup therefore follows the console steps above.
44
+
45
+ Each application supplies its own account credentials. Two API keys under
46
+ one account do not establish separate sending credits or capacity. Reading contacts does not prove sending readiness; authenticate the sender
47
+ domain and complete the account/sender requirements before sending.
48
+
49
+ Fixtures verify headers, pagination, invalid inputs, storage restart, key
50
+ rotation, isolation, disconnect and provider failures. No contacts were read
51
+ from a real account.
52
+
53
+ ## Sender and delivery setup
54
+
55
+ For email, open **Settings → Senders, Domains, IPs → Domains → Add a domain**.
56
+ Add the sending domain you control. Use automatic authentication when offered,
57
+ or copy every displayed DNS record into that domain's DNS provider. Keep the
58
+ exact host, type and value: DKIM may use TXT or multiple CNAME records. Return
59
+ and choose **Authenticate this email domain** after manual setup. DNS propagation
60
+ may take time; recheck status. Never replace an existing DMARC policy blindly.
61
+ [Domain setup](https://help.brevo.com/hc/en-us/articles/12163873383186-Authenticate-your-domain-with-Brevo-Brevo-code-DKIM-DMARC).
62
+
63
+ Then open **Settings → Senders, Domains, IPs → Senders → Add a sender**, enter
64
+ From name/email and Save. If prompted, enter the six-digit code emailed to that
65
+ address and choose **Verify sender**. The adapter can create/read sender/domain
66
+ records, but it does not edit DNS or approve your account.
67
+ [Sender setup](https://help.brevo.com/hc/en-us/articles/208836149-Create-a-new-sender-From-name-and-From-email).
68
+
69
+ For SMS, inspect your account's recipient-country sender requirements. The
70
+ registration UI, when available for your account, is **Settings → Campaigns →
71
+ SMS Sender ID → Configure → Request Sender ID**. Choose the country, provide
72
+ company/Sender ID and message details, submit and wait for approval. Check SMS
73
+ credits before enabling sending. The API key alone does not establish readiness.
74
+ [Country Sender ID setup](https://help.brevo.com/hc/en-us/articles/28255350696466-Register-a-Sender-ID-to-send-SMS-messages).
75
+
76
+ ## App operations
77
+
78
+ The [official API description](https://api.brevo.com/v3/swagger_definition_v3.yml)
79
+ was inspected on 12 September 2026. Paths below are relative to
80
+ `https://api.brevo.com/v3`; all requests use the backend's `api-key` header.
81
+
82
+ | Operations | Path / behavior |
83
+ |---|---|
84
+ | email.send | POST /smtp/email. sender, to, and either templateId/params or subject plus htmlContent/textContent. Returns messageId, not proof of delivery. |
85
+ | sms.send | POST /transactionalSMS/sms. Explicit sender, recipient with country code, type transactional/marketing, and content or templateId/params. Long/Unicode content can consume multiple credits. |
86
+ | contacts.get/create/update | GET/PUT /contacts/{email}, POST /contacts. Existing defined attributes, list membership, email/SMS blacklist flags. Create defaults updateEnabled false; no automatic force merge or unsubscription reset. |
87
+ | folders.list; lists.list/create | GET /contacts/folders, GET/POST /contacts/lists. Creating a list needs its parent folderId. |
88
+ | lists.addContacts/removeContacts | POST /contacts/lists/{id}/contacts/add or remove; 1–150 email addresses. Preserve successes and failures separately. Removing list membership does not erase or unsubscribe a contact. |
89
+ | senders.list/create | GET/POST /senders. Creation takes name/email; retain returned SPF/DKIM error flags and complete provider verification. |
90
+ | domains.create/get/authenticate | POST /senders/domains, GET /senders/domains/{domain}, PUT /senders/domains/{domain}/authenticate. Preserve DNS records and actual verified/authenticated flags. Authentication request is followed by a status read. |
91
+ | campaigns.list/get/create | GET/POST /emailCampaigns, GET /emailCampaigns/{id}. Create a draft with name, sender, content/template and explicit recipient lists; exclusions supported. No automatic send/schedule. |
92
+ | campaigns.sendTest/sendNow | POST /emailCampaigns/{id}/sendTest with emailTo, or /sendNow. The app must authorize either send explicitly; test recipients may need to be configured in Brevo. |
93
+ | email.events / sms.events | GET /smtp/statistics/events or /transactionalSMS/statistics/events. Offset pagination, days and messageId/email or phoneNumber filters. Preserve bounce/rejection details. |
94
+ | events.create | POST /events. event_name, identifiers.email_id and optional event/contact properties/date. Events can trigger existing active automations; they do not create a workflow. |
95
+
96
+ Call path IDs are passed as `resource` (number for lists/campaigns; email for
97
+ contacts; bare domain for domains). The same key and configuration are used
98
+ from CLI through the [API-key pattern](../patterns/api-key-connection/PATTERN.md).
99
+ Other frameworks use their native HTTP, Env and app authorization with these
100
+ contracts; Vibe64 and a Node service are not required at runtime.
101
+
102
+ For an appointment reminder, confirm sender readiness, authorize the recipient,
103
+ call email.send, save messageId and read email.events later. For a newsletter,
104
+ maintain consenting contacts/lists, create a draft, review a test, then explicitly
105
+ sendNow. For automation, configure and activate the matching event-triggered
106
+ workflow in Brevo before sending events.create from the application. The app owns
107
+ scheduling, consent/unsubscribe UI, delivery reporting and duplicate-send prevention.
108
+ No ambiguous send or creation request is automatically retried.
109
+
110
+ ## LIMITATIONS
111
+
112
+ Editor coding-assistant attachment is deferred. For example, the app can send a
113
+ booking email and show its bounce status, but Vibe64's Codex/OpenCode cannot inspect
114
+ Brevo merely because this connector is configured. The app owns message content,
115
+ recipient authorization and scheduling. This does not supply a template/automation
116
+ visual designer, webhook receiver, SMTP service, WhatsApp integration or account
117
+ approval. Advanced batch sends and attachments use native provider wiring.
118
+ No real messages, domain changes, purchased credits or generated apps were tested.
119
+
120
+ Focused fixtures cover sends, draft/test/sendNow separation, contacts/list results,
121
+ DNS pending state, delivery failures, organization policy denial and no replay after
122
+ an uncertain send, alongside existing file restart/rotation/disconnect tests.
@@ -0,0 +1,158 @@
1
+ # Calendly
2
+
3
+ Import `calendlyProvider` from `@jskit-ai/connectors-catalog/server/calendly`.
4
+ This adapter uses an owner's personal token or project-owned web OAuth registration
5
+ to read schedules and invitees, create links, book and cancel appointments.
6
+ It does not implement application login. Shared and assistant connections are supported.
7
+
8
+ ## Configure access
9
+
10
+ 1. Sign in to the intended Calendly account. Open **Integrations → API & Webhooks**.
11
+ 2. Under **Personal Access Tokens**, choose **Get a token now** or
12
+ **Generate new token** if tokens already exist.
13
+ 3. Name the token for this application. Grant `users:read` and
14
+ `event_types:read`; newly scoped tokens require explicit permissions.
15
+ 4. Create and copy the token while it is displayed. Store it in backend Env
16
+ as `CALENDLY_API_KEY`.
17
+ 5. Save a slot with provider `calendly`, mode `shared` or `assistant`,
18
+ `scopes: ["users:read", "event_types:read"]`, and authentication `{ "method": "api-key", "secretRef":
19
+ "env:CALENDLY_API_KEY" }`. No registration entry is needed for a personal token.
20
+ 6. Verify using `connectApiKey`. Manage tokens on the same provider page.
21
+ [Token setup](https://developer.calendly.com/how-to-authenticate-with-personal-access-tokens),
22
+ [provider scope requirements](https://developer.calendly.com/docs/authentication/scopes).
23
+
24
+ ## Runtime and CLI composition
25
+
26
+ `profile.read` calls `GET https://api.calendly.com/users/me`; its `resource.uri`
27
+ is the required `user` input for `eventTypes.list`. The latter calls
28
+ `GET /event_types`, accepting `count` (1–100, default 20), `page_token` and
29
+ optional `active`. Omit `active` to include both active and inactive types.
30
+ Pass `pagination.next_page_token` to request another page; do not follow a
31
+ returned URL with credentials. Results retain the provider envelope.
32
+ [Profile API](https://developer.calendly.com/api-docs/calendly-api/users/get-current-user),
33
+ [event-type API](https://developer.calendly.com/api-docs/calendly-api/event-types/list-event-types).
34
+
35
+ Use the [API-key pattern](../patterns/api-key-connection/PATTERN.md) with this
36
+ provider. Configuration and encrypted connection state remain separate files.
37
+ Provider-side token grants determine access; the configuration scope list
38
+ does not grant provider permissions. For pre-release configurations created
39
+ before OAuth support, replace Calendly’s empty scope list with users:read and
40
+ event_types:read; no compatibility reader is provided.
41
+
42
+ ## Automation and application registrations
43
+
44
+ An AI can prepare configuration and requests after token creation. The verified
45
+ personal-token creation flow is interactive. A public integration instead needs
46
+ a developer account and OAuth application: sign into the developer portal,
47
+ create an OAuth app, and set its name, client type and authorized callback.
48
+ The generated application owns that registration and its callback. Hosted and
49
+ installed editors do not supply shared Vibe64 registrations. These OAuth
50
+ credentials are consumed by the web OAuth mode described below.
51
+ [OAuth app setup](https://developer.calendly.com/docs/authentication/creating-an-oauth-app).
52
+
53
+ Use the application's own account token and respect its provider rate limits;
54
+ do not share one person's token across unrelated applications.
55
+ Automated fixtures cover headers, required inputs, pagination, storage restart,
56
+ rotation, isolation and failure handling. No live scheduling data was accessed.
57
+
58
+ ## Web OAuth setup and delivery status
59
+
60
+ The captured connection experience uses OAuth scopes. Personal tokens above
61
+ are a separate setup choice. OAuth uses the existing connection service and
62
+ the project-owned registration; it needs no Vibe64 authentication gateway.
63
+
64
+ Provider setup, checked against the official guide on 12 September 2026:
65
+
66
+ 1. Open the [developer portal](https://developer.calendly.com/docs/authentication/creating-an-oauth-app)
67
+ and sign in or create a developer account. This is separate from the normal
68
+ Calendly user account.
69
+ 2. Create an OAuth application. Supply its name, select **web**, and choose
70
+ **Sandbox** for development or **Production** for production. Calendly
71
+ recommends separate applications for those environments.
72
+ 3. Copy the generated application's exact callback URL from Vibe64 into
73
+ **Redirect URI**. Production requires HTTPS. Sandbox permits HTTP localhost;
74
+ a hosted development URL should still use its actual HTTPS address.
75
+ 4. Select **users:read** for the profile check and **event_types:read** for
76
+ event-type listing. Add scheduled_events:read for meetings/invitees, availability:read for slots,
77
+ scheduling_links:write for single-use links, and scheduled_events:write for
78
+ booking/cancellation/no-shows. Grant the same scopes on personal tokens.
79
+ Selecting a scope grants no app-user authorization; the app must enforce that.
80
+ 5. Continue and copy the Client ID, Client Secret and Webhook signing key.
81
+ The secret and signing key are shown only at creation. Save the Client ID
82
+ in project registration configuration and the Client Secret in private Env.
83
+ The current fragment has no webhook receiver; its signing key must not be
84
+ confused with the OAuth Client Secret.
85
+ 6. Configure the registration with `tokenEndpointAuthMethod: client_secret_basic`
86
+ for a web client. Its secret belongs to the generated app's backend, never
87
+ the browser or Vibe64's platform account. The shared provider metadata selects Basic authentication for web OAuth.
88
+ 7. Register a changed custom-domain callback in the provider application before
89
+ reconnecting. The provider application's menu offers **Edit**, including
90
+ Redirect URI, followed by **Save**.
91
+
92
+ Runtime endpoints: authorization at `https://auth.calendly.com/oauth/authorize`
93
+ and token exchange at `https://auth.calendly.com/oauth/token`. Use the existing
94
+ state and S256 PKCE lifecycle. Web token requests authenticate the client with
95
+ HTTP Basic; native clients have a different contract and are not covered by
96
+ these web-application instructions. Persist each replacement refresh token
97
+ under the existing grant lock rather than replaying a consumed refresh token.
98
+ The profile and event-type operations retain their current fixed API origin.
99
+
100
+ Required focused proof before marking this provider complete: OAuth configuration
101
+ and captured scope choices, Basic authentication on code exchange and refresh,
102
+ PKCE/state checks, rotated-token persistence, denial/cancel/reconnect/disconnect,
103
+ and the existing personal-token flow. Live consent and scheduling remain outside
104
+ the controlled-test scope.
105
+
106
+ Sources: [OAuth app creation](https://developer.calendly.com/docs/authentication/creating-an-oauth-app),
107
+ [token endpoint](https://developer.calendly.com/api-docs/calendly-o-auth/o-auth/post-oauth-refresh-token).
108
+
109
+ The focused `test/calendly.test.js` fixture passes Basic code exchange, S256
110
+ PKCE, concurrent refresh serialization, replacement refresh persistence across
111
+ a new service instance, personal-token connection and local disconnect. This does not establish live Calendly consent or token issuance.
112
+
113
+ ## Scheduling operations and application ownership
114
+
115
+ Both authentication methods use these same operations through `service.invoke`.
116
+ A CLI Node app installs the provider and composes the normal file connection service;
117
+ Vibe64 is not required. Other frameworks use their native HTTP/OAuth library and the
118
+ same project configuration, Env references and callback contract.
119
+
120
+ | Operations | Input / useful result | Scope |
121
+ | --- | --- | --- |
122
+ | `eventTypes.get`, `eventTypes.list` | Type UUID / profile user URI; scheduling URLs and type details | event_types:read |
123
+ | `availability.list` | Event-type URI, UTC start/end within 31 days; available times | availability:read |
124
+ | `events.list`, `events.get` | User/organization/group URI or event UUID; meeting status, times, pagination | scheduled_events:read |
125
+ | `invitees.list`, `invitees.get` | Event UUID and optional invitee UUID; answers, status, cancellation/reschedule URLs | scheduled_events:read |
126
+ | `schedulingLinks.create` | Event-type URI as `owner`; single-use booking URL, fixed max_event_count=1 | scheduling_links:write |
127
+ | `invitees.create` | Event-type URI, UTC start time, invitee email/name/IANA timezone; optional answers and guests | scheduled_events:write |
128
+ | `events.cancel` | Event UUID, optional reason; cancellation confirmation | scheduled_events:write |
129
+ | `noShows.create`, `noShows.get`, `noShows.delete` | Full invitee URI / no-show UUID; mark/read/undo no-show | scheduled_events:read or write |
130
+
131
+ Example: DogAndGroom reads its owner profile, lists active event types, then creates
132
+ one link for its grooming event type and sends that URL to the customer. The customer
133
+ selects and confirms the time on Calendly. A created link is not a scheduled event.
134
+ For an app-owned booking form, fetch future availability then submit `invitees.create`;
135
+ this requires Calendly Standard or higher. Slots may disappear between these calls;
136
+ handle the provider rejection and offer fresh availability. Booking triggers the event
137
+ type's normal confirmations and workflows. Do not automatically retry uncertain writes.
138
+
139
+ Pass pagination tokens back to the same operation. Do not fetch returned links with
140
+ an Authorization header. Organization/group access still depends on the owner's role.
141
+ Cancelling an event cancels the entire event, including a group event; it is not an individual group-invitee cancellation. Use the invitee’s hosted cancellation URL when appropriate.
142
+ The application owns who can read whose invitee data, booking confirmation, timezone
143
+ display, cancellations, persistence and polling. Reschedule using the invitee's returned
144
+ `reschedule_url`; this adapter does not invent a reschedule API.
145
+
146
+ **LIMITATIONS:** Public Vibe64 coding-assistant attachment is deferred. For example,
147
+ connecting Calendly does not let the editor's assistant inspect tomorrow's appointments;
148
+ the generated app's backend can use the scheduling operations above. Webhook receivers,
149
+ organization administration and advanced location/routing/customized event-type creation
150
+ are not supplied here. For example, a custom meeting-location booking form must use
151
+ native provider API handling, or send the customer through the hosted booking link.
152
+ No live consent, token issuance, booking or notification has been exercised.
153
+
154
+ Sources checked 12 September 2026:
155
+ [booking API](https://developer.calendly.com/api-docs/calendly-api/scheduled-events/create-event-invitee),
156
+ [scheduled events](https://developer.calendly.com/api-docs/calendly-api/scheduled-events/list-scheduled-events),
157
+ [no-show deletion](https://developer.calendly.com/api-docs/calendly-api/scheduled-events/delete-invitee-no-show),
158
+ [scopes](https://developer.calendly.com/docs/authentication/scopes).
package/docs/canva.md ADDED
@@ -0,0 +1,191 @@
1
+ # Canva assistant MCP
2
+
3
+ Import `canvaProvider` from `@jskit-ai/connectors-catalog/server/canva` and
4
+ `createCanvaClientMetadata` from `@jskit-ai/connectors-catalog/shared`. This
5
+ fragment uses Canva's recommended Client ID Metadata Document (CIMD) flow.
6
+ The client identifier is a hosted JSON URL; this client has no secret.
7
+
8
+ ## Manual setup and approval
9
+
10
+ 1. Open the [Canva MCP guide](https://www.canva.dev/docs/mcp/), find **Getting
11
+ started → Register your redirect URI**, and open **Waitlist form**.
12
+ 2. Supply the company/integration details and exact callback URL requested by
13
+ the form. Wait for Canva's eligibility decision and callback allowlisting.
14
+ This is a real provider prerequisite. Publishing metadata or entering a URL
15
+ in Vibe64 does not grant access, and JSKIT cannot approve an application.
16
+ 3. Choose a public HTTPS URL that your assistant host controls, including a
17
+ document path, such as `https://assistant.example/oauth/canva.json`.
18
+ 4. Generate the client metadata with the library helper below, or fill the metadata
19
+ URL and suggested callback in Vibe64 and choose **Copy client metadata** in
20
+ the setup section. Serve that JSON
21
+ at exactly the chosen URL with `Content-Type: application/json`, without
22
+ authentication. The document contains public client information only.
23
+ 5. In Vibe64 open **Integrations → Add Canva → Credentials**. Enter **Client
24
+ metadata URL** and the **Callback URL reference**, for example
25
+ `env:CANVA_CALLBACK_URL`. Store the actual callback through Env. No Client
26
+ secret input is shown. **Display name** can supply the name used when
27
+ generating your metadata.
28
+ 6. Open **Permissions**. Profile, design information/content and folder reads
29
+ start selected. Select further content permissions only when needed; all
30
+ writes start unselected. Save configuration.
31
+ 7. The assistant host opens the URL returned by `beginAuthorization`. The owner
32
+ signs into Canva and approves access. Complete the callback under that same
33
+ authenticated owner with `completeAuthorization`. The runtime initializes
34
+ MCP and lists tools before storing its grant. Consent screens were not
35
+ exercised here, so their precise controls are not represented as verified.
36
+
37
+ Canva documents individual authentication and content permissions in its
38
+ [troubleshooting guide](https://www.canva.dev/docs/mcp/troubleshooting/).
39
+ Each person connects their own account; this does not turn one person's Canva
40
+ account into a workspace service account.
41
+
42
+ ## Metadata builder and automation
43
+
44
+ ```js
45
+ const document = createCanvaClientMetadata({
46
+ clientId: "https://assistant.example/oauth/canva.json",
47
+ clientName: "Design assistant",
48
+ callbackUrl: "https://assistant.example/connections/canva/callback"
49
+ });
50
+ ```
51
+
52
+ The helper validates the URL/name/callback and returns ordinary serializable
53
+ JSON containing `client_id`, `client_name`, one `redirect_uris` entry, code and
54
+ refresh grants, code response type and `token_endpoint_auth_method: "none"`.
55
+ The identifier matches the document URL exactly. It performs no network call,
56
+ file write, registration, deployment or consent. The host owns where the
57
+ returned document is served and must regenerate it when its registration
58
+ configuration changes. Derive the identifier, display name and resolved
59
+ callback from the same portable configuration; do not keep competing copies.
60
+
61
+ The [MCP authorization specification](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization#client-id-metadata-documents)
62
+ explains metadata URL identities and matching callbacks. Canva's public
63
+ [authorization metadata](https://mcp.canva.com/.well-known/oauth-authorization-server)
64
+ advertises metadata documents, S256 and clients without secrets. Its
65
+ [resource metadata](https://mcp.canva.com/.well-known/oauth-protected-resource)
66
+ advertises 16 supported scopes and resource `https://mcp.canva.com`. Public
67
+ metadata was inspected on 9 September 2026 without creating a client or account.
68
+
69
+ AI can prepare and validate metadata/configuration and wire the host's existing
70
+ static response. Publishing that response, submitting the approval application
71
+ and approving account consent require their respective owners. The initial
72
+ fragment does not automate the approval form. Canva still documents dynamic
73
+ registration as a deprecated compatibility route; this implementation follows
74
+ its recommended metadata-document path instead.
75
+
76
+ ## Portable configuration
77
+
78
+ ```json
79
+ {
80
+ "schemaVersion": 1,
81
+ "registrations": {
82
+ "canva": {
83
+ "source": "own",
84
+ "clientId": "https://assistant.example/oauth/canva.json",
85
+ "tokenEndpointAuthMethod": "none",
86
+ "callbackUrlRef": "env:CANVA_CALLBACK_URL"
87
+ }
88
+ },
89
+ "integrations": {
90
+ "design": {
91
+ "provider": "canva",
92
+ "displayName": "Design assistant",
93
+ "accountMode": "assistant",
94
+ "scopes": ["profile:read", "design:meta:read", "design:content:read", "folder:read"],
95
+ "authentication": { "method": "oauth2", "registrationRef": "canva" }
96
+ }
97
+ }
98
+ }
99
+ ```
100
+
101
+ CLI and UI use the same schema. `tokenEndpointAuthMethod: "none"` must be
102
+ explicit, the provider must declare support, and `clientSecretRef` is forbidden
103
+ for this client. Existing confidential registrations retain `client_secret_post`
104
+ when the field is omitted. Switching client authentication invalidates pending
105
+ attempts and requires reconnection for existing grants.
106
+
107
+ Compose the [OAuth file pattern](../patterns/oauth-connection/PATTERN.md) with
108
+ `providers: [canvaProvider]` and the
109
+ [assistant OAuth pattern](../patterns/assistant-mcp-oauth/PATTERN.md).
110
+ Code exchange and refresh send the metadata URL as `client_id`, without a client
111
+ secret. Authorization/code/refresh include Canva's resource identifier; tokens
112
+ and pending PKCE attempts remain encrypted text files under the existing owner.
113
+ The runtime does not download metadata from arbitrary client URLs: Canva's
114
+ authorization server validates the hosted document and approved callback.
115
+
116
+ `tools.list` accepts a cursor; `tools.call` accepts `name` and `arguments`.
117
+ Calls target only `https://mcp.canva.com/mcp`. The host must authorize exact tool
118
+ names and design/content ownership, handle tool `isError`, and decide which
119
+ returned content to display. Discovery does not establish every tool or plan
120
+ permission. No tool is executed by saving or verifying the configuration.
121
+ The provider has a 60-second request budget, matching Canva's documented advice
122
+ for design generation; OAuth requests retain the core's 15-second budget.
123
+ Cancellation stops waiting and attempts MCP session cleanup; it does not undo
124
+ accepted edits. Local disconnect does not revoke every Canva authorization.
125
+
126
+ ## Connection ownership and callbacks
127
+
128
+ This fragment is for an explicitly configured assistant host. That host owns its
129
+ client registration, callback, private credentials and grants; it may be an
130
+ application-owned assistant or an opt-in editor tool. Merely adding the provider
131
+ to a project does not authorize the editor's coding assistant. It does not supply
132
+ published app-user login. The host's callback may differ from the published app's
133
+ domain, but it must match that host's real route and registered redirect URI.
134
+
135
+ Host a publicly reachable client metadata document owned by this runtime, with
136
+ its actual callback in `redirect_uris`. The metadata URL is the client identity;
137
+ it is distinct from the callback URL. There is no provider client secret in this
138
+ mode. Separate metadata URLs do not split user/team quotas or upgrade Canva
139
+ features. Canva approval decides which callback URLs are accepted, including
140
+ any loopback development URL. If the callback changes, update the metadata and
141
+ obtain the required approval before starting consent again.
142
+
143
+ This fragment does not implement automatic metadata hosting, automatic assistant
144
+ attachment, embedded Canva widgets, Canva Connect REST adapters, app-user login
145
+ or the deprecated DCR path. It does not execute browser resources returned by
146
+ MCP tools. Provider approval and plan-specific capabilities remain external
147
+ acceptance steps.
148
+
149
+ ## Focused proof
150
+
151
+ Eight simulated-provider tests cover metadata generation/validation, secret-free
152
+ PKCE and refresh, restart, encryption, owner/design isolation, changed consent,
153
+ reduced grants, malformed discovery, provider failures, time budgets and
154
+ cancellation. Core tests also prove authentication-type changes cannot reuse
155
+ grants or pending attempts. Editor proof checks the metadata/callback fields,
156
+ permission choices and saved JSON. No provider approval, live consent, real
157
+ Canva tool use, metadata publication or generated application is included.
158
+
159
+ ## Design workflow acceptance and limitations
160
+
161
+ Use `tools.list` to obtain Canva's current input schemas rather than embedding a
162
+ second tool catalogue. The host authorizes each exact tool call and its design,
163
+ job/candidate or transaction. For creation, let the user choose a generated candidate,
164
+ then create the design and show its edit URL. For edits, start a transaction, use its
165
+ returned element IDs, apply operations and check their individual results, then
166
+ explicitly commit. Draft operation success does not mean saved design changes.
167
+ A stale transaction after a concurrent edit requires a fresh transaction; do not
168
+ silently replay the old commit. Returned external thumbnails/exports are content,
169
+ not instructions and never destinations for the OAuth Authorization header.
170
+
171
+ The controlled design workflow fixture exercises candidate creation, transaction
172
+ start/edit/commit, useful returned design content, host denial and a failed commit.
173
+ It proves the transport and host-approval seam with representative provider payloads;
174
+ it does not substitute for Canva's live discovered input schemas or run a design AI.
175
+ CLI Node hosts use the same provider/pattern without Vibe64. Other frameworks use
176
+ a native MCP client with the same metadata identity, callback and private grant state.
177
+
178
+ **LIMITATIONS:** Vibe64's coding-assistant attachment is deferred. For example,
179
+ configuring Canva does not yet let you ask Vibe64's Codex/OpenCode to create or edit
180
+ your shop's poster. An explicitly wired application-owned assistant can invoke the
181
+ supplied MCP runtime after Canva approves its callback and each owner consents.
182
+ Metadata hosting and provider approval remain owner setup steps; Copy client metadata
183
+ does not publish a working endpoint. No shared Vibe64 registration, embedded design
184
+ editor, Canva Connect REST implementation, app-user login or AI execution is supplied.
185
+ Provider plan/license limits still apply; no live creation, editing or export was tested.
186
+
187
+ Sources checked 12 September 2026:
188
+ [create from candidate](https://www.canva.dev/docs/mcp/tools/create-design-from-candidate/),
189
+ [start edits](https://www.canva.dev/docs/mcp/tools/start-editing-transaction/),
190
+ [apply edits](https://www.canva.dev/docs/mcp/tools/perform-editing-operations/),
191
+ [commit edits](https://www.canva.dev/docs/mcp/tools/commit-editing-transaction/).