LegalCite
Stop your AI from citing fake cases. LegalCite checks every case citation in legal text against real court records (CourtListener) and flags hallucinated/fake or misattributed cites. A REST API + an MCP server.
- Live: https://legalcite-one.vercel.app
- Verify API:
GET /api/verify?text=<paragraph>(or?citation="410 U.S. 113"; alsoPOST {text}) - MCP:
verify_citations(text)→ npmlegalcite-mcp - Data: CourtListener (Free Law Project) — free public U.S. court records.
Verdicts
| verdict | meaning |
|---|---|
real | the case exists and (if named) the name matches |
not-found | no such case — likely hallucinated |
mismatch | citation is real, but the case name in the text is wrong |
How it resolves
- Token-free (default): reporter-aware regex extracts citations → each resolved via CourtListener's public
/c/{reporter}/{vol}/{page}/finder (redirects to the opinion when real, 404 when not). - Token mode (optional): set
COURTLISTENER_TOKEN(free) → uses CourtListener'scitation-lookupendpoint (Eyecite extraction + full metadata).
It never fabricates — an unresolved citation is reported not-found, never invented.
Layout
api/verify.js REST endpoint (quota + verify)
api/health.js liveness + CourtListener check
api/checkout|key|stripe-webhook.js Stripe Pro billing
lib/verify.js citation extraction + CourtListener resolution (core)
lib/store.js Redis quota + key store (fail-open without REDIS_URL)
lib/stripe.js lazy Stripe client
mcp/server.js MCP stdio server — verify_citations tool
public/ landing, docs, pricing, llms.txt
scripts/setup-stripe-product.js one-time Stripe product/price (test key)
Config (Vercel env — all optional for the MVP)
COURTLISTENER_TOKEN— free; enables richer citation-lookup + metadata.REDIS_URL— Upstash; enables hard daily quota + caching (fail-open without it).STRIPE_SECRET_KEY/STRIPE_PRICE_ID/STRIPE_WEBHOOK_SECRET— Pro billing.
Pricing
Free: 20 checks/day by IP. Pro: 2,000/day, $19/mo, 7-day trial.
Not legal advice. Verifies citation existence/metadata only — not legal correctness or good-law status.