@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
@@ -0,0 +1,747 @@
1
+ import { createSchema } from "json-rest-schema";
2
+
3
+ function definition(id, name, description, url, steps) {
4
+ return Object.freeze({
5
+ id, name, description, accountModes: ["shared", "assistant"],
6
+ authenticationMethods: ["api-key"], scopes: [], setup: { url, steps }
7
+ });
8
+ }
9
+
10
+ const airtableDefinition = definition("airtable", "Airtable", "Discover bases, read and edit records, and manage tables and fields.",
11
+ "https://support.airtable.com/docs/creating-personal-access-tokens", [
12
+ "Open Airtable Developer hub, then Personal access tokens and Create token.",
13
+ "Name the token. Choose + Add a scope and add schema.bases:read for discovery, data.records:read for records, data.records:write for record changes, and schema.bases:write only for table/field changes or base creation. Record writes need Editor base access; schema writes need Creator access. Creating a base needs Workspace Creator access and a token resource grant covering that workspace. Otherwise choose + Add a base to select the bases this application needs. Your Airtable account must already have access to them.",
14
+ "Create the token and copy its value. Enter env:AIRTABLE_TOKEN in API key reference here and save. Choose Set credential in Env, paste the token as the AIRTABLE_TOKEN value, and save it there.",
15
+ "Return here and choose Connect account (or Verify again for an existing connection). Check connection only reads the application’s saved status. No OAuth registration or callback URL is needed for this personal token. Legacy Airtable API keys no longer work.",
16
+ "Verification lists accessible bases. If expected bases are missing, check the token's resources, schema.bases:read permission and your own base access. Organization API restrictions may require your Airtable administrator to allow access.",
17
+ "To rotate access, create a replacement PAT with the required scopes and resources, update AIRTABLE_TOKEN in Env, and choose Verify again. Revoke the old token in Airtable after checking other applications that use it. Disconnect here removes this application’s saved connection; it does not revoke the PAT or erase Env."
18
+ ]);
19
+ const notionInternalDefinition = definition("notion", "Notion", "Read, query and update pages and data sources shared with a Notion connection.",
20
+ "https://developers.notion.com/guides/get-started/internal-connections", [
21
+ "Application data mode reads pages/blocks, queries data sources, creates pages, updates properties and appends blocks. Retrieve the database and its data_sources IDs/schema first. LIMITATIONS: no embedded editor, schema editing, file upload or automatic coding-chat attachment. For example, append meeting notes; your app owns its rendering and write approvals.",
22
+ "As a Notion workspace owner, open the Developer portal at https://www.notion.so/profile/integrations. In Build → Internal connections, choose Create a new connection, name it for this application and select its workspace.",
23
+ "Open Configuration, enable Read content; enable Insert content for creation/appending and Update content for page-property changes and copy the Installation access token. This is an internal connection token; it does not provide each application user's own Notion account or an OAuth login.",
24
+ "Open Content access → Edit access and select the required pages/databases. Alternatively, on a Notion page use ••• → Connections → + Add connection and select this connection. Parent-page access includes its children; a new connection has no page access.",
25
+ "Keep env:NOTION_API_KEY in API key reference here and Save configuration. Select Set credential in Env, save the copied token as NOTION_API_KEY, then return. Store the value only in Env, never in this JSON file or chat. No client ID, client secret or callback URL is needed for this internal-token mode.",
26
+ "Choose Connect account. Verification searches accessible titles without changing content. An empty result does not prove that the intended pages are shared: check Content access and Read content if expected results are missing. Your application decides who may use this shared connection.",
27
+ "If the token is exposed, refresh it in Notion's Configuration tab, update the referenced Env value and reconnect. Disconnect here removes this application's local connection; manage provider access separately in Notion. Other applications using the old token need their Env updated too."
28
+
29
+ ]);
30
+ const notionDefinition = Object.freeze({
31
+ ...notionInternalDefinition,
32
+ accountModes: ["shared", "per-user", "assistant"],
33
+ authenticationMethods: ["api-key", "oauth2"],
34
+ oauthClientAuthenticationMethods: (_grant, settings) => settings?.connectionType === "mcp" ? ["client_secret_post"] : ["client_secret_basic"],
35
+ accountModesForSettings: (settings) => settings.connectionType === "mcp" ? ["assistant"] : ["shared", "per-user", "assistant"],
36
+ authenticationMethodsForSettings: (settings) => settings.connectionType === "mcp" ? ["oauth2"] : ["api-key", "oauth2"],
37
+ scopesForSettings: (settings) => settings.connectionType === "mcp" ? [{ value: "default", label: "Notion MCP access", required: true }] : [],
38
+ settingsSchema: createSchema({ connectionType: { type: "string", enum: ["rest", "mcp"], defaultTo: "rest" } }),
39
+ settingsFields: [{ name: "connectionType", label: "Connection type", credentialScope: (value) => value || "rest",
40
+ hint: "Hosted MCP needs its own client registration and consent; REST credentials cannot be reused.",
41
+ items: [{ value: "rest", title: "Application data (REST)" }, { value: "mcp", title: "Hosted assistant tools (MCP)" }] }],
42
+ setup: { ...notionInternalDefinition.setup,
43
+ urlForSettings: (settings, method) => settings.connectionType === "mcp"
44
+ ? "https://developers.notion.com/guides/mcp/build-mcp-client"
45
+ : method === "oauth2" ? "https://developers.notion.com/guides/get-started/public-connections" : notionInternalDefinition.setup.url,
46
+ clientRegistrationEndpoint: (settings) => settings.connectionType === "mcp" ? "https://mcp.notion.com/register" : undefined,
47
+ stepsForSettings: (settings, method) => settings.connectionType === "mcp" ? [
48
+ "LIMITATIONS: Automatic Vibe64 coding-chat attachment is deferred. A wired host may call discovered tools after authorizing each call; merely saving this connection does not equip coding chat. REST content operations belong to Application data mode.",
49
+ "Choose Hosted assistant tools (MCP). This uses Notion's hosted MCP service, with a separate OAuth client from a public REST connection. Keep Assistant access and the required Notion MCP access permission.",
50
+ "Use the OAuth client registration request below with the exact callback your assistant host serves. Send its JSON once to https://mcp.notion.com/register, or use registerNotionMcpClient from the JSKIT CLI code. A timeout may still create a client; inspect the result before retrying.",
51
+ "Copy the returned client_id into Client ID. Save client_secret in the referenced Env variable and the registered callback in its callback Env variable. Save configuration. Do not paste the full registration response or secret into configuration or chat.",
52
+ "Choose Connect account, sign into the intended Notion workspace and approve the requested access. The host completes the callback using PKCE. Verification lists tools without running one; your assistant must authorize each tool and its exact arguments.",
53
+ "Reconnect starts new consent. Disconnect removes local grants; manage Notion's provider-side connection separately in Settings → Connections. The host owns tokens and refresh. These credentials cannot authorize the REST operations of Application data mode."
54
+ ] : notionDefinition.setup.stepsByAuthentication?.[method] || notionInternalDefinition.setup.steps,
55
+ stepsByAuthentication: { oauth2: [
56
+ "Application data mode reads page properties and block children, queries data sources, creates pages and updates properties or appends blocks. Retrieve a database to find its data_sources IDs, then retrieve that source schema before supplying properties. Follow has_more/next_cursor explicitly, including nested block children. LIMITATIONS: no embedded Notion editor, database-schema editing, file upload or automatic coding-chat attachment. For example, append meeting notes without receiving a full Notion workspace UI.",
57
+ "Open https://www.notion.so/profile/integrations. In Build → Public connections, choose Create new connection. Enter your application's connection name and development workspace.",
58
+ "Choose the installation scope carefully: Any workspace or Selected workspaces only. Notion does not let you change this choice after creation. Enable Read content; add Insert content for creation/appending and Update content for page-property changes; capabilities and the user's page selection determine access, so there are no OAuth scope checkboxes here.",
59
+ "Copy the Suggested callback URL for your application into Notion's Redirect URIs. Your application must serve this exact callback. Complete the provider's required fields and create the connection. Marketplace listing is a separate process.",
60
+ "In Configuration, copy OAuth client ID here. Keep env:NOTION_CLIENT_SECRET and env:NOTION_CALLBACK_URL as references. Save configuration, then use Set credential in Env for the OAuth client secret and Set callback in Env for the registered URL. Keep the secret out of source and chat.",
61
+ "Choose Each app user's own account when users need separate grants, or One shared account for an application-owned shared connection. Connect account opens consent. Select the intended workspace and pages, then Allow access. This authorizes Notion data; it does not log someone into your application.",
62
+ "Verification searches accessible titles without writing. Missing results can mean pages were not selected or Read content is unavailable. Reconnect for new consent; Disconnect removes the local grant, and provider access must be managed in Notion separately. Your application owns token storage and refresh after leaving Vibe64."
63
+ ] } }
64
+ });
65
+ const brevoDefinition = definition("brevo", "Brevo", "Send email and SMS, manage contacts and campaigns, and track delivery and automation events.",
66
+ "https://help.brevo.com/hc/en-us/articles/209467485-Create-and-manage-your-API-keys", [
67
+ "In Brevo, open the account menu, Settings, SMTP & API, then API Keys & MCP.",
68
+ "Your Brevo user needs API keys permission. Choose Generate a new API key, name it for this application, select its expiration and choose Generate.",
69
+ "Copy the value before leaving; it is shown only once. Leave Create MCP server API key off: enabling it replaces the ordinary API key. This connector needs the ordinary API key, not an SMTP or MCP key.",
70
+ "Enter env:BREVO_API_KEY in API key reference here and save. Choose Set credential in Env, paste the key as the BREVO_API_KEY value and save it there. Return here and choose Connect account or Verify again. Check connection only reloads status.",
71
+ "Before email sending: Settings > Senders, Domains, IPs > Domains > Add a domain. Authenticate automatically if offered, or copy the exact Brevo code, DKIM and DMARC records into your DNS provider and recheck. Then Senders > Add a sender, enter From name/email, Save, and complete the emailed verification code if requested.",
72
+ "For SMS, check your account’s country-specific sender requirements. Where registration is available, Settings > Campaigns > SMS Sender ID > Configure > Request Sender ID; choose recipient country, provide company and message details, submit and wait for approval. SMS credits and sender approval are separate from a valid API key.",
73
+ "Marketing requires an appropriate recipient list and opt-out handling. Create a campaign draft and send a test before explicitly sending to its lists. A returned message ID is acceptance, not delivery; inspect delivery events for bounces or rejection. Automation events only trigger workflows configured and active in Brevo.",
74
+ "No OAuth registration or callback URL is needed. Verification reads contacts without sending messages. Replace an expired or lost key in Env and reconnect. Disconnect removes local state only; delete the old key in Brevo to revoke it."
75
+ ]);
76
+ const elevenlabsDefinition = definition("elevenlabs", "ElevenLabs", "Generate speech, discover voices/models and create instant voice clones.",
77
+ "https://elevenlabs.io/docs/help-center/technical/how-do-i-authorize-myself-using-an-api-key", [
78
+ "Select the intended ElevenLabs workspace and open Developers > API Keys > Create API Key. Name it for this app and keep Restrict Key enabled.",
79
+ "Under Endpoints, enable User read for verification, Voices read for discovery, Models read for model selection and Text to Speech for generation. Enable Voices write only if the app will create voice clones. Set a credit limit, create the key and copy it immediately; only its last four characters are shown later.",
80
+ "Enter env:ELEVENLABS_API_KEY in API key reference and save. Choose Set credential in Env, paste the key as ELEVENLABS_API_KEY and save there. Return and choose Connect account / Verify again; Check connection only reads saved status. Verification reads the account and does not generate audio or prove generation/cloning permissions.",
81
+ "Choose an accessible voice and a model supporting text-to-speech. Generation spends this workspace’s credits. Voice availability and formats depend on the plan; a valid key does not grant every library voice. The app owns its text/audio screens and usage limits.",
82
+ "Instant Voice Cloning requires an eligible plan (Starter or above), an available voice slot and permission to clone the speaker. In Voices > Add a new voice > Instant Voice Clone, provide clear audio, name the voice and confirm rights; or have the app explicitly upload authorized samples. If requires_verification is true, finish ElevenLabs verification before treating the new voice as ready.",
83
+ "This connector returns bounded audio files, not live streaming. Professional Voice Cloning and realtime speech use native provider tools. Configuring it does not attach ElevenLabs to Vibe64’s coding assistant. Rotate keys in Env and verify again; Disconnect removes app state, while Developers > API Keys > key menu revokes provider access. No OAuth application or callback URL is required."
84
+ ]);
85
+ const githubApiDefinition = Object.freeze({
86
+ ...definition("github-api", "GitHub API", "Read repository content and activity; create and update issues and pull requests.",
87
+ "https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app", [
88
+ "For OAuth, open GitHub Settings > Developer settings > OAuth Apps > New OAuth App. Enter the application name and its hosting URL. Copy Suggested callback URL here into Authorization callback URL, then register the application.",
89
+ "Copy Client ID here. Generate a client secret and keep it private. Save configuration, then follow the Env links to store the secret and exact callback under their referenced names. Your application backend must implement the callback.",
90
+ "Choose only the permissions this application needs. Connect the shared account here; for each user's own account, the generated application's account screen starts the connection.",
91
+ "For a personal token, select API key instead. In GitHub Settings > Developer settings > Personal access tokens > Fine-grained tokens, generate a token with an expiry, resource owner and selected repositories. Metadata read access covers repository listing; allow Contents read for files/commits/releases, Actions read for workflow runs, Issues read or write and Pull requests read or write for the operations you enable; complete organization approval if required.",
92
+ "For token setup enter env:GITHUB_API_KEY as the API key reference, Save configuration, then Set credential in Env. Store the real token as GITHUB_API_KEY and return and choose Connect account or Verify again. Check connection reads saved status. Personal tokens need no OAuth callback.",
93
+ "For OAuth private repositories request repo; public-only writes can use public_repo. These scopes are broader than fine-grained token permissions. Issue/PR writes are explicit app actions and are never performed during verification. This API connector does not synchronize project code or replace Vibe64 Git login.",
94
+ "Verification reads the connected account profile; repository access still depends on token permissions and organization policy. Update rotated credentials in Env. Disconnect removes local state; revoke the token or OAuth authorization in GitHub separately."
95
+ ]),
96
+ accountModes: ["shared", "per-user", "assistant"],
97
+ authenticationMethods: ["oauth2", "api-key"],
98
+ oauthClientAuthenticationMethods: ["client_secret_post"],
99
+ scopes: [
100
+ { value: "read:user", label: "Read user profile", recommended: true },
101
+ { value: "repo", label: "Repositories", recommended: true },
102
+ { value: "public_repo", label: "Public repositories" },
103
+ { value: "workflow", label: "Workflows" },
104
+ { value: "gist", label: "Gists" },
105
+ { value: "notifications", label: "Notifications" },
106
+ { value: "user:email", label: "Email" },
107
+ { value: "read:org", label: "Read organizations" },
108
+ { value: "project", label: "Projects" },
109
+ { value: "offline_access", label: "Expiring tokens with refresh access" }
110
+ ]
111
+ });
112
+ const apifyDefinition = definition("apify", "Apify", "Run Actors with explicit limits and retrieve their results.",
113
+ "https://docs.apify.com/integrations/api", [
114
+ "Select the intended account or organization in Apify Console.",
115
+ "Open Settings, API & Integrations, then create an API token for this application.",
116
+ "In Description, identify this application. To expire the token, enable Set expiration date and choose its Date. A standard token (Limit token permissions off) has broad access to this account, not just read access. Use it only if this application's owner accepts that access. Scoped tokens are also accepted, but their permissions must allow listing Actors; this guide does not establish a minimum scoped permission set. Do not broaden an existing token merely to make a check pass.",
117
+ "Choose Create, then copy the token. A personal-account token does not access organizations you belong to. For organization resources, switch to that organization before creating its personal or organization token; organization tokens require owner or Manage access tokens permission.",
118
+ "Copy the token. Enter env:APIFY_TOKEN in API key reference here and save. Choose Set credential in Env, paste the token as the APIFY_TOKEN value and save it there. Return here and choose Connect account (or Verify again for a connected account). Check connection only reads the current connection status.",
119
+ "No OAuth registration or callback URL is needed. Verification lists Actors without starting a run. For scoped tokens that run Actors and read their output, allow Run on the intended Actor and access to its default run storages in the token permissions. Review the Actor execution permission mode; Full access gives the running Actor account-wide access. If you rotate or expire this token, update its Env value before reconnecting. Disconnect removes the application connection; revoke the token in Apify Console to withdraw provider access."
120
+ ]);
121
+
122
+ const calendlyDefinition = Object.freeze({
123
+ "id": "calendly",
124
+ "name": "Calendly",
125
+ "description": "Read meetings and invitees, check availability, create booking links and manage appointments.",
126
+ "accountModes": [
127
+ "shared",
128
+ "assistant"
129
+ ],
130
+ "authenticationMethods": [
131
+ "oauth2",
132
+ "api-key"
133
+ ],
134
+ "oauthClientAuthenticationMethods": [
135
+ "client_secret_basic"
136
+ ],
137
+ "scopes": [
138
+ {
139
+ "value": "users:read",
140
+ "label": "users — read",
141
+ "recommended": true
142
+ },
143
+ {
144
+ "value": "organizations:read",
145
+ "label": "organizations — read"
146
+ },
147
+ {
148
+ "value": "event_types:read",
149
+ "label": "event types — read",
150
+ "recommended": true
151
+ },
152
+ {
153
+ "value": "scheduled_events:read",
154
+ "label": "scheduled events — read"
155
+ },
156
+ {
157
+ "value": "availability:read",
158
+ "label": "availability — read"
159
+ },
160
+ {
161
+ "value": "scheduling_links:write",
162
+ "label": "scheduling links — write"
163
+ },
164
+ {
165
+ "value": "shares:write",
166
+ "label": "shares — write"
167
+ },
168
+ {
169
+ "value": "scheduled_events:write",
170
+ "label": "scheduled events — write"
171
+ },
172
+ {
173
+ "value": "event_types:write",
174
+ "label": "event types — write"
175
+ },
176
+ {
177
+ "value": "availability:write",
178
+ "label": "availability — write"
179
+ },
180
+ {
181
+ "value": "locations:read",
182
+ "label": "locations — read"
183
+ },
184
+ {
185
+ "value": "routing_forms:read",
186
+ "label": "routing forms — read"
187
+ },
188
+ {
189
+ "value": "groups:read",
190
+ "label": "groups — read"
191
+ },
192
+ {
193
+ "value": "organizations:write",
194
+ "label": "organizations — write"
195
+ },
196
+ {
197
+ "value": "webhooks:read",
198
+ "label": "webhooks — read"
199
+ },
200
+ {
201
+ "value": "webhooks:write",
202
+ "label": "webhooks — write"
203
+ },
204
+ {
205
+ "value": "activity_log:read",
206
+ "label": "activity log — read"
207
+ },
208
+ {
209
+ "value": "data_compliance:write",
210
+ "label": "data compliance — write"
211
+ },
212
+ {
213
+ "value": "outgoing_communications:read",
214
+ "label": "outgoing communications — read"
215
+ },
216
+ {
217
+ "value": "contacts:read",
218
+ "label": "contacts — read"
219
+ },
220
+ {
221
+ "value": "contacts:write",
222
+ "label": "contacts — write"
223
+ }
224
+ ],
225
+ "setup": {
226
+ "url": "https://developer.calendly.com/docs/authentication/creating-an-oauth-app",
227
+ "steps": [
228
+ "For OAuth, open the Calendly developer portal (a separate account from your Calendly user account) and create an OAuth application. Set its name, web type, and Sandbox or Production environment.",
229
+ "Copy this project’s suggested callback into Redirect URI. Production requires HTTPS; Sandbox allows HTTP localhost. Select users:read for profile verification and event_types:read for event types. Add scheduled_events:read for meetings and invitees, availability:read for slots, scheduling_links:write for single-use links and scheduled_events:write for booking, cancellation or no-shows.",
230
+ "Continue and copy Client ID here. Save Client Secret and callback URL through their Env references. Calendly shows the secret and webhook signing key only at creation; the signing key is not the client secret and is unused by this connector.",
231
+ "Save and choose Connect account. Each project uses its own registration; web token requests use Basic client authentication. Changing the app domain requires editing Redirect URI in Calendly and saving the matching callback in Env.",
232
+ "For a personal token instead, open Calendly Integrations, API & Webhooks, Personal Access Tokens, then Get a token now or Generate new token. Name the token and select users:read and event_types:read.",
233
+ "Copy the personal token into Env as CALENDLY_API_KEY. Choose API key authentication here, enter env:CALENDLY_API_KEY, save, and choose Connect account; Verify again checks a saved connection. Personal tokens need no OAuth registration or callback.",
234
+ "A single-use scheduling link sends the customer to Calendly to choose and confirm a time; creating a link is not a booking. Direct API booking needs Calendly Standard or higher and triggers the event type’s normal notifications and workflows. Use the returned reschedule URL for rescheduling; no reschedule API is provided.",
235
+ "Verification reads the connected profile without booking an appointment. Reconnect after a revoked grant. Local disconnect removes app connection state; revoke the token or app access in Calendly to remove provider access."
236
+ ]
237
+ }
238
+ });
239
+
240
+ const hubspotKeyDefinition = definition("hubspot", "HubSpot", "Manage contacts, deals and their relationships in the connected HubSpot account.",
241
+ "https://developers.hubspot.com/docs/apps/legacy-apps/private-apps/overview", [
242
+ "As a HubSpot super admin, select the account that owns the CRM data. Open Development > Legacy apps > Create legacy app > Private.",
243
+ "Name the app. In Scopes > Add new scope, select crm.objects.contacts.read for verification. Add crm.objects.contacts.write to manage contacts, crm.objects.deals.read for deals/pipeline IDs, and crm.objects.deals.write to create/update deals and link contacts. Choose Update. Create the app and confirm. In Auth, use Show token > Copy. Use an app access token, not a CLI personal access key or developer API key.",
244
+ "Keep Read CRM contacts selected, enter env:HUBSPOT_API_KEY in API key reference and Save configuration. Choose Set credential in Env, paste the token as HUBSPOT_API_KEY and save it there. Keep the value in backend Env.",
245
+ "Return and choose Connect account. Verification reads contacts without modifying them. No OAuth callback is required for this shared token. A developer-platform static access token for the same account can also be used.",
246
+ "Use internal property, pipeline and stage IDs from HubSpot, not display labels. The app can create a contact, create a deal, link them and advance its stage; it owns triggers, duplicate prevention and business authorization. There is no workflow designer or sync daemon. Rotate the token in HubSpot and update Env, then reconnect. Disconnect only removes this application's local grant; revoke the provider token separately. This shared connection uses one HubSpot account for the application's authorized users."
247
+ ]);
248
+ const hubspotDefinition = Object.freeze({
249
+ ...hubspotKeyDefinition,
250
+ accountModes: ["shared", "per-user", "assistant"],
251
+ authenticationMethods: ["api-key", "oauth2"],
252
+ oauthClientAuthenticationMethods: ["client_secret_post"],
253
+ scopes: [{ value: "oauth", label: "Authorize the HubSpot app", recommended: true },
254
+ { value: "crm.objects.contacts.read", label: "Read CRM contacts", recommended: true },
255
+ { value: "crm.objects.contacts.write", label: "Create and update CRM contacts" },
256
+ { value: "crm.objects.deals.read", label: "Read deals and pipelines" },
257
+ { value: "crm.objects.deals.write", label: "Create and update CRM deals" }],
258
+ setup: {
259
+ ...hubspotKeyDefinition.setup,
260
+ urlByAuthentication: { oauth2: "https://developers.hubspot.com/docs/apps/developer-platform/build-apps/create-an-app" },
261
+ stepsByAuthentication: { oauth2: [
262
+ "Create a HubSpot developer project using the Provider setup guide and hs project create. Select App and OAuth authentication. Private distribution allows up to ten allowlisted HubSpot accounts; choose marketplace distribution if you need broader distribution and follow its requirements.",
263
+ "In the generated src/app/app-hsmeta.json, set config.auth.type to oauth. Put this screen's exact Suggested callback URL in config.auth.redirectUrls and request oauth and crm.objects.contacts.read in requiredScopes. Add contact/deal write scopes and deal read scope only for the operations your app uses. Use HTTPS for production. Upload with hs project upload.",
264
+ "Run hs project open. Under Project Components, select the app, then Auth > Client credentials. Copy Client ID here. Save configuration, then Set credential in Env to store Client secret under the displayed reference. Use Set callback in Env to save the exact registered callback.",
265
+ "Keep the same permissions selected here and save. For shared access, choose Connect account and authorize the intended HubSpot account. For each-user access, each person connects from the generated application's account screen after signing in. Application login and connecting HubSpot are separate actions.",
266
+ "HubSpot installation normally grants account-level CRM access, not just records owned by the person clicking Connect. Your app must enforce its own authorization. Verification reads contacts; it does not modify CRM records. Saving these fields does not create or upload a HubSpot developer project.",
267
+ "Reconnect repeats consent. Disconnect removes the local grant; uninstall the connected app in HubSpot separately to remove its provider access. A new client registration or callback needs matching configuration and may require consent again."
268
+ ] }
269
+ }
270
+ });
271
+ const linearKeyDefinition = definition("linear", "Linear", "Read profiles and issues, or use Linear MCP tools with the connected account.",
272
+ "https://linear.app/docs/api-and-webhooks", [
273
+ "In the intended Linear workspace, open Settings > Account > Security & Access > Personal API keys. Create a named key, select Read and restrict it to the teams this application needs. Add the required write permissions only if your application will create or update issues/projects. Copy the key before leaving.",
274
+ "If key creation is unavailable, ask a workspace administrator to check Settings > Administration > API > Member API keys. Administrators can create keys even when member key creation is disabled.",
275
+ "Enter env:LINEAR_API_KEY as API key reference, keep Read selected and Save configuration. Choose Set credential in Env, store the actual key as LINEAR_API_KEY, and return to Connect account. The secret belongs in Env, not this form or source control.",
276
+ "Verification reads the connected profile; it does not create issues. This key connects one account for shared or assistant use. To let each application user connect their own account, select OAuth instead.",
277
+ "Your application can discover Linear MCP tools and use the returned schemas to create projects and create/update issues. Approve each tool name and its arguments before calling it; check isError before reporting success. Connecting here does not attach tools to Vibe64 Codex/OpenCode: for example, a saved connection alone does not let the coding chat edit an issue.",
278
+ "MCP uses the same key with its permissions. Read-only keys cannot perform writes; your application must authorize individual tool calls. Disconnect removes the local connection. Revoke or replace the key in Linear separately."
279
+ ]);
280
+ const linearDefinition = Object.freeze({
281
+ ...linearKeyDefinition,
282
+ accountModes: ["shared", "per-user", "assistant"], authenticationMethods: ["api-key", "oauth2"],
283
+ tokenEndpointAuthMethods: ["client_secret_post"],
284
+ scopes: [
285
+ { value: "read", label: "Read your account", recommended: true },
286
+ { value: "write", label: "Write on your behalf" },
287
+ { value: "issues:create", label: "Create issues and attachments" },
288
+ { value: "comments:create", label: "Create comments" },
289
+ { value: "timeSchedule:write", label: "Manage time schedules" }
290
+ ],
291
+ setup: { ...linearKeyDefinition.setup,
292
+ urlByAuthentication: { oauth2: "https://linear.app/developers/oauth-2-0-authentication" },
293
+ stepsByAuthentication: { oauth2: [
294
+ "Sign into the Linear workspace that will own your application registration as an administrator. Open Settings > Administration > API and create an OAuth application, or open https://linear.app/settings/api/applications/new. Give it your application's name and register the exact Suggested callback URL shown here.",
295
+ "Copy the registration's Client ID into this form. Save configuration, then use the Env links to store its Client Secret and the same callback URL under their referenced names. The generated application's backend must implement this callback; saving a URL does not create the route.",
296
+ "Keep Read selected. Add write, issue creation, comment creation or time-schedule permissions only for features your application will actually expose. This connection acts as the consenting user. It does not create a Linear service-account agent.",
297
+ "Save and choose Connect account for shared or assistant access. For Each user, connect from the generated application's account screen after signing in. Select the intended Linear workspace and approve access; connecting Linear is separate from logging into your application.",
298
+ "The same OAuth grant can access GraphQL and https://mcp.linear.app/mcp. No separate MCP client registration is needed for this path. Verification only reads your profile. The application must authorize MCP tool calls, and the granted permissions limit which actions Linear permits.",
299
+ "Discover MCP tools at runtime and use their returned schemas to create projects or create/update issues. Your app owns tool approval and must check isError before reporting success. LIMITATION: saving this connection does not attach tools to Vibe64 Codex/OpenCode; the coding chat cannot edit an issue merely because you connected Linear.",
300
+ "Reconnect repeats consent. Disconnect removes this project's local grant; revoke provider access separately in Linear Settings > Account > Security & Access > Authorized applications. Use a separate connection for another workspace. Changing registration or callback may require connecting again."
301
+ ] }
302
+ }
303
+ });
304
+ const pipedriveTokenDefinition = definition("pipedrive", "Pipedrive", "Read the authenticated user and identify their Pipedrive company.",
305
+ "https://pipedrive.readme.io/docs/how-to-find-the-api-token", [
306
+ "The adapter lists/reads deals, people, organizations, activities, leads and pipelines, and creates/updates basic records except pipelines. The app must authorize each record and write. LIMITATIONS: no full CRM UI, pipeline administration, bulk import, custom-field editor, attachments, webhooks or automatic coding-chat attachment. For example, create a contact and follow-up deal; the app supplies its sales dashboard.",
307
+ "Sign into Pipedrive and switch to the company this application should access. The same user has a different API token in each company; a direct settings link may open the company you used most recently.",
308
+ "Open your account name at the top right → Company settings → Personal preferences → API. Copy the API token. If the API section is unavailable, ask the company administrator to check your API access.",
309
+ "Keep env:PIPEDRIVE_API_KEY in API key reference here and Save configuration. Choose Set credential in Env, store the copied token as PIPEDRIVE_API_KEY and save it there. Keep the actual token out of configuration JSON and chat. API-token mode needs no client ID, client secret or callback URL.",
310
+ "For CRM operations with an API token, copy the company subdomain from your browser: for https://acme.pipedrive.com enter acme in Company domain (API token). Save and reconnect after changing it. OAuth obtains its company address from consent and ignores this setting.",
311
+ "Return and choose Connect account. Verification reads the authenticated user's profile and company without changing CRM records. Check that the token belongs to the intended company. This shared connection acts as its token owner; your application controls which users may use it.",
312
+ "There is only one active API token for that user in that company. If you regenerate it in Pipedrive, update the referenced Env value and reconnect; every other tool using the old token needs updating too.",
313
+ "Disconnect here removes this application's local connection. It does not invalidate the original Pipedrive API token. Manage that credential in Pipedrive's API settings separately."
314
+ ]);
315
+ const pipedriveDefinition = Object.freeze({
316
+ ...pipedriveTokenDefinition,
317
+ accountModes: ["shared", "per-user", "assistant"],
318
+ authenticationMethods: ["api-key", "oauth2"],
319
+ oauthClientAuthenticationMethods: ["client_secret_basic"],
320
+ settingsSchema: createSchema({ companyDomain: { type: "string", minLength: 1, maxLength: 63, pattern: "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$" } }),
321
+ settingsFields: [{ name: "companyDomain", label: "Company domain (API token)", hint: "For acme.pipedrive.com enter acme. Required for API-token CRM operations; OAuth uses the company address returned with consent." }],
322
+ scopes: [],
323
+ setup: { ...pipedriveTokenDefinition.setup,
324
+ urlByAuthentication: { oauth2: "https://pipedrive.readme.io/docs/marketplace-registering-a-private-app" },
325
+ stepsByAuthentication: { oauth2: [
326
+ "The adapter lists/reads deals, people, organizations, activities, leads and pipelines, and creates/updates basic records except pipelines. The app must authorize each record and write. LIMITATIONS: no full CRM UI, pipeline administration, bulk import, custom-field editor, attachments, webhooks or automatic coding-chat attachment. For example, create a contact and follow-up deal; the app supplies its sales dashboard.",
327
+ "Sign into your Pipedrive developer sandbox account and open the account menu → Developer Hub. If it is missing, request a developer sandbox through https://developers.pipedrive.com. Choose Create an app, then Create private app for an unlisted integration; choose public only when you need a Marketplace listing. This app type cannot be changed later.",
328
+ "In Basic info enter your application's name and copy its Suggested callback URL into OAuth Callback URL, then Save. Pipedrive allows one callback per registration. Your application backend must serve this exact URL; save the same URL in its callback Env variable.",
329
+ "In OAuth & access scopes copy Client ID here and put Client secret in the referenced Env variable using Set credential in Env after Save configuration. Keep env:PIPEDRIVE_CLIENT_SECRET and env:PIPEDRIVE_CALLBACK_URL as references. Never store the actual secret in configuration or chat.",
330
+ "Verification reads the current profile with base permission. For CRM records, configure deals:read or deals:full (deals/leads/pipelines), contacts:read or contacts:full (people/organizations), and activities:read or activities:full. Use full only for create/update operations and reconnect after changing registration permissions. Pipedrive consent uses the registration's permissions, so this screen has no selectable OAuth scopes. For a private app, choose Change to live when ready to connect other companies; a draft is limited to its own company.",
331
+ "Choose Each app user's own account for separate user grants, or One shared account for an application-owned connection. Connect account starts consent: sign into the intended company and choose Allow and Install. This authorizes CRM access; it does not sign the person into your application. Cancel leaves the attempt unconnected.",
332
+ "Verification reads the authenticated profile. The runtime retains the returned company API address with that grant, and owns token refresh locally. Reconnect repeats consent. Disconnect removes the local grant; uninstall provider access separately under Pipedrive Settings → Tools and apps → Marketplace apps. A changed company address requires reconnecting."
333
+ ] }
334
+ }
335
+ });
336
+ const gitlabApiDefinition = Object.freeze({
337
+ ...definition("gitlab-api", "GitLab API", "Read project content and activity; create and update issues and merge requests.",
338
+ "https://docs.gitlab.com/integration/oauth_provider/", [
339
+ "Select your GitLab instance URL; use https://gitlab.com for GitLab.com. For OAuth, open your instance's /user_settings/applications page, add an application and enable Confidential. Enter the exact Suggested callback URL here as its redirect URI and select read_user and read_api.",
340
+ "Copy Application ID into Client ID here. Save configuration and use the Env links to store the Secret and the same callback under their referenced names. Your application backend must implement the callback. Each user's connection starts in the application's account screen.",
341
+ "For token setup, select API key. On the chosen instance open your avatar > Edit profile > Access > Personal access tokens. Generate a token with a name, expiry and read_api/read_user permissions for reads; use api for issue/merge-request writes. Project or group tokens require the corresponding resource role and API permissions.",
342
+ "Enter env:GITLAB_API_KEY as API key reference, Save configuration, then Set credential in Env. Store the real token as GITLAB_API_KEY and return to connect. The token must belong to the selected instance.",
343
+ "Issue and merge-request writes require api permission and an authorized project role. OAuth users must select api and reconnect if adding writes. Creation is explicit, never part of verification; the app must restrict project access for its visitors. This connector does not synchronize source code or run pipelines.",
344
+ "Verification reads the account profile, not repository contents. Changing the instance requires reconnection. Update rotated credentials in Env. Disconnect removes local state; revoke the token or authorized application in GitLab separately. CI job tokens and DPoP-bound tokens are not supported."
345
+ ]),
346
+ accountModes: ["shared", "per-user", "assistant"],
347
+ authenticationMethods: ["api-key", "oauth2"],
348
+ oauthClientAuthenticationMethods: ["client_secret_post"],
349
+ scopes: [{ value: "read_user", label: "Read user profile", recommended: true },
350
+ { value: "read_api", label: "Read API", recommended: true },
351
+ { value: "api", label: "Full API access" }],
352
+ settingsSchema: createSchema({ instanceUrl: { type: "string", defaultTo: "https://gitlab.com", noTrim: true,
353
+ validator: (value) => {
354
+ try {
355
+ const url = new URL(value);
356
+ return (url.protocol === "https:" && !url.username && !url.password && !url.search && !url.hash && url.pathname === "/") || "Enter the HTTPS GitLab instance origin without credentials, query or path.";
357
+ } catch { return "Enter the HTTPS GitLab instance URL."; }
358
+ }
359
+ } }),
360
+ settingsFields: [{ name: "instanceUrl", label: "Instance URL", placeholder: "https://gitlab.com",
361
+ hint: "The trusted GitLab instance that receives this connection's credentials. Defaults to GitLab.com." }]
362
+ });
363
+ const tallyDefinition = definition("tally", "Tally", "Create forms and retrieve submissions using your Tally account.",
364
+ "https://developers.tally.so/api-reference/api-keys", [
365
+ "Open Tally Settings, then API keys and Create API key.",
366
+ "Create the key for the intended user. It inherits that user's resource access; this flow does not offer per-form scopes.",
367
+ "Copy the key before closing; it cannot be displayed again. Enter env:TALLY_API_KEY in API key reference here and save. Choose Set credential in Env, paste the copied key as the TALLY_API_KEY value, and save it there.",
368
+ "Return here and choose Check connection. No OAuth registration or callback URL is needed. Verification lists forms without changing them.",
369
+ "Creating forms defaults to draft. Publishing is an explicit app action; replacing blocks can change existing questions. The app must authorize each form and access to its responses.",
370
+ "Submission reads default to completed responses. Partial responses require an explicit filter and appropriate provider access. Disconnect only removes the local connection; revoke or replace the key in Tally to end provider access.",
371
+ "A lost key needs a replacement. Keys stop working when their user leaves the organization; use the account intended to maintain this application's access."
372
+ ]);
373
+ const contentfulDefinition = Object.freeze({
374
+ ...definition("contentful", "Contentful", "Read published entries, linked assets, content models and locales from a Contentful space.",
375
+ "https://www.contentful.com/developers/docs/references/authentication/", [
376
+ "Select the intended Contentful space. Open Settings > API keys, Content delivery / preview tokens, then Add API key. Name this application's key.",
377
+ "Copy its Space ID into Space ID here. Copy the Content Delivery API access token; the Preview token and Content Management token are different credentials.",
378
+ "Authorize the intended environment for this key in Contentful, then choose Save at the top of the token form. Set the matching Environment ID here (master by default) and select the region where the space is hosted.",
379
+ "Enter env:CONTENTFUL_ACCESS_TOKEN in Content Delivery API token reference here and save. Choose Set credential in Env, paste the delivery token as CONTENTFUL_ACCESS_TOKEN and save it there. Return here and choose Connect account or Verify again. Check connection only refreshes local status.",
380
+ "Publish entries and assets in Contentful before reading them. Delivery access does not expose drafts. Use locale and include depth (0–10) when listing entries; linked entries/assets are returned under includes. Unpublished or missing links can remain unresolved, so handle them explicitly in your app.",
381
+ "To rotate access, create a replacement delivery token with the same required environment access, update Env and verify before retiring the old key. Disconnect only removes local state, not the Contentful API key. The app renders rich text and images and chooses its own cache policy.",
382
+ "No OAuth registration or callback URL is needed. Verification reads published entries. A 404 can mean the key lacks access to the chosen environment; check the space, region and environment as well as the token."
383
+ ]),
384
+ apiKeyReferenceLabel: "Content Delivery API token reference",
385
+ settingsSchema: createSchema({
386
+ spaceId: { type: "string", required: true, minLength: 1, maxLength: 64,
387
+ validator: (value) => /^[a-zA-Z0-9_-]+$/u.test(value) || "Enter the Space ID from Contentful API keys." },
388
+ environmentId: { type: "string", minLength: 1, maxLength: 64, defaultTo: "master",
389
+ validator: (value) => /^[a-zA-Z0-9_-]+$/u.test(value) || "Enter a Contentful environment ID." },
390
+ region: { type: "string", enum: ["us", "eu"], defaultTo: "us" }
391
+ }),
392
+ settingsFields: [
393
+ { name: "spaceId", label: "Space ID", hint: "Copy the Space ID from the selected space's API keys page." },
394
+ { name: "environmentId", label: "Environment ID", hint: "The key must have access to this environment. Defaults to master." },
395
+ { name: "region", label: "Region", items: [
396
+ { value: "us", title: "United States" }, { value: "eu", title: "Europe" }
397
+ ] }
398
+ ]
399
+ });
400
+ const asanaDefinition = definition("asana", "Asana", "Discover projects and create, assign and track tasks in your Asana workspace.",
401
+ "https://developers.asana.com/docs/personal-access-token", [
402
+ "Open the Asana developer console using My apps in the provider setup guide.",
403
+ "Under Personal access tokens, choose Create new token and give it a description identifying this application.",
404
+ "Copy the token. Enter env:ASANA_TOKEN in API key reference here and save. Choose Set credential in Env, paste the token as the ASANA_TOKEN value, and save it there.",
405
+ "Return here and choose Connect account or Verify again. Check connection only reads the current status. Verification lists workspaces without changing tasks or projects. Account policy may require administrator approval for personal tokens.",
406
+ "This personal token acts as its owner and needs no callback or OAuth registration. It can only access workspaces, projects and tasks that owner is permitted to use; listing a workspace does not prove permission to edit every project. Your app chooses project privacy explicitly and grants team/user membership separately. Connecting each application user's own Asana account requires a separate OAuth flow; this token configuration does not provide it. To rotate access, create a replacement token and update Env before verifying again. Deauthorize the old token in the developer console when it is no longer needed; Disconnect alone does not revoke it."
407
+ ]);
408
+
409
+ const stripeDefinition = Object.freeze({
410
+ ...definition("stripe", "Stripe", "Read the Stripe account's available and pending balances.",
411
+ "https://docs.stripe.com/keys/restricted-api-keys", [
412
+ "Select the intended Stripe account and sandbox or live mode, then open the API keys page.",
413
+ "Choose Create restricted key, start from zero permissions, name it and allow Balance read access.",
414
+ "If configuring application payments, Balance read alone is insufficient. The current payment library also reads the account, invoices and subscriptions, writes customers, products and prices, and creates Checkout and customer portal sessions. Grant those resource permissions for your account. Leave unrelated resources and connected-account permissions disabled. Review failed requests in the key's request logs if Stripe reports missing permissions.",
415
+ "Create the key, complete verification and copy it into Env. A publishable key cannot read balances.",
416
+ "Save its reference here. This fragment reads the key owner's balance; payment collection and connected merchant onboarding require further integration."
417
+ ]),
418
+ paymentSetup: {
419
+ "url": "https://docs.stripe.com/webhooks",
420
+ "steps": [
421
+ "Open Stripe and select the matching sandbox or live account. Complete the API-key instructions for this connection; keep secret keys in backend Env.",
422
+ "Open Workbench → Webhooks → Add destination. Select events for your account and the snapshot webhook endpoint type. Add invoice.paid, invoice.payment_failed, invoice.payment_action_required and customer.subscription.created, updated and deleted. Set the endpoint's API version to the version supported by your application's Stripe SDK.",
423
+ "Enter the suggested webhook URL only after your application implements that route. Create the destination, reveal its signing secret, and use Set signing secret in Env above. Each environment needs its own destination and secret.",
424
+ "Configure the customer portal in Stripe's Billing settings. Your application creates an authenticated portal session for its own customer's account.",
425
+ "Before live payments, finish Stripe's business verification and review its account restrictions. A successful API-key check is not proof that charges or payouts are enabled."
426
+ ]
427
+ }
428
+ });
429
+ const replicateDefinition = definition("replicate", "Replicate", "Run asynchronous model predictions with an application-owned Replicate token.",
430
+ "https://replicate.com/docs/topics/security/api-tokens", [
431
+ "Select the Replicate user or organization that owns the intended usage, then open account/api-tokens.",
432
+ "Create a token with a name identifying this application and copy its value.",
433
+ "Enter env:REPLICATE_API_TOKEN in API key reference here and save. Choose Set credential in Env, paste the token as the REPLICATE_API_TOKEN value and save it there. Return here and choose Connect / Verify.",
434
+ "No OAuth registration or callback URL is needed. Verification reads the token's account. Connecting never starts a prediction. Explicit prediction operations can incur charges on this Replicate account.",
435
+ "Open the desired model on Replicate, select its API tab and copy the owner/name or version and model-specific input schema. models.get exposes latest_version.openapi_schema. Use models.predict for official models or predictions.create with a version; save the returned prediction ID, then call predictions.get until succeeded, failed or canceled. predictions.cancel requests cancellation.",
436
+ "LIMITATIONS: the app owns polling, job history and result display. Text, image, audio and video outputs are returned unchanged; download needed files before Replicate removes API inputs/outputs, normally after one hour. No built-in media studio, training, deployment administration or automatic editor-tool attachment.",
437
+ "If the token is disabled, create a replacement on the same API tokens page, update Env and reconnect. Disabling a shared token also stops other applications using it."
438
+ ]);
439
+ const sentryDefinition = Object.freeze({
440
+ id: "sentry", name: "Sentry", description: "Inspect and triage Sentry issues through scoped MCP tools.",
441
+ accountModes: ["assistant"], authenticationMethods: ["oauth2"],
442
+ scopes: [
443
+ { value: "org:read", label: "Read organization data", recommended: true },
444
+ { value: "project:write", label: "Write project data" },
445
+ { value: "team:write", label: "Write team data" },
446
+ { value: "event:write", label: "Write event data" }
447
+ ],
448
+ settingsSchema: createSchema({
449
+ organizationSlug: { type: "string", required: true, minLength: 1, maxLength: 200,
450
+ validator: (value) => /^[a-z0-9][a-z0-9_-]*$/u.test(value) || "Enter the organization slug from its Sentry URL." },
451
+ projectSlug: { type: "string", minLength: 1, maxLength: 200,
452
+ validator: (value) => /^[a-z0-9][a-z0-9_-]*$/u.test(value) || "Enter the project slug, not its numeric ID or URL." }
453
+ }),
454
+ settingsFields: [
455
+ { name: "organizationSlug", label: "Sentry organization slug", hint: "Copy the organization slug from Sentry's URL. This connection is restricted to that organization." },
456
+ { name: "projectSlug", label: "Sentry project slug (optional)", hint: "Copy the slug from Project Settings to restrict access to one project. Leave empty for the selected organization." }
457
+ ],
458
+ setup: { url: "https://mcp.sentry.dev/", clientRegistrationEndpoint: "https://mcp.sentry.dev/oauth/register", steps: [
459
+ "This is assistant context, not application login or SDK error-reporting setup. Editor coding-assistant attachment is deferred; saving alone does not give Vibe64 chat access to errors.",
460
+ "Open the intended organization in Sentry and copy its slug from the URL. Open the intended project's Settings for its slug. Project scoping is recommended; use slugs rather than display names or numeric IDs.",
461
+ "Enter the exact HTTPS callback served by your backend in Suggested callback URL, then choose Register client and connect. This registers at https://mcp.sentry.dev/oauth/register and saves the client ID in configuration and its secret/callback in development Env. CLI users can call registerSentryClient instead. This is an MCP client, not a Sentry REST OAuth application.",
462
+ "Save configuration and connect. Sign into Sentry and review the selected organization/project and MCP permissions before approving. Tool availability also depends on skills granted in Sentry's consent screen and your account permissions; configuration cannot grant extra access.",
463
+ "Connecting checks tool discovery. Your assistant host must authorize each tool and its exact arguments. Changing organization or project requires a new connection for that resource.",
464
+ "Reconnect when the grant expires or Sentry access changes. Disconnect removes the application's local grant; manage provider-side permissions separately. An application's error-reporting DSN is separate from this management connection."
465
+ ] }
466
+ });
467
+ const incidentIoDefinition = definition("incident-io", "incident.io", "Manage incidents and follow-ups, resolve alerts, read on-call schedules and maintain catalogue entries.",
468
+ "https://docs.incident.io/admin/api-keys", [
469
+ "In the intended incident.io organization, open Settings > API keys and choose Add API key. Name it for this application. The token is displayed once; copy it privately before leaving.",
470
+ "Choose View data (viewer) for incident verification. Add Create incidents / Edit incidents for writes, View on-call resources for alerts, Read schedules for schedules, and View catalog / Manage catalog for catalogue reads/writes. For follow-ups inspect the permission scopes badge for follow_ups.create and follow_ups.update; for alert resolution it must include alerts.resolve. Grant only the required actions. Restrict team-scoped access to intended teams; you cannot delegate permissions you do not hold.",
471
+ "Enter env:INCIDENT_IO_API_KEY as API key reference and Save configuration. Choose Set credential in Env, save the actual token as INCIDENT_IO_API_KEY, return and choose Connect account. Verification reads incidents without changing them. This mode needs no OAuth client or callback URL.",
472
+ "Creating incidents requires an application idempotency key and explicit public/private visibility; standard incidents may announce in Slack. Edits require an explicit notify_incident_channel choice. Follow-up updates require the current title and target status. Catalogue updates require the intended full attribute values. Your app must authorize each resource and action, retain IDs and reconcile uncertain writes.",
473
+ "Schedule reads use pages of at most 25 so next shifts are included. This is not a rota editor or paging service. Alert sources such as Datadog can require external resolution; a 422 does not mean retry blindly. Private resources require provider permission, even when this form is valid.",
474
+ "This key remains valid if its creator is deactivated. Rotate or revoke it in Settings > API keys, update Env and verify again. Disconnect only removes local state; it does not revoke the key, close incidents or cancel provider workflows. Editor coding-assistant attachment is deferred."
475
+ ]);
476
+ const firefliesDefinition = definition("fireflies", "Fireflies", "Read and search Fireflies meetings, speaker-attributed transcripts and summaries.",
477
+ "https://docs.fireflies.ai/fundamentals/authorization", [
478
+ "Sign into Fireflies and open Integrations, then Fireflies API.",
479
+ "Copy the API key privately. It follows this user's account permissions; a team administrator key can include team data. Choose the account appropriate for the application.",
480
+ "Enter env:FIREFLIES_API_KEY as the API key reference and Save configuration. Follow Set credential in Env, store the real key as FIREFLIES_API_KEY, then return here and choose Connect account or Verify again. Check connection reads saved status. Verification reads the account profile; it does not request a recording or join a meeting.",
481
+ "Transcript details include sentences, speakers, summaries and action items. Search defaults to titles and spoken words in meetings this account organized. Empty or unavailable summaries can mean Fireflies has not processed the recording or the plan does not provide them. Your app owns access checks, presentation, caching and follow-up tasks; this does not create recordings or receive webhooks.",
482
+ "Transcript listing defaults to meetings this account organized. The application must authorize broader team access. If verification fails, check the key and account permissions. Replace keys in Env and verify again. Disconnect removes local state; revoke the provider key separately in Fireflies. This API-key setup needs no OAuth callback or app registration."
483
+ ]);
484
+
485
+ const heygenKeyDefinition = definition("heygen", "HeyGen", "Read your API account profile and browse voice metadata.",
486
+ "https://developers.heygen.com/docs/api-key", [
487
+ "Sign into the intended HeyGen account. Open the API dashboard linked from Provider setup guide and choose the control to generate an API key.",
488
+ "For a restricted key, allow account:read for verification and voices:read for voice listing. Set those permissions in HeyGen; editing this application's configuration cannot grant them. API-key usage and subscription OAuth use different billing arrangements.",
489
+ "Enter env:HEYGEN_API_KEY in API key reference and Save configuration. Choose Set credential in Env, paste the actual key as HEYGEN_API_KEY and save there. Keep this key in backend Env, not browser code.",
490
+ "Return and choose Connect account. Verification reads the account profile without generating media. If HeyGen reports insufficient_api_key_scope, check account:read; voice listing also needs voices:read. No OAuth registration or callback is needed for this API-key mode.",
491
+ "Voice listing returns metadata and pagination. It does not generate speech, clone a voice or create a video. For replacement, manage the key in the HeyGen API dashboard, update Env and verify again. Disconnect removes local state and does not revoke the provider key."
492
+ ]);
493
+ const heygenDefinition = Object.freeze({
494
+ ...heygenKeyDefinition,
495
+ description: "Read API profile and voices with a key, or connect HeyGen MCP tools through browser OAuth.",
496
+ authenticationMethods: ["api-key", "oauth2"],
497
+ scopes: [
498
+ { value: "openid", label: "Identify the connected HeyGen account", recommended: true, authenticationMethods: ["oauth2"] },
499
+ { value: "profile", label: "Read account profile", recommended: true, authenticationMethods: ["oauth2"] },
500
+ { value: "email", label: "Read account email", recommended: true, authenticationMethods: ["oauth2"] }
501
+ ],
502
+ setup: { ...heygenKeyDefinition.setup,
503
+ urlByAuthentication: { oauth2: "https://developers.heygen.com/mcp/overview" },
504
+ clientRegistrationEndpoint: "https://api2.heygen.com/v1/oauth/register",
505
+ stepsByAuthentication: { oauth2: [
506
+ "Select Assistant access and OAuth to connect HeyGen MCP. Sign into the HeyGen account whose plan should pay for tool usage. This mode uses browser consent, not an API key; keep the identity, profile and email permissions selected.",
507
+ "Confirm Suggested callback URL is the exact route your host will serve. Choose Register client and connect to create the client and save its ID, secret and callback to project configuration and private development Env. Register once for this host, not on every connection. CLI users can call registerHeyGenClient.",
508
+ "For manual registration, copy the displayed endpoint and JSON body into an HTTP client and send one POST with Content-Type application/json. Copy client_id from the registration response into Client ID and Save configuration. Choose Set credential in Env to save client_secret under the displayed Client secret reference. Choose Set callback in Env and save the exact registered callback. Keep the registration response private.",
509
+ "Return, save and choose Connect account. Sign into HeyGen and approve access. Verification lists available tools without creating media. The host must authorize each tool and its arguments; identity permissions do not restrict tools to reads. Creating media consumes the connected account's credits and some tools delete content.",
510
+ "Reconnect starts consent again. Disconnect removes the local grant; it does not delete videos or undo accepted work. It does not promise provider-wide revocation. Saving configuration alone does not register a client or attach tools to an assistant. Discover available video/avatar/translation tools with tools.list; the host uses their input schemas, polls asynchronous results and obtains approval before chargeable or destructive calls."
511
+ ] }
512
+ }
513
+ });
514
+ const perplexityDefinition = definition("perplexity", "Perplexity", "Connect your Perplexity key for app-owned cited answers and streaming.",
515
+ "https://docs.perplexity.ai/docs/admin/api-key-management", [
516
+ "Open the Perplexity API console, then Projects. Create or select the project that will own this application's API usage; a project must exist before you can create its first key.",
517
+ "Open API Keys and generate a named key for that project. Copy its full value immediately; it is only shown at creation.",
518
+ "Enter env:PERPLEXITY_API_KEY in API key reference here and save. Choose Set credential in Env, paste the key as the PERPLEXITY_API_KEY value and save it there. Return here and choose Connect account or Verify again; Check connection only reloads status.",
519
+ "No OAuth registration or callback URL is needed. Verification lists asynchronous Sonar requests without submitting a generation request. Listing the public model catalogue alone does not verify your key.",
520
+ "Use the supplied AI-connections perplexity-answer example with this exact saved slot. Your application installs its native client, authorizes the caller and resolves this Env reference before requesting a cited answer or stream. It pays Perplexity directly; there is no Vibe64 inference gateway. The app renders citations and controls spending. LIMITATIONS: no premade research/chat screen, persistent conversation or automatic coding-chat attachment; async history lists only its initial page. For example, fetch a cited answer in your backend, then display it in your app. Never send the key to the browser.",
521
+ "For replacement, create another key and update Env before revoking the old key. A revoked key cannot be recovered."
522
+ ]);
523
+ const supabaseDefinition = definition("supabase", "Supabase", "List projects through the Supabase Management API.",
524
+ "https://supabase.com/docs/guides/platform/personal-access-tokens", [
525
+ "Open Supabase account settings, Access Tokens, and generate a personal access token.",
526
+ "Where scoped tokens are available, select the intended resources and project read permission. Classic tokens carry your full account access.",
527
+ "Copy the token into Env and save its reference here. Project publishable, anon and service-role keys are different credentials.",
528
+ "The runtime lists project metadata. This does not add a database to the editor or execute SQL."
529
+ ]);
530
+
531
+ const paddleDefinition = Object.freeze({
532
+ ...definition("paddle", "Paddle", "Read and create Paddle Billing products and prices in sandbox or live mode.",
533
+ "https://developer.paddle.com/api-reference/about/authentication", [
534
+ "Sign into the Paddle Billing account that owns this application's catalogue. Use its sandbox account for testing and live account for production. Open Developer tools → Authentication → API keys → New API key.",
535
+ "Enter a name and description identifying this application. Grant product.read for connection verification and catalogue reads. Also grant product.write to create products and price.write to create prices when your application needs those operations. Editing webhook destinations also needs notification_setting.write; reading domain approval needs checkout_domain.read. Set an expiry. Enable Rotatable only if you plan to configure key rotation; that choice cannot be changed later. Click Save and copy the key immediately because it is shown only once.",
536
+ "Select the matching Environment here: Sandbox for a sandbox key, Live for a live key. Keep env:PADDLE_API_KEY in API key reference, Save configuration, then choose Set credential in Env and save the copied key as PADDLE_API_KEY. This must be a backend Billing API key, not a Paddle.js client-side token or Paddle Classic credential. No OAuth registration or callback is needed for API-key mode.",
537
+ "If configuring application payments, also grant price.read, customer.write, transaction.read, transaction.write, subscription.read and customer_portal_session.write, alongside product.read, product.write and price.write. These cover the current payment library's catalogue, checkout, reconciliation and portal calls. A successful product check does not verify these additional permissions. Webhook signing uses the destination's separate secret, not the API key.",
538
+ "Return and choose Connect account. Verification reads products without creating a checkout or charging anyone. An empty catalogue can be valid. If permission is denied, check product.read, key expiry and that the key belongs to the selected environment. The application controls which users may use its shared merchant connection.",
539
+ "Changing Environment requires verifying the connection again with the corresponding key. Configure separate connections and Env references when retaining both environments. Keep backend keys out of browser code, configuration JSON and chat.",
540
+ "If a key is lost or exposed, revoke it in Paddle and create a replacement, update Env and reconnect. Disconnect here removes the local grant only; revoke provider access separately in Paddle's API keys tab. This adapter verifies catalogue access; checkout, webhooks and merchant go-live setup remain separate application work."
541
+ ]),
542
+ paymentSetup: {
543
+ "url": "https://developer.paddle.com/get-started/quickstart/",
544
+ "steps": [
545
+ "Open the matching Paddle sandbox or live account. Follow the connection's API-key instructions, including the permissions needed for products, prices, customers, transactions, subscriptions and customer portal sessions.",
546
+ "Open Developer Tools → Notifications and create a notification destination for the suggested webhook URL. Subscribe to transaction.completed and subscription lifecycle events. Store that destination's signing secret using Set signing secret in Env.",
547
+ "Open Developer Tools → Authentication → Client-side tokens → New client-side token. Name it for your app, save, and copy it using Set public client token in Env above. Your application supplies this value to its Paddle.js page. This public token is different from the private API key.",
548
+ "The billing URL must open an app page with Paddle.js initialized for the same environment. Its checkout opens the transaction from the URL. Configure this as your default payment link and obtain live domain approval before selling.",
549
+ "Complete Paddle's business and website verification. Check approval in Paddle; saving a key or listing products does not approve the merchant or domain."
550
+ ]
551
+ },
552
+ assistantActions: [
553
+ { value: "enable", label: "Enable Paddle" },
554
+ { value: "provider.recommend", label: "Recommend payment provider" },
555
+ { value: "products.create", label: "Create product with price" },
556
+ { value: "products.batchCreate", label: "Batch create products with prices" },
557
+ { value: "prices.create", label: "Create price" },
558
+ { value: "goLive.check", label: "Check go-live status" },
559
+ { value: "api.read", label: "Read Paddle API" },
560
+ { value: "api.write", label: "Write Paddle API" },
561
+ { value: "webhooks.update", label: "Edit webhook" }
562
+ ],
563
+ settingsSchema: createSchema({ environment: { type: "string", enum: ["sandbox", "live"], defaultTo: "sandbox" } }),
564
+ settingsFields: [{ name: "environment", label: "Environment", hint: "Use the environment that issued this API key.",
565
+ items: [{ title: "Sandbox", value: "sandbox" }, { title: "Live", value: "live" }] }]
566
+ });
567
+ const mailgunDefinition = Object.freeze({
568
+ ...definition("mailgun", "Mailgun", "Send transactional email, manage sending domains and inspect delivery logs.",
569
+ "https://help.mailgun.com/hc/en-us/articles/26016288026907-API-Key-Roles", [
570
+ "Sign into the intended Mailgun account as an administrator. In the top-right profile menu, choose API Security. Under Mailgun API Keys, choose Add new key; do not select the public verification key or webhook signing key.",
571
+ "Enter a description for this application and choose Developer for sending and domain management, or Analyst only for read-only access, then Create Key. Free/Basic accounts may offer only Admin. Copy the secret from the creation dialog now: it is shown only once. If lost, create a replacement key.",
572
+ "Enter env:MAILGUN_API_KEY in API key reference. Set API region to United States or European Union according to where your sending domains are hosted. Domain Sending Keys and SMTP passwords cannot perform this account domain-listing check.",
573
+ "Save configuration, choose Set credential in Env, and store the actual account key as MAILGUN_API_KEY. Return and choose Connect account. This connects the application's shared Mailgun account; no OAuth app registration or callback is needed.",
574
+ "Verification reads the selected region's domain list. It sends no messages, configures no DNS, and does not prove that a domain is ready to send. An empty list can mean the account has no domains in that region. Changing region requires verification again.",
575
+ "Before sending, open Send > Sending > Domains > Add new domain in Mailgun. Add the exact sending DNS records shown under Domain Verification & DNS at your DNS host, then verify the domain. Choose a sender at that domain in your app. Sandbox domains only send to authorized recipients; queued does not mean delivered.",
576
+ "The app can send text/HTML with messages.send and inspect logs.list by sending domain. Keep the queued message ID, show actual delivery/failure events, and use an app-owned bounded polling schedule. If sending times out, check logs before manually repeating the request; there is no automatic resend.",
577
+ "LIMITATIONS: no attachments, stored templates, mailing-list/campaign UI, inbound routes or webhook receiver. Example: send and track a receipt email, but not attach its PDF through this adapter. The app owns sender/recipient authorization, content and duplicate prevention. Connecting does not attach Mailgun tools to Vibe64 coding chat.",
578
+ "To change a key's role, create a new key, replace MAILGUN_API_KEY in Env and verify again; roles on existing keys cannot be edited. Disconnect removes the local connection. Delete an obsolete key in Mailgun separately to revoke its provider access."
579
+ ]),
580
+ settingsSchema: createSchema({ region: { type: "string", enum: ["us", "eu"], defaultTo: "us" } }),
581
+ settingsFields: [{ name: "region", label: "API region", hint: "Select the region containing your sending domains.",
582
+ items: [{ title: "United States (api.mailgun.net)", value: "us" }, { title: "European Union (api.eu.mailgun.net)", value: "eu" }] }]
583
+ });
584
+
585
+ const fireworksAiDefinition = definition("fireworks-ai", "Fireworks AI", "List accounts accessible to your Fireworks API key.",
586
+ "https://docs.fireworks.ai/getting-started/quickstart", [
587
+ "Sign into Fireworks. Open the Provider setup guide and follow its Fireworks dashboard link to API Keys; you can also open your profile icon > User Settings > API Keys.",
588
+ "Choose Create API key, then copy the generated key for this application and keep it private. The Provider setup guide links to the account's API Keys page.",
589
+ "Enter env:FIREWORKS_API_KEY in API key reference here and save. Choose Set credential in Env, paste the key as the FIREWORKS_API_KEY value and save it there. Return here and choose Check connection.",
590
+ "No OAuth registration or callback URL is needed. Verification lists accounts available to the key; it does not generate text or create deployments. An empty list does not grant access to an account.",
591
+ "If you revoke or replace the key in Fireworks, update its Env value and check the connection again."
592
+ ]);
593
+ const gatewayApiDefinition = Object.freeze({
594
+ ...definition("gatewayapi", "GatewayAPI", "Send SMS/RCS messages and read account credit on the Global or EU platform.",
595
+ "https://gatewayapi.com/help-center/webhooks-and-api-keys/", [
596
+ "Sign into the intended GatewayAPI Global or EU account and open API, then API Keys in the left menu.",
597
+ "Choose ADD API KEY, name the credential, and copy its API token into Env.",
598
+ "Choose the matching API domain here. The runtime uses the token, not an OAuth key/secret pair.",
599
+ "Enter env:GATEWAYAPI_TOKEN as the API key reference, then Save configuration. Follow Set credential in Env and save the real API token as GATEWAYAPI_TOKEN. Return here and choose Connect account or Verify again. Check connection reads saved status. Verification reads account credit without sending a message; changing domain requires verification again.",
600
+ "Sending uses the current Messaging API. RCS requires an approved agent configured in GatewayAPI; delivery can fall back to SMS. Check sender eligibility, account credit and destination restrictions before sending. Urgent SMS can cost more. Every message needs your application reference to match delivery events.",
601
+ "For delivery reports or replies, create a public HTTPS webhook in your app and configure it in the matching GatewayAPI dashboard with a secret. Current Messaging API callbacks use Signature: v1=... over the raw body (not legacy X-Gwapi-Signature JWT). Save events once by event_id before acknowledging; the app owns its inbox and delivery history. Incoming SMS also requires a leased number/keyword; RCS requires agent setup.",
602
+ "If verification fails, check that the token matches the selected Global or EU account and any configured IP restrictions permit the application server. Replace a rotated token in Env and verify again before revoking the old token in API Keys. Disconnect removes local connection state only. No OAuth callback or webhook is needed for this balance check."
603
+ ]),
604
+ settingsSchema: createSchema({ region: { type: "string", enum: ["global", "eu"], defaultTo: "global" } }),
605
+ settingsFields: [{ name: "region", label: "API domain", hint: "Select the platform that issued this token.",
606
+ items: [{ title: "Global (gatewayapi.com)", value: "global" }, { title: "EU (gatewayapi.eu)", value: "eu" }] }]
607
+ });
608
+ const polarDefinition = Object.freeze({
609
+ ...definition("polar", "Polar", "Read your organization's Polar product catalogue.",
610
+ "https://polar.sh/docs/integrate/oat", [
611
+ "Open Settings for the intended Polar organization, scroll to Developers and choose New Token.",
612
+ "Give the token a name and expiry, select products:read, and copy its value into Env.",
613
+ "Choose the matching sandbox or production environment. Organization and customer access tokens are different credentials.",
614
+ "Save the reference. The runtime verifies product reads; it does not create a checkout or enable merchant payments."
615
+ ]),
616
+ settingsSchema: createSchema({ environment: { type: "string", enum: ["sandbox", "production"], defaultTo: "sandbox" } }),
617
+ settingsFields: [{ name: "environment", label: "Environment", hint: "Use the environment containing this organization and token.",
618
+ items: [{ title: "Sandbox", value: "sandbox" }, { title: "Production", value: "production" }] }]
619
+ });
620
+
621
+ const storyblokDefinition = Object.freeze({
622
+ ...definition("storyblok", "Storyblok", "Read space metadata and published or draft content in the space's region.",
623
+ "https://www.storyblok.com/docs/concepts/access-tokens", [
624
+ "Select the intended Storyblok space and open Settings, then Access Tokens.",
625
+ "Create a named Public token for published content, or a Preview token when this application needs draft content.",
626
+ "Copy the token into Env and select the space's region here. Management API personal tokens are different credentials.",
627
+ "Save its reference, for example env:STORYBLOK_TOKEN. There is no OAuth client or callback. Connect verifies space access; an empty content list does not prove draft permission.",
628
+ "For a public site, use a Public token and published content. Keep Preview tokens in a separate backend integration and require editor authorization before draft reads; never expose preview responses in public caches.",
629
+ "Your app maps page slugs to story reads and renders its own components. It owns pagination, cache refresh after publishing and preview access. Saving this configuration does not create a website or attach the Vibe64 coding assistant.",
630
+ "If verification fails, check the token type and space region, then reconnect after correcting Env. Disconnect removes the app connection; delete a token in Storyblok Settings → Access Tokens when it must stop working everywhere."
631
+ ]),
632
+ settingsSchema: createSchema({ region: { type: "string", enum: ["eu", "us", "ca", "ap", "cn"], defaultTo: "eu" } }),
633
+ settingsFields: [{ name: "region", label: "Space region", hint: "Match the region selected when the Storyblok space was created.",
634
+ items: [
635
+ { title: "European Union (EU)", value: "eu" }, { title: "United States (US)", value: "us" },
636
+ { title: "Canada (CA)", value: "ca" }, { title: "Australia / APAC (AP)", value: "ap" },
637
+ { title: "China (CN)", value: "cn" }
638
+ ] }]
639
+ });
640
+
641
+ const ashbyDefinition = definition("ashby", "Ashby", "Read hiring data, maintain candidate profiles and advance sourced applications.",
642
+ "https://docs.ashbyhq.com/how-do-i-generate-an-api-key", [
643
+ "As an Ashby Organization Admin, open Admin > Integrations > API Keys and choose + New.",
644
+ "Name the key for this application, leave the optional integration partner unset, and choose Create API Key. Keys initially have no endpoint permissions: select Jobs read (jobsRead) for verification. Add Candidates read (candidatesRead) for candidates/applications and Candidates write (candidatesWrite) for profile edits, sourcing and stage changes. Add Interviews read (interviewsRead) for interview-plan/stage lookup and Hiring Process read (hiringProcessMetadataRead) for archive reasons.",
645
+ "These endpoint permissions do not require all other access. Leave additional permissions off unless you need confidential jobs; those require Allow access to confidential jobs and projects. Choose Save and Continue and copy the key before closing the wizard.",
646
+ "Enter env:ASHBY_API_KEY in API key reference here and save. Choose Set credential in Env, paste the key as the ASHBY_API_KEY value and save it there. Return here and choose Connect account or Verify again. Check connection only reads current status.",
647
+ "No OAuth registration or callback URL is needed. Verification lists jobs without creating candidates or changing hiring stages. This organization key serves an administrator-approved hiring workflow; it is not an applicant login or public careers form. For missing_endpoint_permission, reopen the key, correct Jobs read and Save. A key that was not copied must be replaced. To rotate, create a replacement and update Env before verifying. To revoke, open the old key by name and click Disable; Disconnect only removes the application connection."
648
+ ]);
649
+ const lexwareDefinition = definition("lexware", "Lexware", "Read accounting contacts, articles and vouchers, and create net-EUR draft invoices.",
650
+ "https://help.lexware.de/de-form/articles/548863-alles-rund-um-public-api", [
651
+ "You need Lexware Office XL for Public API access. In the intended account, open Erweiterungen > Weitere Apps > Public API, or app.lexware.de/addons/public-api.",
652
+ "Choose API-Schlüssel erstellen and the individual-permissions option. Enable reading contacts for verification. Add article and accounting-document read permissions for those operations; allow invoice creation only if the app will create drafts.",
653
+ "Choose WEITER, review the permissions, name the key for this application and choose API-Schlüssel erstellen. Copy the key before closing; it cannot be displayed again.",
654
+ "Enter env:LEXWARE_API_KEY in API key reference here and save. Choose Set credential in Env, paste the key as the LEXWARE_API_KEY value and save it there. Return here and choose Connect account or Verify again. Check connection only refreshes status.",
655
+ "Draft invoices require an existing contact UUID, invoice and service/delivery dates with timezones, and custom lines with quantity, unit, net EUR amount and tax rate. Choose those accounting values in the app; the connector does not infer tax. Review and finalize drafts in Lexware. No email or payment is sent.",
656
+ "An interrupted invoice creation may already have succeeded. Check the voucher list before repeating it. Respect the provider limit of two requests per second across endpoints. The app must authorize each contact/document and approve writes before calling the connector.",
657
+ "This adapter does not create contacts/articles/vouchers, download PDFs, finalize invoices, upload receipts or receive accounting events. For example, it can prepare a draft booking invoice for an existing customer, but receipt intake and signed event processing need native app implementation. Editor-assistant attachment is deferred.",
658
+ "No OAuth registration or callback URL is needed. Verification reads contacts. Keys expire after at most 24 months: create a replacement and update Env before expiry. Public API does not mean the key is safe to publish."
659
+ ]);
660
+ const sevdeskDefinition = Object.freeze({
661
+ ...definition("sevdesk", "Sevdesk", "Read sevdesk contact organizations and people with offset pagination.",
662
+ "https://hilfe.sevdesk.de/de/articles/9374740-wo-finde-ich-meinen-api-token-in-sevdesk", [
663
+ "In the intended sevdesk account, open Erweiterungen > Integrationen and locate API-Token für Integrationen.",
664
+ "Choose Einblenden and enter your sevdesk account password. Copy the displayed API token. Depending on your plan, Erweiterungen > API also offers Einblenden.",
665
+ "Enter env:SEVDESK_API_TOKEN in API token reference here and save. Choose Set credential in Env, paste the token as the SEVDESK_API_TOKEN value and save it there. Return here and choose Check connection.",
666
+ "No OAuth registration or callback URL is needed. Paste only the token, without adding Bearer. Verification reads contacts without modifying accounting data.",
667
+ "This token belongs to its sevdesk user. Naming another configuration does not create a separate provider account or change the token's access."
668
+ ]),
669
+ apiKeyReferenceLabel: "API token reference"
670
+ });
671
+
672
+ const apolloIoDefinition = definition("apollo-io", "Apollo.io", "Find prospects, enrich selected records and manage your sales contacts, accounts and deals.",
673
+ "https://docs.apollo.io/docs/create-api-key", [
674
+ "API access depends on your Apollo plan. In the intended workspace, open Settings > Integrations > API Keys, then API Keys > Create new key.",
675
+ "Enter a name and description. Keep api/v1/accounts/search enabled for verification. Add only the permitted endpoints needed by your app: api/v1/mixed_people/api_search for prospect people, api/v1/mixed_companies/search for companies, api/v1/people/match and api/v1/organizations/enrich for enrichment. Keep Set as master key off when endpoint permissions suffice.",
676
+ "For saved CRM records, select api/v1/contacts/search, api/v1/contacts/create and api/v1/contacts/update as needed; api/v1/accounts/create and api/v1/accounts/update for company writes. Deals use deals/api/v1/opportunities/search, /create and /update; stage lookup uses deals/api/v1/opportunity_stages/index. Owner lookup uses api/v1/users/search. These permissions must also be available on your plan; do not broaden a key automatically after a denial.",
677
+ "Choose Create API key, then Copy. Enter env:APOLLO_API_KEY in API key reference here and save. Choose Set credential in Env, paste the value as APOLLO_API_KEY and save it there. Return here and choose Connect account or Verify again. Check connection only reads current status.",
678
+ "Verification reads saved accounts; it does not enrich, write CRM records or spend enrichment credits. Company prospect searches and enrichment can consume credits when your app invokes them. Review current Apollo pricing and require explicit approval or an administrator-authorized usage policy in your app.",
679
+ "No OAuth registration or callback URL is needed. This key acts for the Apollo workspace, not an individual end user's account. Keys in that workspace share its limits. To replace access, regenerate the key and update Env before verifying again. Disconnect removes the local connection; delete the key on Apollo's API keys page to revoke provider access."
680
+ ]);
681
+ const attentionDefinition = definition("attention", "Attention", "Read conversations and coaching results; manage call metadata, snippets, users and teams.",
682
+ "https://docs.attention.com/api-authentication", [
683
+ "Sign into app.attention.tech as an organization administrator. Open your profile avatar at the top left, Settings, then Organization > API Keys.",
684
+ "Choose + Create API Key at the top right and give it a name identifying this application. Copy the value in API Key Created before closing; it is shown once.",
685
+ "Enter env:ATTENTION_API_KEY in API key reference here and save. Choose Set credential in Env, paste the key as the ATTENTION_API_KEY value and save it there. Return here and choose Connect account (or Verify again when already connected). Check connection only reloads status.",
686
+ "An organization key can expose broad read/write and user-management access. Your application must restrict each operation to authorized users; never publish this key in frontend code. New users require an explicit listener or recording seat choice; check your Attention plan before enabling provisioning.",
687
+ "No OAuth registration or callback URL is needed. Verification reads a conversation page without changing recordings or CRM data.",
688
+ "To replace access, create a new key and update Env, then verify before opening the old key's three-dot menu and choosing Delete. Deletion immediately stops every application still using that old key. Disconnect here removes the local grant only; revoke the key in Attention to stop provider access."
689
+ ]);
690
+
691
+ const telegramDefinition = Object.freeze({
692
+ ...definition("telegram", "Telegram", "Send bot messages and receive updates through application-owned polling.",
693
+ "https://core.telegram.org/bots/tutorial", [
694
+ "In Telegram, open the verified BotFather account and send /newbot. Choose a display name and an available username ending in bot.",
695
+ "Copy the token returned by BotFather. Enter env:TELEGRAM_BOT_TOKEN in Bot token reference here and save. Choose Set credential in Env, paste the token as the TELEGRAM_BOT_TOKEN value and save it there.",
696
+ "Return here and choose Check connection. Verification reads the bot identity; it does not consume messages. No OAuth client or callback URL is needed for this bot-token connection. Receiving updates through a webhook is a separate application setup.",
697
+ "Start a conversation with the bot or add it to the intended group. Bot permissions and privacy settings control available messages; verification is not permission to message arbitrary users.",
698
+ "For polling, first check that no webhook is configured. Use one app worker and save update offsets after successful processing. Verification never polls; disconnect does not revoke the bot token or discard updates.",
699
+ "Use separate bots for independent public and paid application identities. Replacing a token for the same bot does not create another bot."
700
+ ]),
701
+ apiKeyReferenceLabel: "Bot token reference"
702
+ });
703
+ const klipyDefinition = definition("klipy", "KLIPY", "Browse clips, GIFs, stickers and existing AI emojis using your own KLIPY app key.",
704
+ "https://klipy.com/blog/klipy-partner-panel", [
705
+ "Sign into KLIPY Partner Panel and choose Add Platform. Enter the platform name, contact email, company website and product description, then accept the API terms and submit.",
706
+ "Follow the key-creation flow, give the key an application-specific name and enter App URL when available. Copy the resulting test key. The application owner chooses any optional advertising settings in KLIPY separately.",
707
+ "Enter env:KLIPY_APP_KEY in API key reference and Save configuration. Choose Set credential in Env, paste the key as KLIPY_APP_KEY and save there. Return here and choose Connect account. No OAuth client or callback URL is required.",
708
+ "Verification fetches trending clip metadata with the high content filter and consumes an API request. It does not download or publish media, approve production access or implement the app's media picker. A content filter does not guarantee suitability for every audience.",
709
+ "Test keys allow 100 calls per hour. For production, open the key's three-dot menu > Request Production. Supply the app category, estimated monthly active users and a screen recording (up to 25 MB), then Apply. Wait for KLIPY's approval; connecting here does not grant production capacity.",
710
+ "The app builds its own media picker. Use Search KLIPY as the search placeholder; preserve returned media URLs and delivery data. Render media directly with appropriate image/video controls and follow KLIPY attribution, ranking, reporting and advertising requirements. No picker or ad renderer is generated by this connection.",
711
+ "KLIPY requires prior approval for custom server-side requests, proxying or caching. Contact developers@klipy.com about this backend integration before production. Do not create a media cache or silently discard ad items. Production key approval and integration approval are provider decisions.",
712
+ "Existing AI emoji search is available; new AI emoji generation, callbacks, share/report analytics and editor-assistant attachment are not implemented. For example, an app can find a dog sticker, but cannot generate a new dog emoji through this adapter.",
713
+ "If replacing a key, update KLIPY_APP_KEY in Env and verify again before retiring the previous key in KLIPY. Disconnect only removes local connection state. The application must follow the provider's attribution and content requirements."
714
+ ]);
715
+
716
+ const clayDefinition = Object.freeze({
717
+ ...definition("clay", "Clay", "Search people and companies, run enrichment routines and query Enterprise tables with your Clay Public API key.",
718
+ "https://developers.clay.com/public-api/authentication", [
719
+ "Open Clay Settings > Account > API keys (beta). Create a Public API key for the intended user and workspace. The older Clay workspace API key is a different credential.",
720
+ "Copy the new key. Enter env:CLAY_PUBLIC_API_KEY in Public API key reference here and save. Choose Set credential in Env, paste the key as CLAY_PUBLIC_API_KEY and save it there. Return here and choose Connect account or Verify again. Check connection only refreshes local status.",
721
+ "No OAuth registration or callback URL is needed. Verification reads the authenticated user and workspace without starting a search. This is not app-user login.",
722
+ "Search creation and next-page requests are explicit operations and can consume provider capacity. Approve the query and result volume before using them. Pages advance a stateful iterator, so an interrupted next-page request must not be retried automatically.",
723
+ "Routine runs can spend Clay credits. In Clay, open Functions > select your function > Details > enable API. Copy its t_... function ID and prefix it with function:. Use the inputs defined by that function. Approve the routine, inputs and volume before running it. A returned in_progress run ID is not a finished enrichment: fetch results later and inspect each item for errors. Never automatically repeat an uncertain run.",
724
+ "Table queries require Clay Enterprise. Open the target table and copy the ID after /tables/ in its URL. There is no public list-tables API. Use that ID with selected fields and filters; preserve cursors and deduplicate records by ID during concurrent edits. A truncated result without a cursor requires a narrower query.",
725
+ "Search filters use the current query-mode reference. The legacy filters-mode API is deprecated. Vibe64 saves this connection configuration; automatically attaching Clay tools to the coding assistant remains unavailable.",
726
+ "To replace the key, create another Public API key, update Env and verify before retiring the previous key. Disconnect removes local state, not the key in Clay."
727
+ ]),
728
+ apiKeyReferenceLabel: "Public API key reference"
729
+ });
730
+
731
+ const tokenDefinitions = Object.freeze([
732
+ airtableDefinition, notionDefinition, brevoDefinition, elevenlabsDefinition, githubApiDefinition, apifyDefinition,
733
+ calendlyDefinition, hubspotDefinition, linearDefinition, pipedriveDefinition, gitlabApiDefinition, tallyDefinition, contentfulDefinition, asanaDefinition,
734
+ stripeDefinition, replicateDefinition, sentryDefinition, incidentIoDefinition, firefliesDefinition,
735
+ heygenDefinition, perplexityDefinition, supabaseDefinition, paddleDefinition, mailgunDefinition,
736
+ fireworksAiDefinition, gatewayApiDefinition, polarDefinition, storyblokDefinition,
737
+ ashbyDefinition, lexwareDefinition, sevdeskDefinition, apolloIoDefinition, attentionDefinition, telegramDefinition, klipyDefinition, clayDefinition
738
+ ]);
739
+ export {
740
+ airtableDefinition, notionDefinition, brevoDefinition, elevenlabsDefinition, githubApiDefinition, apifyDefinition,
741
+ calendlyDefinition, hubspotDefinition, linearDefinition, pipedriveDefinition, gitlabApiDefinition, tallyDefinition, contentfulDefinition, asanaDefinition,
742
+ stripeDefinition, replicateDefinition, sentryDefinition, incidentIoDefinition, firefliesDefinition,
743
+ heygenDefinition, perplexityDefinition, supabaseDefinition, paddleDefinition, mailgunDefinition,
744
+ fireworksAiDefinition, gatewayApiDefinition, polarDefinition, storyblokDefinition,
745
+ ashbyDefinition, lexwareDefinition, sevdeskDefinition, apolloIoDefinition, attentionDefinition, telegramDefinition, klipyDefinition,
746
+ clayDefinition, tokenDefinitions
747
+ };