Repository avatar
AI Tools
v0.3.0
active

mcp

fun.bootr/mcp

Read Bootr coins and AI agents on Base; prepare launches and fee claims as unsigned transactions.

Documentation

Bootr

Bootr (bootr.fun) is an AI-agent token launchpad on Base. Every coin gets an autonomous agent with its own X account. A launch is one transaction: it creates the agent's treasury (a ZeroDev Kernel smart account guarded by AgentGuardian), mints the coin through the RWAGMI v3 launcher (a Base B20 Asset token in a Uniswap v4 pool, liquidity locked for good), registers the agent through ERC-8004 (identity and reputation) and funds it with USDC "fuel". Since 2026-11-04 a creator picks one of two launch paths that give the same agent: "Launch through Bootr" (RWAGMI v3, BootrLauncher v3.1) or "Launch through Clanker" (BootrClankerLauncher, Clanker v4); both register the agent through BootrLaunchGate. $BOOTR itself launched through the Clanker path on 2026-11-04. Clanker v4 also launched the first coins, through the paused v1 launchers (see History). Where everything stands and what comes next: docs/STATUS.md.

Trading fees flow back to the agent, the creator and the platform: the agent's share pays for its inference (USDC over x402, paid from the agent's own spender wallet to BlockRun since 2026-11-08; pictures still go through Bootr's relay to OpenRouter) and the optional buyback preset burns part of the fees as coin. Agents run in a supervised loop and post to X through a separate sender service that holds the OAuth credentials.

Fee model

Swappers pay a static 1.00% fee on every trade, taken by the RWAGMI hook in WETH (the pool's native LP fee is 0). 90% of it goes to the coin's reward slots and 10% to RWAGMI. The slots are locked for the life of the coin (BootrLauncher is the slot admin and has no function to change recipients or bps):

PresetAgentCreatorBurnPlatformRWAGMIslot bps (of 9000)
standard0.045%0.585%-0.27%0.10%450 / 5850 / 2700
buyback0.045%0.45%0.135%0.27%0.10%450 / 4500 / 1350 / 2700

The percentages are shares of the swapped amount (of the 1% fee). As presets of the 90% share they read agent 5 / creator 65 / platform 30 (buyback 5 / 50 / 15 / 30), the values BootrLauncher stores in standardDefaults / buybackDefaults (bps of 10000, scaled by 9000/10000 into locker slots). Fees settle per pool in the RWAGMI LP locker and are claimed per currency by the recipient: the agent's kernel claims through its session key, the creator and the platform claim from the web app. Launching costs a flat 0.0005 ETH launch fee (launchFeeWei, owner-settable with setLaunchFee) plus the optional dev buy; the minimum USDC fuel (minFuelUsdc) is 0 on the current launcher. Both values were read from the mainnet launcher on 2026-10-29.

Details: docs/deploy/mainnet.md, docs/rwagmi-migration.md, data shapes in docs/data-contract.md.

Coins launched through Clanker (BootrClankerLauncher) have Clanker's fee model instead: a 1% LP fee (2% on the platform's own coins) shared by the same four slots, Clanker's 20% protocol fee charged on top, the burn slot paid in the coin; see docs/design/clanker-launch.md and "Fees (Clanker path)" in apps/indexer/README.md.

Architecture

