Skip to main content
BaseStonk speaks the Model Context Protocol. Add one URL to an AI app and it can read the launchpad live: what is trending, any token’s price and holders, a wallet’s profit and loss, what the $BSTONK basket has paid. There are two servers.
Neither server signs, relays or broadcasts. The read server returns basestonk.io links. The agent tier returns unsigned transactions. A person signs in their own wallet, on basestonk.io/sign or anywhere else. No tool holds a key or asks for one.

Connect

By URL

No install. Add a connector that points at the server.
The transport is streamable HTTP. Every request is a POST and every answer is one JSON body; nothing streams. The server keeps no session, so 2025 clients and 2026-07-28 clients both work against the same URL.

From source, over stdio

The package is @basestonk/mcp and its binary is basestonk-mcp. It is not on npm. To run it locally, clone the repository and point the client at the source file with Bun:
bun run --filter @basestonk/mcp build writes dist/cli.js, which runs under Node 18 or later. The stdio server serves the same tools as the URL.

Read tools

Every tool is annotated read-only, non-destructive and idempotent, and returns typed structuredContent beside its text, checked against a declared output schema. chain is base (the default), robinhood or arc wherever it appears. token is an address or a ticker such as BSTONK or $GROK. An address is exact. A ticker that several launches share is not picked for you: the tool answers with the candidates, marks the official one and any flagged as impersonating, and asks to be called again by address. draft_trade’s amount is in units of the pair token, not dollars, unless the pair is a stablecoin. Fifty on a wtCOIN pair is fifty wtCOIN. draft_launch refuses a pair that check_pair would refuse, and sends the pair to the create page as an address, never a ticker. A pair is permanent after launch. With template, the preset sets the pair and the taxes; do not pass pair as well.

How to read the answers

  • Market caps are fully diluted: price times the whole supply.
  • null, or “not known” in the text, means unknown. Never read it as zero.
  • Token amounts carry raw, decimals, whole and symbol. Do arithmetic on raw and decimals.
  • Fees are nested and stated as the contract stores them: burnBpsOfCreatorShare and liquidityBpsOfCreatorShare are shares of the creator’s cut, rewardsBpsOfRemainder a share of what is left.
  • Dividends are paid in kind, as a basket of other assets.
The basestonk://guide/honesty resource holds these rules in full.

The draft loop

A chat app cannot sign. The read server hands the signing to the person and then checks what happened.
The handle starts bsi1_ and carries the draft itself, so nothing is stored server side. It stops being checked seven days after the draft.

Cards

In a host that renders MCP Apps, three tools draw a card from ui://basestonk/app.html. A host that does not ignores it and reads the text. The card loads nothing from the network. Its content security policy lists no domains; every number arrives in the tool result.

Prompts and resources

Each prompt attaches the honesty guide before its instructions. The server sends cache hints: the tool, prompt and resource lists for ten minutes, a resource read for ten seconds. On the agent tier the tool list is marked private, because it names your wallet.

The agent tier

/mcp/agent is the read server plus three tools that act for one wallet. chainId is 8453 (Base, the default) or 4663 (Robinhood Chain). The inputs are the ones the prepare endpoints take; in the OpenAPI document each of those operations names the tool that calls it under x-mcp-tools. A prepare tool answers with:

Sign in

A host that supports MCP authorization, such as Claude or ChatGPT, signs in with a button.
  1. Add https://api.basestonk.io/mcp/agent as a connector.
  2. The host sends you to basestonk.io/connect-agent, which names the app and where it will return you.
  3. Connect your wallet and approve. The wallet signs agent:oauth over that app and that one request. Nothing else can spend the signature.
  4. You return to the app, which now holds a token for your wallet.
An agent that holds its own key can skip OAuth. Mint a bearer with {"scopes":["read","prepare"]} at POST /api/v1/agent/session (how), or through Sign-In with Ethereum with the prepare scope named in the message, and send it as Authorization: Bearer <token>.

What the agent can and cannot do

How long it lasts

For client developers

A client identifies itself one of two ways. A Client ID Metadata Document: client_id is a plain https URL on a public host whose JSON names itself as client_id and lists redirect_uris, fetched within five seconds and ten kilobytes. Or dynamic registration at /oauth/register with 1 to 5 redirect_uris, each https or loopback http, no fragment. An authorization code is single use and lasts 60 seconds. The redirect carries code, your state, and iss.

Signing what an agent prepared

signUrl opens https://basestonk.io/sign#… with the transaction in the URL fragment, so no server sees or stores it. The page:
  • refuses anything not addressed to a launcher or router the site itself uses
  • shows the call decoded from the bytes, never the agent’s description of it
  • simulates the first step from the prepared-for wallet before you sign
  • refuses to send from any other wallet, or after expiresAtBlock
  • sends the approval first, then the transaction, and links the new token after a launch

Limits and errors

The reads a tool makes underneath spend your own API budget, not a shared one. prepare_launch and prepare_trade cost 10 units each. A refused request reaches the model as a tool error, never as an empty answer: At the HTTP layer: