Endpoint
- Transport: Streamable HTTP, stateless — every request is self-contained, no session to keep alive, safe to retry.
- Auth: the same
Authorization: Bearer sspat_…header as REST, on every request. No OAuth dance. - Protocol version: negotiated automatically by your client/SDK.
- Contract version: reported as
serverInfo.versionin the initialize response — currently2.1.0(see the changelog).
What your key sees
The tool list depends on the key’s scopes:
A read-only key never sees the write tools at all — there is nothing to call by
accident. If one is somehow invoked anyway, it fails with
FORBIDDEN_SCOPE.
One capability set, two faces
The MCP tools and the REST endpoints are the same capabilities: tool results carry the corresponding REST response JSON (as structured content plus a text rendering). If you know one face, you know the other — the REST reference doubles as the schema reference for tool results. Rate limits are shared too: REST calls and tool calls draw from the same per-key budgets (details).Write actions and confirmation
Three things a write-scoped key can do: take a position, publish an opinion, back an opinion. Each is two tools, not one. (Selling a position is only available in the SeeSaw app.)1
Preview
Call
preview_order, preview_opinion or preview_back. The server
computes the summary — prices, what it costs, what the balance becomes, what
a correct call pays — and returns a confirm_token with an expires_at.
Nothing is charged and nothing is reserved.2
Ask the user
Show that summary and get an explicit confirmation. The numbers come from
the server precisely so you never have to compute them yourself. What goes
into a preview is the user’s call too: for an order, the stake is the
amount the user named — if they named none, ask before previewing.
3
Execute
Call
place_order, publish_opinion or back_opinion with only the
token. The topic, option, stake and text all travel inside it.About the token
A token from one key will not work on another, and one minted for
preview_order cannot drive publish_opinion. Expired or already-consumed
tokens fail with CONFIRM_TOKEN_EXPIRED / CONFIRM_TOKEN_USED — preview again.
Retry behavior differs per action
Client-side confirmation hints
The three executing tools carrydestructiveHint: true and
_meta["anthropic/requiresUserInteraction"] = true. Claude Code turns the
latter into a mandatory permission prompt on every call — including under
bypassPermissions. Previews are annotated readOnlyHint: true and prompt
like any other read.
Languages
Tools that return titles, options or opinions take an optionallanguage
argument; REST reads the Accept-Language header instead. Supported values:
en (default) · zh-TW · zh-CN · vi · id · th · ja · ko · ms
Aliases fold onto these (zh → zh-TW, en-US → en). Over MCP an
unsupported value is an error rather than a silent fallback, so an agent
learns the language isn’t available instead of quietly getting English. (For
the same reason the tool schemas list the values in the description rather
than as a JSON-schema enum.) Over REST an unknown Accept-Language falls
back to en.
Set up your client
Claude Code
One
claude mcp add command.Cursor
.cursor/mcp.json snippet.VS Code
.vscode/mcp.json snippet (note: key is servers).Other clients
mcp-remote bridge for clients without header support.