Connectors

Connect the apps your organization already uses — by OAuth, a pasted API key, or your own OAuth app — and let every agent act through it without holding the provider credential.

Connectors let an agent act through app accounts a member or an organization already owns. CoreSpeed stores the credential, refreshes it when the provider allows, and exposes the connector's operations as namespaced MCP tools — notion__create_page, slack__post_message — on the same /mcp endpoint as everything else. The agent receives tools, never the token.

What you can connect

  • Notion
  • Slack
  • GitHub
  • Linear
  • Google Drive
  • Figma
  • Stripe
  • HubSpot
  • Salesforce
  • Zendesk
  • Discord
  • X
A few of the connectors on the index today.

The registry keeps growing, and what any one caller can connect is decided per environment and per request: a connector is offered where it is open to your organization and has a connect method — CoreSpeed's app, an app your organization may bring, or a pasted key. Where your organization may bring its own app but none is set up yet, the connector is still listed. In its Connect dialog an admin can set up that app, and a member is asked to have a workspace admin do it. A connector you already hold a connection to stays listed whatever else changes, so you can always disconnect it. The answer differs by organization, and the authenticated index is the only inventory worth trusting:

curl https://api.corespeed.io/connectors \
  -H "Authorization: Bearer $CORESPEED_API_KEY"

Do not hard-code a connector list or count into a client — read this index. Withholding never orphans a live grant: an account you already hold on a connector that stopped being offered stays in the index, and its tools stay in tools/list, until you disconnect it. The full response shape is in the connector list reference.

Three ways to connect

Every method ends the same way: a stored connection whose tools appear in tools/list for every agent using the same CoreSpeed identity.

OAuth

The default. The member opens Dashboard → Connectors, clicks Connect, reviews the requested scopes on the provider's consent screen, and authorizes. CoreSpeed keeps the access and refresh tokens inside the organization boundary and refreshes them on its own. A handful of connectors use OAuth 1.0a (auth.type: "oauth1a", such as Trello and Zotero); the experience is the same. The consent screen names CoreSpeed as the requesting application because the OAuth client is CoreSpeed's.

Paste an API key

Some connectors accept a credential from your provider account instead of, or alongside, OAuth. The index says which: key-only connectors carry auth.type: "api_key" (Stripe is one), and an OAuth connector that also takes a key carries auth.api_key_connect: true. In the dashboard the two methods appear side by side.

A pasted key is stored encrypted as a connection — one row, with the same private-or-shared visibility as any OAuth account. Some vendors let CoreSpeed verify the key at paste time; where they do not, the connection is stored unverified and the index marks it (api_key_probe: false, key_verified: false). Rotation is a reconnect: paste the new key and the connection updates in place. Where the vendor does not say which account a key belongs to, the connection is named after the key's fingerprint, so a new key adds a new connection; disconnect the old one. Disconnecting deletes CoreSpeed's copy and nothing more — the key itself keeps working until you revoke it in the vendor's dashboard.

A rejected call does not change the connection's status. A vendor 401 flips a key connection to needs_reauth only when the vendor names the credential itself with a standard code — invalid_token, invalid_client, or invalid_grant — rather than CoreSpeed guessing from a failed request.

Bring your own OAuth app

Where CoreSpeed opens the mechanism for a connector, an organization admin can register the organization's own vendor OAuth app: paste its client_id and client_secret, and every new connection in that organization authorizes through that app. This is the route for vendors whose review process gates a shared app — Google, Microsoft, and Meta among them — since your own app needs no review from CoreSpeed.

