cyanheads avatar

Courtlistener Mcp Server

cyanheads/courtlistener-mcp-server

CourtListener sits on 9 million US court opinions and this server exposes the full dataset through 12 tools. You can full-text search opinions with field-level filters, pull complete case text with all opinion variants (majority, concurrence, dissent), and traverse citation networks in both directions to map precedent chains. It also covers RECAP federal dockets with party and attorney search, judge biographical records including appointment history and financial disclosures, and oral argument audio with transcripts. The free tier gives you 125 requests per day, which is enough for targeted research but tight for deep citation traversal. Runs over stdio or as a hosted HTTP endpoint at courtlistener.caseyjhand.com/mcp.

GitHub stars
4
tools
14
auth
Required
transport
STDIO, HTTP
env vars
7
last updated
Nov 1, 2026

Install

From registry metadata
$ npx add-mcp https://courtlistener.caseyjhand.com/mcp --name courtlistener

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http courtlistener https://courtlistener.caseyjhand.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 14 tools

Verified live against the running server on Nov 6, 2026.

courtlistener_search_opinionsFull-text search across 9M+ written US court opinions with field-level filtering. Returns opinion cluster summaries with case metadata, citations, matched text snippets, and the individual opinion variants filed in each case. Supports CourtListener field syntax (caseName:"roe...8 params

Full-text search across 9M+ written US court opinions with field-level filtering. Returns opinion cluster summaries with case metadata, citations, matched text snippets, and the individual opinion variants filed in each case. Supports CourtListener field syntax (caseName:"roe...

Parameters* required
courtstring
Filter to a specific court by court ID (e.g., "scotus", "ca9", "nyed"). Use courtlistener_lookup_courts to find court IDs.
cursorstring
Pagination cursor from a previous response's next_cursor field. Omit for the first page.
filed_afterstring
Earliest filing date (ISO 8601, e.g., "2020-01-01"). Narrows search to opinions filed on or after this date.
filed_beforestring
Latest filing date (ISO 8601). Narrows search to opinions filed before or on this date.
order_bystring
Result ordering. "score desc" (default) ranks by relevance. "citeCount desc" surfaces most-cited opinions first.one of score desc · dateFiled desc · dateFiled asc · citeCount descdefault: score desc
page_sizeinteger
Positive requested page size (default 20), bounded to 20 before retrieval. Upstream search has a 20-row minimum; empty and final pages can be smaller. Full upstream pages and continuation are prese...default: 20
q*string
Full-text query. Supports field syntax (caseName:"roe v wade", court_id:scotus, judge:"Alito") and boolean operators (AND, OR, NOT). Use plain English for semantic-style queries or legal citations.
statusstring
Opinion publication status. "Published": precedential. "Unpublished": not citable as precedent in most jurisdictions. "Errata": corrections. "Separate": separate opinion filed outside main cluster....one of Published · Unpublished · Errata · Separate · In-chambers · Relating-to
courtlistener_get_opinionFetch text and metadata for an opinion cluster by cluster ID. Returns majority, concurrence and dissent variants with raw HTML and readable plain text, variants_completion for source coverage, and docket_enrichment. Oversized selections return outline then page responses; cont...4 params

Fetch text and metadata for an opinion cluster by cluster ID. Returns majority, concurrence and dissent variants with raw HTML and readable plain text, variants_completion for source coverage, and docket_enrichment. Oversized selections return outline then page responses; cont...

Parameters* required
cluster_id*integer
Opinion cluster ID — identifies a case decision and groups all opinion variants (majority, concurrence, dissent). Obtain from courtlistener_search_opinions, courtlistener_lookup_citation, or from d...
cursorstring
Retrieval next_cursor from the previous response. Repeat the original ID and sections/categories selection unchanged; omit to start.
enrichment_cursorstring
Continue enrichment_retrieval.next_cursor independently of primary cursor. A changed docket summary restarts only enrichment slices.
sectionsarray
Opinion variant identifiers to select (e.g. ["opinion_12345"]). Omit for all fetched variants. Oversized selections page; keep this selection unchanged while following cursor.
courtlistener_get_citationsRetrieve the citation network for an opinion cluster. Supports two directions: "cited_by" (opinions that cite this one — measures precedential influence) and "citing" (opinions this one cites — reveals the authority chain relied on). This is the primary tool for tracing legal...6 params

Retrieve the citation network for an opinion cluster. Supports two directions: "cited_by" (opinions that cite this one — measures precedential influence) and "citing" (opinions this one cites — reveals the authority chain relied on). This is the primary tool for tracing legal...

Parameters* required
cluster_id*integer
Opinion cluster ID to retrieve citations for. Obtain from courtlistener_search_opinions or courtlistener_lookup_citation.
courtstring
Filter results to a specific court (e.g., "scotus", "ca9"). Applies to both directions.
cursorstring
Pagination cursor from next_cursor. For citing, a nonnegative safe decimal integer offset; for cited_by, an opaque upstream token.
directionstring
"cited_by" (default): opinions that cite this one — measures precedential influence and downstream adoption. "citing": opinions this one cites — reveals the authority chain the court relied on.one of citing · cited_bydefault: cited_by
filed_afterstring
Limit to citations filed after this date (ISO 8601). For "cited_by", useful for "how has this precedent been applied recently?"
page_sizeinteger
Positive requested size (default 20), bounded to 20. cited_by has an upstream minimum of 20; citing slices at most 20 cited IDs by the bounded size before filtering. Full upstream pages are preserv...default: 20
courtlistener_lookup_citationResolve legal citations (e.g., "410 U.S. 113", "93 S. Ct. 705") to opinion cluster IDs and case metadata. Enables workflows that start from a known citation rather than a search query. CourtListener extracts every citation it finds in the submitted text, so passing a passage r...2 params

Resolve legal citations (e.g., "410 U.S. 113", "93 S. Ct. 705") to opinion cluster IDs and case metadata. Enables workflows that start from a known citation rather than a search query. CourtListener extracts every citation it finds in the submitted text, so passing a passage r...

Parameters* required
citation*string
Text to extract citations from — normally a single citation (e.g., "410 U.S. 113", "347 U.S. 483", "93 S. Ct. 705"), but any passage works and every citation in it is resolved. Supports standard re...
max_court_lookupsinteger
How many distinct dockets this call may spend a request on to resolve cluster courts. The lookup itself is metered separately by CourtListener (per citation submitted), so this budget is drawn enti...default: 4
courtlistener_search_docketsSearch RECAP federal court dockets. Query terms match case name, docket number, party, and attorney names; filters narrow by party name, court, and filing date. RECAP is a crowd-sourced mirror of PACER (the federal court filing system) — coverage varies by court and date. Retu...7 params

Search RECAP federal court dockets. Query terms match case name, docket number, party, and attorney names; filters narrow by party name, court, and filing date. RECAP is a crowd-sourced mirror of PACER (the federal court filing system) — coverage varies by court and date. Retu...

Parameters* required
courtstring
Filter to a specific federal court ID (e.g., "dnd", "cacd", "deb" for Delaware Bankruptcy). Use courtlistener_lookup_courts to find court IDs.
cursorstring
Pagination cursor from a previous response's next_cursor field.
filed_afterstring
Earliest case filing date (ISO 8601).
filed_beforestring
Latest case filing date (ISO 8601).
page_sizeinteger
Positive requested page size (default 20), bounded to 20. Upstream search has a 20-row minimum; empty and final pages can be smaller. Full pages and continuation are preserved; page_sizing reports...default: 20
party_namestring
Filter to dockets listing a specific party by name — applied in addition to (AND with) the q query. More precise than including party names in q when the party name is known.
q*string
Query terms matched against case name, docket number, party names, and attorney names. Example: "Apple Inc patent infringement".
courtlistener_get_docketFetch docket metadata and one entries page by docket ID. Omit document_ids for the docket listing, or select RECAP document IDs embedded on entries_page to retrieve their extracted text without further upstream requests. Selected text uses bounded full/outline/page responses;...5 params

Fetch docket metadata and one entries page by docket ID. Omit document_ids for the docket listing, or select RECAP document IDs embedded on entries_page to retrieve their extracted text without further upstream requests. Selected text uses bounded full/outline/page responses;...

Parameters* required
cursorstring
Retrieval next_cursor from the previous response. Repeat the original ID and sections/categories selection unchanged; omit to start.
docket_id*integer
Docket ID from a search result's docket_id field or from an opinion cluster result.
document_idsarray
Select RECAP document IDs embedded on entries_page. No other pages or document endpoints are fetched; omit for the unchanged docket listing.
entries_pageinteger
Page of docket entries to fetch (1-indexed). Docket entries are page-paginated at 20 per page; pass the next_cursor from a previous response here to page through large cases.default: 1
entries_page_sizeinteger
Requested docket entries per page. NOTE: CourtListener ignores this value — /docket-entries/ always returns a fixed 20-entry page regardless of what is passed. Use entries_page to reach entries bey...default: 20
courtlistener_get_partiesFetch a page of parties and their attorneys of record for a RECAP federal docket by docket ID. Returns each party's name, role (Plaintiff, Defendant, Petitioner, Respondent, etc.), and their attorneys with contact information, scoped to this docket. Costs one party request plu...3 params

Fetch a page of parties and their attorneys of record for a RECAP federal docket by docket ID. Returns each party's name, role (Plaintiff, Defendant, Petitioner, Respondent, etc.), and their attorneys with contact information, scoped to this docket. Costs one party request plu...

Parameters* required
cursorstring
Pagination cursor from a previous response's next_cursor field. Omit for the first page. This is an opaque token, not a page number — CourtListener cursor-paginates this endpoint, so a numeric valu...
docket_id*integer
Docket ID from a courtlistener_search_dockets or courtlistener_get_docket result's docket_id field.
page_sizeinteger
Positive requested party page size (default 10), bounded to 10 before retrieval. CourtListener uses fixed 20-row pages and ignores this request; final pages can be smaller. page_sizing reports requ...default: 10
courtlistener_search_judgesSearch judge/person records by name, appointing president, court, political affiliation, or demographic. Returns biographical data, current position, and appointment summary. Use courtlistener_get_judge for full appointment history and education records.6 params

Search judge/person records by name, appointing president, court, political affiliation, or demographic. Returns biographical data, current position, and appointment summary. Use courtlistener_get_judge for full appointment history and education records.

Parameters* required
appointerstring
Filter by appointing president's last name (e.g., "Obama", "Trump", "Biden"). Matches against the appointer field in position records.
courtstring
Filter to judges who have held a position at this court (e.g., "scotus", "ca9"). Use court_id strings from courtlistener_lookup_courts.
cursorstring
Pagination cursor from a previous response's next_cursor field.
page_sizeinteger
Positive requested page size (default 20), bounded to 20. Upstream search has a 20-row minimum; empty and final pages can be smaller. Full pages and continuation are preserved; page_sizing reports...default: 20
political_affiliationstring
Filter by political affiliation: d=Democrat, r=Republican, i=Independent, l=Libertarian, g=Green Party, u=Unknown/unconfirmed. Based on party of the appointing president or election affiliation.one of d · r · i · l · g · u
q*string
Search query — judge name, court, city, or relevant keywords.
courtlistener_get_judgeFetch full biographical profile for a single judge: positions on record — judicial appointments across all courts plus non-judicial roles — education, political affiliations, and ABA ratings. The position list is paginated upstream and walked under a page bound; the response r...1 params

Fetch full biographical profile for a single judge: positions on record — judicial appointments across all courts plus non-judicial roles — education, political affiliations, and ABA ratings. The position list is paginated upstream and walked under a page bound; the response r...

Parameters* required
person_id*integer
Judge person ID from a search result's person_id field. Identifies a specific judge across all courts they have served on.
courtlistener_lookup_courtsList courts with optional filtering by jurisdiction type, active/inactive status, and scraper coverage. Primarily used to discover court IDs for use in search and filter parameters across all other courtlistener tools. Defaults to the active bench — the courts CourtListener st...4 params

List courts with optional filtering by jurisdiction type, active/inactive status, and scraper coverage. Primarily used to discover court IDs for use in search and filter parameters across all other courtlistener tools. Defaults to the active bench — the courts CourtListener st...

Parameters* required
has_opinion_scraperboolean
Filter to courts with active opinion scraping. Useful when planning search queries — courts without scrapers have sparse coverage.
jurisdictionstring
Jurisdiction type — CourtListener's own court classification, one code per court: F=Federal Appellate, FD=Federal District, FB=Federal Bankruptcy, FBP=Federal Bankruptcy Panel, FS=Federal Special,...one of F · FD · FB · FBP · FS · S
pageinteger
Page number (1-indexed). CourtListener serves /courts/ at a fixed 20 rows per page and ignores any requested page size, so the number of pages is the enrichment totalCount divided by 20 — there is...default: 1
statusstring
Which bench to return. 'active' (default) returns only courts CourtListener currently scrapes; 'inactive' returns only the historical and defunct courts it no longer scrapes; 'any' returns both. Th...one of active · inactive · anydefault: active
courtlistener_search_oral_argumentsSearch appellate oral argument audio recordings — the largest public collection of oral argument audio. Returns recording metadata with two direct MP3 links per result (download_url at the originating court, local_path for CourtListener's durable copy), panel judge IDs, and tr...6 params

Search appellate oral argument audio recordings — the largest public collection of oral argument audio. Returns recording metadata with two direct MP3 links per result (download_url at the originating court, local_path for CourtListener's durable copy), panel judge IDs, and tr...

Parameters* required
argued_afterstring
Earliest date the case was argued (ISO 8601) — filters by argument date, not publication date.
argued_beforestring
Latest date the case was argued (ISO 8601).
courtstring
Filter to a specific court (e.g., "scotus", "ca9").
cursorstring
Pagination cursor from a previous response's next_cursor field.
page_sizeinteger
Positive requested page size (default 20), bounded to 20. Upstream search has a 20-row minimum; empty and final pages can be smaller. Full pages and continuation are preserved; page_sizing reports...default: 20
q*string
Query terms matched against case name and transcribed argument text (where available).
courtlistener_get_oral_argumentFetch an oral argument recording by audio_id from courtlistener_search_oral_arguments. Returns case metadata, panel IDs, duration, MP3 URL, docket and available transcript. Oversized text or metadata returns outline then page responses; continue retrieval.next_cursor as cursor...3 params

Fetch an oral argument recording by audio_id from courtlistener_search_oral_arguments. Returns case metadata, panel IDs, duration, MP3 URL, docket and available transcript. Oversized text or metadata returns outline then page responses; continue retrieval.next_cursor as cursor...

Parameters* required
cursorstring
Retrieval next_cursor from the previous response. Repeat the original ID and sections/categories selection unchanged; omit to start.
id*integer
Audio recording ID — the audio_id field from a courtlistener_search_oral_arguments result.
sectionsarray
Selected record fields. Metadata is always selected; a nonempty selection omitting transcript excludes it. Omit for the whole record. Oversized selections page; keep this selection unchanged while...
courtlistener_search_financial_disclosuresSearch federal judicial financial disclosure filings — the annual reports judges file on investments, gifts, debts, outside positions, and income. Filter by judge (person ID from courtlistener_search_judges) and/or filing year; the year filter is applied to the fetched page on...4 params

Search federal judicial financial disclosure filings — the annual reports judges file on investments, gifts, debts, outside positions, and income. Filter by judge (person ID from courtlistener_search_judges) and/or filing year; the year filter is applied to the fetched page on...

Parameters* required
cursorstring
Pagination cursor from a previous response's next_cursor field.
judge_idinteger
Person ID of the judge whose disclosures to return — obtain from courtlistener_search_judges (the person_id field). Omit to browse across all filers.
page_sizeinteger
Positive requested page size (default 20), bounded to 20. Upstream has a minimum of 20; final pages and page-local year filtering can return fewer. Full fetched pages and continuation are preserved...default: 20
yearinteger
Filing year to filter by (e.g., 2022). Applied client-side to the fetched page only — CourtListener rejects a server-side year param, so filings for this year on later pages are not included. When...
courtlistener_get_financial_disclosureFetch a judicial financial disclosure by disclosure_id from courtlistener_search_financial_disclosures. Returns metadata, counts and typed line items with coded values decoded to dollar ranges. Select categories or omit for all. Oversized selections return outline then page re...3 params

Fetch a judicial financial disclosure by disclosure_id from courtlistener_search_financial_disclosures. Returns metadata, counts and typed line items with coded values decoded to dollar ranges. Select categories or omit for all. Oversized selections return outline then page re...

Parameters* required
categoriesarray
Line-item categories to select. Omit for all. Oversized selections page; keep this selection unchanged while following cursor.
cursorstring
Retrieval next_cursor from the previous response. Repeat the original ID and sections/categories selection unchanged; omit to start.
disclosure_id*integer
Financial disclosure ID — the disclosure_id field from a courtlistener_search_financial_disclosures result.

Sponsors

Configuration

COURTLISTENER_API_TOKEN*

CourtListener API token from your account settings. Required for API access.

MCP_LOG_LEVELdefault: info

Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

MCP_TRANSPORT_TYPEdefault: http

Selects the HTTP transport.

MCP_HTTP_HOSTdefault: 127.0.0.1

The hostname for the HTTP server.

MCP_HTTP_PORTdefault: 3010

The port to run the HTTP server on.

MCP_HTTP_ENDPOINT_PATHdefault: /mcp

The endpoint path for the MCP server.

MCP_AUTH_MODEdefault: none

Authentication mode to use: 'none', 'jwt', or 'oauth'.

Readme

@cyanheads/courtlistener-mcp-server

Search and retrieve US court opinions, federal dockets, judge records, citation networks, and oral arguments from CourtListener's 9M+ opinion corpus via MCP. STDIO or Streamable HTTP.

14 Tools • 2 Resources • 1 Prompt

Details

Repository
github.com/cyanheads/courtlistener-mcp-server
Category
Search & Web Crawling
Package
@cyanheads/courtlistener-mcp-server
Transport
STDIO, HTTP
Auth
Required
Registry
MCP registry, active
Resources
2
Prompts
1
Tools verified
Nov 6, 2026

More from cyanheads

Related Search & Web Crawling MCP servers

View all
1cyanheads avatarNoaa Spaceweather Mcp Servercyanheads/noaa-spaceweather-mcp-serverNOAA SWPC space weather: storm scales, Kp index, aurora forecasts, solar wind, activity, alerts.4stars
2cyanheads avatarOecd Mcp Servercyanheads/oecd-mcp-serverSearch and query 1,500+ OECD statistical datasets via SDMX. Keyless.4stars
3formulahendry avatarMcp Server Mcp Registryformulahendry/mcp-server-mcp-registryMCP Server for MCP Registry to discover and search for available MCP servers in the registry4stars
4iamvirul avatarWso2 Docs Mcp Serveriamvirul/wso2-docs-mcp-serverSemantic search over WSO2 docs (APIM, IS, MI, Choreo, Ballerina) via RAG and pgvector.4stars
5indhar01 avatarMemographindhar01/memographGraph-based memory system for LLMs with knowledge graphs and semantic search.4stars
6daanielcruz avatarGsearchdaanielcruz/gsearch-mcpFree Google Search with inline citations for any MCP-compatible AI tool.4stars