# Iota Agent MCP

> Connects AI coding agents to the IOTA blockchain with tools for wallet management, Move smart contract development, and on-chain data queries via JSON-RPC and GraphQL.

- Skill: `scottcjn/iota-agent-mcp` (Agent Skill, multi-file: 10 files)
- Install (CLI): `npx skillmds add scottcjn/iota-agent-mcp`
- Raw SKILL.md: https://api.skillmd.com/api/skills/scottcjn/iota-agent-mcp/raw
- Safety review: CAUTION (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs, Coding & Dev Tools, REST & GraphQL APIs
- Tags: Blockchain, Graphql, Iota, Json Rpc, Mcp Server, Move, Smart Contracts, Wallet
- Author: Scottcjn (https://skillmd.com/u/scottcjn)
- Updated: 2026-08-22
- Page: https://skillmd.com/skills/scottcjn/iota-agent-mcp

---


# IOTA Agent MCP

MCP server that connects AI coding agents to the IOTA blockchain. Provides 18 tools across wallet operations, Move smart contract development, and on-chain data queries — all via stdio transport with no secrets in the MCP process.

## Workflow

1. **Configure the MCP server** in your agent's settings (Claude Code, Cursor, VS Code Copilot)
2. **Query on-chain data** — fetch objects, transactions, coins, epoch info, or decompile modules
3. **Develop Move contracts** — build, test with coverage, generate unsigned publish transactions
4. **Sign and publish** — generate unsigned transaction, submit via `iota_wallet_sign_execute`, check `iota_wallet_pending` for approval status, verify on-chain with `iota_transaction`

### Signing flow (human-in-the-loop)

Wallet operations that modify state require human approval:

1. Call `iota_wallet_sign_execute` with base64-encoded transaction bytes — creates a pending request
2. Call `iota_wallet_pending` to confirm the request was queued
3. The human approves (`iota_wallet_approve`) or rejects (`iota_wallet_reject`) via the agent-wallet server
4. On approval, verify the transaction landed on-chain: call `iota_transaction` with the returned digest
5. If rejected, inform the user and do not retry without explicit instruction

## Tools

### Wallet (8 tools)

- `iota_wallet_address` — Get the active wallet address
- `iota_wallet_balance` — Check IOTA balance for the active wallet
- `iota_wallet_accounts` — List all derived wallet accounts
- `iota_wallet_sign_execute` — Sign and execute a transaction (requires human approval via agent-wallet server)
- `iota_wallet_pending` — List pending signing requests awaiting approval
- `iota_wallet_approve` — Approve a pending signing request by ID
- `iota_wallet_reject` — Reject a pending signing request by ID
- `iota_wallet_switch_network` — Switch between mainnet, testnet, and devnet

### Move CLI (4 tools)

- `iota_cli` — Run any IOTA CLI command (e.g. `client gas`, `move new my_project`)
- `iota_move_build` — Compile a Move package and report build results
- `iota_move_test_coverage` — Run Move tests with coverage analysis and summary
- `iota_move_publish_unsigned` — Generate unsigned publish transaction for agent-wallet signing

### On-Chain Query (6 tools)

- `iota_object` — Fetch object data by ID (owner, type, version, content)
- `iota_objects_by_owner` — List objects owned by an address
- `iota_transaction` — Fetch transaction details by digest (input, effects, events)
- `iota_coins` — Get coin objects for gas estimation and token queries
- `iota_epoch_info` — Current epoch, checkpoint, and network statistics via GraphQL
- `iota_decompile` — Retrieve and decompile a deployed Move module's ABI

## Examples

**Build and test a Move package:**
```
iota_move_build(path: "./my_move_project")
→ "BUILDING my_move_project ... Build Successful"

iota_move_test_coverage(path: "./my_move_project")
→ "## Test Results\nRunning Move unit tests ... 5 tests passed\n\n## Coverage Summary\n85.7% coverage"
```

**Query an on-chain object:**
```
iota_object(object_id: "0xabc123...")
→ { "owner": "0xdef456...", "type": "0x2::coin::Coin<0x2::iota::IOTA>", "version": 42, "content": {...} }
```

**Publish a Move package with wallet signing:**
```
iota_move_publish_unsigned(path: "./my_move_project", gas_budget: "500000000")
→ "AAACAQBk..." (base64 tx bytes)

iota_wallet_sign_execute(tx_bytes: "AAACAQBk...")
→ "Request queued (id: req-1). Awaiting human approval."
```

## Configuration

Set environment variables to override defaults:

- `IOTA_WALLET_SERVER` — Agent wallet server URL (default: `http://localhost:3847`)
- `IOTA_RPC_URL` — IOTA JSON-RPC endpoint (default: mainnet)
- `IOTA_GRAPHQL_URL` — IOTA GraphQL indexer (default: mainnet)

## Setup

```bash
npm install -g iota-agent-mcp
```

```json
// Claude Code: ~/.claude/settings.json
{
  "mcpServers": {
    "iota": { "command": "iota-agent-mcp" }
  }
}
```

```json
// Cursor / VS Code: .cursor/mcp.json or .vscode/mcp.json
{
  "servers": {
    "iota": { "command": "npx", "args": ["iota-agent-mcp"] }
  }
}
```

