Arbitrum MCP Server
Tools for reading and writing to the Arbitrum blockchain. Connect to the server, then call tools by name.
Server
URL: https://arbitrum-mcp.saurabh10102.workers.dev/mcp
Transport: Streamable HTTP (POST)
Headers:
Content-Type: application/json
Accept: application/json, text/event-stream
Choosing the Right Tool
- "What's this wallet's balance?" →
get_eth_balance for ETH, get_token_balance for any ERC-20
- "What's ARB trading at?" →
get_arb_price (real-time from Chainlink oracle, no API key needed)
- "Call a contract function" →
read_contract for any view/pure function. You provide the ABI — this is the most flexible tool
- "What happened in this tx?" →
get_transaction returns full details + receipt
- "Swap X for Y on Arbitrum" →
swap_tokens handles any token pair via Relay.link, including native ETH
- "Move funds to Arbitrum" →
bridge_to_arbitrum bridges from Ethereum, Base, or BSC
- "Deploy this contract" →
deploy_contract takes raw bytecode + optional constructor args
- "Register an agent on-chain" →
register_agent mints an ERC-8004 identity NFT
Quick Reference
| Tool |
Description |
Writes? |
get_eth_balance |
ETH balance of any address |
|
get_token_balance |
ERC-20 balance with symbol + decimals |
|
get_arb_price |
ARB/USD from Chainlink oracle |
|
read_contract |
Call any read-only contract function |
|
get_transaction |
Tx details + receipt by hash |
|
swap_tokens |
Swap any tokens on Arbitrum via Relay.link |
Yes |
bridge_to_arbitrum |
Bridge from Ethereum/Base/BSC via Relay.link |
Yes |
deploy_contract |
Deploy contract from bytecode |
Yes |
register_agent |
Register on ERC-8004 Identity Registry |
Yes |
Tools
get_eth_balance
- Input:
address, network? ("one" | "sepolia", default "one")
- Output:
{ address, balance, unit: "ETH", network }
get_token_balance
- Input:
address, tokenAddress, network?
- Output:
{ address, token: { address, symbol, decimals }, balance, network }
get_arb_price
- Input: none
- Output:
{ price, currency: "USD", updatedAt }
read_contract
The most flexible read tool — works with any contract as long as you provide the ABI for the function you want to call.
- Input:
address, abi (JSON string), functionName, args?, network?
- Output:
{ address, functionName, result }
get_transaction
- Input:
txHash, network?
- Output:
{ hash, from, to, value, status, blockNumber, gasUsed, network }
swap_tokens
Swaps any token pair on Arbitrum via Relay.link. Use 0x0000000000000000000000000000000000000000 for native ETH. The server handles quoting and transaction execution — you just specify what to swap.
- Input:
tokenIn, tokenOut, amountIn (human-readable e.g. "1.5"), network?
- Output:
{ txHashes, tokenIn, tokenOut, amountIn, network }
bridge_to_arbitrum
Bridges native tokens (ETH or BNB) from another chain to Arbitrum. Uses Relay.link under the hood — typically completes in a few minutes.
- Input:
originChain ("ethereum" | "base" | "bsc" | "sepolia"), amount, recipient?, network?
- Output:
{ txHashes, originChain, destinationChainId, amount, recipient, network }
deploy_contract
- Input:
bytecode, abi? (JSON string, needed if constructor has args), constructorArgs?, network?
- Output:
{ contractAddress, txHash, status, network }
register_agent
Registers an AI agent on the Arbitrum ERC-8004 Identity Registry. This mints an NFT representing the agent's on-chain identity.
- Input:
name, metadata? (array of { metadataKey, metadataValue }), network? (default "sepolia")
- Output:
{ txHash, status, name, network, registryAddress }
Networks
All tools accept network: "one" (Arbitrum One mainnet, default) or "sepolia" (Arbitrum Sepolia testnet). Use Sepolia for testing — it's free and behaves identically.
Write tools require a configured wallet with funds on the target network. Read tools work without a wallet.
Common Token Addresses (Arbitrum One)
| Token |
Address |
| Native ETH |
0x0000000000000000000000000000000000000000 |
| USDC |
0xaf88d065e77c8cC2239327C5EDb3A432268e5831 |
| USDT |
0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9 |
| ARB |
0x912CE59144191C1204E64559FE8253a0e49E6548 |
| WETH |
0x82aF49447D8a07e3bd95BD0d56f35241523fBab1 |
See examples.md for full request/response examples of every tool.
1---2name: arbitrum-mcp3description: Use when the user wants to interact with the Arbitrum blockchain or any EVM chain that bridges to Arbitrum. This includes checking wallet balances, looking up token prices, reading smart contracts, fetching transaction details, swapping tokens, bridging assets from Ethereum/Base/BSC to Arbitrum, deploying contracts, or registering AI agents on-chain. Trigger this skill whenever the user mentions Arbitrum, ARB token, Arbitrum Sepolia, cross-chain bridging to L2, on-chain agent identity, or ERC-8004 — even if they don't explicitly say "use the MCP server."4---56# Arbitrum MCP Server78Tools for reading and writing to the Arbitrum blockchain. Connect to the server, then call tools by name.910## Server1112```13URL: https://arbitrum-mcp.saurabh10102.workers.dev/mcp14Transport: Streamable HTTP (POST)15Headers:16 Content-Type: application/json17 Accept: application/json, text/event-stream18```1920## Choosing the Right Tool2122- **"What's this wallet's balance?"** → `get_eth_balance` for ETH, `get_token_balance` for any ERC-2023- **"What's ARB trading at?"** → `get_arb_price` (real-time from Chainlink oracle, no API key needed)24- **"Call a contract function"** → `read_contract` for any view/pure function. You provide the ABI — this is the most flexible tool25- **"What happened in this tx?"** → `get_transaction` returns full details + receipt26- **"Swap X for Y on Arbitrum"** → `swap_tokens` handles any token pair via Relay.link, including native ETH27- **"Move funds to Arbitrum"** → `bridge_to_arbitrum` bridges from Ethereum, Base, or BSC28- **"Deploy this contract"** → `deploy_contract` takes raw bytecode + optional constructor args29- **"Register an agent on-chain"** → `register_agent` mints an ERC-8004 identity NFT3031## Quick Reference3233| Tool | Description | Writes? |34|------|-------------|:---:|35| `get_eth_balance` | ETH balance of any address | |36| `get_token_balance` | ERC-20 balance with symbol + decimals | |37| `get_arb_price` | ARB/USD from Chainlink oracle | |38| `read_contract` | Call any read-only contract function | |39| `get_transaction` | Tx details + receipt by hash | |40| `swap_tokens` | Swap any tokens on Arbitrum via Relay.link | Yes |41| `bridge_to_arbitrum` | Bridge from Ethereum/Base/BSC via Relay.link | Yes |42| `deploy_contract` | Deploy contract from bytecode | Yes |43| `register_agent` | Register on ERC-8004 Identity Registry | Yes |4445## Tools4647### get_eth_balance48- **Input**: `address`, `network?` ("one" | "sepolia", default "one")49- **Output**: `{ address, balance, unit: "ETH", network }`5051### get_token_balance52- **Input**: `address`, `tokenAddress`, `network?`53- **Output**: `{ address, token: { address, symbol, decimals }, balance, network }`5455### get_arb_price56- **Input**: none57- **Output**: `{ price, currency: "USD", updatedAt }`5859### read_contract60The most flexible read tool — works with any contract as long as you provide the ABI for the function you want to call.61- **Input**: `address`, `abi` (JSON string), `functionName`, `args?`, `network?`62- **Output**: `{ address, functionName, result }`6364### get_transaction65- **Input**: `txHash`, `network?`66- **Output**: `{ hash, from, to, value, status, blockNumber, gasUsed, network }`6768### swap_tokens69Swaps any token pair on Arbitrum via Relay.link. Use `0x0000000000000000000000000000000000000000` for native ETH. The server handles quoting and transaction execution — you just specify what to swap.70- **Input**: `tokenIn`, `tokenOut`, `amountIn` (human-readable e.g. "1.5"), `network?`71- **Output**: `{ txHashes, tokenIn, tokenOut, amountIn, network }`7273### bridge_to_arbitrum74Bridges native tokens (ETH or BNB) from another chain to Arbitrum. Uses Relay.link under the hood — typically completes in a few minutes.75- **Input**: `originChain` ("ethereum" | "base" | "bsc" | "sepolia"), `amount`, `recipient?`, `network?`76- **Output**: `{ txHashes, originChain, destinationChainId, amount, recipient, network }`7778### deploy_contract79- **Input**: `bytecode`, `abi?` (JSON string, needed if constructor has args), `constructorArgs?`, `network?`80- **Output**: `{ contractAddress, txHash, status, network }`8182### register_agent83Registers an AI agent on the Arbitrum ERC-8004 Identity Registry. This mints an NFT representing the agent's on-chain identity.84- **Input**: `name`, `metadata?` (array of `{ metadataKey, metadataValue }`), `network?` (default "sepolia")85- **Output**: `{ txHash, status, name, network, registryAddress }`8687## Networks8889All tools accept `network`: `"one"` (Arbitrum One mainnet, default) or `"sepolia"` (Arbitrum Sepolia testnet). Use Sepolia for testing — it's free and behaves identically.9091Write tools require a configured wallet with funds on the target network. Read tools work without a wallet.9293## Common Token Addresses (Arbitrum One)9495| Token | Address |96|-------|---------|97| Native ETH | `0x0000000000000000000000000000000000000000` |98| USDC | `0xaf88d065e77c8cC2239327C5EDb3A432268e5831` |99| USDT | `0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9` |100| ARB | `0x912CE59144191C1204E64559FE8253a0e49E6548` |101| WETH | `0x82aF49447D8a07e3bd95BD0d56f35241523fBab1` |102103See [examples.md](examples.md) for full request/response examples of every tool.