For the ecosystem
The Agent Trust Index
An open benchmark of how trustworthy the agent world actually is. It checks one simple thing for each public agent: can it cryptographically prove who it is, on whose authority it acts, and that it has not been tampered with?
The first sweep checked 11,680 unique agents from the public Model Context Protocol registry on 10 June 2026. The answer is uncomfortable.
of the 11,680 agents checked cannot present an identity anyone can verify.
can prove who they are with a resolvable did:web identity. That is 157 agents.
agents are post-quantum ready. Not one carries an ML-DSA key.
Most agents are anonymous. Yours does not have to be.
Give your agent a verifiable identity in one command. It is free and open source, and you keep control of your own keys.
pip install vouch-protocolIdentity is the floor. Accountability is the core.
Knowing which agent acted is only the start. The harder questions are who authorized it, whether it is still behaving, and whether it can be stopped. A bare identity does not answer those. The Vouch Protocol does, and this Index will grow to measure all of it.
Who authorized it
A delegation chain shows who gave the agent its authority, on whose behalf, and within what limits, all verifiable.
Is it still trustworthy
Continuous trust means an agent has to keep proving itself, not get trusted once and forever.
Can it be stopped
Revocation lets you pull an agent's authority the moment it goes wrong, and anyone can check the status.
What the first sweep found
| Trust property | Agents | Share |
|---|---|---|
| Can prove who they are (resolvable did:web identity) | 157 | 1.3% |
| Agent card references a key or signature | 101 | 0.9% |
| Publishes a service endpoint (revocation, MCP, A2A) | 72 | 0.6% |
| Post-quantum ready (an ML-DSA key) | 0 | 0% |
Two properties a static scan cannot see are left out on purpose: delegation provenance (who authorized the agent) and continuous trust (renewed, not trusted once). Both are runtime properties.
The agents that can prove it
The 157 agents that publish a verifiable signal, scored from 0 to 100 and graded. The other 11,523 scored zero. Filter by grade.
| Grade | Score | Agent | Domain | Method |
|---|---|---|---|---|
| A | 100 | de.carbon-cashmere.api/crypto-intelligence | api.carbon-cashmere.de | did:web, secp256k1 (JWK) |
| A | 100 | io.feedoracle/compliance | feedoracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.github.AgentNOMOS/nomos-crossborder-broker | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.github.craigmbrown/blindoracle | craigmbrown.com | did:web, Ed25519 (JWK) |
| A | 100 | io.github.feedoracle/feedoracle-macro-mcp | feedoracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.github.feedoracle/stablecoin-risk | feedoracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.github.rnwy/mcp | rnwy.com | did:web, P-256 (JWK) |
| A | 100 | io.github.vdineshk/dominion-observatory | dominion-observatory.sgdata.workers.dev | did:web, Ed25519 (JWK) |
| A | 100 | io.tooloracle/accessoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/agentguard | feedoracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/aml | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/ampel | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/arbitrumoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/baseoracle | feedoracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/bnboracle | feedoracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/changeoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/cloudoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/conductor | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/contractoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/cybershield | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/dealoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/dependencyoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/dora | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/doraeventfabric | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/driftoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/ecommerceoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/flareoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/flightoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/governanceoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/healthguard | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/hederaoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/hoteloracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/incidentoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/insuranceoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/invoiceoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/iso20022oracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/joboracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/law | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/leadoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/macroooracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/memeoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/memoryoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/mica | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/newsoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/paymentoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/policyoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/predictionguard | feedoracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/predictoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/priceoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/quantum | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/rankoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/registeroracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/reporting | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/researchoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/reserveoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/resilienceoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/revieworacle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/riskoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/seooraclev2 | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/shoporacle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/smartmoneyoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/solanaoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/suioracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/tlpt | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/tonoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/trustlayer | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/xrploracle | feedoracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/yieldoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| A | 100 | io.tooloracle/zkevidenceoracle | tooloracle.io | did:web, secp256k1 (JWK) |
| C | 60 | ai.law.mcp/lawyer-search | mcp.law.ai | did:web |
| C | 60 | ai.law/lawyer-search | mcp.law.ai | did:web |
| C | 60 | ai.rallyprop/gov-funding | mcp.rallyprop.ai | did:web |
| C | 60 | ai.websitepublisher/mcp | mcp.websitepublisher.ai | did:web |
| C | 60 | cc.thecolony/mcp-server | thecolony.cc | did:web |
| C | 60 | com.bushdrum/events | bushdrum.com | did:web |
| C | 60 | com.eventescapes/event-escapes | mcp.eventescapes.com | did:web |
| C | 60 | com.tkawen/intelligence-gateway | mcp.tkawen.com | did:web |
| C | 60 | io.ahel/ahel | mcp.ahel.io | did:web |
| C | 60 | io.eventify/mcp-server | amcp.eventify.io | did:web |
| C | 60 | io.github.0580iris-lang/x711-gas-station | x711.io | did:web |
| C | 60 | io.github.BricePourLe13/merx | mcp.merxprotocol.eu | did:web |
| C | 60 | io.github.Waysway-app/waysway | api.waysway.com | did:web |
| C | 60 | io.github.jaymiller-cmg/dealsync-mcp-server | dealsync-mcp-server.jaymiller.workers.dev | did:web |
| C | 60 | io.github.kimny1143/hoo-mcp | hoo-mcp.glasswerkskimny.workers.dev | did:web |
| C | 60 | io.github.lazymac2x/a11y-scorer | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/agent-loop-detector | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/agent-memory | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/agent-trace-auditor | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/agent-workflow-engine | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/ai-agent-scratchpad | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/ai-budget-planner | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/ai-changelog-writer | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/ai-cost-optimizer | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/ai-crawler-policy | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/ai-eval | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/ai-gateway | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/ai-guardrails | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/ai-model-router | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/ai-prompt-optimizer | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/ai-provider-status | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/ai-rate-limit-tracker | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/ai-token-counter | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/api-changelog-tracker | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/api-composition-gateway | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/api-contract-validator | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/api-diff-monitor | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/api-flow-analyzer | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/api-landing | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/api-mock-server | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/api-payload-auditor | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/api-perf-analyzer | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/api-request-deduplicator | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/api-response-cost-analyzer | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/api-schema-drift-detector | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/blog | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/citation-verifier | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/claude-skill-validator | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/code-explainer | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/code-pattern-risk-scanner | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/color-palette | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/cron-collision-detector | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/cron-monitor | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/cron-parser | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/crypto-signal | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/data-transform | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/diff-patch-tools | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/domain-intel | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/email-validator | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/embedding-search | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/env-blueprint-validator | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/font-metadata | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/form-backend | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/govdata-korea | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/graphql-dos-shield | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/graphql-rest-bridge | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/interactive-api-playground | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/llm-output-quality-monitor | api.lazy-mac.com | did:web |
| C | 60 | io.github.lazymac2x/smart-data-extractor | api.lazy-mac.com | did:web |
| C | 60 | io.github.majorelalexis-stack/maxia | maxiaworld.app | did:web |
| C | 60 | io.github.mirabello-consultancy/mcp-server | mcp.mirabelloconsultancy.com | did:web |
| C | 60 | io.github.nexus-api-lab/chrono-mcp | chrono-mcp.dokasukadon.workers.dev | did:web |
| C | 60 | io.github.nexus-api-lab/codebook-mcp | codebook-mcp.dokasukadon.workers.dev | did:web |
| C | 60 | io.github.nexus-api-lab/digest-mcp | digest-mcp.dokasukadon.workers.dev | did:web |
| C | 60 | io.github.nexus-api-lab/ident-mcp | ident-mcp.dokasukadon.workers.dev | did:web |
| C | 60 | io.github.nexus-api-lab/textops-mcp | textops-mcp.dokasukadon.workers.dev | did:web |
| C | 60 | io.github.nexusforge-tools/mcp-eu-finance | api.nexusforge.tools | did:web |
| C | 60 | io.github.nikhilgogulwar/universalbench | universalbench-mcp.penantiaglobal.workers.dev | did:web |
| C | 60 | io.github.ogasurfproject-jpg/horizon-shield | hs-mcp.oga-surf-project.workers.dev | did:web |
| C | 60 | io.github.rootsbymenda/pharma-regulatory | pharma-mcp-server.rootsbybenda.workers.dev | did:web |
| C | 60 | io.github.srotzin/hive-gate | hivegate.onrender.com | did:web |
| C | 60 | io.github.srotzin/hive-mcp-connector | hive-mcp-connector.onrender.com | did:web |
| C | 60 | io.github.srotzin/hive-mcp-swap | hive-mcp-swap.onrender.com | did:web |
| C | 60 | io.github.srotzin/hive-mcp-vault | hive-mcp-vault.onrender.com | did:web |
| C | 60 | io.github.srotzin/hivebank | hivebank.onrender.com | did:web |
| C | 60 | io.github.srotzin/hivegate | hivegate.onrender.com | did:web |
| C | 60 | io.github.srotzin/hivetrust | hivetrust.onrender.com | did:web |
| C | 60 | space.0/space0 | mcp.0.space | did:web |
157 agents shown.
How the score works
Open methodology
Each agent gets a Trust Score from 0 to 100 and a letter grade. For this first version the source is the public Model Context Protocol registry, and the check is a resolvable decentralized identity: a did:web document at the agent's own domain (60 points) carrying a usable public key (40 points). A is 90 or above, then B, C, D, and F below 40. The scoring is open so anyone can audit how a number is reached. Nobody signs up; the Index finds agents on its own.