# Arbitrum MCP

> 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."

- Skill: `starc007/arbitrum-mcp` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add starc007/arbitrum-mcp`
- Raw SKILL.md: https://api.skillmd.com/api/skills/starc007/arbitrum-mcp/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: starc007 (https://skillmd.com/u/starc007)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/starc007/arbitrum-mcp

---


# 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](examples.md) for full request/response examples of every tool.