The index tells you where you stand: credential_source.active is "platform" (CoreSpeed's app), "org" (yours), or "none" (the mechanism is open but nothing is configured, so members see a setup prompt until an admin finishes it). The setup dialog lists the connector's required scopes and the redirect URI to register with the vendor; if your app grants fewer scopes than the connector's tools need, the connect fails with the exact difference and stores nothing.

Lifecycle is deliberately blunt. Rotating the secret under the same client_id disturbs nothing. Replacing the client_id, or deleting the app, moves every connection issued through it to needs_reauth, and members reconnect through the new source; the confirmation states how many. Calls made through your own app are not metered by CoreSpeed — holds and the activity trail still apply.

Private and shared accounts

Every connection is private — usable by the member who connected it, that member's clients, and anyone the member shares it with — or shared with the whole organization. Any member can connect either kind. An agent principal reaches shared accounts and accounts shared with it, never a member's other private accounts.

The owner of a private account can share it with one member, one agent, or everyone in the organization. Choose Share on the account to open the Sharing dialog, or call manage__accounts_share from a signed-in session; an API key cannot share. A share allows every tool or a list you pick. A call to a tool outside the list fails with tool_not_granted. The owner can stop a share at any time. Slack personal accounts and connectors with an organization integration cannot be shared.

An environment narrows the other way: you pick some of the accounts you can use, each with an optional tool list, and a session at the environment's MCP URL — or a key bound to it — reaches only those. See Environments. A workspace bot (Slack's organization integration) is not an account and is in no environment.

Where the vendor can install CoreSpeed's app as its own actor, org-wide access is that organization integration rather than a shared member account: Slack's workspace bot, and Linear's app, which works under the alias corespeed-bot. Only an org admin connects one, and what is done through it is attributed to the app, not to whoever connected it. On those connectors a member's own account is private only.

Removal follows the same shape: a private account is removed by its member; a shared one by whoever connected it or an org admin. Someone a private account is shared with cannot remove it. The index reports both rules per account as can_remove, and the sharing rule as can_share, so a client does not have to guess.

One connector can hold several accounts — two Slack workspaces, a personal and a company X handle. Each account has an alias, shown in the index and renamable with manage__accounts_rename. Connector tools accept an optional account argument naming the alias; when more than one account is in scope and the argument is omitted, the call returns an isError result with code ambiguous_account and the aliases to choose from in structuredContent.error.aliases; an alias that matches nothing answers account_not_found with the available ones. No provider account id or token ever needs to appear in a prompt.

Reauthorization

needs_reauth is a recoverable state. The connector stays known and its tools stay visible; calls fail until the account is reauthorized. It is reached when a refresh fails, when a vendor names the credential as invalid, or when an organization's own OAuth app is replaced or deleted. Send the user to Dashboard → Connectors to reconnect — do not rotate the CoreSpeed key or rewrite client configuration, neither of which is broken.

When an agent needs a connector

Connect requests are rolling out gradually; where they are not available to your organization yet, the two tools below are not listed.

An agent cannot click through a consent screen, and it should never see a key. It finds the connector with manage__connectors_search (by name or by what it needs, such as "calendar"), which also says whether it is connected already. Then it calls manage__connectors_connect with the connector id and one sentence on why it needs it. It gets back a link to that connector's page in the dashboard, which it gives to the user. The user opens it while signed in, sees who asked and why, and connects there as usual. The agent calls manage__connectors_wait, which returns once the account is usable, then reloads tools/list. The same tool covers a reconnect after needs_reauth.

The link grants nothing by itself: whoever opens it connects their own account, and the request completes only when the agent that asked can use the account. For an agent with its own key, the link goes to the agent's owner, who also shares the account with the agent on the same page and picks which tools it may use. Slack and Linear are the exception: their personal accounts are never shared, so an agent key reaches them through the organization integration instead. Inside an environment the tools answer environment_active: add the account to the environment rather than connecting a new one. Arguments and codes are in manage tools.

Connectors are their own switch

Built-in capabilities have organization and member visibility controls. Connectors do not: connecting and disconnecting the account is the connector's enable and disable. See Capability controls for the built-ins.

Your own MCP servers

An organization admin can also register any HTTPS MCP server as a remote connector; its tools join the same surface as org__<slug>__<tool>. See Remote MCP servers.