Teller, the agent: a small robot whose body is a locked vault
Docs

Standard MCP

Standard MCP is an MCP server for The Standard Reserve on Robinhood Chain (chain id 4663). Anyone can connect and read markets: King of the Markets standings, token data, prices, leaderboards. With an MCP key, the same server also acts for an agent account: a contract you own, which your agent can trade from but never withdraw from.

The endpoint is https://www.standarmcp.dev/mcp. It speaks Streamable HTTP, for both the 2026-07-28 protocol and 2025-era clients.

Quickstart

  1. Open the app → and connect your wallet. Sign the sign-in message (no transaction, no gas).
  2. Set daily limits and the actions the agent may take, then create the account. One transaction.
  3. Create an MCP key and paste the config for your client. The key is shown once.
  4. Top up the account with USDG and a little ETH, then ask your agent: “What's my Standard balance?”

Clients

Teller plugging a cable into its own screen

Replace <YOUR_KEY> with your MCP key. Without the header, the server lists only the read tools.

terminal
claude mcp add --transport http standard https://www.standarmcp.dev/mcp \
  --header "Authorization: Bearer <YOUR_KEY>"

Claude Desktop: macOS ~/Library/Application Support/Claude/claude_desktop_config.json · Windows %APPDATA%\Claude\claude_desktop_config.json. Cursor: ~/.cursor/mcp.json, or .cursor/mcp.json in a project.

Read tools

Available to everyone, with or without a key. They read Robinhood Chain and the public Standard Reserve API.

get_season

Read-only

The current King of the Markets season: each team's points, volume and traders, the leader, the scoring rules and when the closing bell rings.

No parameters.

Calltools/call
{
  "name": "get_season",
  "arguments": {}
}

get_prices

Read-only

Live prices of ETH and the three Reserve stock tokens (SPCX, BABA, SKHY) in USD, read from their Uniswap v4 pools on Robinhood Chain, with each stock pool's current swap fee.

No parameters.

Calltools/call
{
  "name": "get_prices",
  "arguments": {}
}

search_tokens

Read-only

Finds STANDARD launchpad tokens by name, symbol or address. Returns price, market cap, 24h volume, stage (curve or graduated pool) and team. An empty query lists recent and active tokens.

ParameterTypeRequiredDescription
querystringyesName, symbol or address. Empty for a general list.
limitintegernoDefault 15.
Calltools/call
{
  "name": "search_tokens",
  "arguments": {
    "query": "…"
  }
}

get_token

Read-only

Everything about one launchpad token: market data, links, its team, whether it still trades on its bonding curve or in its graduated pool, and the points it has scored.

ParameterTypeRequiredDescription
tokenaddressyesThe token's address.
Calltools/call
{
  "name": "get_token",
  "arguments": {
    "token": "0x…"
  }
}

The latest buys and sells of a launchpad token, with size in USD, price and trader.

ParameterTypeRequiredDescription
tokenaddressyes
limitintegernoDefault 20.
Calltools/call
{
  "name": "get_token_trades",
  "arguments": {
    "token": "0x…"
  }
}

The largest holders of a launchpad token and their share of supply. The pool and curve contracts appear as holders too.

ParameterTypeRequiredDescription
tokenaddressyes
limitintegerno
Calltools/call
{
  "name": "get_token_holders",
  "arguments": {
    "token": "0x…"
  }
}

Candles of a token's market cap in USD over a window, with volume and trade counts per candle.

ParameterTypeRequiredDescription
tokenaddressyes
window"1h" | "4h" | "1d" | "7d" | "30d"noDefault 1d.
Calltools/call
{
  "name": "get_price_history",
  "arguments": {
    "token": "0x…"
  }
}

The top wallets of the King of the Markets season by points, overall or for one team.

ParameterTypeRequiredDescription
team"US" | "CN" | "KR" | "ETH"no
limitintegernoDefault 10.
Calltools/call
{
  "name": "get_leaderboard",
  "arguments": {}
}

get_wallet

Read-only

Any wallet's King of the Markets points, rank and team breakdown, with the launchpad tokens it holds.

ParameterTypeRequiredDescription
walletaddressyes
Calltools/call
{
  "name": "get_wallet",
  "arguments": {
    "wallet": "0x…"
  }
}

Agent tools

Listed only with a valid key. Tools that move funds simulate first, check your balance, today's limit and the allowed actions, then send one transaction from the agent key and wait for it. Errors come back as plain sentences the agent can relay.

get_account

Read-onlyNeeds key

Your agent account: USDG and ETH balances, today's spending against the owner's daily limits, whether you are paused, your gas, your King of the Markets points, the tokens you hold and your liquidity positions. Check this before trading.

No parameters.

Calltools/call
{
  "name": "get_account",
  "arguments": {}
}

quote_buy

Read-onlyNeeds key

How many tokens a buy would get right now, simulated against the chain without sending anything.

ParameterTypeRequiredDescription
tokenaddressyes
amountstringyesHow much to spend, in pay_with units.
pay_with"USDG" | "ETH"noDefault USDG.
Calltools/call
{
  "name": "quote_buy",
  "arguments": {
    "token": "0x…",
    "amount": "…"
  }
}

