roodex-mcp
v1.0.1
Published
MCP server for Robinhood Chain (chain id 4663): verified ABIs, fork simulation with trading sessions and compliance, revert decoding, eight Nitro-semantics lint rules and signed simulation receipts.
Maintainers
Readme
roodex-mcp
MCP server for Robinhood Chain — chain id 4663, an Arbitrum Orbit / Nitro
L2 with 100 ms blocks, an FCFS sequencer that ignores priority fee, and data
availability through Ethereum blobs.
The chain reached mainnet on 1 July 2026 and is absent from model training data, so an agent without it substitutes Arbitrum One constants, counts blocks in the wrong units, and writes MEV logic around a fee the sequencer discards.
codex mcp add roodex -- npx -y roodex-mcp
claude mcp add roodex -- npx -y roodex-mcpCursor — .cursor/mcp.json:
{ "mcpServers": { "roodex": { "command": "npx", "args": ["-y", "roodex-mcp"] } } }stdio transport, JSON-RPC 2.0, zero runtime dependencies. Node 20+.
Tools
| Tool | What it does |
|---|---|
| rhc_network | network parameters, sequencer policy, finality — and a warning if you pass a foreign chain id |
| rhc_contract | verified ABI and source by address, calldata decoding, proxy resolution |
| rhc_simulate | runs a bundle on a fork: state diff, gas, call trace |
| rhc_revert | decodes reverts — Error, Panic, custom errors, ArbOS system errors, nested |
| rhc_assets | stock-token registry: restriction module, position cap, live session state |
| rhc_calendar | NYSE sessions and upcoming corporate actions |
| rhc_lint | eight rules for Nitro semantics and stock tokens |
| rhc_gas | splits cost into L2 execution and L1 blob data |
| rhc_docs | search across versioned RHC, Nitro and precompile documentation |
| rhc_scaffold | templates, plus the AGENTS.md generator |
| rhc_verify | Blockscout verification |
| rhc_receipt | signs a simulation receipt (EIP-712) and publishes its hash on chain |
Each returns structured JSON plus a short summary: the agent reads the summary, a human reading the log sees the numbers.
What makes the simulation different
A generic fork will happily let a stock-token transfer succeed. This one models what the chain actually enforces — NYSE trading sessions, halts, per-token compliance modules, position caps and corporate actions — so the revert happens in simulation rather than in production:
✗ transfer 10 GMEx transfer(address,uint256)
TradingHalted(reason: 0xaf50d42d…)
The token is halted. Liquidations and rebalances must be able to wait. Rule RD005.
! GMEx has been halted since 2026-08-06T14:12:00Z: LUDP volatility halt
(NYSE Rule 80B tier-1). A generic fork never sees this.State diffs are computed against real Solidity storage slots (keccak256 over
the layout), logs go through a real ABI encoder, reverts are real custom errors,
and receipts carry a real EIP-712 signature that recovers to its signer.
Lint rules
RD001 block.number as an L2 block counter ·
RD002 ordering bought with priority fee ·
RD003 cached balanceOf/totalSupply of a stock token ·
RD004 transfer without handling compliance rejection ·
RD005 pricing or liquidation outside the trading session ·
RD006 msg.sender without L1→L2 aliasing ·
RD007 gas budget without the L1 component ·
RD008 windows sized for twelve-second blocks
Every rule ships with a primary source and a replacement snippet — the agent gets a fix, not a prohibition.
Scope
Network access is modelled, not live: the RPC, archive reads and publication to
RoodAttestations run against deterministic local fixtures. Everything that
does not need a node — the linter, the session and calendar logic, storage-slot
math, ABI and revert decoding, gas decomposition, EIP-712 signing and
verification — is real and runs offline.
The fork is a domain simulator rather than a full EVM: unknown selectors report that no fork adapter exists instead of guessing.
See also
roodex— the CLI:npx roodex initwrites anAGENTS.mdany agent can read, and the same checks run in CI.- https://roodex.tech
MIT.
