Back to Directory/Developer Tools

io.github.Kevinx702/legalcite

Verify legal case citations against real court records; flag fake/hallucinated cites.

Developer ToolsJavaScriptv0.1.0

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"; also POST {text})
  • MCP: verify_citations(text) → npm legalcite-mcp
  • Data: CourtListener (Free Law Project) — free public U.S. court records.

Verdicts

verdictmeaning
realthe case exists and (if named) the name matches
not-foundno such case — likely hallucinated
mismatchcitation is real, but the case name in the text is wrong

How it resolves

  1. 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).
  2. Token mode (optional): set COURTLISTENER_TOKEN (free) → uses CourtListener's citation-lookup endpoint (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.

Installation

Source-derived launch command. Check the maintainer’s required arguments and credentials before running:

bash
npx -y legalcite-mcp

Set up in your AI client

Merge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.

json
{
  "mcpServers": {
    "io-github-kevinx702-legalcite": {
      "command": "npx",
      "args": [
        "-y",
        "legalcite-mcp"
      ]
    }
  }
}

Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.

Claude Desktop setup reference

Package

legalcite-mcpnpm

Compatible MCP Clients

io.github.Kevinx702/legalcite works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.

  • Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.
  • Cursor~/.cursor/mcp.jsonRestart Cursor for changes to take effect.
  • VS Code.vscode/mcp.jsonReload VS Code window for changes to take effect.
  • Windsurf~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect.
  • Claude Code.mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.

Learn More