Skip to main content
Glama

Check a citation

check_citation
Read-onlyIdempotent

Verify a legal citation actually exists before using it. CASES: returns the real case at that citation, its treatment flag, and (if expected_case_name given) whether the name matches. This catches hallucinated or miscopied citations. A reporter cite that is not indexed comes back with a verdict, and the verdict is what to act on (MCP13_20260925): exists_unindexed = the case is REAL (a court in the corpus prints this exact citation, see cited_by_corpus, or the case is found by name and year, see name_candidates) and only our reporter index lacks it -- never call it a hallucination; not_indexed = no evidence either way, read volume_coverage: for 2019+ volumes of the state regional reporters we often index under 30% of the cases (coverage_pct), so a miss there is weak evidence; interior_mismatch / strong = the page provably sits inside a differently named case, or the volume is complete and nothing turns up by name -- treat as likely fabricated; name_mismatch = opinions in the corpus print this citation for a DIFFERENTLY named case (cited_by_corpus.examples[].printed_as): the cite is real but not the case you named -- fix the name or the cite. Local misses are also re-checked LIVE against CourtListener. STATUTES, REGULATIONS AND COURT RULES: a citation that is not a reporter cite is checked against the corpus that holds it (50 states + DC, 44 states' court rules, the Florida Administrative Code, USC/CFR/federal rules/USSG) and comes back with type, verified, the canonical citation, title, url and link_md; verified=false carries nearby sections and a coverage note, and is NEVER proof the section does not exist. ALWAYS use this to verify any citation that will appear in a legal document. With quote, the quoted words are checked against the opinion the cite resolves to (quote_check, the verify_quote block). PROPOSITION-LEVEL TREATMENT (MCP14_20260925): pass proposition (what you cite the case for; quote is used when proposition is absent) and treatment.proposition names the one proposition citing courts cite it for that matches, with its OWN flag, and treatment.proposition_note says when that point is flagged although the case is green (or unflagged although the case is red); "no proposition-level signal for this use" means only the case-level flag applies. PUBLIC-DOMAIN CITES AND ¶ PINPOINTS (MCP17_20260925): vendor-neutral cites are read as the courts print them ("2023 IL App (1st) 220520", "2023-Ohio-1234", "2022-NMCA-063", "2021 IL App (1st) 200563-U", "2019 S.D. 9"); a paragraph pinpoint ("¶ 45", "¶¶ 12-14", "at ¶ 7") on a resolved cite is checked against the opinion's own paragraph numbers: paragraph_pin.verdict interior_pin = that paragraph exists (paragraph_text shows it), interior_mismatch = past the last numbered paragraph, a number the opinion skips, or (with quote) the quotation sits in another paragraph (found_at, suggested); null = the text carries no paragraph numbers, not checked. The top-level verdict stays found. A verified statute, regulation or rule also returns currency + temporal_note (the edition held, current-through, last amendment where recorded); with as_of, temporal_warning comes first when the section changed after that date. OPERATIVE DATE: statute text is the edition this corpus holds, not the law on every date. For a crime, a contract, a limitations period or a procedural step, establish the operative date first (offense, contract, accrual or filing date) and pass it as as_of (YYYY-MM-DD); say so when the text postdates the facts, since an older offense may be charged under a predecessor section. A statute whose status is sunset, future, expired or repealed leads with status_warning (sunset_date, successor). So does a U.S. Code section omitted from the Code (status omitted). A citing opinion that says the cited case does not exist (a sanctions or show-cause order about fabricated citations, Mata v. Avianca) is never counted as evidence: such citers are listed in fabricated_citers, and when they are the only ones the verdict is strong with verdict_evidence cited_as_fabricated (likely fabricated). Clusters that look like one decision filed twice but share no docket number are listed as twin_candidates (not folded). A CFR section removed from the eCFR is status removed (status_warning REMOVED, currency.sunset_date = the removal's effective date).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
as_ofNoOptional operative date, YYYY-MM-DD (offense, contract, accrual or filing date). When the section was amended or enacted after it, the answer leads with temporal_warning (severity amended_after | enacted_after | text_older_than_as_of | unknown_history), the history note and, when this corpus kept it, the prior text (prior_text_available); otherwise as_of_check says no later change is recorded. On or after a held successor version's operative date, as_of_version carries that version's text.
quoteNoOptional: words you quote from this case; returns quote_check (verbatim | near | absent, best_match, star_page)
stateNoOptional two-letter state code, used only for statute/rule cites: settles a form two states both recognise, and resolves forms the corpus registry cannot classify. Ignored for case citations
citationYesThe citation, e.g. "819 So. 2d 732", "Siegle v. Progressive, 819 So. 2d 732 (Fla. 2002)", "Fla. Stat. § 83.49", "Fla. R. Civ. P. 1.510", "42 U.S.C. § 1983", "N.C. R. App. P. 10"
propositionNoOptional: the point you cite this case for (a sentence of your draft or a paraphrase); returns treatment.proposition and treatment.proposition_note, the treatment of that proposition
expected_case_nameNoCase name the citation is claimed to belong to, for mismatch detection. Also lets a citation newer than the reporter index resolve by name + decision date: same-name cases in the window come back as name_candidates

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / as_of / description
      Previous value: -"Optional operative date, YYYY-MM-DD (offense, contract, accrual or filing date). When the section was amended or enacted after it, the answer leads with temporal_warning (severity amended_after | enacted_after | text_older_than_as_of | unknown_history), the history note and, when this corpus kept it, the prior text (prior_text_available); otherwise as_of_check says no later change is recorded."New value: +"Optional operative date, YYYY-MM-DD (offense, contract, accrual or filing date). When the section was amended or enacted after it, the answer leads with temporal_warning (severity amended_after | enacted_after | text_older_than_as_of | unknown_history), the history note and, when this corpus kept it, the prior text (prior_text_available); otherwise as_of_check says no later change is recorded. On or after a held successor version's operative date, as_of_version carries that version's text."
  2. Changed1 schema field changed
    • addedInput schema / properties / as_of
      Added value: +{
      +  "description": "Optional operative date, YYYY-MM-DD (offense, contract, accrual or filing date). When the section was amended or enacted after it, the answer leads with temporal_warning (severity amended_after | enacted_after | text_older_than_as_of | unknown_history), the history note and, when this corpus kept it, the prior text (prior_text_available); otherwise as_of_check says no later change is recorded.",
      +  "type": "string"
      +}
  3. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Goes far beyond the readOnly/idempotent annotations: it enumerates verdict semantics (exists_unindexed, not_indexed, interior_mismatch, name_mismatch), warns that coverage can be under 30% for 2019+ regional reporters so misses are weak evidence, discloses a live CourtListener re-check, and notes that fabricated_citers never count as evidence. This is exactly the kind of behavioral disclosure annotations cannot carry.

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?

Purpose is front-loaded, but the body is an extremely long, densely parenthesized block with internal MCP ID tags and all-caps section headers. It is organized but not economical; several sentences could be tightened without losing signal.

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?

For a high-complexity verification tool with no output schema, the description covers case cites, statute/rule cites, temporal/operative-date behavior, proposition-level treatment, paragraph pinpoints, and fabricated-citer handling — an agent has enough to call it correctly and interpret results.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description adds genuine interpretive value: it explains when to pass proposition vs. quote, that as_of establishes the operative date for crimes/contracts/limitations, and that expected_case_name drives mismatch detection and name-based resolution. Only the 'state' parameter's role is left largely to the schema.

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

Purpose5/5

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

States a specific verb+resource ('Verify a legal citation actually exists') and immediately scopes what it returns for cases (real case, treatment flag, name match). An agent can distinguish this from siblings like find_case, get_case, or verify_quote because the tool's role as a pre-citation-check is explicit.

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

Usage Guidelines4/5

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

Gives a clear directive — 'ALWAYS use this to verify any citation that will appear in a legal document' — and separates case-cite handling from statute/regulation/rule handling. It stops short of naming which sibling to use instead for retrieval vs. verification, so it is strong context without explicit alternatives.

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