Check an AI agent or MCP server endpoint before you call it. Given the exact
endpoint URL, AgentTrust returns the reliability evidence it has already
collected, endpoint-ownership verification, and a machine-readable
trustDecision — without contacting the endpoint.
No AgentTrust account or API key required · Read-only · MCP and TypeScript SDK
AgentTrust is trust infrastructure for AI agents. It provides
reliability monitoring, endpoint verification, and pre-invocation trust
checks for MCP and A2A agents. An agent registers an identity, gets
health-checked once a day, optionally proves ownership of its
endpoint, and accumulates a deterministic reliability score from that
observed history. Any external AI agent or system can look up another
agent by its invocation URL and get back a machine-readable
trustDecision — a signal derived from AgentTrust's own observed and
verified data, for the caller to weigh, never a certification or
guarantee of safety — before deciding whether to interact with it.
Official MCP Registry identity: io.github.agenttrust-ai/agenttrust.
Every example below checks AgentTrust's own monitored test agent,
https://agenttrust-umber.vercel.app/api/test-agent; swap in the URL you're
about to call.
Add the public connector https://getagenttrust.com/api/mcp/public
(Streamable HTTP, no authentication; two read-only tools, check_agent_trust
and assess_agent).
In Claude Code:
claude mcp add --transport http agenttrust https://getagenttrust.com/api/mcp/publicClaude Desktop, Cursor and a plain curl call:
Connect an MCP client.
npm install @getagenttrust/sdkimport { checkAgentTrust } from "@getagenttrust/sdk";
// AgentTrust's own test agent: a real, monitored endpoint you can check.
const result = await checkAgentTrust("https://agenttrust-umber.vercel.app/api/test-agent");
if (result.matched) {
console.log(result.status, result.reliabilityScore, result.trustDecision);
// e.g. "healthy" 100 { recommended: true, confidence: "high", reasons: [] }
} else {
// AgentTrust has no data for this endpoint (yet). An unmatched result never
// carries a score; result.observation may say it was queued for a lookup.
console.log("Unknown endpoint", result.observation?.status);
}Policies (assertTrusted), errors and options: SDK README
· npm. New to AgentTrust?
Start with First 5 minutes.
Check the test agent on getagenttrust.com.
No account or API key. Node.js 18 or later.
1. Install. assessAgent needs SDK 0.2.0 or later.
npm install @getagenttrust/sdk@^0.2.02. Check an endpoint. This checks AgentTrust's own monitored test agent, so it returns a real result. The check is read-only, and AgentTrust never contacts the endpoint you ask about.
import { assessAgent } from "@getagenttrust/sdk";
// AgentTrust's own monitored test agent. Swap in the URL your agent is about to call.
const assessment = await assessAgent("https://agenttrust-umber.vercel.app/api/test-agent");
console.log(assessment.decision, assessment.confidence, assessment.reasonCodes);
// e.g. allow_with_caution high ["OWNERSHIP_VERIFIED", "REACHABLE_AT_LAST_CHECK", …]
if (assessment.decision === "allow_with_caution") {
// Reachable and not failing in AgentTrust's observations. Not proof that the
// agent behaves safely: keep your own safeguards when you call it.
} else {
// "avoid", or "insufficient_evidence" — also the answer for a URL AgentTrust
// doesn't monitor (matched: false, reasonCodes includes "UNKNOWN_ENDPOINT").
console.log("Not calling it:", assessment.limitations);
}3. Read the answer. confidence, reasonCodes and limitations say why.
decision |
What it means | What to do |
|---|---|---|
allow_with_caution |
AgentTrust's observations show the endpoint reachable and not failing: a current historical reliability score, or at least two successful observations at least 10 minutes apart. | Call it, with your own safeguards. It isn't proof that the agent behaves safely. |
avoid |
AgentTrust's observations show it failing — for example two or more consecutive failures, or a current reliability score below 50. | Don't call it. |
insufficient_evidence |
Not enough evidence either way: an endpoint AgentTrust doesn't monitor, too few or too old observations, or a single failure that may be temporary. | Don't treat it as approval — handle it as an unknown endpoint. |
| Call | Use it when | You get |
|---|---|---|
assessAgent(url) |
Your agent needs one decision to act on before it calls an endpoint. | decision, confidence, reasonCodes and limitations, with the evidence behind them. |
checkAgentTrust(url) |
You want the evidence itself — status, reliabilityScore, verified and trustDecision — to apply your own rules. |
{ matched: true, … }, or { matched: false } for an endpoint AgentTrust doesn't monitor. |
assertTrusted(url, policy) |
You want a gate: go ahead only if the endpoint meets your policy. | The checkAgentTrust result, or a thrown NotTrustedError. |
All three are anonymous and read-only, and never contact the endpoint (over MCP: assess_agent and check_agent_trust). They report what AgentTrust has observed; they don't certify an endpoint's security.
AgentTrust only has evidence for endpoints it monitors, so your first check of a real URL may come back unknown. That is an answer, not an API failure — the call succeeds:
assessAgentreturnsmatched: false,decision: "insufficient_evidence",confidence: "none", andreasonCodesincluding"UNKNOWN_ENDPOINT".checkAgentTrustreturns{ matched: false }, sometimes with anobservationstatus when AgentTrust has queued the URL for a lookup in the official MCP Registry.assertTrustedthrowsNotTrustedError("AgentTrust has no data for this endpoint") unless you passallowUnknown: true.
Real failures — RATE_LIMITED, TIMEOUT, NETWORK_ERROR and the rest — throw an AgentTrustError instead.
Handle an unknown endpoint as not trusted: don't map insufficient_evidence to "allow", keep allowUnknown: false (the default) unless you have chosen otherwise on purpose, and ask a human or run your own checks before calling an endpoint nobody has observed.
- Gate a real connection:
examples/check-before-connect.tsputsassertTrustedin front of an MCP client connection. - Tune the gate:
minConfidence,requireVerifiedandminReliabilityScorein theassertTrustedpolicy — see the SDK README. - Running an agent yourself? Register it so other agents can check it — that needs an account and an API key: Getting started.
| Public trust checks | Agent management | |
|---|---|---|
| For | Checking any endpoint before you call it | Registering and monitoring your own agents; full agent records |
| Account / API key | Not needed | Account and API key (Authorization: Bearer <API_KEY>) |
| Interfaces | MCP check_agent_trust and assess_agent at /api/mcp/public; @getagenttrust/sdk (checkAgentTrust, assertTrusted, assessAgent) |
REST /api/v1/*; MCP server /api/mcp (list_agents, get_agent, get_agent_health, send_heartbeat) |
To register an agent: sign up, create a key under Dashboard → API keys, then follow Getting started (REST).
You don't need this repository to use AgentTrust:
- /docs — full REST, MCP and SDK reference.
- /llms.txt — the same reference as one plain-text file, for an LLM's context.
This is a Next.js (App Router) + Drizzle + Supabase app, deployed on Vercel.
npm install
npm run devOpen http://localhost:3000. You'll need a
.env.local — see .env.example for the required variables (Supabase
credentials, database connection strings, and the server-only secrets
described inline).
Useful scripts:
npm run test # vitest — full suite runs against an embedded pglite DB, no live database needed
npm run typecheck # tsc --noEmit
npm run lint # eslint
npm run db:generate # generate a new Drizzle migration from schema changes (offline)
npm run db:migrate # apply pending migrations to the database in DIRECT_URL