Skip to main content
One tool covers external systems over MCP: driftless_broker. It operates a Connection that already exists, and never connects or disconnects one (setup is a human-led flow in the dashboard or CLI, not on the MCP surface). If an agent needs an operation the tool does not list, it must report the missing capability, never author a script.
The Broker is gated: off by default in production (DRIFTLESS_BROKER_ENABLED), with a separate external lane (DRIFTLESS_BROKER_ROLLOUT) and per-principal grants. A listed action is not a usable one: a faceless OAuth/MCP caller with no grant gets an empty result even against a healthy connection.

The broker tool

driftless_broker is action-based: pass action to pick the operation. Credentials resolve server-side and every call is audited. Setup (connect / disconnect) and authoring Nango scripts are separate, human-only lanes not reachable here.

Actions

ActionPurposeEffect
connectionsList the workspace’s Connections with health and criterionread
operationsList a provider’s operations, or search across providersread
capabilitiesThe capability directory (kinds, effects, states, gates)read
inspectFull spec of one operation (schema, effect, risk, idempotency)read
invokeExecute one named operation inline (read or write)read / write
modelsImportable record models (enabled syncs)read
recordsRead a synced model’s records from the mirrorread
page-contentRead one page’s bounded, citeable text, liveread
index-previewDry-run index: candidate counts and samplesread
indexMaterialize connector documents (Driftless-owned)write (internal)
eventsThe inbound provider event feedread
attach-criterion / detach-criterionAttach or remove a Knowledge criterion slug on a Connectionadmin
driftless_broker action:'connections'
driftless_broker action:'capabilities' provider:'notion'   → only a `ready` capability is usable

Gates and permissions

Three independent, fail-closed gates apply to an external caller, in order: the master switch (DRIFTLESS_BROKER_ENABLED), the external lane (DRIFTLESS_BROKER_ROLLOUT), and a per-principal grant. An operation must also be policy-allowed; in production the policy registry ships empty, so no write is invokable.
ScopeCovers
broker:readconnections, operations, capabilities, inspect, models, records, page-content, events
broker:invokeinvoke (a read or write operation)
broker:adminattach-criterion / detach-criterion; grants are owner/admin
The broker:* scopes are enforced only when the Broker is enabled, and they gate the lane on top of rollout and grants. An internal caller (an owned API key or dashboard session) skips the grant gate but still needs the rest.

Reads and materialization

The reads differ in whether they hit the provider live and what they create. records reads the mirror/cache; page-content reads live; index materializes Driftless-owned connector documents; import (a REST route, not an MCP action) maps mirror records into Collection Records. Normal context retrieve never queries a provider.
driftless_broker action:'records' provider:'notion' model:'ContentMetadata' limit:5   → from the mirror
driftless_broker action:'page-content' page_id:'<pageId>'                              → live, bounded, cited

Availability

CapabilityState
driftless_broker tool listedOnly when DRIFTLESS_BROKER_ENABLED is on
Notion reads (records, page-content, index)Beta, read-only
Broker writes (invoke a write op) in productionNot available (policy registry ships empty)
Synthesized per-workspace read tools (driftless_<provider>_records)Available only when synthesis is enabled and a capability is ready
Write-capability synthesisNot available (never synthesized)