Skip to main content
Glama

Audit every citation in a brief

check_brief
Read-onlyIdempotent

Audit ALL citations in a draft brief, motion, or memo at once (wraps syfert.com Brief Check). Extracts every reporter citation, verifies each exists, checks the case name the document claims against the real case (hallucination detection), checks each quoted passage word for word against the cited opinion's own text (misquote = not in that opinion; unquoted_by_courts = the text could not be compared and no court has quoted those words from the case: check it with verify_quote), traces an unmatched quote to the case the language actually ORIGINATES in (quote_origin: attribute with "(quoting …)" or cite the source), and returns treatment flags with replacement suggestions for red-flagged authority. Also audits every STATUTE, REGULATION and COURT-RULE citation in the document against the corpus that holds it, reported separately under "statutes" (verified=false means not found in that corpus, which is not proof the section is wrong). ALWAYS run this on a finished draft before delivering it. Use mode=attack on an OPPONENT's brief to get ammunition: distinguishing and criticizing citers for each of their cites. Text over the size cap (128KB anonymous, 512KB with a token) is cut before the audit and the response then carries stats.truncated_bytes plus an INCOMPLETE AUDIT warning. corrections lists every quote the cited opinion does not carry verbatim, with replace_with (the opinion's own words, or, for verdict statute_text / statute_misquote / rule_text, the statute's or rule's own words) and star_page, and every unresolved or name-mismatched citation. Each unresolved citation carries verdict (exists_unindexed = a real case our index lacks, confirmed by a citing opinion or by name -- keep it; not_indexed = unknown, weigh volume_coverage (thin 2019+ volumes make a miss weak evidence); interior_mismatch/strong = likely fabricated), so do not report every unresolved cite as a hallucination (MCP13_20260925). A pinpoint page written as a citation of its own is status pin_reference (stats.pin_references, not unresolved) and its correction gives cite_as (first page, then pin). Public-domain cites ("2023 IL App (1st) 220520", "2023-Ohio-1234") are read like reporter cites, and a paragraph pinpoint ("¶ 45", "¶¶ 12-14") is checked against the opinion's paragraph numbers: cites[].para_pin.verdict interior_pin / interior_mismatch, quote_checks[].para_pin.inside says whether a quotation sits in the pinned paragraph; a mismatch is also a correction (MCP17_20260925). Each verified statute finding carries currency (edition, current-through, last amendment where recorded) and statutes.corpus_currency the edition of each corpus: a brief about past conduct needs the text in force on the operative date (check_citation or get_statute with as_of). Pass forum (the court you will file in, e.g. forum="ca9" or forum="fl") to have each unpublished cited case checked against the citation rules of that court: cites[].citability.forum.may_cite is yes / persuasive / conditional / no, or unsure when our verified rules data cannot settle it for that court (it says why: another court system, a district court applying a circuit rule, a pre-2007 federal disposition in another circuit, or a rule that is an open question on the citability review page). An unresolved citation printed in the corpus only by opinions that say it does not exist (sanctions / show-cause orders on fabricated citations) is verdict strong, verdict_evidence cited_as_fabricated, with fabricated_citers.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
modeNodefend (default): audit your own draft. attack: treat the text as the opponent's brief and return ammunition against their cites.
textYesThe full document text (up to 512KB)
forumNoOptional. The court the document will be filed in: a court id (fla, ca9, texapp, flsd, scotus) or a two-letter state code / state name (fl, TX, New York). Unpublished cited cases are then checked against the citation rules that apply in THAT court (cites[].citability.forum); without it the issuing court's own rule is reported.
max_citesNoMax citations to process (default 100, max 200)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / forum
      Added value: +{
      +  "description": "Optional. The court the document will be filed in: a court id (fla, ca9, texapp, flsd, scotus) or a two-letter state code / state name (fl, TX, New York). Unpublished cited cases are then checked against the citation rules that apply in THAT court (cites[].citability.forum); without it the issuing court's own rule is reported.",
      +  "type": "string"
      +}
  2. First observed

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=false, so the description doesn't need to restate safety. It adds rich behavioral context beyond annotations: hallucination detection, treatment flags, statute/regulation/rule auditing (separate output under 'statutes'), truncation behavior with stats.truncated_bytes and INCOMPLETE AUDIT warning, verdict taxonomy (exists_unindexed, not_indexed, interior_mismatch/strong), pinpoint handling, quote_origin tracing, fabricated_citers, and citability via forum. However, it's somewhat sprawling and could be better organized; it doesn't contradict annotations. A 4 reflects strong but not perfectly structured transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and an ALWAYS instruction, but the single paragraph is extremely long (over 400 words) with many parenthetical asides and internal codes (MCP13_20260925, MCP17_20260925) that clutter. It's information-dense but lacks structure (bullet points, paragraph breaks), making it harder to scan. It's appropriately sized for a complex tool but not optimally organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity—multi-faceted citation audit with hallucination, quote, statute, pin, treatment, and citability checking—the description covers all major behaviors, output structures (cites[], quote_checks[], statutes, corrections), edge cases (truncation, public-domain cites, paragraph pinpoints), and integration points (forum, check_citation, get_statute). No output schema exists, and the description still adequately explains return structure. Nothing critical is missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all four parameters including mode enum and forum examples. The description elaborates on mode=attack and forum's effect (cites[].citability.forum), adding practical meaning, but doesn't go beyond the schema for text or max_cites beyond what the schema states. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear specific verb+resource+scope: 'Audit ALL citations in a draft brief, motion, or memo at once.' It distinguishes itself from check_citation by emphasizing the entire document at once and wrapping syfert.com Brief Check, and from verify_quote by handling all citations rather than one. However, it doesn't explicitly contrast with check_citation beyond being batch-oriented, so it falls short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use: 'ALWAYS run this on a finished draft before delivering it.' Explicit alternative usage: 'Use mode=attack on an OPPONENT's brief to get ammunition.' It also routes the agent to verify_quote for unquoted_by_courts and mentions check_citation or get_statute with as_of for currency. Clear context and exclusions are both present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources