@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,72 @@
|
|
|
1
|
+
# Microsoft Teams
|
|
2
|
+
|
|
3
|
+
Provider ID `microsoft-teams`; export `microsoftTeamsProvider` from
|
|
4
|
+
`@jskit-ai/connectors-catalog/server/microsoft-teams`.
|
|
5
|
+
|
|
6
|
+
Follow all [Microsoft registration steps](microsoft-oauth.md), selecting
|
|
7
|
+
**Multiple Entra ID tenants**. This module uses the `organizations` authority;
|
|
8
|
+
personal Microsoft accounts are unsupported. Under **API permissions → Microsoft
|
|
9
|
+
Graph → Delegated permissions**, add `Team.ReadBasic.All`, `Channel.ReadBasic.All`, `User.Read` and `offline_access`.
|
|
10
|
+
The form requires team/channel/profile reads. Optional channel send and all-user
|
|
11
|
+
profile read start selected; clear them for listing teams only. Channel-message
|
|
12
|
+
read and chat read/write are also available. The operations below use these permissions separately; `teams.list` itself uses only `Team.ReadBasic.All`.
|
|
13
|
+
The user's organization must provide Teams access and permit consent.
|
|
14
|
+
|
|
15
|
+
`teams.list` verifies access with `GET /v1.0/me/joinedTeams`. Verification input
|
|
16
|
+
is `{}`. This endpoint does not support OData query parameters, so this fragment
|
|
17
|
+
does not offer page size, search or filter controls. It returns the `value`
|
|
18
|
+
array of teams in which the signed-in user has direct membership. Shared-channel
|
|
19
|
+
access does not necessarily imply that the host team appears here. That listing does not itself read/send messages; use the separate operations below. Team creation and membership changes remain unsupported.
|
|
20
|
+
[Joined teams API](https://learn.microsoft.com/en-us/graph/api/user-list-joinedteams?view=graph-rest-1.0).
|
|
21
|
+
|
|
22
|
+
The common continuation input is accepted only for a same-resource provider
|
|
23
|
+
link if one is returned; do not manufacture a Teams paging URL. The fragment
|
|
24
|
+
does not introduce query parameters on its initial request.
|
|
25
|
+
|
|
26
|
+
AI provisioning is **API-capable after authorization** using Graph application
|
|
27
|
+
creation and credential endpoints. Apply the audience and delegated permissions
|
|
28
|
+
above. Administrator consent and tenant restrictions remain provider-controlled.
|
|
29
|
+
The application owner supplies its registration and private Env bindings using
|
|
30
|
+
the common guide. Separate registrations do not remove overlapping tenant/service
|
|
31
|
+
limits.
|
|
32
|
+
|
|
33
|
+
Use the common JSON/file-store pattern from a CLI or backend. Automated tests
|
|
34
|
+
verify the organization endpoint, exact permission, query-free initial request,
|
|
35
|
+
scope denial, cancellation, refresh, isolation and encrypted persistence. Live
|
|
36
|
+
Teams usage and generated applications are excluded.
|
|
37
|
+
|
|
38
|
+
## Editor credential handoff
|
|
39
|
+
|
|
40
|
+
The inline guide covers Entra registration/audience, exact Web redirect,
|
|
41
|
+
delegated permissions and administrator consent, secret Value versus Secret ID,
|
|
42
|
+
and rotation. Save `env:MICROSOFT_TEAMS_CLIENT_SECRET` and
|
|
43
|
+
`env:MICROSOFT_TEAMS_CALLBACK_URL`, then use **Set credential in Env** and
|
|
44
|
+
**Open Env** for their values. Shared/assistant **Connect account** uses the
|
|
45
|
+
prepared project runtime. Per-user connections belong to authenticated users
|
|
46
|
+
of that app. No Vibe64 gateway or editor-owned provider registration is used.
|
|
47
|
+
Local disconnect does not revoke provider consent.
|
|
48
|
+
|
|
49
|
+
## Conversations in CLI and generated apps
|
|
50
|
+
|
|
51
|
+
`channels.list({teamId})` requires Channel.ReadBasic.All.
|
|
52
|
+
`messages.list({teamId,channelId,pageSize?})` and
|
|
53
|
+
`replies.list({teamId,channelId,messageId})` require ChannelMessage.Read.All.
|
|
54
|
+
`messages.send({teamId,channelId,text})` and
|
|
55
|
+
`replies.send({teamId,channelId,messageId,text})` require ChannelMessage.Send.
|
|
56
|
+
Existing chats use `chats.list({})`, `chatMessages.list({chatId,pageSize?})` and
|
|
57
|
+
`chatMessages.send({chatId,text})` with Chat.ReadWrite. Retain returned resource IDs
|
|
58
|
+
and same-resource nextLink values. Text sends are bounded to 20,000 characters.
|
|
59
|
+
|
|
60
|
+
App authorization must approve the destination and text; connected permissions
|
|
61
|
+
are not permission to expose an unrestricted send endpoint. Do not blindly retry
|
|
62
|
+
uncertain sends. Sanitize returned HTML before rendering. JSKIT CLI apps call the
|
|
63
|
+
same connection service; other frameworks use Graph and their own Env/grant store.
|
|
64
|
+
|
|
65
|
+
**LIMITATIONS:** No team/chat creation, membership administration, message edit/delete,
|
|
66
|
+
attachments, meeting bot or editor tool attachment. Example: read a channel and
|
|
67
|
+
post a status update, not a Teams client or automatic team administrator. No live
|
|
68
|
+
provider or generated-app proof.
|
|
69
|
+
|
|
70
|
+
[Channel messages](https://learn.microsoft.com/en-us/graph/api/channel-list-messages?view=graph-rest-1.0),
|
|
71
|
+
[channel send](https://learn.microsoft.com/en-us/graph/api/channel-post-messages?view=graph-rest-1.0),
|
|
72
|
+
[chat send](https://learn.microsoft.com/en-us/graph/api/chat-post-messages?view=graph-rest-1.0).
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Microsoft Word
|
|
2
|
+
|
|
3
|
+
Provider ID `microsoft-word`; export `microsoftWordProvider` from
|
|
4
|
+
`@jskit-ai/connectors-catalog/server/microsoft-word`. This initial adapter browses
|
|
5
|
+
document files and folders in the connected account's default drive, and reads
|
|
6
|
+
file metadata. It does not read or edit document contents, download files,
|
|
7
|
+
execute macros, create files or change sharing. A filename extension identifies
|
|
8
|
+
a candidate file; it is not a check of the file's actual format.
|
|
9
|
+
|
|
10
|
+
## Registration and configuration
|
|
11
|
+
|
|
12
|
+
Follow the complete [Microsoft registration steps](microsoft-oauth.md).
|
|
13
|
+
Use **Any Entra ID Tenant + Personal Microsoft accounts** with `common`, or the
|
|
14
|
+
matching organizational, personal-only or single-directory option in that guide.
|
|
15
|
+
For one directory, copy **Directory (tenant) ID** into `settings.tenantId`.
|
|
16
|
+
Under **API permissions → Add a permission → Microsoft Graph → Delegated
|
|
17
|
+
permissions**, select `Files.Read` and `offline_access`. Then configure the
|
|
18
|
+
Web callback, create a client secret and store its Value through the referenced
|
|
19
|
+
Env variable. Use an account with an existing drive; JSKIT does not provision it.
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"schemaVersion": 1,
|
|
24
|
+
"integrations": {
|
|
25
|
+
"files": {
|
|
26
|
+
"provider": "microsoft-word",
|
|
27
|
+
"accountMode": "per-user",
|
|
28
|
+
"scopes": [
|
|
29
|
+
"Files.Read",
|
|
30
|
+
"offline_access"
|
|
31
|
+
],
|
|
32
|
+
"settings": {
|
|
33
|
+
"tenantId": "common"
|
|
34
|
+
},
|
|
35
|
+
"authentication": {
|
|
36
|
+
"method": "oauth2",
|
|
37
|
+
"registrationRef": "microsoft"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"registrations": {
|
|
42
|
+
"microsoft": {
|
|
43
|
+
"source": "own",
|
|
44
|
+
"clientId": "YOUR_APPLICATION_CLIENT_ID",
|
|
45
|
+
"clientSecretRef": "env:MICROSOFT_CLIENT_SECRET",
|
|
46
|
+
"callbackUrlRef": "env:MICROSOFT_CALLBACK_URL"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The same values are editable in Vibe64: display name, account ownership, tenant,
|
|
53
|
+
Client ID, secret/callback references and the two permission choices. Saving the
|
|
54
|
+
file does not open provider consent. The [OAuth composition pattern](../patterns/oauth-connection/PATTERN.md)
|
|
55
|
+
uses the library for consent, private encrypted text storage and runtime access.
|
|
56
|
+
A per-user slot uses the app's authenticated subject. A shared slot uses the
|
|
57
|
+
host's membership policy and stable shared subject; it is a shared account.
|
|
58
|
+
|
|
59
|
+
## Runtime operations
|
|
60
|
+
|
|
61
|
+
- `items.list`: optional `folderId`, `pageSize` (1–100, default 25) and `nextLink`.
|
|
62
|
+
Without `folderId`, reads `/v1.0/me/drive/root/children`; otherwise reads
|
|
63
|
+
`/v1.0/me/drive/items/{folderId}/children`. Keeps folders and files whose
|
|
64
|
+
extensions are doc, docx, docm, dot, dotx, dotm, case-insensitively.
|
|
65
|
+
- `items.get`: required `itemId`, reading `/v1.0/me/drive/items/{itemId}`.
|
|
66
|
+
Returns a matching file's metadata. Other file types and folders produce
|
|
67
|
+
`connector_document_type_invalid`.
|
|
68
|
+
|
|
69
|
+
Both operations require `Files.Read`. IDs must be opaque item IDs, not paths or
|
|
70
|
+
URLs. Selected metadata includes ID, name, size, web URL, file/folder facets,
|
|
71
|
+
parent reference, last modification time and ETag. The adapter does not follow
|
|
72
|
+
returned URLs. [Graph children API](https://learn.microsoft.com/en-us/graph/api/driveitem-list-children?view=graph-rest-1.0),
|
|
73
|
+
[Graph item API](https://learn.microsoft.com/en-us/graph/api/driveitem-get?view=graph-rest-1.0).
|
|
74
|
+
|
|
75
|
+
`items.list` verifies a new connection with input `{}`. Its page size bounds the
|
|
76
|
+
upstream page before local file filtering. A filtered page can be empty and
|
|
77
|
+
still have `@odata.nextLink`: retain that link and pass it with the same folder
|
|
78
|
+
input to continue. It is not a recursive search or an automatic full-drive scan.
|
|
79
|
+
Next links cannot change Graph origin or the selected resource path.
|
|
80
|
+
|
|
81
|
+
## Application registration and AI provisioning
|
|
82
|
+
|
|
83
|
+
AI provisioning is **API-capable after operator authorization** using the
|
|
84
|
+
application and credential endpoints in the common guide. Registration remains
|
|
85
|
+
separate from account consent and tenant administrator policy.
|
|
86
|
+
|
|
87
|
+
Register the callback served by this application's backend. Store its exact URL
|
|
88
|
+
and client secret in application environment bindings. The same setup works with
|
|
89
|
+
a CLI, installed editor or hosted editor; none supplies a shared registration.
|
|
90
|
+
See the [callback guide](../../connectors-core/docs/oauth-callbacks.md) for domain
|
|
91
|
+
changes and reconnect behavior. Keep the selected Microsoft tenant/audience
|
|
92
|
+
consistent with the provider registration.
|
|
93
|
+
|
|
94
|
+
## Evidence and limits
|
|
95
|
+
|
|
96
|
+
Focused fixtures cover consent, cancellation, encrypted restart, refresh,
|
|
97
|
+
reduced permissions, owner isolation, tenant changes, folder paging, empty
|
|
98
|
+
filtered pages, metadata validation and controlled provider failures. Provider
|
|
99
|
+
HTTP is simulated. No live account, provider registration or generated app is
|
|
100
|
+
used. Provider-console administration and live account acceptance remain outside
|
|
101
|
+
this fixture evidence.
|
|
102
|
+
|
|
103
|
+
## Editor credential handoff
|
|
104
|
+
|
|
105
|
+
The inline guide supplies Entra registration, account audience, Web callback,
|
|
106
|
+
delegated permissions, secret Value and expiry steps. Save
|
|
107
|
+
`env:MICROSOFT_WORD_CLIENT_SECRET` and `env:MICROSOFT_WORD_CALLBACK_URL`;
|
|
108
|
+
use **Set credential in Env** and **Open Env** to store the values.
|
|
109
|
+
Shared/assistant **Connect account** invokes the prepared application runtime.
|
|
110
|
+
Per-user connections belong to individual users inside that application.
|
|
111
|
+
No Vibe64 gateway or shared registration is used.
|
|
112
|
+
|
|
113
|
+
## Existing-scope closeout — 13 September 2026
|
|
114
|
+
|
|
115
|
+
Delegated project-owned OAuth browses default-drive folders and Word candidate filenames and fetches selected file metadata, with bounded paging, tenant/audience configuration and refreshed private grants.
|
|
116
|
+
|
|
117
|
+
No document content reading, creation/editing, upload/download, conversion, macros, sharing, recursive search, arbitrary drive/site selection or document format validation. Filename extension filtering is not content inspection; filtered empty pages can still have a continuation. No app-only/client-credentials or device-code grant, application login or automatic remote consent revocation. The app owns callback routes, account connection UI, authorization and file-picker/pagination behavior. Exact Lovable shared-form fields/scopes remain unverified because the saved shared-form reference is a loading placeholder. To extend: choose supported native document tooling, implement content/file transfers with conflict and format preservation tests; do not invent Graph document-editing endpoints. 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.
|
|
118
|
+
|
|
119
|
+
7 provider-specific source and 7 installed-package cases passed, plus 2 shared Microsoft tenant checks in each 16-test Word/PowerPoint run on September 13. September 12 rendered guidance/form/lifecycle evidence at 496px is retained; no new phone or browser run.
|
package/docs/miro.md
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Miro assistant MCP
|
|
2
|
+
|
|
3
|
+
Checked against Miro's public documentation and discovery metadata on 9 September
|
|
4
|
+
2026. This fragment connects an assistant owner's selected Miro team, discovers
|
|
5
|
+
tools and calls explicitly authorized tools. Its fixed HTTP endpoint is
|
|
6
|
+
`https://mcp.miro.com/`, including the trailing slash.
|
|
7
|
+
|
|
8
|
+
## Registration and consent steps
|
|
9
|
+
|
|
10
|
+
1. Read [Connecting to Miro MCP](https://developers.miro.com/docs/connecting-to-miro-mcp).
|
|
11
|
+
A user signs into Miro and selects the team containing the intended boards.
|
|
12
|
+
This MCP client registration is separate from creating a REST API application
|
|
13
|
+
in **Your apps**; those credentials are not interchangeable.
|
|
14
|
+
2. Choose the actual callback served by your assistant backend or CLI host.
|
|
15
|
+
Use HTTPS for a remote host; use a loopback callback only where the provider
|
|
16
|
+
accepts that client setup.
|
|
17
|
+
3. Invoke `registerMiroClient` once from an authorized setup command. Pass the
|
|
18
|
+
client name, callback and selected scopes. It uses Miro's advertised dynamic
|
|
19
|
+
registration endpoint, requests `client_secret_post`, and returns the client
|
|
20
|
+
ID, secret and any reported secret-expiry timestamp.
|
|
21
|
+
4. Store the secret in the host's secret/environment facilities. Write the client
|
|
22
|
+
ID, secret reference and callback reference into the portable registration.
|
|
23
|
+
Never put the secret value in the configuration JSON.
|
|
24
|
+
5. In Vibe64, select **Integrations → Add Miro**. Enter **Client ID**, **Client
|
|
25
|
+
secret reference** and **Callback URL reference**. Keep **Assistant access**.
|
|
26
|
+
**Read boards** starts selected; enable other permissions only as needed.
|
|
27
|
+
The **OAuth client registration** panel supplies the endpoint and raw JSON
|
|
28
|
+
POST body for the current callback/scopes. Send it once from your HTTP client
|
|
29
|
+
or use the helper above. Select **Save configuration**, then **Set credential
|
|
30
|
+
in Env** for `MIRO_CLIENT_SECRET` and **Open Env** for `MIRO_CALLBACK_URL`.
|
|
31
|
+
**Connect account** invokes the prepared application runtime; saving alone
|
|
32
|
+
does not register or authorize an account.
|
|
33
|
+
6. The host begins authorization and opens the returned URL. Sign in, review the
|
|
34
|
+
requested access, and select the appropriate Miro team. Complete the callback
|
|
35
|
+
under the same authenticated owner. The runtime discovers available tools
|
|
36
|
+
before storing the connection.
|
|
37
|
+
7. To switch teams, reconnect and choose the new team during provider consent.
|
|
38
|
+
Discovering tools does not prove access to any particular board. Team and
|
|
39
|
+
organization administrators can restrict access even when a client is valid.
|
|
40
|
+
|
|
41
|
+
Miro's connection guide documents the **Connect**, sign-in, team-selection and
|
|
42
|
+
**Continue** flow. A custom host supplies its own equivalent connect action;
|
|
43
|
+
the provider controls its account and team screens.
|
|
44
|
+
|
|
45
|
+
## Fields and operations
|
|
46
|
+
|
|
47
|
+
| Field | Meaning |
|
|
48
|
+
|---|---|
|
|
49
|
+
| Client ID | Assigned by MCP dynamic registration |
|
|
50
|
+
| Client secret reference | Reference to the confidential registration's secret |
|
|
51
|
+
| Callback URL reference | Reference to the exact backend redirect URI |
|
|
52
|
+
| `boards:read` | Board read permission; selected initially |
|
|
53
|
+
| `boards:write` | Board writes; initially unselected |
|
|
54
|
+
| `openid` | Identity scope; initially unselected |
|
|
55
|
+
| `email` | Email scope; initially unselected |
|
|
56
|
+
|
|
57
|
+
These fields follow the
|
|
58
|
+
[authorization metadata](https://mcp.miro.com/.well-known/oauth-authorization-server)
|
|
59
|
+
and [resource metadata](https://mcp.miro.com/.well-known/oauth-protected-resource).
|
|
60
|
+
The issuer/resource is `https://mcp.miro.com/`; its `/authorize`, `/token` and
|
|
61
|
+
`/register` endpoints belong to the same server. The existing OAuth runtime
|
|
62
|
+
binds the resource to code and refresh requests. Identity scopes do not turn
|
|
63
|
+
this connector into the application's login system.
|
|
64
|
+
|
|
65
|
+
Import `miroProvider` and `registerMiroClient` from
|
|
66
|
+
`@jskit-ai/connectors-catalog/server/miro`, then use the
|
|
67
|
+
[assistant OAuth pattern](../patterns/assistant-mcp-oauth/PATTERN.md):
|
|
68
|
+
|
|
69
|
+
```js
|
|
70
|
+
const registration = await registerMiroClient({
|
|
71
|
+
clientName: "My board assistant",
|
|
72
|
+
callbackUrl: configuredCallback,
|
|
73
|
+
scopes: ["boards:read"]
|
|
74
|
+
});
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The host stores the result privately. `tools.list` returns current tool schemas;
|
|
78
|
+
`tools.call` requires the host's exact name/argument authorization. For example,
|
|
79
|
+
a host can allow the documented `board_search_boards` tool and validate its
|
|
80
|
+
query, then authorize board-specific reads separately. Do not infer write
|
|
81
|
+
approval from granted OAuth scopes or the presence of a tool in discovery.
|
|
82
|
+
Use Miro's current [tool reference](https://developers.miro.com/docs/miro-mcp-tools)
|
|
83
|
+
when composing calls; tool availability evolves, and the library does not pin a
|
|
84
|
+
second copy of the remote tool catalogue. Returned `isError` stays observable.
|
|
85
|
+
|
|
86
|
+
## Connection ownership and callbacks
|
|
87
|
+
|
|
88
|
+
Register the real callback implemented by the runtime that owns this connection.
|
|
89
|
+
For an application integration, use the application's assigned hosting URL as
|
|
90
|
+
the initial origin and its implemented callback path. Store the exact callback
|
|
91
|
+
in its Env reference and provider registration. A domain change requires updating
|
|
92
|
+
both values if the callback URL changes; retain the application identity and its
|
|
93
|
+
persistent grants when moving hosts. Public Vibe64, Online and CLI users supply
|
|
94
|
+
their own registrations through this same contract.
|
|
95
|
+
See the [callback guide](../../connectors-core/docs/oauth-callbacks.md).
|
|
96
|
+
|
|
97
|
+
The application or explicitly authorized assistant host owns the client secret
|
|
98
|
+
and grants. Each user still selects a team and grants access. Separate client
|
|
99
|
+
IDs do not establish separate team capacity, entitlements or billing limits.
|
|
100
|
+
|
|
101
|
+
## Automation assessment and proof
|
|
102
|
+
|
|
103
|
+
Miro documents OAuth with dynamic registration in its
|
|
104
|
+
[MCP overview](https://developers.miro.com/docs/miro-mcp). The helper can create
|
|
105
|
+
the registration after a privileged caller authorizes setup; AI can assemble
|
|
106
|
+
configuration, callback handlers and tool policy. Sign-in, consent, team choice
|
|
107
|
+
and any administrator approval remain external actions. The helper never
|
|
108
|
+
retries an ambiguous registration automatically.
|
|
109
|
+
|
|
110
|
+
Focused tests use simulated provider replies and real encrypted files for
|
|
111
|
+
registration, PKCE, refresh after restart, replay, ownership, discovery,
|
|
112
|
+
tool policy, safe HTTP failures and cancellation. No live registration,
|
|
113
|
+
consent, board read/write or sample application was exercised. Managed
|
|
114
|
+
assignments, automatic assistant attachment and application login remain
|
|
115
|
+
outside this fragment.
|
|
116
|
+
|
|
117
|
+
**LIMITATIONS (accepted deferral):** Automatic Vibe64 Codex/OpenCode attachment is deferred. Example: a wired CLI/assistant host may discover and authorize a board read or diagram tool, but connecting here does not make the board available in Vibe64 chat. No embedded board editor. Fixture board/diagram names are controlled test inputs, not claims about current remote tool names. Live board access remains unproven.
|
package/docs/n8n.md
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# n8n assistant MCP connection
|
|
2
|
+
|
|
3
|
+
Import `n8nProvider` from `@jskit-ai/connectors-catalog/server/n8n`. Configure
|
|
4
|
+
`accountMode: "assistant"`, `authentication.method: "api-key"`, an environment
|
|
5
|
+
`secretRef`, empty `scopes`, and `settings.serverUrl`. The shared validator
|
|
6
|
+
requires a final HTTPS endpoint ending `/mcp-server/http`; installation paths
|
|
7
|
+
and explicit ports are retained. Display name is the common integration field.
|
|
8
|
+
|
|
9
|
+
## Manual setup
|
|
10
|
+
|
|
11
|
+
1. Open **Settings → Instance-level MCP** as an owner/admin and enable access.
|
|
12
|
+
2. Open **Connection details → Connect → API key**. Copy **Server URL** and the
|
|
13
|
+
personal token into the URL setting and secret environment respectively.
|
|
14
|
+
Older releases label the token tab **Access Token**.
|
|
15
|
+
3. Review **Workflows exposed** and enable only the intended workflows.
|
|
16
|
+
4. Keep `env:N8N_API_KEY` as the reference, select **Save configuration**,
|
|
17
|
+
then **Set credential in Env** for the token. Select **Connect account**
|
|
18
|
+
to verify discovery; the assistant separately authorizes individual tool calls.
|
|
19
|
+
5. To expose a workflow, choose **Workflows exposed → Enable workflows**,
|
|
20
|
+
select it and **Enable**, or use its **… → Settings → Available in MCP**.
|
|
21
|
+
Check workflow eligibility and user access. Search may return previews of
|
|
22
|
+
other workflows visible to that user; exposure is not isolated per client.
|
|
23
|
+
|
|
24
|
+
Use the [n8n setup guide](https://docs.n8n.io/connect/connect-to-n8n-mcp-server)
|
|
25
|
+
for version-specific screens and token rotation. A REST API key is a different
|
|
26
|
+
credential. Rotating this personal token revokes its predecessor.
|
|
27
|
+
|
|
28
|
+
## Runtime and ownership
|
|
29
|
+
|
|
30
|
+
`connectApiKey` performs initialization and `tools/list`, never a workflow call.
|
|
31
|
+
`tools.list` accepts an optional opaque `cursor`; `tools.call` requires `name`
|
|
32
|
+
and an `arguments` object. Results retain MCP content, `isError`, tool schemas
|
|
33
|
+
and pagination. Tool errors are data; protocol/HTTP failures use safe connector
|
|
34
|
+
errors. No automatic tool selection or execution occurs.
|
|
35
|
+
|
|
36
|
+
The application policy receives the requested tool and arguments before any
|
|
37
|
+
HTTP request. Apply the assistant's delegated authority there, and treat tool
|
|
38
|
+
descriptions/results as untrusted external content. Every call gets a temporary
|
|
39
|
+
MCP session; cleanup attempts DELETE and closes local streams. Operations have
|
|
40
|
+
the core's 15-second bound. Cancellation does not undo a workflow already
|
|
41
|
+
accepted remotely, and connection discovery does not establish every permission.
|
|
42
|
+
|
|
43
|
+
Private HTTPS instances are intentionally permitted in trusted configuration;
|
|
44
|
+
the runtime host owns outbound-network restrictions. It contacts only the exact
|
|
45
|
+
configured endpoint and never follows redirects, metadata links or returned
|
|
46
|
+
URLs. Changing the URL requires verification again. Tokens and sessions are
|
|
47
|
+
not copied into project source; existing encrypted file storage owns grants.
|
|
48
|
+
|
|
49
|
+
## Automation and application ownership
|
|
50
|
+
|
|
51
|
+
AI can compose this configuration and runtime wiring once supplied an authorized
|
|
52
|
+
token. This fragment provides no API for enabling MCP or issuing its initial
|
|
53
|
+
token; provisioning remains manual. OAuth client provisioning is available through `registerN8nClient` below;
|
|
54
|
+
instance access policies and actual provider consent still apply.
|
|
55
|
+
|
|
56
|
+
This token mode has no OAuth app ID. The application owner supplies a credential
|
|
57
|
+
for its n8n instance through private Env. Separate credentials give attribution
|
|
58
|
+
and revocation; they do not demonstrate independent capacity on the same instance.
|
|
59
|
+
Independent capacity requires separate instances or appropriate usage limits.
|
|
60
|
+
|
|
61
|
+
## Proof and limits
|
|
62
|
+
|
|
63
|
+
`test/mcp.test.js` uses the real SDK, JSON/SSE response fixtures and encrypted
|
|
64
|
+
file storage to exercise discovery, tool calls, input policy, restart, rotation,
|
|
65
|
+
changed destinations, isolation, failure handling and cancellation. The editor
|
|
66
|
+
test checks the same URL/reference fields and reload. `test/n8nOAuth.test.js`
|
|
67
|
+
exercises OAuth with controlled discovery, registration and token responses.
|
|
68
|
+
Automatic assistant attachment, stdio, resources/prompts, live n8n and generated
|
|
69
|
+
apps are not tested.
|
|
70
|
+
|
|
71
|
+
## Remaining authorization parity
|
|
72
|
+
|
|
73
|
+
n8n also supports OAuth. The captured Lovable flow accepts only the server URL
|
|
74
|
+
and offers Add & authorize. The runtime supports personal tokens and
|
|
75
|
+
OAuth. The editor offers explicit discovery and Register client and connect,
|
|
76
|
+
which registers a client, saves configuration and Env, then invokes the
|
|
77
|
+
application-owned connection flow. Manual registration remains available. The token path
|
|
78
|
+
requires no client registration or callback.
|
|
79
|
+
|
|
80
|
+
## OAuth discovery helper
|
|
81
|
+
|
|
82
|
+
`discoverN8nOAuth({ serverUrl }, { fetchImpl, signal })` is exported from the
|
|
83
|
+
same server entry point. It returns `{ resource, oauth, scopes }` after reading
|
|
84
|
+
the MCP protected-resource and authorization-server metadata through the existing
|
|
85
|
+
SDK. It does not register a client, send credentials or open consent.
|
|
86
|
+
|
|
87
|
+
The exact configured resource must match discovery. A single HTTPS issuer is
|
|
88
|
+
required, but it can use a different hostname and installation path. The helper
|
|
89
|
+
validates n8n's advertised /mcp-oauth endpoints, S256, refresh and confidential
|
|
90
|
+
client_secret_post support. Scopes come from discovery, not a hardcoded universal
|
|
91
|
+
list. Failed discovery requires correcting the instance/URL; it does not guess
|
|
92
|
+
an OAuth authority from the MCP hostname. Trusted callers own outbound-network
|
|
93
|
+
policy, including access to private instances. Requests omit credentials, reject
|
|
94
|
+
redirects and share a 15-second cancellation bound.
|
|
95
|
+
|
|
96
|
+
The editor exposes Discover OAuth settings for n8n. The provider uses saved discovery
|
|
97
|
+
as described below. Focused discovery tests
|
|
98
|
+
cover split hosts and paths, inconsistent metadata, bad inputs and cancellation.
|
|
99
|
+
|
|
100
|
+
## OAuth client registration helper
|
|
101
|
+
|
|
102
|
+
`registerN8nClient({ serverUrl, clientName, callbackUrl, scopes }, options)`
|
|
103
|
+
validates setup inputs, performs discovery and submits one confidential-client
|
|
104
|
+
registration using the existing MCP registration helper. Select a nonempty
|
|
105
|
+
subset of advertised resource scopes. Unsupported scopes fail before POST;
|
|
106
|
+
ambiguous failures are not retried. The privileged host owns authorization to
|
|
107
|
+
register and private storage of the returned secret.
|
|
108
|
+
|
|
109
|
+
The result includes clientId, clientSecret, optional clientSecretExpiresAt,
|
|
110
|
+
resource, oauth metadata, advertised scopes and the separate requestedScopes.
|
|
111
|
+
Advertised scopes are not consent or the permissions to save automatically.
|
|
112
|
+
Use the selected requestedScopes for the application's intended configuration.
|
|
113
|
+
Never copy the whole result into public JSON: put the secret in Env and retain
|
|
114
|
+
only its reference. Registration does not connect an account. The editor can register and store credentials through its explicit action,
|
|
115
|
+
or display the endpoint and request body for manual registration.
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
## Saved OAuth configuration and runtime
|
|
119
|
+
|
|
120
|
+
For OAuth, save only `{ resource, oauth, scopes }` from discovery/registration as
|
|
121
|
+
`integrations.<id>.settings.oauthDiscovery`, alongside `settings.serverUrl`.
|
|
122
|
+
Use the same exact resource URL for `serverUrl`. This is public metadata; never
|
|
123
|
+
save the complete registration response here. The shared schema validates the
|
|
124
|
+
endpoints, protocol capabilities and advertised scope names. OAuth becomes an
|
|
125
|
+
available authentication method when discovery settings are present.
|
|
126
|
+
|
|
127
|
+
Create an ordinary project-owned registration with the returned `clientId`,
|
|
128
|
+
`clientSecretRef: "env:N8N_CLIENT_SECRET"` and
|
|
129
|
+
`callbackUrlRef: "env:N8N_CALLBACK_URL"`. Put the secret and exact registered
|
|
130
|
+
callback in private Env. Choose `authentication.method: "oauth2"`, reference
|
|
131
|
+
that registration, and put only the selected `requestedScopes` into the
|
|
132
|
+
integration's `scopes`. Advertised permissions are choices, not automatic grants.
|
|
133
|
+
|
|
134
|
+
Use `n8nProvider` with the existing `createConnectionService`, project-owned
|
|
135
|
+
store, reference resolver and authorization policy. `beginAuthorization` uses
|
|
136
|
+
the saved authority, selected scopes, S256 and exact resource. Serve the
|
|
137
|
+
callback in the application's backend and call `completeAuthorization` there.
|
|
138
|
+
The common runtime checks consent, stores encrypted grants and refreshes them
|
|
139
|
+
when necessary. It does not rediscover endpoints during token refresh or follow
|
|
140
|
+
metadata advertised by a tool response. A changed server URL requires fresh
|
|
141
|
+
matching discovery before consent. Revoke provider access in n8n separately
|
|
142
|
+
from removing a local connection.
|
|
143
|
+
|
|
144
|
+
The focused OAuth fixture proves consent, callback exchange, tool discovery,
|
|
145
|
+
restart/refresh and rejection of changed resources and malformed saved metadata.
|
|
146
|
+
It makes no live provider requests. CLI applications can use this runtime now;
|
|
147
|
+
the editor can discover settings and register a client explicitly.
|
|
148
|
+
A live n8n deployment and real consent remain untested.
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
In the editor, enter Server URL and select **Discover OAuth settings**. Choose
|
|
152
|
+
**OAuth** in **Authentication**, then open **Permissions** and select the needed
|
|
153
|
+
scopes. Open **Set up n8n** for the complete steps. Its **OAuth client
|
|
154
|
+
registration** section provides a copyable endpoint and JSON body with the
|
|
155
|
+
current callback and selected scopes. Alternatively choose Register client and connect with a new registration and
|
|
156
|
+
unused Env keys. This action saves the client and Env, then starts the normal
|
|
157
|
+
application-owned connection flow. For manual registration, send the request
|
|
158
|
+
once, enter its returned client ID, save and configure Env yourself.
|
|
159
|
+
|
|
160
|
+
Discovery requires the instance to advertise at least one supported permission.
|
|
161
|
+
Versions without that contract can use the personal-token path. Saved metadata
|
|
162
|
+
contains public endpoints and permission names only. Selecting a new slot,
|
|
163
|
+
changing the URL or editing the draft while discovery runs prevents a stale
|
|
164
|
+
response from replacing the new draft. Discovery does not write a file until
|
|
165
|
+
Save configuration, and it neither reads nor writes Env.
|
|
166
|
+
|
|
167
|
+
## Accepted limitations
|
|
168
|
+
|
|
169
|
+
LIMITATIONS: Automatic Vibe64 coding-chat attachment is deferred. A separately wired CLI or assistant host can discover and invoke exposed workflows through MCP after approving the exact tool and arguments; connecting alone does not attach chat tools. This connector is not the n8n REST API or a workflow designer. Example: an approved host can start an exposed report workflow and receive its result, but saving this connection alone does not let Vibe64 chat start that report. Workflow tools and schemas come from discovery, not a fixed catalogue. Fixture execution is not proof of a live workflow run.
|
package/docs/notion.md
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Notion
|
|
2
|
+
|
|
3
|
+
Import `notionProvider` from `@jskit-ai/connectors-catalog/server/notion`.
|
|
4
|
+
This adapter accepts an internal connection token using `api-key`, or a
|
|
5
|
+
project-owned public connection using `oauth2`. It pins
|
|
6
|
+
`Notion-Version: 2026-03-11`. Hosted Notion MCP uses a separate connection mode and client registration.
|
|
7
|
+
Its controlled editor journey is verified; live consent remains untested.
|
|
8
|
+
|
|
9
|
+
## Set up access
|
|
10
|
+
|
|
11
|
+
1. Open [Notion's Developer portal](https://www.notion.so/profile/integrations)
|
|
12
|
+
with permission to create a connection in the intended workspace.
|
|
13
|
+
2. In **Build → Internal connections**, choose **Create a new connection**, enter
|
|
14
|
+
a name, and select the installation workspace.
|
|
15
|
+
3. In **Configuration**, enable **Read content** and copy the **Installation
|
|
16
|
+
access token**. Store the connection token outside application source
|
|
17
|
+
as `NOTION_API_KEY`.
|
|
18
|
+
4. Use **Content access → Edit access**, or on a page open **••• → Connections →
|
|
19
|
+
+ Add connection**. Select the connection and intended content. Parent access
|
|
20
|
+
includes children. An internal connection is workspace-specific.
|
|
21
|
+
5. In `integrations.json`, select provider `notion`, mode `shared` or `assistant`,
|
|
22
|
+
empty `scopes`, and authentication method `api-key` with secret reference
|
|
23
|
+
`env:NOTION_API_KEY`. No client registration or callback is needed for this mode.
|
|
24
|
+
6. Verify using `connectApiKey`; it performs a title search. Follow the
|
|
25
|
+
[internal connection guide](https://developers.notion.com/guides/get-started/internal-connections)
|
|
26
|
+
and [content authorization instructions](https://developers.notion.com/guides/get-started/authorization).
|
|
27
|
+
|
|
28
|
+
## Runtime and AI composition
|
|
29
|
+
|
|
30
|
+
`content.search` accepts `query`, `page_size` (1–100), and `start_cursor` and
|
|
31
|
+
returns the provider's list envelope, including `has_more` and `next_cursor`.
|
|
32
|
+
This is title search over accessible pages/data sources, not arbitrary full-text
|
|
33
|
+
search. `identity.read` returns the token's user; the response may describe a
|
|
34
|
+
bot or a person. See [Search](https://developers.notion.com/reference/post-search)
|
|
35
|
+
and [Token identity](https://developers.notion.com/reference/get-self).
|
|
36
|
+
|
|
37
|
+
Apply the [API-key source pattern](../patterns/api-key-connection/PATTERN.md)
|
|
38
|
+
with this provider. The application owns which callers may search the shared
|
|
39
|
+
workspace. It supplies the same JSON file whether configured by a CLI or UI.
|
|
40
|
+
Page content, product screens and any writes remain separate application work.
|
|
41
|
+
|
|
42
|
+
## Provisioning automation and capacity
|
|
43
|
+
|
|
44
|
+
An AI can prepare the library wiring and configuration; these ordinary internal
|
|
45
|
+
connection instructions still require a workspace operator to create the token
|
|
46
|
+
and share content. This pass has not verified an administrative API that creates
|
|
47
|
+
equivalent connections across arbitrary workspaces. Do not infer that from
|
|
48
|
+
Notion's content API or use undocumented console endpoints.
|
|
49
|
+
|
|
50
|
+
Each application supplies its intended Notion connection. Check provider limits
|
|
51
|
+
for that connection/workspace; different names do not prove isolated capacity
|
|
52
|
+
or permit one workspace's data to be shared with another. Unrelated app users require the separate public OAuth mode.
|
|
53
|
+
|
|
54
|
+
Fixtures cover version headers, JSON search bodies, cursors, file restart,
|
|
55
|
+
credential rotation, owner isolation, and rejected or malformed responses.
|
|
56
|
+
No Notion workspace was connected during testing.
|
|
57
|
+
|
|
58
|
+
## Public OAuth connection
|
|
59
|
+
|
|
60
|
+
Use [Notion's public connection guide](https://developers.notion.com/guides/get-started/public-connections)
|
|
61
|
+
and the inline OAuth setup instructions. In the Developer portal choose
|
|
62
|
+
Build → Public connections, create the connection with its installation scope,
|
|
63
|
+
Read content capability and exact application callback, then retrieve the client
|
|
64
|
+
ID and secret from Configuration. Store the secret and callback in Env.
|
|
65
|
+
|
|
66
|
+
The JSON registration uses source `own`, `tokenEndpointAuthMethod`
|
|
67
|
+
`client_secret_basic`, `clientId`, `clientSecretRef` and `callbackUrlRef`.
|
|
68
|
+
The integration uses method `oauth2`, `registrationRef`, empty `scopes` and the
|
|
69
|
+
intended shared/per-user account mode. The app owns its callback route and uses
|
|
70
|
+
`beginAuthorization`, `completeAuthorization`, `invoke` and `disconnect` from
|
|
71
|
+
the common connection service with its authorized owner and configured storage.
|
|
72
|
+
Laravel implements the same provider protocol in its own framework; JSKIT
|
|
73
|
+
contains no PHP runtime. Vibe64 edits this configuration and the project's Env.
|
|
74
|
+
|
|
75
|
+
The adapter sends owner=user and the exact callback at authorization. It uses
|
|
76
|
+
confidential Basic authentication and JSON requests at the token endpoint, per
|
|
77
|
+
[Notion's authorization guide](https://developers.notion.com/guides/get-started/authorization).
|
|
78
|
+
PKCE is disabled for this documented confidential flow; common state checks
|
|
79
|
+
and single-use attempts remain active. API requests include the pinned version.
|
|
80
|
+
The runtime retains rotated refresh tokens and refreshes expiring grants using
|
|
81
|
+
the existing lifecycle. No artificial expiry is invented when the provider
|
|
82
|
+
omits it; that case follows the common runtime's non-expiring-token behavior.
|
|
83
|
+
|
|
84
|
+
The controlled OAuth test covers request encoding/authentication, callback,
|
|
85
|
+
replay rejection, two refresh rotations across storage restart, version headers
|
|
86
|
+
and another app user's denied access. Browser coverage, hosted MCP and live
|
|
87
|
+
Notion consent remain unproven. This is data authorization, not app login.
|
|
88
|
+
|
|
89
|
+
## Hosted assistant MCP
|
|
90
|
+
|
|
91
|
+
Set `settings.connectionType` to `mcp` (default `rest`). Select account mode
|
|
92
|
+
`assistant`, OAuth with a separate own registration using `client_secret_post`,
|
|
93
|
+
and scope `default`. `registerNotionMcpClient({clientName, callbackUrl}, options)`
|
|
94
|
+
uses the existing bounded registration helper; the caller owns authorization
|
|
95
|
+
and secret storage. Never reuse REST client credentials.
|
|
96
|
+
|
|
97
|
+
Notion's [MCP metadata](https://mcp.notion.com/.well-known/oauth-authorization-server)
|
|
98
|
+
provides the separate authority. The runtime uses S256, form token requests and
|
|
99
|
+
https://mcp.notion.com/mcp. Verification initializes MCP and lists tools;
|
|
100
|
+
`tools.call` requires the host's authorization of the exact name and arguments.
|
|
101
|
+
Use the ordinary connection service in assistant execution mode for assistant
|
|
102
|
+
permission enforcement. This mode exposes no REST operations.
|
|
103
|
+
|
|
104
|
+
The editor's Connection type field switches the credential family and creates
|
|
105
|
+
a new OAuth registration slot. It offers assistant-only ownership and the MCP
|
|
106
|
+
setup instructions, including a manual registration request and Env handoff.
|
|
107
|
+
Controlled tests cover registration, an ambiguous registration failure without
|
|
108
|
+
retry, separate endpoints, PKCE, encoding, refresh after restart and tool
|
|
109
|
+
discovery. Controlled browser verification covers all three modes, their setup links,
|
|
110
|
+
credential separation, failure recovery and reload. Live consent is untested.
|
|
111
|
+
|
|
112
|
+
## Content operations and native-framework composition
|
|
113
|
+
|
|
114
|
+
The same project-owned connection service now exposes pages.get, databases.get,
|
|
115
|
+
dataSources.get, blocks.list, dataSources.query, pages.create, pages.update and
|
|
116
|
+
blocks.append. Use database.data_sources to select a source, then read its schema.
|
|
117
|
+
Query with id, page_size/start_cursor and optional provider-shaped filter/sorts.
|
|
118
|
+
Read nested blocks separately while has_children; follow has_more/next_cursor.
|
|
119
|
+
Create pages with parentId, parentType (page_id or data_source_id), properties
|
|
120
|
+
and optional children. Update properties by page id; append children by block/page id.
|
|
121
|
+
Documents are bounded to64KiB; append batches1–100 blocks,256KiB total.
|
|
122
|
+
Read content capability is required; Insert content permits creation/append,
|
|
123
|
+
Update content permits property edits. Grant access to the parent pages as well.
|
|
124
|
+
Connection verification still only searches, never writes. Approval and rendering
|
|
125
|
+
belong to the app; an uncertain write is not automatically repeated.
|
|
126
|
+
|
|
127
|
+
CLI JSKIT uses service.invoke with these operations and the same file/Env config.
|
|
128
|
+
Other frameworks implement these documented requests using their native Notion
|
|
129
|
+
client and app-owned credential storage; this library contains no PHP code.
|
|
130
|
+
Example: pages.create can add a meeting note, then blocks.append adds an action.
|
|
131
|
+
**LIMITATIONS:** No embedded Notion editor, database/schema administration, file
|
|
132
|
+
uploads or automatic coding-chat attachment. Nested paging/rendering is app-owned.
|
|
133
|
+
Controlled fixtures, not live workspace or generated-app execution.
|
|
134
|
+
|
|
135
|
+
References: [data sources](https://developers.notion.com/guides/get-started/upgrade-guide-2025-09-03),
|
|
136
|
+
[create page](https://developers.notion.com/reference/post-page),
|
|
137
|
+
[append blocks](https://developers.notion.com/reference/patch-block-children).
|