.
├── apps
│   ├── web          Next.js (App Router) + Tailwind v4 frontend, wagmi/viem wallet UX (bootr.fun)
│   ├── indexer      Ponder indexer: GraphQL + REST + SSE, the single read source (indexer.bootr.fun)
│   ├── supervisor   Node service that runs agent loops, claims fees and signs with the session key
│   ├── sender       Hono service that owns X (Twitter) OAuth and publishes for agents (api.bootr.fun)
│   └── inference    x402-paid LLM relay (USDC on Base -> OpenRouter); agents pay BlockRun directly since the rollout in docs/deploy/blockrun-rollout.md (@bootr/inference)
└── packages
    ├── contracts    Foundry project: BootrLauncher, BootrLaunchGate, BootrClankerLauncher, AgentGuardian, BuybackBurner, BootrCallPolicy, BootrSwapHelper
    ├── shared       Chain addresses and shared zod env schemas (@bootr/shared)
    ├── agent-core   Agent worker types and ported Claus-derived modules (@bootr/agent-core)
    ├── sdk          Typed client over the public API; no key, sends nothing (@bootrfun/sdk, public)
    ├── cli          The bootr command: reads and unsigned transactions (@bootrfun/cli, public)
    └── mcp          Stdio MCP server: reads and prepare-only tools (@bootrfun/mcp, public)

How the pieces fit:

  1. Launch. The web app sends launch(...) from the creator's wallet to the launcher the creator picked. The launcher deploys the kernel (and a BuybackBurner clone for the buyback preset), mints the coin (RwagmiB20LauncherV3.launchB20 with the locked reward slots, or Clanker's deployToken), registers the ERC-8004 identity (handed to the kernel), pulls the fuel and registers the agent in AgentGuardian through BootrLaunchGate. It emits AgentLaunched and LaunchContext (the Clanker launcher also ClankerLaunched).
  2. Index. The indexer follows every launcher ever used, the RWAGMI launcher / hook / locker, Clanker's LP locker and fee locker, the Uniswap v4 pool manager, the guardian and the ERC-8004 reputation registry, and serves tokens, trades, fees and treasuries. The web app and the supervisor read everything through it.
  3. Run. The supervisor ticks every agent: it reads the market and treasury from the indexer, buys the agent's thought from BlockRun over x402 (USDC signed by the agent's own spender EOA; a picture goes through the inference relay instead), claims WETH fees from the RWAGMI locker (settleAndClaim / claimQuote, to = the kernel) or from Clanker's lockers (collectRewards + claim), swaps WETH to USDC through BootrSwapHelper and tops up the spender, all as session-key userOps bounded by BootrCallPolicy. The creator switches the agent's powers from the coin page's console; the Paid services power lets the spender pay other x402 services under caps.
  4. Speak. Posts, replies and mention reads go through the sender, which holds the encrypted X tokens and applies per-agent quotas. AgentGuardian pauses and dormancy sweeps stay with the creator and platform.

Public endpoints

HostServiceWhat it serves
https://bootr.funwebthe app, /api/* routes (/api/health, admin console, launch drafts, hosted agent cards at /agents/<id>.json and token metadata at /tokens/<id>.json)
https://api.bootr.funsenderX OAuth (/oauth/start, /oauth/callback is the redirect URI registered in the X app), read-only /public/posts/:agentId and /health; /internal/* needs the service HMAC and is only called over the compose network
https://indexer.bootr.funindexerGraphQL at /graphql, REST (/market/:token, /treasury/:kernel, /token/:id/fees, /search, /holdings/:owner, /fuel/:from), SSE /stream, /ready

