Connectors
Use connectors when your customers own the accounts that an agent needs to use. You register a provider app, such as Slack, Linear, Gmail, or Stripe, once for your project. Your product then gives each customer a link to authorize their account. Introspection records each authorized account as a connection that the agent can use.
A connector defines the integration, and a connection records an authorization:
| Resource | What it is | Scope |
|---|---|---|
| Connector | The project’s settings for one provider integration. The settings include the provider, authentication mode, endpoints, requested scopes, allowed API hosts, and provider app credentials. | One per provider app, project, and environment |
| Connection | One authorized app, user, workspace, or person. Introspection stores the provider token in encrypted form. | Many per connector |
Every connection belongs to a connector. Each connection route, SDK method, and CLI command therefore names the connector first.
See the Connectors reference for supported provider features, authentication modes, connection fields, and errors.
Staging and production provider apps use separate credentials, so each app
needs its own connector. The environment field identifies the connector’s
environment. You set environment, provider, auth_mode, and slug when
you create the connector, and you cannot change them later.
Set up a connector
Set up a provider app and connector in the following order:
- Create the connector. Provide
name,provider, andauth_mode. If you omitslug, Introspection creates it from the name. Repeating the request with the same slug returns the existing connector instead of creating another one. - Register the provider app. In the provider’s settings, use the delivery
URL for the connector,
https://{control-plane-host}/v1/webhooks/{provider}/{connector_id}. The URL contains the connector ID, so you must create the connector first. - Update the connector. Add the
client_id,client_secret,signing_secret, andwebhook_urlissued by the provider.
If the provider app already exists, include its credentials when you create the connector and skip the registration step.
The delivery URL is the address where the provider sends events to Introspection. It includes the connector ID so Introspection knows which connector should receive each event. Copy the URL from step 2 into the provider app’s webhook settings.
CLI
introspection connectors create --name "Slack support" \
--provider slack --auth-mode oauth-stored \
--scope chat:write --scope channels:read --api-host slack.comMost integrations in which a customer authorizes their own account use
oauth_stored. The customer gives consent once, and the resulting token belongs
to their connection. See the full list of modes in the
Connectors reference.
Give a customer the authorization link
The authorize method creates a consent URL for your customer. The customer
opens the URL and approves your provider app in their account. The provider
then sends a callback to Introspection, which creates the connection.
Choose one method to create the URL. Use the JS SDK in your application. Use the CLI when you want to create a URL by hand while setting up or testing the connector. Both examples create a URL, so you do not need to run both.
CLI
introspection connectors authorize slack-support \
--runtime support-agent \
--expires-in 1hThe response includes expires_in, which contains the remaining lifetime in
seconds. It also includes expires_at, which contains the expiration time.
Each URL can be used only once. The URL contains a one-time state value
that becomes invalid after the first use. Create a separate URL for each
customer, send it to one recipient, and do not cache or reuse it. Each call
returns a different URL. The response does not include state as a separate
field because it is already part of authorize_url. The provider sends the
callback directly to Introspection, so your application does not need to
match the callback with the state value.
The URL is valid for 600 seconds by default. You can increase the lifetime to 86400 seconds, or one day, when you send the URL to someone who may not open it within ten minutes.
The CLI and SDK do not open the URL in a browser. Your application normally sends the URL to a customer.
Record which customer authorized the connection
Introspection can record the credential owner and the person who authorized a connection separately:
member_ididentifies the owner of the credential. For a Slack workspace installation, it is the workspace’scustomermember. It isnullwhen the subject is an app owned by the organization.created_by_member_ididentifies the member who authorized the connection.
Pass identity to authorize to identify the customer who is authorizing the
connection. Introspection resolves identity.user_id to a customer member
and stores the member as created_by_member_id. The connection is then
associated with your customer instead of the agent member that made the API
call. The identity value has the same structure as the identity used when
opening a runner.
Connections
Use the following commands to list connections or disconnect a customer:
CLI
introspection connectors connections list --connector slack-support
introspection connectors connections revoke <CONNECTION_ID> --connector slack-supportRevoking a connection deletes its provider token and disconnects the subject immediately. The subject must use a new authorization link to connect again. Revocation also removes approvals recorded for the connection, so an approval cannot remain valid after its credential is gone. The connector and its other connections are not affected.
See the Connectors reference
for connection fields such as subject_type, status, and scopes_granted.
How an agent uses a connector
An agent uses a connector only through MCP tools. The sandbox does not contain a connector HTTP client.
The recipe’s MCP declarations control which server tools the model receives. The package policy limits all agents in the recipe, and each agent selects tools within that limit. The MCP server ID is the app slug rather than the connector ID or name. Using the app slug lets the same recipe work in projects that use different connector records.
The recipe does not name the connector itself. An authorized connection is what makes the server reachable. For a chat provider, the connection also records the runtime that answers its channels, and a task the provider starts carries that origin, so the runtime mounts the server for that task. For a provider whose MCP server is hosted elsewhere, the endpoint is mounted for the runtime as an ordinary MCP binding.
Provider scopes never appear in the recipe. Introspection records them when the customer authorizes the connection.
Where the MCP server runs
| Placement | Example |
|---|---|
| Hosted by the provider | Linear, mounted through its own hosted MCP endpoint |
| Hosted by an aggregator | An aggregator endpoint that exposes an app such as Notion under the slug selected by the recipe |
| Hosted by the runtime | Slack, served inside the task pod because Slack provides REST APIs instead of a hosted MCP server |
Each placement gives the recipe the same MCP interface. Placement does not change how Introspection handles credentials.
The credential never enters the sandbox
The sandbox receives a session locator and connector details that are not secret. It never receives an OAuth access token, refresh token, client secret, or provider API key. The egress proxy controls outgoing requests. It validates the session, finds the connection assigned to the task, and replaces the locator with the provider credential. It also limits requests to the hosts and paths allowed by the connector.
A session can use only the connection assigned to its task. Connector credentials never appear in the sandbox environment or conversation transcript. The package and agent MCP policies limit which tools the model can use.
Provider failures appear as MCP tool errors. Introspection does not automatically retry provider writes that could produce a different result when repeated.
Inbound events
A verified provider event can start or continue a task. The webhook first verifies the provider’s signature and finds the connection. It ignores a duplicate event and maps a new event to a customer or channel identity. It then sends the event to the runtime assigned to the connection. The connection supplies the credential for the reply, so the reply returns to the customer workspace that sent the event.
Slack is currently the only inbound channel. See the capability matrix. It shows which providers can start a task and which providers only store credentials for outgoing requests.
Person-authorized actions
A person_authorized connector requires a person to approve each action. A
mission records the specific action that the agent proposes. The person can
approve, limit, or deny the mission before Introspection creates a provider
token. The token broker is the service that issues provider tokens. If the
action does not have an approved mission, the token broker returns 202 and
authorization_pending instead of a token. The response also includes a mission
ID and an approval URL. After approval, Introspection retries the action within
the limits recorded on the mission.
The Control Plane records the approval, and the egress layer checks it before sending a provider request. The agent continues to use the provider through MCP and never receives the credential.
Clients
You can manage connectors with the CLI or the JavaScript, Python, and Rust SDKs. Each command and method uses the project assigned to the credential that authenticated the request.
- CLI: Use
introspection connectorsand the nestedconnectors connectionscommands. You can identify a connector by ID or slug. - JavaScript, Python,
and Rust: Use
connectorson the main client andconnectionsunder it.
Only the SDKs can request provider tokens. The CLI does not print temporary provider credentials to a terminal.
Related
- Connectors reference: Supported provider features, authentication modes, connection fields, and errors.
- MCP and federation: How a task identity reaches a partner endpoint.
- MCP tool declarations: How a recipe controls access to tools from a connector MCP server.
- Bindings: Endpoints, variables, and credentials owned by your project instead of a customer’s provider account.
- Tags: How to group and share a customer’s tasks and files.
- Security: How Introspection keeps provider credentials outside the sandbox.