io.github.cyanheads/courtlistener-mcp-server
REMOTE · COURTLISTENER.CASEYJHAND.COM · 2 COMPONENTS · SCANNED AUG 3
Search US court opinions, federal dockets, judges, citations, and oral arguments via CourtListener.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →
Endpoint Security66
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 14 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability76
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4573 tokens (~304/item across 15 items; 14 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · courtlistener.caseyjhand.com
claude mcp add --transport http cyanheads-courtlistener-mcp-server https://courtlistener.caseyjhand.com/mcp
[mcp_servers.cyanheads-courtlistener-mcp-server] url = "https://courtlistener.caseyjhand.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"cyanheads-courtlistener-mcp-server": {
"type": "remote",
"url": "https://courtlistener.caseyjhand.com/mcp",
"enabled": true
}
}
} openclaw mcp add cyanheads-courtlistener-mcp-server --url https://courtlistener.caseyjhand.com/mcp --transport streamable-http
mcp_servers:
cyanheads-courtlistener-mcp-server:
url: "https://courtlistener.caseyjhand.com/mcp" {
"mcpServers": {
"cyanheads-courtlistener-mcp-server": {
"type": "http",
"url": "https://courtlistener.caseyjhand.com/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Jul 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 +1
- Schema quality: 248 → 304 ▼ functional
- Schema quality: excellent → unverified ▼ functional
- Server version: 0.6.1 → 0.7.0 functional
- “courtlistener_lookup_courts” reworded the description of “jurisdiction” cosmetic
- 28 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Jul 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Jul 26 65
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Probed https://courtlistener.caseyjhand.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=caseyjhand.com | CN=WE1,O=Google Trust Services,C=US | 7 Jul 2026 | 5 Oct 2026 | ECDSA 256 | ECDSA-SHA256 | 5aad900eb2055a0b0ea55912ec19680c |
| SANs: caseyjhand.com, *.caseyjhand.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
DNSSEC secure
Validation of courtlistener.caseyjhand.com. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| caseyjhand.com. | present | 2371 | 13 | Verified |
| courtlistener.caseyjhand.com. | Verified address RRset verified with the apex keys |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| x-content-type-options | nosniff |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://courtlistener.caseyjhand.com/mcp | Verified | 200 | |
| http (plaintext) | http://courtlistener.caseyjhand.com/mcp | HTTPS enforced | 301 | https://courtlistener.caseyjhand.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
courtlistener_get_citations Get Citation Network ~382
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 precedent chains. Note: the free tier supports shallow traversal — following 1–2 hops of a single case is practical; deep multi-hop analysis burns through the daily budget quickly.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster_id | integer | yes | Opinion cluster ID to retrieve citations for. Obtain from courtlistener_search_opinions or courtlistener_lookup_citation. |
| court | string | — | Filter results to a specific court (e.g., "scotus", "ca9"). Applies to both directions. |
| cursor | string | — | Pagination cursor from a previous response's next_cursor field. |
| direction | string | — | "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. |
| filed_after | string | — | Limit to citations filed after this date (ISO 8601). For "cited_by", useful for "how has this precedent been applied recently?" |
| page_size | integer | — | Number of results to request (default 20). For direction="cited_by", CourtListener enforces a minimum of 20 results per page regardless of the value passed — you will always receive at least 20 resul… |
| Name | Type | Req | Description |
|---|---|---|---|
| direction | string | yes | Direction of the citation relationship returned. |
| next_cursor | — | yes | Pagination cursor for the next page; null when no more results. |
| notice | string | — | Context when no citations are returned — either that this page had no match under the filters and more pages remain, or a recovery hint echoing direction and filters. |
| results | array | yes | Related opinions in the citation network. |
| source_case_name | string | yes | Case name for the source cluster. |
| source_cluster_id | number | yes | The cluster ID this citation network is for. |
| totalCount | number | yes | Total citations in the requested direction. For "cited_by" it counts matching clusters with the court and filed_after filters applied. For "citing" it counts the distinct opinions this case cites, be… |
No examples provided.
courtlistener_get_docket Get Docket ~203
Fetch full docket metadata and entry list for a single federal case by docket ID. Returns all available docket entries with document availability status. Documents with is_available=true have a RECAP-stored copy; others require a PACER account. Obtain docket IDs from courtlistener_search_dockets or from opinion results.
| Name | Type | Req | Description |
|---|---|---|---|
| docket_id | integer | yes | Docket ID from a search result's docket_id field or from an opinion cluster result. |
| entries_page | integer | — | 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. |
| entries_page_size | integer | — | 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 beyon… |
| Name | Type | Req | Description |
|---|---|---|---|
| assigned_to | — | yes | Assigned judge name; null if not recorded. |
| case_name | string | yes | Short case name. |
| case_name_full | string | yes | Full case name. |
| cause | string | yes | Legal cause of action. |
| court | string | yes | Court display name for major federal courts; the court identifier otherwise. |
| court_id | string | yes | Court identifier — the stable value for filtering. |
| date_filed | string | yes | Date the case was filed. |
| date_terminated | — | yes | Date the case was terminated; null if active. |
| docket_id | number | yes | Docket ID. |
| docket_number | string | yes | Docket number. |
| entries | array | yes | Docket entries for this page (fixed at 20 per page; entries_page_size is not honored by upstream). |
| entries_page | number | yes | Current entries page number (1-indexed). |
| jurisdiction_type | string | yes | Jurisdiction type. |
| jury_demand | string | yes | Jury demand status. |
| next_cursor | — | yes | Next page number to pass as the `entries_page` argument (docket entries are page-paginated); null when this is the last page. |
| pacer_case_id | — | yes | PACER case ID; null if not in RECAP. |
| referred_to | — | yes | Referred judge name; null if not recorded. |
| total_entries | number | yes | Total number of docket entries available — may exceed the returned entries list. |
No examples provided.
courtlistener_get_financial_disclosure Get Financial Disclosure ~258
Fetch a single judicial financial disclosure by ID with its parsed line-item rows — investments, debts, positions, reimbursements, non-investment and spouse income, agreements, and gifts. This is the itemized companion to courtlistener_search_financial_disclosures (which returns only category counts). Pass categories:[...] to select specific categories; omit for all. Coded value/income columns are decoded to readable dollar ranges. When the full itemization is too large to inline, the response lists each category as a retrievable section by byte size while keeping the filing metadata and counts — re-call with categories:[...] to pull specific categories in full. Obtain disclosure IDs from courtlistener_search_financial_disclosures (the disclosure_id field).
| Name | Type | Req | Description |
|---|---|---|---|
| categories | array | — | Line-item categories to return in full: investments, debts, positions, reimbursements, non_investment_incomes, spouse_incomes, agreements, gifts. Omit for all categories (or an outline if they overfl… |
| disclosure_id | integer | yes | Financial disclosure ID — the disclosure_id field from a courtlistener_search_financial_disclosures result. |
| Name | Type | Req | Description |
|---|---|---|---|
| agreements | array | — | Continuing agreements. |
| counts | object | yes | Count of line items in each disclosure category. |
| debts | array | — | Debts and liabilities. |
| disclosure_id | number | yes | Financial disclosure ID. |
| gifts | array | — | Reported gifts. |
| has_been_extracted | boolean | yes | True if line items were parsed from the PDF; category arrays are empty when false. |
| investments | array | — | Investment holdings. |
| is_amended | boolean | yes | True if this filing is an amendment. |
| kind | string | yes | 'full' returns the requested category rows; 'outline' lists each category as a retrievable section (by byte size) when the itemization overflows the inline budget. Filing metadata and counts are pres… |
| non_investment_incomes | array | — | Non-investment income sources. |
| page_count | — | yes | Page count of the source filing; null if not recorded. |
| pdf_url | — | yes | URL to the source disclosure PDF; null if unavailable. |
| person_id | — | yes | Person ID of the filer — pass to courtlistener_get_judge; null if absent. |
| positions | array | — | Outside positions. |
| reimbursements | array | — | Reimbursements. |
| report_type | string | yes | Report type (Nomination, Initial, Annual, Final, or Unknown). |
| retrieval_notice | string | — | How to re-call the tool for specific categories when the itemization overflows. |
| sections | array | — | Retrievable categories, largest first — pass names to `categories` on a re-call. |
| spouse_incomes | array | — | Spouse income sources. |
| year | number | yes | Filing year. |
No examples provided.
courtlistener_get_judge Get Judge Profile ~112
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 reports whether it was truncated. Obtain person IDs from courtlistener_search_judges results.
| Name | Type | Req | Description |
|---|---|---|---|
| person_id | integer | yes | Judge person ID from a search result's person_id field. Identifies a specific judge across all courts they have served on. |
| Name | Type | Req | Description |
|---|---|---|---|
| aba_ratings | array | yes | ABA qualification ratings, expanded to readable labels (e.g., "Well Qualified"). |
| dob | — | yes | Date of birth as CourtListener stores it, always full ISO 8601 — but the month and day are placeholders unless dob_granularity is "day". Read dob_granularity before presenting this as an exact date.… |
| dob_city | — | yes | City of birth; null if not recorded. |
| dob_granularity | — | yes | Precision actually recorded for dob: "year", "month", or "day". Null when CourtListener recorded no precision. An unrecognized upstream value passes through unchanged. |
| dob_state | — | yes | State of birth; null if not recorded. |
| dod | — | yes | Date of death as CourtListener stores it, always full ISO 8601 — precision qualified by dod_granularity, as with dob. Null if living or not recorded. |
| dod_granularity | — | yes | Precision actually recorded for dod: "year", "month", or "day". Null when CourtListener recorded no precision. |
| education | array | yes | Educational history. |
| fjc_id | — | yes | Federal Judicial Center ID for cross-referencing with FJC data; null if not available. |
| gender | string | yes | Gender. |
| name | string | yes | Full name. |
| notice | string | — | Present only when positions[] was truncated: what was withheld. |
| person_id | number | yes | Person ID. |
| political_affiliations | array | yes | Political affiliation history. |
| positions | array | yes | Positions on record, across all courts — judicial appointments plus non-judicial roles (private practice, prosecutor, professor), which carry no court and describe themselves in job_title. CourtListe… |
| positionsShown | number | yes | Number of position records returned. |
| truncated | boolean | yes | True when the bounded /positions/ page walk stopped with pages outstanding — positions[] is then a prefix of the person's record, not the whole of it. False when the walk reached the end. |
No examples provided.
courtlistener_get_opinion Get Court Opinion ~239
Fetch the full text and metadata for a single opinion cluster by cluster ID. A cluster groups all opinions filed in a case — majority, concurrence, dissent, and per curiam. Returns the cluster metadata (case name, court, citations, dates) plus every opinion variant with HTML and plain text. When the combined opinion text is too large to inline, the response lists each variant as a retrievable section (opinion_<id>) while keeping the cheap cluster metadata — re-call with sections:[...] to pull specific variants in full. Obtain cluster IDs from courtlistener_search_opinions, courtlistener_lookup_citation, or docket results.
| Name | Type | Req | Description |
|---|---|---|---|
| cluster_id | integer | yes | 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 doc… |
| sections | array | — | Opinion variant identifiers to retrieve in full, from a prior outline response (e.g. ["opinion_12345"]). Omit to return all variants, or an outline if they overflow the inline byte budget. |
| Name | Type | Req | Description |
|---|---|---|---|
| case_name | string | yes | Short case name. |
| case_name_full | string | yes | Full case name with parties. |
| citations | array | yes | All known citation strings for this case. |
| cite_count | number | yes | Total number of citations from other opinions. |
| cluster_id | number | yes | Opinion cluster ID. |
| court | string | yes | Court display name. |
| court_id | string | yes | Court identifier. |
| date_filed | string | yes | Date the opinion was filed. |
| docket_id | number | yes | Associated docket ID. |
| docket_number | string | yes | Docket number. |
| judges | string | yes | Judge names. |
| kind | string | yes | 'full' returns the opinion variants (all, or a selected subset); 'outline' lists each variant as a retrievable section (opinion_<id>) when the opinions overflow the inline byte budget. Cluster metada… |
| opinions | array | — | All opinion variants within this cluster. Present in full mode; omitted in outline mode — re-call with sections:["opinion_<id>"] to retrieve specific variants. |
| posture | string | yes | Procedural posture (may be empty). |
| precedential_status | string | yes | Publication/precedential status. |
| retrieval_notice | string | — | How to re-call the tool for specific opinion variants when the opinions overflow. |
| sections | array | — | Retrievable opinion variants, largest first — pass names to `sections` on a re-call. |
| syllabus | string | yes | Syllabus text (may be empty). |
No examples provided.
courtlistener_get_oral_argument Get Oral Argument ~218
Fetch the full detail record for a single oral argument audio recording by its ID (the audio_id from courtlistener_search_oral_arguments). Returns the case name, panel judge IDs, duration, MP3 download URL, linked docket, and the speech-to-text transcript when transcription has completed. A long transcript is withheld and listed as a retrievable section instead; re-call with sections:["transcript"] to pull it. Every other field is present either way. The argument date is not on this record — it comes from the search result or the linked docket.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | Audio recording ID — the audio_id field from a courtlistener_search_oral_arguments result. |
| sections | array | — | Section identifiers to retrieve, from a prior outline response — ["transcript"] is the only one that adds anything, since every other field is returned regardless. A selection that omits "transcript"… |
| Name | Type | Req | Description |
|---|---|---|---|
| case_name | string | — | Case name. |
| case_name_full | string | — | Full case name with parties. |
| docket_id | number | — | Associated docket ID; 0 if not linked. |
| download_url | — | — | Direct MP3 download URL; null if not available. |
| duration_seconds | number | — | Recording duration in seconds. |
| has_transcript | boolean | — | True if a speech-to-text transcript is available. |
| judges | string | — | Free-text judge names; often empty on this endpoint. |
| kind | string | yes | 'full' carries the transcript inline; 'outline' withholds it and lists it as a retrievable section because it overflows the inline byte budget. Every other field of the record is present either way. |
| oral_argument_id | number | — | Audio recording ID. |
| panel_ids | array | — | Person IDs of panel judges — pass to courtlistener_get_judge. |
| retrieval_notice | string | — | How to re-call the tool for the transcript when it overflows the inline budget. |
| sections | array | — | Sections withheld from this response — only ever `transcript`; pass its name to `sections` on a re-call. Absent when nothing was withheld. |
| transcript | string | — | Speech-to-text transcript; empty string if transcription has not completed. The only field an outline response withholds — re-call with sections:["transcript"] to retrieve it. |
No examples provided.
courtlistener_get_parties Get Parties ~247
Fetch all parties and 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 two upstream requests per call (parties + attorney lookup) against a rate-limited free tier, and one more for each extra page of a large attorney roster. Obtain docket IDs from courtlistener_search_dockets or courtlistener_get_docket.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | — | 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 value… |
| docket_id | integer | yes | Docket ID from a courtlistener_search_dockets or courtlistener_get_docket result's docket_id field. |
| page_size | integer | — | Requested number of parties per page (1–10). CourtListener paginates this endpoint at a fixed size and does not honor the requested value, so a page can come back larger than asked for. |
| Name | Type | Req | Description |
|---|---|---|---|
| docket_id | number | yes | Docket ID these parties belong to. |
| next_cursor | — | yes | Opaque pagination cursor for the next page — pass it back as the `cursor` argument; null when this is the last page. |
| parties | array | yes | Parties on this page. |
| totalCount | number | — | Total parties on this docket across all pages — this endpoint reports its count as a URL rather than a number, so the total is only derivable when the first page is also the last, and is absent for a… |
| total_parties | — | yes | Total parties on this docket across all pages; null when no total is derivable — CourtListener serves the count as a URL rather than a number here, so it is only known when the first page is also the… |
No examples provided.
courtlistener_lookup_citation Lookup Legal Citation ~400
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 returns one entry per citation, each with its own resolution status — an unresolved or ambiguous citation is reported in the results, not raised as an error. Supports standard US reporter formats. Costs one request against CourtListener's per-citation quota, plus one ordinary request per distinct docket whose court is resolved — max_court_lookups bounds that second half (default 4, set 0 to skip court resolution entirely). CourtListener meters this endpoint by citations submitted rather than by call, so a long passage spends proportionally more of that quota. Requires authentication — uses the CourtListener /citation-lookup/ endpoint.
| Name | Type | Req | Description |
|---|---|---|---|
| citation | string | yes | 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 repo… |
| max_court_lookups | integer | — | 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 entire… |
| Name | Type | Req | Description |
|---|---|---|---|
| matches | array | yes | One entry per citation CourtListener extracted from the input, in the order they appear. |
| notice | string | — | Caveats on this result: a recovery hint when no citation in the input resolved to a case, and counts of the clusters whose court went unresolved — split by whether the per-call docket budget ran out… |
| queriedCitation | string | yes | The citation string that was looked up. |
No examples provided.
courtlistener_lookup_courts Lookup Courts ~676
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 still scrapes; pass status:'inactive' for historical courts or status:'any' for every court. A bundled snapshot returns the complete list of matching court IDs without paging whenever the filtered set fits the response budget, which covers the default bench and every jurisdiction filter. Full court records — names, citation strings, scraper status — come live from CourtListener at a fixed 20 rows per page, so pull those only when a court ID alone is not enough.
| Name | Type | Req | Description |
|---|---|---|---|
| has_opinion_scraper | boolean | — | Filter to courts with active opinion scraping. Useful when planning search queries — courts without scrapers have sparse coverage. |
| jurisdiction | string | — | 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, S=… |
| page | integer | — | 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 no… |
| status | string | — | 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. The… |
| Name | Type | Req | Description |
|---|---|---|---|
| all_matching_court_ids | array | yes | Every court id matching the same filters, from a snapshot of /courts/ bundled with this server (taken 2026-07-30) — the complete set, not just this page, and free of any request. Paging `courts` is o… |
| all_matching_court_ids_complete | boolean | yes | True when all_matching_court_ids holds every matching court id. False when more than 1000 courts match: the list is withheld whole rather than truncated, and the notice gives the count and how to nar… |
| courts | array | yes | Matching courts on this page. |
| next_cursor | — | yes | Next page number to pass as the `page` argument (this list is page-paginated at a fixed 20 rows/page); null when this is the last page — a non-null value means the courts shown are a partial view of… |
| notice | string | — | Recovery hint when no courts match the applied filters. |
| page | number | yes | Current page number (1-indexed). |
| totalCount | number | yes | Total courts returned. |
No examples provided.
courtlistener_search_dockets Search Federal Court Dockets ~327
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. Returns docket metadata with the parties, attorneys, and firms of record, plus up to 3 sample document entries per docket. Use courtlistener_lookup_courts to find court IDs.
| Name | Type | Req | Description |
|---|---|---|---|
| court | string | — | Filter to a specific federal court ID (e.g., "dnd", "cacd", "deb" for Delaware Bankruptcy). Use courtlistener_lookup_courts to find court IDs. |
| cursor | string | — | Pagination cursor from a previous response's next_cursor field. |
| filed_after | string | — | Earliest case filing date (ISO 8601). |
| filed_before | string | — | Latest case filing date (ISO 8601). |
| page_size | integer | — | Number of results to request (default 20). CourtListener search enforces a minimum of 20 results per page regardless of the value passed — you will always receive at least 20 results. |
| party_name | string | — | 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 | yes | Query terms matched against case name, docket number, party names, and attorney names. Example: "Apple Inc patent infringement". |
| Name | Type | Req | Description |
|---|---|---|---|
| coverage_note | string | yes | Note about RECAP coverage limitations. |
| next_cursor | — | yes | Pagination cursor for the next page; null when no more results. |
| notice | string | — | Recovery hint when results are empty — echoes filters and suggests how to broaden. |
| results | array | yes | Matching docket records. |
| totalCount | number | yes | Total matching dockets. |
No examples provided.
courtlistener_search_financial_disclosures Search Financial Disclosures ~354
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 only (CourtListener has no server-side year filter), so page through with cursor to reach a judge's filings for a year that fall on later pages. Returns per-filing metadata, category counts, itemized gifts, and a link to the source PDF. Line-item investments (often hundreds per filing, with coded values) are summarized as counts; the linked PDF carries the full itemization. Use this for judicial-ethics and recusal research after identifying a judge's person ID.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | — | Pagination cursor from a previous response's next_cursor field. |
| judge_id | integer | — | 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_size | integer | — | Number of filings to request (default 20). CourtListener enforces a minimum of 20 results per page regardless of the value passed — you will always receive at least 20 filings. |
| year | integer | — | 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 a… |
| Name | Type | Req | Description |
|---|---|---|---|
| next_cursor | — | yes | Pagination cursor for the next page; null when no more results. |
| notice | string | — | Recovery hint when no filings are found — echoes filters and suggests next steps. |
| results | array | yes | Matching financial disclosure filings. |
| totalCount | number | — | Total matching disclosure filings — present only when the API reports a numeric count (this endpoint returns it as a URL by default, so it is usually absent). |
No examples provided.
courtlistener_search_judges Search Judges ~266
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.
| Name | Type | Req | Description |
|---|---|---|---|
| appointer | string | — | Filter by appointing president's last name (e.g., "Obama", "Trump", "Biden"). Matches against the appointer field in position records. |
| court | string | — | Filter to judges who have held a position at this court (e.g., "scotus", "ca9"). Use court_id strings from courtlistener_lookup_courts. |
| cursor | string | — | Pagination cursor from a previous response's next_cursor field. |
| page_size | integer | — | Number of results to request (default 20). CourtListener search enforces a minimum of 20 results per page regardless of the value passed. |
| political_affiliation | string | — | 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. |
| q | string | yes | Search query — judge name, court, city, or relevant keywords. |
| Name | Type | Req | Description |
|---|---|---|---|
| next_cursor | — | yes | Pagination cursor for the next page; null when no more results. |
| notice | string | — | Recovery hint when results are empty — echoes filters and suggests how to broaden. |
| results | array | yes | Matching judge records. |
| totalCount | number | yes | Total matching judge records. |
No examples provided.
courtlistener_search_opinions Search Court Opinions ~478
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 v wade", court_id:scotus, judge:"Alito") and boolean operators (AND, OR, NOT). Use courtlistener_lookup_courts to find court IDs. CourtListener publishes free-tier limits of 5 req/min, 50/hr, 125/day; actual limits vary by token tier.
| Name | Type | Req | Description |
|---|---|---|---|
| court | string | — | Filter to a specific court by court ID (e.g., "scotus", "ca9", "nyed"). Use courtlistener_lookup_courts to find court IDs. |
| cursor | string | — | Pagination cursor from a previous response's next_cursor field. Omit for the first page. |
| filed_after | string | — | Earliest filing date (ISO 8601, e.g., "2020-01-01"). Narrows search to opinions filed on or after this date. |
| filed_before | string | — | Latest filing date (ISO 8601). Narrows search to opinions filed before or on this date. |
| order_by | string | — | Result ordering. "score desc" (default) ranks by relevance. "citeCount desc" surfaces most-cited opinions first. |
| page_size | integer | — | Number of results to request (default 20). CourtListener search enforces a minimum of 20 results per page regardless of the value passed — you will always receive at least 20 results. Each search cos… |
| q | string | yes | 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. |
| status | string | — | Opinion publication status. "Published": precedential. "Unpublished": not citable as precedent in most jurisdictions. "Errata": corrections. "Separate": separate opinion filed outside main cluster. "… |
| Name | Type | Req | Description |
|---|---|---|---|
| effectiveQuery | string | yes | Query terms sent to CourtListener. |
| next_cursor | — | yes | Pagination cursor for the next page; null when no more results. |
| notice | string | — | Recovery hint when results are empty — echoes filters and suggests how to broaden. |
| results | array | yes | Matching opinion cluster summaries. |
| totalCount | number | yes | Total matching opinions in the corpus. |
No examples provided.
courtlistener_search_oral_arguments Search Oral Arguments ~229
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 transcript snippets where available. Panel judge IDs can be passed to courtlistener_get_judge for biographical context.
| Name | Type | Req | Description |
|---|---|---|---|
| argued_after | string | — | Earliest date the case was argued (ISO 8601) — filters by argument date, not publication date. |
| argued_before | string | — | Latest date the case was argued (ISO 8601). |
| court | string | — | Filter to a specific court (e.g., "scotus", "ca9"). |
| cursor | string | — | Pagination cursor from a previous response's next_cursor field. |
| page_size | integer | — | Number of results to request (default 20). CourtListener search enforces a minimum of 20 results per page regardless of the value passed. |
| q | string | yes | Query terms matched against case name and transcribed argument text (where available). |
| Name | Type | Req | Description |
|---|---|---|---|
| next_cursor | — | yes | Pagination cursor for the next page; null when no more results. |
| notice | string | — | Recovery hint when results are empty — echoes filters and suggests how to broaden. |
| results | array | yes | Matching oral argument recordings. |
| totalCount | number | yes | Total matching oral argument recordings. |
No examples provided.