|PURPLEIRIS

API & MCP

Monad validator data
for your app or agent

The 16 tools behind the PurpleIris assistant are available directly: as a Model Context Protocol server for AI agents and as a REST API for everything else. Read-only, no key, and every response carries the same data-class label the assistant uses.

Try it

These run real requests from your browser. The first one reads the validator set straight from the staking precompile and returns the block it was read at.

POST /api/v1/tools/get_onchain_snapshot {"top_n":5}
Pick a call. The request runs from your browser against the live API.

Connect over MCP

Streamable HTTP transport, stateless, protocol version 2025-06-18. Point any MCP client that supports remote HTTP servers at:

https://purpleiris.live/api/mcp

Claude Code:

claude mcp add --transport http purpleiris https://purpleiris.live/api/mcp

Clients configured with JSON:

{
  "mcpServers": {
    "purpleiris": { "type": "http", "url": "https://purpleiris.live/api/mcp" }
  }
}

Or speak JSON-RPC to it yourself:

curl -s https://purpleiris.live/api/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"get_onchain_snapshot","arguments":{"top_n":3}}}'

REST

One endpoint per tool. POST a JSON body, or GET with query parameters. The catalog and an OpenAPI 3.1 document are generated from the same tool definitions the assistant uses.

# list tools and their JSON Schemas
curl -s https://purpleiris.live/api/v1/tools

# call one
curl -s 'https://purpleiris.live/api/v1/tools/estimate_stake_reward?stake_mon=10000&days=90'

curl -s https://purpleiris.live/api/v1/tools/get_validator \
  -H 'content-type: application/json' -d '{"id":"backpack"}'

# OpenAPI
curl -s https://purpleiris.live/api/v1/openapi.json

What comes back

Every tool returns the same envelope. Over MCP it is the structuredContent of the result.

{
  "tool": "get_onchain_snapshot",
  "data": { "as_of_block": 112474748, "epoch": 2250, "...": "..." },
  "data_class": 1,
  "data_class_label": "Class 1 — on-chain (deterministic)",
  "source": "get_onchain_snapshot",
  "timestamp": "2026-10-11T13:20:00.000Z",
  "freshness": { "indexed_at": "…", "age_hours": 1.2, "stale": false },
  "methodology_url": "https://purpleiris.live/methodology"
}

Tools

TOOLWHAT IT RETURNSARGUMENTSSOURCE
get_onchain_snapshotLive on-chain network snapshottop_n?live chain read
get_validator_onchainLive on-chain validator and delegator positionid, delegator_address?live chain read
get_validatorValidator profileidindexer
list_validatorsList validatorsactive_only?, max_commission_bps?, min_stake_mon?, region?, infra_provider?, limit?indexer
get_network_healthNetwork health—indexer
find_underdogsFind underdog validatorsmin_success_rate?, max_stake_rank?, limit?indexer
simulate_delegationSimulate a delegationvalidator_id, stake_mon, daysindexer
simulate_diversificationScore a delegation splitallocationsindexer
estimate_stake_rewardEstimate staking rewardstake_mon, days, commission_bps?formula
get_recent_assignmentsRecent epoch historyvalidator_id, limit?indexer
get_network_overviewNetwork overview—indexer
get_latest_monad_releaseLatest Monad release—indexer
get_assignment_predictorRound assignment predictorvalidator_idindexer
get_anomaly_checkAnomaly checkvalidator_id, window_hours?indexer
get_execution_revenueExecution revenuevalidator_identifierindexer
get_staking_rewardsStaking rewardsvalidator_identifierindexer

Limits and ground rules

purpleiris 1.1.0