protogrid

Search / com.syfert/legal-research

Syfert Legal Research

R1· needs a key

Verify legal citations, case treatment, quotes and whole briefs against 10.7M U.S. opinions

v1.6.0 · active · website · descriptor JSON · versions

An agent can connect on its own if it already holds LEGAL_RESEARCH_TOKEN.Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.
Quality78good
Trust82of 100
Uptime, 30 days96%
Latency p50329 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "legal-research": {
      "type": "http",
      "url": "https://mcp.syfert.com/mcp",
      "headers": {
        "Authorization": "Bearer ${LEGAL_RESEARCH_TOKEN}"
      }
    }
  }
}
claude mcp add --transport http legal-research https://mcp.syfert.com/mcp --header "Authorization: Bearer ${LEGAL_RESEARCH_TOKEN}"
[mcp_servers.legal-research]
url = "https://mcp.syfert.com/mcp"
bearer_token_env_var = "LEGAL_RESEARCH_TOKEN"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "legal-research": {
      "type": "remote",
      "url": "https://mcp.syfert.com/mcp",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer {env:LEGAL_RESEARCH_TOKEN}"
      }
    }
  }
}
{
  "mcpServers": {
    "legal-research": {
      "type": "http",
      "url": "https://mcp.syfert.com/mcp",
      "headers": {
        "Authorization": "Bearer ${LEGAL_RESEARCH_TOKEN}"
      }
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=legal-research&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbWNwLnN5ZmVydC5jb20vbWNwIiwiaGVhZGVycyI6eyJBdXRob3JpemF0aW9uIjoiQmVhcmVyICR7TEVHQUxfUkVTRUFSQ0hfVE9LRU59In19"
}
{
  "servers": {
    "legal-research": {
      "type": "http",
      "url": "https://mcp.syfert.com/mcp",
      "headers": {
        "Authorization": "Bearer ${LEGAL_RESEARCH_TOKEN}"
      }
    }
  }
}
{
  "mcpServers": {
    "legal-research": {
      "httpUrl": "https://mcp.syfert.com/mcp",
      "headers": {
        "Authorization": "Bearer ${LEGAL_RESEARCH_TOKEN}"
      }
    }
  }
}
extensions:
  "legal-research":
    enabled: true
    name: "legal-research"
    type: streamable_http
    uri: "https://mcp.syfert.com/mcp"
    headers:
      "Authorization": "Bearer ${LEGAL_RESEARCH_TOKEN}"
    timeout: 300

Placeholders to fill from your own secret store: ${LEGAL_RESEARCH_TOKEN}. The registry never accepts secret values.

Quality 78 / 100good

protocol100 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • pass
    protocol.list_ttltool list is cacheable (ttlMs 3600000)
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene86 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length11 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations19 of 19 tools declare readOnlyHint or destructiveHint
  • pass
    tools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
  • warn
    tools.token_costabout 12,831 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability25 · weight 15
  • warn
    stability.changes41 tool changes in 30 days
  • fail
    stability.rug_pull2 tools kept their name but changed most of their description in 30 days; review before trusting them
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

19 tools, about 12,831 tokens to load them all · tool set 48d69fde34f7 · tools last changed 2026-10-20 · checked 2026-10-20 22:23 UTC

Tool changes

  • context_detectoradded

    Does the cited case actually say what the brief says it says? Call it after check_brief for every cite you rely on whose support_check says available, or for any sentence you want to test against the case it cites. Give the citation (reporter cite with its first page, or cluster_id), the sentence as written, and the pin page: it returns the case (bluebook, cluster_id, url), pinned_window = about 2,500 characters of the opinion around the pinned page's best word match, best_window = the same around the opinion's best match when that is another page, lexical overlap scores, and an instruction for judging the pair (supported / overstated / unsupported / cannot_tell). The windows are placed by word overlap; the judgement is yours. Case opinions only (statutes and rules are out of scope). Up to 12 cites in one call with items.

  • check_briefchangeddescription
    before

    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. Case rows with a non-green flag carry treatment.flag_reason. A former U.S. Code appendix cite is listed with status former_appendix and the current section. Each pinpoint cite also carries cited_for: what citing courts cite that page for (G-Cite page label, n_citing). When the brief's sentence fits that page poorly and another page of the same case clearly, verdict proposition_mismatch names suggested_pin_cite: a suggestion to read that page, never a correction to apply unread; the citation itself st

    after · 97% of words in common

    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. Case rows with a non-green flag carry treatment.flag_reason. A former U.S. Code appendix cite is listed with status former_appendix and the current section. Each pinpoint cite also carries cited_for: what citing courts cite that page for (G-Cite page label, n_citing). When the brief's sentence fits that page poorly and another page of the same case clearly, verdict proposition_mismatch names suggested_pin_cite: a suggestion to read that page, never a correction to apply unread; the citation itself st

  • check_briefchangeddescription
    before

    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. Case rows with a non-green flag carry treatment.flag_reason. A former U.S. Code appendix cite is listed with status former_appendix and the current section. Each pinpoint cite also carries cited_for: what citing courts cite that page for (G-Cite page label, n_citing). When the brief's sentence fits that page poorly and another page of the same case clearly, verdict proposition_mismatch names suggested_pin_cite: a suggestion to read that page, never a correction to apply unread; the citation itself st

    after · 95% of words in common

    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. Case rows with a non-green flag carry treatment.flag_reason. A former U.S. Code appendix cite is listed with status former_appendix and the current section. Each pinpoint cite also carries cited_for: what citing courts cite that page for (G-Cite page label, n_citing). When the brief's sentence fits that page poorly and another page of the same case clearly, verdict proposition_mismatch names suggested_pin_cite: a suggestion to read that page, never a correction to apply unread; the citation itself st

  • check_citationchangeddescription
    before

    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 evi

    after · 99% of words in common

    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 evi

  • find_issueschangedinput schema
  • find_authoritychangeddescription
    before

    Find the case to cite for a proposition. Paste the proposition or the language you need authority for VERBATIM; do not convert it to keywords. The result names the source case to cite (source_case), the verbatim passage, and how many courts have adopted it (quoted_by_cases); match_kind says how it matched: exact_phrase (the passage contains your words), relaxed (it shares your distinctive words), proposition (a rule later courts cite that case for). A miss means no court has quoted or been cited for that wording; try find_issues for the doctrine, or search_cases with 3-4 distinctive words. Routing: a proposition or quoted language -> find_authority (pasted verbatim); a doctrine name or fact pattern -> find_issues; a party name, statute number or keywords -> search_cases. Quotation marks mean pasted from a tool result (opinion text, passage, best_match). If you typed a quote from memory, run verify_quote and use best_match. Run check_brief on the finished draft and apply its corrections. Copy cite_as for the citation (first page, then pin). The first 3 rows carry star_page and cite_as. A quotation inside the proposition (in quotation marks) is also searched on its own: passages that contain it word for word come first, match_kind quotation (matched_quotation names it). It also finds, by meaning, the PAGES later courts cite for a paraphrased proposition (match_kind cited_for_label: pin page, cite_as with the pin, a generated label of what the page is cited for, how many courts cite it, and the treatment of those citations), and returns string_cite: those pages one per case in Bluebook order with "(cited for …)" parentheticals to rewrite from the opinion. Up to 3 semantic_case rows at the end are whole opinions closest in meaning to the proposition: leads to read, not quotations. Every row carries match_sentence (the passage sentence or label that matched) and closeness: verbatim | close | related, measured on wording (related = it may paraphrase the rule or only share its topic: read it before citing); rows only loosely related are left out. no_close_authority: true means no row matches the proposition closely in wording: read the related rows' match_sentence before citing one, or use search_cases with distinctive words, find_issues, or a rephrased proposition.

    after · 98% of words in common

    Find the case to cite for a proposition. Paste the proposition or the language you need authority for VERBATIM; do not convert it to keywords. The result names the source case to cite (source_case), the verbatim passage, and how many courts have adopted it (quoted_by_cases); match_kind says how it matched: exact_phrase (the passage contains your words), relaxed (it shares your distinctive words), proposition (a rule later courts cite that case for). A miss means no court has quoted or been cited for that wording; try find_issues for the doctrine, or search_cases with 3-4 distinctive words. Routing: a proposition or quoted language -> find_authority (pasted verbatim); a doctrine name or fact pattern -> find_issues; a party name, statute number or keywords -> search_cases. Quotation marks mean pasted from a tool result (opinion text, passage, best_match). If you typed a quote from memory, run verify_quote and use best_match. Run check_brief on the finished draft and apply its corrections. Copy cite_as for the citation (first page, then pin). The first 3 rows carry star_page and cite_as. A quotation inside the proposition (in quotation marks) is also searched on its own: passages that contain it word for word come first, match_kind quotation (matched_quotation names it). It also finds, by meaning, the PAGES later courts cite for a paraphrased proposition (match_kind cited_for_label: pin page, cite_as with the pin, a generated label of what the page is cited for, how many courts cite it, and the treatment of those citations), and returns string_cite: those pages one per case in Bluebook order with "(cited for …)" parentheticals to rewrite from the opinion. Up to 3 semantic_case rows at the end are whole opinions closest in meaning to the proposition: leads to read, not quotations. Every row carries match_sentence (the passage sentence or label that matched) and closeness: verbatim | close | related, measured on wording and meaning (related = it shares the subject and may paraphrase the rule or only touch it: read it before citing); rows only loosely related are left out. no_close_authority: true means no row matches the proposition closely in wording: read the related rows' match_sentence before citing one, or use search_cases with distinctive words, find_issues, or a rephrased proposition.

  • find_casechangeddescription
    before

    Fast direct lookup: give a citation or a case caption and get THE case (or 'not decisive' with up to 5 candidates) without a full-text search. Use search_cases for topics and words. A citation ("384 U.S. 436", "Miranda v. Arizona, 384 U.S. 436, 444 (1966)", "449 F. App'x 901", "2019-Ohio-10") resolves through the reporter index; when a case name is given (in the query or as expected_case_name) and the case at that citation carries a different name, the answer is NOT decisive (problem name_mismatch) and names the case that is really there. A caption ("Miranda v. Arizona", or one distinctive name such as "Celotex") is decisive when the top match is at least twice as strong as the runner-up, or when the case name IS the caption word for word (punctuation, company suffixes and abbreviations read) for one decision in the corpus (several filings of one decision count once: the answer is the Published, reported record, the others listed in also_filed_as) -- an exact caption outranks any opinion-text match; common captions ("Smith v. Jones", "State v. Johnson") are not decisive by design. A docket number ("2D09-5223", "No. 1:15-cv-00001" with court, "17-1618") resolves through the docket index: decisive when one case carries it, otherwise problem ambiguous_docket with the candidates (a Supreme Court number also matches its cert-stage entries). The answer carries case (bluebook, url, link_md, treatment_flag), kind (citation|caption|docket), decisive, candidates, and a note when not decisive. A red, yellow or procedural case also carries treatment_flag_reason and treatment_flag_basis. A Westlaw / Lexis number whose sources disagree about the case carries database_caution. For a caption that is not decisive, the candidates whose caption carries both parties (abbreviations and acronyms read) are listed first, marked matched_by caption, with caption_matches = how many decisions carry it.

    after · 88% of words in common

    Fast direct lookup: give a citation or a case caption and get THE case (or 'not decisive' with up to 5 candidates) without a full-text search. Use search_cases for topics and words. A citation ("384 U.S. 436", "Miranda v. Arizona, 384 U.S. 436, 444 (1966)", "449 F. App'x 901", "2019-Ohio-10") resolves through the reporter index; when a case name is given (in the query or as expected_case_name) and the case at that citation carries a different name, the answer is NOT decisive (problem name_mismatch) and names the case that is really there. A caption ("Miranda v. Arizona", or one distinctive name such as "Celotex") is decisive when the top match is at least twice as strong as the runner-up, or when the case name IS the caption word for word (punctuation, company suffixes and abbreviations read) for one decision in the corpus (several filings of one decision count once: the answer is the Published, reported record, the others listed in also_filed_as) -- an exact caption outranks any opinion-text match; common captions ("Smith v. Jones", "State v. Johnson") are not decisive by design. A docket number ("2D09-5223", "No. 1:15-cv-00001" with court, "17-1618") resolves through the docket index: decisive when one case carries it, otherwise problem ambiguous_docket with the candidates (a Supreme Court number also matches its cert-stage entries). The answer carries case (bluebook, url, link_md, treatment_flag), kind (citation|caption|docket), decisive, candidates, and a note when not decisive. A red, yellow or procedural case also carries treatment_flag_reason and treatment_flag_basis. A Westlaw / Lexis number whose sources disagree about the case carries database_caution. For a caption that is not decisive, the candidates whose caption carries both parties (abbreviations and acronyms read) are listed first, marked matched_by caption, with caption_matches = how many decisions carry it. A misspelt or partial caption that nothing matches ("Palsgraph v. Long Island R.R.", "City of Keller") gets suggestions appended to candidates, marked matched_by caption_fuzzy (a close spelling of the party names, or a caption that begins with the one party given), with did_you_mean; they never make the answer decisive.

  • find_issueschangeddescription, input schema
    before

    ENTRY BY ISSUE. Use this FIRST when the question arrives as facts or an issue rather than a case name ("can the appellate court affirm on a ground the trial court never reached", "impact rule emotional distress", "Fabre defendant"). Returns (1) the doctrine as courts in that STATE actually name it, with the cases on EACH side (followed_by / questioned_by, from how each citing opinion treated the case), example sentences judges wrote, the statutes those opinions construe, and every state where the phrase is alive with its year span (a doctrine retained in one state and abandoned elsewhere shows as a stalled span); and (2) the matching mined propositions (the rule text courts quote) with per-passage flags. Doctrine name is not case health: an issue can be alive while its anchor case is red. Read questioned_by before relying on followed_by. A q of more than 8 substantive words is read as a proposition: propositions (matched against all of it) come first. The default answer holds 3 issues and 5 statutes and stays under ~12,000 characters (issues_omitted counts the rest); max_issues or detail=true returns more. Routing: a proposition or quoted language -> find_authority (pasted verbatim); a doctrine name or fact pattern -> find_issues; a party name, statute number or keywords -> search_cases.

    after · 81% of words in common

    ENTRY BY ISSUE. Use this FIRST when the question arrives as facts or an issue rather than a case name ("can the appellate court affirm on a ground the trial court never reached", "impact rule emotional distress", "Fabre defendant"). Returns (1) the doctrine as courts in that STATE actually name it, with the cases on EACH side (followed_by / questioned_by, from how each citing opinion treated the case), example sentences judges wrote, the statutes those opinions construe, and every state where the phrase is alive with its year span (a doctrine retained in one state and abandoned elsewhere shows as a stalled span); and (2) the matching mined propositions (the rule text courts quote) with per-passage flags. Doctrine name is not case health: an issue can be alive while its anchor case is red. Read questioned_by before relying on followed_by. A q of more than 8 substantive words is read as a proposition: propositions (matched against all of it) come first. The default answer holds 3 issues and 5 statutes and stays under ~12,000 characters (issues_omitted counts the rest); max_issues or detail=true returns more. Routing: a proposition or quoted language -> find_authority (pasted verbatim); a doctrine name or fact pattern -> find_issues; a party name, statute number or keywords -> search_cases. Each issue also carries tree: where the doctrine sits in the Syfert issue tree (area > group > issue, built from what later courts cite pages for), how alive it is in the state, and related issues beside it. Browse the tree with node instead of q: find_issues(state="fl", node=0) lists the top areas cited by that state's courts; follow each child's next call down to an issue, which lists the pages courts cite for it.

  • find_authoritychangeddescription
    before

    Find the case to cite for a proposition. Paste the proposition or the language you need authority for VERBATIM; do not convert it to keywords. The result names the source case to cite (source_case), the verbatim passage, and how many courts have adopted it (quoted_by_cases); match_kind says how it matched: exact_phrase (the passage contains your words), relaxed (it shares your distinctive words), proposition (a rule later courts cite that case for). A miss means no court has quoted or been cited for that wording; try find_issues for the doctrine, or search_cases with 3-4 distinctive words. Routing: a proposition or quoted language -> find_authority (pasted verbatim); a doctrine name or fact pattern -> find_issues; a party name, statute number or keywords -> search_cases. Quotation marks mean pasted from a tool result (opinion text, passage, best_match). If you typed a quote from memory, run verify_quote and use best_match. Run check_brief on the finished draft and apply its corrections. Copy cite_as for the citation (first page, then pin). The first 3 rows carry star_page and cite_as. A quotation inside the proposition (in quotation marks) is also searched on its own: passages that contain it word for word come first, match_kind quotation (matched_quotation names it). It also finds, by meaning, the PAGES later courts cite for a paraphrased proposition (match_kind cited_for_label: pin page, cite_as with the pin, a generated label of what the page is cited for, how many courts cite it, and the treatment of those citations), and returns string_cite: those pages one per case in Bluebook order with "(cited for …)" parentheticals to rewrite from the opinion.

    after · 80% of words in common

    Find the case to cite for a proposition. Paste the proposition or the language you need authority for VERBATIM; do not convert it to keywords. The result names the source case to cite (source_case), the verbatim passage, and how many courts have adopted it (quoted_by_cases); match_kind says how it matched: exact_phrase (the passage contains your words), relaxed (it shares your distinctive words), proposition (a rule later courts cite that case for). A miss means no court has quoted or been cited for that wording; try find_issues for the doctrine, or search_cases with 3-4 distinctive words. Routing: a proposition or quoted language -> find_authority (pasted verbatim); a doctrine name or fact pattern -> find_issues; a party name, statute number or keywords -> search_cases. Quotation marks mean pasted from a tool result (opinion text, passage, best_match). If you typed a quote from memory, run verify_quote and use best_match. Run check_brief on the finished draft and apply its corrections. Copy cite_as for the citation (first page, then pin). The first 3 rows carry star_page and cite_as. A quotation inside the proposition (in quotation marks) is also searched on its own: passages that contain it word for word come first, match_kind quotation (matched_quotation names it). It also finds, by meaning, the PAGES later courts cite for a paraphrased proposition (match_kind cited_for_label: pin page, cite_as with the pin, a generated label of what the page is cited for, how many courts cite it, and the treatment of those citations), and returns string_cite: those pages one per case in Bluebook order with "(cited for …)" parentheticals to rewrite from the opinion. Up to 3 semantic_case rows at the end are whole opinions closest in meaning to the proposition: leads to read, not quotations. Every row carries match_sentence (the passage sentence or label that matched) and closeness: verbatim | close | related, measured on wording (related = it may paraphrase the rule or only share its topic: read it before citing); rows only loosely related are left out. no_close_authority: true means no row matches the proposition closely in wording: read the related rows' match_sentence before citing one, or use search_cases with distinctive words, find_issues, or a rephrased proposition.

  • find_casechangeddescription
    before

    Fast direct lookup: give a citation or a case caption and get THE case (or 'not decisive' with up to 5 candidates) without a full-text search. Use search_cases for topics and words. A citation ("384 U.S. 436", "Miranda v. Arizona, 384 U.S. 436, 444 (1966)", "449 F. App'x 901", "2019-Ohio-10") resolves through the reporter index; when a case name is given (in the query or as expected_case_name) and the case at that citation carries a different name, the answer is NOT decisive (problem name_mismatch) and names the case that is really there. A caption ("Miranda v. Arizona", or one distinctive name such as "Celotex") is decisive only when the top match is at least twice as strong as the runner-up; common captions ("Smith v. Jones", "State v. Johnson") are not decisive by design. A docket number ("2D09-5223", "No. 1:15-cv-00001" with court, "17-1618") resolves through the docket index: decisive when one case carries it, otherwise problem ambiguous_docket with the candidates (a Supreme Court number also matches its cert-stage entries). The answer carries case (bluebook, url, link_md, treatment_flag), kind (citation|caption|docket), decisive, candidates, and a note when not decisive. A red, yellow or procedural case also carries treatment_flag_reason and treatment_flag_basis. A Westlaw / Lexis number whose sources disagree about the case carries database_caution. For a caption that is not decisive, the candidates whose caption carries both parties (abbreviations and acronyms read) are listed first, marked matched_by caption, with caption_matches = how many decisions carry it.

    after · 87% of words in common

    Fast direct lookup: give a citation or a case caption and get THE case (or 'not decisive' with up to 5 candidates) without a full-text search. Use search_cases for topics and words. A citation ("384 U.S. 436", "Miranda v. Arizona, 384 U.S. 436, 444 (1966)", "449 F. App'x 901", "2019-Ohio-10") resolves through the reporter index; when a case name is given (in the query or as expected_case_name) and the case at that citation carries a different name, the answer is NOT decisive (problem name_mismatch) and names the case that is really there. A caption ("Miranda v. Arizona", or one distinctive name such as "Celotex") is decisive when the top match is at least twice as strong as the runner-up, or when the case name IS the caption word for word (punctuation, company suffixes and abbreviations read) for one decision in the corpus (several filings of one decision count once: the answer is the Published, reported record, the others listed in also_filed_as) -- an exact caption outranks any opinion-text match; common captions ("Smith v. Jones", "State v. Johnson") are not decisive by design. A docket number ("2D09-5223", "No. 1:15-cv-00001" with court, "17-1618") resolves through the docket index: decisive when one case carries it, otherwise problem ambiguous_docket with the candidates (a Supreme Court number also matches its cert-stage entries). The answer carries case (bluebook, url, link_md, treatment_flag), kind (citation|caption|docket), decisive, candidates, and a note when not decisive. A red, yellow or procedural case also carries treatment_flag_reason and treatment_flag_basis. A Westlaw / Lexis number whose sources disagree about the case carries database_caution. For a caption that is not decisive, the candidates whose caption carries both parties (abbreviations and acronyms read) are listed first, marked matched_by caption, with caption_matches = how many decisions carry it.

Showing the latest 10. Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 82 / 100

no-repository
provenance55
liveness98
freshness100
hygiene80

+dns-namespace +website +reachable +uptime-96% +updated-9d-ago -no-repository

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://mcp.syfert.com/mcp streamable-httpapi_key ${LEGAL_RESEARCH_TOKEN}yes96%329 ms2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-052026-10-20

Tools (19)

check_briefread-onlyAudit 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. Case rows with a non-green flag carry treatment.flag_reason. A former U.S. Code appendix cite is listed with status former_appendix and the current section. Each pinpoint cite also carries cited_for: what citing courts cite that page for (G-Cite page label, n_citing). When the brief's sentence fits that page poorly and another page of the same case clearly, verdict proposition_mismatch names suggested_pin_cite: a suggestion to read that page, never a correction to apply unread; the citation itself stays verified. Each case cite with a proposition also carries cited_for_check when the brief's point differs in structure from what citing courts cite the case for: proposition_contradicted (courts cite it for the opposite), proposition_entity_mismatch (a different amendment, statute section, burden or standard), proposition_uncited (nothing like it); confidence hard = a correction, advice = a note. A cite whose support_check says available can be laid out next to its sentence with context_detector.
check_citationread-onlyVerify 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.
context_detectorread-onlyDoes the cited case actually say what the brief says it says? Call it after check_brief for every cite you rely on whose support_check says available, or for any sentence you want to test against the case it cites. Give the citation (reporter cite with its first page, or cluster_id), the sentence as written, and the pin page: it returns the case (bluebook, cluster_id, url), pinned_window = about 2,500 characters of the opinion around the pinned page's best word match, best_window = the same around the opinion's best match when that is another page, lexical overlap scores, and an instruction for judging the pair (supported / overstated / unsupported / cannot_tell). The windows are placed by word overlap; the judgement is yours. Case opinions only (statutes and rules are out of scope). Up to 12 cites in one call with items.
export_documentread-onlyOptional. If your client can save files locally and you want a readable copy of a case or statute, this returns the complete document to save; otherwise use get_case / get_statute as before. The document is the syfert.com page as the website renders it (caption, headings, footnotes, star-page markers such as [*551], links to the cited cases): Markdown with YAML front matter (default) or one self-contained HTML file. Returns filename, format, bytes, document and note; the MCP cannot write to disk, so saving document under filename is up to you. A case: cluster_id, or citation (+ case_name). A statute or rule: jurisdiction + citation, as get_statute takes them. A document longer than one response comes in parts (truncated, next_offset): call again with offset and append the parts in order.
find_authorityread-onlyFind the case to cite for a proposition. Paste the proposition or the language you need authority for VERBATIM; do not convert it to keywords. The result names the source case to cite (source_case), the verbatim passage, and how many courts have adopted it (quoted_by_cases); match_kind says how it matched: exact_phrase (the passage contains your words), relaxed (it shares your distinctive words), proposition (a rule later courts cite that case for). A miss means no court has quoted or been cited for that wording; try find_issues for the doctrine, or search_cases with 3-4 distinctive words. Routing: a proposition or quoted language -> find_authority (pasted verbatim); a doctrine name or fact pattern -> find_issues; a party name, statute number or keywords -> search_cases. Quotation marks mean pasted from a tool result (opinion text, passage, best_match). If you typed a quote from memory, run verify_quote and use best_match. Run check_brief on the finished draft and apply its corrections. Copy cite_as for the citation (first page, then pin). The first 3 rows carry star_page and cite_as. A quotation inside the proposition (in quotation marks) is also searched on its own: passages that contain it word for word come first, match_kind quotation (matched_quotation names it). It also finds, by meaning, the PAGES later courts cite for a paraphrased proposition (match_kind cited_for_label: pin page, cite_as with the pin, a generated label of what the page is cited for, how many courts cite it, and the treatment of those citations), and returns string_cite: those pages one per case in Bluebook order with "(cited for …)" parentheticals to rewrite from the opinion. Up to 3 semantic_case rows at the end are whole opinions closest in meaning to the proposition: leads to read, not quotations. Every row carries match_sentence (the passage sentence or label that matched) and closeness: verbatim | close | related, measured on wording and meaning (related = it shares the subject and may paraphrase the rule or only touch it: read it before citing); rows only loosely related are left out. no_close_authority: true means no row matches the proposition closely in wording: read the related rows' match_sentence before citing one, or use search_cases with distinctive words, find_issues, or a rephrased proposition.
find_caseread-onlyFast direct lookup: give a citation or a case caption and get THE case (or 'not decisive' with up to 5 candidates) without a full-text search. Use search_cases for topics and words. A citation ("384 U.S. 436", "Miranda v. Arizona, 384 U.S. 436, 444 (1966)", "449 F. App'x 901", "2019-Ohio-10") resolves through the reporter index; when a case name is given (in the query or as expected_case_name) and the case at that citation carries a different name, the answer is NOT decisive (problem name_mismatch) and names the case that is really there. A caption ("Miranda v. Arizona", or one distinctive name such as "Celotex") is decisive when the top match is at least twice as strong as the runner-up, or when the case name IS the caption word for word (punctuation, company suffixes and abbreviations read) for one decision in the corpus (several filings of one decision count once: the answer is the Published, reported record, the others listed in also_filed_as) -- an exact caption outranks any opinion-text match; common captions ("Smith v. Jones", "State v. Johnson") are not decisive by design. A docket number ("2D09-5223", "No. 1:15-cv-00001" with court, "17-1618") resolves through the docket index: decisive when one case carries it, otherwise problem ambiguous_docket with the candidates (a Supreme Court number also matches its cert-stage entries). The answer carries case (bluebook, url, link_md, treatment_flag), kind (citation|caption|docket), decisive, candidates, and a note when not decisive. A red, yellow or procedural case also carries treatment_flag_reason and treatment_flag_basis. A Westlaw / Lexis number whose sources disagree about the case carries database_caution. For a caption that is not decisive, the candidates whose caption carries both parties (abbreviations and acronyms read) are listed first, marked matched_by caption, with caption_matches = how many decisions carry it. A misspelt or partial caption that nothing matches ("Palsgraph v. Long Island R.R.", "City of Keller") gets suggestions appended to candidates, marked matched_by caption_fuzzy (a close spelling of the party names, or a caption that begins with the one party given), with did_you_mean; they never make the answer decisive.
find_courtread-onlyResolve a court name to court_id values usable in the search_cases court filter. Also resolves whole GROUPS of courts (tribal courts, veterans, bankruptcy, all U.S. district courts) to the single aggregate token that filters on all of them: see court_groups in the result.
find_issuesread-onlyENTRY BY ISSUE. Use this FIRST when the question arrives as facts or an issue rather than a case name ("can the appellate court affirm on a ground the trial court never reached", "impact rule emotional distress", "Fabre defendant"). Returns (1) the doctrine as courts in that STATE actually name it, with the cases on EACH side (followed_by / questioned_by, from how each citing opinion treated the case), example sentences judges wrote, the statutes those opinions construe, and every state where the phrase is alive with its year span (a doctrine retained in one state and abandoned elsewhere shows as a stalled span); and (2) the matching mined propositions (the rule text courts quote) with per-passage flags. Doctrine name is not case health: an issue can be alive while its anchor case is red. Read questioned_by before relying on followed_by. A q of more than 8 substantive words is read as a proposition: propositions (matched against all of it) come first. The default answer holds 3 issues and 5 statutes and stays under ~12,000 characters (issues_omitted counts the rest); max_issues or detail=true returns more. Routing: a proposition or quoted language -> find_authority (pasted verbatim); a doctrine name or fact pattern -> find_issues; a party name, statute number or keywords -> search_cases. Each issue also carries tree: where the doctrine sits in the Syfert issue tree (area > group > issue, built from what later courts cite pages for), how alive it is in the state, and related issues beside it. Browse the tree with node instead of q: find_issues(state="fl", node=0) lists the top areas cited by that state's courts; follow each child's next call down to an issue, which lists the pages courts cite for it.
find_related_casesread-onlyExpand research from one good case: returns the doctrinal family it belongs to: the line of frequently co-cited cases around an anchor authority (curated set of ~1,500 major doctrinal lines; landmark cases only). Use when you have one on-point case and need the rest of the line. A case in no family gets its own most co-cited cases instead (related_source "co_citation"; MCP22_20260927).
get_caseread-onlyFetch one case: metadata, parallel citations, treatment flag, and full opinion text (paginated via offset/max_chars). cited_by is CourtListener's citation count; for a decision filed as several twin clusters it is summed over them (cited_by_note says so), and a duplicate or stub twin id is answered with its survivor (note says so). Citations inside the returned text are checked against the reporter index (embedded_citations); citation_warnings names any the court itself got wrong. Identify the case by cluster_id (from search_cases results) or by reporter citation. find_text returns passages: up to 5 sentence-bounded windows holding a phrase (or its closest match) with star_page and offset, so a long opinion need not be paged (pass include_text=false to get only those); quotable=true adds quotable_passages, the passages of this opinion other courts quote. Quotation marks mean pasted from a tool result (opinion text, passage, best_match). If you typed a quote from memory, run verify_quote and use best_match. Run check_brief on the finished draft and apply its corrections. Copy cite_as for the citation (first page, then pin).
get_citing_casesread-onlyFull citator list: every ranked case citing this one, with judge-written parentheticals (usable verbatim in a brief), verbatim quotes, pin cites, and the citing court's own Bluebook signal. Filter by flag color. Best for FINDING SUPPORTING AUTHORITY and parentheticals; for comprehensive negative-treatment checking use get_treatment (this list covers only each case's top-ranked ~50 citers).
get_propositionsread-onlyWhat is this case actually cited FOR? Returns the distinct legal propositions courts cite the case for (headnote-grade), each with its OWN treatment flag and counts. A case can be good law on one proposition and overruled on another. Use before citing a case for a specific point, and to find the strongest proposition to cite it for. passage is the opinion's own wording of the proposition with its star_page; passage null means citing courts paraphrase it. Pass proposition (your use of the case) to get proposition_match, the one proposition it matches, and proposition_note (MCP14_20260925). Quotation marks mean pasted from a tool result (opinion text, passage, best_match). If you typed a quote from memory, run verify_quote and use best_match. Run check_brief on the finished draft and apply its corrections. Copy cite_as for the citation (first page, then pin).
get_statuteread-onlyFetch the full text of a statute, rule, or code section: the current codification in the edition this corpus holds. Every answer carries currency (edition, current_through, current_through_basis, last_verified, text_last_changed = when our copy last changed, last_amended_year, effective_date, history_note, status, successor, versions_available) and temporal_note. 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. With as_of, a section amended or enacted after that date returns temporal_warning FIRST, with the history note and, where this corpus kept it, the prior text (prior_text_available; most corpora keep none). A repealed or renumbered section returns status_warning with its successor. currency.status is current | sunset (operative until currency.sunset_date; successor names the version that takes over) | future (not yet operative; effective_date is when it starts) | expired | repealed | renumbered, and anything but current leads with status_warning. Where the later version is held (California sections with more than one version), as_of on or after its operative date returns that text in as_of_version. A U.S. Code section can also be omitted (dropped from the Code by the Office of the Law Revision Counsel and no longer printed; not a repeal): it leads with status_warning too, and the history note says why. A CFR section removed from the eCFR is status removed: status_warning REMOVED names the removal's effective date (currency.sunset_date) and the eCFR point-in-time link for the text in force before it. A former U.S. Code appendix section (usc, "50 U.S.C. App. § 462") returns status former_appendix with the current section(s) in former_appendix, not text.
get_treatmentread-onlyIs this case still good law? Returns the Syfertize treatment flag (red = overruled/superseded, yellow = questioned/distinguished, green = followed, procedural = cert/rehearing denied) plus the citing cases behind each signal with quoted context. A case can be green overall and red on the proposition you need it for (MCP14_20260925): propositions_summary lists the propositions courts cite it for (most-cited first), each with its OWN flag; pass proposition (your use of the case) and proposition_match returns the one that matches, with its negative_citers, and treatment.proposition_note states the result ("no proposition-level signal for this use" = only the case-level flag applies). A red, yellow or procedural flag also carries treatment.flag_reason (why it is flagged, in one line, as the case page shows it), treatment.flag_basis (overruled_by | subsequent_history | scope | citing_events | curation_pin | twin_carry | higher_court_limit | validated_annotations) and treatment.flag_evidence. compact=true returns only the flag, scope, overruled_by and the top negative citers (about 90% smaller).
search_casesread-onlyFull-text search over 10.7M U.S. court opinions (all states + federal, via syfert.com). Call this to find case law on a topic, locate a case by name, or find cases citing a statute. Routing: a proposition or quoted language -> find_authority (pasted verbatim); a doctrine name or fact pattern -> find_issues; a party name, statute number or keywords -> search_cases. Each hit carries bluebook and url (snippet up to 240 chars); a hit whose snippet quotes an earlier case carries passage_origin, the case to cite for that language. A q that is one citation or an "X v. Y" caption naming one case decisively also returns that case as direct_hit above the results (find_case does only that lookup). Query syntax: boolean AND/OR/NOT, "exact phrases", proximity (term1 w/5 term2), wildcards (neglig*), and field filters inside q (name:, judge:, syllabus:). Statute-style numbers like 83.49 are matched as citations to that statute. total may be null: a court or date filter makes the exact count too expensive to compute, and total_pages + total_note then carry the scale. partial: true means the time budget was hit; see partial_note. tier names the caller's plan; _source names the backend that served the search: xeric = the dedicated index, cloud = the cloud index behind a short queue. When no opinion holds every word of a long query, the answer may carry relaxed=true with relaxed_note and relaxed_terms_kept / relaxed_terms_dropped: its rows (closest_match) hold only the kept words. A q that is an "X v. Y" caption also lists, first on page 1, the decisions whose caption carries both parties (abbreviations and agency acronyms read: "Stone v. INS", "ANR Pipeline Co. v. FERC"), marked matched_by caption; the ranked rows follow unchanged. semantic: true ranks opinions by MEANING instead of words (a paraphrased fact pattern finds cases that share none of its words; rows carry similarity, no snippet; state, court, date and status=published filters apply); a text search with no hits is retried that way automatically (semantic_fallback: true).
search_quotesread-onlyFind every case that has quoted a phrase. Phrase-matched search over 4.3M distinct passages quoted by two or more opinions, ranked by how many cases quote them. Use it to (a) find the true source of half-remembered language BEFORE attributing it, and (b) locate the canonical wording of a rule. Returns the passage, its source case, and adoption counts. When no passage has the exact phrase it falls back to passages sharing its distinctive words (match_kind relaxed), and it adds the mined propositions later courts cite a case for (match_kind proposition). Same tool as find_authority. Routing: a proposition or quoted language -> find_authority (pasted verbatim); a doctrine name or fact pattern -> find_issues; a party name, statute number or keywords -> search_cases. Quotation marks mean pasted from a tool result (opinion text, passage, best_match). If you typed a quote from memory, run verify_quote and use best_match. Run check_brief on the finished draft and apply its corrections. Copy cite_as for the citation (first page, then pin). The first 3 rows carry star_page and cite_as.
search_statutesread-onlySearch statutes, COURT RULES and codes by citation or topic, for EVERY U.S. state plus federal. For a specific state, pass state="wi" (any two-letter code, all 50 states + DC) and a topic or section number; add kind="rule" for that state's court rules or kind="statute" for its code. Without state it searches only the kinds named in kinds (default: Florida). Handles citation lookups ("83.49", "174.02") and topic queries ("dog bite strict liability"). Each result carries currency (text_last_changed and, where recorded, last_amended_year / effective_date / status / successor) and corpus_currency gives each corpus's edition and current-through 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. (as_of is taken by get_statute and check_citation.)
suggest_treatmentCrowdsourced AI feedback on a Syfertize treatment flag. When the evidence in front of you (an overruling, abrogating or reinstating opinion, or a later court holding the case is still good law) shows a case's flag is wrong, propose red (no longer good law) or green (still good law) with the SHORTEST possible one-line reason, ideally naming the authority. Only red or green is accepted, not yellow. Identify the case by cluster_id, or by citation (+ case_name). The reason must concern the case's legal status only, never the user's facts, question, client or document. Returns the current flag and what was recorded; a proposal equal to the live flag is not recorded. By calling this you help syfert.com improve its treatment flags through AI feedback. Nothing about your session, user, query or documents is logged: only the case id, the flag you propose, your one-line reason, the authority you name and the date are stored, for human review. Your suggestion does not change the live flag.
verify_quoteread-onlyCheck one quotation against the full text of the opinion it is attributed to, before it goes in quotation marks. Returns verdict (verbatim | near | absent), percent, best_match (the opinion's own sentence, up to ~600 characters), star_page (the last *page marker before it, null when the text carries none), offset (get_case offset), case and advice. near means the opinion says it in other words: paste best_match instead. absent means the words are not in this opinion. Identify the case by cluster_id or reporter citation (case_name helps a citation newer than the reporter index). Quotation marks mean pasted from a tool result (opinion text, passage, best_match). If you typed a quote from memory, run verify_quote and use best_match. Run check_brief on the finished draft and apply its corrections. Copy cite_as for the citation (first page, then pin).

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "com.syfert/legal-research",
  "icons": [
    {
      "src": "https://syfert.com/mcp/icon.png",
      "sizes": [
        "512x512"
      ],
      "mimeType": "image/png"
    },
    {
      "src": "https://syfert.com/mcp/icon.svg",
      "sizes": [
        "any"
      ],
      "mimeType": "image/svg+xml"
    }
  ],
  "title": "Syfert Legal Research",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://mcp.syfert.com/mcp",
      "type": "streamable-http",
      "headers": [
        {
          "name": "Authorization",
          "isSecret": true,
          "isRequired": true,
          "description": "Bearer <token> - free tokens at https://syfert.com/mcp/"
        }
      ]
    }
  ],
  "version": "1.6.0",
  "websiteUrl": "https://syfert.com/mcp/",
  "description": "Verify legal citations, case treatment, quotes and whole briefs against 10.7M U.S. opinions"
}