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 whether the name matches: expected_case_name, or else a case name written in the citation itself ("Roe v. Wade, 410 U.S. 113"). 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). A case match with a non-green flag carries treatment.flag_reason and flag_basis. A FORMER U.S. Code appendix cite ("50 U.S.C. App. § 462", "46 U.S.C. App. § 688") comes back with status former_appendix (verified stays false): the appendix no longer exists, the cite is not fabricated, and former_appendix names the current section(s) from the Law Revision Counsel's disposition tables. A 5 U.S.C. App. 2 / 3 / 4 section (FACA, Inspector General Act, Ethics Act; moved into Title 5 in 2022) also carries former_appendix with its current section. With proposition= and a pinpoint in the citation, cited_for says what courts cite that page for and, when another page of the case fits the proposition clearly better, suggested_pin_cite (a suggestion to read, not a verdict). With quote= and a pinpoint page, pinpoint_check compares the pin with the page the quotation is on in the cited reporter: quote_on_other_page gives quote_page and a cite_as with that page. With proposition= (or an explanatory parenthetical), cited_for_check says when courts cite the case for the opposite, for a different amendment / statute / standard, or for nothing like it. SHORT FORMS (MCP101): for id., ibid., supra or "303 U.S. at 288", pass sentence (the draft sentence that contains the cite) and quotation (words quoted with it): id. is bound to the citation before it in that sentence, never to a case named earlier in the conversation; a name written right before a bare short form is checked like expected_case_name; court and year break a tie among candidates. A reporter cite that resolves is never overridden; the hints block says what was used.

Input Schema

NameRequiredDescriptionDefault
yearNoOptional: the decision year as written. Breaks a tie between candidate cases; never overrides a cite that resolves
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.
courtNoOptional: the court as written ("5th Cir.", "ca5", "Fla. 2d DCA"). Breaks a tie between candidate cases; never overrides a cite that resolves
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"
sentenceNoOptional: the sentence of the draft that contains this cite, as written (for id., ibid. or supra include the sentence before it). Binds id., ibid., supra and short forms ("Jones, 590 F.2d at 174") to the citation before them in it, and reads the case name written right before a bare short form
quotationNoOptional: the words quoted with this cite. Breaks a tie between candidate cases (the one whose opinion holds the words), and is checked like quote when quote is absent
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. Changed4 schema fields changed
    • addedInput schema / properties / court
      Added value: +{
      +  "description": "Optional: the court as written (\"5th Cir.\", \"ca5\", \"Fla. 2d DCA\"). Breaks a tie between candidate cases; never overrides a cite that resolves",
      +  "type": "string"
      +}
    • addedInput schema / properties / quotation
      Added value: +{
      +  "description": "Optional: the words quoted with this cite. Breaks a tie between candidate cases (the one whose opinion holds the words), and is checked like quote when quote is absent",
      +  "type": "string"
      +}
    • addedInput schema / properties / sentence
      Added value: +{
      +  "description": "Optional: the sentence of the draft that contains this cite, as written (for id., ibid. or supra include the sentence before it). Binds id., ibid., supra and short forms (\"Jones, 590 F.2d at 174\") to the citation before them in it, and reads the case name written right before a bare short form",
      +  "type": "string"
      +}
    • addedInput schema / properties / year
      Added value: +{
      +  "description": "Optional: the decision year as written. Breaks a tie between candidate cases; never overrides a cite that resolves",
      +  "type": "integer"
      +}
  2. 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."
  3. 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"
      +}
  4. First observed

TDQS

A4.5/5.0
Behavior5/5

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

The description adds extensive behavioral context beyond the annotations: verdict semantics, live re-checks against CourtListener, fabricated_citers handling, status warnings for repealed or omitted statutes, and treatment flags. This is far more than the readOnlyHint and idempotentHint annotations provide.

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?

The description is front-loaded with the core purpose and uses all-caps section labels for structure. However, it is extremely long and dense, with numerous parenthetical edge cases, which makes it harder to scan than it needs to be.

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, the 10-parameter schema, and the absence of an output schema, the description is highly complete. It explains not only what the tool does but also how to interpret the nuanced verdicts and status blocks an agent will receive.

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 meaningfully adds interpretation for parameters such as expected_case_name, proposition, as_of, quote, sentence, and quotation. It explains how those inputs change the returned analysis rather than merely restating schema text.

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?

The description opens with a specific verb and resource: 'Verify a legal citation actually exists before using it.' It clearly scopes the tool across cases, statutes, regulations, court rules, short forms, and public-domain cites, which distinguishes it from a generic case lookup.

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?

It gives strong usage direction, including 'ALWAYS use this to verify any citation that will appear in a legal document' and detailed guidance on interpreting verdicts. However, it does not explicitly route the agent to sibling tools such as verify_quote or get_case when those would be more appropriate.

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