@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.
- package/README.md +192 -0
- package/docs/ai-upstream-notices.md +51 -0
- package/docs/ai.md +191 -0
- package/docs/airtable.md +130 -0
- package/docs/algolia.md +190 -0
- package/docs/amazon-redshift.md +229 -0
- package/docs/amplitude.md +210 -0
- package/docs/apify.md +162 -0
- package/docs/apollo-io.md +200 -0
- package/docs/asana.md +126 -0
- package/docs/ashby.md +188 -0
- package/docs/atlassian.md +224 -0
- package/docs/attention.md +162 -0
- package/docs/aws-athena.md +150 -0
- package/docs/aws-credentials.md +75 -0
- package/docs/aws-s3.md +193 -0
- package/docs/bigquery.md +146 -0
- package/docs/brevo.md +122 -0
- package/docs/calendly.md +158 -0
- package/docs/canva.md +191 -0
- package/docs/chargebee.md +192 -0
- package/docs/clay.md +194 -0
- package/docs/clickhouse.md +242 -0
- package/docs/confidence-exp.md +74 -0
- package/docs/confidence-flags.md +75 -0
- package/docs/confidence-oauth.md +137 -0
- package/docs/contentful.md +123 -0
- package/docs/databricks.md +180 -0
- package/docs/dbt-semantic-layer.md +175 -0
- package/docs/elevenlabs.md +102 -0
- package/docs/figma.md +132 -0
- package/docs/firebase-cloud-messaging.md +262 -0
- package/docs/firecrawl.md +137 -0
- package/docs/fireflies.md +95 -0
- package/docs/fireworks-ai.md +53 -0
- package/docs/gatewayapi.md +113 -0
- package/docs/gemini-enterprise.md +224 -0
- package/docs/github-api.md +133 -0
- package/docs/gitlab-api.md +138 -0
- package/docs/gmail.md +133 -0
- package/docs/gong.md +205 -0
- package/docs/google-ads.md +156 -0
- package/docs/google-analytics.md +202 -0
- package/docs/google-docs.md +105 -0
- package/docs/google-drive.md +108 -0
- package/docs/google-maps-platform.md +208 -0
- package/docs/google-oauth.md +123 -0
- package/docs/google-search-console.md +124 -0
- package/docs/google-sheets.md +94 -0
- package/docs/google-slides.md +95 -0
- package/docs/granola.md +178 -0
- package/docs/hex.md +161 -0
- package/docs/heygen.md +124 -0
- package/docs/hubspot.md +142 -0
- package/docs/incident-io.md +118 -0
- package/docs/inngest.md +178 -0
- package/docs/klipy.md +149 -0
- package/docs/lexware.md +144 -0
- package/docs/lightspeed.md +193 -0
- package/docs/linear.md +137 -0
- package/docs/linkedin.md +196 -0
- package/docs/logo-dev.md +152 -0
- package/docs/mailgun.md +153 -0
- package/docs/mapbox.md +174 -0
- package/docs/microsoft-excel.md +97 -0
- package/docs/microsoft-fabric.md +249 -0
- package/docs/microsoft-oauth.md +143 -0
- package/docs/microsoft-onedrive.md +76 -0
- package/docs/microsoft-onenote.md +75 -0
- package/docs/microsoft-outlook.md +90 -0
- package/docs/microsoft-powerpoint.md +119 -0
- package/docs/microsoft-sharepoint.md +75 -0
- package/docs/microsoft-teams.md +72 -0
- package/docs/microsoft-word.md +119 -0
- package/docs/miro.md +117 -0
- package/docs/n8n.md +169 -0
- package/docs/notion.md +137 -0
- package/docs/oura.md +161 -0
- package/docs/paddle.md +168 -0
- package/docs/perplexity.md +85 -0
- package/docs/pipedrive.md +120 -0
- package/docs/polar.md +63 -0
- package/docs/posthog.md +227 -0
- package/docs/prestashop.md +151 -0
- package/docs/replicate.md +60 -0
- package/docs/resend.md +153 -0
- package/docs/salesforce.md +234 -0
- package/docs/sanity.md +122 -0
- package/docs/semrush.md +276 -0
- package/docs/sentry.md +112 -0
- package/docs/sevdesk.md +107 -0
- package/docs/shopify.md +206 -0
- package/docs/slack.md +257 -0
- package/docs/snowflake.md +271 -0
- package/docs/storyblok.md +130 -0
- package/docs/stripe.md +77 -0
- package/docs/supabase.md +51 -0
- package/docs/tally.md +105 -0
- package/docs/telegram.md +165 -0
- package/docs/tiktok.md +201 -0
- package/docs/twilio.md +284 -0
- package/docs/twitch.md +428 -0
- package/docs/wave.md +440 -0
- package/docs/wix.md +1249 -0
- package/docs/wiz.md +177 -0
- package/docs/woocommerce.md +400 -0
- package/docs/wordpress-com.md +358 -0
- package/docs/wordpress-self-hosted.md +252 -0
- package/docs/workday.md +292 -0
- package/docs/x-twitter.md +188 -0
- package/docs/xero.md +429 -0
- package/docs/zoho-books.md +214 -0
- package/docs/zoho-crm.md +192 -0
- package/package.json +153 -0
- package/patterns/ai-connections/PATTERN.md +84 -0
- package/patterns/ai-connections/example/ai-model.js +11 -0
- package/patterns/ai-connections/example/perplexity-answer.js +29 -0
- package/patterns/api-key-connection/PATTERN.md +368 -0
- package/patterns/api-key-connection/example/connections.js +18 -0
- package/patterns/api-key-connection/example/integrations.json +19 -0
- package/patterns/assistant-mcp/PATTERN.md +110 -0
- package/patterns/assistant-mcp/example/integrations.json +13 -0
- package/patterns/assistant-mcp-oauth/PATTERN.md +235 -0
- package/patterns/assistant-mcp-oauth/example/integrations.json +102 -0
- package/patterns/aws-storage-queries/PATTERN.md +169 -0
- package/patterns/aws-storage-queries/example/formats/data-formats.js +35 -0
- package/patterns/aws-storage-queries/example/formats/package-lock.json +49 -0
- package/patterns/aws-storage-queries/example/formats/package.json +12 -0
- package/patterns/aws-storage-queries/example/formats/verify-formats.mjs +37 -0
- package/patterns/aws-storage-queries/example/integrations.json +38 -0
- package/patterns/aws-storage-queries/example/s3-transfer.js +34 -0
- package/patterns/event-delivery/PATTERN.md +151 -0
- package/patterns/event-delivery/example/integrations.json +17 -0
- package/patterns/firebase-messaging/PATTERN.md +156 -0
- package/patterns/firebase-messaging/example/server/notifications.js +23 -0
- package/patterns/google-ads-search/PATTERN.md +92 -0
- package/patterns/google-ads-search/example/ads-setup.js +25 -0
- package/patterns/oauth-connection/PATTERN.md +724 -0
- package/patterns/oauth-connection/example/integrations.json +20 -0
- package/patterns/paddle-catalogue/PATTERN.md +78 -0
- package/patterns/paddle-catalogue/example/create-products.js +38 -0
- package/patterns/public-image/PATTERN.md +84 -0
- package/patterns/public-image/example/integrations.json +13 -0
- package/patterns/public-image/example/logo-url.js +16 -0
- package/patterns/redshift-queries/PATTERN.md +150 -0
- package/patterns/redshift-queries/example/integrations.json +33 -0
- package/patterns/source-scanning/PATTERN.md +83 -0
- package/patterns/source-scanning/example/source-scanner.js +13 -0
- package/src/client/firebase-cloud-messaging.js +10 -0
- package/src/client/google-analytics.js +72 -0
- package/src/client/google-maps-platform.js +39 -0
- package/src/client/logo-dev.js +36 -0
- package/src/server/ai.js +46 -0
- package/src/server/airtable.js +67 -0
- package/src/server/algolia.js +63 -0
- package/src/server/amazon-redshift.js +96 -0
- package/src/server/amplitude.js +31 -0
- package/src/server/apify.js +68 -0
- package/src/server/apollo-io.js +85 -0
- package/src/server/asana.js +64 -0
- package/src/server/ashby.js +61 -0
- package/src/server/atlassian.js +32 -0
- package/src/server/attention.js +93 -0
- package/src/server/aws-athena.js +82 -0
- package/src/server/aws-s3.js +49 -0
- package/src/server/awsTransport.js +75 -0
- package/src/server/bigquery.js +97 -0
- package/src/server/brevo.js +97 -0
- package/src/server/calendly.js +77 -0
- package/src/server/canva.js +13 -0
- package/src/server/chargebee.js +88 -0
- package/src/server/clay.js +78 -0
- package/src/server/clickhouse.js +66 -0
- package/src/server/confidence.js +29 -0
- package/src/server/contentful.js +40 -0
- package/src/server/databricks.js +55 -0
- package/src/server/dbt-semantic-layer.js +95 -0
- package/src/server/elevenlabs.js +81 -0
- package/src/server/figma.js +24 -0
- package/src/server/firebase-cloud-messaging.js +111 -0
- package/src/server/firecrawl.js +70 -0
- package/src/server/fireflies.js +31 -0
- package/src/server/fireworks-ai.js +16 -0
- package/src/server/gatewayapi.js +48 -0
- package/src/server/gemini-enterprise.js +47 -0
- package/src/server/github-api.js +90 -0
- package/src/server/gitlab-api.js +67 -0
- package/src/server/gmail.js +60 -0
- package/src/server/gong.js +52 -0
- package/src/server/google-ads-search.js +134 -0
- package/src/server/google-ads.js +80 -0
- package/src/server/google-docs.js +36 -0
- package/src/server/google-drive.js +71 -0
- package/src/server/google-maps-platform.js +90 -0
- package/src/server/google-search-console.js +31 -0
- package/src/server/google-sheets.js +60 -0
- package/src/server/google-slides.js +36 -0
- package/src/server/google.js +61 -0
- package/src/server/granola.js +115 -0
- package/src/server/graphqlOperation.js +15 -0
- package/src/server/hex.js +29 -0
- package/src/server/heygen.js +54 -0
- package/src/server/hubspot.js +85 -0
- package/src/server/incident-io.js +68 -0
- package/src/server/inngest.js +86 -0
- package/src/server/jsonOperation.js +34 -0
- package/src/server/klipy.js +34 -0
- package/src/server/lexware.js +59 -0
- package/src/server/lightspeed.js +82 -0
- package/src/server/linear.js +52 -0
- package/src/server/linkedin.js +74 -0
- package/src/server/mailgun.js +76 -0
- package/src/server/mapbox.js +46 -0
- package/src/server/mcpRegistration.js +41 -0
- package/src/server/mcpTransport.js +60 -0
- package/src/server/microsoft-excel.js +67 -0
- package/src/server/microsoft-fabric.js +81 -0
- package/src/server/microsoft-onedrive.js +58 -0
- package/src/server/microsoft-onenote.js +52 -0
- package/src/server/microsoft-outlook.js +58 -0
- package/src/server/microsoft-powerpoint.js +5 -0
- package/src/server/microsoft-sharepoint.js +46 -0
- package/src/server/microsoft-teams.js +29 -0
- package/src/server/microsoft-word.js +5 -0
- package/src/server/microsoft.js +88 -0
- package/src/server/miro.js +29 -0
- package/src/server/n8n.js +78 -0
- package/src/server/notion.js +76 -0
- package/src/server/oura.js +48 -0
- package/src/server/paddle.js +83 -0
- package/src/server/perplexity.js +15 -0
- package/src/server/pipedrive.js +95 -0
- package/src/server/polar.js +20 -0
- package/src/server/posthog.js +44 -0
- package/src/server/prestashop.js +42 -0
- package/src/server/replicate.js +42 -0
- package/src/server/resend.js +93 -0
- package/src/server/salesforce.js +84 -0
- package/src/server/sanity.js +31 -0
- package/src/server/semrush.js +359 -0
- package/src/server/sentry.js +30 -0
- package/src/server/sevdesk.js +20 -0
- package/src/server/shopify.js +99 -0
- package/src/server/slack.js +143 -0
- package/src/server/snowflake.js +139 -0
- package/src/server/storyblok.js +49 -0
- package/src/server/stripe.js +13 -0
- package/src/server/supabase.js +13 -0
- package/src/server/tally.js +78 -0
- package/src/server/telegram.js +55 -0
- package/src/server/tiktok.js +86 -0
- package/src/server/twilio.js +90 -0
- package/src/server/twitch.js +409 -0
- package/src/server/wave.js +520 -0
- package/src/server/wix.js +1048 -0
- package/src/server/wiz.js +117 -0
- package/src/server/woocommerce.js +412 -0
- package/src/server/wordpress-com.js +236 -0
- package/src/server/wordpress-self-hosted.js +134 -0
- package/src/server/workday.js +136 -0
- package/src/server/x-twitter.js +110 -0
- package/src/server/xero.js +397 -0
- package/src/server/zoho-books.js +90 -0
- package/src/server/zoho-crm.js +89 -0
- package/src/server/zohoOAuth.js +21 -0
- package/src/shared/ai-models.json +8049 -0
- package/src/shared/ai.js +63 -0
- package/src/shared/algolia.js +29 -0
- package/src/shared/amazon-redshift.js +51 -0
- package/src/shared/amplitude.js +28 -0
- package/src/shared/atlassian.js +43 -0
- package/src/shared/aws.js +72 -0
- package/src/shared/canva.js +66 -0
- package/src/shared/chargebee.js +26 -0
- package/src/shared/clickhouse.js +38 -0
- package/src/shared/confidence.js +28 -0
- package/src/shared/databricks.js +33 -0
- package/src/shared/dbt-semantic-layer.js +32 -0
- package/src/shared/definitions.js +140 -0
- package/src/shared/figma.js +21 -0
- package/src/shared/firebase-cloud-messaging.js +45 -0
- package/src/shared/gemini-enterprise.js +33 -0
- package/src/shared/gong.js +33 -0
- package/src/shared/google-ads-search.js +31 -0
- package/src/shared/google-ads.js +28 -0
- package/src/shared/google-maps-platform.js +28 -0
- package/src/shared/google.js +133 -0
- package/src/shared/granola.js +25 -0
- package/src/shared/hex.js +28 -0
- package/src/shared/inngest.js +35 -0
- package/src/shared/lightspeed.js +75 -0
- package/src/shared/linkedin.js +27 -0
- package/src/shared/logo-dev.js +21 -0
- package/src/shared/mapbox.js +38 -0
- package/src/shared/mcp.js +92 -0
- package/src/shared/microsoft-fabric.js +47 -0
- package/src/shared/microsoft.js +231 -0
- package/src/shared/miro.js +27 -0
- package/src/shared/oura.js +23 -0
- package/src/shared/posthog.js +33 -0
- package/src/shared/prestashop.js +23 -0
- package/src/shared/salesforce.js +36 -0
- package/src/shared/semrush.js +24 -0
- package/src/shared/shopify.js +51 -0
- package/src/shared/siteUrl.js +12 -0
- package/src/shared/slack.js +88 -0
- package/src/shared/snowflake.js +55 -0
- package/src/shared/tiktok.js +22 -0
- package/src/shared/tokens.js +747 -0
- package/src/shared/twilio.js +41 -0
- package/src/shared/twitch.js +49 -0
- package/src/shared/wave.js +52 -0
- package/src/shared/wix.js +40 -0
- package/src/shared/wiz.js +41 -0
- package/src/shared/wordpress-com.js +30 -0
- package/src/shared/wordpress.js +69 -0
- package/src/shared/workday.js +50 -0
- package/src/shared/x-twitter.js +19 -0
- package/src/shared/xero.js +46 -0
- package/src/shared/zoho-books.js +39 -0
- package/src/shared/zoho-crm.js +43 -0
- package/src/shared/zoho-regions.js +12 -0
- package/test/ai.test.js +136 -0
- package/test/airtable.test.js +125 -0
- package/test/algolia.test.js +207 -0
- package/test/amazon-redshift.test.js +272 -0
- package/test/amplitude.test.js +239 -0
- package/test/apify.test.js +93 -0
- package/test/apollo-io.test.js +125 -0
- package/test/asana.test.js +99 -0
- package/test/ashby.test.js +97 -0
- package/test/atlassian.test.js +249 -0
- package/test/attention.test.js +79 -0
- package/test/aws.test.js +405 -0
- package/test/brevo.test.js +71 -0
- package/test/calendly.test.js +136 -0
- package/test/canva.test.js +258 -0
- package/test/chargebee.test.js +195 -0
- package/test/clickhouse.test.js +278 -0
- package/test/confidence.test.js +205 -0
- package/test/databricks.test.js +253 -0
- package/test/dbt-semantic-layer.test.js +221 -0
- package/test/designMcp.test.js +336 -0
- package/test/elevenlabs.test.js +52 -0
- package/test/firebase-cloud-messaging.test.js +242 -0
- package/test/firecrawl.test.js +66 -0
- package/test/gemini-enterprise.test.js +218 -0
- package/test/github-api.test.js +167 -0
- package/test/gitlab-api.test.js +160 -0
- package/test/gong.test.js +192 -0
- package/test/google-ads.test.js +350 -0
- package/test/google-maps-platform.test.js +191 -0
- package/test/google.test.js +710 -0
- package/test/granola.test.js +240 -0
- package/test/hex.test.js +253 -0
- package/test/heygen.test.js +121 -0
- package/test/hubspot.test.js +103 -0
- package/test/inngest.test.js +219 -0
- package/test/lightspeed.test.js +250 -0
- package/test/linear.test.js +146 -0
- package/test/linkedin.test.js +243 -0
- package/test/logo-dev.test.js +79 -0
- package/test/mailgun.test.js +107 -0
- package/test/mapbox.test.js +181 -0
- package/test/mcp.test.js +227 -0
- package/test/microsoft-fabric.test.js +258 -0
- package/test/microsoft.test.js +554 -0
- package/test/n8nOAuth.test.js +188 -0
- package/test/notionOAuth.test.js +183 -0
- package/test/oura.test.js +211 -0
- package/test/paddleCatalogue.test.js +51 -0
- package/test/paddlePermissions.test.js +101 -0
- package/test/perplexityComposition.test.js +39 -0
- package/test/pipedriveOAuth.test.js +140 -0
- package/test/posthog.test.js +200 -0
- package/test/prestashop.test.js +207 -0
- package/test/resend.test.js +163 -0
- package/test/salesforce.test.js +276 -0
- package/test/semrush.test.js +479 -0
- package/test/sentry.test.js +35 -0
- package/test/shopify.test.js +247 -0
- package/test/slack.test.js +320 -0
- package/test/snowflake.test.js +391 -0
- package/test/tally.test.js +75 -0
- package/test/telegram.test.js +58 -0
- package/test/tiktok.test.js +243 -0
- package/test/tokens.test.js +1079 -0
- package/test/twilio.test.js +221 -0
- package/test/twitch.test.js +573 -0
- package/test/wave.test.js +678 -0
- package/test/wix.test.js +1099 -0
- package/test/wiz.test.js +185 -0
- package/test/wordpress-com.test.js +469 -0
- package/test/wordpress.test.js +660 -0
- package/test/workday.test.js +314 -0
- package/test/x-twitter.test.js +256 -0
- package/test/xero.test.js +700 -0
- package/test/zoho-books.test.js +253 -0
- package/test/zoho-crm.test.js +223 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Confidence Exp
|
|
2
|
+
|
|
3
|
+
Use `confidenceExpProvider` and `registerConfidenceClient` from
|
|
4
|
+
`@jskit-ai/connectors-catalog/server/confidence-exp`.
|
|
5
|
+
Read the [shared setup guide](confidence-oauth.md) for exact setup steps,
|
|
6
|
+
registration automation, ownership, quotas, callbacks and verification limits.
|
|
7
|
+
|
|
8
|
+
```json
|
|
9
|
+
{
|
|
10
|
+
"schemaVersion": 1,
|
|
11
|
+
"registrations": {
|
|
12
|
+
"confidence-exp": {
|
|
13
|
+
"source": "own",
|
|
14
|
+
"clientId": "assigned-client-id",
|
|
15
|
+
"clientSecretRef": "env:CONFIDENCE_EXP_CLIENT_SECRET",
|
|
16
|
+
"callbackUrlRef": "env:CONFIDENCE_EXP_CALLBACK_URL"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"integrations": {
|
|
20
|
+
"experiments": {
|
|
21
|
+
"provider": "confidence-exp",
|
|
22
|
+
"accountMode": "assistant",
|
|
23
|
+
"scopes": ["openid", "profile", "email", "offline_access"],
|
|
24
|
+
"authentication": { "method": "oauth2", "registrationRef": "confidence-exp" }
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The MCP destination is `https://mcp.confidence.dev/mcp/experiments`. Verification
|
|
31
|
+
uses `tools.list`. The provider describes `list_experiments`, `get_experiment`,
|
|
32
|
+
`get_results` and `get_resource`. Discover current schemas before invoking
|
|
33
|
+
`tools.call`; resource names must belong to the authorized request. Search and
|
|
34
|
+
list filters are different modes, and summary versus full detail changes the
|
|
35
|
+
returned information. See the
|
|
36
|
+
[MCP guide](https://confidence.spotify.com/docs/sdks/mcp-servers).
|
|
37
|
+
|
|
38
|
+
This initial adapter does not launch experiments, implement a statistics engine,
|
|
39
|
+
configure a warehouse or ingest events. Tool results are retained with their
|
|
40
|
+
error status; the application owns presentation and interpretation.
|
|
41
|
+
The application owns and registers its callback route, using its assigned public
|
|
42
|
+
URL as the initial origin. Keep that exact callback in application Env and update
|
|
43
|
+
the provider registration when it changes. Its grant stays separate from a
|
|
44
|
+
Confidence Flags integration.
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
## Read and interpret results
|
|
48
|
+
|
|
49
|
+
Call `tools.list` first and use each returned tool's current input schema. An
|
|
50
|
+
explicitly wired host can call `get_experiment` for an approved instance name,
|
|
51
|
+
then `get_results` for that same name (or a returned analysis name); Confidence
|
|
52
|
+
resolves the primary analysis when an instance is supplied. Request `summary:
|
|
53
|
+
false` only when full detail is needed. `get_resource` resolves referenced metric,
|
|
54
|
+
entity, surface, segment and fact-table definitions; authorize those IDs too.
|
|
55
|
+
`list_experiments` search mode ignores filter/orderBy, so do not assume it has
|
|
56
|
+
applied an access filter. Apply the host's resource authorization independently.
|
|
57
|
+
|
|
58
|
+
Use `connections.invoke({ context, integrationId: "experiments", operation:
|
|
59
|
+
"tools.call", input: { name: "get_results", arguments: { name:
|
|
60
|
+
approvedInstanceName, summary: false } } })` after connection. Preserve the MCP
|
|
61
|
+
result/error status and the provider's confidence intervals, significance,
|
|
62
|
+
sample sizes and status messages. A positive effect estimate is not automatically
|
|
63
|
+
a winning experiment. Do not fabricate a shipping recommendation or recalculate
|
|
64
|
+
provider statistics from a summary. Other frameworks can connect their native
|
|
65
|
+
MCP clients to the same endpoint with their own OAuth/grant storage.
|
|
66
|
+
|
|
67
|
+
**LIMITATIONS:** Vibe64 coding-assistant attachment is deferred. For example,
|
|
68
|
+
saving this connection does not make Vibe64 chat explain an A/B result; an
|
|
69
|
+
explicitly wired assistant host can retrieve it. Confidence owns statistical
|
|
70
|
+
analysis, metric/event ingestion and experiment execution. This adapter transports
|
|
71
|
+
its tools and results, not a new experimentation engine. Controlled fixtures
|
|
72
|
+
prove analysis content is preserved and other experiment IDs are denied; tool
|
|
73
|
+
schemas and actual statistical outputs remain provider-owned and were not
|
|
74
|
+
validated against a live account.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Confidence Flags
|
|
2
|
+
|
|
3
|
+
Use `confidenceFlagsProvider` and `registerConfidenceClient` from
|
|
4
|
+
`@jskit-ai/connectors-catalog/server/confidence-flags`.
|
|
5
|
+
Read the [shared setup guide](confidence-oauth.md) for exact setup steps,
|
|
6
|
+
registration automation, ownership, quotas, callbacks and verification limits.
|
|
7
|
+
|
|
8
|
+
```json
|
|
9
|
+
{
|
|
10
|
+
"schemaVersion": 1,
|
|
11
|
+
"registrations": {
|
|
12
|
+
"confidence-flags": {
|
|
13
|
+
"source": "own",
|
|
14
|
+
"clientId": "assigned-client-id",
|
|
15
|
+
"clientSecretRef": "env:CONFIDENCE_FLAGS_CLIENT_SECRET",
|
|
16
|
+
"callbackUrlRef": "env:CONFIDENCE_FLAGS_CALLBACK_URL"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"integrations": {
|
|
20
|
+
"flags": {
|
|
21
|
+
"provider": "confidence-flags",
|
|
22
|
+
"accountMode": "assistant",
|
|
23
|
+
"scopes": ["openid", "profile", "email", "offline_access"],
|
|
24
|
+
"authentication": { "method": "oauth2", "registrationRef": "confidence-flags" }
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The MCP destination is `https://mcp.confidence.dev/mcp/flags`. Verification uses
|
|
31
|
+
`tools.list`, without calling a flag tool. Discover schemas before invoking
|
|
32
|
+
`tools.call`; the host can allow listing/reading while separately approving
|
|
33
|
+
creation or targeting changes. Account identity scopes do not enforce that
|
|
34
|
+
distinction. The provider describes tools including `listFlags`, `getFlag`,
|
|
35
|
+
`createFlag` and `testResolveFlag` in its
|
|
36
|
+
[MCP guide](https://confidence.spotify.com/docs/sdks/mcp-servers).
|
|
37
|
+
|
|
38
|
+
This initial adapter does not implement an OpenFeature evaluation provider,
|
|
39
|
+
production resolve/apply calls, event collection or a management API client.
|
|
40
|
+
The application owns and registers its callback route, using its assigned public
|
|
41
|
+
URL as the initial origin. Keep that exact callback in application Env and update
|
|
42
|
+
the provider registration when it changes. The builder's assistant grant must
|
|
43
|
+
not become a shared app-user grant.
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
## Managing flags with deliberate approval
|
|
47
|
+
|
|
48
|
+
Discover current schemas using `tools.list`; do not hardcode argument names from
|
|
49
|
+
examples. The documented tools cover `listClients`, `listFlags`, `getFlag`,
|
|
50
|
+
`createFlag`, `addFlagVariant`, `updateFlagSchema`, `createOverrideRule`,
|
|
51
|
+
`testResolveFlag` and `analyzeFlagUsage`. Use `tools.call` with the discovered
|
|
52
|
+
name/schema and an authenticated host policy that approves the exact operation,
|
|
53
|
+
flag, variant, targeting rule and context. An identity OAuth scope is not write
|
|
54
|
+
approval. Review the proposed change before executing it, then read/test the
|
|
55
|
+
result. A test-user override is not a rollout to all users.
|
|
56
|
+
|
|
57
|
+
For example, an explicitly wired assistant can create a boolean checkout flag,
|
|
58
|
+
add an enabled variant, target only a test account, and call `testResolveFlag` to
|
|
59
|
+
inspect the selected variant and explanation. Preserve tool `isError` even on
|
|
60
|
+
HTTP success. If a write times out, inspect the flag/rules before retrying; neither
|
|
61
|
+
local cancellation nor disconnect undoes a remotely applied change.
|
|
62
|
+
|
|
63
|
+
The host owns its OAuth registration, callback and private Env references. A CLI
|
|
64
|
+
can use the same JSKIT methods without Vibe64, or another framework's native MCP
|
|
65
|
+
client with the same endpoint and its own OAuth storage. Production flag evaluation
|
|
66
|
+
belongs to that framework's Confidence/OpenFeature integration; never place this
|
|
67
|
+
management grant in a browser or treat it as the application's client secret.
|
|
68
|
+
|
|
69
|
+
**LIMITATIONS:** Automatic Vibe64 coding-assistant attachment is deferred. Saving
|
|
70
|
+
this connection does not let Vibe64 chat switch a feature on; an explicitly wired
|
|
71
|
+
host can approve and call these management tools. This is not a feature-flag
|
|
72
|
+
execution engine, event pipeline or visual rollout dashboard. The generated app
|
|
73
|
+
must separately implement runtime evaluation if it wants to hide/show features.
|
|
74
|
+
Controlled fixtures prove transport, exact write approval, tool-error retention
|
|
75
|
+
and no replay; their example argument shapes are not live schema verification.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Confidence MCP setup and ownership
|
|
2
|
+
|
|
3
|
+
The Flags and Experiments adapters use separate integration IDs and MCP paths.
|
|
4
|
+
They share an OAuth issuer and `registerConfidenceClient`, exported through
|
|
5
|
+
either provider entry point. Both support assistant ownership only.
|
|
6
|
+
|
|
7
|
+
## Account and manual setup
|
|
8
|
+
|
|
9
|
+
1. Sign into the intended Confidence account and confirm access to the target
|
|
10
|
+
organisation. The provider's account policy remains authoritative.
|
|
11
|
+
2. Add **Confidence Flags** or **Confidence Exp** in Vibe64. These configure an explicitly wired assistant host; automatic Vibe64 chat
|
|
12
|
+
attachment is deferred. They do not configure production flag evaluation.
|
|
13
|
+
3. Confirm the suggested callback is the exact route served by that host and
|
|
14
|
+
choose identity/profile/email/refresh permissions. In development, the owner
|
|
15
|
+
can choose **Register client and connect**: the existing project registration action
|
|
16
|
+
saves the client ID to configuration and secret/callback/recovery ID to Env.
|
|
17
|
+
Existing Env values are preserved. Investigate any uncertain failure before
|
|
18
|
+
repeating it. The application must still implement its callback/setup command.
|
|
19
|
+
4. For manual or standalone CLI setup, send the displayed registration JSON to
|
|
20
|
+
the fixed endpoint using POST and Content-Type application/json, or call
|
|
21
|
+
`registerConfidenceClient` below. Copy `client_id` to configuration and store
|
|
22
|
+
`client_secret` and the exact callback in private Env. No manual OAuth
|
|
23
|
+
client-creation console is established by the reviewed docs. Changing scopes
|
|
24
|
+
in a saved file does not update a previously registered client.
|
|
25
|
+
5. The host calls `beginAuthorization` and opens its URL. Sign in at the
|
|
26
|
+
provider prompt and allow the connection. Complete the callback under the
|
|
27
|
+
same authenticated assistant owner. Verification lists tools only.
|
|
28
|
+
6. Discover tool schemas and configure host policy for their names, arguments,
|
|
29
|
+
target resources and effects. Do this before exposing calls to an AI.
|
|
30
|
+
|
|
31
|
+
The provider documents Streamable HTTP MCP at `/mcp/flags` and
|
|
32
|
+
`/mcp/experiments`, with browser authentication. Flags include management tools;
|
|
33
|
+
experiments include analysis and result retrieval. Its separate documentation
|
|
34
|
+
MCP is unauthenticated and not part of either adapter.
|
|
35
|
+
[Confidence MCP guide](https://confidence.spotify.com/docs/sdks/mcp-servers).
|
|
36
|
+
|
|
37
|
+
## Automation and provider registration
|
|
38
|
+
|
|
39
|
+
On 9 September 2026, public
|
|
40
|
+
[OAuth metadata](https://mcp.confidence.dev/.well-known/oauth-authorization-server)
|
|
41
|
+
advertised issuer `https://mcp.confidence.dev`, `/authorize`, `/token`, `/register`,
|
|
42
|
+
S256, code/refresh grants and `none`/`client_secret_post`. The
|
|
43
|
+
[resource metadata](https://mcp.confidence.dev/.well-known/oauth-protected-resource/mcp)
|
|
44
|
+
declared resource `https://mcp.confidence.dev/mcp` for both paths.
|
|
45
|
+
|
|
46
|
+
The documents differ on permissions: authorization metadata lists `openid`,
|
|
47
|
+
`profile`, `email`, `offline_access`; resource metadata instead lists `flags:read`
|
|
48
|
+
alongside the three identity scopes. This fragment exposes the authorization
|
|
49
|
+
server's four scopes. It does not claim a verified `flags:read` grant or infer
|
|
50
|
+
that any identity scope restricts tool calls to reads. Live consent acceptance
|
|
51
|
+
remains untested.
|
|
52
|
+
|
|
53
|
+
Unauthenticated MCP challenges advertised HTTP discovery addresses. This
|
|
54
|
+
implementation pins the independently verified HTTPS issuer/resource and never
|
|
55
|
+
follows those HTTP addresses or a replacement authentication URL from an error.
|
|
56
|
+
|
|
57
|
+
An authorized operator or AI setup process can call:
|
|
58
|
+
|
|
59
|
+
```js
|
|
60
|
+
const client = await registerConfidenceClient({
|
|
61
|
+
clientName: "My assistant",
|
|
62
|
+
callbackUrl: "https://assistant.example/connections/confidence/callback",
|
|
63
|
+
scopes: ["openid", "profile", "email", "offline_access"]
|
|
64
|
+
});
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
The helper uses the MCP SDK to POST one exact callback, code/refresh grants,
|
|
68
|
+
`client_secret_post` and the chosen scopes to `/register`. It validates returned
|
|
69
|
+
client/redirect metadata and returns `clientId`, `clientSecret` and any
|
|
70
|
+
`clientSecretExpiresAt`. Store that result through existing privileged owners;
|
|
71
|
+
never log or return the secret through ordinary UI status.
|
|
72
|
+
|
|
73
|
+
For manual HTTP setup, send JSON to `https://mcp.confidence.dev/register` with
|
|
74
|
+
`client_name`, `redirect_uris: [callback]`,
|
|
75
|
+
`token_endpoint_auth_method: "client_secret_post"`,
|
|
76
|
+
`grant_types: ["authorization_code", "refresh_token"]`,
|
|
77
|
+
`response_types: ["code"]` and space-delimited `scope`. HTTPS and HTTP loopback
|
|
78
|
+
callbacks are accepted by the helper; credentials, query and fragments are
|
|
79
|
+
rejected. It neither follows redirects nor retries registration. An interrupted
|
|
80
|
+
request may already have created a client; inspect before retrying.
|
|
81
|
+
|
|
82
|
+
This is different from **Admin → API Clients**, which creates management API
|
|
83
|
+
credentials, and from flag client secrets used by evaluation SDKs. Those are not
|
|
84
|
+
MCP browser consent credentials.
|
|
85
|
+
[Management API quickstart](https://confidence.spotify.com/docs/api/quickstart),
|
|
86
|
+
[flag client credentials](https://confidence.spotify.com/docs/api/how-to-guides/flags/setup-flag-clients).
|
|
87
|
+
An AI can prepare this setup and perform explicitly authorized API requests.
|
|
88
|
+
It cannot complete human consent or remove provider account requirements.
|
|
89
|
+
|
|
90
|
+
## Runtime and CLI contract
|
|
91
|
+
|
|
92
|
+
Compose the existing `oauth-connection` and `assistant-mcp-oauth` patterns with
|
|
93
|
+
the selected provider and the provider guide's `integrations.json`. CLI and UI
|
|
94
|
+
use the same parser. All four scopes are initially selected; `openid` is needed
|
|
95
|
+
by both initial operations. The host resolves secret references and chooses
|
|
96
|
+
encrypted file storage. No database is required.
|
|
97
|
+
|
|
98
|
+
`tools.list` accepts a cursor and returns one page. `tools.call` accepts `name`
|
|
99
|
+
and `arguments`; discover their current schema rather than inventing fields.
|
|
100
|
+
The host's `authorize` callback must validate resource ownership and approve
|
|
101
|
+
each operation. Handle `isError` as a tool failure. Tool output, descriptions and
|
|
102
|
+
linked documents do not grant further authority. No automatic paging, retries,
|
|
103
|
+
polling, tool attachment or flag changes occur.
|
|
104
|
+
|
|
105
|
+
Each configured integration keeps a distinct grant even when both use one
|
|
106
|
+
registration. Changing a provider ID cannot reuse another integration's grant.
|
|
107
|
+
The provider's common OAuth resource is not an application-side permission
|
|
108
|
+
boundary. Disconnect removes the local grant and does not undo completed work.
|
|
109
|
+
This library does not use these identity scopes to implement application login.
|
|
110
|
+
|
|
111
|
+
## Connection ownership and callbacks
|
|
112
|
+
|
|
113
|
+
This fragment is for an explicitly configured assistant host. That host owns its
|
|
114
|
+
client registration, callback, private credentials and grants; it may be an
|
|
115
|
+
application-owned assistant or an opt-in editor tool. Merely adding the provider
|
|
116
|
+
to a project does not authorize the editor's coding assistant. It does not supply
|
|
117
|
+
published app-user login. The host's callback may differ from the published app's
|
|
118
|
+
domain, but it must match that host's real route and registered redirect URI.
|
|
119
|
+
|
|
120
|
+
Flags and Experiments each register the host's real callback with the appropriate
|
|
121
|
+
provider endpoint. Keep their registrations, Env references and grants distinct.
|
|
122
|
+
On a host/domain change, update registration and callback Env when the callback
|
|
123
|
+
changes, while retaining the owning runtime identity and persistent grants.
|
|
124
|
+
Separate client IDs do not establish separate provider quotas or organisation
|
|
125
|
+
entitlements. Registration acceptance and commercial use need provider proof.
|
|
126
|
+
The editor exposes explicit automatic or manual client registration and the
|
|
127
|
+
application-owned connection lifecycle. Live provider registration and consent remain unverified.
|
|
128
|
+
|
|
129
|
+
## Evidence
|
|
130
|
+
|
|
131
|
+
Controlled tests exercise both MCP paths, common resource binding, confidential
|
|
132
|
+
registration, file ownership and restart, refresh, exact tool policy, malformed
|
|
133
|
+
responses, permission errors, cancellation and no request replay. Provider guide
|
|
134
|
+
JSON and responsive editor persistence are checked separately. No live provider
|
|
135
|
+
account, registration, consent, flag mutation, experiment run, database or
|
|
136
|
+
generated application is used. Metadata discovery alone does not prove live
|
|
137
|
+
registration or token acceptance.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Contentful
|
|
2
|
+
|
|
3
|
+
Import `contentfulProvider` from `@jskit-ai/connectors-catalog/server/contentful`.
|
|
4
|
+
This connector reads published entries using a Content Delivery API key.
|
|
5
|
+
|
|
6
|
+
## Configure access
|
|
7
|
+
|
|
8
|
+
1. Sign into Contentful and select the space for this application.
|
|
9
|
+
2. Open **Settings → API keys**. Add or select a Content delivery / preview key.
|
|
10
|
+
3. Copy **Space ID** into the integration form. Copy **Content Delivery API
|
|
11
|
+
access token** into private Env as `CONTENTFUL_ACCESS_TOKEN`.
|
|
12
|
+
4. Select an environment authorized for the key (`master` by default) and the
|
|
13
|
+
space's region. Enter `env:CONTENTFUL_ACCESS_TOKEN` as the token reference.
|
|
14
|
+
5. Save, then explicitly connect. Verification reads one published entry at
|
|
15
|
+
most. An empty published space is a valid successful result.
|
|
16
|
+
6. Rotate by updating the Env binding and verifying the replacement before
|
|
17
|
+
retiring the old key in Contentful. Disconnect deletes local state only.
|
|
18
|
+
|
|
19
|
+
Content Management personal tokens and Preview tokens are different credentials.
|
|
20
|
+
See [Contentful authentication](https://www.contentful.com/developers/docs/references/authentication/).
|
|
21
|
+
|
|
22
|
+
## Portable configuration and CLI
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"schemaVersion": 1,
|
|
27
|
+
"registrations": {},
|
|
28
|
+
"integrations": {
|
|
29
|
+
"content": {
|
|
30
|
+
"provider": "contentful",
|
|
31
|
+
"accountMode": "shared",
|
|
32
|
+
"scopes": [],
|
|
33
|
+
"settings": { "spaceId": "your-space-id", "environmentId": "master", "region": "us" },
|
|
34
|
+
"authentication": { "method": "api-key", "secretRef": "env:CONTENTFUL_ACCESS_TOKEN" }
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Replace the example Space ID with the actual value. Compose the
|
|
41
|
+
[API-key pattern](../patterns/api-key-connection/PATTERN.md) with this provider,
|
|
42
|
+
application authorization and private file state. CLI and UI use the same file.
|
|
43
|
+
The application owns its connection and controls who may read its content.
|
|
44
|
+
|
|
45
|
+
`entries.list` reads `/spaces/{spaceId}/environments/{environmentId}/entries`
|
|
46
|
+
on `cdn.contentful.com` or `cdn.eu.contentful.com`, using a Bearer header.
|
|
47
|
+
Inputs are `limit` (1–1000, default 1), `skip` (nonnegative, default 0), optional
|
|
48
|
+
`content_type`, `locale`, `include` (0–10), `order`, full-text `query` and `sys.id`.
|
|
49
|
+
The original JSON envelope is preserved, including unresolved-link errors and
|
|
50
|
+
`includes.Entry`/`includes.Asset`. Advance `skip` explicitly using `total`, `skip`
|
|
51
|
+
and `limit`, with an appropriate stable `order`; no automatic paging occurs.
|
|
52
|
+
Concurrent publication can still change offset results. Cursor/Sync APIs remain
|
|
53
|
+
native work. [Delivery API](https://www.contentful.com/developers/docs/references/content-delivery-api/overview/).
|
|
54
|
+
|
|
55
|
+
| Operation | Inputs | Purpose |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| `entries.list` | Pagination and fields above | Published entries, with optional linked content |
|
|
58
|
+
| `entries.get` | `id`, optional `locale` | One published entry |
|
|
59
|
+
| `assets.list` | `limit`, `skip`, optional `locale`, `order`, `query` | Published asset metadata |
|
|
60
|
+
| `assets.get` | `id`, optional `locale` | One asset's fields and file URL |
|
|
61
|
+
| `contentTypes.list` / `contentTypes.get` | Pagination / `id` | Content model fields |
|
|
62
|
+
| `locales.list` | Pagination | Locale codes, default/fallback information |
|
|
63
|
+
|
|
64
|
+
For a single article **with links**, use `entries.list` with `sys.id` and
|
|
65
|
+
`include`; the individual-entry endpoint does not expand links. Contentful's
|
|
66
|
+
include default is 1, maximum 10. Match linked IDs/types against `items` and
|
|
67
|
+
`includes`; unpublished/missing links can remain unresolved. Do not assume a
|
|
68
|
+
missing link means the entire request failed, or that every returned reference
|
|
69
|
+
has a corresponding asset. Preserve provider errors and handle absent content.
|
|
70
|
+
[Link resolution](https://www.contentful.com/developers/docs/references/content-delivery-api/links/).
|
|
71
|
+
|
|
72
|
+
```js
|
|
73
|
+
const page = await connections.invoke({ context, integrationId: "content",
|
|
74
|
+
operation: "entries.list", input: { "sys.id": approvedArticleId, include: 2, locale: "en-US" } });
|
|
75
|
+
const image = await connections.invoke({ context, integrationId: "content",
|
|
76
|
+
operation: "assets.get", input: { id: approvedAssetId, locale: "en-US" } });
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
`locale: "*"` returns locale-keyed field values; do not treat them as the same
|
|
80
|
+
shape as single-locale strings. Locales and fallback rules belong to the content
|
|
81
|
+
model. Asset results are metadata/file URLs, not downloaded bytes. Convert
|
|
82
|
+
protocol-relative file URLs to HTTPS when rendering and validate the destination
|
|
83
|
+
in your application's media policy; the adapter never forwards its token to an
|
|
84
|
+
asset URL. Rich-text rendering/sanitization and caching belong to the framework.
|
|
85
|
+
|
|
86
|
+
All operations are read-only Delivery calls. Preview drafts, publication, edits
|
|
87
|
+
and management credentials are intentionally excluded.
|
|
88
|
+
|
|
89
|
+
## Provisioning and ownership
|
|
90
|
+
|
|
91
|
+
The application owner supplies the space and key. No OAuth callback or Vibe64
|
|
92
|
+
registration is needed; custom application domains do not change this flow.
|
|
93
|
+
An AI can prepare the configuration and framework wiring. Contentful documents
|
|
94
|
+
Delivery key creation through its Content Management API after authorized
|
|
95
|
+
bootstrap access, as well as the console flow above. That management credential
|
|
96
|
+
is separate from the delivery key stored for runtime use. Account signup,
|
|
97
|
+
space access and authorizing bootstrap management access remain owner tasks.
|
|
98
|
+
Different key names do not establish independent quota allocations.
|
|
99
|
+
|
|
100
|
+
For Laravel, use native HTTP/configuration tools and the public application
|
|
101
|
+
setup command contract; this package provides JavaScript code only.
|
|
102
|
+
|
|
103
|
+
## Version-zero change and evidence
|
|
104
|
+
|
|
105
|
+
The initial unpublished CMA `spaces.list` fragment has been replaced. Existing
|
|
106
|
+
experimental configurations must supply `settings.spaceId`, a Delivery token,
|
|
107
|
+
and use `entries.list`. There is no compatibility alias or automatic token
|
|
108
|
+
conversion. Environment and region default to `master` and `us` respectively.
|
|
109
|
+
|
|
110
|
+
Focused controlled tests cover delivery headers and paths, EU/environment
|
|
111
|
+
selection, invalid settings before transport, published-entry validation,
|
|
112
|
+
page limits, private file-store restart, token rotation, isolation, disconnect
|
|
113
|
+
and provider failures. No live Contentful account or generated app was used.
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
**LIMITATIONS:** Vibe64 chat attachment is deferred: the app can display published
|
|
117
|
+
articles and images, but saving this connection does not let the coding assistant
|
|
118
|
+
browse the space. This connector does not author/publish content or render a CMS
|
|
119
|
+
interface. For example, publish the article and hero asset in Contentful first;
|
|
120
|
+
the app then resolves their IDs and renders them with its native components.
|
|
121
|
+
Cross-space authenticated links, Sync/cursor feeds and asset transformation are
|
|
122
|
+
native extensions, not silently fetched. Controlled tests cover links, locale
|
|
123
|
+
shapes, pagination, resource reads and errors; no live content was accessed.
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Databricks
|
|
2
|
+
|
|
3
|
+
The initial fragment reads a workspace's Jobs API through a custom OAuth
|
|
4
|
+
application or a service principal. Both use `databricksProvider` from
|
|
5
|
+
`@jskit-ai/connectors-catalog/server/databricks` and the ordinary connections
|
|
6
|
+
service. Configuration and encrypted runtime state can both use files.
|
|
7
|
+
|
|
8
|
+
## Choose the owner and credentials
|
|
9
|
+
|
|
10
|
+
| Use | Registration | Connection method | Callback |
|
|
11
|
+
|---|---|---|---|
|
|
12
|
+
| Each user's Databricks access | Custom confidential OAuth application | `beginAuthorization`, then `completeAuthorization` | Exact backend callback |
|
|
13
|
+
| Shared service principal | Service principal client ID and Databricks OAuth secret | `connectClientCredentials` | None |
|
|
14
|
+
|
|
15
|
+
The service principal has its own identity. It cannot stand in for a different
|
|
16
|
+
Databricks account belonging to each app user. The application policy may let
|
|
17
|
+
authorized members use a shared connection or delegate access to an assistant.
|
|
18
|
+
It must derive the storage owner from trusted application identity.
|
|
19
|
+
|
|
20
|
+
## Create a service principal connection
|
|
21
|
+
|
|
22
|
+
1. Open the intended Databricks workspace. Open the user menu, **Settings**,
|
|
23
|
+
**Identity and access**, then **Service principals → Manage**.
|
|
24
|
+
2. Select an existing principal or arrange for the admin to create and assign
|
|
25
|
+
one. Grant workspace access and visibility of the jobs the application needs.
|
|
26
|
+
3. Open the principal's **Secrets** tab and select **Generate secret**. Set a
|
|
27
|
+
suitable lifetime and scopes, then generate it. Copy its client ID and the
|
|
28
|
+
one-time secret into your private configuration environment.
|
|
29
|
+
4. For this fragment, a secret allowing `jobs` can be narrower than `all-apis`.
|
|
30
|
+
A legacy unrestricted secret can request `all-apis`. Avoid granting token
|
|
31
|
+
administration just to read jobs.
|
|
32
|
+
5. Configure **Service account** in the editor, enter the principal's client ID
|
|
33
|
+
and save configuration. Choose **Set credential in Env**, paste the OAuth
|
|
34
|
+
secret under the displayed client-secret reference, and save it there. Select
|
|
35
|
+
`jobs` without `all-apis` when the secret is jobs-scoped. Return and verify the
|
|
36
|
+
first jobs page; this mode needs no callback or browser consent.
|
|
37
|
+
|
|
38
|
+
This is Databricks OAuth, including on Azure; a Microsoft Entra secret, personal
|
|
39
|
+
access token or login password is not interchangeable. The provider describes
|
|
40
|
+
secret management and workspace assignment in its [service principal guide](https://docs.databricks.com/aws/en/dev-tools/auth/oauth-m2m).
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"schemaVersion": 1,
|
|
45
|
+
"integrations": {
|
|
46
|
+
"warehouse": {
|
|
47
|
+
"provider": "databricks",
|
|
48
|
+
"displayName": "Operations jobs",
|
|
49
|
+
"accountMode": "shared",
|
|
50
|
+
"settings": { "workspaceUrl": "https://dbc-abc123.cloud.databricks.com" },
|
|
51
|
+
"scopes": ["jobs"],
|
|
52
|
+
"authentication": { "method": "oauth2", "registrationRef": "databricks-service" }
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"registrations": {
|
|
56
|
+
"databricks-service": {
|
|
57
|
+
"source": "own",
|
|
58
|
+
"grantType": "client_credentials",
|
|
59
|
+
"clientId": "11111111-1111-1111-1111-111111111111",
|
|
60
|
+
"clientSecretRef": "env:DATABRICKS_CLIENT_SECRET",
|
|
61
|
+
"tokenEndpointAuthMethod": "client_secret_basic"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Create a user consent connection
|
|
68
|
+
|
|
69
|
+
An account admin opens the **account console → Settings → App connections →
|
|
70
|
+
Add connection**. Enter the application's name and the exact redirect URL.
|
|
71
|
+
Choose **All APIs** for the Jobs fragment and generate a client secret for a
|
|
72
|
+
confidential application. Set access/refresh lifetimes, add the connection and
|
|
73
|
+
save the client ID and one-time secret. Activation can take 30 minutes.
|
|
74
|
+
See [custom application setup](https://docs.databricks.com/aws/en/integrations/enable-disable-oauth).
|
|
75
|
+
|
|
76
|
+
In the JSON above, set `accountMode` to `per-user`, select `all-apis` and
|
|
77
|
+
`offline_access`, and use a registration containing:
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"source": "own",
|
|
82
|
+
"grantType": "authorization_code",
|
|
83
|
+
"clientId": "22222222-2222-2222-2222-222222222222",
|
|
84
|
+
"clientSecretRef": "env:DATABRICKS_OAUTH_CLIENT_SECRET",
|
|
85
|
+
"tokenEndpointAuthMethod": "client_secret_post",
|
|
86
|
+
"callbackUrlRef": "env:DATABRICKS_CALLBACK_URL"
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Set that callback binding to your own active HTTPS route, or an explicitly
|
|
91
|
+
registered loopback callback for a CLI. Start consent, open the returned URL,
|
|
92
|
+
then pass the returned callback to `completeAuthorization` under the same
|
|
93
|
+
authenticated app owner. PKCE/state and one-time completion are library-owned.
|
|
94
|
+
Do not borrow `databricks-cli` as a third-party client ID. Databricks documents
|
|
95
|
+
the [user authorization flow](https://docs.databricks.com/aws/en/dev-tools/auth/oauth-u2m).
|
|
96
|
+
|
|
97
|
+
The service uses form-body client authentication for user authorization and
|
|
98
|
+
refresh, matching the official SDK; service credentials use HTTP Basic. It
|
|
99
|
+
renews tokens 40 seconds early because Azure can reject tokens with 30 seconds
|
|
100
|
+
remaining. See the [Databricks OAuth implementation](https://github.com/databricks/databricks-sdk-py/blob/main/databricks/sdk/oauth.py).
|
|
101
|
+
|
|
102
|
+
## Workspace addresses
|
|
103
|
+
|
|
104
|
+
Use the exact workspace origin, without an application path, query or hash.
|
|
105
|
+
This initial validator accepts `dbc-….cloud.databricks.com` on AWS,
|
|
106
|
+
`adb-<digits>.<digits>.azuredatabricks.net` on Azure and
|
|
107
|
+
`<digits>.<digits>.gcp.databricks.com` on Google Cloud. A final slash is allowed.
|
|
108
|
+
Regional/account console URLs, private proxy aliases and newer unified domain
|
|
109
|
+
forms require a separate adapter extension. See the [Azure per-workspace URL](https://learn.microsoft.com/en-us/azure/databricks/workspace/per-workspace-urls)
|
|
110
|
+
and [Google Cloud workspace identifiers](https://docs.databricks.com/gcp/en/workspace/workspace-details).
|
|
111
|
+
|
|
112
|
+
The configured workspace selects both `/oidc/v1/authorize` and `/oidc/v1/token`
|
|
113
|
+
as well as the API origin. Neither callback parameters nor operation input can
|
|
114
|
+
change that destination.
|
|
115
|
+
|
|
116
|
+
## Runtime and AI composition
|
|
117
|
+
|
|
118
|
+
Parse the same JSON with `parseIntegrationConfiguration(text, { providers:
|
|
119
|
+
[databricksProvider] })`. Supply the ordinary `authorize`, reference resolver
|
|
120
|
+
and private file store to `createConnectionService`. Compose the Feature when
|
|
121
|
+
using JSKIT actions; `connectors.verifyClientCredentials` exposes service
|
|
122
|
+
verification through the existing action runtime.
|
|
123
|
+
|
|
124
|
+
```js
|
|
125
|
+
await connections.connectClientCredentials({ context, integrationId: "warehouse" });
|
|
126
|
+
const jobs = await connections.invoke({
|
|
127
|
+
context, integrationId: "warehouse", operation: "jobs.list",
|
|
128
|
+
input: { limit: 20, expand_tasks: false }
|
|
129
|
+
});
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
`jobs.list` accepts `limit` (1–100), `expand_tasks`, exact `name` filtering and an
|
|
133
|
+
opaque `page_token`. Empty results may omit `jobs`. `jobs.get` requires numeric
|
|
134
|
+
`job_id`, accepts `include_trigger_state` and a continuation token, and returns
|
|
135
|
+
one page of job details. Nested task arrays can be paginated. The caller must
|
|
136
|
+
decide whether to follow tokens; the library makes one read per invocation.
|
|
137
|
+
See the [Jobs API](https://docs.databricks.com/api/jobs/v2/list-jobs).
|
|
138
|
+
|
|
139
|
+
The fragment bounds tokens to 8192 characters and job IDs to JavaScript's safe
|
|
140
|
+
integer range. It rejects writes, SQL, arbitrary URLs, malformed job IDs and
|
|
141
|
+
responses identifying a different requested job. An OAuth grant can allow
|
|
142
|
+
more than these two operations; neither `jobs` nor `all-apis` is a read-only
|
|
143
|
+
provider permission. Configure resource permissions accordingly.
|
|
144
|
+
|
|
145
|
+
Service credentials renew with their secret rather than a refresh token.
|
|
146
|
+
Renewal is serialized per connection and cannot expand the stored grant.
|
|
147
|
+
Changing a service connection's scopes or grant type requires reconnecting.
|
|
148
|
+
Tokens remain encrypted; source contains references. Disconnect removes the
|
|
149
|
+
local connection and attempts without deleting the principal or revoking the
|
|
150
|
+
provider application globally.
|
|
151
|
+
|
|
152
|
+
## Public, Online and automation
|
|
153
|
+
|
|
154
|
+
Register the real callback implemented by the runtime that owns this connection.
|
|
155
|
+
For an application integration, use the application's assigned hosting URL as
|
|
156
|
+
the initial origin and its implemented callback path. Store the exact callback
|
|
157
|
+
in its Env reference and provider registration. A domain change requires updating
|
|
158
|
+
both values if the callback URL changes; retain the application identity and its
|
|
159
|
+
persistent grants when moving hosts. Public Vibe64, Online and CLI users supply
|
|
160
|
+
their own registrations through this same contract.
|
|
161
|
+
See the [callback guide](../../connectors-core/docs/oauth-callbacks.md).
|
|
162
|
+
|
|
163
|
+
Service principals have no callback. Databricks custom applications are created
|
|
164
|
+
within a customer account; creating one does not establish a universal third-party
|
|
165
|
+
registration across every customer account. The application owner supplies its
|
|
166
|
+
account's registration. Separate registrations do not reserve workspace compute
|
|
167
|
+
or guarantee separate provider quotas.
|
|
168
|
+
|
|
169
|
+
An AI can prepare the portable file and registration request, and an authorized
|
|
170
|
+
operator can provision custom apps using the account API or
|
|
171
|
+
`databricks account custom-app-integration create --confidential --json …`.
|
|
172
|
+
The API accepts name, redirect URLs, scopes and token policy and returns client
|
|
173
|
+
credentials. Admin authorization and storage of the returned secret remain
|
|
174
|
+
operator responsibilities. See [OAuth app integration APIs](https://docs.databricks.com/api/o-auth/v1/get-custom-o-auth-app-integration).
|
|
175
|
+
Service principal provisioning and secret generation similarly need account
|
|
176
|
+
privileges; this fragment does not implement provisioning endpoints.
|
|
177
|
+
|
|
178
|
+
Live accounts, consent, private networking, account-level operations, SQL/data
|
|
179
|
+
queries, jobs execution and app login are unverified or
|
|
180
|
+
unfinished. Local proof uses controlled HTTP responses and encrypted files.
|