Skip to content
QuantBase
All docs
Docs · Agents

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.