@checkfu/ui component in Checkfu’s dashboard and
in your own application.
Your backend needs a Checkfu API key and Workspace. The browser does not.
List what this Principal can connect
- Checkfu-owned package name, revision, digest, and review tier;
- minimum scopes and exact reviewed egress destinations;
- normalized tool count and qualification expiry;
- connection flow: managed or protocol OAuth, hosted credential entry, or no credential step;
- opaque hosted or dedicated placement choices and their availability; and
- the Principal’s account lifecycle, health, and optimistic version.
curated, structural, and unreviewed are facts
for the person deciding what to connect, not reasons to silently hide a row.
An unavailable row or placement carries a closed reason such as
qualification_expired or not_configured.
The projection never contains a provider credential, supplier tenant id,
account handle, adapter key, placement handle, or provider authorization URL.
Render the shared Connect Center
Use the statefulConnectCenterAdapter, not a second application-specific
connection state machine. Give it the signed-in Principal id and narrow
browser-to-BFF transport functions; your BFF maps those functions to
createConnectCenterController while retaining the Checkfu Workspace key.
The credential broker example walks the same
transport and server boundary end to end.
ConnectCenterTransport type is the BFF contract. It includes listing,
begin/reconnect/revoke, read/observe/replay of one session, source detection,
credential-free account detail, access plan/apply, and revocation impact. Each
function accepts already-scoped ids and returns the public SDK projection; it
must never return your Checkfu key, a provider credential, or a supplier URL.
The adapter owns search, account labels, minimum-scope display, stable retry
keys, one secret-free active-session locator per Principal, reload recovery,
bounded observation, tool/agent selection, and inventory refresh. Its default
storage is the current tab’s sessionStorage, so a pending ceremony can resume
after reload without sharing recovery state across tabs. It owns no API key,
provider credential, supplier coordinate, or durable Checkfu authority.
Begin setup
Choose one exact offering and one available opaque placement. Keep one idempotency key for the logical attempt until the server responds; reusing it after an ambiguous timeout prevents a duplicate Connection.ProviderPackage and enforces its credential flow, minimum and allowed scopes,
and egress ceiling. The browser never asserts those binding facts, and
caller-authored settings cannot bypass a missing or ambiguous package.
The result owns one durable ConnectionSession and may carry a short-lived
Checkfu-origin nextAction:
Observe or replay the exact session
ConnectionSession is the durable cursor. Observe it instead of searching a
environment-wide account list by label:
connected, revoked, failed, expired, or canceled; it never returns
a provider response or credential. There is no Connection-lifecycle webhook
today, so this helper uses bounded public polling.
If a live human action was lost, replay that exact session under another
caller-owned retry key. Replay cannot create a Connection or broaden scope,
egress, package, placement, or provider authority.
Detect a remote MCP or API source
Detection is credential-free and informative. It never publishes, enables, or connects a source.qualification_required. Network, document,
size, and protocol failures are closed reasons rather than guessed defaults.
Choose tools and agent access
A connected account is still inert. Load its credential-free detail, review the selected tools and agents, then plan before applying. If a native account’s tool catalog is not prepared in this Workspace, detail or tool-list reads return409 validation.conflict. This differs from
404 validation.not_found for a missing or inaccessible Connection. Keep the
failure visible instead of showing an empty tool picker: these reads do not
discover or publish tools.
For a supported native MCP OAuth account, explicitly prepare its catalog with
an authorized Workspace API key. Read the current Connection first with
GET /v1/connections/{id}; the CLI and HTTP examples below use version 3. Set CHECKFU_CONNECTION_ID to that
Connection’s ID and retain CHECKFU_PREPARATION_KEY for this logical attempt.
CLI access and the
TypeScript SDK require an invited alpha artifact.
3. Create
one unique preparation key before the first request. After an ambiguous timeout,
retry the same body with that same key. If the server reports a stale version,
read the Connection again and review its state before starting a new attempt
with its current version and a new key. After preparation, make a fresh tool-list
read with GET /v1/connections/{id}/tools before choosing Agent access.
For an API-key MCP client, search for prepare connected account tools with
checkfu_search_operations. Call the returned connections_prepareConnectionTools
tool using its advertised path, body and idempotency_key schema, then
read tools through connections_listConnectionTools. Principal MCP credentials
expose selected reads and the separately authorized Managed Tool invocation
operation; they cannot perform this connected-account setup mutation. See
MCP discovery.
Preparation uses the account’s stored credential inside server-owned custody.
It binds discovery to the reviewed provider descriptor and publishes only a
complete catalog while that exact Connection version remains active. An
already healthy, complete catalog is reused. It invokes no tools and grants no
Agent access. In the dashboard’s Agent editor, choose the connected account and
click Set up account tools, then review the fresh tool list before adding it
to the draft. Public ToolSource registration and sync remain credential-free
discovery; Integration Runtime accounts use their capability-refresh workflow.
For an account with a prepared catalog:
installation_required, publish_required, or ready. “All current agents”
is an explicit reconciled set, never ambient authority for future agents.
Access and an Agent’s always_allow tool setting do not bypass ActionPolicy.
The generic OAuth MCP package installs a require_approval recommendation;
that decision wins over a separate allow rule. For unattended calls, review
the installed recommendation and explicitly scope the intended policy to the
acting Principal, Agent, Connection, and its published tools. Do not remove unrelated
policies or treat successful access setup as proof that execution is allowed.
During a Run, the harness calls the exact connection_id:tool_name through
CapabilityGateway. Checkfu rechecks PermissionAssignments, ActionPolicy and approval, Connection health
and revision, package/binding digest, exact egress, budget, and invocation
idempotency before credentials are injected server-side.
Reconnect and revoke
Reconnect reserves a distinct immutable successor revision. The predecessor remains the admitted revision until the successor completes.revoked with cleanup_pending: true.
New ToolInvocations are denied throughout asynchronous supplier cleanup.
Drive the same lifecycle from the CLI
The private-alpha CLI composes the same generated operations; it has no supplier-specific connector command or separate state. Start with the Principal-scoped offering wall:0600 file before it sends the request, writes the complete
human-completion receipt there, and prints only the secret-free session
summary:
next_action.url from that protected file outside model context. Retain
the returned cns_... identity for passive reads, explicit runtime
reconciliation, or a lost-handoff replay:
refresh means reconcile that durable ConnectionSession; it is not a
capability-snapshot refresh. Read an Integration Gateway account’s
credential-free health and drift from the Connection projection. Do not route
it through the legacy custody health mutation:
--agent and --tool
flags are explicit selections; use --no-agents or --no-tools when an empty
set is intentional. Omitting --tool selects every currently discovered tool.
Ownership modes
Workspace / service
Use a service Principal for one shared account. Its blast radius is every
explicitly authorized agent acting through that Principal.
Personal / delegated
Map each application user to an end-user Principal. The Principal-scoped
offering read and session routes keep divergent accounts at one provider
separate.