Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.cyanheads/courtlistener-mcp-server

REMOTE · COURTLISTENER.CASEYJHAND.COM · 2 COMPONENTS

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

0 this week 89 Trust /100

Last scanned (3 hours ago)

Scores higher than 96% of remote servers

Reachable. Last reached 6 Nov 2026.

Category Education and Research

Trust breakdown (7 categories)

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 → Why this is hard to score →

Endpoint Security83
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • No authorisation is required to call this server. Nothing on it is marked destructive, but we can't show that an anonymous caller can only read: full credit needs the server to list at least one tool and every tool to be verifiably read-only. We use a best-effort check of tool names and descriptions to tell read-only tools from tools that change things, so some genuinely read-only tools may not get full credit. Names that start with a read verb (get, list, read, search and similar) and accurate readOnlyHint annotations help. Meet that to earn full credit, or require authorisation. See how to fix → View diagnostics → Partial
  • 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
Schema Quality & AI Usability75
  • 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 4703 tokens (~293/item across 16 items; 14 tools + 2 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 Management100
  • No destabilizing schema changes in the last 30 days.Pass
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
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 14 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 16 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
What we tested

Checks we ran (13)

  • TLS certificate
  • Authorization
  • HTTPS
  • HSTS header
  • DNSSEC
  • Transport
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Does not apply to this hosted endpoint (2)

  • Supply Chain SecurityScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.
  • Provenance & TransparencyScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.

The score does not measure everything. What the score does not measure →

Changelog

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.

  • 6 Nov 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 1 Nov 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “courtlistener_get_docket” rewrote its description, which is the text the model reads security
    • Tool “courtlistener_get_opinion” rewrote its description, which is the text the model reads security
    • New resource “courtlistener-guide” functional
    • Server version: 0.8.0 → 0.9.0 functional
    • “courtlistener_get_opinion” added an optional parameter “enrichment_cursor” cosmetic
    • “courtlistener_get_docket” added an optional parameter “document_ids” cosmetic
    • “courtlistener_get_docket” added an optional parameter “cursor” cosmetic
  • 18 Oct 26 0
    • Tool “courtlistener_get_financial_disclosure” rewrote its description, which is the text the model reads security
    • Tool “courtlistener_get_opinion” rewrote its description, which is the text the model reads security
    • Tool “courtlistener_get_oral_argument” rewrote its description, which is the text the model reads security
    • Tool “courtlistener_get_parties” rewrote its description, which is the text the model reads security
    • Server version: 0.7.3 → 0.8.0 functional
    • “courtlistener_get_oral_argument” added an optional parameter “cursor” cosmetic
    • “courtlistener_get_financial_disclosure” added an optional parameter “cursor” cosmetic
    • “courtlistener_get_opinion” added an optional parameter “cursor” cosmetic
    • “courtlistener_get_parties” reworded the description of “page_size” cosmetic
    • “courtlistener_search_dockets” reworded the description of “page_size” cosmetic
    • “courtlistener_search_financial_disclosures” reworded the description of “page_size” cosmetic
    • “courtlistener_search_judges” reworded the description of “page_size” cosmetic
    • “courtlistener_search_opinions” reworded the description of “page_size” cosmetic
    • “courtlistener_search_opinions” reworded the description of “status” cosmetic
    • “courtlistener_search_oral_arguments” reworded the description of “page_size” cosmetic
    • “courtlistener_get_citations” reworded the description of “page_size” cosmetic
    • “courtlistener_get_citations” reworded the description of “cursor” cosmetic
    • “courtlistener_get_opinion” reworded the description of “sections” cosmetic
    • “courtlistener_get_oral_argument” reworded the description of “sections” cosmetic
    • “courtlistener_get_financial_disclosure” reworded the description of “categories” cosmetic
  • 30 Sept 26 0
    • Server version: 0.7.2 → 0.7.3 functional
  • 29 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Server version: 0.7.1 → 0.7.2 functional
  • 28 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 9 Sept 26 0
    • Stability: 0.97 → pass security
Diagnostics

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 6 Nov 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 2 Nov 2026 31 Jan 2027 ECDSA 256 ECDSA-SHA256 995a30681ab772540e934241ca1d576c
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

Background: What to check on a remote MCP endpoint →

DNSSEC secure

Validation of courtlistener.caseyjhand.com. — Secure

Zone DS Keys Algorithms Outcome
. Trust anchor 20326, 38696 8, 8 Verified
com. DS published 19718 13 Verified
caseyjhand.com. DS published 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

Background: How OAuth 2.1 works in the 2026 MCP spec →

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
MCP tools · 14 exposed · ~4,460 tokens

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. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
courtlistener_get_citations ~368

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.

NameTypeReqDescription
cluster_idintegeryesOpinion 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.
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 preserved…
NameTypeReqDescription
directionstring–Direction of the citation relationship returned.
errorobject–Present when the call failed. Absent on success.
next_cursorstring|null–Pagination cursor for the next page; null when no more results.
noticestring–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.
observed_totalnumber–Citation total observed from the fetched source variants; a lower bound when total_is_partial is true.
page_sizingobject–Requested, bounded, and actual page sizes.
resultsarray–Related opinions in the citation network.
source_case_namestring–Case name for the source cluster.
source_cluster_idnumber–The cluster ID this citation network is for.
source_variants_completionobject–Completion of the source opinion-variant walk.
totalCountnumber–Exact total for the fetched direction when source variants are complete; absent when total_is_partial is true. For cited_by this counts matching clusters after filters; for citing it counts distinct…
total_is_partialboolean–True when citation results and totals are based on an incomplete source-variant set.

No examples provided.

courtlistener_get_docket ~302

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; continue retrieval.next_cursor as cursor with the same docket_id, entries_page and document_ids. Top-level next_cursor remains entries pagination. File availability and extracted-text status are independent. Obtain docket IDs from courtlistener_search_dockets or opinion results.

NameTypeReqDescription
cursorstring–Retrieval next_cursor from the previous response. Repeat the original ID and sections/categories selection unchanged; omit to start.
docket_idintegeryesDocket 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.
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 beyon…
NameTypeReqDescription
assigned_tostring|null–Assigned judge name; null if not recorded.
case_namestring–Short case name.
case_name_fullstring–Full case name.
causestring–Legal cause of action.
courtstring–Court display name for major federal courts; the court identifier otherwise.
court_idstring–Court identifier — the stable value for filtering.
date_filedstring–Date the case was filed.
date_terminatedstring|null–Date the case was terminated; null if active.
docket_idnumber–Requested docket ID.
docket_numberstring–Docket number.
document_idsarray–Normalized selected document IDs; deferred oversized selections are recovered through retrieval ranges.
entriesarray–Docket entries for this page (fixed at 20 per page; entries_page_size is not honored by upstream).
entries_pagenumber–Entries page containing the selected documents.
errorobject–Present when the call failed. Absent on success.
jurisdiction_typestring–Jurisdiction type.
jury_demandstring–Jury demand status.
kindstring–Bounded selected-document retrieval mode.
next_cursorstring|null–Next entries page; independent of retrieval.next_cursor.
pacer_case_idstring|null–PACER case ID; null if not in RECAP.
page_sizingobject–Requested, bounded, and actual page sizes.
referred_tostring|null–Referred judge name; null if not recorded.
retrievalobject–Caller retrieval completion, separate from upstream source completion.
retrieval_noticestring–Instructions for reconstructing selected source records.
sectionsarray–Deferred selected-document groups.
selected_documentsarray–Selected source records; partial fields are recovered by retrieval ranges and text_chunks.
total_entriesnumber|null–Total number of docket entries available; null when upstream supplies no numeric total. May exceed the returned entries list.

No examples provided.

courtlistener_get_financial_disclosure ~172

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 responses; continue retrieval.next_cursor as cursor with the unchanged ID/categories selection until null. Large individual row fields remain recoverable through text_chunks.

NameTypeReqDescription
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_idintegeryesFinancial disclosure ID — the disclosure_id field from a courtlistener_search_financial_disclosures result.
NameTypeReqDescription
agreementsarray–Continuing agreements.
countsobject–Count of line items in each disclosure category.
debtsarray–Debts and liabilities.
disclosure_idnumber–Financial disclosure ID.
errorobject–Present when the call failed. Absent on success.
giftsarray–Reported gifts.
has_been_extractedboolean–True if line items were parsed from the PDF; category arrays are empty when false.
investmentsarray–Investment holdings.
is_amendedboolean–True if this filing is an amendment.
kindstring–'full' carries a small selected record; 'outline' pages the section catalog; 'page' carries typed rows and field-path text chunks. Filing identity and counts remain present.
non_investment_incomesarray–Non-investment income sources.
page_countnumber|null–Page count of the source filing; null if not recorded.
pdf_urlstring|null–URL to the source disclosure PDF; null if unavailable.
person_idnumber|null–Person ID of the filer — pass to courtlistener_get_judge; null if absent.
positionsarray–Outside positions.
reimbursementsarray–Reimbursements.
report_typestring–Report type (Nomination, Initial, Annual, Final, or Unknown).
retrievalobject–Caller retrieval completion, separate from upstream source completion.
retrieval_noticestring–How to continue bounded retrieval using the unchanged ID and selection.
sectionsarray–Category catalog in declared order, with paged metadata fields. Follow retrieval.next_cursor to finish the catalog and retrieve data.
spouse_incomesarray–Spouse income sources.
yearnumber–Filing year.

No examples provided.

courtlistener_get_judge ~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.

NameTypeReqDescription
person_idintegeryesJudge person ID from a search result's person_id field. Identifies a specific judge across all courts they have served on.
NameTypeReqDescription
aba_ratingsarray–ABA qualification ratings, expanded to readable labels (e.g., "Well Qualified").
dobstring|null–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_citystring|null–City of birth; null if not recorded.
dob_granularitystring|null–Precision actually recorded for dob: "year", "month", or "day". Null when CourtListener recorded no precision. An unrecognized upstream value passes through unchanged.
dob_statestring|null–State of birth; null if not recorded.
dodstring|null–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_granularitystring|null–Precision actually recorded for dod: "year", "month", or "day". Null when CourtListener recorded no precision.
educationarray–Educational history.
errorobject–Present when the call failed. Absent on success.
fjc_idnumber|null–Federal Judicial Center ID for cross-referencing with FJC data; null if not available.
genderstring–Gender.
namestring–Full name.
noticestring–Present only when positions[] was truncated: what was withheld.
person_idnumber–Person ID.
political_affiliationsarray–Political affiliation history.
positionsarray–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…
positionsShownnumber–Number of position records returned.
truncatedboolean–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 ~276

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; continue retrieval.next_cursor as cursor with the unchanged ID/sections selection until null. Oversized docket backfill has independent enrichment_retrieval coordinates; continue its next_cursor as enrichment_cursor and discard prior enrichment slices when source_id changes. Obtain cluster IDs from courtlistener_search_opinions, courtlistener_lookup_citation, or docket results.

NameTypeReqDescription
cluster_idintegeryesOpinion 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…
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.
NameTypeReqDescription
case_namestring–Short case name.
case_name_fullstring–Full case name with parties.
citationsarray–All known citation strings for this case.
cite_countnumber–Total number of citations from other opinions.
cluster_idnumber–Opinion cluster ID.
courtstring–Court display name.
court_idstring–Court identifier.
date_filedstring–Date the opinion was filed.
docket_enrichmentobject–Linked-docket enrichment outcome, independent of opinion text availability.
docket_idnumber–Associated docket ID.
docket_numberstring–Docket number.
enrichment_retrievalobject–Independent coordinates for oversized docket backfill fields. Paths refer to top-level fields, independently of primary retrieval ranges. Continue with enrichment_cursor; changed enrichment restarts…
errorobject–Present when the call failed. Absent on success.
judgesstring–Judge names.
kindstring–'full' carries a small selected record; 'outline' pages the section catalog; 'page' carries typed rows and field-path text chunks. Bounded identity remains present throughout retrieval.
opinionsarray–Fetched variants; variants_completion describes source coverage. Pages can contain partial typed variants; omitted text is recoverable through retrieval.text_chunks at original field paths.
posturestring–Procedural posture (may be empty).
precedential_statusstring–Publication/precedential status.
retrievalobject–Caller retrieval completion, separate from upstream source completion.
retrieval_noticestring–How to continue bounded retrieval using the unchanged ID and selection.
sectionsarray–Section catalog in source order, including paged metadata. Only opinion_<id> names select variants; follow retrieval.next_cursor to finish the catalog and retrieve data.
syllabusstring–Syllabus text (may be empty).
variants_completionobject–Source-walk completion. An oversized upstream next_cursor is omitted on partial responses and recovered at /variants_completion/next_cursor through retrieval.text_chunks.

No examples provided.

courtlistener_get_oral_argument ~181

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 with the unchanged ID/sections selection until null. The argument date comes from search or the linked docket.

NameTypeReqDescription
cursorstring–Retrieval next_cursor from the previous response. Repeat the original ID and sections/categories selection unchanged; omit to start.
idintegeryesAudio 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 fo…
NameTypeReqDescription
case_namestring–Case name.
case_name_fullstring–Full case name with parties.
docket_idnumber–Associated docket ID; 0 if not linked.
download_urlstring|null–Direct MP3 download URL; null if not available.
duration_secondsnumber–Recording duration in seconds.
errorobject–Present when the call failed. Absent on success.
has_transcriptboolean–True if a speech-to-text transcript is available.
judgesstring–Free-text judge names; often empty on this endpoint.
kindstring–'full' carries a small selected record; 'outline' pages the section catalog; 'page' carries fields and text chunks. Bounded identity remains present throughout retrieval.
oral_argument_idnumber–Audio recording ID.
panel_idsarray–Person IDs of panel judges — pass to courtlistener_get_judge.
retrievalobject–Caller retrieval completion, separate from upstream source completion.
retrieval_noticestring–How to continue bounded retrieval using the unchanged ID and selection.
sectionsarray–Section catalog: transcript and paged metadata fields. Follow retrieval.next_cursor to finish the catalog and retrieve data.
transcriptstring–Speech-to-text transcript; empty if transcription has not completed. Oversized text is recovered through retrieval.text_chunks at /transcript.

No examples provided.

courtlistener_get_parties ~260

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 plus up to five attorney roster requests. A later roster page blocked by the local request budget returns fetched detail with capped resolution, unresolved IDs, and the remaining roster cursor. Obtain docket IDs from courtlistener_search_dockets or courtlistener_get_docket.

NameTypeReqDescription
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 value…
docket_idintegeryesDocket 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 reques…
NameTypeReqDescription
attorney_resolutionobject–Attorney lookup completeness; no additional automatic requests are made.
docket_idnumber–Docket ID these parties belong to.
errorobject–Present when the call failed. Absent on success.
next_cursorstring|null–Opaque pagination cursor for the next page — pass it back as the `cursor` argument; null when this is the last page.
page_sizingobject–Requested, bounded, and actual page sizes.
partiesarray–Parties on this page.
totalCountnumber–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_partiesnumber|null–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 ~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.

NameTypeReqDescription
citationstringyesText 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_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 entire…
NameTypeReqDescription
errorobject–Present when the call failed. Absent on success.
matchesarray–One entry per citation CourtListener extracted from the input, in the order they appear.
noticestring–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…
queriedCitationstring–The citation string that was looked up.

No examples provided.

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

NameTypeReqDescription
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, 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 no…
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. The…
NameTypeReqDescription
all_matching_court_idsarray–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_completeboolean–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…
courtsarray–Matching courts on this page.
errorobject–Present when the call failed. Absent on success.
next_cursorstring|null–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…
noticestring–Recovery hint when no courts match the applied filters.
pagenumber–Current page number (1-indexed).
totalCountnumber–Total courts returned.

No examples provided.

courtlistener_search_dockets ~334

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.

NameTypeReqDescription
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 ac…
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.
qstringyesQuery terms matched against case name, docket number, party names, and attorney names. Example: "Apple Inc patent infringement".
NameTypeReqDescription
coverage_notestring–Note about RECAP coverage limitations.
errorobject–Present when the call failed. Absent on success.
next_cursorstring|null–Pagination cursor for the next page; null when no more results.
noticestring–Recovery hint when results are empty — echoes filters and suggests how to broaden.
page_sizingobject–Requested, bounded, and actual page sizes.
resultsarray–Matching docket records.
totalCountnumber–Total matching dockets.

No examples provided.

courtlistener_search_financial_disclosures ~365

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.

NameTypeReqDescription
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;…
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 a…
NameTypeReqDescription
errorobject–Present when the call failed. Absent on success.
next_cursorstring|null–Pagination cursor for the next page; null when no more results.
noticestring–Recovery hint when no filings are found — echoes filters and suggests next steps.
page_sizingobject–Requested, bounded, and actual page sizes.
resultsarray–Matching financial disclosure filings.
totalCountnumber–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 ~283

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.

NameTypeReqDescription
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 ac…
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.
qstringyesSearch query — judge name, court, city, or relevant keywords.
NameTypeReqDescription
errorobject–Present when the call failed. Absent on success.
next_cursorstring|null–Pagination cursor for the next page; null when no more results.
noticestring–Recovery hint when results are empty — echoes filters and suggests how to broaden.
page_sizingobject–Requested, bounded, and actual page sizes.
resultsarray–Matching judge records.
totalCountnumber–Total matching judge records.

No examples provided.

courtlistener_search_opinions ~485

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.

NameTypeReqDescription
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.
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 preserv…
qstringyesFull-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. "…
NameTypeReqDescription
effectiveQuerystring–Query terms sent to CourtListener.
errorobject–Present when the call failed. Absent on success.
next_cursorstring|null–Pagination cursor for the next page; null when no more results.
noticestring–Recovery hint when results are empty — echoes filters and suggests how to broaden.
page_sizingobject–Requested, bounded, and actual page sizes.
resultsarray–Matching opinion cluster summaries.
totalCountnumber–Total matching opinions in the corpus.

No examples provided.

courtlistener_search_oral_arguments ~246

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.

NameTypeReqDescription
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 ac…
qstringyesQuery terms matched against case name and transcribed argument text (where available).
NameTypeReqDescription
errorobject–Present when the call failed. Absent on success.
next_cursorstring|null–Pagination cursor for the next page; null when no more results.
noticestring–Recovery hint when results are empty — echoes filters and suggests how to broaden.
page_sizingobject–Requested, bounded, and actual page sizes.
resultsarray–Matching oral argument recordings.
totalCountnumber–Total matching oral argument recordings.

No examples provided.

Install

How do I install the io.github.cyanheads/courtlistener-mcp-server server?

io.github.cyanheads/courtlistener-mcp-server is a hosted endpoint at https://courtlistener.caseyjhand.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · courtlistener.caseyjhand.com

# add to Claude Code
claude mcp add --transport http cyanheads-courtlistener-mcp-server 'https://courtlistener.caseyjhand.com/mcp'
Common questions

What is the io.github.cyanheads/courtlistener-mcp-server server?

io.github.cyanheads/courtlistener-mcp-server is listed in the public MCP registry as io.github.cyanheads/courtlistener-mcp-server. Search US court opinions, federal dockets, judges, citations, and oral arguments via CourtListener. This page covers its hosted endpoint (https://courtlistener.caseyjhand.com/mcp).

Is the io.github.cyanheads/courtlistener-mcp-server server safe to use?

io.github.cyanheads/courtlistener-mcp-server scores 89 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.cyanheads/courtlistener-mcp-server server expose?

io.github.cyanheads/courtlistener-mcp-server exposes 14 tools: courtlistener_search_opinions, courtlistener_get_opinion, courtlistener_get_citations, courtlistener_lookup_citation, courtlistener_search_dockets, and 9 more. Their descriptions and schemas cost roughly 4,460 tokens of context every time the server is loaded.

Does the io.github.cyanheads/courtlistener-mcp-server server require authentication?

No. We connected to io.github.cyanheads/courtlistener-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the io.github.cyanheads/courtlistener-mcp-server server still maintained?

io.github.cyanheads/courtlistener-mcp-server is still listed as active in the MCP registry. We last reached this channel on 6 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What did VerifyMCP test on the io.github.cyanheads/courtlistener-mcp-server server?

VerifyMCP ran 13 checks on io.github.cyanheads/courtlistener-mcp-server, covering TLS certificate, Authorization, HTTPS, HSTS header and 9 more. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.