MCP server
POST /v1/mcp is a remote Model Context Protocol
server, so Sable's capabilities become tools inside an agent: run a completion,
execute code in a metered sandbox, verify a receipt, read the confidential
attestation, check credit.
Connect
claude mcp add --transport http sable \
https://api.buildsable.com/v1/mcp \
--header "authorization: Bearer $SABLE_API_KEY"Tools
| Tool | What it does |
|---|---|
sable_chat | What it doesRun a completion. Takes prompt, optional model, system, privacy_tier, max_tokens. |
sable_run_code | What it doesExecute code in a metered sandbox. language, timeout_secs, network optional. |
sable_verify_receipt | What it doesVerify a receipt + signature pair and recover the signer. |
sable_attestation | What it doesCurrent confidential-tier attestation status and measurement. |
sable_balance | What it doesRemaining credit on the account behind this key. |
sable_models | What it doesCatalog with pricing, tier, and open-weight status. |
sable_generate_image | What it doesGenerate an image (model, prompt, optional n, size); returns the signed provenance manifest. |
sable_generate_video | What it doesStart an asynchronous video render; returns a job id. |
sable_video_status | What it doesPoll a video job by id. |
sable_backing_status | What it doesProof of Backing verdict for a backed token (slug). |
sable_coin_lock | What it doesLock a launchpad coin and get the exact unsigned factory create(...) transaction for your own wallet. |
sable_coin_report_deployed | What it doesReport the create transaction's hash; Sable reads the chain and lists the coin. |
sable_coin_status | What it doesA coin's public record: raise progress, market readings, graduation, verification. |
sable_coin_quote | What it doesPreview a buy or sell on a coin's curve and get the unsigned buy/sell (and approve) transactions with a slippage floor. |
sable_coin_directory | What it doesA page of the coin directory. |
The sable_coin_* tools are non-custodial: they return unsigned
transactions for your own wallet to sign and send. Sable holds no key, signs
nothing for you and holds no funds. The launchpad guide's "Agents (MCP)"
section walks through a launch and a trade end to end.
Tool calls are metered and billed exactly like direct API calls, and both
sable_chat and sable_run_code return their signed receipt in
structuredContent so an agent can keep proof of what it ran.
Authentication
Two ways in, both ending at the same place: a sk-sable_… key.
Paste a key
Clients that let you set a header (Claude Code, custom agents, anything driving an MCP SDK directly) send an API key you minted in the portal:
authorization: Bearer sk-sable_...
One-click connect (OAuth 2.1)
Connector UIs that expect to run an OAuth flow can, as of the OAuth
authorization server the gateway now ships: discovery (RFC 8414 / RFC 9728),
dynamic client registration (RFC 7591), PKCE S256 — mandatory, plain is
refused — and rotating refresh tokens.
Point the client at the MCP URL and let it do the dance:
{
"type": "url",
"url": "https://api.buildsable.com/v1/mcp",
"name": "Sable"
}What happens: the client registers itself, sends you to Sable's consent page, you sign in with your wallet and choose a spend cap and an expiry, and the client receives a token.
The token it receives is an ordinary Sable API key, minted under your account with exactly the cap and lifetime you picked. That is the whole design: there is no second, parallel credential system to reason about — the connector's access is a key you can see on the API keys page, whose spend rolls into your usage, and revoking that key ends the connection. The client refreshes it periodically while your consent lasts; when the consent expires, it has to ask again.
An unauthenticated call to /v1/mcp answers 401 with a WWW-Authenticate
header naming the resource metadata document, which is how a connector finds
the authorization server without being told.
| Endpoint | Purpose |
|---|---|
GET /.well-known/oauth-authorization-server | PurposeAuthorization-server metadata (RFC 8414). |
GET /.well-known/oauth-protected-resource | PurposeProtected-resource metadata (RFC 9728). |
POST /v1/oauth/register | PurposeDynamic client registration. Public clients only. |
GET /v1/oauth/authorize | PurposeValidates the request, then sends the browser to the consent page. |
POST /v1/oauth/token | Purposeauthorization_code (PKCE) and refresh_token grants. |
POST /v1/oauth/revoke | PurposeRevoke a refresh or access token (RFC 7009). |
Deliberate limits, stated plainly: only public clients are issued (a secret
baked into a desktop app protects nothing), redirect URIs must be https or
http to loopback and are matched exactly, authorization codes are single-use
and live 10 minutes, and refresh tokens rotate on every use — replaying an old
one is treated as a leak and revokes the whole grant, keys included.