@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,190 @@
1
+ # Algolia
2
+
3
+ Import `algoliaProvider` from `@jskit-ai/connectors-catalog/server/algolia`.
4
+ This adapter verifies a backend key, searches indices, maintains records and checks indexing tasks.
5
+ The portable configuration also carries the optional frontend key reference;
6
+ the backend runtime neither resolves nor publishes that optional key.
7
+
8
+ ## Create the application and keys
9
+
10
+ 1. Sign into the Algolia dashboard. Open **Settings → Applications → Create
11
+ Application**. Choose the application name, plan and cluster region; supply
12
+ billing details when the selected plan requires them. Select the new
13
+ application before creating its keys.
14
+ [Application creation](https://support.algolia.com/hc/en-us/articles/4406975239441-How-do-I-create-an-application).
15
+ 2. Open **API Keys** and copy the **Application ID**. Under **All API Keys**,
16
+ choose **New API Key**. Name it for this application's backend, enable
17
+ `listIndexes` and `search`. Add `addObject` for indexing and task status,
18
+ and `deleteObject` for deletion when needed. Restrict it to the intended indices. Create
19
+ the key and store it in the backend environment as `ALGOLIA_API_KEY`.
20
+ The runtime does not require the Admin key.
21
+ [Key creation](https://support.algolia.com/hc/en-us/articles/9438531643665-How-do-I-generate-keys).
22
+ 3. If the frontend will query Algolia directly, create a separate key with only
23
+ `search`, restricted to indices containing data that those clients may read.
24
+ Store that value as `ALGOLIA_SEARCH_KEY`. The predefined Search-only key can
25
+ search all application indices, so do not assume it isolates private data.
26
+ [Key types](https://www.algolia.com/doc/guides/security/api-keys).
27
+ 4. Set appropriate validity, index and request restrictions when creating keys.
28
+ Referrer restrictions alone are not authorization. Replace or delete keys in
29
+ **API Keys → All API Keys** when access should end at Algolia. Local connector
30
+ disconnect only removes the local connection.
31
+ [Key restrictions](https://www.algolia.com/doc/guides/security/api-keys/in-depth/api-key-restrictions).
32
+
33
+ ## File and field ownership
34
+
35
+ The editor and a manually composed CLI edit the same `integrations.json`:
36
+
37
+ ```json
38
+ {
39
+ "schemaVersion": 1,
40
+ "registrations": {},
41
+ "integrations": {
42
+ "search": {
43
+ "provider": "algolia",
44
+ "displayName": "Product search",
45
+ "accountMode": "shared",
46
+ "scopes": [],
47
+ "authentication": {
48
+ "method": "api-key",
49
+ "secretRef": "env:ALGOLIA_API_KEY"
50
+ },
51
+ "settings": {
52
+ "applicationId": "YOURAPPLICATIONID",
53
+ "publicApiKeyRef": "env:ALGOLIA_SEARCH_KEY"
54
+ }
55
+ }
56
+ }
57
+ }
58
+ ```
59
+
60
+ The application ID is public configuration. The two key values stay outside
61
+ source. Omit `publicApiKeyRef` when all searches go through the backend. The
62
+ reference validator accepts the same `env:NAME` format as other connectors.
63
+ The shared UI provides an Application ID text field, optional public-key
64
+ reference and the primary API-key reference. Vibe64 provides a separate Env
65
+ shortcut for each configured key, including a notice that the frontend key may
66
+ be published. Clearing its reference removes the shortcut, not the Env value.
67
+ Sharing grants remain a separate host responsibility.
68
+
69
+ The app ID must be 1–63 alphanumeric characters in this fragment so it forms
70
+ one DNS label. This is a runtime validation boundary, not a claim that Algolia
71
+ issues IDs of every such length. Settings changes require verification again.
72
+ The destination is fixed to `https://<application-id>.algolia.net`; arbitrary
73
+ hosts and another application's host cannot receive this connection's key.
74
+
75
+ ## Runtime and AI composition
76
+
77
+ Use the [API-key source pattern](../patterns/api-key-connection/PATTERN.md) with
78
+ `providers: [algoliaProvider]`, the file connection store, the application's
79
+ reference resolver and its authorization policy. Both configuration and runtime
80
+ state are text files. No database, editor process or managed service is required.
81
+
82
+ ```js
83
+ await connections.connectApiKey({ context, integrationId: "search" });
84
+ const indices = await connections.invoke({
85
+ context, integrationId: "search", operation: "indices.list",
86
+ input: { page: 0, hitsPerPage: 100 }
87
+ });
88
+ const results = await connections.invoke({
89
+ context, integrationId: "search", operation: "index.search",
90
+ input: { indexName: "products", query: "phone", page: 0, hitsPerPage: 20 }
91
+ });
92
+ ```
93
+
94
+ `indices.list` performs `GET /1/indexes`; verification invokes its default page
95
+ zero, with 100 entries requested. `listIndexes` permission is required, and the
96
+ response's `items` and optional `nbPages` remain intact. Empty indices still
97
+ allow verification. This does not prove that `search` is granted on a particular
98
+ index. [List indices](https://www.algolia.com/doc/rest-api/search/list-indices).
99
+
100
+ `index.search` performs `POST /1/indexes/{indexName}/query`, with JSON query,
101
+ page and page-size values. It requires `search`, preserves hits and pagination,
102
+ and defaults to an empty query, page zero and 20 hits. Index names are encoded
103
+ as one path component, limited to 255 characters and cannot be `.` or `..`.
104
+ Both operations accept pages from zero to 2147483647 and page sizes 1–1000 as
105
+ local fragment bounds; provider index/key limits may be tighter. Search does not
106
+ bypass Algolia's retrieval limits or automatically browse the full dataset.
107
+ [Single-index search](https://www.algolia.com/doc/rest-api/search/search-single-index).
108
+ Queries must fit 512 UTF-8 bytes; the validator checks bytes as well as string
109
+ length. [Query limits](https://www.algolia.com/doc/api-reference/api-parameters/query).
110
+
111
+ For direct frontend search, the application may deliberately resolve and expose
112
+ only `publicApiKeyRef` plus `applicationId` after configuring a suitable
113
+ search-only key. Never serialize `authentication.secretRef`'s resolved value to
114
+ the browser. This runtime does not inspect the frontend key's ACL or install a
115
+ search widget. Index settings, secured-key generation,
116
+ recommendations and host failover are outside the fragment.
117
+
118
+ ## Automation and application ownership
119
+
120
+ AI-assisted provisioning can use Algolia's CLI after a human completes
121
+ `algolia auth login`; that creates a dashboard OAuth session. This is a separate
122
+ operator bootstrap, not the API-key connection above.
123
+ [CLI authentication](https://www.algolia.com/doc/tools/cli/authentication).
124
+ Current CLI documentation exposes `algolia application create`, with name,
125
+ region, plan and dry-run options. For example, review each request first:
126
+
127
+ ```sh
128
+ algolia application create --name dogandgroom-search --region EU --plan free --dry-run
129
+ ```
130
+
131
+ Actual creation requires the chosen plan's terms and, for paid plans, a payment
132
+ method. An AI can prepare the requests; the operator owns those choices.
133
+ [Create command](https://www.algolia.com/doc/tools/cli/commands/application/create).
134
+ The older application-management guide says no programmatic management API
135
+ exists; the July 2026 CLI documentation explicitly supports creation through the
136
+ Dashboard API. Use the supported CLI rather than guessing private endpoints.
137
+
138
+ With an explicitly supplied Admin key, the Search API can create restricted
139
+ keys through `POST /1/keys`, including `acl`, `indexes`, description, validity
140
+ and rate limits. Keep that bootstrap key out of the running connector and issue
141
+ a lesser backend key for its required operations.
142
+ [Key provisioning](https://www.algolia.com/doc/rest-api/search/add-api-key).
143
+
144
+ The application owner creates its Algolia application and supplies a scoped key
145
+ through private Env. Two keys in one Algolia application do not establish
146
+ independent application capacity. Separate applications have their own plans;
147
+ dedicated server isolation is a separate provider offering.
148
+ [Application isolation](https://www.algolia.com/doc/guides/sending-and-managing-data/manage-indices-and-apps/manage-your-apps).
149
+ This flow needs no OAuth callback, so editor VM and custom application domains
150
+ do not add provider redirect registrations. This is search access, not user login.
151
+
152
+ ## Proof
153
+
154
+ Focused tests use simulated provider responses and real temporary encrypted JSON
155
+ state. They cover endpoint/header binding, public-key separation, rotation,
156
+ restart, ownership, configuration changes, encoded index paths, UTF-8 query
157
+ limits, paging, malformed responses and failures. Browser tests cover validated
158
+ text inputs, optional-reference clearing, CLI import and save/reload. Live
159
+ provider use, real account creation and generated sample apps are untested.
160
+
161
+ ## Maintain the search index
162
+
163
+ Use `records.replace` with `{ indexName, objectID, attributes }` to create or
164
+ fully replace a record. Pick a stable ID from the application's source record;
165
+ omitted attributes are removed on replacement. Use `records.update` with the
166
+ same inputs to update only specified attributes; this explicitly sets
167
+ `createIfNotExists=false`. Both require `addObject`. Supply a nonempty attributes
168
+ object and keep the record ID in `objectID`, not inside attributes.
169
+ [Replace a record](https://www.algolia.com/doc/rest-api/search/add-or-update-object),
170
+ [partial update](https://www.algolia.com/doc/rest-api/search/partial-update-object).
171
+
172
+ `records.delete` takes `{ indexName, objectID }` and requires `deleteObject`.
173
+ Each mutation returns a task ID, not evidence that search results already reflect
174
+ the change. Call `tasks.get` with `{ indexName, taskID }`; keep the application
175
+ work item pending for `notPublished` and complete it only for `published`.
176
+ Task checks require `addObject`. Use a bounded application-owned polling schedule
177
+ and retain task IDs for later recovery rather than blocking requests indefinitely.
178
+ [Delete a record](https://www.algolia.com/doc/rest-api/search/delete-object),
179
+ [task status](https://www.algolia.com/doc/rest-api/search/get-task).
180
+
181
+ Keep ingestion behind application authorization. Publish only deliberately
182
+ searchable data to frontend-accessible indices, and never publish the backend
183
+ write key. Do not grant write ACLs to the public search key. A timeout does not
184
+ prove a write failed; reconcile the known record/task before retrying, especially
185
+ for partial update operators such as increments. No automatic retries are added.
186
+
187
+ `test/algolia.test.js` now includes replacement, partial update, deletion and
188
+ pending/published task progression through the real connection service. It
189
+ retains existing search, key-separation, restart and failure tests. Six tests
190
+ passed with controlled HTTP, without live indexing or account credentials.
@@ -0,0 +1,229 @@
1
+ # Amazon Redshift
2
+
3
+ Import `amazonRedshiftProvider` from
4
+ `@jskit-ai/connectors-catalog/server/amazon-redshift`. The runtime uses the official
5
+ AWS Redshift Data SDK and explicit AWS credential references. It supports shared
6
+ and assistant connections to a serverless workgroup or provisioned cluster.
7
+ Per-user Identity Center federation is still unfinished; this shared connection
8
+ must not be presented as each application user's independent AWS identity.
9
+
10
+ ## Portable configuration
11
+
12
+ ```json
13
+ {
14
+ "schemaVersion": 1,
15
+ "registrations": {},
16
+ "integrations": {
17
+ "warehouse": {
18
+ "provider": "amazon-redshift",
19
+ "displayName": "Reporting warehouse",
20
+ "accountMode": "shared",
21
+ "scopes": [],
22
+ "authentication": {
23
+ "method": "api-key",
24
+ "secretRef": "env:AWS_SECRET_ACCESS_KEY"
25
+ },
26
+ "settings": {
27
+ "deploymentType": "serverless",
28
+ "region": "us-east-1",
29
+ "accessKeyIdRef": "env:AWS_ACCESS_KEY_ID",
30
+ "workgroup": "analytics",
31
+ "database": "dev"
32
+ }
33
+ }
34
+ }
35
+ }
36
+ ```
37
+
38
+ For a provisioned cluster, set `deploymentType` to `provisioned`, replace
39
+ `workgroup` with `clusterIdentifier`, and optionally add `databaseUser`. For
40
+ temporary AWS credentials add `sessionTokenRef`; the host renews the complete
41
+ credential set. The default type is `serverless` and default region is
42
+ `us-east-1`. Explicitly select the warehouse's real region. The form lists 34
43
+ commercial regions; that list does not guarantee that every account/deployment
44
+ supports every region. Noncommercial partitions and arbitrary endpoints are not
45
+ accepted. This fragment takes a workgroup **name**, not an ARN.
46
+
47
+ The shared schema selects the correct fields. Serverless requires `workgroup`;
48
+ provisioned requires `clusterIdentifier` and accepts optional `databaseUser`.
49
+ Both require `database` and AWS key references. CLI mixed-mode fields fail
50
+ validation. Switching type in the shared form removes the other type's fields;
51
+ it preserves credentials, region, database, other slots and extension data.
52
+ Database identifiers retain their exact spelling and whitespace.
53
+
54
+ ## Administrator setup
55
+
56
+ Use an existing warehouse when one is available. For a new serverless warehouse:
57
+
58
+ 1. In the AWS console, select the intended account and region and open Amazon
59
+ Redshift. Choose **Serverless dashboard > Create workgroup**.
60
+ 2. Enter the workgroup name and select the IP mode, VPC, subnets and security
61
+ groups for that workload. Choose capacity suitable for the account's budget.
62
+ 3. Create a namespace or select an existing namespace. For a new namespace,
63
+ supply its database name and configure administrator credentials, encryption
64
+ and logging. A warehouse's associated IAM role for data access is separate
65
+ from the identity that calls this connector.
66
+ 4. Review the selections and save. Once available, copy the workgroup name and
67
+ database name into the configuration.
68
+
69
+ These console steps follow [Create a workgroup with a namespace](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-console-workgroups-create-workgroup-wizard.html).
70
+
71
+ For a provisioned warehouse:
72
+
73
+ 1. In Amazon Redshift, choose **Clusters** and select the intended cluster.
74
+ To create one, choose **Create cluster** and supply its identifier, node
75
+ configuration and administrator credential method.
76
+ 2. Review database, VPC/subnet, security group, encryption and maintenance
77
+ settings before creating it. Copy its identifier and database name.
78
+ 3. Choose whether calls should use an IAM-derived database user or a specific
79
+ existing database user. Only the latter needs `databaseUser` in this file.
80
+
81
+ See [Create a cluster](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html).
82
+
83
+ For either deployment type:
84
+
85
+ 1. Follow [AWS credential setup](aws-credentials.md). Grant the caller only the
86
+ needed `redshift-data` actions: `ListDatabases`, `ListSchemas`, `ListTables`, `DescribeTable`,
87
+ `ExecuteStatement`, `DescribeStatement`, `GetStatementResult` and
88
+ `CancelStatement` for the operations the application exposes.
89
+ 2. Grant the matching database credential action: serverless needs
90
+ `redshift-serverless:GetCredentials`; provisioned IAM-derived users need
91
+ `redshift:GetClusterCredentialsWithIAM`; provisioned explicit database users
92
+ need `redshift:GetClusterCredentials`. Restrict resource access in IAM.
93
+ 3. Have the database administrator grant access to the intended schemas/tables
94
+ to the resulting database identity. Use database permissions to enforce
95
+ read-only access where required; accepting SQL does not make it SELECT-only.
96
+ 4. Store the access key ID, secret key and any session token in the application's
97
+ secret environment. Enter references through Vibe64 or edit the JSON file.
98
+ 5. Save, then explicitly call `connectApiKey`. It lists one metadata page in the
99
+ configured database. An empty table list can still be a successful connection;
100
+ it does not prove permission to read every table or execute every statement.
101
+
102
+ The credential combinations are specified by [ExecuteStatement](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_ExecuteStatement.html).
103
+ The adapter does not use a host profile, instance metadata, database passwords
104
+ or a Secrets Manager ARN as an implicit fallback.
105
+
106
+ ## Runtime contract
107
+
108
+ | Operation | Input | Output |
109
+ |---|---|---|
110
+ | `databases.list` | Optional `maxResults` 1–1000 (default 100), opaque `nextToken` | `Databases` name page and optional `NextToken` |
111
+ | `schemas.list` | Optional `schemaPattern`, `maxResults` 1–1000, `nextToken` | `Schemas` name page and optional `NextToken` |
112
+ | `tables.list` | Optional `schemaPattern`, `tablePattern`, `maxResults` 1–1000 (default 100), opaque `nextToken` | `Tables` metadata page and optional `NextToken` |
113
+ | `table.describe` | `table`; optional `schema`, `maxResults` 1–1000, `nextToken` | `ColumnList`, `TableName` and optional cursor |
114
+ | `query.start` | Exact `sql`, required `clientToken` 1–64 characters; optional `parameters: [{name, value}]` | `Id` and submission metadata |
115
+ | `query.status` | `statementId` | AWS statement status and execution metadata |
116
+ | `query.results` | `statementId`; optional `nextToken` | One JSON result page with typed cells and column metadata |
117
+ | `query.cancel` | `statementId` | AWS boolean `Status` acknowledgement |
118
+
119
+ Database discovery uses the configured database to authenticate and can return
120
+ other visible database names. It does not grant access to them or change this
121
+ connection's target. Schema and table discovery remain in the configured database;
122
+ use another explicitly configured connection to work in another database.
123
+ The application authorizes metadata visibility as well as SQL. Names and opaque
124
+ cursors remain unchanged; an absent or empty cursor ends pagination.
125
+ See [ListDatabases](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_ListDatabases.html)
126
+ and [ListSchemas](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_ListSchemas.html).
127
+ Native framework consumers use those same SDK operations and project credentials.
128
+
129
+ Table filters retain SQL metadata wildcards `%` and `_`; names and cursors are
130
+ passed unchanged. See [ListTables](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_ListTables.html)
131
+ and [DescribeTable](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_DescribeTable.html).
132
+
133
+ SQL is preserved and locally capped at 200000 UTF-8 bytes. Parameter names are
134
+ unique alphanumeric/underscore strings; values are nonempty strings, including
135
+ exact decimal/large-integer text. The fragment permits 1–100 parameters, values
136
+ up to 65536 characters. Omit the array for statements without parameters.
137
+ These are local bounds; AWS validates SQL and converts parameter values.
138
+ Use parameters for values rather than concatenating user input into SQL.
139
+ See [SqlParameter](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_SqlParameter.html).
140
+
141
+ The host authorizes the exact SQL, target and logical request before starting.
142
+ Persist `clientToken` and the returned `Id` with application ownership in
143
+ application-owned state; files work. AWS deduplication tokens have a limited
144
+ retention window, so an ambiguous submission is not permission to issue a new
145
+ token. AWS currently documents an eight-hour token window and 24-hour result
146
+ retention in [Data API considerations](https://docs.aws.amazon.com/redshift/latest/mgmt/data-api.html).
147
+ The runtime performs no automatic retries, polling, session reuse or batch SQL.
148
+
149
+ Status/results/cancel first describe the statement and check its ID, database,
150
+ workgroup or cluster, and explicit database user when configured. Matching a
151
+ warehouse is not application-user ownership. The host must enforce ownership
152
+ within a shared warehouse. Status metadata can contain SQL and database errors;
153
+ return it only to an authorized caller. See [DescribeStatement](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_DescribeStatement.html).
154
+
155
+ Results require `FINISHED` and `HasResultSet`. Preserve AWS column metadata and
156
+ typed cells, including null, empty string, boolean, number and binary values.
157
+ Binary fields are SDK `Uint8Array` values; encode them explicitly if your own
158
+ transport sends JSON. Integers outside JavaScript's safe range are rejected;
159
+ cast exact large integers to VARCHAR in SQL when they must be returned as text.
160
+ No row-size parameter is invented for this endpoint: request another page only
161
+ with AWS's cursor and use an authorized SQL limit when appropriate. See
162
+ [GetStatementResult](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_GetStatementResult.html).
163
+
164
+ Local abort, timeout or disconnect does not stop a remote query. Explicit
165
+ `query.cancel` requests cancellation; inspect status separately if the final
166
+ outcome is needed. A boolean acknowledgement is not proof of rollback. See
167
+ [CancelStatement](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_CancelStatement.html).
168
+ HTTP failures are redacted; credential renewal, IAM denial, throttling,
169
+ configuration errors and missing resources are distinct outcomes.
170
+
171
+ ## Automation and application ownership
172
+
173
+ An already authorized AI can create/configure resources using AWS APIs. The
174
+ Serverless APIs expose `CreateNamespace`, `CreateWorkgroup` and their update/read
175
+ operations; see [Workgroups and namespaces](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-workgroup-namespace.html).
176
+ Provisioned creation uses [CreateCluster](https://docs.aws.amazon.com/redshift/latest/APIReference/API_CreateCluster.html).
177
+ IAM policies, resource creation, database grants, billing choices and credential
178
+ renewal require the corresponding administrator authority. This connector runs
179
+ Data API operations; it does not provision accounts or warehouses.
180
+
181
+ There is **no OAuth callback URL** for the implemented credential mode. Online,
182
+ desktop and independent CLI can all use the same JSON and runtime. A customer's
183
+ VPS or custom domain does not change the AWS API endpoint or credential binding.
184
+ The application owner supplies AWS credentials through private Env or its
185
+ credential store. Resource names and editable `env:` references do not grant
186
+ AWS permissions. Separate IAM keys alone do not promise isolated service quotas. See [AWS ownership](aws-credentials.md#online-public-editor-and-independent-cli).
187
+
188
+ ## Per-user federation still to deliver
189
+
190
+ The per-user design requires an organizational identity provider and IAM
191
+ Identity Center trusted identity propagation. It is not implemented by this
192
+ adapter's API-key mode. AWS describes the database integration and identity-bound
193
+ statement access in [Data API trusted identity propagation](https://docs.aws.amazon.com/redshift/latest/mgmt/data-api-trusted-identity-propagation.html).
194
+
195
+ The remaining configuration must capture the **identity provider issuer URL,
196
+ OAuth client ID and secret reference, AWS region, Identity Center application
197
+ ARN, bootstrap role ARN, and access role ARN**. The provider registration needs
198
+ the application's explicitly configured callback, whether hosted by Vibe64 or
199
+ operated independently. Start from the project's actual public address and
200
+ register the exact callback implemented by the application. No production
201
+ Redshift federation callback implementation is shipped yet.
202
+
203
+ Remaining runtime work includes OIDC discovery and token verification, the
204
+ bootstrap web-identity role exchange, IAM Identity Center token exchange,
205
+ identity-enhanced access-role credentials, renewal and individual connection
206
+ ownership. Each step must preserve issuer, audience, application and user
207
+ boundaries. Detailed federation setup screens and controlled exchange tests
208
+ remain planned. Do not substitute the builder's AWS credentials for this mode.
209
+
210
+ ## Focused verification
211
+
212
+ `test/amazon-redshift.test.js` uses the real AWS SDK against controlled HTTP
213
+ responses and protected temporary files. It covers both target types, explicit
214
+ DB users, conditional CLI validation, metadata pages, SQL parameters, query
215
+ states, results, target isolation, credentials, errors and cancellation.
216
+ Shared-form browser checks pass at 390, 820 and 1440 pixels, including CLI
217
+ imports, invalid fields, deployment changes and configuration export. Public
218
+ editor phone/desktop checks pass for region selection, credential references,
219
+ both target types, invalid-save rejection, inactive-field removal and reload.
220
+ No live AWS registration, warehouse, SQL, generated app or federation flow has
221
+ been exercised.
222
+
223
+ ## Existing-scope closeout — 13 September 2026
224
+
225
+ Shared project-owned AWS credentials support serverless/provisioned targets, databases/schemas/tables discovery, table description, parameterized SQL submission, status, typed result pages and cancellation.
226
+
227
+ No per-user Identity Center/OIDC federation or trusted identity propagation; no role-exchange/automatic credential renewal, default host credential chain, database password or Secrets Manager ARN mode, noncommercial partitions, custom endpoints, warehouse/IAM provisioning, batch SQL, automatic polling/retries or application job-ownership registry. SQL is not SELECT-only: database grants and application authorization enforce allowed work. The host stores request/statement ownership, handles uncertain submission and explicitly cancels remote jobs; local timeout/disconnect cannot do that. Unsafe JavaScript integer results are rejected; cast exact values to text. To extend: implement the already documented federation inputs/exchanges and tests, optional authentication modes and desired orchestration separately. No live provider account, provider registration, paid request or generated-application execution was tested. No new editor coding-assistant tool attachment is claimed. Other frameworks use the same project configuration and their own native tools; JSKIT is optional.
228
+
229
+ 16 source and 16 installed-package tests passed on September 13 using the actual AWS SDK with controlled HTTP and private files. September 12 compact/expanded form/lifecycle evidence is retained; no new UI run.
@@ -0,0 +1,210 @@
1
+ # Amplitude assistant MCP
2
+
3
+ Import `amplitudeProvider` and the explicit setup helper
4
+ `registerAmplitudeClient` from `@jskit-ai/connectors-catalog/server/amplitude`.
5
+ This is an assistant-owner OAuth connection. It exposes MCP tool discovery and
6
+ authorized calls for analytics/content work, not event ingestion or app login.
7
+ Amplitude's [client guide](https://amplitude.com/docs/amplitude-ai/amplitude-mcp/other-clients)
8
+ requires remote HTTP MCP with OAuth; an API key cannot replace this flow.
9
+
10
+ ## Manual setup and account controls
11
+
12
+ 1. Sign into the intended Amplitude account and identify its US or EU residency.
13
+ Use that same region in the editor and client registration.
14
+ 2. If MCP access is blocked, an organization administrator opens **Settings →
15
+ Content Access → MCP** and reviews the organization-level setting.
16
+ 3. For project-specific access, the administrator opens **Org Settings → Role
17
+ Management**, creates/edits the role, and selects **AI Features → Use MCP
18
+ (read)** and, when needed, **Use MCP (write)**. Assign the role to the intended
19
+ user/group/service account and projects.
20
+ 4. In Vibe64, leave the new Client ID empty, set the Suggested callback URL and
21
+ choose **Register client and connect**. The workspace owner can register once
22
+ at the selected regional authority; Vibe64 saves the client ID in configuration
23
+ and its secret, callback and recovery client ID in development Env before
24
+ starting the application’s connection command. Existing Env values are not
25
+ overwritten. If local saving fails, recover the client from Env/provider state
26
+ before trying again. CLI users can use the setup operation below. The reviewed
27
+ documentation establishes dynamic registration, not a manual developer-app
28
+ creation screen; do not search for an invented console form.
29
+ 5. Enter the returned **Client ID** in Vibe64. Store its secret and the exact
30
+ callback URL through Env, then fill **Client secret reference** and
31
+ **Callback URL reference**. Keep secrets outside `integrations.json`.
32
+ 6. Save. Through the runtime's authorization flow, open the returned URL, sign
33
+ into Amplitude, review requested permissions and complete consent. The
34
+ callback must recover the same authenticated assistant owner.
35
+
36
+ [Amplitude organization and role controls](https://amplitude.com/docs/amplitude-ai/amplitude-mcp#admin-controls).
37
+ Tool discovery remains visible even where project-level calls are forbidden;
38
+ discovery is not proof of access to every project or write operation.
39
+
40
+ ## Registration automation
41
+
42
+ The US server's public
43
+ [authorization metadata](https://mcp.amplitude.com/.well-known/oauth-authorization-server)
44
+ advertises `/register`, code grants, refresh tokens, S256 PKCE, and
45
+ `client_secret_post`/`none` authentication. Its
46
+ [resource metadata](https://mcp.amplitude.com/.well-known/oauth-protected-resource)
47
+ identifies `https://mcp.amplitude.com` as the OAuth resource. Equivalent EU
48
+ metadata is served at `https://mcp.eu.amplitude.com`. These public metadata
49
+ documents were read on 9 September 2026; no client or user account was created.
50
+
51
+ After the operator authorizes registration, a setup script can call:
52
+
53
+ ```js
54
+ import { registerAmplitudeClient } from "@jskit-ai/connectors-catalog/server/amplitude";
55
+
56
+ const client = await registerAmplitudeClient({
57
+ region: "us",
58
+ clientName: "My assistant",
59
+ callbackUrl: "https://assistant.example/connections/amplitude/callback",
60
+ scopes: ["mcp:read", "offline_access"]
61
+ });
62
+ // Securely store client.clientSecret in the host's existing secret owner.
63
+ // Put client.clientId in the portable registration; never log this object.
64
+ ```
65
+
66
+ The helper uses the official MCP SDK to POST confidential-client metadata to
67
+ the fixed regional registration endpoint. It requests one exact redirect URI,
68
+ code/refresh grants and `client_secret_post`, and validates the returned client
69
+ and redirect metadata. It returns `clientId`, `clientSecret` and any
70
+ `clientSecretExpiresAt` value. This is a privileged setup result, never an
71
+ ordinary connection-status response. The host must authorize invoking it and
72
+ store its secret before exposing the nonsecret configuration.
73
+
74
+ HTTPS callbacks and HTTP loopback callbacks are supported; credentials, query
75
+ strings and fragments are rejected. The helper does not follow redirects,
76
+ automatically retry, create an Amplitude account or complete consent. If
77
+ registration times out, inspect the provider before retrying: a client might
78
+ already exist. Registration metadata does not prove live issuance will succeed
79
+ for every account or client policy; that acceptance check remains unperformed.
80
+
81
+ For manual registration, use an HTTP client on your own machine:
82
+
83
+ In Vibe64, expand **Set up Amplitude → OAuth client registration**. Set the
84
+ region, permissions and **Suggested callback URL** first. **Copy registration
85
+ endpoint** and **Copy registration request** provide the values for this
86
+ project without requiring a Client ID. Copying sends no request. The example
87
+ below is for CLI users or an HTTP client configured by hand.
88
+
89
+ 1. Create a **POST** request to `https://mcp.amplitude.com/register` for US,
90
+ or `https://mcp.eu.amplitude.com/register` for EU. Do not send it to the
91
+ `/mcp`, `/authorize` or `/token` endpoint.
92
+ 2. Set the request header `Content-Type: application/json`. Set the body to
93
+ raw JSON using the example below. Replace the example name and callback
94
+ with the owning application's name and exact callback shown in Vibe64.
95
+ The application must implement that route before user consent can finish.
96
+ 3. Match `scope` to the permissions selected in Vibe64. The example uses the
97
+ default read and refresh permissions; add `mcp:write` only when needed.
98
+ 4. Send once. On a successful response, copy `client_id` into **Client ID**.
99
+ Store `client_secret` as `AMPLITUDE_CLIENT_SECRET` through the project's
100
+ Env editor; enter `env:AMPLITUDE_CLIENT_SECRET` in **Client secret reference**.
101
+ Store the exact registered callback as `AMPLITUDE_CALLBACK_URL`; enter
102
+ `env:AMPLITUDE_CALLBACK_URL` in **Callback URL reference**.
103
+ 5. Do not save an error response, missing credentials or a different returned
104
+ redirect URI as a valid registration. Treat the response as secret material;
105
+ do not paste it into source, chat or a shared HTTP-client collection.
106
+
107
+ ```json
108
+ {
109
+ "client_name": "My assistant",
110
+ "redirect_uris": ["https://assistant.example/connections/amplitude/callback"],
111
+ "token_endpoint_auth_method": "client_secret_post",
112
+ "grant_types": ["authorization_code", "refresh_token"],
113
+ "response_types": ["code"],
114
+ "scope": "mcp:read offline_access"
115
+ }
116
+ ```
117
+
118
+ The HTTP response uses `client_id` and `client_secret`; the JavaScript helper
119
+ returns `clientId` and `clientSecret`. The helper also validates the response,
120
+ so Node applications should reuse it. Other frameworks implement this same
121
+ provider protocol using their own HTTP and secret-storage tools.
122
+
123
+ ## Portable configuration and runtime
124
+
125
+ ```json
126
+ {
127
+ "schemaVersion": 1,
128
+ "registrations": {
129
+ "amplitude": {
130
+ "source": "own",
131
+ "clientId": "assigned-client-id",
132
+ "clientSecretRef": "env:AMPLITUDE_CLIENT_SECRET",
133
+ "callbackUrlRef": "env:AMPLITUDE_CALLBACK_URL"
134
+ }
135
+ },
136
+ "integrations": {
137
+ "analytics": {
138
+ "provider": "amplitude",
139
+ "accountMode": "assistant",
140
+ "scopes": ["mcp:read", "offline_access"],
141
+ "authentication": { "method": "oauth2", "registrationRef": "amplitude" },
142
+ "settings": { "region": "us" }
143
+ }
144
+ }
145
+ }
146
+ ```
147
+
148
+ The UI and CLI use the same parser and JSON. Region defaults to US. Read access
149
+ and refresh access default on; content writes default off. `tools.list` and
150
+ `tools.call` require a granted read permission. Amplitude additionally enforces
151
+ write/project permissions at call time. The host's authorization callback must
152
+ validate each requested tool name and its argument ownership before execution.
153
+
154
+ Use the ordinary [OAuth file pattern](../patterns/oauth-connection/PATTERN.md)
155
+ with `providers: [amplitudeProvider]`, and the
156
+ [assistant OAuth pattern](../patterns/assistant-mcp-oauth/PATTERN.md) for tool policy.
157
+ `beginAuthorization` creates a state/PKCE attempt. `completeAuthorization`
158
+ exchanges the code, initializes MCP and lists tools before persisting the grant.
159
+ Consent, code exchange and refresh all target the selected regional origin;
160
+ authorization and both token grants include its OAuth resource identifier.
161
+ Changing region invalidates pending/connected grants. Runtime state remains
162
+ encrypted text files using the existing file-store owner.
163
+
164
+ `tools.list` takes an optional opaque cursor. `tools.call` takes a tool `name`
165
+ and `arguments` object. The provider uses the standard `/mcp` endpoint and the
166
+ existing MCP transport; it does not automatically execute tools, attach them
167
+ to an assistant, follow returned URLs or grant sampling/elicitation capabilities.
168
+ Tool-level `isError` results remain data for the host to handle. Cancellation
169
+ stops local work and attempts session cleanup; it cannot undo accepted writes.
170
+ Disconnect removes local state without revoking all provider access.
171
+
172
+ ## Connection ownership and callbacks
173
+
174
+ This fragment is for an explicitly configured assistant host. That host owns its
175
+ client registration, callback, private credentials and grants; it may be an
176
+ application-owned assistant or an opt-in editor tool. Merely adding the provider
177
+ to a project does not authorize the editor's coding assistant. It does not supply
178
+ published app-user login. The host's callback may differ from the published app's
179
+ domain, but it must match that host's real route and registered redirect URI.
180
+
181
+ AI can automate client registration and prepare configuration after authorized
182
+ setup inputs are supplied. Register the host's actual callback with the selected
183
+ US or EU endpoint, then retain the returned credentials in that host's private
184
+ Env. User sign-in/consent and organization permission changes remain owner/admin
185
+ actions. Separate client IDs do not prove independent Amplitude quotas for users
186
+ of the same organization. If the callback changes, update the client registration
187
+ and callback Env; a new hostname does not change the connection owner.
188
+
189
+ This adapter does not implement native public-client authentication, the
190
+ production event API, progressive-discovery UI, Amplitude service-account setup
191
+ or app-user OAuth.
192
+
193
+ ## Focused proof
194
+
195
+ Eight tests cover US/EU registration metadata and code/refresh resource binding,
196
+ PKCE, file restart, credential encryption, region changes, owner isolation,
197
+ exact tool policy, declined/insufficient consent, malformed discovery, provider
198
+ failures, cancellation and no automatic registration replay. Editor proof
199
+ covers region, permission choices, secret references and persistence. Provider
200
+ signup, live registration/consent, live tool calls and generated apps are excluded.
201
+
202
+
203
+ ## LIMITATIONS
204
+
205
+ Editor coding-assistant tool attachment is deferred. For example, this runtime
206
+ can call an authorized Amplitude analytics tool from an explicitly composed
207
+ application-owned assistant, but configuring it in Vibe64 does not let Codex or
208
+ OpenCode answer “where are customers dropping out of my funnel?” from your live
209
+ Amplitude data. Registration and consent do not attach tools to editor chat.
210
+ No live Amplitude registration, consent or generated application was exercised.