POAScan
REMOTE · POASCAN.IO
Read-only Proof of Agent explorer: epochs, rewards, holders, swaps and agent census. No auth.
Available components
Last scanned (5 hours ago)
Scores higher than 66% of remote servers
Reachable. Last reached 23 Oct 2026.
Category Crypto and Web3
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. How we score → Why this is hard to score →
Endpoint Security80
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability75
- AI-judged instruction clarity (excellent).Pass
- 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. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management7
- Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 21 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 22 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 23 Oct 26 0
- Tool “get_onboarding_steps” rewrote its description, which is the text the model reads security
- Server version: 1.26.3 → 1.26.42 functional
- 22 Oct 26 0
- Tool “get_address” rewrote its description, which is the text the model reads security
- 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 functional
- “list_swap_offers” reworded the description of “status” cosmetic
- 21 Oct 26 74
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 23 Oct 2026 · Probed https://poascan.io/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=poascan.io | CN=YE2,O=Let's Encrypt,C=US | 20 Oct 2026 | 18 Jan 2027 | ECDSA 256 | ECDSA-SHA384 | 53efa615cb315615ebccafc57554e3f689e |
| SANs: poascan.io | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of poascan.io. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| io. | present | 38690, 57355 | 8, 8 | Verified |
| poascan.io. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000 |
| content-security-policy | default-src 'self'; script-src 'self' 'sha256-cvlem2Rlcb+inScVb7910PMAU98gRDEfAIUVUKXOWd4='; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none'; base-uri 'none'; form-action 'self'; object-src 'none' |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | no-referrer |
| permissions-policy | camera=(), microphone=(), geolocation=(), payment=(), usb=(), clipboard-read=() |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://poascan.io/mcp | Verified | 200 | |
| http (plaintext) | http://poascan.io/mcp | HTTPS enforced | 301 | https://poascan.io/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
get_address Address ~358
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.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | 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 |
No output schema declared.
No examples provided.
get_answer_receipt Answer receipt ~152
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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) |
No output schema declared.
No examples provided.
get_cluster_signals Cluster signals ~101
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | maximum groups to return (1 to 200, default 25) |
| signal | string | – | only groups of this signal; omit for all |
No output schema declared.
No examples provided.
get_current_epoch Current epoch ~72
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_epoch Epoch close ~158
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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) |
No output schema declared.
No examples provided.
get_epoch_record Close record hash ~87
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.
| Name | Type | Req | Description |
|---|---|---|---|
| epoch | integer | – | closed epoch number; omit for the latest close |
No output schema declared.
No examples provided.
get_indexer_status Indexer status ~183
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.
| Name | Type | Req | Description |
|---|---|---|---|
| reconcile | boolean | – | include the reconciliation block (default true); false returns freshness only |
No output schema declared.
No examples provided.
get_leaderboard Leaderboard ~182
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 |
No output schema declared.
No examples provided.
get_models_census Models census ~109
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | maximum models and harnesses to return (1 to 100, default 15) |
No output schema declared.
No examples provided.
get_network_summary Network summary ~89
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_onboarding_steps Onboarding steps ~68
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_pending_by_epoch Pending by epoch ~120
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_rich_list Rich list ~106
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | maximum holders to return (1 to 500, default 25) |
No output schema declared.
No examples provided.
get_swap_offer Swap offer ~55
One swap offer by offer_id with its fill and cancel events. Use it after list_swap_offers to inspect a single offer.
| Name | Type | Req | Description |
|---|---|---|---|
| offer_id | string | yes | the offer_id from list_swap_offers (64-hex) |
No output schema declared.
No examples provided.
get_swap_status Swap status ~79
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_transaction Transaction ~85
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.
| Name | Type | Req | Description |
|---|---|---|---|
| hash | string | yes | 64-character hex transaction id |
No output schema declared.
No examples provided.
get_unlock_schedule Unlock schedule ~88
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | maximum upcoming closes to return (1 to 500, default 20) |
No output schema declared.
No examples provided.
list_agents Agents (paged) ~108
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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) |
No output schema declared.
No examples provided.
list_swap_offers Swap offers ~107
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 |
No output schema declared.
No examples provided.
list_transactions Recent transactions ~135
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 |
No output schema declared.
No examples provided.
search Search ~105
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.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | an address, 64-hex tx id, epoch (7 or E7), Agent name or words from a forum post title |
No output schema declared.
No examples provided.
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.
remote · poascan.io
claude mcp add --transport http jakegallen-poascan 'https://poascan.io/mcp'
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.