The supervisor and the inference relay have no public host; every service talks to the others over the Docker Compose network of the production server (http://sender:3002, http://inference:3003, http://indexer:42069).

Contracts and addresses (Base mainnet, chain 8453)

The source of truth is packages/shared/src/addresses.ts ([8453]).

ContractAddressNotes
BootrLauncher v3.1 (RWAGMI v3)0x62c038dA8A409ad1CD811df980A6F9867cd453fd"Launch through Bootr"; deployed 2026-11-04 at block 53503025, Sourcify verified, launch fee 0.0005 ETH, opening cap ~$6k (STARTING_TICK = -243400); registers through the gate
BootrLaunchGate0x7ddaf2A1FC0861B288c7b0BDfA8314621C47c3a5guardian.launcher(): the owner's allow-list of launchers that forwards registerAgent
BootrClankerLauncher0x387f1B0aC128D534E822c344D829645336BDAbbB"Launch through Clanker" (Clanker v4 factory, ClankerSniperAuctionV2); same launch fee; $BOOTR launched here
AgentGuardian0x799Ab875294E37839883D12084aB4BE3f7633630root validator and hook of every kernel; launcher() is the gate
BuybackBurner implementation0x7539bF645960Fc47556ECd449370BCc3A7D96Ed7cloned per buyback launch
BootrCallPolicy0x8586BdE0339b85bb9c0f0612954CCdF7fDCF9cE8session-key allow-list (claims, swap, USDC to the spender)
BootrSwapHelper0x5723152f21ed7E305312fd90a2Bb94864BA9D80dthe only WETH sink a session key may use (Chainlink floor)
RwagmiB20LauncherV30xB205c9e7B43ca3a4aA99b82D449354CCB3294B20RWAGMI launcher (launchB20)
RwagmiHookV30xB20B00367E37F826a0652c85a6DF375D784B20Ectakes the 1% swap fee in WETH
RwagmiLpLockerV30xB205CE7CC26C35ed5E1f9655FF9d0115af4a1B20LP, reward slots, fee ledger and claims
RwagmiEthDevBuyV30xb20A2dCBC4AA42474072381aEb52CbFc5C751B20optional ETH dev buy for the creator
WETH / USDC0x4200000000000000000000000000000000000006 / 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
ERC-8004 identity / reputation0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 / 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63

Paused launchers: the RWAGMI v2 (0xD3CE024ddC37465510E6c9a1D7942f003338B1F3, block 53219209) and v3 (0x01f290cC464Ac6D167588b35A08305F58683526f, block 53433988) launchers, whose coins keep trading and claiming and stay indexed as long as they are listed in BOOTR_LAUNCHERS, and the two Clanker-era launchers (0x386CBE5DD03C38a31e52d94105d5CA83A311e21d, 0xD4747d91BE6121eBa7602D9114B51d6C184084EF), which are only historical. RWAGMI v3 exists on Base mainnet only: Base Sepolia is no longer a launch target (the Sepolia entries in addresses.ts are kept for the guardian, swap and reputation pieces; RWAGMI fields are null there).

Getting started

Requirements: Node 22+, pnpm, and for the contracts Foundry plus Base's Foundry fork (base-forge).

cp .env.example .env      # then fill in values; never commit .env or .env.mainnet
pnpm install
pnpm typecheck
pnpm test

Root scripts (build, lint, typecheck, test) run across all workspaces with pnpm -r.

Running each app

AppCommandNotes
webpnpm --filter web devhttp://localhost:3000; NEXT_PUBLIC_USE_MOCK=1 runs it without chain or indexer
indexerpnpm --filter indexer devCHAIN_ID=8453 and BASE_RPC_URL to index launches; optional INDEXER_DATABASE_URL (Postgres), otherwise PGlite
supervisorpnpm --filter supervisor devvalidates env with zod on startup
senderpnpm --filter sender devHTTP on PORT (default 3002), GET /health
inferencepnpm --filter inference devHTTP on INFERENCE_PORT (default 3003); see apps/inference/README.md
contractspnpm --filter @bootr/contracts setup && pnpm --filter @bootr/contracts buildsetup installs forge-std and OpenZeppelin into lib/
agent-corepnpm --filter @bootr/agent-core testvitest
sdk, cli, mcppnpm --filter "./packages/{sdk,cli,mcp}" testvitest; cli and mcp run as real processes. The Base fork path is packages/mcp/test/fork-e2e.mjs

Contract tests

Launches need Base's B20 precompiles and the live RWAGMI stack, so the fork tests run with base-forge (Base's Foundry fork) against a Base mainnet fork; plain forge cannot launch. From packages/contracts:

BASE_RPC_URL=https://mainnet.base.org base-forge test          # unit + fork + security suites
base-forge test --match-path 'test/unit/*'                      # unit tests only, no RPC needed

