@zackbart/connecta 0.34.0 → 0.34.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/CHANGELOG.md +30 -0
- package/README.md +3 -2
- package/bin/version.mjs +1 -1
- package/dist/catalog-drift.d.ts +30 -26
- package/dist/catalog-drift.js +169 -84
- package/dist/catalog-service.js +1 -1
- package/dist/connectors/api-connector.d.ts +3 -0
- package/dist/connectors/api-connector.js +5 -1
- package/dist/connectors/option-shapes.js +1 -1
- package/dist/connectors/remote-mcp.d.ts +2 -0
- package/dist/connectors/remote-mcp.js +5 -1
- package/dist/describe-config.d.ts +2 -0
- package/dist/describe-config.js +1 -0
- package/dist/invocation.js +3 -2
- package/dist/meta-tools.js +3 -2
- package/dist/operator-ui/config-summary.js +3 -0
- package/dist/operator-ui/connection-map.js +2 -1
- package/dist/operator-ui/endpoints.js +1 -1
- package/dist/operator-ui/generated.js +3 -3
- package/dist/operator-ui/health.js +52 -0
- package/dist/operator-ui/overview.js +6 -17
- package/dist/operator-ui/view.d.ts +3 -4
- package/dist/operator-ui/view.js +29 -11
- package/dist/provider.d.ts +6 -1
- package/dist/provider.js +18 -1
- package/dist/providers/_shared/google/workspace.d.ts +3 -0
- package/dist/providers/_shared/google/workspace.js +1 -1
- package/dist/providers/basecamp/index.d.ts +2 -0
- package/dist/providers/breeze/index.d.ts +2 -0
- package/dist/providers/ccb/index.d.ts +2 -0
- package/dist/providers/ccb/index.js +1 -1
- package/dist/providers/cloudflare/index.d.ts +2 -0
- package/dist/providers/cloudflare/index.js +5 -1
- package/dist/providers/cloudflare/openapi.generated.js +3296 -3206
- package/dist/providers/cloudflare/rest.js +19 -0
- package/dist/providers/cloudflare/skill.generated.js +2 -2
- package/dist/providers/cloudflare/value-safety.js +51 -18
- package/dist/providers/intercom/index.d.ts +24 -0
- package/dist/providers/intercom/index.js +121 -0
- package/dist/providers/intercom/skill.generated.js +8 -0
- package/dist/providers/linear/index.js +204 -19
- package/dist/providers/linear/skill.generated.js +2 -2
- package/dist/providers/mixpanel/index.d.ts +2 -0
- package/dist/providers/mixpanel/index.js +21 -17
- package/dist/providers/mixpanel/skill.generated.js +1 -1
- package/dist/providers/notion/index.d.ts +2 -0
- package/dist/providers/notion/index.js +1 -1
- package/dist/providers/overflow/index.d.ts +2 -0
- package/dist/providers/planning-center/index.d.ts +2 -0
- package/dist/providers/revenuecat/index.d.ts +5 -3
- package/dist/providers/revenuecat/index.js +147 -7
- package/dist/providers/revenuecat/skill.generated.js +3 -3
- package/dist/providers/stripe/index.d.ts +2 -0
- package/dist/providers/stripe/index.js +50 -30
- package/dist/providers/stripe/skill.generated.js +2 -1
- package/dist/providers/tithely/index.d.ts +2 -0
- package/dist/providers/vercel/index.d.ts +2 -0
- package/dist/providers/vercel/index.js +1 -1
- package/dist/providers/vercel/openapi.generated.js +391 -374
- package/dist/providers/vercel/skill.generated.js +1 -1
- package/dist/providers/vercel/value-safety.js +14 -4
- package/dist/registry.d.ts +10 -14
- package/dist/registry.js +62 -62
- package/dist/routes/ui-data.js +8 -2
- package/dist/skills.js +8 -2
- package/dist/types.d.ts +18 -4
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/documentation/architecture.md +48 -5
- package/documentation/code-mode.md +7 -5
- package/documentation/integrating.md +55 -1
- package/documentation/meta-tools.md +2 -2
- package/documentation/operating.md +1 -1
- package/documentation/operator-tests.md +8 -2
- package/documentation/operator-ui.md +58 -11
- package/documentation/provider-auth-migration.md +22 -0
- package/package.json +5 -1
- package/templates/node/package.json +1 -1
|
@@ -283,7 +283,7 @@ signature is byte-identical to the one `search_tools` returns.
|
|
|
283
283
|
integration is ambiguous. `safety: "readOnly"` selects stored read verdicts;
|
|
284
284
|
`"approvalRequired"` selects stored write verdicts; omitted or `"all"` selects
|
|
285
285
|
both. Search and describe rows carry `classification`. These filters grant no
|
|
286
|
-
authority and change no call admission decision. On a read-only endpoint,
|
|
286
|
+
authority and change no call admission decision. On a read-only endpoint or connector,
|
|
287
287
|
search and describe omit write tools (`W12`): a write is absent from every
|
|
288
288
|
filter, and describing one is `unknown_tool`. `connecta.skill` guides are not
|
|
289
289
|
filtered and may name such a write; calling it is still refused.
|
|
@@ -569,7 +569,7 @@ direct calls; and `input_required_invalid`, `input_required_limit`,
|
|
|
569
569
|
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
|
|
570
570
|
| `unknown_address` | no visible connector owns the tool address or grants the resource reader | false |
|
|
571
571
|
| `unknown_tool` | the connector has no such tool | false |
|
|
572
|
-
| `read_only_endpoint` | a program on a read-only endpoint attempted a write (`E4`)
|
|
572
|
+
| `read_only_endpoint` | a program on a read-only endpoint or connector attempted a write (`E4`) | false |
|
|
573
573
|
| `auth_required` | the credential is missing, expired, or rejected | false |
|
|
574
574
|
| `invalid_args` | arguments or discovery bounds were rejected | false |
|
|
575
575
|
| `not_found` | the downstream answered and the resource is not there — the one code that says skip this id rather than stop, raised only where the provider tells absence from a permission gap | false |
|
|
@@ -594,7 +594,7 @@ direct calls; and `input_required_invalid`, `input_required_limit`,
|
|
|
594
594
|
sentence. A program cannot recover credentials — only an operator can — so stop
|
|
595
595
|
and let the failure reach the model.
|
|
596
596
|
|
|
597
|
-
**E4.** A tool classified as a write never runs on a read-only endpoint
|
|
597
|
+
**E4.** A tool classified as a write never runs on a read-only endpoint or connector
|
|
598
598
|
(`W12`). A program's call is refused with `read_only_endpoint` before
|
|
599
599
|
validation and before anything is sent. The refusal carries no `nextAction` and
|
|
600
600
|
echoes no arguments: no route on that endpoint writes, so the program reports
|
|
@@ -702,7 +702,7 @@ errors retain their contributing connectors as well.
|
|
|
702
702
|
Search counts, ranking, and term analysis retain every searched connector,
|
|
703
703
|
including matches outside the returned page or beyond the requested offset.
|
|
704
704
|
Each page rechecks current auth,
|
|
705
|
-
grants, pool membership, and
|
|
705
|
+
grants, pool membership, and endpoint OR connector `readOnly`. Reading a stash inside a program carries
|
|
706
706
|
its dependencies forward to any new return stash. The page cap is the smallest
|
|
707
707
|
of the deployment cap and contributing connectors' effective `maxResultBytes`.
|
|
708
708
|
Read-only endpoints cannot page write results. A UUID is a handle, never a grant.
|
|
@@ -1026,7 +1026,9 @@ sent and records nothing: it was never an attempt (`W9`).
|
|
|
1026
1026
|
Whether an endpoint writes belongs to deployment code. Every deployment sets
|
|
1027
1027
|
`readOnly` for `/mcp` explicitly; construction fails without it. Each named pool inherits
|
|
1028
1028
|
the deployment's `readOnly` unless it sets its own, in either direction. The
|
|
1029
|
-
client owns approval
|
|
1029
|
+
client owns approval. Every connector also accepts optional `readOnly?: boolean`
|
|
1030
|
+
(default `false`), enforced on every endpoint. Effective read-only is endpoint OR
|
|
1031
|
+
connector; setting connector `false` cannot reopen a read-only endpoint.
|
|
1030
1032
|
|
|
1031
1033
|
```ts
|
|
1032
1034
|
createConnecta({
|
|
@@ -3,6 +3,21 @@
|
|
|
3
3
|
Use this guide to change connectors in deployment configuration.
|
|
4
4
|
[All agent routes](./README.md) are in the index.
|
|
5
5
|
|
|
6
|
+
## Make one connection read-only
|
|
7
|
+
|
|
8
|
+
Every connector accepts optional `readOnly?: boolean`, defaulting to `false`:
|
|
9
|
+
`remoteMcp("notes", { url: "https://notes.example.com/mcp", auth: { type: "headers", headers: {} }, readOnly: true })`,
|
|
10
|
+
`api("tickets", { readOnly: true, tools: [] })`, and maintained providers such as
|
|
11
|
+
`stripe("billing", { purpose: "Revenue reports", auth: { type: "oauth" }, readOnly: true })`.
|
|
12
|
+
A custom `Connector` sets `readOnly: true` on its connector object.
|
|
13
|
+
|
|
14
|
+
Only tools classified read appear in search and describe, and every write or
|
|
15
|
+
unclassified tool call is refused before dispatch on every endpoint, including
|
|
16
|
+
maintainers' plain `/mcp`, programs, `call_tool`, and `call_destructive_tool`.
|
|
17
|
+
Effective read-only is endpoint `readOnly` OR connector `readOnly`; connector
|
|
18
|
+
`false` never widens an endpoint. Existing pool/deployment inheritance is unchanged.
|
|
19
|
+
Guides may still name unavailable tools. The operator UI shows a Read-only badge.
|
|
20
|
+
|
|
6
21
|
## Add or remove a connector
|
|
7
22
|
|
|
8
23
|
Connectors are code-owned. Edit the deployment's `src/connecta.config.ts`;
|
|
@@ -92,7 +107,7 @@ const tracker = linear("tracker", {
|
|
|
92
107
|
```
|
|
93
108
|
|
|
94
109
|
Linear defaults to OAuth; its read-only endpoint requests only the downstream
|
|
95
|
-
read scope. That is separate from
|
|
110
|
+
read scope. That is separate from Connecta endpoint or connector `readOnly`. Read the installed `dist/providers/linear/index.d.ts` for API-key framing,
|
|
96
111
|
workspace instructions, and admission choices.
|
|
97
112
|
|
|
98
113
|
The [human README](../README.md#what-you-can-connect) lists available
|
|
@@ -107,6 +122,34 @@ pool's `owner` instead ([auth guide](auth.md#pool-owners-for-google-workspace)).
|
|
|
107
122
|
A request must not choose its own account. Gmail never sends mail, and Drive never permanently
|
|
108
123
|
deletes files.
|
|
109
124
|
|
|
125
|
+
Intercom uses `intercom()` from `@zackbart/connecta/providers/intercom`:
|
|
126
|
+
|
|
127
|
+
```ts
|
|
128
|
+
import { intercom } from "@zackbart/connecta/providers/intercom";
|
|
129
|
+
|
|
130
|
+
const support = intercom("support", {
|
|
131
|
+
purpose: "Customer support triage",
|
|
132
|
+
region: "eu",
|
|
133
|
+
});
|
|
134
|
+
// Add support to the deployment's connectors array.
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Set `region` explicitly to `"us"` or `"eu"` to match the workspace; AU is
|
|
138
|
+
unsupported. OAuth defaults to personal ownership because it acts as the
|
|
139
|
+
authorizing teammate. Non-loopback OAuth callbacks require an Intercom Customer
|
|
140
|
+
Support allowlist entry for the deployment's redirect URI before authorization
|
|
141
|
+
can complete. Alternatively, set `auth: { type: "credential" }` and connect an
|
|
142
|
+
API token through the [shared credential procedure](./auth.md#connect-a-shared-credential);
|
|
143
|
+
token auth defaults to shared ownership. Fin Operator tools require OAuth,
|
|
144
|
+
workspace availability and teammate permission. Their expected absence adds no
|
|
145
|
+
missing-tool drift; missing core tools still do. Schema coverage reports all
|
|
146
|
+
present reviewed tools as unpinned. Article operations, internal
|
|
147
|
+
notes and Operator actions can write; a note can reopen a snoozed conversation.
|
|
148
|
+
Use a read-only endpoint when writes are unwanted. Catalog review is based on
|
|
149
|
+
[Intercom's docs](https://developers.intercom.com/docs/guides/mcp), with unpinned
|
|
150
|
+
schemas; inspect live tools and the runtime guide before acting on sensitive
|
|
151
|
+
customer data.
|
|
152
|
+
|
|
110
153
|
Wispr Flow uses OAuth only through `wisprFlow()` from
|
|
111
154
|
`@zackbart/connecta/providers/wispr-flow`. It reaches the authorized account's
|
|
112
155
|
Notetaker content, with personal and work accounts holding separate data.
|
|
@@ -116,6 +159,8 @@ reviewed classification includes task writes listed in Claude's directory even
|
|
|
116
159
|
though Wispr's public help describes read-only access; discover the account's
|
|
117
160
|
actual tools before assuming those writes exist.
|
|
118
161
|
|
|
162
|
+
For minimal Stripe OAuth/API-key examples with and without connector `readOnly`, see [Stripe setup](./provider-auth-migration.md#stripe). With an API key, prefer a restricted `rk_` key with only read permissions for read-only access; Stripe enforces it too.
|
|
163
|
+
|
|
119
164
|
Stripe requires `auth`: `{ type: "oauth" }` reaches Stripe's hosted MCP
|
|
120
165
|
server, and `{ type: "apiKey" }` with `mode` reaches Connecta's REST connector
|
|
121
166
|
with an operator-managed key. Notion requires `auth` the same way:
|
|
@@ -221,6 +266,15 @@ for precedence, schema digests, and `unlisted: "hide"`. Review the behavior
|
|
|
221
266
|
before declaring a read, and do not use classification to bypass provider target
|
|
222
267
|
scopes or caller grants.
|
|
223
268
|
|
|
269
|
+
A reviewed name is required by default for drift comparison. Mark a tool
|
|
270
|
+
`optional: true` only when the downstream can omit it because of plan,
|
|
271
|
+
feature, or permission gating. For example, a remote `crm` connector can use
|
|
272
|
+
`classify: { tools: { list_accounts: "read", list_customers: { verdict: "read",
|
|
273
|
+
optional: true } } }`. Absence of `list_customers` then adds no unserved count;
|
|
274
|
+
when present, its verdict, annotations, and any pinned schema are still checked.
|
|
275
|
+
A missing schema pin means that tool's schema has not been verified against a
|
|
276
|
+
review. Zero schema changes alone does not establish a matching schema.
|
|
277
|
+
|
|
224
278
|
## A hand-written HTTP capability
|
|
225
279
|
|
|
226
280
|
Define only the operations the deployment needs. Every `api()` tool needs a
|
|
@@ -35,7 +35,7 @@ is annotated `readOnlyHint: true, destructiveHint: false` on a read-only
|
|
|
35
35
|
endpoint, and `readOnlyHint: false, destructiveHint: true` on a writable one.
|
|
36
36
|
Approval belongs to the client. A read-only endpoint keeps all six tools, omits
|
|
37
37
|
write tools from `search_tools` results and describe, and refuses every write
|
|
38
|
-
call
|
|
38
|
+
call. Connector `readOnly` applies the same restriction on every endpoint; effective read-only is endpoint OR connector. Neither setting changes connector visibility or read grants. Guides
|
|
39
39
|
(`queryAnalysis.guideSummary`, `skills`, `connecta.skill`, skill
|
|
40
40
|
`resources/read`) are documentation and may name tools the endpoint refuses. The four tools with structured-only success results
|
|
41
41
|
advertise `outputSchema`. The two direct-call tools omit it because their default
|
|
@@ -533,7 +533,7 @@ cap and a 32 KiB program bridge ceiling, with UTF-8 alignment and forward progre
|
|
|
533
533
|
returning pages unchanged can hit the program result cap. The admitted subject
|
|
534
534
|
and principal, endpoint/pool, request origin, connector, and tool bindings must
|
|
535
535
|
match. The host rechecks current access and whether the endpoint is read-only
|
|
536
|
-
before returning each page; a read-only endpoint cannot read a write stash.
|
|
536
|
+
before returning each page; a read-only endpoint or connector cannot read a write stash.
|
|
537
537
|
Caller arguments select no partition. A read-only endpoint never runs a write,
|
|
538
538
|
so every write result it could page came from a writable endpoint.
|
|
539
539
|
|
|
@@ -24,7 +24,7 @@ descriptions. On a writable endpoint, programs and `call_destructive_tool` may
|
|
|
24
24
|
write within the caller's grants, and `execute_code` is annotated as a write;
|
|
25
25
|
the client controls approval. On a read-only endpoint, search and describe omit
|
|
26
26
|
write tools and every write call is refused with `read_only_endpoint`, even one
|
|
27
|
-
a connector guide names; tell the user rather than looking for another route. Never change pool, identity, or `readOnly` to work
|
|
27
|
+
a connector guide names; tell the user rather than looking for another route. A connector marked Read-only serves only read-classified tools even on a writable endpoint; writes and unclassified tools are omitted from search/describe and refused on every call path. Endpoint and connector restrictions compose by OR. Never change pool, identity, or `readOnly` to work
|
|
28
28
|
around a refusal.
|
|
29
29
|
[Routing between the call surfaces](./meta-tools.md#routing-between-the-call-surfaces)
|
|
30
30
|
owns the full decision rules.
|
|
@@ -61,7 +61,7 @@ pool member, who gets the member page, with no tabs, on every path.
|
|
|
61
61
|
| Activity | No calls | Activity | Member page, no activity request |
|
|
62
62
|
| Settings | Snapshot without connectors or pools | Config | Member page, no configuration facts |
|
|
63
63
|
|
|
64
|
-
Populated Overview has a failing connector,
|
|
64
|
+
Populated Overview has a failing connector, auth and credential problems
|
|
65
65
|
and a tokenless agent in its attention list. Populated Endpoints shows who can use each endpoint; populated Tokens has one
|
|
66
66
|
agent per slot state, with pools and last seen.
|
|
67
67
|
|
|
@@ -102,7 +102,13 @@ empty catalog counts zero.
|
|
|
102
102
|
`test/browser/operator-overview.spec.ts` covers the Overview on the frozen v2
|
|
103
103
|
fixtures: the status pill, stat labels and numbers, map columns, dashed read-only grants and dotted
|
|
104
104
|
tokenless access; attention rows with their fix links, a copied fix prompt equal
|
|
105
|
-
to the catalogue's text
|
|
105
|
+
to the catalogue's text, config order through a staggered full refresh, prototype-named
|
|
106
|
+
connector IDs during loading and failure, and stable single-card height when
|
|
107
|
+
its catalog empties. A single long-id, long-title card at 320, 390, 1024 and
|
|
108
|
+
1440px covers all eight status labels, both auth scopes, with and without the
|
|
109
|
+
Read-only badge, tools and an action. Text rows stay single-line, full text
|
|
110
|
+
remains accessible, links stay focusable, and the detail header and Overview
|
|
111
|
+
attention rows retain their height; the hover
|
|
106
112
|
sentence replacing the legend, and dimming; keyboard focus in column order with each node's sentence
|
|
107
113
|
as its accessible name, Enter opening an endpoint's row and a connector; the
|
|
108
114
|
narrow list, whose caller chips link where their map nodes do; an empty deployment; and a member at `/` getting the member page
|
|
@@ -68,15 +68,16 @@ parameters such as signed handoffs. A pool member sees the
|
|
|
68
68
|
marks; a tokenless agent's mark is hollow). A dot legend counts each segment
|
|
69
69
|
kind; the first two tiles link to their pages. At 760px and below the tiles
|
|
70
70
|
sit two up, with People · Agents as one row across both.
|
|
71
|
-
- **Needs attention.** One row per connector whose health is not ok,
|
|
72
|
-
|
|
71
|
+
- **Needs attention.** One row per connector whose health is not ok, in
|
|
72
|
+
configuration order, then one per agent in a pool whose token is missing or revoked. A
|
|
73
73
|
row names the problem ("crm needs authorization"), the endpoints it
|
|
74
74
|
affects ("Affects /mcp and /mcp/team") or the agent URL it can't connect at,
|
|
75
|
-
and links to the existing fix: Connect, Replace key
|
|
75
|
+
and links to the existing fix: Connect, Replace key or Inspect on
|
|
76
76
|
the connector's Connection tab, or Issue token on Tokens. A row with a
|
|
77
|
-
problem code
|
|
77
|
+
problem code also has Copy fix prompt. A problem keeps its row and
|
|
78
78
|
prompt when the connector's detail read failed, prefixed "Details didn't
|
|
79
|
-
load".
|
|
79
|
+
load". Surviving connector rows retain their order as individual reads settle,
|
|
80
|
+
even when their severity changes. With no rows it reads "All clear".
|
|
80
81
|
- **Who reaches what.** The [connection map](#connection-map).
|
|
81
82
|
|
|
82
83
|
### Connection map
|
|
@@ -134,15 +135,37 @@ cells for the root), guarded grants' live verdicts, and read-only mode.
|
|
|
134
135
|
### Connectors
|
|
135
136
|
|
|
136
137
|
One card per connector: title and id, one status pill, a Shared or Per person
|
|
137
|
-
badge, its tool count over a read and write bar, and when it was last called.
|
|
138
|
+
badge, a Read-only badge when connector `readOnly` is enabled, its tool count over a read and write bar, and when it was last called.
|
|
138
139
|
All, Needs attention and Healthy filter the cards, with counts, beside a
|
|
139
140
|
search field. A connector that is not fine adds one action (Connect, Replace
|
|
140
|
-
key
|
|
141
|
+
key or Inspect) that opens its Connection tab.
|
|
141
142
|
|
|
142
143
|
Every view shares one verdict per connector: the server's problem code first
|
|
143
144
|
(a failed catalog reads "Catalog failed", never "Connected"), then a failed
|
|
144
|
-
detail read ("Couldn't load", with no fix prompt), then a non-ok status
|
|
145
|
-
|
|
145
|
+
detail read ("Couldn't load", with no fix prompt), then a non-ok status.
|
|
146
|
+
Catalog drift is informational: it stays in the connector's Connection panel
|
|
147
|
+
with its fix prompt and in Activity, and never affects health or attention.
|
|
148
|
+
|
|
149
|
+
Health does not bounce while details load. A connector whose detail read is
|
|
150
|
+
in flight (its `/ui/data` row is `loading`, during sign-in, Retry or a
|
|
151
|
+
connector's Refresh) keeps the verdict the page last showed for it on every
|
|
152
|
+
view (cards, filter counts, the Overview headline, bar, attention list and map,
|
|
153
|
+
Endpoints and the connector page) until that read settles, never "Loading
|
|
154
|
+
details" or an in-between verdict. A connector with no earlier verdict shows
|
|
155
|
+
its contract status. Each connector changes only when its own read settles,
|
|
156
|
+
so one slow read never holds back the others and no row moves for an
|
|
157
|
+
in-between verdict. A new signed-in identity starts fresh. Cards reserve the action footer
|
|
158
|
+
even when no action is needed and the tool bar row even when the catalog is
|
|
159
|
+
empty. Each card header keeps its title, status and id/scope badges on single
|
|
160
|
+
lines; long text truncates with ellipsis and retains its full value on hover
|
|
161
|
+
and for screen readers. The connector detail header and Overview attention
|
|
162
|
+
text follow the same rule, and truncated links remain keyboard focusable.
|
|
163
|
+
Wider status labels never change the card height.
|
|
164
|
+
|
|
165
|
+
The top bar uses an icon-only Search button (⌘K or Ctrl+K opens the palette).
|
|
166
|
+
Deployment names stay on one line with ellipsis and their full name on hover;
|
|
167
|
+
a name matching the product label is omitted. Tabs scroll horizontally when
|
|
168
|
+
needed, moving to a second row on narrow screens.
|
|
146
169
|
|
|
147
170
|
A List / Matrix toggle (`?view=matrix`) switches to a table of connectors by
|
|
148
171
|
endpoint, `/mcp` first. A row header is the connector's monogram and name, plus
|
|
@@ -181,6 +204,30 @@ tabs:
|
|
|
181
204
|
- **Activity.** The [Activity](#activity) page for that connector, without
|
|
182
205
|
connector chips or monograms.
|
|
183
206
|
|
|
207
|
+
#### Read catalog drift
|
|
208
|
+
|
|
209
|
+
The connector's drift panel reports the last catalog comparison in this
|
|
210
|
+
runtime and identity partition. It never lists tool names or schemas. A
|
|
211
|
+
personal OAuth refresh belongs to that user; another user or endpoint subject
|
|
212
|
+
does not inherit it. A runtime restart or bounded observation eviction resets
|
|
213
|
+
the report until another listing is served.
|
|
214
|
+
|
|
215
|
+
“No catalog refresh yet” means this partition has no observation. “No reviewed
|
|
216
|
+
baseline” means a listing was observed without a reviewed classification.
|
|
217
|
+
“Matches the reviewed manifest” requires a baseline, successful verification,
|
|
218
|
+
no differences, and schema pins for every live reviewed tool. “Schemas not
|
|
219
|
+
pinned” and “Partial schema coverage” describe missing review evidence; they
|
|
220
|
+
are not clean schema comparisons. “Schema verification unavailable” replaces
|
|
221
|
+
an earlier successful report if hashing fails. Known differences remain visible
|
|
222
|
+
alongside coverage or verification limits. Each operator refresh returns the
|
|
223
|
+
comparison from the catalog it just loaded, including hashing failures and
|
|
224
|
+
schema changes, without another downstream status probe.
|
|
225
|
+
|
|
226
|
+
The unserved count excludes reviewed names explicitly marked optional for
|
|
227
|
+
plan, feature, or permission gating. Present optional tools still participate
|
|
228
|
+
in annotation and schema comparisons. Dropped tool names are counted even
|
|
229
|
+
without a baseline, and do not establish one.
|
|
230
|
+
|
|
184
231
|
### Settings
|
|
185
232
|
|
|
186
233
|
The configuration snapshot as tiles, tagged "Defined in code", with no
|
|
@@ -264,13 +311,13 @@ red when the calls span more than a minute.
|
|
|
264
311
|
|
|
265
312
|
The top bar is one row: the mark, branding and deployment name, the section
|
|
266
313
|
links (Overview, Endpoints, Connectors, Activity, Tokens, Settings), then
|
|
267
|
-
Search (the command palette, also ⌘K or Ctrl+K), Appearance, and Account
|
|
314
|
+
icon-only Search (the command palette, also ⌘K or Ctrl+K), Appearance, and Account
|
|
268
315
|
(the signed-in account with Sign out or Change token). The mark is connecta's
|
|
269
316
|
drawn "C" only when no product name, owner or favicon is configured; with
|
|
270
317
|
`branding.favicon.svg` it is that SVG; otherwise there is none. The sign-in
|
|
271
318
|
gate shows the same mark above "Sign in". Below 820px the section links move
|
|
272
319
|
to a second row that scrolls sideways and keeps the current section in view,
|
|
273
|
-
|
|
320
|
+
with Search remaining an icon. A member's top bar has only branding and
|
|
274
321
|
Account. The command palette searches visible pages, connectors and tools,
|
|
275
322
|
opening connector results on Tools.
|
|
276
323
|
|
|
@@ -13,6 +13,28 @@ uses one implementation: configure two ids for both.
|
|
|
13
13
|
|
|
14
14
|
## Stripe
|
|
15
15
|
|
|
16
|
+
## Choose OAuth or an API key
|
|
17
|
+
|
|
18
|
+
Import `stripe` from `@zackbart/connecta/providers/stripe`. Choose one of two setup paths:
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
// OAuth: Stripe's hosted MCP. Authorize the connection with Stripe.
|
|
22
|
+
stripe("billing", { purpose: "Payments", auth: { type: "oauth" } });
|
|
23
|
+
stripe("billing", { purpose: "Revenue reports", auth: { type: "oauth" }, readOnly: true });
|
|
24
|
+
|
|
25
|
+
// API key: Connecta's REST connector. Paste the key into this connection in the operator UI.
|
|
26
|
+
stripe("billing", { purpose: "Payments", auth: { type: "apiKey" }, mode: "production" });
|
|
27
|
+
stripe("billing", { purpose: "Revenue reports", auth: { type: "apiKey" }, mode: "production", readOnly: true });
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
For an API key, set `mode` to `"production"` or `"sandbox"` to match the key.
|
|
31
|
+
Use a secret (`sk_`) or restricted (`rk_`) key. For read-only access, prefer a
|
|
32
|
+
restricted `rk_` key configured with only read permissions: Stripe enforces
|
|
33
|
+
those permissions too. Connecta's `readOnly: true` omits non-read tools and
|
|
34
|
+
refuses their calls on every endpoint. Omit it for the default writable connector;
|
|
35
|
+
endpoint restrictions still apply. OAuth needs no `mode` and can reach both live
|
|
36
|
+
and sandbox accounts through Stripe's account selectors.
|
|
37
|
+
|
|
16
38
|
Stripe's hosted MCP server stops accepting secret keys and untagged
|
|
17
39
|
restricted keys on 2026-10-31; Stripe still documents agent-tagged restricted
|
|
18
40
|
keys for it. Connecta's hosted Stripe connection is OAuth only either way, and
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zackbart/connecta",
|
|
3
|
-
"version": "0.34.
|
|
3
|
+
"version": "0.34.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"description": "One MCP to rule them all — a single MCP endpoint aggregating many downstream connectors behind a code-first surface of six meta-tools.",
|
|
@@ -114,6 +114,10 @@
|
|
|
114
114
|
"types": "./dist/providers/infisical/index.d.ts",
|
|
115
115
|
"import": "./dist/providers/infisical/index.js"
|
|
116
116
|
},
|
|
117
|
+
"./providers/intercom": {
|
|
118
|
+
"types": "./dist/providers/intercom/index.d.ts",
|
|
119
|
+
"import": "./dist/providers/intercom/index.js"
|
|
120
|
+
},
|
|
117
121
|
"./providers/linear": {
|
|
118
122
|
"types": "./dist/providers/linear/index.d.ts",
|
|
119
123
|
"import": "./dist/providers/linear/index.js"
|