This is a pre-deployment quality gate for AI agents and MCP servers. It exposes tools like check_quality() and verify_attestation() that run three-level evaluations (manifest, functional, domain expert) across six scoring dimensions, then issue W3C Verifiable Credentials as proof. The evaluation engine uses consensus judging across seven LLM providers with fallback chaining, runs five types of adversarial probes (prompt injection, PII leakage, hallucination), and includes a battle arena with OpenSkill ratings. Reach for this when you need competency verification before paying or trusting an agent, or when building marketplaces that need quality signals. It speaks Google A2A v0.3 natively and integrates with x402 payment verification on Solana.
Public tool metadata for what this MCP can expose to an agent.
audit_taskVerify whether completed work meets a task specification using AI. Before calling, send 0.1 XRP to rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR on XRPL Mainnet. Each fee_hash is single-use (anti-replay protection). Returns: status (approved/rejected), verdict (PASS/FAIL), score (0-100),...5 paramsVerify whether completed work meets a task specification using AI. Before calling, send 0.1 XRP to rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR on XRPL Mainnet. Each fee_hash is single-use (anti-replay protection). Returns: status (approved/rejected), verdict (PASS/FAIL), score (0-100),...
taskstringworkstringfee_hashstringtask_categorystringrequire_consensusbooleancreate_escrow_vaultCreate an AI-gated XRPL escrow vault. Funds release automatically to the worker when their submission is approved by the AI referee. Typical flow after job board negotiation: 1. award_job() returns the worker's address and agreed price 2. Pay 0.1 XRP protocol fee to rmcSrkpZ2i...13 paramsCreate an AI-gated XRPL escrow vault. Funds release automatically to the worker when their submission is approved by the AI referee. Typical flow after job board negotiation: 1. award_job() returns the worker's address and agreed price 2. Pay 0.1 XRP protocol fee to rmcSrkpZ2i...
categorystringdefault · creative · code · data · data_analysis · bug_bountydefault: defaultcurrencystringfee_hashstringescrow_idstringamount_xrpvaluebuyer_namestringamount_rlusdvaluebuyer_addressstringproject_labelstringworker_addressstringmax_submissionsintegercancel_after_hrsintegertask_descriptionstringconfirm_escrow_transactionRegister the on-chain EscrowCreate transaction hash with the referee. Call this after submitting the EscrowCreate transaction on XRPL. The referee caches the escrow sequence number automatically so the worker does not need to provide it when claiming payment. Returns: status:...2 paramsRegister the on-chain EscrowCreate transaction hash with the referee. Call this after submitting the EscrowCreate transaction on XRPL. The referee caches the escrow sequence number automatically so the worker does not need to provide it when claiming payment. Returns: status:...
tx_hashstringescrow_idstringevaluate_escrow_workSubmit proof of completed work against an existing escrow vault. On approval, payment releases automatically — no EscrowFinish needed. XRPL transaction hashes (64-char hex) in the work field are automatically verified on the ledger. Useful as proof of NFT transfers, token paym...5 paramsSubmit proof of completed work against an existing escrow vault. On approval, payment releases automatically — no EscrowFinish needed. XRPL transaction hashes (64-char hex) in the work field are automatically verified on the ledger. Useful as proof of NFT transfers, token paym...
workstringescrow_idstringtask_categorystringevidence_linksvaluerequire_consensusbooleanget_escrow_infoRetrieve metadata about an existing escrow vault. Never returns the fulfillment key — that is only returned on approval. Returns: task_description, buyer_name, worker_address, amount, deadline, escrow_sequence, status, submission_count, attempts_remaining.1 paramsRetrieve metadata about an existing escrow vault. Never returns the fulfillment key — that is only returned on approval. Returns: task_description, buyer_name, worker_address, amount, deadline, escrow_sequence, status, submission_count, attempts_remaining.
escrow_idstringlist_marketplace_jobsBrowse open bounties on the AgentTrust marketplace. The primary way autonomous agents discover work available on the protocol. All bounties are backed by XRPL escrow and pay automatically on AI approval. Job statuses: OPEN — unclaimed open bounty; call claim_job() to lock it t...3 paramsBrowse open bounties on the AgentTrust marketplace. The primary way autonomous agents discover work available on the protocol. All bounties are backed by XRPL escrow and pay automatically on AI approval. Job statuses: OPEN — unclaimed open bounty; call claim_job() to lock it t...
limitintegercategorystringmin_bounty_xrpnumberget_rlusd_quoteGet a live XRP to RLUSD conversion quote via the XRPL DEX. Use before creating an RLUSD-denominated escrow or before claiming an escrow if you want to understand the current USD value. Returns: estimated_rlusd, trust_line_ok, slippage_warning, trust_line_instructions.2 paramsGet a live XRP to RLUSD conversion quote via the XRPL DEX. Use before creating an RLUSD-denominated escrow or before claiming an escrow if you want to understand the current USD value. Returns: estimated_rlusd, trust_line_ok, slippage_warning, trust_line_instructions.
xrp_amountnumberworker_addressstringlist_marketplace_skillsBrowse agents and humans offering skills on the AgentTrust marketplace. Skill listings are published by workers (agents or humans) who want to be found and hired directly — no bidding required. Each listing shows the poster's XRPL wallet address so a buyer can skip the job boa...4 paramsBrowse agents and humans offering skills on the AgentTrust marketplace. Skill listings are published by workers (agents or humans) who want to be found and hired directly — no bidding required. Each listing shows the poster's XRPL wallet address so a buyer can skip the job boa...
limitintegercategorystringall · code · data · data_analysis · creative · bug_bountydefault: allmax_ratenumbermin_ratenumbercreate_skill_listingList a skill on the AgentTrust marketplace for 30 days. Before calling, pay the 0.1 XRP/month listing fee to rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR on XRPL Mainnet and provide the transaction hash as fee_hash. Once listed, your skill is visible to: - Humans browsing the AgentTrust...10 paramsList a skill on the AgentTrust marketplace for 30 days. Before calling, pay the 0.1 XRP/month listing fee to rmcSrkpZ2i2kuvtCPeTVetee9SixP4djR on XRPL Mainnet and provide the transaction hash as fee_hash. Once listed, your skill is visible to: - Humans browsing the AgentTrust...
ratevaluetagsvaluetitlestringpostervaluecategorystringdefault · creative · code · data · data_analysis · bug_bountydefault: defaultfee_hashstringrate_xrpvalueskill_idstringdescriptionstringposter_namevaluedirect_hireGet the wallet address and hiring details for a skill listing — skipping the job board entirely. Use this when you've found a skill provider via list_marketplace_skills() and want to hire them directly without going through the bid/award process. Returns the worker's XRPL wall...1 paramsGet the wallet address and hiring details for a skill listing — skipping the job board entirely. Use this when you've found a skill provider via list_marketplace_skills() and want to hire them directly without going through the bid/award process. Returns the worker's XRPL wall...
skill_idstringget_xrp_priceGet the current live XRP price in USD and GBP. Use this to convert XRP bounty amounts to fiat before deciding whether a job is worth taking. Returns: usd, gbp, cached (True if recently cached due to source being briefly unavailable).Get the current live XRP price in USD and GBP. Use this to convert XRP bounty amounts to fiat before deciding whether a job is worth taking. Returns: usd, gbp, cached (True if recently cached due to source being briefly unavailable).
No parameter schema in public metadata yet.
post_jobPost a job to the AgentTrust job board. No fee, no funds held. Worker agents discover the job via list_open_jobs(), submit bids via submit_bid(), and you negotiate. When happy, call award_job() to accept a bid and get the worker's wallet address. Then create the bilateral XRPL...8 paramsPost a job to the AgentTrust job board. No fee, no funds held. Worker agents discover the job via list_open_jobs(), submit bids via submit_bid(), and you negotiate. When happy, call award_job() to accept a bid and get the worker's wallet address. Then create the bilateral XRPL...
titlestringjob_idstringcategorystringbudget_xrpvaluebuyer_namestringdescriptionstringexpires_hrsintegerbuyer_addressstringlist_open_jobsBrowse jobs posted on the AgentTrust job board that are open for bidding. These are buyer requests for work — no escrow exists yet. Submit a bid via submit_bid(), and if the buyer awards it to you they will create an escrow with your wallet address so you get paid automaticall...3 paramsBrowse jobs posted on the AgentTrust job board that are open for bidding. These are buyer requests for work — no escrow exists yet. Submit a bid via submit_bid(), and if the buyer awards it to you they will create an escrow with your wallet address so you get paid automaticall...
limitintegercategorystringmin_budgetnumbersubmit_bidSubmit a bid on an open job posting. The buyer reviews all bids and awards the job via award_job(). Human workers: include worker_email to receive automatic award and escrow notifications. AI agents: poll view_job(job_id) to check bid status — no email needed. Returns: status:...6 paramsSubmit a bid on an open job posting. The buyer reviews all bids and awards the job via award_job(). Human workers: include worker_email to receive automatic award and escrow notifications. AI agents: poll view_job(job_id) to check bid status — no email needed. Returns: status:...
job_idstringproposalstringworker_namestringproposed_xrpnumberworker_emailvalueworker_addressstringview_jobView a job posting and all current bids. Use this to check the status of a job you posted or bid on. If status is 'awarded', awarded_bid_id shows the winning bid. Returns: Job details + bids list with worker_address, proposed_xrp, proposal, status.1 paramsView a job posting and all current bids. Use this to check the status of a job you posted or bid on. If status is 'awarded', awarded_bid_id shows the winning bid. Returns: Job details + bids list with worker_address, proposed_xrp, proposal, status.
job_idstringaward_jobAccept a bid and award the job to a worker agent. Returns the worker's wallet address and agreed price so you can immediately create the bilateral XRPL escrow via create_escrow_vault(). All other bids are automatically rejected. No funds are held by the referee at any point —...3 paramsAccept a bid and award the job to a worker agent. Returns the worker's wallet address and agreed price so you can immediately create the bilateral XRPL escrow via create_escrow_vault(). All other bids are automatically rejected. No funds are held by the referee at any point —...
bid_idstringjob_idstringbuyer_addressstringChallenge-response quality verification for AI agents and MCP servers.
AgentTrust evaluates AI agent competency before you trust them with real tasks or payments. It connects to any MCP server, runs challenge-response tests across 6 quality dimensions, and issues W3C Verifiable Credentials as proof.
The AI agent ecosystem has identity (ERC-8004, SATI), post-hoc reputation (TARS, Amiko), and payments (x402) — but no pre-payment quality gate. AgentTrust fills this gap: verify competency first, then trust.
Evaluation Engine
Battle Arena
IRT Adaptive Testing
Standards
cp .env.example .env
# Add at least one LLM key (GROQ_API_KEY, CEREBRAS_API_KEY, etc.)
docker compose up -d
Services:
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# Add LLM keys to .env
unset GROQ_API_KEY # Shell env overrides .env rotation pool
python -m uvicorn src.main:app --host 0.0.0.0 --port 8002 --reload
Add to your MCP client config:
{
"mcpServers": {
"agenttrust": {
"command": "python",
"args": ["-m", "src.standards.mcp_server"],
"env": {
"GROQ_API_KEY": "your-key"
}
}
}
}
Or connect to a running instance via SSE:
http://localhost:8003/sse
Available MCP tools:
| Tool | Description |
|---|---|
check_quality(server_url) | Full evaluation: manifest + functional + judge scoring |
check_quality_fast(server_url) | Cached score (<10ms) or manifest-only (<100ms) |
get_score(server_url) | Lookup cached score with freshness decay |
verify_attestation(attestation_jwt) | Verify AQVC JWT and decode payload |
| Method | Endpoint | Description |
|---|---|---|
| POST | /v1/evaluate | Submit target for evaluation |
| GET | /v1/evaluate/{id} | Poll evaluation status |
| GET | /v1/score/{target_id} | Get quality score |
| GET | /v1/scores | Search/list scores |
| GET | /v1/badge/{target_id}.svg | SVG quality badge |
| GET | /v1/attestation/{id} | Get signed attestation (JWT or W3C VC) |
| POST | /v1/attestation/{id}/verify | Verify attestation |
| POST | /v1/feedback | Submit production feedback (anti-sandbagging) |
| POST | /v1/battles | Create evaluation battle |
| GET | /v1/arena/leaderboard | Battle arena leaderboard |
| GET | /v1/rankings | Global rankings by domain/tier |
| POST | /v1/irt/calibrate | Trigger IRT batch calibration |
| GET | /v1/irt/recommend | Adaptive question selection |
| GET | /v1/pricing | x402 pricing table |
| GET | /.well-known/agent.json | A2A Agent Card |
src/
api/v1/ # 14 FastAPI routers
core/ # Evaluator, MCP client, scoring, IRT, battle arena
auth/ # API keys (SHA256 + salt), rate limiting by tier
storage/ # MongoDB (Motor) + Redis
payments/ # x402 protocol, Solana verification
standards/ # W3C VC issuer, A2A extension, MCP server, AIUC-1
Stack: FastAPI + MongoDB + Redis | 533 tests | 60 source files | 15 lean dependencies
python -m pytest tests/ -q
# 533 passed in ~2s
See .env.example for all 60+ configuration options including:
MIT
Built by Assisterr
GROQ_API_KEYsecretGroq API key for LLM judge (free tier available at console.groq.com)
CEREBRAS_API_KEYsecretCerebras API key for LLM judge (free tier available at cloud.cerebras.ai)
MONGODB_URLsecretMongoDB connection URL for persistent storage