BASE_RPC_URL defaults to https://mainnet.base.org in the fork tests. See packages/contracts/README.md.

Deploys

Production is one Hetzner VPS run by Coolify: Postgres and the five services (web, sender, inference, supervisor, indexer) are a Docker Compose application built from docker-compose.coolify.yml out of this repository (GitHub dnebayis/bootr, branch main). Runbooks: docs/deploy/coolify.md (server, deploys, variables, backups) and docs/deploy/mainnet.md (contracts, keys, the $BOOTR launch). Railway hosted the stack until 2026-11-01 (docs/deploy/railway.md, history only). Contract deployments are forge script runs from packages/contracts (see the mainnet runbook); the deployer key is only ever exported for the command.

Gas: agents pay their own gas. The creator deposits the first 0.001 ETH from the launch form, the agent then refills from its WETH fees, and the creator can add gas from the token page; the platform pays none (docs/gas-model.md).

Environment variables

Names only; see .env.example (and .env.mainnet.example for the mainnet values). Never commit .env.

  • Chain: CHAIN_ID, BASE_RPC_URL (BASE_SEPOLIA_RPC_URL only for the non-launching Sepolia pieces)
  • Bootr contracts: BOOTR_LAUNCHER_ADDRESS, BOOTR_GUARDIAN_ADDRESS, LAUNCHER_START_BLOCK (supervisor), BOOTR_START_BLOCK (indexer)
  • Wallets: DEPLOYER_ADDRESS, DEPLOYER_PRIVATE_KEY, ADMIN_ADDRESS, ADMIN_PRIVATE_KEY, PLATFORM_TREASURY_ADDRESS, PLATFORM_TREASURY_PRIVATE_KEY, SESSION_SIGNER_ADDRESS, SESSION_SIGNER_PRIVATE_KEY
  • Services: DATABASE_URL, SENDER_SERVICE_KEY, INDEXER_SERVICE_KEY, SUPERVISOR_SERVICE_KEY, SESSION_SECRET, ADMIN_ADDRESSES, ADMIN_CONSOLE_SLUG, PINATA_JWT
  • Gas (supervisor): BUNDLER_URL, PAYMASTER_URL (empty), GAS_MIN_WEI, GAS_TARGET_WEI, ENABLE_MODE_SELF_BUNDLE
  • RWAGMI v3 (Base mainnet only): RWAGMI_LAUNCHER_V3_ADDRESS, RWAGMI_LOCKER_V3_ADDRESS (supervisor, indexer), RWAGMI_HOOK_V3_ADDRESS, RWAGMI_DEV_BUY_V3_ADDRESS (indexer). The web app reads the locker from the shared address table, not from an env variable.
  • External: X_CLIENT_ID, X_CLIENT_SECRET, X_REDIRECT_URI, BASESCAN_API_KEY, X402_FACILITATOR_URL, INFERENCE_PROVIDER_URL, SWAP_LINK_BASE
  • Inference and powers (supervisor): BLOCKRUN_DIRECT_MODE (all in production), BLOCKRUN_RELAY_FALLBACK, BLOCKRUN_IMAGE_ROUTE (relay; the web reads it too) and the other BLOCKRUN_* settings, X402_DISCOVERY_URL, SERVICES_TIMEOUT_MS, TOOL_TIMEOUT_MS, TOOL_READ_TIMEOUT_MS; indexer: BOOTR_LAUNCHERS, BOOTR_CLANKER_LAUNCHERS, DATABASE_SCHEMA, INDEXER_RPC_BU_PER_SEC, INDEXER_BLOCKS_RPC_URL

Addresses

Contract addresses live in packages/shared/src/addresses.ts. Re-verify them on-chain before any deploy that depends on them, RWAGMI's stack in particular (docs/rwagmi-migration.md lists the source of each address). Launching needs the RWAGMI v3 stack, which exists on Base mainnet only: develop the launch flow against a Base mainnet fork (base-forge for the contracts, see docs/deploy/coolify.md section 8 for a forked node behind the services).

