Syfert Legal Research
MCP server by Syfert
Verify legal citations, case treatment, quotes and whole briefs against 10.7M U.S. court opinions and statutes
Connect to Syfert Legal Research
Syfert Legal Research needs an API key. Connect with its own URL and your key:
Send your key in the Authorization header. mcp.tc never sees or stores keys. Where to get a key
Share this server
Opens this page, with the URL and setup steps.
mcp.tc/i/syfert-legal-researchAbout
Connects to the syfert.com law library: 10.7M U.S. opinions from all states and federal courts, treatment flags showing whether a case is still good law, and statute and court rule corpora for all 50 states plus DC, USC and CFR. Tools search cases and statutes, read full text, check citations and quotes, and audit a whole brief.
Runs as a hosted streamable HTTP endpoint at https://mcp.syfert.com/mcp. A free token sent as an Authorization Bearer header is used for normal access. The site also states that the endpoint answers without a credential, limited to 20 calls a day per address.
What you can do
- Search 10.7M U.S. court opinions by topic, party, court or judge
- Look up a case by citation or caption and read the full opinion
- Check whether a case is still good law with treatment flags
- Verify citations, quotes and whole briefs for hallucinated authority
- Find the source case for a proposition or quoted language
- Search and read statutes and court rules for all 50 states plus DC and federal
- Research a doctrine by state with cases on each side
Tools 22
search_casesRead-onlyFull-text search over 10.7M U.S. court opinions with state, court, judge and date filters
find_caseRead-onlyDirect lookup of one case by citation or caption
get_caseRead-onlyFetch case metadata, parallel citations, treatment flag and opinion text
check_citationRead-onlyVerify a case, statute, regulation or rule citation exists and matches the name
verify_quoteRead-onlyCheck a quotation against the full text of the cited opinion
get_treatmentRead-onlyShow whether a case is still good law with citing-case signals
check_briefRead-onlyAudit all citations, quotes and statutes in a draft brief at once
get_propositionsRead-onlyList the legal propositions courts cite a case for, each with its own flag
get_citing_casesRead-onlyList citing cases with parentheticals, quotes and pin cites
find_related_casesRead-onlyExpand one case into its doctrinal line of co-cited cases
find_courtRead-onlyResolve a court name to court ids for search filters
search_quotesRead-onlyFind every case that quoted a given phrase
Show 10 more tools
find_authorityRead-onlyFind the source case to cite for a pasted proposition
find_issuesRead-onlyResearch a doctrine or fact pattern as courts in a state name it
search_statutesRead-onlySearch statutes and court rules by citation or topic for any state or federal
get_statuteRead-onlyFetch full text of a statute, rule or code section with currency details
suggest_treatmentWritesPropose a red or green treatment flag correction with supporting authority
export_documentRead-onlyReturn a readable copy of a case or statute for saving locally
context_detectorRead-onlyCompare a brief's sentence with what the cited opinion says
brief_uploadWritesUpload a long brief for check_brief
get_brief_resultsRead-onlyPage through a checked brief
brief_deleteWritesDelete an uploaded brief now
Read from the live server on 15 Nov 2026. Read-only, Writes and Can delete are hints the server declares; your client decides whether to ask before running a tool.
Example prompts
Check every citation in this draft brief and list corrections
Is Miranda v. Arizona, 384 U.S. 436 still good law?
Find Florida authority for this proposition, pasted verbatim
Show me Florida statute 83.49 and cases construing it
Set up
Every client connects to mcp.syfert.com. Pick yours; the page remembers your choice.
Claude Code
- Run this in a terminal, in your project folder:
claude mcp add --transport http syfert-legal-research https://mcp.syfert.com/mcp --header "Authorization: Bearer <YOUR_API_KEY>"- Replace the placeholder with your key before you run it, then check it with
/mcpinside Claude Code.
Add --scope user to make it available in every project, not just this one.
Claude Desktop
- Use the
mcp-remotebridge, which keeps the key on this computer (a connector added on claude.ai with the key under Request headers also shows up here). Open Settings → Developer → Edit Config and add:
{
"mcpServers": {
"syfert-legal-research": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.syfert.com/mcp",
"--header",
"Authorization: Bearer <YOUR_API_KEY>"
]
}
}
}- Replace the placeholder with your key and restart Claude Desktop.
The bridge needs Node.js on your computer.
claude.ai
- Open the connector form on claude.ai. This button fills in the name and URL for you:
Add to claude.ai (opens in a new tab)
- Check that the URL reads
https://mcp.syfert.com/mcp. Under Request headers, addAuthorization: Bearer <YOUR_API_KEY>with your key from Syfert, then click Add. - Turn it on in a chat from the tools menu.
Free plans allow one custom connector. On Team and Enterprise plans an owner adds it under Organization settings → Connectors.
Cursor
Add to Cursor (opens in a new tab)
Or add it by hand to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (this project):
{
"mcpServers": {
"syfert-legal-research": {
"url": "https://mcp.syfert.com/mcp",
"headers": {
"Authorization": "Bearer <YOUR_API_KEY>"
}
}
}
}VS Code
Add it to .vscode/mcp.json. VS Code asks for the key the first time and stores it securely:
{
"servers": {
"syfert-legal-research": {
"type": "http",
"url": "https://mcp.syfert.com/mcp",
"headers": {
"Authorization": "Bearer ${input:api-key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "api-key",
"description": "API key",
"password": true
}
]
}Devin Desktop
- Add it to
~/.config/devin/mcp_config.json(macOS and Linux) or%APPDATA%\devin\mcp_config.json(Windows):
{
"mcpServers": {
"syfert-legal-research": {
"serverUrl": "https://mcp.syfert.com/mcp",
"headers": {
"Authorization": "Bearer <YOUR_API_KEY>"
}
}
}
}- Refresh the MCP server list in Cascade.
Devin Desktop is the new name for Windsurf. It reads serverUrl (or url) for remote servers.
Codex
codex mcp add syfert-legal-research --url https://mcp.syfert.com/mcp --bearer-token-env-var SYFERT_LEGAL_RESEARCH_API_KEYOr edit ~/.codex/config.toml directly:
[mcp_servers.syfert-legal-research]
url = "https://mcp.syfert.com/mcp"
bearer_token_env_var = "SYFERT_LEGAL_RESEARCH_API_KEY"Set SYFERT_LEGAL_RESEARCH_API_KEY to your key in the shell that runs Codex.
Gemini CLI
gemini mcp add --transport http --header "Authorization: Bearer <YOUR_API_KEY>" syfert-legal-research https://mcp.syfert.com/mcpThis adds it to the current project. Add -s user to use it everywhere.
Any client
Most clients accept this shape. Some name the URL field differently: serverUrl in Devin Desktop, httpUrl in Gemini CLI’s settings file.
{
"mcpServers": {
"syfert-legal-research": {
"type": "http",
"url": "https://mcp.syfert.com/mcp",
"headers": {
"Authorization": "Bearer <YOUR_API_KEY>"
}
}
}
}Zed puts servers under context_servers in its settings. Cline needs "type": "streamableHttp", or it assumes SSE.
Client only starts local servers? Bridge it with npx -y mcp-remote https://mcp.syfert.com/mcp.
Embed
Show Syfert Legal Research in a README or on your site. Each embed links to this page, uses the server’s own URL, and sets no cookies. How embeds work
The card, the iframe and the JSON are in English. Add ?lang=it, fr, de or es to their address for another language.
README badge
[](https://mcp.tc/i/syfert-legal-research)<a href="https://mcp.tc/i/syfert-legal-research"><img src="https://mcp.tc/i/syfert-legal-research/badge.svg" alt="Syfert Legal Research on mcp.tc" height="20"></a>It follows the reader’s light or dark mode. Add ?theme=light or ?theme=dark to fix it, or ?style=compact to show the mark without the word.
Website card
<script src="https://mcp.tc/w/syfert-legal-research.js" async></script>The card appears where the tag is. Add data-theme="dark" or data-size="compact" to the tag to change it. The file holds everything it needs, so it makes no other requests and sets no cookies.
iframe
<iframe src="https://mcp.tc/embed/syfert-legal-research" title="Syfert Legal Research on mcp.tc" width="420" height="200" loading="lazy" allow="clipboard-write" style="border:0;border-radius:8px;max-width:100%"></iframe>Use it on pages that don’t allow scripts. Add ?theme=light or ?theme=dark to the address to fix the colors.
JSON
The listing as data for your own pages and tools: name, tagline, the server’s own URL, tools and the “Add to” links. Any site can read it (CORS is open).
https://mcp.tc/i/syfert-legal-research.jsonAI prompt
Paste this into an AI coding assistant, such as Claude Code or Cursor, and it adds the Syfert Legal Research card to your site.
Add the mcp.tc card for Syfert Legal Research, an MCP server, to my website. It is one static script: no build step, no package to install, no cookies.
Put this tag where the card should appear. The card renders right before it:
```html
<script src="https://mcp.tc/w/syfert-legal-research.js" async></script>
```
To show the card somewhere else, put this placeholder there and load the same script once, for example before `</body>`. Keep the link inside: visitors without JavaScript see it.
```html
<div data-mcptc="syfert-legal-research"><a href="https://mcp.tc/i/syfert-legal-research">Syfert Legal Research on mcp.tc</a></div>
```
Options:
- `data-theme="light"` or `"dark"` on the tag or the placeholder fixes the colors. Without it, the card follows the visitor’s light or dark mode.
- `data-size="compact"` gives a smaller card without the tagline.
- The CSS variable `--mcptc-max-width` on the placeholder or a parent sets the width (default `520px`).
- `?lang=` on the script URL sets the card’s language: `en`, `it`, `fr`, `de` or `es`.
If the site has a Content Security Policy, allow `script-src https://mcp.tc` and `img-src data:` (the icon is inline).
For a README or other Markdown docs, use the badge instead:
```markdown
[](https://mcp.tc/i/syfert-legal-research)
```
Reference: https://mcp.tc/embedChange history
We read this server’s tool list every 3 hours and record what changes. Last read 15 Nov 2026, 00:17 UTC.
-
1 tool changed.
Details, 13 Nov 2026, 02:49 UTC
Changed 1
find_authoritydescriptionThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
-
3 tools changed.
Details, 12 Nov 2026, 20:49 UTC
Changed 3
check_briefdescriptionThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
find_authoritydescription and input schemaThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
- New parameters:
per_pagecompact - Description of
stateBeforeOptional two-letter state code: relaxed and proposition matches are limited to that state's courts and the federal courts
(a federal courtsitting inthe state cites both), that state's own courts fi…AfterOptional two-letter state code: relaxed and proposition matches are limited to that state's courts and the federal courts sitting in or over it (the Supreme Court, its circuit, its districts); other…
- New parameters:
search_casesdescriptionThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
-
2 tools changed.
Details, 11 Nov 2026, 23:47 UTC
Changed 2
check_briefdescriptionThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
check_citationdescriptionThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
-
4 tools changed.
Details, 11 Nov 2026, 20:58 UTC
Changed 4
find_authoritydescriptionThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
get_casedescriptionBeforeFetch 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_quo…AfterFetch one case: metadata, parallel citations, treatment flag, and full opinion text (paginated via offset/max_chars). cited_by is the number of opinions citing the case: CourtListener's count, or the syfert.com citation graph's when that finds more (cited_by_source: citation_graph says so); 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. Qu…
get_propositionsdescription and input schemaBeforeWhat 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).AfterWhat 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). cited_for_pages (a separate array) lists pages later courts pin-cite, with a later court's parenthetical and, where it agrees with it, a machine-generated title that is never the court's words (PROPS229_20261110). 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 dr…
- Description of
max_propositionsBeforeDefault 10,max 25AfterRows wanted in propositions and in cited_for_pages, each up to this many, max 25 (at most 3 quoted propositions are indexed per case). Default: up to 2 cited_for_pages (1 when 2 or more propositions…
- Description of
search_casesdescriptionThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
-
2 tools changed.
Details, 11 Nov 2026, 17:52 UTC
Changed 2
check_briefdescriptionThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
check_citationdescriptionThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
-
New version 2.0.0 (was 1.7.0). Reported by the server.
-
1 tool changed.
Details, 5 Nov 2026, 23:46 UTC
Changed 1
check_briefdescriptionThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
-
6 tools changed.
Details, 5 Nov 2026, 14:52 UTC
Changed 6
check_citationdescriptionThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
find_casedescriptionThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
get_casedescriptionThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
get_treatmentdescriptionThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
search_statutesinput schema- Description of
qBeforeCitation or topic query, max 200
charsAfterCitation or topic query, max 200 chars. With state, "quotation marks" require that exact phrase; other words are ranked, sections holding the most and rarest of them first, and match_mode says whethe…
- Description of
verify_quotedescriptionBeforeCheck 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 matched_span (the opinion's words over the span you quoted) instead; best_match is the sentence around it. 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).
AfterCheck 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 matched_span (the opinion's words over the span you quoted) instead; best_match is the sentence around it. 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). A case_name alone also works: find_case decides, and…
-
6 tools changed. Server instructions changed.
New server instructions
Details, 4 Nov 2026, 23:39 UTC
Changed 6
brief_deletedescriptionBeforeDelete an uploaded brief and its results from the server now (they are otherwise deleted after the last page is read, or after an hour idle).
AfterSigned-in accounts only (a free account at https://syfert.com/mcp/; anonymous callers use check_brief with text). Delete an uploaded brief and its results from the server now (they are otherwise deleted after the last page is read, or after an hour idle).
brief_uploaddescriptionBeforeUpload a brief of any length for check_brief, in pieces. Send the text in order, about 40,000 characters (10k tokens) per call: the first call returns brief_id; each next call passes brief_id and seq (2, 3, ...); the last passes final=true (a short brief can go in one call with final=true). Then call check_brief with brief_id. The text and its results are held in server RAM only, for your credential alone, and are deleted right after the last page of every section is read, after an hour idle, or by brief_delete.
AfterSigned-in accounts only (a free account at https://syfert.com/mcp/; anonymous callers use check_brief with text). Upload a brief of any length for check_brief, in pieces. Send the text in order, about 40,000 characters (10k tokens) per call: the first call returns brief_id; each next call passes brief_id and seq (2, 3, ...); the last passes final=true (a short brief can go in one call with final=true). Then call check_brief with brief_id. The text and its results are held in server RAM only, for your credential alone, and are deleted right after the last page of every section is read, after an hour idle, or by brief_delete.
check_briefdescription and input schemaThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
- Description of
max_citesBeforeMax citations to process (default 100, max
200)AfterMax citations to process (default 100, max 200); citations past it are named in warnings as not checked
- Description of
brief_idBeforeInsteadoftext:the brief_id of a brief uploaded with brief_upload. Every citation is checked (no max_cites cap); until the check is done the answer is status running withcites_done / cites_total (…AfterSigned-in accounts: instead of text, the brief_id of a brief uploaded with brief_upload. Every citation is checked (no max_cites cap); until the check is done the answer is status running with cites_…
- Description of
export_documentdescriptionBeforeOptional. 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.AfterOptional. 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 (about 20k tokens) comes in parts that each fit one (page / pages, truncated, next_offset): call again with offset = next_offset and append the parts in order.
get_brief_resultsdescriptionBeforeRead the results of check_brief(brief_id) one page at a time (each page under ~20k tokens). section: corrections (ranked by severity), cites (one full row per citation, as check_brief with detail="full"), quotes_unattached, statutes. Start without cursor, then pass next_cursor until it is null. After the last page of every section the session is deleted (session_deleted: true).
AfterSigned-in accounts only (a free account at https://syfert.com/mcp/; anonymous callers use check_brief with text). Read the results of check_brief(brief_id) one page at a time (each page under ~20k tokens). section: corrections (ranked by severity), cites (one full row per citation, as check_brief with detail="full"), quotes_unattached, statutes. Start without cursor, then pass next_cursor until it is null. After the last page of every section the session is deleted (session_deleted: true).
verify_quotedescriptionBeforeCheck 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).AfterCheck 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 matched_span (the opinion's words over the span you quoted) instead; best_match is the sentence around it. 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).
Server instructions
BeforeLegal research tools backed by syfert.com: 10.8M U.S. opinions (all states + federal), Syfertize treatment flags, and statute corpora for 50 states + DC (44 also hold court rules, kind="rule"; not ks, la, nh, ok, sd, vt), the Florida Administrative Code and USC/CFR/federal rules (state="xx"; get_statute takes the two-letter code). Path: (0) a doctrine or fact pattern -> find_issues(state="xx"): the doctrine as that state's courts name it, cases on each side (followed_by / questioned_by), statutes construed. (0b) a proposition or quote -> find_authority, verbatim. (1) party, statute number or keywords -> search_cases / search_statutes. (2) get_case / get_statute read it. (3) check_citation verifies a cite (hallucinations, name mismatches; expected_case_name finds a cite newer than the index; statute and rule cites too); for id., supra and short forms pass the sentence containing the cite and any quotation; id. is never the case last mentioned. (3b) check_brief audits a draft and lists corrections. (3c) get_propositions: what courts cite a case for, each with its flag and quote_integrity ('absent' = not in the opinion); get_citing_cases: judges' parentheticals; find_related_cases: the doctrinal line. (4) get_treatment: red = overruled, yellow = questioned, overruled_by, still_good_companions, risk_signals. get_statute adds Notes of Decisions and currency: the text is the edition held, so for crimes, contracts, limitations or procedure the operative date goes in as_of. Rows carry bluebook, url, link_md; a passage's cite_as is bluebook + pin; cross_references on a statute hold amendments no case has reached. Coverage after ~2020 is partial in some regional reporters: a miss on a recent case may be a gap, not a hallucination. An answer dates itself from the tool calls (a statute's currency; no "current through" date for cases) and labels each proposition: tool + cite, user's text, own reasoning, or unchecked. Quotation marks mean pasted from a tool result (verify_quote'…
AfterLegal research tools backed by syfert.com: 10.8M U.S. opinions (all states + federal), Syfertize treatment flags, and statute corpora for 50 states + DC (44 also hold court rules, kind="rule"; not ks, la, nh, ok, sd, vt), the Florida Administrative Code and USC/CFR/federal rules (state="xx"; get_statute takes the two-letter code). Path: (0) a doctrine or fact pattern -> find_issues(state="xx"): the doctrine as that state's courts name it, cases on each side (followed_by / questioned_by), statutes construed. (0b) a proposition or quote -> find_authority, verbatim. (1) party, statute number or keywords -> search_cases / search_statutes. (2) get_case / get_statute read it. (3) check_citation verifies a cite (hallucinations, name mismatches; expected_case_name finds a cite newer than the index; statute and rule cites too); for id., supra and short forms pass the sentence containing the cite and any quotation; id. is never the case last mentioned. (3b) check_brief audits a draft and lists corrections. (3c) get_propositions: what courts cite a case for, each with its flag and quote_integrity ('absent' = not in the opinion); get_citing_cases: judges' parentheticals; find_related_cases: the doctrinal line. (4) get_treatment: red = overruled, yellow = questioned, overruled_by, still_good_companions, risk_signals. get_statute adds Notes of Decisions and currency: the text is the edition held, so for crimes, contracts, limitations or procedure the operative date goes in as_of. Rows carry bluebook, url, link_md; a passage's cite_as is bluebook + pin; cross_references on a statute hold amendments no case has reached. Coverage after ~2020 is partial in some regional reporters: a recent miss may be a gap, not a hallucination. An answer dates itself from the tool calls (a statute's currency; no "current through" date for cases) and labels each proposition: tool + cite, user's text, own reasoning, or unchecked. Quotation marks mean pasted from a tool result (verify_quote's matched_…
-
3 tools added and 1 tool changed.
Details, 4 Nov 2026, 20:59 UTC
Added 3
brief_deleteWritesDelete an uploaded brief and its results from the server now (they are otherwise deleted after the last page is read, or after an hour idle).
brief_uploadWritesUpload a brief of any length for check_brief, in pieces. Send the text in order, about 40,000 characters (10k tokens) per call: the first call returns brief_id; each next call passes brief_id and seq (2, 3, ...); the last passes final=true (a short brief can go in one call with final=true). Then call check_brief with brief_id. The text and its results are held in server RAM only, for your credential alone, and are deleted right after the last page of every section is read, after an hour idle, or by brief_delete.
get_brief_resultsRead-onlyRead the results of check_brief(brief_id) one page at a time (each page under ~20k tokens). section: corrections (ranked by severity), cites (one full row per citation, as check_brief with detail="full"), quotes_unattached, statutes. Start without cursor, then pass next_cursor until it is null. After the last page of every section the session is deleted (session_deleted: true).
Changed 1
check_briefdescription and input schemaThe text shown here is the same before and after: the change is past the first 1,000 characters or in characters that don’t show.
- New parameters:
brief_id - No longer required:
text - Description of
textBeforeThe full document text (up to
512KB)AfterThe full document text (up to 512KB). Omit it when you pass brief_id.
- New parameters:
-
2 tools changed.
Details, 4 Nov 2026, 14:51 UTC
Changed 2
check_briefcheck_citationThe 10 newest entries show every detail; older ones show names only.
-
6 tools changed. Server instructions changed.
New server instructions
Details, 3 Nov 2026, 17:49 UTC
Changed 6
check_citationfind_caseget_caseget_statuteget_treatmentsearch_casesThe 10 newest entries show every detail; older ones show names only.
-
5 tools changed.
Details, 2 Nov 2026, 23:36 UTC
Changed 5
check_briefcheck_citationfind_caseget_caseget_treatmentThe 10 newest entries show every detail; older ones show names only.
-
4 tools changed.
Details, 2 Nov 2026, 20:52 UTC
Changed 4
check_citationfind_caseget_treatmentsearch_casesThe 10 newest entries show every detail; older ones show names only.
-
1 tool changed.
Details, 2 Nov 2026, 02:44 UTC
Changed 1
check_briefThe 10 newest entries show every detail; older ones show names only.
-
1 tool changed.
Details, 27 Oct 2026, 02:39 UTC
Changed 1
find_courtThe 10 newest entries show every detail; older ones show names only.
-
1 tool changed.
Details, 26 Oct 2026, 17:47 UTC
Changed 1
find_courtThe 10 newest entries show every detail; older ones show names only.
-
New version 1.7.0 (was 1.6.0). Reported by the server.
-
3 tools changed.
Details, 26 Oct 2026, 02:49 UTC
Changed 3
find_caseget_caseget_treatmentThe 10 newest entries show every detail; older ones show names only.
-
2 tools changed. Server instructions changed.
New server instructions
Details, 25 Oct 2026, 20:38 UTC
Changed 2
check_citationfind_caseThe 10 newest entries show every detail; older ones show names only.
-
1 tool changed.
Details, 25 Oct 2026, 17:43 UTC
Changed 1
get_caseThe 10 newest entries show every detail; older ones show names only.
-
Tracking started: 19 tools.
FAQ
Can I paste mcp.tc/i/syfert-legal-research into my MCP client?
No. mcp.tc links are pages, not server addresses. Connect with https://mcp.syfert.com/mcp, so your client talks to Syfert Legal Research directly. Your key goes there too, never to mcp.tc. The quick link is for sharing: it opens this page, with setup steps for every client.
Does Syfert Legal Research need an API key or a sign-in?
Yes. Syfert Legal Research needs an API key, sent as the Authorization header. Get one from Syfert and keep it in your client’s config, never in a shared file.
Is Syfert Legal Research a remote or a local server?
Remote. Syfert hosts it at https://mcp.syfert.com/mcp, and it speaks Streamable HTTP. There’s nothing to install.
What can Syfert Legal Research do?
It has 22 tools, including search_cases, find_case and get_case. You can search 10.7M U.S. court opinions by topic, party, court or judge, look up a case by citation or caption and read the full opinion and check whether a case is still good law with treatment flags.
Which clients can use it?
Any client that supports remote MCP servers and can send your key: Claude Code, Cursor, VS Code, Devin Desktop, Codex, Gemini CLI, Zed and others. On claude.ai and Claude Desktop, add the key as a request header when you create the custom connector. ChatGPT can’t send a key, so it can’t use it.
Does mcp.tc track changes to Syfert Legal Research?
Yes. Syfert Legal Research’s History tab shows each change we find to its tools, down to descriptions and parameters, plus new versions and edits by its owner. Follow the listing to get an email when it changes.
Who wrote this page?
mcp.tc’s robot read Syfert Legal Research’s own metadata (its MCP handshake, tool list and public pages), and an AI model drafted the text from it. A person reviews anything the checks can’t confirm. The text can still be wrong, so if you spot a mistake, use Report this listing on this page.
mcp.tc isn’t affiliated with Syfert. This page was built from Syfert Legal Research’s public metadata, last checked on 15 Nov 2026, and an AI model wrote the description, so it can be wrong. Names and marks belong to their owners. Something off? Report this listing.