← Back to search

io.github.cyanheads/courtlistener-mcp-server

cyanheads streamable_http Scanned 24d ago

Search US court opinions, federal dockets, judges, citations, and oral arguments via CourtListener.

B
79.3 / 100

Versions

0.1.2latest
first seen Jun 5, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 14

courtlistener_get_citations
annotations: verified low

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.

input object output object source_case_name string source_cluster_id number
readOnlyHint true openWorldHint true idempotentHint false
courtlistener_get_docket
annotations: verified low

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.

cause string input object output object court_id string case_name string docket_id number date_filed string assigned_to string jury_demand string referred_to string docket_number string pacer_case_id string case_name_full string jurisdiction_type string
readOnlyHint true idempotentHint true
courtlistener_get_parties
annotations: verified low

Fetch all parties and attorneys of record for a RECAP federal docket by docket ID.

id number input object output object docket_id number
readOnlyHint true idempotentHint true
courtlistener_get_oral_argument
annotations: verified low

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.

input object output object
readOnlyHint true idempotentHint true
courtlistener_get_opinion
annotations: verified low

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.

court string input object judges string output object posture string court_id string syllabus string case_name string citations array docket_id number cite_count number cluster_id number date_filed string docket_number string case_name_full string precedential_status string
readOnlyHint true idempotentHint true
courtlistener_get_financial_disclosure
annotations: verified low

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).

year number input object output object is_amended boolean disclosure_id number
readOnlyHint true idempotentHint true
courtlistener_lookup_citation
annotations: verified low

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 ${COURT_BACKFILL_LIMIT}, 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.

input object output object
readOnlyHint true idempotentHint true
courtlistener_search_oral_arguments
annotations: verified low

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.

court string input object judges string output object audio_id number court_id string case_name string docket_id number argued_before string docket_number string duration_seconds number
readOnlyHint true openWorldHint true idempotentHint false
courtlistener_search_judges
annotations: verified low

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.

q string dob string input object gender string output object dob_city string dob_state string
readOnlyHint true openWorldHint true idempotentHint false
courtlistener_lookup_courts
annotations: verified low

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.

page number input object output object jurisdiction enum
readOnlyHint true openWorldHint true idempotentHint false
courtlistener_get_judge
annotations: verified low

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.

input object gender string output object dob_city string dob_state string person_id number
readOnlyHint true idempotentHint true
courtlistener_search_opinions
annotations: verified low

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.

input object
readOnlyHint true openWorldHint true idempotentHint false
courtlistener_search_financial_disclosures
annotations: verified low

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.

year number input object output object disclosure_id number
readOnlyHint true openWorldHint true idempotentHint false
courtlistener_search_dockets
annotations: verified low

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.

court string input object output object court_id string case_name string filed_after string filed_before string
readOnlyHint true openWorldHint true idempotentHint false

Permissions 3

network medium
Server uses network capabilities via: fetch()
shell high
Server uses shell capabilities via: child_process, spawn(), spawnSync()
env_vars low
Server uses env_vars capabilities via: process.env

Scan Findings 40

info
Tool 'courtlistener_get_citations' annotations are consistent annotation_checker · 80%
info
Tool 'courtlistener_get_docket' annotations are consistent annotation_checker · 80%
info
Tool 'courtlistener_get_parties' annotations are consistent annotation_checker · 80%
info
Tool 'courtlistener_get_oral_argument' annotations are consistent annotation_checker · 80%
info
Tool 'courtlistener_get_opinion' annotations are consistent annotation_checker · 80%
info
Tool 'courtlistener_get_financial_disclosure' annotations are consistent annotation_checker · 80%
info
Tool 'courtlistener_lookup_citation' annotations are consistent annotation_checker · 80%
info
Tool 'courtlistener_search_oral_arguments' annotations are consistent annotation_checker · 80%
info
Tool 'courtlistener_search_judges' annotations are consistent annotation_checker · 80%
info
Tool 'courtlistener_lookup_courts' annotations are consistent annotation_checker · 80%
info
Tool 'courtlistener_get_judge' annotations are consistent annotation_checker · 80%
info
Tool 'courtlistener_search_opinions' annotations are consistent annotation_checker · 80%
info
Tool 'courtlistener_search_financial_disclosures' annotations are consistent annotation_checker · 80%
info
Tool 'courtlistener_search_dockets' annotations are consistent annotation_checker · 80%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
info
package.json metadata manifest_parser · 100%
info
Tool: courtlistener_get_citations manifest_parser · 75%
info
Tool: courtlistener_get_docket manifest_parser · 75%
info
Tool: courtlistener_get_parties manifest_parser · 75%
info
Tool: courtlistener_get_oral_argument manifest_parser · 75%
info
Tool: courtlistener_get_opinion manifest_parser · 75%
info
Tool: courtlistener_get_financial_disclosure manifest_parser · 75%
info
Tool: courtlistener_lookup_citation manifest_parser · 75%
info
Tool: courtlistener_search_oral_arguments manifest_parser · 75%
info
Tool: courtlistener_search_judges manifest_parser · 75%
info
Tool: courtlistener_lookup_courts manifest_parser · 75%
info
Tool: courtlistener_get_judge manifest_parser · 75%
info
Tool: courtlistener_search_opinions manifest_parser · 75%
info
Tool: courtlistener_search_financial_disclosures manifest_parser · 75%
info
Tool: courtlistener_search_dockets manifest_parser · 75%
info
Required env vars (5) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 70%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
info
SBOM generated: 11 components sbom_generator · 100%
high
Hardcoded Password found in cyanheads-courtlistener-mcp-server-2856492/framework-skills/api-utils/references/security.md secret_scanner · 65%
high
Generic API Key Assignment found in cyanheads-courtlistener-mcp-server-2856492/src/config/server-config.ts secret_scanner · 75%
high
Hardcoded Password found in cyanheads-courtlistener-mcp-server-2856492/src/services/courtlistener/court-names-data.ts secret_scanner · 65%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%