VERITY โ Real-Time Fact-Checking Agent
Real-time fact-checking and data freshness agent. Verifies claims, URLs, and content against live web sources. Returns structured verdicts with confidence scores, what has changed, and supporting sources.
Verdicts
| Verdict | Meaning |
|---|
CURRENT | Claim is accurate and up to date |
OUTDATED | Claim was true but has since been superseded |
DISPUTED | Sources disagree โ no clear consensus |
UNVERIFIABLE | No usable sources found |
MCP Setup (Claude Desktop / Cursor)
{
"mcpServers": {
"verity": {
"command": "npx",
"args": ["verity-mcp"],
"env": {
"VERITY_PRIVATE_KEY": "0x..."
}
}
}
}
Get USDC on Base at coinbase.com/wallet.
| Tool | Description | Price |
|---|
verity_verify | Verify a claim or URL against live sources | 0.10 USDC |
verity_deep_check | Multi-angle thorough verification | 0.50 USDC |
verity_batch | Verify up to 10 claims at once | 0.75 USDC |
verity_agent | Natural language fact-checking | 0.10 USDC |
check_credits | Remaining balance for a PayGated pg_ key | free |
API
POST https://verity.basechainlabs.com/api/verify
Authorization: x402 (USDC on Base)
{
"claim": "Is GPT-4 still the most capable OpenAI model?",
"caller_id": "my-agent-id"
}
Response:
{
"verdict": "OUTDATED",
"confidence": 91,
"summary": "GPT-4 has been superseded by GPT-4o and o3.",
"what_changed": "OpenAI released GPT-4o (May 2024) and o3 (late 2024).",
"sources": [{ "url": "...", "title": "...", "published_date": "2025-01", "supports": "CONTRADICTS" }],
"checked_at": "2026-05-11T09:00:00Z",
"recommendation": "Update any content referencing GPT-4 as the most capable model."
}
Persistent Memory
Pass a consistent caller_id on every call. VERITY remembers topics you've checked, domains you monitor, and previous results โ no re-sending context.
A2A Agent Card
GET https://verity.basechainlabs.com/api/agent?agent-card=true
Built by BaseChain Labs
Making changes (maintainer guide)
Where things live
| Thing | Where |
|---|
| The agent's brain | src/agent.ts (system prompt, orchestration), src/tools.ts (fact-checking: Tavily search + Claude verdicts) |
| API endpoints | one file per route under api/: agent (paid A2A entry), verify, deep-check, batch-verify, mcp, checkout, stripe-webhook, recover-key, plus the cron-check-deps and daily-summary crons |
| Payment gate | api/_x402-gate.ts: unpaid POSTs get HTTP 402 with the price and the Bazaar listing; GET returns the agent card |
| Public page | public/index.html (plain HTML). Agent card: public/.well-known/agent.json |
| Marketplace seller | seller-v2.mjs + Dockerfile + railway.json, the Virtuals ACP seller on Railway. Its keyring lives on a Railway volume; keyring.json and keyring.key are runtime files and gitignored |
| Secrets | hosting environment variables only. Never in a file, never in a commit |
How a change goes live
There is no test suite and no CI on this repo. A push to main is the deploy.
- Edit, then type-check:
npx tsc --noEmit -p .
- Commit and push to
main. Vercel builds and deploys production from the GitHub integration.
- Confirm the newest production deployment carries your commit SHA and the endpoint answers:
curl -s https://verity.basechainlabs.com/.well-known/agent.json | head -c 300
- A push also redeploys the Railway seller. Confirm its log shows it connected afterwards.
Because there are no tests, prove a change on the live endpoint with a read-only call before calling it done. Never make a paid call (x402 or Stripe) just to test.
Things that bite
- Prices live in four places that must stay in sync:
public/index.html, the 402 body in api/_x402-gate.ts, the Virtuals ACP offerings, and the npm package README.
- Agentic.market's "Validate endpoint" tool: use POST. GET returns the agent card (200) by design and the validator then says "no x402 setup".
- Tavily is the search backend. If verifications start failing, check the Tavily credit first.
- Removing the Railway volume wipes the seller's keyring on the next redeploy and takes it offline.