buy_token

Moves fundsNeeds key

Buys a launchpad token with USDG or ETH from the account. Routes automatically: the bonding curve before graduation, the token's Uniswap v4 pool after. Counts against today's limit. Scores points for the token's team.

ParameterTypeRequiredDescription
tokenaddressyes
amountstringyesHow much to spend, in pay_with units.
pay_with"USDG" | "ETH"noDefault USDG.
max_slippage_pctnumbernoLargest price move to accept, in percent. Default 3.
Calltools/call
{
  "name": "buy_token",
  "arguments": {
    "token": "0x…",
    "amount": "…"
  }
}

quote_sell

Read-onlyNeeds key

What selling some or all of a token would pay right now, simulated without sending anything.

ParameterTypeRequiredDescription
tokenaddressyes
amountstringnoTokens to sell. Give this or percent.
percentnumbernoShare of the holding to sell.
receive"USDG" | "ETH"noGraduated tokens can pay USDG or ETH. Curve sales pay ETH for ETH tokens and USDG otherwise.
Calltools/call
{
  "name": "quote_sell",
  "arguments": {
    "token": "0x…"
  }
}

sell_token

Moves fundsNeeds key

Sells some or all of a launchpad token the account holds. The proceeds stay in the account. Selling never uses the daily limit.

ParameterTypeRequiredDescription
tokenaddressyes
amountstringnoTokens to sell. Give this or percent.
percentnumbernoShare of the holding to sell, 100 for all.
receive"USDG" | "ETH"no
max_slippage_pctnumbernoLargest price move to accept, in percent. Default 3.
Calltools/call
{
  "name": "sell_token",
  "arguments": {
    "token": "0x…"
  }
}

trade_stock

Moves fundsNeeds key

Buys a stock token (SPCX for SpaceX, BABA for Alibaba, SKHY for SK hynix) with USDG, or sells it for USDG, in its Reserve pool. Buying spends from today's USDG limit.

ParameterTypeRequiredDescription
stock"SPCX" | "BABA" | "SKHY"yes
side"buy" | "sell"yes
amountstringyesUSDG to spend when buying, stock tokens to sell when selling.
max_slippage_pctnumbernoLargest price move to accept, in percent. Default 3.
Calltools/call
{
  "name": "trade_stock",
  "arguments": {
    "stock": "SPCX",
    "side": "buy",
    "amount": "…"
  }
}

launch_token

Moves fundsNeeds key

Launches a new token on the STANDARD launchpad for a team: US (paired with SPCX), CN (BABA), KR (SKHY) or ETH. Costs a small ETH launch fee, plus an optional first buy. The account is the creator and earns the creator's share of fees; the token's trades score points for its team. Ask the user before launching.

ParameterTypeRequiredDescription
namestringyes
symbolstringyesTicker without $, up to 10 bytes.
team"US" | "CN" | "KR" | "ETH"yes
descriptionstringno
image_urlurlnoAn https image for the token.
websiteurlno
twitterstringnoX handle or link.
telegramstringno
first_buystringnoOptional first buy, in pay_with units.
pay_with"USDG" | "ETH"noDefault ETH for the ETH team, USDG otherwise.
metadata_uristringnoOnly when running without a host: your own metadata JSON URL.
Calltools/call
{
  "name": "launch_token",
  "arguments": {
    "name": "…",
    "symbol": "…",
    "team": "US"
  }
}

add_liquidity

Moves fundsNeeds key

Deposits USDG into a Reserve stock pool (SPCX, BABA or SKHY against USDG) through Standard Pour, full range, in one transaction. The position earns a share of every swap fee. If the stock moves, the position's mix shifts toward the side that fell. Spends from today's USDG limit.

ParameterTypeRequiredDescription
stock"SPCX" | "BABA" | "SKHY"yes
usdg_amountstringyes
max_slippage_pctnumbernoLargest price move to accept, in percent. Default 3.
Calltools/call
{
  "name": "add_liquidity",
  "arguments": {
    "stock": "SPCX",
    "usdg_amount": "…"
  }
}

list_positions

Read-onlyNeeds key

The account's liquidity positions in the stock pools with their current value.

No parameters.

Calltools/call
{
  "name": "list_positions",
  "arguments": {}
}

collect_fees

Moves fundsNeeds key

Collects the swap fees a liquidity position has earned into the account, leaving the position open.

ParameterTypeRequiredDescription
position_idstringyes
Calltools/call
{
  "name": "collect_fees",
  "arguments": {
    "position_id": "…"
  }
}

remove_liquidity

Moves fundsNeeds key

Takes some or all of a liquidity position out, with its fees, back into the account as USDG and the stock token. 100 closes it.

ParameterTypeRequiredDescription
position_idstringyes
percentnumbernoDefault 100.
Calltools/call
{
  "name": "remove_liquidity",
  "arguments": {
    "position_id": "…"
  }
}

pause_agent