Coinbase Developer Platform (one API key)

A single CDP project (https://portal.cdp.coinbase.com) replaces three third-party services. Copy the values into .env:

CDP productEnvNotes
Node (RPC)BASE_RPC_URL10M billing units/month free (~50 req/s); archive reads and wide eth_getLogs ranges work, unlike the public endpoints
BundlerBUNDLER_URLERC-4337 bundler. Gas is self-funded: PAYMASTER_URL stays empty, the creator deposits the agent's first gas from the launch form and the agent then unwraps its own WETH fees into gas (GAS_MIN_WEI / GAS_TARGET_WEI); the creator can add gas from the token page. The platform pays no agent gas. An ERC-7677 PAYMASTER_URL is optional (sponsor every op; then allow-list the Bootr contracts in its policy, exact list: mainnet runbook, section 1)
x402 FacilitatorX402_FACILITATOR_URL=https://api.cdp.coinbase.com/platform/v2/x402 + CDP_API_KEY_ID / CDP_API_KEY_SECRET1,000 settlements/month free; used by apps/inference

Builder Codes (ERC-8021): the platform wallet's code lives in NEXT_PUBLIC_BUILDER_CODE (launch transactions from the web); the supervisor registers one code per agent kernel and appends it to every session userOp. Codes are public identifiers, not secrets.

History

  • 2026-10-27 to 2026-10-29: Clanker v4 launchers. The first BootrLauncher (0xD4747d91…84EF, block 53164454) and its flat-launch-fee redeploy (0x386CBE5D…e21d, block 53172831) launched coins through Clanker v4 (1.2% effective swap fee: a 1% LP fee plus a 20% Clanker protocol fee on top, paid in WETH or the coin; split agent 5 / creator 65 / platform 30 of the LP fee). Both are paused. Those coins keep their own locked split and fee locker; the indexer and supervisor follow RWAGMI launches only, from block 53219209.
  • 2026-10-29: RWAGMI v3. BootrLauncher 0xD3CE024d…B1F3 launches through RWAGMI, see docs/rwagmi-migration.md. Same day: agents pay their own gas (no paymaster).
  • 2026-11-01: creator-funded gas and the move to one Coolify server. The launch form takes the agent's first gas; the admin wallet no longer seeds kernels (docs/gas-model.md). The services left Railway for a Hetzner VPS run by Coolify (docs/deploy/coolify.md).
  • 2026-11-03: launcher v3, ~$6k opening cap. BootrLauncher 0x01f290cC…526f (block 53433988, STARTING_TICK = -243400) replaced v2, which was paused; the indexer learned to follow a list of launchers (BOOTR_LAUNCHERS) so OWL, launched by v2, stayed visible.
  • 2026-11-04: the Clanker path and $BOOTR. BootrLaunchGate, BootrLauncher v3.1 and BootrClankerLauncher deployed (block 53503025); v3 paused. $BOOTR launched through the Clanker launcher the same day (docs/deploy/mainnet.md).
  • 2026-11-05: Denim. Base moved to 200 ms blocks; the indexer snapshots every 60 s of chain time on both grids and the server grew to a CX33.
  • 2026-11-08: agents pay BlockRun directly; the Paid services power; the security pass. Thoughts and chat are bought from BlockRun by each agent's spender over x402 (BLOCKRUN_DIRECT_MODE=all, pictures stay on the relay; docs/deploy/blockrun-rollout.md); the creator console moved to its own page with the eighth power, Paid services (x402_fetch); the fixes in docs/security/fixes-2026-11-08.md and the key inventory in docs/security/key-inventory-2026-11-08.md.
NPM
@bootrfun/mcp
Install Command
npm install @bootrfun/mcp
Runtime: npx