proofread-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PROOFREAD_API | No | Base URL, for a self-hosted or test instance. | https://proofread.law |
| PROOFREAD_API_KEY | No | A Firm plan API key (`pl_...`), sent as `Authorization: Bearer`. Without it the free tier applies. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| check_citationsA | Check every case citation in a text against proofread.law's register of about 10 million US court opinions (CourtListener bulk data). Use it on a draft brief, memo, letter or any prose that cites cases, before the citations are relied on. Returns the coverage statement, counts per tier, one line per row that needs a human (red = check this: the register holds something concrete that disagrees, such as a different case at that citation or quoted words not in the opinion; orange = cannot verify: nothing to check against, such as a Westlaw/Lexis identifier or a volume newer than the register), the number of citations found, and a report id for render_report. Cannot: resolve Westlaw (WL) or Lexis identifiers, check statutes, regulations or secondary sources, or say whether a case is still good law. A red row means 'check this', never 'this case does not exist'; an orange row means the register has nothing to check against, which is not evidence either way. deep=true also asks, for each found citation, whether the opinion supports the sentence it is cited for (white rows). It is slower (1 to 2 s per citation), opt-in because the clause before each citation is sent to a model judge, limited to 3 per month on the free tier, and its answers are a review queue, not a verdict. Free tier: 20 checks a month per IP; a Firm API key in PROOFREAD_API_KEY lifts that. |
| check_documentA | Check every case citation in a document on disk (PDF, DOCX or TXT, up to 10 MB) against proofread.law's register of about 10 million US court opinions. The file is read here and uploaded to proofread.law, which extracts the text in memory, checks it and discards it. Returns the same compact result as check_citations: coverage statement, counts per tier, one line per red (check this) or orange (cannot verify) row, the number of citations found, and a report id for render_report. Scanned PDFs without a text layer, encrypted PDFs and legacy .doc files cannot be read; .docx needs a paid plan. Cannot: resolve Westlaw (WL) or Lexis identifiers, check statutes, regulations or secondary sources, or say whether a case is still good law. A red row means 'check this', never 'this case does not exist'; an orange row means the register has nothing to check against, which is not evidence either way. deep=true also asks, for each found citation, whether the opinion supports the sentence it is cited for (white rows). It is slower (1 to 2 s per citation), opt-in because the clause before each citation is sent to a model judge, limited to 3 per month on the free tier, and its answers are a review queue, not a verdict. |
| resolve_citationA | Look up a single case citation (for example '590 U.S. 644', or 'Bostock v. Clayton County, 590 U.S. 644 (2020)') in proofread.law's register and answer: is there a case at this citation, which one (name, court, date, parallel citations, link), and how complete the register is for that volume. This is a register lookup of the citation, not a comparison with the case name you have: if the case it returns is not the one you expected, the citation points elsewhere. Statuses: found; ambiguous (several entries, candidates listed); not in the register (a register fact with a coverage qualifier, never proof that the case does not exist); cannot verify (a Westlaw/Lexis identifier, or a volume the register cannot see yet); known citation (other opinions cite it, the opinion itself is not held); no citation recognised. Use it when one citation is in doubt; use check_citations for prose, and resolve_citations for a list. Cannot: resolve Westlaw (WL) or Lexis identifiers, check statutes, regulations or secondary sources, or say whether a case is still good law. A red row means 'check this', never 'this case does not exist'; an orange row means the register has nothing to check against, which is not evidence either way. Counts against the resolve quota (1,000 a month free), not the check quota. |
| resolve_citationsA | Look up up to 500 case citation strings in proofread.law's register in one call and get one line per citation, in input order: found (the case, court, date, link), ambiguous, not in the register (a register fact with a coverage qualifier, never proof that the case does not exist), cannot verify (Westlaw/Lexis identifier, or a volume the register cannot see yet), known citation, or no citation recognised. Use it for a table of authorities or any list of citations you already have; use check_citations for prose (it also checks names and quotations). Cannot: resolve Westlaw (WL) or Lexis identifiers, check statutes, regulations or secondary sources, or say whether a case is still good law. A red row means 'check this', never 'this case does not exist'; an orange row means the register has nothing to check against, which is not evidence either way. Each citation counts against the resolve quota (1,000 a month free), not the check quota. |
| coverageA | The coverage statement (which opinions the register holds, its date, its known gaps, what is not checked: Westlaw/Lexis identifiers, statutes, regulations, secondary sources) and the storage notice (nothing submitted is stored). Call it when a user asks what the check covers, how current it is, or what happens to their text. Free, not counted as a check. |
| render_reportA | Turn a finished check into a markdown diligence report: header, coverage and storage notices, a summary table sorted check-this, cannot-verify, support, found, and a detail block per flagged row with the register evidence. Use it when the user wants a report to keep or attach to the file. Pass the report_id returned by check_citations or check_document (ids live in this server's memory until it exits), or the full report JSON from proofread.law's /verify endpoint. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 6 tools
Tools form two near-identical pairs: check_citations/check_document (text vs file) and resolve_citation/resolve_citations (single vs batch). The descriptions explicitly direct usage and distinguish them, so ambiguity is low but not zero.
Most tools follow a clear verb_noun snake_case pattern: check_citations, check_document, resolve_citation, resolve_citations, render_report. 'coverage' breaks the pattern by being a bare noun, though it is still readable and consistent in style.
Six tools is well-scoped for the server's purpose: checking prose, checking a file, single lookup, batch lookup, coverage information, and report rendering. No tool is redundant padding and nothing essential seems missing.
The core workflow of checking citations, resolving individual citations, and rendering reports is complete. Minor gaps exist: deep-support checking is opt-in/quota-limited, and resolve_citations output cannot be passed directly to render_report.