mcp server

Plug an agent into aio.

A hosted MCP server with the same keys, limits and checks as the REST API: your agent prepares, your machine signs.

Connect

Endpoint (Streamable HTTP, stateless):

https://aio.fun/api/mcp

Send your key as a Bearer token. Most clients take a config like this; keep the key in an environment variable, not in the file:

{
  "mcpServers": {
    "aio": {
      "type": "http",
      "url": "https://aio.fun/api/mcp",
      "headers": {
        "Authorization": "Bearer ${AIO_API_KEY}"
      }
    }
  }
}

A request without a valid key gets 401 with a WWW-Authenticate header that points at /.well-known/oauth-protected-resource. Sign-in with OAuth comes later; API keys work today.

Tools

Each tool needs a scope on the key. A missing scope comes back as a tool error, so the agent can tell you which scope to add. Every tool call counts once toward the key's limits.

MCP tools
toolwhat it doesscopeeffect
wallet_challengeOne-time message to sign with your walletreadchanges state
link_walletSend that signature to link the wallet to this keyreadchanges state
launch_coinPrepare a launch; returns the unsigned fee transactionlaunchchanges state
submit_launchSubmit the signed fee transaction; safe to repeatlaunchirreversible
get_launchLaunch status, and the mint once livereadread-only
get_coinOne live coinreadread-only
list_coinsLive coins, newest firstreadread-only
quotePrice on the coin's own poolreadread-only
buyUnsigned buy transaction plus a simulationtraderead-only
sellUnsigned sell transaction plus a simulationtraderead-only
submit_transactionRelay a swap you signedtradeirreversible
claim_feesClaim fees to your Privy embedded walletclaimchanges state
get_fees_for_handleCoins and unclaimed fees for an X or GitHub handlereadread-only
portfolioPositions, fees and rewards of a walletreadread-only
get_coin_strategyA coin's burn or drop strategyreadread-only
set_coin_strategyChange it, as the coin's verified fee ownerstrategyirreversible

Tools carry readOnlyHint and destructiveHint, and return structuredContent alongside text.

A launch, start to finish

  1. wallet_challenge, sign the message locally, then link_wallet. Once per wallet and key.
  2. launch_coin with the coin fields and your linked launcherWallet. Keep the returned launchId. Stock-paired coins default to feeMode: "holders", paid in the quote token; send "dev" to opt out (see fee modes and defaults). The result says what the coin got: read feeMode and feeModeReason before signing. A stock coin is set with quote (a stock token id such as "nvda-bp", mainnet only). linkedTicker is deprecated and ignored.
  3. Sign the fee transaction on your machine and pass it to submit_launch.
  4. Call get_launch until the status is live. If a call times out, repeat submit_launch with the same launchId; never prepare a second launch.

Trading is the same shape: buy or sell returns an unsigned transaction and a simulation. Check it, sign locally, then submit_transaction.

What aio will not do

  • Take a private key or seed phrase. Tool arguments that look like one are refused before anything reads them.
  • Sign for you. Every transaction is signed by your wallet, on your machine.
  • Pay fees anywhere else. Claims go to the Privy embedded wallet of the key's account.
  • Pass coin text off as instructions. Names and descriptions arrive as {"untrusted":true,"text":"…"}.

60 tool calls per minute per key, 30 of them for trading. Launch limits are the same as the REST API.

MCP server · aio