Endpoint
Connect a client
Sign in through your browser (recommended)
Point your client at the endpoint and let it walk you through signing in. No key to create, copy, or store.Authorization header. The first time the client calls the server it gets a 401 telling it where to authenticate, and it opens your browser:
1
Approve the connection
Custral shows you which application is asking, which workspace it will act on, and a plain-language list of
exactly what it will be able to do. Pick the workspace and choose Authorize.
2
You're connected
The browser hands the client its credential and closes. Nothing is ever displayed for you to copy.
401 challenge tells the client which scopes to ask for (WWW-Authenticate: Bearer resource_metadata="…", scope="…"): every read scope, mcp:write and every write scope. Key, connector and webhook management are never requested, and you see the full list on the approval screen before you authorize. What it receives is an ordinary Custral API key, so it appears in Settings → Applications alongside any you made by hand, shows when it was last used, and is revoked the same way.
Approving grants access to one workspace. The one you pick on the approval screen. To connect a second workspace,
add the server again under a different name and choose that workspace when you approve.
With an API key
Use a key when the client isn’t a browser-capable machine (CI, a server, a container) or when you want to pin an integration to an exact scope set. Thecustral CLI mints a scoped key and prints a ready-to-paste config for each client:
mcp:read scope to connect, plus the same resource scopes the REST API asks for: records:read to search and read records, objects:read for object schemas, conversations:read for conversations, and so on. Writes need mcp:write plus a write scope per write action: records:write to create and update records, conversations:write to change conversations, applications:manage to mint keys, webhooks:manage to register webhooks.
Use it
Talk to the agent in natural language. It picks the right tools and stays scoped to the one workspace the connection was granted for. For example:- “Summarize my open conversations and tell me which need a reply.”, reads conversations + their transcripts.
- “Mark conversation conv_3Ab… as closed and set the outcome to won.”,
set_conversation_status+set_conversation_disposition(needsconversations:write). - “Find the contact jane@acme.com and set their status to customer.”. Searches records, then
update_record(needsrecords:write). - “Create a deal named Globex on the deals object.”,
create_record(needsrecords:write).
mcp:read only lets a client connect: with it alone the agent can search Custral’s docs, but it cannot read your workspace until the connection also holds the read scope for each resource.
What’s exposed
Read is a read-only subset of your workspace tools. Every read tool needsmcp:read plus the scope its resource needs on the REST API, so a key cannot read more over MCP than it could over /v1:
A read tool with no scope mapping is never exposed.
Write is a small, curated set of provisioning actions. Every one needs
mcp:write, plus its own resource scope so keys stay least-privilege:
A tool only appears when the connection holds
mcp:write and its scope, so a mcp:write + webhooks:manage key can register webhooks but cannot mint keys, and vice-versa. Every other write in Stella’s toolbox stays off the MCP surface entirely. The allowlist is explicit, not “all writes.”
The scopes are the authorization, however you connected: with a key you choose them when you create it, and with browser sign-in you see them listed on the approval screen before you authorize. There is no per-action prompt once a client is connected. MCP clients run headless, so the grant is made once, up front.
Preview the tools
To see exactly which tools a key exposes (the same list an MCP client receives fromtools/list, without wiring up a client) call:
{ endpoint, scopes, count, tools: [{ name, description, inputSchema }] } and requires the mcp:read scope. (This one is a plain HTTP call, so it needs a key. A browser-authorized client reads the same list through tools/list.) scopes echoes the key’s grants, and tools includes exactly the write actions those scopes unlock, so it doubles as a quick check that your key is configured the way you expect.
This is Custral acting as an MCP server (a client connects to your workspace). It is separate from connecting
Stella to other people’s MCP servers, which is configured in Settings → Integrations → MCP.
Related
- Authentication: browser sign-in, creating a key by hand, and what each scope grants.
- API Reference: the equivalent REST surface.