Arbitrum MCP Server Node Operations: Complete Tool Reference
The Arbitrum MCP Server exposes 20+ RPC-based node operations through the NitroNodeClient class, covering health monitoring, block tracing, validation, maintenance, and Timeboost auction management.
The Arbitrum MCP Server (dewanshparashar/arbitrum-mcp) provides Model Context Protocol (MCP) tools that interface directly with Arbitrum Nitro nodes. These operations allow AI agents and applications to query node health, trace transactions, validate state, and manage express-lane auctions through standardized JSON-RPC calls.
Legacy Node Status Operations
The server implements three core diagnostic tools for monitoring node health and connectivity. These map to standard Ethereum and Arbitrum admin APIs.
Node Health Checks
The node_health tool calls arb_getHealth via the admin API to report the current health status of a Nitro node. Implemented in src/clients/nitro-node-client.ts at lines 70-84, the NitroNodeClient.getHealth() method returns the node's operational state.
// Tool: node_health
// Calls NitroNodeClient.getHealth(rpcUrl)
const result = await client.getHealth("https://arb1.arbitrum.io/rpc");
Synchronization Status
The sync_status tool invokes eth_syncing (with a fallback to eth_blockNumber) to determine whether a node is fully synchronized or still catching up with the chain. The NitroNodeClient.getSyncStatus() method at lines 87-133 handles the logic for parsing sync progress or returning the current block height when synced.
Peer Discovery
The node_peers tool exposes admin_peers to list all connected peers. The implementation at src/clients/nitro-node-client.ts lines 136-152 provides network topology data for debugging connectivity issues.
Publisher and Validation Operations
Publisher Health Monitoring
The arb_check_publisher_health tool verifies the health of the transaction publisher (sequencer) through the arb_checkPublisherHealth RPC method. This is implemented in NitroNodeClient.checkPublisherHealth() at lines 56-69.
Raw Block Metadata
For advanced debugging, the arb_get_raw_block_metadata tool fetches uncompressed block metadata for specified block ranges. The NitroNodeClient.getRawBlockMetadata() method (lines 172-188) handles these requests, returning internal Arbitrum-specific block data structures.
Latest Validated State
The arb_latest_validated tool retrieves the most recent validated global state through arb_latestValidated. Implemented at lines 200-210 in NitroNodeClient.getLatestValidated(), this operation is critical for confirming finality in Arbitrum's rollup architecture.
Trace API Operations
The server exposes a comprehensive Trace API with nine distinct tools for transaction tracing and debugging. These methods map to Arbitrum's arbtrace_* namespace.
Single and Batch Call Tracing
arbtrace_call: Traces a single call with optional trace types (e.g., "trace", "vmTrace", "stateDiff"). Implemented inNitroNodeClient.traceCall()at lines 215-235.arbtrace_callMany: Batch-traces multiple calls in a single request. ThetraceCallMany()method at lines 237-254 accepts an array of call objects and trace configurations.
Block and Transaction Replay
arbtrace_replayBlockTransactions: Replays and traces all transactions within a specific block. SeereplayBlockTransactions()at lines 257-275.arbtrace_replayTransaction: Replays and traces a single transaction by hash. Implemented inreplayTransaction()at lines 277-295.arbtrace_transaction: Retrieves trace data for a given transaction hash without full replay. SeetraceTransaction()at lines 298-313.
Advanced Trace Queries
arbtrace_get: Retrieves a specific path within an existing trace object. Implemented intraceGet()at lines 311-327.arbtrace_block: Traces all transactions in a block, returning structured trace data. SeetraceBlock()at lines 329-345.arbtrace_filter: Filters traces using custom criteria such as address ranges or block numbers. Implemented intraceFilter()at lines 347-363.
Debug and Maintenance Operations
Debug API
The server provides low-level debugging tools for validation:
arbdebug_validateMessageNumber: Validates a specific L2 message number throughNitroNodeClient.validateMessageNumber()(lines 555-575).arbdebug_validationInputsAt: Fetches validation inputs for a specific message viagetValidationInputsAt()(lines 587-606).
Maintenance API
Node operators can monitor and trigger maintenance tasks:
maintenance_status: Reports seconds since the last maintenance run by callingmaintenance_secondsSinceLastMaintenance. Implemented ingetMaintenanceStatus()at lines 512-528.maintenance_trigger: Manually initiates a maintenance operation throughmaintenance_trigger. SeetriggerMaintenance()at lines 530-548.
Timeboost and Auctioneer Operations
Express Lane Transactions
The timeboost_sendExpressLaneTransaction tool submits priority transactions to Arbitrum's Timeboost express lanes. This calls timeboost_sendExpressLaneTransaction via NitroNodeClient.sendExpressLaneTransaction() at lines 488-506.
Auction Resolution
The auctioneer_submitAuctionResolutionTransaction tool handles auction resolution for express lane rights. Implemented in submitAuctionResolutionTransaction() at lines 512-531, this operation is essential for the Timeboost auction mechanism.
Implementation Architecture
All node operations are registered in the tool registry within src/index.ts (see the "NEW ARBITRUM NODE TOOLS" and "MONITORING TOOLS" sections starting around line 1000). The server instantiates NitroNodeClient with a resolved RPC URL—determined by resolveRpcUrl() (lines 54-88)—and routes incoming MCP tool requests to the appropriate client method.
The request handler in CallToolRequestSchema (around line 540) uses a switch statement to map tool names like arbtrace_call or node_health to their corresponding NitroNodeClient implementations, returning JSON-stringified results to the caller.
Summary
- The Arbitrum MCP Server exposes 20+ node operations categorized into health monitoring, tracing, validation, maintenance, and Timeboost auctions.
- All operations are implemented in
src/clients/nitro-node-client.tswithin theNitroNodeClientclass. - Tools are registered in
src/index.tsand handle RPC URL resolution throughresolveRpcUrl(). - The Trace API provides the most extensive coverage with nine distinct tracing methods for debugging transactions and blocks.
- Timeboost operations enable interaction with Arbitrum's priority transaction lanes and auction mechanisms.
Frequently Asked Questions
How do I check if an Arbitrum node is fully synchronized using the MCP server?
Call the sync_status tool, which invokes eth_syncing through NitroNodeClient.getSyncStatus(). If the node is synced, it returns the current block number; if syncing, it returns progress data including current, highest, and starting block heights.
What is the difference between arbtrace_call and arbtrace_transaction?
arbtrace_call simulates a call against the current state without requiring a transaction hash, useful for testing hypothetical transactions. arbtrace_transaction retrieves the trace of an already-mined transaction by its hash. The former uses traceCall() while the latter uses traceTransaction() in src/clients/nitro-node-client.ts.
Which node operations require admin API access?
Operations like node_health (calling arb_getHealth) and node_peers (calling admin_peers) require the RPC endpoint to have admin APIs enabled. Standard tracing and block query operations typically work with standard RPC endpoints, though some debug methods may require additional permissions.
Can the MCP server submit transactions to Arbitrum's express lanes?
Yes. The timeboost_sendExpressLaneTransaction tool allows submission of priority transactions to Timeboost express lanes through the sendExpressLaneTransaction() method, while auctioneer_submitAuctionResolutionTransaction handles auction settlements for lane rights.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →