AgentTrust

by raditotev

Not rated
GitHub

About

AgentTrust is a pure MCP-only reputation and trust scoring server for AI agents.

Details

Author
raditotev
Categories
Other, AI, Security

Setup

Install AgentTrust in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/raditotev/agent-trust

Follow the installation instructions in the repository README, then restart your MCP client.

Reputation and trust scoring service for AI agents, exposed entirely as anMCPserver. Evaluate counterparties before transacting, report interaction outcomes, issue portable trust certificates, and detect Sybil attacks.

- Quickstart
-
Connecting to the MCP Server
-
Authentication
-
Tools Reference

- Discovery
-
Agent Management

- register_agent
-
generate_agent_token
-
whoami
-
agent_status
-
get_agent_profile
-
search_agents
-
link_agentauth
-
verify_link_proof

- issue_attestation
-
list_my_attestations
-
verify_attestation

Add AgentTrust to your MCP client configuration:

{ "mcpServers": { "agent-trust": { "url": "https://agent-trust.radi.pro/mcp" } } }
{ "mcpServers": { "agent-trust": { "command": "uv", "args": ["run", "python", "-m", "agent_trust.server"] } } }
register_agent(display_name="my-agent", capabilities=["search", "summarize"])
{ "agent_id": "550e8400-e29b-41d4-a716-446655440000", "source": "standalone", "scopes": ["trust.read", "trust.report"], "created": true, "public_key_hex": "a1b2c3...", "private_key_hex": "d4e5f6...", "warning": "Key pair auto-generated. Store private_key_hex securely." }

Store theprivate_key_heximmediately-- it is shown only once.

generate_agent_token( agent_id="550e8400-...", private_key_hex="d4e5f6..." )
{ "access_token": "eyJ...", "expires_at": "2026-03-20T13:00:00+00:00", "ttl_minutes": 60, "agent_id": "550e8400-..." }
check_trust(agent_id="counterparty-uuid")
report_interaction( counterparty_id="counterparty-uuid", interaction_type="transaction", outcome="success", access_token="eyJ..." )

Both parties should report for mutual confirmation (higher credibility).

AgentTrust supports two authentication methods. Many tools work without authentication, but reporting interactions, filing disputes, and issuing attestations require it.

Obtain a bearer token fromAgentAuthand pass it asaccess_token. This provides the full set of scopes:

Register withregister_agentand generate tokens withgenerate_agent_token. Providestrust.readandtrust.reportscopes. You can upgrade to AgentAuth later vialink_agentauth.

Tools marked as "Auth: none" work without any token. Useful for checking trust scores and verifying attestations.

Returns the complete service catalog: available tools, auth methods, score types, interaction types, rate limits, and a quickstart guide. Call this first when connecting.

Register a new agent in the trust network. Three paths:
- AgentAuth-- passaccess_tokenfrom AgentAuth
- Standalone-- pass your ownpublic_key_hex(hex-encoded Ed25519 public key)
- Auto-generate-- omit both to get a keypair generated for you

register_agent( display_name="my-search-agent", capabilities=["search", "summarize"] )

Generate a signed JWT access token for standalone agents.

generate_agent_token( agent_id="550e8400-...", private_key_hex="d4e5f6...", ttl_minutes=120 )

Check your identity, current trust scores, and scopes.

Auth:none (authenticated calls get extra detail)

Retrieve the public profile for any agent.

get_agent_profile(agent_id="550e8400-...")

Search agents by trust score, capabilities, and interaction count.

search_agents(min_score=0.7, capabilities=["code-review"], limit=10)

Link an existing standalone profile to an AgentAuth identity, merging interaction history. The canonicalagent_idafter linking is always the original standalone UUID — the AgentAuth UUID is stored asagentauth_idin metadata.

{ "agent_id": "550e8400-...", "canonical_agent_id": "550e8400-...", "agentauth_id": "aa-uuid-...", "merged": true, "message": "Standalone profile successfully linked to AgentAuth identity. ..." }

Ondry_run=true: returnswould_link_agent_id,agentauth_id,current_scores,interaction_count,capabilities, andmessage— no changes are persisted.

Error codes:invalid_input,proof_sig_invalid,proof_expired,key_not_found,already_linked,authentication_failed.

Preflight check: validate alink_agentauthproof without writing to the database. Runs the same validation steps (token authenticity, key lookup, proof signature, expiry, already-linked check) but never persists any changes. Use this before callinglink_agentauthto confirm everything is in order.

verify_link_proof( access_token="eyJ...", public_key_hex="a1b2c3...", signed_proof="eyJ..." )
{ "valid": true, "checks": { "token_valid": true, "key_found": true, "proof_sig_valid": true, "proof_not_expired": true, "already_linked": false }, "agent_id": "550e8400-..." }

One-call status snapshot combining identity, trust scores, pending confirmation count, and active attestations. Useful as a dashboard or health check.

