@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,123 @@
1
+ # Google registrations, configuration and lifecycle
2
+
3
+ Documentation checked: 12 September 2026. These console steps follow public
4
+ Google documentation; this implementation does not claim signed-in console or
5
+ live-consent verification. Provider tests use simulated HTTP and real temporary
6
+ JSON connection files.
7
+
8
+ ## Shared inputs
9
+
10
+ | Input | Portable configuration / owner |
11
+ |---|---|
12
+ | Display name | `integrations.<slot>.displayName` |
13
+ | Account use | `accountMode`: shared, per-user or assistant; application policy enforces it |
14
+ | Requested permissions | `scopes`: exact provider scope strings; read defaults are selected |
15
+ | App registration | `authentication.registrationRef`, pointing into `registrations` |
16
+ | Client ID | Registration `clientId`, public web-client identifier |
17
+ | Client secret | Private environment or secret store; registration contains `clientSecretRef` |
18
+ | Callback URL | Full backend route in a private binding referenced by `callbackUrlRef` |
19
+ | People/project access | Application-owned membership and explicit grants, checked before use |
20
+
21
+ Choosing extra scopes does not install additional business operations. Google
22
+ add-on scopes require an actual add-on context. A Gmail connection is not a
23
+ Google login session for the application; keep login and API grants distinct.
24
+
25
+ ## Manual own-registration setup
26
+
27
+ 1. Sign in to [Google Cloud Console](https://console.cloud.google.com/) using an
28
+ account authorized to create or administer the application's project.
29
+ 2. Use the project selector to choose an existing project, or **New Project**
30
+ to create one. Record its project ID and quota/billing owner. Choose the
31
+ organization/location required by the operator's account.
32
+ 3. Open **APIs & Services → Library**, find the API named in the provider's
33
+ guide, and select **Enable**. Enable only APIs required by the app's feature.
34
+ 4. Open **Google Auth Platform → Branding**. Enter the public app name, support
35
+ email and developer contact. Supply the home page, privacy policy, terms and
36
+ authorized domains required for that application's intended audience.
37
+ 5. In **Audience**, choose Internal only for an eligible Workspace organization
38
+ whose users are the intended audience. Otherwise choose External. While the
39
+ app is in testing, add the Google accounts that will test the connection via
40
+ **Audience → Test users → Add users**, then Save. External Testing refresh
41
+ tokens for these API scopes expire after seven days; reconnect as needed
42
+ during testing. See [refresh-token expiry](https://developers.google.com/identity/protocols/oauth2#expiration).
43
+ 6. In **Data Access**, add the provider guide's recommended read scope. Add more
44
+ only for operations the app actually implements. Sensitive/restricted scope
45
+ review depends on the scope and app distribution; follow Google's current
46
+ [verification requirements](https://developers.google.com/identity/protocols/oauth2/production-readiness/sensitive-scope-verification).
47
+ 7. In **Clients**, choose **Create client**, type **Web application**, and give
48
+ it an environment-specific name. This library implements confidential web
49
+ clients, including a backend used by a local editor.
50
+ 8. Under authorized redirect URIs, add the **exact backend callback URL**, with
51
+ scheme, host, port when applicable and path. For a local CLI, a registered
52
+ `http://127.0.0.1:<port>/<callback-path>` is supported. HTTPS is required for
53
+ remote callbacks. Do not use wildcard VM/project/custom-domain URLs.
54
+ 9. Create the client. Copy the Client ID into the registration's `clientId`.
55
+ Copy or download the secret immediately; it is shown only at creation.
56
+ Store the secret privately and set `clientSecretRef`, for example
57
+ `env:GOOGLE_CLIENT_SECRET`. Store the full callback URL under the variable
58
+ referenced by `callbackUrlRef`. Never put the secret itself into the JSON.
59
+ 10. Save `integrations.json`. A CLI uses the same parser and validator as the
60
+ form. Use encrypted file storage for grants/attempts outside source; there
61
+ is no database requirement.
62
+ 11. The application's trusted owner policy authorizes `beginAuthorization`.
63
+ For Sheets/Docs/Slides, include the resource ID in `verificationInput` as
64
+ documented below. Display/open the returned URL in a normal browser.
65
+ 12. Recover the initiating authenticated context at the callback and call
66
+ `completeAuthorization` with the full returned callback URL. The library
67
+ checks state, PKCE, identity, registration, expiry, granted scopes and a
68
+ provider read before saving Connected. A denied, expired or repeated
69
+ callback never creates a successful grant.
70
+ 13. Use the named operations from the provider guide. Page tokens and results
71
+ remain provider data; your application controls caching and presentation.
72
+ 14. To replace a lost secret or rotate it, open **Clients**, select the client
73
+ and choose **Add Secret**. Update the private binding, verify operation,
74
+ then disable the old secret. See [Google client administration](https://support.google.com/cloud/answer/15549257?hl=en). Replacing the Client ID requires reconnecting. Revoking access
75
+ from the Google account affects that provider grant; local disconnect
76
+ removes only the application's stored connection and pending attempts.
77
+
78
+ ## Application and environment boundaries
79
+
80
+ Each application owns its Google registration, credentials and callback route.
81
+ The same setup applies from a CLI, an installed editor or a hosted editor. There
82
+ is no shared editor registration or universal callback. Set `source` to `own`;
83
+ store the secret in the application's environment and only its reference in JSON.
84
+
85
+ Use the provider registration that belongs to the application and its intended
86
+ audience. Development and production bindings must resolve to their explicitly
87
+ registered callbacks. When a callback domain changes, update the provider
88
+ registration and environment binding, then reconnect under the new configuration.
89
+ See the [callback guide](../../connectors-core/docs/oauth-callbacks.md).
90
+
91
+ The Google Cloud project owns project quotas and billing. Two clients inside
92
+ one Cloud project do not isolate its project quota. Each independent application's
93
+ operator chooses its Cloud project; editor subscription level does not assign
94
+ provider capacity or transfer user grants.
95
+
96
+ ## What an AI can automate
97
+
98
+ Classification: **assisted API/CLI provisioning**. With authorized Google Cloud
99
+ credentials and sufficient project/organization permissions, an operator can
100
+ use `gcloud projects describe <id>` to check for an existing project and
101
+ `gcloud projects create <id> --name=<name>` when it is absent. Enable the exact
102
+ API with `gcloud services enable <service-name> --project=<id>`; this is a
103
+ repeatable operation. See [project creation](https://cloud.google.com/resource-manager/docs/creating-managing-projects)
104
+ and [Service Usage enablement](https://cloud.google.com/service-usage/docs/enable-disable).
105
+
106
+ The agent can prepare environment names, JSON references, callback URI lists,
107
+ scope selections and implementation wiring. The established API for managing
108
+ projects is not proof of an API for creating arbitrary Google OAuth web
109
+ clients. This implementation documents client creation and consent branding in
110
+ the console, without inventing an OAuth client-creation endpoint. Billing,
111
+ domain ownership, audience decisions, provider review and user consent require
112
+ the relevant operator/account authority.
113
+
114
+ ## Failure and operation limits
115
+
116
+ A 401 or invalid refresh grant requires reconnecting. A 403 indicates missing
117
+ scope, provider policy or resource permission; check each rather than silently
118
+ requesting broad permissions. A 429 reports provider limits. Refresh tokens
119
+ are updated under the same connection lock. Removing a configured permission
120
+ blocks operations that depended on it even if an older token had that grant.
121
+
122
+ No provider calls, sample-app generation or deployment are required by this
123
+ iteration's automated test scope. Real account access remains future acceptance.
@@ -0,0 +1,124 @@
1
+ # Google Search Console setup and runtime
2
+
3
+ Documentation checked: 13 September 2026. Automated tests use simulated provider
4
+ responses and real private JSON state; live provider use is outside this delivery.
5
+
6
+ ## Registration and manual setup
7
+
8
+ Follow all numbered steps in [Google registration setup](google-oauth.md).
9
+ For this connector, choose **Google Search Console API** in APIs & Services → Library and enable
10
+ `searchconsole.googleapis.com` in the selected Cloud project. Create a Web application client
11
+ with the exact backend callback URI. Set the client ID, secret reference and
12
+ callback URL reference in the same registration fields used by the CLI.
13
+
14
+ In Google Auth Platform → Data Access, select
15
+ `https://www.googleapis.com/auth/webmasters.readonly` for this initial read flow.
16
+ The UI exposes additional documented scopes for applications that need them;
17
+ sitemap writes need `webmasters` and fresh consent. Site Verification scopes
18
+ are for separate native API operations, not implemented here. Use External plus explicit
19
+ test users while testing outside an eligible internal Workspace audience.
20
+
21
+ ## Fields and useful fragment
22
+
23
+ Provider ID: `google-search-console`. Import its provider from
24
+ `@jskit-ai/connectors-catalog/server/google-search-console`. Display name, scopes, account mode,
25
+ Client ID/secret and callback references follow the shared field mapping.
26
+ Membership and project access are enforced by the host/application policy,
27
+ not by storing untrusted people IDs in application source.
28
+
29
+ Verification input: `{}`. `sites.list` returns visible property IDs and permission
30
+ levels; an empty list is valid. `sites.get` accepts the exact `siteUrl` identifier.
31
+ Neither operation creates or verifies property ownership.
32
+
33
+ For a new property open [Search Console](https://search.google.com/search-console),
34
+ choose the property selector and **Add property**. A **Domain** property needs
35
+ Google's displayed DNS TXT record added at your DNS provider, followed by Verify.
36
+ A **URL prefix** property offers methods such as an HTML file or meta tag; keep
37
+ its exact scheme/host/prefix. Follow the method Google displays and retain the
38
+ verification resource. Alternatively an existing owner can use **Settings → Users
39
+ and permissions → Add user**. Client registration and selected scopes do not
40
+ replace those steps. DNS/host changes remain operator-owned actions.
41
+
42
+ | Operation | Inputs and behavior |
43
+ | --- | --- |
44
+ | `searchAnalytics.query` | siteUrl, inclusive startDate/endDate (`YYYY-MM-DD`), optional dimensions, type, filters, rowLimit and startRow. Finalized data only. |
45
+ | `urlInspection.inspect` | siteUrl, inspectionUrl, optional languageCode; returns Google's indexed snapshot and verdicts, not a live fetch. |
46
+ | `sitemaps.list` / `sitemaps.get` | siteUrl; get also requires the full feedpath URL. Preserve pending/errors/last-download metadata. |
47
+ | `sitemaps.submit` / `sitemaps.delete` | siteUrl and full feedpath. Requires webmasters and applicable property permission. Empty success returns null. |
48
+
49
+ Performance dates use Google's Pacific-time reporting boundaries. Available
50
+ dimensions are date, country, device, page, query and searchAppearance; duplicates
51
+ are rejected. Type is web, image, video, news, discover or googleNews. Optional
52
+ filters contain dimension/operator/expression and are ANDed. Operators: equals,
53
+ notEquals, contains, notContains, includingRegex and excludingRegex; the provider
54
+ validates RE2 syntax. Date filters use startDate/endDate instead.
55
+
56
+ rowLimit defaults to 1000 (maximum 25000); increase startRow by returned row count
57
+ until no rows remain. This does not guarantee all underlying traffic rows:
58
+ Google returns top data under its internal limits. Missing rows may mean no
59
+ reportable data, not a broken connection. Return clicks, impressions, CTR and
60
+ position without treating them as proof that all URLs are indexed.
61
+
62
+ ```js
63
+ const report = await connections.invoke({ context, integrationId: "search",
64
+ operation: "searchAnalytics.query", input: {
65
+ siteUrl: "sc-domain:example.com", startDate: "2026-09-01", endDate: "2026-09-10",
66
+ dimensions: ["query"], filters: [{ dimension: "device", operator: "equals", expression: "MOBILE" }]
67
+ } });
68
+ ```
69
+
70
+ For sitemaps, select **Manage Search Console properties**, add webmasters in Google
71
+ Data Access and reconnect. The app/owner must first publish an accessible sitemap
72
+ file. Submit registers that URL; it neither writes the file nor guarantees Google
73
+ will crawl/index it. Delete removes its Search Console entry, not the hosted file.
74
+ Inspect the entry after an uncertain write before deciding to repeat it.
75
+
76
+ Other frameworks use the same project config/Env with their native Google client
77
+ or HTTP. The app owns property authorization, report UI, comparisons and indexing
78
+ interpretation; no Vibe64 service receives search data.
79
+
80
+ **Limitations:** no DNS/HTML ownership deployment, Site Verification API, automated
81
+ indexing requests, sitemap generation, crawler or SEO dashboard. No fresh/hourly
82
+ performance mode or exhaustive traffic export. For example, an app can report
83
+ its popular queries and submit an existing sitemap, but cannot make an unverified
84
+ site appear in Google or guarantee rankings. Editor assistant attachment is
85
+ deferred. Fixtures do not prove live property access or indexing results.
86
+
87
+ Sources: [performance queries](https://developers.google.com/webmaster-tools/v1/searchanalytics/query),
88
+ [sitemap submission](https://developers.google.com/webmaster-tools/v1/sitemaps/submit),
89
+ [URL inspection](https://developers.google.com/webmaster-tools/v1/urlInspection.index/inspect).
90
+
91
+ The first read must succeed before Connected is returned. Invalid resource
92
+ identifiers fail before opening consent. Denied scopes, wrong account context,
93
+ replayed callbacks and provider rate limits are covered by the automated tests.
94
+ See the [official operation reference](https://developers.google.com/webmaster-tools/v1/sites/list) for the response and resource
95
+ permission requirements; the implementation also checks Google's public API
96
+ discovery document for request paths and supported scope strings.
97
+
98
+ ## Automation and application setup
99
+
100
+ Classification: **assisted**, as detailed in the common Google guide. An
101
+ operator-authorized AI can check/create the Cloud project and enable
102
+ `searchconsole.googleapis.com` with Service Usage or gcloud. It can prepare this connector's
103
+ JSON and callback/scope values. Web-client creation, branding, audience,
104
+ provider review and account consent remain the documented console/operator
105
+ steps; this adapter does not invent an API for them.
106
+
107
+ The application owns the Cloud project selection, registration, callback and
108
+ private secret bindings. It uses the same setup from a CLI or either editor.
109
+ Follow the common guide for rotation, revocation, domain changes and recovery.
110
+ Provider quotas belong to the selected Cloud project and resources; editor
111
+ subscription level does not allocate a shared registration.
112
+
113
+ ## AI/CLI wiring
114
+
115
+ Use the file-store composition from the [connection pattern](../patterns/api-key-connection/PATTERN.md),
116
+ replace the API-key authentication with `oauth2` plus a registrationRef, and
117
+ register this provider. Use beginAuthorization / completeAuthorization instead
118
+ of connectApiKey, with the verification input above. The existing application
119
+ owns authenticated callback routes and its permission policy. Configuration,
120
+ OAuth, refresh, provider requests and storage remain library imports.
121
+
122
+ ## Additional permission choices
123
+
124
+ The optional `siteverification` and `siteverification.verify_only` choices belong to the separate Site Verification API. They do not authorize Search Console property reads. Applications implementing those operations must enable Site Verification API and wire them separately; this fragment does not change site ownership. See [Site Verification authorization](https://developers.google.com/site-verification/v1/getting_started).
@@ -0,0 +1,94 @@
1
+ # Google Sheets setup and runtime
2
+
3
+ Documentation checked: 13 September 2026. Provider responses are simulated;
4
+ no live account, real spreadsheet or generated app has been exercised.
5
+
6
+ ## Registration and connection
7
+
8
+ 1. Follow [Google registration setup](google-oauth.md): select this application's
9
+ Cloud project, configure Google Auth Platform Branding/Audience and add test users.
10
+ 2. APIs & Services → Library → **Google Sheets API** → Enable. For the default
11
+ create-first connection, also enable **Google Drive API**.
12
+ 3. Google Auth Platform → Data Access → Add or Remove Scopes → select
13
+ `https://www.googleapis.com/auth/drive.file` → Update/Save. This grants only
14
+ files created by or explicitly opened/selected for this app. An arbitrary
15
+ spreadsheet ID does not grant access. The app wires Google Picker if needed.
16
+ 4. Clients → Create Client → Web application → Authorized redirect URIs → Add URI.
17
+ Paste the app backend callback displayed in the editor, then Create. Copy the
18
+ client ID and secret immediately. The common guide explains reviews, Testing
19
+ token expiry and rotation; the editor address is not the callback.
20
+ 5. Save the registration fields in integrations.json. Use **Set credential in Env**
21
+ and **Set callback in Env** for the private values named by their references.
22
+ CLI users write the same file and set the same app Env values themselves.
23
+ 6. Leave **Spreadsheet ID (optional)** blank to verify accessible Drive metadata.
24
+ An empty list succeeds without creating a file; this does not prove Sheets API
25
+ is enabled. To verify an existing file, copy the ID between `/spreadsheets/d/`
26
+ and `/edit`, not its tab's `gid`. Both the account and app need access.
27
+ 7. For read-only existing sheets, choose `spreadsheets.readonly` and supply the ID.
28
+ `spreadsheets` grants broader writes. Add selected scopes in Data Access and
29
+ reconnect after changing them. Drive metadata-only permission cannot read cells.
30
+ Broad Drive access can require restricted-scope review.
31
+
32
+ ## Application operations
33
+
34
+ Import `googleSheetsProvider` from
35
+ `@jskit-ai/connectors-catalog/server/google-sheets`. Register it with the existing
36
+ connection service/file store; the app authenticates each subject and owns its
37
+ callback, consent, grants and authorization policy. For a shared connection the
38
+ app administrator authorizes once; per-user connections require individual consent.
39
+ Use `beginAuthorization` with `verificationInput: {}` for create-first, then
40
+ `completeAuthorization`. [Connection composition](../patterns/api-key-connection/PATTERN.md)
41
+ shows configuration/storage; substitute OAuth plus registrationRef for API-key auth.
42
+
43
+ | Operation | Input and effect |
44
+ | --- | --- |
45
+ | spreadsheets.create | title; returns a new spreadsheet and initial sheet. |
46
+ | spreadsheets.get | spreadsheetId; metadata without grid data. |
47
+ | values.get | spreadsheetId, range; optional valueRenderOption FORMATTED_VALUE, UNFORMATTED_VALUE or FORMULA, and dateTimeRenderOption SERIAL_NUMBER or FORMATTED_STRING. |
48
+ | values.update | spreadsheetId, range, values (row matrix); valueInputOption defaults RAW. |
49
+ | values.append | Same fields; insertDataOption defaults INSERT_ROWS, optionally OVERWRITE. Google detects the logical table before appending. |
50
+ | values.clear | spreadsheetId, range; clears values, preserving formatting/validation. |
51
+ | values.batchUpdate | spreadsheetId, data [{range, values}], valueInputOption; writes several ranges. |
52
+ | spreadsheets.batchUpdate | spreadsheetId, requests [{nativeOperation: {...}}]; sheet creation/deletion, formatting and other native updates. Google validates operation semantics. |
53
+
54
+ ```js
55
+ const sheet = await service.invoke({ ...connection, operation: "spreadsheets.create", input: { title: "Bookings" } });
56
+ await service.invoke({ ...connection, operation: "values.update", input: {
57
+ spreadsheetId: sheet.spreadsheetId, range: "Sheet1!A1:B2",
58
+ values: [["Customer", "Amount"], ["Example", 40]]
59
+ } });
60
+ ```
61
+
62
+ Use A1 ranges and quote sheet titles with spaces/apostrophes using Google's rules.
63
+ The adapter URL-encodes the whole range. Value matrices use ROWS, finite numbers,
64
+ strings, booleans and null; null skips a cell and an empty string clears it.
65
+ RAW is safe for untrusted strings such as `=IMPORTXML(...)`; USER_ENTERED explicitly
66
+ allows formulas and parses dates/numbers according to spreadsheet locale. Formula
67
+ reads use FORMULA; formatted output is locale-dependent. Empty ranges may omit values.
68
+
69
+ Each matrix is limited to 10,000 cells/1 MiB; multi-range/native batches to 100
70
+ entries/1 MiB. Native formatting requests use sheet numeric IDs, zero-based grid
71
+ indices and explicit field masks. These differ from the spreadsheet ID/A1 ranges.
72
+ The app owns authorization, conflict detection and any chunking of larger work.
73
+ No automatic retry follows a timeout/503: inspect the spreadsheet before repeating
74
+ an append/create, or duplicate rows/files may result.
75
+
76
+ Other frameworks use their native Google client or HTTP implementation with the
77
+ same project-owned JSON/Env configuration; JSKIT is optional and requires no Vibe64
78
+ runtime. No PHP code or editor-specific credential service is involved.
79
+
80
+ ## Provisioning and limitations
81
+
82
+ An authorized AI can enable APIs via gcloud/Service Usage and prepare JSON/Env
83
+ references. Client creation, branding, audience, provider review and consent follow
84
+ the console steps above; credentials do not bypass Google approval.
85
+
86
+ **LIMITATIONS:** No spreadsheet designer, embedded Picker, background synchronization,
87
+ Apps Script engine or editor-assistant attachment. For example the app can append a
88
+ booking and format its header, but must build its own table UI and ask the user to
89
+ select an existing private spreadsheet. Live Google behavior remains unproven.
90
+
91
+ References: [values guide](https://developers.google.com/workspace/sheets/api/guides/values),
92
+ [append](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/append),
93
+ [batch updates](https://developers.google.com/workspace/sheets/api/guides/batchupdate),
94
+ [create](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/create).
@@ -0,0 +1,95 @@
1
+ # Google Slides setup and runtime
2
+
3
+ Documentation checked: 13 September 2026. Tests use simulated HTTP and private
4
+ file storage. No live Google presentation, consent or generated app was exercised.
5
+
6
+ ## Set up the project-owned registration
7
+
8
+ 1. Follow [Google registration setup](google-oauth.md): select this application's
9
+ Cloud project; Google Auth Platform → Branding/Audience → configure app details
10
+ and permitted test accounts. Public access requires the applicable review.
11
+ 2. APIs & Services → Library → **Google Slides API** → Enable. Also enable
12
+ **Google Drive API** for create-first connection verification.
13
+ 3. Google Auth Platform → Data Access → Add or Remove Scopes → select
14
+ `https://www.googleapis.com/auth/drive.file` → Update/Save. This permits files
15
+ created by or explicitly selected/opened for this app. For existing-file
16
+ selection, the generated app wires Google Picker; typing an ID grants nothing.
17
+ 4. Clients → Create Client → Web application → Authorized redirect URIs → Add URI.
18
+ Paste the app backend callback displayed in the editor, then Create. Copy its
19
+ client ID and secret immediately. Use the common guide for lost-secret rotation,
20
+ Testing refresh-token expiry and domain changes.
21
+ 5. Enter the client ID and Env references, then Save configuration. **Set credential
22
+ in Env** stores the secret; **Set callback in Env** stores the exact registered
23
+ URL. CLI users set the same references/file without Vibe64.
24
+ 6. Leave **Presentation ID (optional)** blank to verify accessible Drive metadata.
25
+ Empty metadata is accepted without creating a deck; it does not verify that
26
+ Slides API is enabled. For an existing deck, copy the ID between `/presentation/d/`
27
+ and `/edit`, not a slide object ID. Both user and app must have access.
28
+ 7. Read-only existing decks can instead use `presentations.readonly` with that ID.
29
+ `presentations` permits broader edits; enable selected scopes in Data Access and
30
+ reconnect after changes. Spreadsheet scopes alone do not grant presentation
31
+ access. Linked charts may separately require access to their source spreadsheet.
32
+
33
+ ## Runtime and framework ownership
34
+
35
+ Import `googleSlidesProvider` from `@jskit-ai/connectors-catalog/server/google-slides`.
36
+ Register it with the existing connection service/file store. The application owns
37
+ subject authorization, backend callbacks, consent and credentials. Compose the
38
+ [connection pattern](../patterns/api-key-connection/PATTERN.md) with OAuth and a
39
+ registrationRef, then `beginAuthorization` / `completeAuthorization`; use empty
40
+ verificationInput for create-first or `{ presentationId }` for an existing deck.
41
+ Other frameworks use native Google SDK/HTTP with the same project JSON/Env contract;
42
+ JSKIT is optional and has no dependency on the editor at runtime.
43
+
44
+ | Operation | Input / useful result |
45
+ | --- | --- |
46
+ | presentations.create | title; creates a blank deck and returns its ID. |
47
+ | presentations.get | presentationId; title, slides, objects and revision. |
48
+ | presentations.batchUpdate | presentationId, requests, optional requiredRevisionId; native slide/text/image/format/duplicate/delete-object changes. |
49
+ | pages.get | presentationId, pageObjectId; one slide/page. |
50
+ | pages.getThumbnail | Same IDs, optional size SMALL/MEDIUM/LARGE; temporary HTTPS contentUrl and dimensions. |
51
+
52
+ ```js
53
+ const deck = await service.invoke({ ...connection, operation: "presentations.create", input: { title: "Bookings" } });
54
+ await service.invoke({ ...connection, operation: "presentations.batchUpdate", input: {
55
+ presentationId: deck.presentationId,
56
+ requests: [
57
+ { createSlide: { objectId: "booking_slide", slideLayoutReference: { predefinedLayout: "BLANK" } } },
58
+ { createShape: { objectId: "booking_title", shapeType: "TEXT_BOX", elementProperties: {
59
+ pageObjectId: "booking_slide", size: { width: { magnitude: 400, unit: "PT" }, height: { magnitude: 60, unit: "PT" } },
60
+ transform: { scaleX: 1, scaleY: 1, translateX: 40, translateY: 40, unit: "PT" }
61
+ } } },
62
+ { insertText: { objectId: "booking_title", text: "Bookings this week", insertionIndex: 0 } }
63
+ ]
64
+ } });
65
+ ```
66
+
67
+ Batches accept 1–100 native request objects within 1 MiB. Google validates request
68
+ semantics; the app supplies object IDs, positions, field masks and permissions.
69
+ Use `requiredRevisionId` from a recent read to reject concurrent changes; stale
70
+ revision returns a provider error instead of being silently overwritten. This
71
+ adapter never retries uncertain creates/edits; inspect the deck before repeating.
72
+ Images must be reachable by Google and meet its image restrictions. Linked-chart
73
+ requests require source access; there is no automatic grant or chart sync worker.
74
+
75
+ Thumbnail URLs are temporary capabilities: render only to authorized users, avoid
76
+ logging them, and request a fresh thumbnail when expired. The adapter returns the
77
+ URL without downloading it or forwarding tokens to its host. The app owns CSP,
78
+ image rendering and whether to persist a permitted copy. Whole-file copying,
79
+ sharing, export and trash belong to the separately authorized Drive API.
80
+
81
+ ## Automation and limitations
82
+
83
+ Authorized AI can enable APIs using gcloud/Service Usage and prepare configuration;
84
+ client creation, branding, audience, approval and consent follow the console steps.
85
+ No Vibe64-owned Google registration or gateway is required.
86
+
87
+ **LIMITATIONS:** No visual slide designer, template library, embedded Picker,
88
+ whole-file sharing/export UI or editor-assistant attachment. For example an app can
89
+ create a booking summary deck and preview a slide, but must provide its own design
90
+ and access controls. Native/live rendering and actual Google approval are unproven.
91
+
92
+ References: [API methods](https://developers.google.com/workspace/slides/api/reference/rest),
93
+ [batch requests](https://developers.google.com/workspace/slides/api/guides/batch),
94
+ [write control](https://developers.google.com/workspace/slides/api/reference/rest/v1/presentations/batchUpdate),
95
+ [thumbnails](https://developers.google.com/workspace/slides/api/reference/rest/v1/presentations.pages/getThumbnail).
@@ -0,0 +1,178 @@
1
+ # Granola
2
+
3
+ Import `granolaProvider` from `@jskit-ai/connectors-catalog/server/granola`.
4
+ This initial API-key adapter reads notes, folders and transcript pages. It uses
5
+ the shared JSKIT connection service and encrypted file store. CLI and editor
6
+ users own the same JSON; no generated application or database is required.
7
+
8
+ ## Create the provider credential
9
+
10
+ For a personal key:
11
+
12
+ 1. Open the Granola desktop app, then **Settings → Connectors → API keys**.
13
+ 2. Choose **Create new key**. Select the note access scopes, then **Generate
14
+ API Key**. Store the returned `grn_` value in `GRANOLA_API_KEY` outside source.
15
+ 3. In Vibe64 select **Granola** and enter `env:GRANOLA_API_KEY` as the API key
16
+ reference. Choose the intended owner and **Save configuration**. Use
17
+ **Set credential in Env** to save the key as `GRANOLA_API_KEY`, then return
18
+ and choose **Connect account**. CLI users write the JSON below.
19
+
20
+ For a workspace key, an admin opens **Settings → Connectors → Workspace API
21
+ keys → Create new key**. Workspace keys belong to the workspace. Both key paths
22
+ require Business or Enterprise. Enterprise admins manage member scope access
23
+ under **Settings → Workspace → General → API access for members → Manage**.
24
+ Workspace API access to spaces is controlled separately under **Settings → Spaces**.
25
+ [Key creation and administration](https://docs.granola.ai/help-center/sharing/integrations/granola-api)
26
+
27
+ Personal keys can include Personal notes and/or Public notes access. Workspace
28
+ keys use the workspace's permitted public notes and spaces. These permissions
29
+ are set in Granola, not in this JSON. They do not mean arbitrary private content
30
+ is accessible. [API access model](https://docs.granola.ai/introduction)
31
+
32
+ ```json
33
+ {
34
+ "schemaVersion": 1,
35
+ "registrations": {},
36
+ "integrations": {
37
+ "meetings": {
38
+ "provider": "granola",
39
+ "displayName": "Team meeting notes",
40
+ "accountMode": "shared",
41
+ "scopes": [],
42
+ "authentication": {
43
+ "method": "api-key",
44
+ "secretRef": "env:GRANOLA_API_KEY"
45
+ }
46
+ }
47
+ }
48
+ }
49
+ ```
50
+
51
+ Saving this file only configures the integration. The host calls `connectApiKey`
52
+ to verify access through `notes.list`; a successful empty page is valid. The
53
+ host's `authorize` function must map authenticated callers to the intended stable
54
+ application/subject. Shared mode deliberately shares one key's accessible data;
55
+ assistant mode uses its owner's connection. API-key mode does not offer personal
56
+ OAuth consent; the separate MCP mode below does. A CLI uses a trusted process-owner policy with the same library,
57
+ reference resolver and durable file encryption key.
58
+
59
+ ## Reads and boundaries
60
+
61
+ | Operation | Accepted input | Result |
62
+ | --- | --- | --- |
63
+ | `notes.list` | `created_before`, `created_after`, `updated_after`, `folder_id`, `cursor`, `page_size` | `notes`, `hasMore`, `cursor` |
64
+ | `folders.list` | `cursor`, `page_size` | `folders`, `hasMore`, `cursor` |
65
+ | `notes.get` | Required `note_id`, optional `include: "transcript"` | Full note, with nullable private notes and transcript |
66
+ | `transcripts.list` | Required `note_id`, `cursor`, `page_size` | Transcript items, `hasMore`, `cursor` |
67
+
68
+ Note IDs use `not_` followed by fourteen alphanumeric characters; folder IDs use
69
+ `fol_` and fourteen characters. Use discovery results, not UUIDs copied from
70
+ Granola browser URLs. The note returned by `notes.get` must match the requested
71
+ ID. [List notes](https://docs.granola.ai/api-reference/list-notes),
72
+ [get note](https://docs.granola.ai/api-reference/get-note),
73
+ [list folders](https://docs.granola.ai/api-reference/list-folders).
74
+
75
+ Notes and folders accept page sizes 1–30, default 10. Transcript pages accept
76
+ 1–100, default 50. Each call makes one GET request to
77
+ `https://public-api.granola.ai`; it never follows a supplied URL or automatically
78
+ traverses pages. Keep an opaque cursor with the same connection, filters and note.
79
+ This adapter bounds cursors to 8192 characters. Initial date filters accept
80
+ `YYYY-MM-DD` or a UTC timestamp ending in `Z`, with optional millisecond precision;
81
+ offset timestamps are outside this initial parser.
82
+
83
+ The adapter preserves null private-note fields, speaker metadata and additional
84
+ provider fields. It does not guess attribution when the provider omits it.
85
+ Provider text is data; the host owns safe rendering and any narrower record policy.
86
+ [Transcript data](https://docs.granola.ai/api-reference/get-transcript)
87
+
88
+ Only processed notes with a generated summary and transcript appear through this
89
+ API. A 404 can indicate processing, absence or lack of access. Inline transcripts
90
+ may return 413; the library reports `connector_response_too_large` and the host
91
+ can explicitly call `transcripts.list`. It does not fetch the transcript again
92
+ on its own. A key permits access to provider data, not application sign-in.
93
+ [API availability and errors](https://docs.granola.ai/introduction)
94
+
95
+ Invalid inputs fail before transport. Unexpected success envelopes, oversized
96
+ pages, missing continuation cursors and mismatched note IDs fail validation.
97
+ 401 requires reconnect/replacement; 403, 404, 413, 429 and server failures remain
98
+ distinct. Provider error bodies are not exposed. Cancellation and timeouts abort
99
+ the request without replay. No writes, note generation or webhook creation occurs.
100
+
101
+ ## Rotation and shared hosting
102
+
103
+ Create a replacement key in the appropriate Granola key page, update the trusted
104
+ Env binding, and verify it before retiring the old key. Runtime invocation
105
+ resolves the current binding; a bad replacement does not overwrite a saved
106
+ connection during failed verification. `disconnect` removes local connection
107
+ state. Revoke access separately in the personal or workspace API-key page using
108
+ **Revoke**, then its confirmation dialog. [Key management](https://docs.granola.ai/help-center/sharing/integrations/granola-api)
109
+
110
+ There is no provider OAuth application or universal callback URL for this API-key
111
+ mode. Online VPS and custom-domain changes do not change API authentication.
112
+ Keep stable application/owner identity and runtime reference bindings.
113
+
114
+ The application owner supplies its own authorized key through private Env. Do
115
+ not route customer requests through an unrelated workspace key: it exposes that
116
+ workspace's data. Separate keys do not promise independent capacity because
117
+ limits apply per user or workspace according to access scope.
118
+ [Rate limit ownership](https://docs.granola.ai/introduction#rate-limits)
119
+
120
+ ## Separate MCP mode and automation
121
+
122
+ Granola offers two distinct modes under the same provider entry. API keys use
123
+ `notes.list`, `notes.get`, `folders.list` and `transcripts.list`. Browser OAuth
124
+ uses `tools.list` and `tools.call` against `https://mcp.granola.ai/mcp`.
125
+ The runtime rejects calls belonging to the other authentication method before
126
+ refresh or transport. MCP verification lists tools; it does not read a meeting.
127
+
128
+ For the MCP assistant connection:
129
+
130
+ 1. Select Assistant access and OAuth. Keep `openid`, `profile`, `email` and
131
+ `offline_access` selected. Free accounts have limited personal-note access;
132
+ workspace settings and subscription determine the available tools.
133
+ 2. Confirm the suggested callback is the exact route served by the assistant
134
+ host. In Vibe64 choose **Register client and connect**: the existing project
135
+ registration action stores the client ID in configuration and secret, callback
136
+ and recovery ID in development Env, then invokes the app-owned setup command.
137
+ Existing Env values are not replaced; inspect Env after uncertain registration.
138
+ Alternatively use the screen's OAuth client registration endpoint and JSON request,
139
+ or call `registerGranolaClient({ clientName, callbackUrl })` from this package's
140
+ `server/granola` export. Registration is a setup action, never a per-request
141
+ action. The helper uses Granola's advertised DCR endpoint and confidential
142
+ `client_secret_post` authentication.
143
+ 3. Copy `client_id` into Client ID and save configuration. Use Set credential in
144
+ Env to store `client_secret` under the displayed reference. Use Set callback
145
+ in Env to save the same callback used for registration. Preserve the response
146
+ privately; do not put its secret in configuration or browser source.
147
+ 4. Connect account, sign into Granola and approve access. Select the intended
148
+ active workspace in Granola. The host authorizes each tool and its arguments.
149
+ 5. Disconnect removes the local grant. It does not promise provider-wide
150
+ revocation. Granola's guide does not document a general revocation screen for
151
+ custom MCP clients; contact `hey@granola.so` when provider assistance is needed.
152
+
153
+ [Granola MCP](https://docs.granola.ai/help-center/sharing/integrations/mcp) and
154
+ [live OAuth metadata](https://mcp-auth.granola.ai/.well-known/oauth-authorization-server)
155
+ were reviewed on 2026-09-12. Registration, callbacks, tokens and runtime belong
156
+ to the initiating application/assistant host. There is no Vibe64 gateway.
157
+ Granola advertises DCR for compatible clients. The explicit Register client and
158
+ connect action uses its existing helper; plain Connect does not silently create
159
+ registrations. Enterprise-managed authorization is not implemented here.
160
+
161
+ AI can write and validate the file, compose the existing library, prepare host
162
+ routes and automate the documented read operations after authorised credential
163
+ setup. The reviewed API documentation does not establish an endpoint for creating
164
+ personal/workspace API keys. Key creation, permissions, account sign-in and required
165
+ provider subscription are operator/provider steps. Vibe64 need not gate its own
166
+ form, but cannot remove Granola's subscription or permission requirements.
167
+
168
+ Focused proof uses controlled HTTP responses and temporary encrypted files,
169
+ including rotation, ownership, pagination, malformed data and interruption.
170
+ No live keys, meetings, provider registrations, generated apps or deployments are
171
+ used. The MCP fixture covers PKCE, verification, restart/refresh, replay rejection and credential-mode isolation. The controlled dual-mode browser journey and rendered setup instructions passed review. No live OAuth client or provider account was used. Webhooks, REST mutations and enterprise-managed authorization are not implemented.
172
+
173
+ **LIMITATIONS:** The app/assistant host must authorize and attach MCP tools itself.
174
+ Vibe64 coding-assistant attachment is deferred: configuring Granola does not make
175
+ Codex or OpenCode able to answer questions about meetings. For example a generated
176
+ app can read a processed meeting transcript with the API key, but this editor will
177
+ not automatically use it as chat context. No REST note creation, recording engine,
178
+ webhook receiver or enterprise-managed OAuth is installed.