All docs
Authentication
Bearer tokens for QuantBase, an AI agent for trading Solana meme coins. Per-tenant isolation is enforced in the database. Customer MCP keys stay read-only and cannot place trades.
Bearer tokens#
Every request carries a bearer token:
Authorization: Bearer qmcp_...
Keys are stored as SHA-256 digests. The server never holds a key in a form it could show you, so a lost key is replaced, not recovered.
An unauthenticated call to /mcp returns 401. There is no anonymous read
path to tenant data.
Isolation is enforced by the database, not by queries#
Every tenant-scoped table carries an owner_id and is protected by Postgres
row-level security, ENABLED and FORCED. The application sets
app.principal_id on the connection; the policy does the rest.
This is a deliberate choice about failure modes. If isolation lived in query
filters, a tool that forgot its WHERE owner_id = ... would return another
tenant's rows. Under row-level security the same bug returns nothing. One
of those is a data breach and the other is a visible malfunction.
Your watchlist, positions, exit rules, alerts and rule trials are yours. They are never shared with or counted for anyone else.
Coin data is deliberately shared#
Every pump.fun launch, graduation and price check is the same fact for everyone, so the launch record is shared on purpose. What is not shared is what you do with it.
Plans#
A key carries its account's plan. What the plan includes is enforced server-side on every call, not in the client. See Plans.
Check yours with:
account_status()
What the server does not implement#
The MCP authorization specification (revision 2026-07-28) makes OAuth optional: implementations using an HTTP transport SHOULD conform, not MUST. This server serves a static bearer token and has deliberately opted out of MCP authorization. That is permitted, and it is a considered choice rather than an unfinished one.
Two things follow if that ever changes:
- RFC 9728 Protected Resource Metadata becomes a MUST on the server, and clients MUST use it for authorization-server discovery.
- The target would be Client ID Metadata Documents, not Dynamic Client Registration. RFC 7591 DCR is deprecated in the current revision and retained only for backwards compatibility.
Adopting OAuth later would not invalidate any key already issued.
Rotating a key#
Keys are created and revoked in the console, under Settings → API keys & MCP: New key makes one (shown once), Revoke retires one. A revoked key takes effect immediately — there is no positive cache, so it stops working on the next request rather than at the end of a TTL.
account_status() # shows key metadata, never the key
Customer MCP keys cannot place trades#
When live trading opens, the agent will trade meme coins inside limits you set. Today it trades paper money. You own
the wallet. QuantBase does not custody keys. Customer MCP keys stay
read-only and cannot place trades. Live meme runs, the operator DEX desk and
wallet funding are refused for every customer key, so they are not customer
MCP features even when they appear in tools/list. Coin evidence, the feed,
exit rules and alerts are open to every account, subject to plan.
This page as Markdown, for agents: /docs/authentication.md