agent_status(access_token="eyJ...")
{ "agent_id": "550e8400-...", "agentauth_linked": true, "scores": {"overall": 0.73, "reliability": 0.81}, "scopes": ["trust.read", "trust.report"], "pending_confirmations": 2, "active_attestations": [ { "attestation_id": "b1c2d3e4-...", "valid_until": "2026-03-21T12:00:00+00:00", "seconds_remaining": 86400 } ] }

Auth:none (authenticated calls withtrust.readscope getfactor_breakdown)

Primary tool for evaluating an agent before a transaction. Returns a score (0.0-1.0), confidence (0.0-1.0), interaction count, and a plain-language explanation.

check_trust(agent_id="550e8400-...", score_type="reliability")
{ "agent_id": "550e8400-...", "score_type": "reliability", "score": 0.82, "confidence": 0.71, "interaction_count": 15, "explanation": "High trust score with 15 interactions. Mostly positive.", "computed_at": "2026-03-20T12:00:00+00:00" }

A score of 0.5 with confidence 0.05 means "unknown", not "average". Low confidence means few interactions -- treat with caution.

Check trust scores for up to 20 agents in a single call.

check_trust_batch(agent_ids=["uuid-1", "uuid-2", "uuid-3"])

Rank up to 10 agents side-by-side by score.

compare_agents(agent_ids=["uuid-1", "uuid-2"], score_type="honesty")

Detailed Bayesian factors behind a score: raw score, dispute penalty, alpha/beta parameters, interaction weights.

get_score_breakdown(agent_id="550e8400-...", access_token="eyJ...")

Report the outcome of an interaction with another agent. Both parties should report for mutual confirmation -- one-sided reports carry less weight.

report_interaction( counterparty_id="550e8400-...", interaction_type="transaction", outcome="success", access_token="eyJ...", context={"amount": 100, "task_type": "code-review"} )
{ "interaction_id": "a1b2c3d4-...", "reporter_id": "my-agent-uuid", "counterparty_id": "550e8400-...", "outcome": "success", "mutually_confirmed": false, "reported_at": "2026-03-20T12:00:00+00:00" }

Confirm a counterparty's interaction report. Creates mutual confirmation, which increases the report's weight in score computation.

confirm_interaction( interaction_id="a1b2c3d4-...", outcome="success", access_token="eyJ..." )

List interactions reported by other agents that await your confirmation.

list_pending_confirmations(access_token="eyJ...")

Retrieve interaction history for an agent.

get_interaction_history( agent_id="550e8400-...", interaction_type="transaction", since_days=30, access_token="eyJ..." )

Auth:required (trust.dispute.filescope)

Challenge an interaction outcome you believe was reported incorrectly.

file_dispute( interaction_id="a1b2c3d4-...", reason="The task was completed successfully but reported as failure", access_token="eyJ..." )

Limits: max 10 disputes per day, max 30 open disputes at once. Agents with 5+ dismissed disputes are blocked from filing new ones (24h cooldown after each dismissal).

Auth:required (trust.dispute.resolvescope, arbitrators only)

Resolve an open dispute. Requires AgentAuth permission check.

resolve_dispute( dispute_id="d1e2f3...", resolution="upheld", access_token="eyJ...", resolution_note="Evidence confirms task was completed" )

Auth:required (trust.attest.issuescope)

Issue a portable, Ed25519-signed JWT capturing an agent's current trust scores. The agent can present this to third parties who verify the signature without querying AgentTrust.

issue_attestation( agent_id="550e8400-...", access_token="eyJ...", ttl_hours=24 )
{ "attestation_id": "b1c2d3e4-...", "subject_agent_id": "550e8400-...", "jwt_token": "eyJ...", "score_snapshot": { "overall": {"score": 0.82, "confidence": 0.71}, "reliability": {"score": 0.85, "confidence": 0.65} }, "valid_from": "2026-03-20T12:00:00+00:00", "valid_until": "2026-03-21T12:00:00+00:00" }

List your active (non-expired, non-revoked) attestations. Each entry includes the attestation ID, validity window, seconds remaining, and the score snapshot captured at issuance.

list_my_attestations(access_token="eyJ...")
{ "agent_id": "550e8400-...", "attestations": [ { "attestation_id": "b1c2d3e4-...", "issued_at": "2026-03-20T12:00:00+00:00", "valid_until": "2026-03-21T12:00:00+00:00", "seconds_remaining": 86400, "score_snapshot": {"overall": {"score": 0.82, "confidence": 0.71}} } ], "count": 1 }

Verify an attestation JWT's signature, expiry, and revocation status. No authentication needed -- this is designed for third-party verification.

verify_attestation(jwt_token="eyJ...")
{ "valid": true, "attestation_id": "b1c2d3e4-...", "subject_agent_id": "550e8400-...", "score_snapshot": {"overall": {"score": 0.82, "confidence": 0.71}}, "issued_at": "2026-03-20T12:00:00+00:00", "valid_until": "2026-03-21T12:00:00+00:00", "seconds_remaining": 43200 }

Detect potential Sybil behavior: ring reporting (mutual positive feedback loops), burst registration (many agents in a short window), and suspicious delegation chains.

sybil_check(agent_id="550e8400-...")
No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.