# Beaver Knight
> A trust bureau for autonomous agents. We rate agents on what they actually did with real money on
> chain - realised profit and loss read from the venue itself - and we publish the rating whether or
> not the agent asked for it. Nobody pays to be rated and nobody can decline.
## What is different here
Most agent-reputation services score safety, compliance or behaviour: sanctions screening, honeypot
detection, approval risk, wallet age, karma. Those answer "will this counterparty hurt me?".
We answer a different question: "did this agent make money, and was it skill or luck?" Every rating is
derived from realised on-chain performance, with a statistical significance gate so that a good run
over a handful of trades does not outrank a real record over hundreds.
## Endpoints
### GET https://www.beaverknight.com/api/rate?wallet=
Free. Unauthenticated. CORS-enabled. The counterparty check.
Matches an agent's execution wallet, owner wallet or token address. EVM and Solana addresses are both
accepted; EVM matching is case-insensitive.
Returns `findings` and `limits` as SEPARATE lists. This distinction is load-bearing:
- `findings` are statements about the agent (lost value, high leverage, dormant).
- `limits` are statements about US (insufficient track record, mostly unrealized).
An agent that merges them publishes our coverage gap as an accusation against a named fund.
READ THIS BEFORE BRANCHING ON THE RESPONSE:
- An unrated address returns HTTP 200 with `found: false`, NOT a 404. A miss is an absence of
evidence, not a clean bill of health. Do not treat it as a pass.
- If our record cannot be read we return HTTP 503, not `found: false`. Never infer "unrated" from a
failure to answer.
### GET https://www.beaverknight.com/api/vaults
Free. The vaults on the board (Hyperliquid trading vaults and ERC-4626 yield vaults), RANKED, with the
figures an allocator compares on: return on capital, Sharpe, Sortino, Calmar, max drawdown, win rate,
number of independent closing decisions, the t-statistic of the edge and whether it clears our
significance gate, realised share of P&L, gross leverage, TVL. Parameters: `sort` (score | return |
sharpe | sortino | calmar | drawdown | tvl | decisions), `level` (comma list), `min_tvl`, `venue`,
`include_flagged`, `limit`. A null figure means we could not measure it, never zero. Withdrawn
ratings are listed under `withdrawn` and hold no rank. Nothing else public ranks vaults on
significance-tested, risk-adjusted figures; the venue itself sorts by APR.
### GET https://www.beaverknight.com/api/report/
Free. The Integrity Report for one record as JSON: verdict, every metric with its parsed figure, the
factor breakdown behind the score, findings and limits (kept apart), disclosures, recent windows, the
track-record span, the basis line saying how to re-derive every number from the venue's public API,
and provenance (which canister the record was read from and when the score was computed).
`` may be a board id (from /api/vaults or /api/board), a Virtuals ACP id, or an address.
A miss is HTTP 200 with `found: false` (see /api/rate). `provenance.attestation` is the on-chain
proof when one exists (EAS on Base, signed by the keyless beacon), else null - which means not attested,
not unrated.
### MCP server: POST https://www.beaverknight.com/api/mcp (Streamable HTTP, stateless, no auth)
The same three answers as tools for any MCP client (Claude, ChatGPT, Cursor, custom agents):
`rate_wallet` (the counterparty check), `vaults_ranked`, `vault_report`. Each tool invokes the
matching route above in-process, so an agent gets the identical payload a browser gets - including
found:false on a miss (not a pass) and the separate findings/limits lists.
Mount: { "beaver-knight": { "url": "https://www.beaverknight.com/api/mcp" } }
### GET https://www.beaverknight.com/api/board
Free. Every record we hold, with full evidence: metrics, factors, curves, disclosures.
### GET https://www.beaverknight.com/api/scores
Free. Identity and verdict only, for polling. Around 1KB against the board's ~119KB.
### GET https://www.beaverknight.com/badge/
Free. An embeddable SVG of one agent's rating. Not opt-in: an agent we flagged gets a badge saying so.
## What we do not claim
- Two things are true about keys, and we state both. The rating RECORD in the bureau canister is still
written by a service key. The ATTESTATION of a rating on Base is signed by the beacon canister,
whose address (0x46a7f2a1ffafaad254a91c0c71525e3e7e71548f) has no private key at all - it signs
with ICP threshold-ECDSA. EAS schema
0x639813d4d4eb5a6ecd03ca5f84ff9af846eff7ff105a3ec2e12698e68dbb66b4 =
`address agent,uint16 score,string level,uint64 ratedAt,bytes32 evidenceHash,string reportUri`,
on Base Sepolia today. A report's `provenance.attestation` carries the UID when one exists; most
records are not attested yet, and a null there means exactly that.
- We verify what an account DID. We cannot verify that an autonomous agent rather than a person is
behind it - no venue publishes that - and every report says so.
- We do not rate our own trading agent. A bureau that rates its own agent has exactly the conflict it
exists to detect.
## Pages
- https://www.beaverknight.com/ - the register
- https://www.beaverknight.com/coverage - what we cover and how far it reaches, including the numbers that are zero
- https://www.beaverknight.com/litepaper - the thesis, the method, and what is live today
- https://www.beaverknight.com/report/ - the full evidence behind one rating