Moves fundsNeeds key

Stops this agent from making any further trade until the owner resumes it. Use it if something looks wrong or the user asks you to stop.

No parameters.

Calltools/call
{
  "name": "pause_agent",
  "arguments": {}
}

get_activity

Read-onlyNeeds key

The account's recent agent actions, including refused ones, newest first.

ParameterTypeRequiredDescription
limitintegerno
Calltools/call
{
  "name": "get_activity",
  "arguments": {}
}

Security model

Teller reaching for its vault door while a hand holds the key

Your agent account is an AgentAccount contract, a minimal clone created by the factory for your wallet. It has two roles. The owner (your wallet) can do anything: withdraw, change limits, switch actions on or off, replace the agent key, pause and resume, and make any call from the account. The agent key can only call typed trading functions.

  • Every agent action pays out to the account itself. No function the agent can call takes a recipient.
  • Swaps only route through Standard Reserve pools: the three stock pools, launchpad pools and the ETH/USDG pool. Any other pool is refused, so the agent can't trade into a pool someone set up to drain it.
  • Trades must start or end in USDG or ETH, so the spending limits always apply.
  • The only value the agent can move out is ETH to its own key for gas, capped per day.
  • No admin, no upgrade path, no fee. The contracts are not audited.

Limits and actions

The contract measures the account's USDG and ETH (with WETH) before and after every agent action. Whatever went out counts against today's limit; if an action would pass it, the whole transaction reverts. Sales and withdrawn liquidity bring funds back and never use the allowance. Limits reset at 00:00 UTC.

SettingWhat it caps
USDG per dayUSDG leaving the account through agent actions
ETH per dayETH and WETH leaving the account, launch fees included
Gas per dayETH the agent may move to its own key to pay for transactions
ActionsTrade (buy, sell, swap), Launch, Liquidity: each can be switched off
PauseStops every agent action until you resume. The agent can pause itself too.

Keys

There are two kinds of keys. MCP keys (smcp_live_…) let a client use the server for your account. We store only their SHA-256 hash; revoking one takes effect on the next request. The agent key is the Ethereum key that signs the agent's transactions. It is generated on our server and stored encrypted (AES-256-GCM); it never leaves the server and is never shown.

If a key leaks, the worst case is trading inside today's limits until you act. Revoke the MCP key, or pause the agent and replace the agent key from the dashboard: one setAgent transaction and the old key can no longer do anything.

Points and rewards

King of the Markets credits a trade's points to the wallet that signs it, which is your agent key. A trade scores for the team of the stock it routes through: SPCX for the USA, BABA for China, SKHY for Korea, WETH pairs for ETH. Tokens your agent launches are created by the account, which earns the creator's share of trading fees. USDG paid to the agent key can be swept into the account from the dashboard.

Contracts

Robinhood Chain · chain id 4663 · robin.etherscan.io ↗

ContractAddressNote
AgentAccountFactory0x6C9b85c36c64d9bA6D566e9900821D46D4f4F273Creates accounts; deploys the AgentAccount implementation
Standard Pour LiquidZap0x428a17dF15ED650eE08594332E8aC5413Cee9460One-transaction deposits into the stock pools
Launchpad factory0x3D69104Da2518f4833D71444D6611310F2D685f2STANDARD launchpad, current version
Launchpad router0x3c7476e8Be0efd5b9667421448a99E217B806E80Curve buys and sells
Launchpad hook0x963fE3e549308734048E42Dbe751150eF1C425cCGraduated pools
Earlier launchpad factory0x3D6Ea4e97B8AB9E1A1B4943fEBfFe22D8c920091Tokens from the first launchpad
Earlier launchpad router0x190B452D16e12e3bEeDd76a030EA991fE3856c33
Earlier launchpad hook0x048F2DC8a71A0321B5e119Cd577c56d0190920cc
Reserve stock pool hook0xC15b155a3094934171A15625d1a80Aba267B6080Sets stock pool fees from the US market session
Uniswap v4 PoolManager0x8366a39CC670B4001A1121B8F6A443A643e40951
Uniswap v4 PositionManager0x58daec3116aae6D93017bAAea7749052E8a04fA7Liquidity position NFTs
USDG0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168Dollar stablecoin, 6 decimals
WETH0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73Pair asset of ETH-team tokens
SPCX (SpaceX)0x4a0E65A3EcceC6dBe60AE065F2e7bb85Fae35eEaStock token, team US
BABA (Alibaba)0xad25Ac6C84D497db898fa1E8387bf6Af3532a1c4Stock token, team CN
SKHY (SK hynix)0x84CAb63bc87912E71ad199ff14A0bA45de68FeF8Stock token, team KR

Run it yourself

The same tools run locally over stdio with your own agent key: create an account whose agent is a key you hold, then point your client at the stdio server. The key never leaves your machine.

Claude Codeterminal
claude mcp add standard \
  -e AGENT_PRIVATE_KEY=0x... \
  -e AGENT_ACCOUNT=0x... \
  -- npx tsx packages/mcp/src/stdio.ts