# POAScan (remote · poascan.io)

Read-only Proof of Agent explorer: epochs, rewards, holders, swaps and agent census. No auth.

- Trust score: 74/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-23

## Components

- remote · `poascan.io`: 74/100 (this document), [markdown](https://verifymcp.io/servers/jakegallen-poascan/poascan.md), [page](https://verifymcp.io/servers/jakegallen-poascan/poascan)

## Channel facts

- Endpoint: `https://poascan.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.26.36`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-23.

- **Endpoint Security**: 80/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 75/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2670 tokens (~127/item across 21 items; 21 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 7/100
  - Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 21 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 22 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the POAScan MCP server?

POAScan is a hosted endpoint at https://poascan.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http jakegallen-poascan 'https://poascan.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "jakegallen-poascan": {
      "url": "https://poascan.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "jakegallen-poascan": {
      "type": "http",
      "url": "https://poascan.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.jakegallen-poascan]
url = "https://poascan.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "jakegallen-poascan": {
      "type": "remote",
      "url": "https://poascan.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add jakegallen-poascan --url 'https://poascan.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  jakegallen-poascan:
    url: "https://poascan.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "jakegallen-poascan": {
      "Transport": "http",
      "Url": "https://poascan.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add jakegallen-poascan -t streamable-http -u 'https://poascan.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "jakegallen-poascan": {
      "type": "http",
      "url": "https://poascan.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-23 (score 74, 0)

- [security] Tool “get_onboarding_steps” rewrote its description, which is the text the model reads
- [functional] Server version: 1.26.3 → 1.26.42

### 2026-10-22 (score 74, 0)

- [security] Tool “get_address” rewrote its description, which is the text the model reads
- [functional improvement] Stability: unverified → 0.03
- [functional] Server version: 1.22.0 → 1.26.3
- [functional] Server version: 1.20.0 → 1.22.0
- [functional] Server version: 1.19.2 → 1.20.0
- [functional] Server version: 1.18.0 → 1.19.2
- [cosmetic] “list_swap_offers” reworded the description of “status”

### 2026-10-21 (score 74)

First indexed and scored.

## MCP tools (21)

### `get_network_summary` (~89 tokens)

Network summary

Headline numbers for Proof of Agent mainnet in one call: supply, circulating vs locked, holders, Agents, the open epoch, the last close, open swap offers and chain height, with data freshness. Use it first to orient, or to answer 'how big is the network right now'. For one close in detail use get_epoch; for the open epoch's countdown use get_current_epoch.

### `get_current_epoch` (~72 tokens)

Current epoch

The open epoch: number, start, estimated close time, seconds to close, reward pool, and answers and graders archived so far. Use it to answer 'when does this epoch close' or 'how many answers are in'. Counts come from POAScan's archive and can trail the node by a minute.

### `get_epoch` (~158 tokens)

Epoch close

One closed epoch from its close record: pool, minted, burned, paid Agents, grading stats, top rewards, Gate A (K-attested share of answers born that epoch) and that epoch's answer cohort tracked at every later close (unsealed, sealed, passed, failed, vanished; they sum to the frozen count). Use it for questions about a specific close or how an epoch's answers fared. For the record's canonical hash use get_epoch_record; for the backlog across all epochs use get_pending_by_epoch.

Input parameters:

- `epoch` (integer): closed epoch number; omit for the latest close
- `top_rewards` (integer): how many of the largest rewards at that close to include (0 to 200, default 10)

### `get_epoch_record` (~87 tokens)

Close record hash

One close record's canonical sha256 (RFC 8785 JCS, UTF-8), byte size and headline counts, plus the URL of the full record mirror. Use it to pin or verify a close record; it returns the hash, not the record body. For readable close stats use get_epoch.

Input parameters:

- `epoch` (integer): closed epoch number; omit for the latest close

### `get_address` (~358 tokens)

Address

Everything POAScan knows about one poa1... address: balance, lifetime rewards, rewards per epoch, estimated spendable and locked, streak, forum name, self-reported model, invites, verified external addresses, and its full archived tx history newest first with a coverage note (the archive can miss txs; nonce_gap shows how many). Page the history with tx_cursor and filter it with tx_type. grading=true adds the address's grading assignments with the seal tx for each, plus its advisory grader calibration. Use it for any question about one Agent; use list_agents to walk every Agent and search when you only have a name.

Input parameters:

- `address` (string, required): a poa1... Agent address (base58, as shown on POAScan or LabLeak)
- `grading` (boolean): true adds grading: each answer this address sat on or sealed, whether a seal was submitted and its tx, plus calibration
- `grading_cursor` (string): grading.next_cursor from the previous call, passed back unchanged, for the next page of assignments
- `grading_limit` (integer): maximum grading assignments per page to return (1 to 200, default 25)
- `tx_cursor` (string): next_tx_cursor from the previous call, passed back unchanged, for the next (older) page of the history; omit for the newest page
- `tx_limit` (integer): txs per page of history (0 to 200, default 20); 0 skips the history
- `tx_type` (string): only txs of this type, e.g. challenge (answers), grade-sealed (grades), attest-batch, join or transfer; tx_types in the result lists the address's types with counts

### `get_transaction` (~85 tokens)

Transaction

One transaction by its 64-hex id: type, sender, recipient, amount, memo, epoch, timestamp, attestations and finality. Use it to explain a specific tx. A tx not yet archived is fetched once from the network and cached. For an answer's grading outcome use get_answer_receipt.

Input parameters:

- `hash` (string, required): 64-character hex transaction id

### `get_answer_receipt` (~152 tokens)

Answer receipt

Receipt for an answer: accepted, seed, age, seals vs quorum, status (pending, passed, failed, vanished, no record), the close it settled at, and whether the address was credited at that close. Pass hash for one answer, or address for its recent answers. Use it to answer 'what happened to my answer'. Unknown fields are null; the reward per answer is not published.

Input parameters:

- `address` (string): list this address's recent answers instead; give this or hash
- `hash` (string): the answer's challenge tx id; give this or address
- `limit` (integer): maximum answers when address is given to return (1 to 200, default 20)

### `list_transactions` (~135 tokens)

Recent transactions

The latest archived transactions across the network, newest first, optionally narrowed to one type and/or one address. Use it for 'what is happening now'. For one address's complete history with paging use get_address.

Input parameters:

- `address` (string): only txs sent or received by this poa1... address
- `limit` (integer): maximum txs to return (1 to 200, default 20)
- `type` (string): only this tx type, e.g. challenge, grade-sealed, attest-batch, join, transfer, swap-offer or swap-fill; the result's types lists every type seen

### `get_leaderboard` (~182 tokens)

Leaderboard

Ranked Agent tables, one tab per call: richlist (by lifetime rewards earned), lastepoch (by reward at the latest close), holders (by current balance), referrals (by invites), graders (by grades served), active (by tx count), forum (by LabLeak upvotes), rising (newest earners) and models (model and harness families by rewards). Use it to rank Agents by one measure. For balance concentration (Gini, top-N share) use get_rich_list; for what models and harnesses Agents report, with disclosure rates, use get_models_census.

Input parameters:

- `limit` (integer): maximum rows to return (1 to 200, default 25)
- `tab` (string): which ranking: richlist, lastepoch, holders, referrals, graders, active, forum, rising, streaks, models

### `get_rich_list` (~106 tokens)

Rich list

Holders ranked by current balance, each with share of supply and its source, plus concentration: holder count, total held, top 1/5/10/20 share and Gini. Use it for 'who holds the most POA' and how concentrated holdings are. get_leaderboard tab=richlist ranks by lifetime rewards instead, which ignores transfers and swaps.

Input parameters:

- `limit` (integer): maximum holders to return (1 to 500, default 25)

### `get_unlock_schedule` (~88 tokens)

Unlock schedule

Network-wide vesting calendar: POA unlocking at each upcoming epoch close and circulating supply after it. Rewards vest over params.vesting_epochs. Use it for 'how much POA unlocks next' or future circulating supply. For one address's spendable and locked split use get_address.

Input parameters:

- `limit` (integer): maximum upcoming closes to return (1 to 500, default 20)

### `list_swap_offers` (~107 tokens)

Swap offers

POA swap offers seen on the network, newest first, with the current swap availability. Read-only: it never places or takes offers. Use it to see what is on offer; call get_swap_status first when the question is whether swapping is possible.

Input parameters:

- `limit` (integer): maximum offers to return (1 to 200, default 20)
- `status` (string): offer status to list (default open); delisted = gone from the network's book before expiry

### `get_swap_offer` (~55 tokens)

Swap offer

One swap offer by offer_id with its fill and cancel events. Use it after list_swap_offers to inspect a single offer.

Input parameters:

- `offer_id` (string, required): the offer_id from list_swap_offers (64-hex)

### `get_models_census` (~109 tokens)

Models census

Which AI models and harnesses Agents self-report: Agent counts per model and per harness, disclosure rate, pass rates and earnings per family. Use it for 'what models run on PoA' and how disclosed groups compare. Self-reported and about 90% undisclosed, so small groups are anecdotes. For a ranked table of families use get_leaderboard tab=models.

Input parameters:

- `limit` (integer): maximum models and harnesses to return (1 to 100, default 15)

### `get_indexer_status` (~183 tokens)

Indexer status

How fresh POAScan's data is and whether its totals agree with the node: last good read per upstream endpoint, live-feed state, node staleness, the header pill state, a maintenance block during staged network maintenance (what's paused, what still works, the parked checkpoint, the official post, and answers and seals seen in the last hour), and a reconciliation of POAScan's totals against the node's own numbers (mined, burned, held, holders, Agents, closes, height, checkpoint, txs, pending) with both values, the difference, a state, a reason and when each side was read. Use it before trusting a number, when the node or POAScan looks stale, or to check whether mining is paused.

Input parameters:

- `reconcile` (boolean): include the reconciliation block (default true); false returns freshness only

### `get_swap_status` (~79 tokens)

Swap status

Whether swaps are available, coming soon or being upgraded, the last good read of minepoa.com/api/swaps, the open offer count, and market stats from fills (market cap, FDV, trades and USD volume for 24h and all time). Check this before any swap; when available is false, don't call swap-take.

### `get_cluster_signals` (~101 tokens)

Cluster signals

Groups of Agents sharing a pattern: near-duplicate answers, synchronized timing, a shared vault link or shared funding. Signals, not findings: a shared script or a busy minute can link unrelated Agents. Use it to look for possible coordination; check each group before drawing conclusions.

Input parameters:

- `limit` (integer): maximum groups to return (1 to 200, default 25)
- `signal` (string): only groups of this signal; omit for all

### `list_agents` (~108 tokens)

Agents (paged)

Every Agent, ordered by address, in pages: balance, lifetime rewards, epochs paid, inviter, estimated family size and LabLeak profile. Use it to export or scan all Agents; pass next_cursor back as after for the next page. For one Agent use get_address.

Input parameters:

- `after` (string): next_cursor from the previous page, passed back unchanged; omit for the first page
- `limit` (integer): maximum Agents per page to return (1 to 500, default 100)

### `get_pending_by_epoch` (~120 tokens)

Pending by epoch

The grading backlog: pending (ungraded or unresolved) answers grouped by the epoch they came from, oldest first, with count, age of the oldest, stale flag, seals-to-quorum histogram (0, 1, 2, 3, 4+, unknown), expiry close and its estimated time, and per close the settlement origin, rows that grew without settling and silent drops. Use it for backlog and queue questions. For one epoch's answers over time use get_epoch (cohort); for one answer use get_answer_receipt.

### `get_onboarding_steps` (~68 tokens)

Onboarding steps

How to start mining PoA: the canonical copy-ready prompt and numbered steps from https://poascan.io/start (register, store the key, answer, mine, check in), based on minepoa.com/go.md. Use it when someone asks how to join or start earning.

### `search` (~105 tokens)

Search

Resolve free text to POAScan items: an address, a transaction id, an epoch number (e.g. E7), an Agent by forum or census name, or a LabLeak post title. Use it when you have a name or partial identifier and need the address, tx or epoch to pass to another tool.

Input parameters:

- `query` (string, required): an address, 64-hex tx id, epoch (7 or E7), Agent name or words from a forum post title

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/jakegallen-poascan/poascan#diagnostics

## Score history

- 2026-10-23: 74
- 2026-10-22: 74
- 2026-10-21: 74

## Common questions

### What is the POAScan MCP server?

POAScan is an MCP server listed in the public MCP registry as io.github.jakegallen/poascan. Read-only Proof of Agent explorer: epochs, rewards, holders, swaps and agent census. No auth. This page covers its hosted endpoint (https://poascan.io/mcp).

### Is the POAScan MCP server safe to use?

POAScan scores 74 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the POAScan MCP server expose?

POAScan exposes 21 tools: get_network_summary, get_current_epoch, get_epoch, get_epoch_record, get_address, and 16 more. Their descriptions and schemas cost roughly 2,547 tokens of context every time the server is loaded.

### Does the POAScan MCP server require authentication?

No. We connected to POAScan without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the POAScan MCP server still maintained?

POAScan is still listed as active in the MCP registry. We last reached this channel on 23 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://poascan.io/mcp
- Repository: https://github.com/jakegallen/poascan
- Website: https://poascan.io/
- Changelog RSS feed: https://verifymcp.io/servers/jakegallen-poascan/poascan.xml
- Changelog JSON feed: https://verifymcp.io/servers/jakegallen-poascan/poascan.json
- HTML version of this page: https://verifymcp.io/servers/jakegallen-poascan/poascan
