# the-floor MCP server

Read & play The Floor, an on-chain strategy game on Robinhood Chain. Unofficial companion.

## Links
- Registry page: https://www.getdrio.com/mcp/io-github-domirep-the-floor
- Website: https://thefloor-dashboard-production.up.railway.app

## Install
- Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- Auth: Not captured

## Setup notes
- Remote endpoint: https://thefloor-dashboard-production.up.railway.app/mcp

## Tools
- get_floor_state - The whole state of the floor in one call: price, market cap, supply, burned, emissions/halving, global alpha, player count, and the reinvest-vs-sell split. Start here for context. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_player - One wallet: desk tier, alpha, share of emissions, FLOOR/day, pending PnL, balance, seated operator roster, and lifetime spend/sold. Fields may be null if an upstream scan failed — check partial and unknownFields; null means unknown, not zero. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_leaderboard - Wallets ranked by alpha (earning power), plus top recruiters by referral earned. A wallet's recruiter is fixed forever at desk creation. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_behavior - Do desk owners reinvest or dump? Splits FLOOR flow into player / trader / routed / liquidity. playerSellShare is a share of ATTRIBUTABLE sells only; routed = aggregator/bot flow with no identifiable human; liquidity (LP adds/withdrawals) is excluded from buys and sells entirely. Use these buckets — deriving "sells" from raw pool transfers double-counts LP deposits as dumps. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_history - Daily snapshots for trends: price, market cap, burned, supply, players, alpha, holders. Rows before live tracking began are reconstructed from chain events and marked seeded:true; a metric absent on a row could not be honestly sourced for that day — treat it as unknown, not zero. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_live_actions - Recent on-chain game actions: collect, claim, seat, recruit, starter, unseat, upgrade, newdesk, referral, firmburn. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_holders - Top $FLOOR holders by balance. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_firms - Firms, their members and contributions, plus unaffiliated free agents ranked by alpha. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_distribution - How desks and alpha are spread across players: tier counts and alpha concentration (top 1% / top 10%). Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- prepare_create_desk - Build the UNSIGNED transaction that opens a desk (joins the game). Returns {to, value, data} for the caller to sign with their OWN wallet — this server never sees, holds, or asks for a private key, and never broadcasts. Costs 0.01 ETH. IMPORTANT: the recruiter is written on-chain at desk creation and can NEVER be changed afterwards; it defaults to this dashboard's address (which earns 5% of what the player later spends, paid from the game treasury, costing the player nothing). Pass `referrer` to set your own, or the zero address for none. Always tell the user who the referrer is before they sign. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- list_operators - The operator catalogue: id (zero-based, as passed to prepare_recruit_operator), name, FLOOR cost, alpha and bandwidth. Read this before recruiting so you pick the right id — ids are positional and an off-by-one silently buys a different operator. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- prepare_collect - Build the UNSIGNED transaction to collect your desk's pending PnL. Free (no FLOOR, no ETH beyond gas). Use get_player first to see pendingPnL. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- prepare_recruit_starter - Build the UNSIGNED transaction to recruit the free starter operator. No FLOOR cost. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- prepare_recruit_operator - Build the UNSIGNED transaction to recruit an operator by id (see list_operators — ids are ZERO-BASED). Spends FLOOR, so it requires an ERC20 approve first; if your allowance is short, the response includes an `approveFirst` transaction to sign before this one. 75% of what you spend is burned. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- prepare_upgrade_desk - Build the UNSIGNED transaction to upgrade your desk to the next tier (takes no arguments — it always steps up one tier). Spends FLOOR, so an approve may be needed first; pass `costFloor` from the desk table if you want the allowance checked against the exact price. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- prepare_seat_operator - Build the UNSIGNED transaction to seat an operator you own (by its FLOOROP NFT token id) at your desk, so it starts earning alpha. Seats and bandwidth are limited by your desk tier. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- prepare_unseat_operator - Build the UNSIGNED transaction to unseat an operator (frees its seat and bandwidth). Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- prepare_approve_floor - Build the UNSIGNED ERC20 approve letting the game contract spend your FLOOR. Needed before recruiting or upgrading. Approves an exact amount by default rather than unlimited — pass `amount` in whole FLOOR. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_strategy - The decision-relevant math for one wallet, so an agent can reason about its next move: current alpha/share, FLOOR earned per day (and USD), pending PnL waiting to be collected, seat + bandwidth headroom, the next desk upgrade (cost and what it unlocks), each operator's payback in days at the current emission rate, and the halving countdown (emissions ~halve after it). These are FACTS and paybacks, not instructions — the agent decides. Ignores halving decay in payback (best case). Needs the wallet to have a desk. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_swap_info - Everything needed to swap ETH↔FLOOR on Robinhood Chain: the Uniswap V3 router, WETH address, the FLOOR/WETH pool and its 1% fee tier, and the LIVE spot price (FLOOR per ETH) read from the pool. Note the pool is thin (~tens of $k liquidity) so large buys move the price hard — size accordingly. Read this before prepare_swap_eth_for_floor, or to construct/verify a swap yourself. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- prepare_wrap_eth - Build the UNSIGNED transaction to wrap native ETH into WETH (step 1 of buying FLOOR — the router swaps WETH, not raw ETH). Returns a WETH.deposit() call carrying your ETH as value. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- prepare_swap_eth_for_floor - Build the UNSIGNED Uniswap V3 swap that buys FLOOR with WETH (exactInputSingle). Full buy flow is 3 signed steps: (1) prepare_wrap_eth, (2) approve WETH to the router [included as approveWeth when `from` is given and allowance is short], (3) this swap. amountOutMinimum is computed from the LIVE pool price minus your slippage, so you are protected from a bad fill — but VERIFY the numbers before signing; this spends real money and the pool is thin. Selling FLOOR for ETH is the reverse and not built here. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_brokers - StonkBrokers collection state in one call: minted/holders, activation tier census, stock-dividend rounds (~10-min cadence, ETH value per round), $STONKBROKER price + burns, and the Floor-crossover count. Different game, same chain — each broker NFT owns a real ERC-6551 wallet seeded with tokenized stock. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_broker - One StonkBroker by id (1-4444): owner, its ERC-6551 wallet address and holdings, the stock it was seeded with, per-stock dividends received, activation tier, whether its wallet owns a Floor desk (floor.hasDesk), and its on-chain art. null means unknown, never zero. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_broker_activation_math - The decision math for activating a StonkBroker: per tier — activation fee in $STONKBROKER and USD, your weight share of the dividend pool after dilution, estimated dividends/day (from the observed drop rate), and payback days. Pass `id` for an exact on-chain fee quote (handles upgrade credit for already-active brokers). FACTS not advice: the drop rate tracks AMM trading volume and varies; new activations dilute everyone; token prices move. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- prepare_activate_broker - VERIFICATION-GATED: build the UNSIGNED transaction(s) to activate a StonkBroker's dividend drops at a tier (or upgrade an active one — the on-chain quote credits what was already paid). This tool ERRORS and returns no calldata unless every check passes live on-chain: the fee quote and the signer's $STONKBROKER allowance (so `from` is required). Fee is paid by the signer (50% burned, 50% treasury); `approveFirst` is included when the allowance is short. IMPORTANT: the NFT's transfer hook CLEARS activation on every ownership change — activate AFTER any planned transfer (e.g. moving the broker to an agent wallet), never right before one, or the fee is wasted. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_broker_floor_status - Cross-game: does this StonkBroker's ERC-6551 wallet play The Floor? Returns the wallet, whether it owns a desk, and if so its live desk state (alpha, share, pending PnL, FLOOR balance). Binding rule: the desk itself (level/alpha) is permanently bound to the NFT and transfers on sale; liquid contents (FLOOR balance, operator NFTs, tokens) remain removable by the current owner until the sale lands. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- prepare_broker_floor_desk - VERIFICATION-GATED cross-game move (nobody on the chain has done it yet): build the UNSIGNED transaction that makes a StonkBroker's OWN ERC-6551 wallet open a desk on The Floor. This tool ERRORS and returns no calldata unless every check passes live on-chain: the broker must be ACTIVATED (policy — activation is the commitment step, the desk is the perk; activate first if not), `from` is required and must match ownerOf (executeCall is owner-gated), and the broker wallet must verifiably have no desk. Why do it: the desk and its alpha bind to the NFT and transfer with it on sale — the only way a Floor position can change hands — giving the broker a second income stream alongside its stock dividends (liquid wallet contents remain owner-removable until a sale; never promise a buyer the wallet's tokens). The 0.01 ETH rides along with your signature (no prior wallet funding). Referrer: on-chain, permanent, defaults to this dashboard's address, overridable — always tell the user who it is before signing. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_stock_tokens - The three DIVIDEND stocks the StockBooster drops into broker wallets (currently AAPL/AMZN/NVDA): symbol, address, decimals, live USD price, and each Uniswap V3 pool with real liquidity (fee tier + quote asset + pool address). This is NOT the full set a broker can hold or trade — wallets also hold SLV, USO, SPCX, GOOGL, META, INTC, ORCL and more; call get_broker for a wallet's complete holdings, which returns an address and USD value per token that you can pass straight to prepare_broker_trade. PRICING THIS CHAIN, if you compute your own: these RWAs quote against USDG (6 decimals) not WETH — assuming WETH finds no AMZN market at all and routes AAPL into EMPTY pools that getPool still returns an address for; check pool.liquidity() before trusting a quote; and beware copycat tokens (AMZNAMZN, AMZNC, AMZNUSDG all exist with large nominal liquidity) — pricing off one is confidently wrong. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- prepare_broker_trade - VERIFICATION-GATED: build the UNSIGNED Uniswap V3 swap that makes a StonkBroker's OWN ERC-6551 wallet trade one token for another on Robinhood Chain — the wallet spends, and the OUTPUT LANDS IN THE WALLET, so both sides belong to the NFT and transfer with it on sale. Errors with no calldata unless `from` matches ownerOf on-chain (executeCall is owner-gated) and the broker wallet verifiably holds enough tokenIn. Refuses to build a swap with no price floor: pass `pool` for a live on-chain quote (amountOutMinimum = quote − slippagePct) or `minAmountOut` yourself — a zero minimum is a guaranteed sandwich. The router pulls via transferFrom, so if the WALLET'S allowance is short an `approveFirst` transaction is returned and both must be signed in order. Nothing here is signed or broadcast; the owner signs both. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- prepare_broker_floor_collect - VERIFICATION-GATED: build the UNSIGNED transaction that makes a StonkBroker's wallet collect its Floor desk's pending PnL. Errors with no calldata unless `from` matches ownerOf on-chain and the wallet verifiably has a desk. The collected FLOOR lands IN the broker's wallet (it belongs to the NFT, not to you — use the wallet's executeCall for anything further). Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp
- get_broker_leaderboard - Activated StonkBrokers ranked by the USD value of their wallet CONTENTS right now (the 3 dividend stocks + $STONKBROKER + ETH, priced from their on-chain pools). IMPORTANT framing: contents are a removable snapshot — the current owner can move everything out before a sale; a paid activation is cleared on every transfer (buyers re-activate); a Floor desk lives on the broker's wallet and survives sales. Report this as data, never as an appraisal or a promise of value. Endpoint: https://thefloor-dashboard-production.up.railway.app/mcp

## Resources
Not captured

## Prompts
Not captured

## Metadata
- Owner: io.github.Domirep
- Version: 1.0.0
- Runtime: Streamable Http
- Transports: HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Jul 17, 2026
- Source: https://registry.modelcontextprotocol.io
