Skip to main content
Glama

Server Details

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

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
cyanheads/courtlistener-mcp-server
GitHub Stars
2
Server Listing
@cyanheads/courtlistener-mcp-server

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.5/5 across 13 of 13 tools scored.

Server CoherenceA
Disambiguation5/5

Each tool targets a distinct entity or operation (e.g., get vs search, opinions vs dockets vs judges), with no functional overlap. All 13 tools have clearly separate purposes.

Naming Consistency5/5

All tools follow a consistent pattern: 'courtlistener_' plus a verb (get, lookup, search) followed by a noun. Verbs indicate operation type (fetch single item vs. search) and nouns clearly identify the entity.

Tool Count5/5

13 tools is well-scoped for a legal research domain covering opinions, dockets, judges, citations, oral arguments, parties, and financial disclosures. Each tool earns its place without redundancy.

Completeness5/5

The server provides complete coverage for the intended use case: searching and retrieving key legal entities. It offers both lookup and search for citations, courts, opinions, dockets, judges, oral arguments, and financial disclosures with no obvious gaps.

Available Tools

14 tools
courtlistener_get_citationsGet Citation NetworkA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
courtNoFilter results to a specific court (e.g., "scotus", "ca9"). Applies to both directions.
cursorNoPagination cursor from a previous response's next_cursor field.
directionNo"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.cited_by
page_sizeNoNumber 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 results. direction="citing" returns at most page_size (the cited-opinion list is sliced before querying) — fewer when the opinion cites fewer than page_size distinct opinions. Either direction costs three requests against the rate limit (a case with many opinion variants costs one more per extra variant page) — keep low for multi-hop traversal.
cluster_idYesOpinion cluster ID to retrieve citations for. Obtain from courtlistener_search_opinions or courtlistener_lookup_citation.
filed_afterNoLimit to citations filed after this date (ISO 8601). For "cited_by", useful for "how has this precedent been applied recently?"

Output Schema

ParametersJSON Schema
NameRequiredDescription
noticeNoContext 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.
resultsYesRelated opinions in the citation network.
directionYesDirection of the citation relationship returned.
totalCountYesTotal 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, before any filter — so it exceeds what the filters make reachable, and runs higher than the result rows, which are clusters (several cited opinions in one case collapse to one row).
next_cursorYesPagination cursor for the next page; null when no more results.
source_case_nameYesCase name for the source cluster.
source_cluster_idYesThe cluster ID this citation network is for.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the readOnlyHint annotation by explaining the two directions' precedential meaning and adding a critical operational warning about rate limits and daily budget. This provides behavioral context not present in the annotations, though some details like pagination are left to the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, front-loaded with the purpose, then directions, then usage guidance and a budget note. Every sentence earns its place with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with multiple parameters and an output schema, the description covers purpose, directions, usage context, and rate-limit implications. The existence of an output schema means return-value details are already handled, so the description is sufficiently complete for guiding an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the input schema already documents all parameters with detailed semantics (e.g., direction enum, page_size behavior, cluster_id origin). The description does not add parameter-level detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Retrieve the citation network for an opinion cluster' — a specific verb+resource that clearly distinguishes it from sibling tools like courtlistener_get_opinion. It further clarifies the two directions ('cited_by' and 'citing') and their legal significance, making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly identifies this as 'the primary tool for tracing legal precedent chains,' giving clear usage context. It also cautions about free-tier depth limitations ('deep multi-hop analysis burns through the daily budget quickly'), which helps set expectations. It does not explicitly name alternatives or state when not to use the tool, but the use case is well-defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

courtlistener_get_docketGet DocketA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
docket_idYesDocket ID from a search result's docket_id field or from an opinion cluster result.
entries_pageNoPage 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_sizeNoRequested 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 beyond the first 20 (large cases can have hundreds).

Output Schema

ParametersJSON Schema
NameRequiredDescription
causeYesLegal cause of action.
courtYesCourt display name for major federal courts; the court identifier otherwise.
entriesYesDocket entries for this page (fixed at 20 per page; entries_page_size is not honored by upstream).
court_idYesCourt identifier — the stable value for filtering.
case_nameYesShort case name.
docket_idYesDocket ID.
date_filedYesDate the case was filed.
assigned_toYesAssigned judge name; null if not recorded.
jury_demandYesJury demand status.
next_cursorYesNext page number to pass as the `entries_page` argument (docket entries are page-paginated); null when this is the last page.
referred_toYesReferred judge name; null if not recorded.
entries_pageYesCurrent entries page number (1-indexed).
docket_numberYesDocket number.
pacer_case_idYesPACER case ID; null if not in RECAP.
total_entriesYesTotal number of docket entries available — may exceed the returned entries list.
case_name_fullYesFull case name.
date_terminatedYesDate the case was terminated; null if active.
jurisdiction_typeYesJurisdiction type.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is known. The description adds valuable behavioral details about the is_available field and the RECAP vs. PACER distinction, which goes beyond the annotations. It also implies pagination through 'all available' but the schema clarifies the actual paging behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, with the action front-loaded in the first sentence. Every sentence contributes key information: what it returns, the availability caveat, and how to obtain IDs. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists, and the description conveys the core data shape and the RECAP/PACER context. While the main text doesn't discuss pagination explicitly, the parameter schema covers it thoroughly. Given the tool's complexity, the description is adequately complete and actionable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with detailed per-parameter explanations, including the fixed 20-entry page size behavior. The description adds context that docket_id comes from search results or opinions, which is not in the schema. This pairing makes parameter semantics very clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches full docket metadata and entry list for a single federal case by docket ID, using a specific verb-resource structure. It distinguishes itself from search tooling by explicitly noting docket IDs come from courtlistener_search_dockets or opinion results, avoiding confusion with sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context that this tool is for fetching by an existing docket ID, and tells the user where to obtain those IDs. It doesn't explicitly state when-not-to-use or list alternatives like get_parties, but the instruction to get IDs from search implies it is not a search tool. This is sufficient for most use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

courtlistener_get_financial_disclosureGet Financial DisclosureA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
categoriesNoLine-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 overflow the inline budget). Also the re-call selector — after an outline response, re-call with the category names it lists.
disclosure_idYesFinancial disclosure ID — the disclosure_id field from a courtlistener_search_financial_disclosures result.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindYes'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 present either way.
yearYesFiling year.
debtsNoDebts and liabilities.
giftsNoReported gifts.
countsYesCount of line items in each disclosure category.
pdf_urlYesURL to the source disclosure PDF; null if unavailable.
sectionsNoRetrievable categories, largest first — pass names to `categories` on a re-call.
person_idYesPerson ID of the filer — pass to courtlistener_get_judge; null if absent.
positionsNoOutside positions.
agreementsNoContinuing agreements.
is_amendedYesTrue if this filing is an amendment.
page_countYesPage count of the source filing; null if not recorded.
investmentsNoInvestment holdings.
report_typeYesReport type (Nomination, Initial, Annual, Final, or Unknown).
disclosure_idYesFinancial disclosure ID.
reimbursementsNoReimbursements.
spouse_incomesNoSpouse income sources.
retrieval_noticeNoHow to re-call the tool for specific categories when the itemization overflows.
has_been_extractedYesTrue if line items were parsed from the PDF; category arrays are empty when false.
non_investment_incomesNoNon-investment income sources.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, but the description adds meaningful behavioral context: decoded value/income columns into readable dollar ranges, overflow handling where large responses become outlined sections with byte sizes, and the need to re-call for full categories. This is beyond what annotations provide and no contradictions exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact yet information-dense, front-loaded with the core purpose, then covering category selection, decoding, overflow behavior, and ID sourcing. Every sentence earns its place without redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the parameter count, schema richness, and output schema presence, the description fully covers the usage workflow, including how to obtain IDs, optional category filtering, and handling large responses. It leaves no significant gaps for the agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters, so baseline is 3. The description adds extra value by explaining the 'omit for all' behavior for categories, framing categories as the re-call selector, and concretely mapping disclosure_id to the search result field. This goes beyond the schema but is not dramatically richer.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb ('Fetch a single judicial financial disclosure by ID') and enumerates the parsed line-item rows (investments, debts, positions, etc.). It explicitly distinguishes itself from courtlistener_search_financial_disclosures as the itemized companion, so it is clearly differentiated from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides direct usage guidance: obtain disclosure IDs from courtlistener_search_financial_disclosures, pass categories to select specific categories or omit for all, and re-call with categories after an outline response for full itemization. This tells the agent when and how to use the tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

courtlistener_get_judgeGet Judge ProfileA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
person_idYesJudge person ID from a search result's person_id field. Identifies a specific judge across all courts they have served on.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dobYesDate 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. Null if not recorded.
dodYesDate of death as CourtListener stores it, always full ISO 8601 — precision qualified by dod_granularity, as with dob. Null if living or not recorded.
nameYesFull name.
fjc_idYesFederal Judicial Center ID for cross-referencing with FJC data; null if not available.
genderYesGender.
noticeNoPresent only when positions[] was truncated: what was withheld.
dob_cityYesCity of birth; null if not recorded.
dob_stateYesState of birth; null if not recorded.
educationYesEducational history.
person_idYesPerson ID.
positionsYesPositions 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. CourtListener paginates this list and the walk is bounded, so read the truncated flag before treating it as a complete career.
truncatedYesTrue 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.
aba_ratingsYesABA qualification ratings, expanded to readable labels (e.g., "Well Qualified").
positionsShownYesNumber of position records returned.
dob_granularityYesPrecision actually recorded for dob: "year", "month", or "day". Null when CourtListener recorded no precision. An unrecognized upstream value passes through unchanged.
dod_granularityYesPrecision actually recorded for dod: "year", "month", or "day". Null when CourtListener recorded no precision.
political_affiliationsYesPolitical affiliation history.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and idempotent behavior. The description adds useful context about pagination of the position list and truncation reporting, which is not captured in annotations. This helps the agent interpret response characteristics without contradicting any annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the core purpose, followed by relevant behavioral details and a clear source for the parameter. Every sentence contributes meaningful information without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the availability of an output schema and annotations, the description adequately covers the tool's scope, including pagination behavior and truncation reporting, and directs the user to the appropriate search tool for obtaining IDs. It is complete for a read-only fetch operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides a clear description of person_id, including its source and meaning. The tool description's mention of obtaining IDs from search results is redundant with the schema. No additional parameter semantics are added beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a full biographical profile for a single judge, listing specific data types (positions, education, affiliations, ABA ratings). It distinguishes itself from sibling search tools by emphasizing 'single judge' and 'full biographical profile'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs users to obtain person IDs from courtlistener_search_judges results, providing a clear workflow. It does not mention explicit exclusions or alternatives, but the context is sufficient for an agent to understand when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

courtlistener_get_opinionGet Court OpinionA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionsNoOpinion 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.
cluster_idYesOpinion cluster ID — identifies a case decision and groups all opinion variants (majority, concurrence, dissent). Obtain from courtlistener_search_opinions, courtlistener_lookup_citation, or from docket results that link to opinions.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindYes'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 metadata is present either way.
courtYesCourt display name.
judgesYesJudge names.
postureYesProcedural posture (may be empty).
court_idYesCourt identifier.
opinionsNoAll opinion variants within this cluster. Present in full mode; omitted in outline mode — re-call with sections:["opinion_<id>"] to retrieve specific variants.
sectionsNoRetrievable opinion variants, largest first — pass names to `sections` on a re-call.
syllabusYesSyllabus text (may be empty).
case_nameYesShort case name.
citationsYesAll known citation strings for this case.
docket_idYesAssociated docket ID.
cite_countYesTotal number of citations from other opinions.
cluster_idYesOpinion cluster ID.
date_filedYesDate the opinion was filed.
docket_numberYesDocket number.
case_name_fullYesFull case name with parties.
retrieval_noticeNoHow to re-call the tool for specific opinion variants when the opinions overflow.
precedential_statusYesPublication/precedential status.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the overflow/outline behavior, the meaning of sections, and the return structure. It goes well beyond the readOnlyHint/idempotentHint annotations by explaining what happens when the response is too large and how to retrieve specific variants, which is non-obvious behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although several sentences long, every sentence contributes unique information. The main purpose is front-loaded, followed by the cluster explanation, return format, overflow handling, and ID sourcing. No redundant or filler language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only tool with an output schema, the description covers all necessary context: what data is returned, how to handle large responses, and where to find the input ID. It is self-sufficient and leaves no major gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful context for both parameters: cluster_id is tied to the cluster concept and section identifiers are explained as coming from a prior outline response. This enhances the schema's descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Fetch the full text and metadata for a single opinion cluster by cluster ID.' It clarifies the cluster concept and distinguishes this from sibling tools by explaining why you'd use it (obtaining a specific cluster) and how to get cluster IDs via other tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly names the alternatives for obtaining cluster IDs (courtlistener_search_opinions, courtlistener_lookup_citation, docket results) and provides clear guidance on when to use sections for oversized responses. This directly tells the agent how to integrate with sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

courtlistener_get_oral_argumentGet Oral ArgumentA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAudio recording ID — the audio_id field from a courtlistener_search_oral_arguments result.
sectionsNoSection 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" therefore returns the record without it. Omit this argument entirely for the whole record, or the record minus an oversized transcript.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindYes'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.
judgesNoFree-text judge names; often empty on this endpoint.
sectionsNoSections withheld from this response — only ever `transcript`; pass its name to `sections` on a re-call. Absent when nothing was withheld.
case_nameNoCase name.
docket_idNoAssociated docket ID; 0 if not linked.
panel_idsNoPerson IDs of panel judges — pass to courtlistener_get_judge.
transcriptNoSpeech-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.
download_urlNoDirect MP3 download URL; null if not available.
case_name_fullNoFull case name with parties.
has_transcriptNoTrue if a speech-to-text transcript is available.
duration_secondsNoRecording duration in seconds.
oral_argument_idNoAudio recording ID.
retrieval_noticeNoHow to re-call the tool for the transcript when it overflows the inline budget.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description discloses the record's field composition, the conditional withholding of long transcripts, and the exact re-call behavior with sections:['transcript']. It also notes the absence of argument date, a useful behavioral caveat. This goes well beyond the annotation hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each carrying distinct information: primary purpose, key return fields, transcript special case, and date caveat. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a get-by-id tool with an output schema and annotations, the description covers the main use case, return fields, special transcript behavior, and the date limitation. It leaves no obvious gap for an agent to misuse the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides full descriptions for both parameters (100% coverage). The description adds crucial semantic linkage: id is defined as the audio_id from the search tool, and sections is explained in terms of transcript retrieval and the distinction between omitting vs including. This enriches parameter understanding beyond the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Fetch the full detail record for a single oral argument audio recording by its ID' — a specific verb+resource. It clarifies the ID source from courtlistener_search_oral_arguments, distinguishing it from other get_* tools. This is a clear, specific purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the ID comes from courtlistener_search_oral_arguments, implying the natural workflow of searching first. It also warns that the argument date is not on this record and must come from the search result or the linked docket, providing explicit guidance on where to find that data. No direct comparison to alternatives, but the reference to the search counterpart and the distinction from other get tools provide adequate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

courtlistener_get_partiesGet PartiesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination 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 selects nothing and re-serves the first page.
docket_idYesDocket ID from a courtlistener_search_dockets or courtlistener_get_docket result's docket_id field.
page_sizeNoRequested 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
partiesYesParties on this page.
docket_idYesDocket ID these parties belong to.
totalCountNoTotal 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 any list spanning more than one page.
next_cursorYesOpaque pagination cursor for the next page — pass it back as the `cursor` argument; null when this is the last page.
total_partiesYesTotal 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 last.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and idempotentHint annotations, the description discloses important behavioral traits: 'Costs two upstream requests per call (parties + attorney lookup) against a rate-limited free tier, and one more for each extra page' and notes that 'CourtListener paginates this endpoint at a fixed size and does not honor the requested value.' This adds significant value for the agent's decision-making.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each earning its place: purpose, cost/behavior, and source of docket IDs. It is front-loaded with the primary function and includes no filler or repetition. The form is compact yet information-dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's pagination complexity, rate-limit implications, and the presence of a rich output schema, the description covers all necessary context: scope, input source, cost, pagination quirks, and page-size behavior. The output schema handles return-value details, and the description fills behavioral gaps completely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers 100% of parameters with descriptions. The tool description adds extra context beyond schema, e.g., explaining that page_size is not honored ('does not honor the requested value') and that cursor is an opaque token, not a page number. This enriches parameter understanding beyond the schema's baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Fetch all parties and attorneys of record for a RECAP federal docket by docket ID.' It specifies the resource (parties/attorneys), scope (docket), and output (names, roles, attorneys with contact info), distinguishing it from sibling tools like get_docket (docket metadata) and get_opinion (opinion content).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit guidance on obtaining docket IDs: 'Obtain docket IDs from courtlistener_search_dockets or courtlistener_get_docket.' It also warns about rate-limiting costs and pagination behavior. However, it does not explicitly state when to choose this tool over alternatives, though the purpose is clear enough that no exclusions are needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

courtlistener_lookup_citationLookup Legal CitationA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
citationYesText 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 reporter formats. Up to 64000 characters, which is CourtListener's own ceiling; a longer passage is rejected here rather than spending a request to be refused upstream.
max_court_lookupsNoHow 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 entirely from the ordinary per-request allowance — published free tier 5/min, 50/hour, 125/day, varying by token tier. 0 skips court resolution and costs nothing beyond the lookup; 20 is the ceiling. Clusters past the budget come back with court null and court_resolution "over_budget".

Output Schema

ParametersJSON Schema
NameRequiredDescription
noticeNoCaveats 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 or an attempted lookup returned nothing, since only the first is worth retrying with a larger budget. Absent when none applies.
matchesYesOne entry per citation CourtListener extracted from the input, in the order they appear.
queriedCitationYesThe citation string that was looked up.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description discloses rich behavioral detail: it extracts every citation from a passage and returns a result per citation, unresolved citations are reported not errors, quota mechanics (per-citation plus per-docket requests, max_court_lookups budget), and authentication requirement. This greatly exceeds annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than two sentences but every sentence adds a distinct piece of information: purpose, use-case, extraction behavior, error handling, formats, quota, authentication. It is front-loaded with the core purpose, and while dense, it is well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with this complexity (citation extraction, quota nuances, optional court resolution), the description covers all critical operational aspects: what it returns (cluster IDs and metadata), how errors are surfaced (reported not raised), limits (max_court_lookups, char limit), and auth. The output schema exists, so return values need no further elaboration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaningful semantic context: citation length limit (64000 chars) and behavior for passed passages, plus max_court_lookups budget semantics and default/ceiling. This enriches the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Resolve legal citations... to opinion cluster IDs and case metadata.' This clearly distinguishes it from sibling search and get tools. The examples of citation formats further anchor the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states the workflow context: 'Enables workflows that start from a known citation rather than a search query,' which contrasts with search tools. It does not name alternatives directly, but the 'rather than a search query' phrasing implies the distinction. No explicit when-not-to-use, but the use case is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

courtlistener_lookup_courtsLookup CourtsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage 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 way to pull a larger page. Pass the next_cursor from a previous response here to walk them one call at a time.
statusNoWhich 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 two filtered sets are disjoint, so 'any' is the only value that reaches the whole list — but reaching all of it means paging, one call per 20 courts, and the inactive bench is several times larger than the active one. Prefer the narrowest value that answers the question, and narrow with jurisdiction rather than paging the full list.active
jurisdictionNoJurisdiction 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=State Supreme, SA=State Appellate, ST=State Trial, SS=State Special, SAG=State Attorney General, TRS=Tribal Supreme, TRA=Tribal Appellate, TRT=Tribal Trial, TRX=Tribal Special, TS=Territory Supreme, TA=Territory Appellate, TT=Territory Trial, TSP=Territory Special, MA=Military Appellate, MT=Military Trial, C=Committee, I=International. Omit to list all. SCOTUS and the numbered circuits are F; USITC and FISC are FS. Upstream's Testing code is not offered here: /courts/ excludes testing courts from every response, so a filter on it can only ever return nothing. Accepted but matching no court as of the 2026-07-30 snapshot: TSP, MT. Courts whose stored jurisdiction is not one of these codes (njcirctsussex, ohctapp1) are unreachable through this filter at any value — the value they store is not one the filter accepts. Pass those ids straight to the tool that needs them, or list with no jurisdiction filter.
has_opinion_scraperNoFilter to courts with active opinion scraping. Useful when planning search queries — courts without scrapers have sparse coverage.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageYesCurrent page number (1-indexed).
courtsYesMatching courts on this page.
noticeNoRecovery hint when no courts match the applied filters.
totalCountYesTotal courts returned.
next_cursorYesNext 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 the filtered set.
all_matching_court_idsYesEvery 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 only needed for the fields a court id alone does not carry (full_name, citation_string, scraper flags). Empty when more than 1000 courts match, since a prefix of the set would be indistinguishable from the whole of it — check all_matching_court_ids_complete before reading emptiness as "no courts match". A court added or retired upstream since the snapshot date appears in `courts` but may be missing here.
all_matching_court_ids_completeYesTrue 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 narrow.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond readOnlyHint/openWorldHint, the description discloses the snapshot-vs-live paging behavior, 20-row fixed page size, default active bench, and unreachable/testing court edge cases. This is extensive behavioral context that annotations alone don't provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence is information-dense and earns its place: purpose, default behavior, snapshot/paging distinction, and caveats. Despite its length, it is tightly structured and front-loaded with the most important use case.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup with four optional params and an output schema, the description covers defaults, filtering options, paging behavior, data freshness, and edge cases (testing codes, unreachable courts). It is complete enough for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter already carries detailed enum meanings and defaults. The description adds strategic guidance (e.g., prefer narrow values) but does not materially extend parameter-level semantics beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List courts' with optional filters, and immediately states its primary purpose: discovering court IDs for search/filter parameters across all other courtlistener tools. This clearly distinguishes it from sibling get/search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear when-to-use context ('Primarily used to discover court IDs') and practical filter guidance (prefer narrowest status, narrow by jurisdiction rather than paging). It stops short of explicitly naming alternative tools or stating when not to use the tool itself, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

courtlistener_search_docketsSearch Federal Court DocketsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesQuery terms matched against case name, docket number, party names, and attorney names. Example: "Apple Inc patent infringement".
courtNoFilter to a specific federal court ID (e.g., "dnd", "cacd", "deb" for Delaware Bankruptcy). Use courtlistener_lookup_courts to find court IDs.
cursorNoPagination cursor from a previous response's next_cursor field.
page_sizeNoNumber 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_nameNoFilter 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.
filed_afterNoEarliest case filing date (ISO 8601).
filed_beforeNoLatest case filing date (ISO 8601).

Output Schema

ParametersJSON Schema
NameRequiredDescription
noticeNoRecovery hint when results are empty — echoes filters and suggests how to broaden.
resultsYesMatching docket records.
totalCountYesTotal matching dockets.
next_cursorYesPagination cursor for the next page; null when no more results.
coverage_noteYesNote about RECAP coverage limitations.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are contradicted. It adds value by revealing that RECAP is a 'crowd-sourced mirror of PACER — coverage varies by court and date' and that results are metadata plus 'up to 3 sample document entries per docket,' which go beyond the readOnlyHint and openWorldHint annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the core operation, and each sentence contributes: scope, query/filter behavior, data-source caveat, return contents, and a cross-tool pointer. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full output schema, 100% schema coverage, and readOnlyHint/openWorldHint annotations, the description covers the data source caveat, return shape ('parties, attorneys, firms of record, plus up to 3 sample documents'), and a court-ID lookup pointer. It does not discuss pagination behavior, but the schema's cursor and page_size descriptions handle that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description summarizes that 'Query terms match case name, docket number, party, and attorney names; filters narrow by party name, court, and filing date,' but the schema already describes each parameter with examples and caveats; the description adds no syntax details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Search RECAP federal court dockets' — a specific verb+resource — and details what query terms match, what filters exist, and what is returned. This clearly distinguishes it from sibling tools like courtlistener_get_docket or search_opinions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states 'Use courtlistener_lookup_courts to find court IDs,' giving explicit cross-tool guidance for a prerequisite. It also describes the scope ('Search RECAP federal court dockets') and query semantics, making the intended use clear. However, it doesn't explicitly contrast with alternatives like get_docket for known dockets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

courtlistener_search_financial_disclosuresSearch Financial DisclosuresA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoFiling 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 page has no match for the year but more pages remain, next_cursor is returned; pass it as cursor to check the next page. Omit to return all years on the page.
cursorNoPagination cursor from a previous response's next_cursor field.
judge_idNoPerson ID of the judge whose disclosures to return — obtain from courtlistener_search_judges (the person_id field). Omit to browse across all filers.
page_sizeNoNumber 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noticeNoRecovery hint when no filings are found — echoes filters and suggests next steps.
resultsYesMatching financial disclosure filings.
totalCountNoTotal 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).
next_cursorYesPagination cursor for the next page; null when no more results.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint and openWorldHint, but the description adds substantial behavioral detail: the year filter is client-side only and may require cursor pagination; CourtListener enforces a minimum of 20 results per page; line-item investments are summarized as counts with the full itemization in the PDF. This goes far beyond the annotations and sets accurate expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately long but every sentence provides necessary operational detail (pagination caveat, year filter behavior, return summary). It is front-loaded with the purpose and then covers limitations. It earns its length, though it could be slightly tightened without losing value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (server-side filtering limitations, pagination, summarization of investments) and the presence of an output schema, the description covers return contents, pagination behavior, year filter caveat, and the source of judge_id. It leaves no major gaps for an agent selecting and invoking this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description supplements the schema by explaining that the year filter is applied only to the fetched page (requiring cursor pagination) and that judge_id comes from courtlistener_search_judges. It also clarifies page_size minimum. This adds practical meaning beyond the schema's property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Search federal judicial financial disclosure filings' and lists what the filings contain (investments, gifts, debts, outside positions, income). This clearly distinguishes it from sibling tools like courtlistener_get_financial_disclosure (which likely retrieves a single disclosure) and courtlistener_search_judges (which finds judges).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use it: 'Use this for judicial-ethics and recusal research after identifying a judge's person ID.' It also directs the user to courtlistener_search_judges for obtaining the person ID. It does not explicitly name alternatives (e.g., get_financial_disclosure for a single filing), but the context makes the search purpose clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

courtlistener_search_judgesSearch JudgesA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesSearch query — judge name, court, city, or relevant keywords.
courtNoFilter to judges who have held a position at this court (e.g., "scotus", "ca9"). Use court_id strings from courtlistener_lookup_courts.
cursorNoPagination cursor from a previous response's next_cursor field.
appointerNoFilter by appointing president's last name (e.g., "Obama", "Trump", "Biden"). Matches against the appointer field in position records.
page_sizeNoNumber of results to request (default 20). CourtListener search enforces a minimum of 20 results per page regardless of the value passed.
political_affiliationNoFilter 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noticeNoRecovery hint when results are empty — echoes filters and suggests how to broaden.
resultsYesMatching judge records.
totalCountYesTotal matching judge records.
next_cursorYesPagination cursor for the next page; null when no more results.
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds that it returns biographical data, current position, and appointment summary, but this is largely redundant with the output schema. No additional behavioral context (e.g., pagination behavior, rate limits) is provided beyond what annotations and schema already convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two clear, front-loaded sentences. The first sentence states the action and scope; the second identifies the complementary tool. No wasted words, perfectly sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich input schema, output schema, and annotations, the description is sufficient. It explains what the tool returns and points to get_judge for deeper detail, which is exactly what an agent needs. It does not explicitly mention pagination, but the schema covers cursor and page_size, so the description need not repeat that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter fully described. The description lists some filter dimensions (name, appointer, court, political affiliation) but does not add meaning beyond the schema. Baseline 3 applies because the schema carries the full parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches judge/person records with specific filter criteria (name, appointing president, court, political affiliation, demographic). It explicitly distinguishes itself from the sibling courtlistener_get_judge by noting that tool is for full history, making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear alternative: 'Use courtlistener_get_judge for full appointment history and education records.' This tells the agent when to choose this search tool versus the more detailed retrieval tool. It does not enumerate all sibling exclusions, but that is unnecessary given the obvious resource differences.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

courtlistener_search_opinionsSearch Court OpinionsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesFull-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.
courtNoFilter to a specific court by court ID (e.g., "scotus", "ca9", "nyed"). Use courtlistener_lookup_courts to find court IDs.
cursorNoPagination cursor from a previous response's next_cursor field. Omit for the first page.
statusNoOpinion publication status. "Published": precedential. "Unpublished": not citable as precedent in most jurisdictions. "Errata": corrections. "Separate": separate opinion filed outside main cluster. "In-chambers": single-justice order. "Relating-to": companion or related-case order. Omit to search all statuses.
order_byNoResult ordering. "score desc" (default) ranks by relevance. "citeCount desc" surfaces most-cited opinions first.score desc
page_sizeNoNumber 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 costs one request against the rate limit.
filed_afterNoEarliest filing date (ISO 8601, e.g., "2020-01-01"). Narrows search to opinions filed on or after this date.
filed_beforeNoLatest filing date (ISO 8601). Narrows search to opinions filed before or on this date.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noticeNoRecovery hint when results are empty — echoes filters and suggests how to broaden.
resultsYesMatching opinion cluster summaries.
totalCountYesTotal matching opinions in the corpus.
next_cursorYesPagination cursor for the next page; null when no more results.
effectiveQueryYesQuery terms sent to CourtListener.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, and the description adds valuable behavioral details: exact rate limits (5 req/min, 50/hr, 125/day), the page_size minimum behavior, and the note that each search costs one request. These go beyond the schema and annotations, providing operational expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, front-loaded with the core purpose, then covering filtering, return format, syntax, cross-tool reference, and rate limits. No word is wasted; every sentence contributes essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 parameters, output schema present), the description provides a complete picture: scope, return format, query syntax, rate limits, and a pointer to a related tool for court IDs. The output schema covers return details, so further explanation is unnecessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage for all 8 parameters, so the baseline is 3. The description adds extra context by explaining the field syntax and boolean operators in the query parameter (even though partially duplicated in schema) and explicitly linking page_size to rate limit usage. This adds marginal value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('search') and resource ('9M+ written US court opinions'), and differentiates it from sibling tools like courtlistener_search_dockets and courtlistener_lookup_courts. It also outlines what is returned (cluster summaries, metadata, snippets, variants), making the tool's role unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool (full-text search of opinions) and explicitly instructs to use courtlistener_lookup_courts for court IDs. However, it does not explicitly state when to prefer this over alternatives like courtlistener_get_opinion or courtlistener_lookup_citation, so it misses the 'when-not-to-use' dimension.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

courtlistener_search_oral_argumentsSearch Oral ArgumentsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesQuery terms matched against case name and transcribed argument text (where available).
courtNoFilter to a specific court (e.g., "scotus", "ca9").
cursorNoPagination cursor from a previous response's next_cursor field.
page_sizeNoNumber of results to request (default 20). CourtListener search enforces a minimum of 20 results per page regardless of the value passed.
argued_afterNoEarliest date the case was argued (ISO 8601) — filters by argument date, not publication date.
argued_beforeNoLatest date the case was argued (ISO 8601).

Output Schema

ParametersJSON Schema
NameRequiredDescription
noticeNoRecovery hint when results are empty — echoes filters and suggests how to broaden.
resultsYesMatching oral argument recordings.
totalCountYesTotal matching oral argument recordings.
next_cursorYesPagination cursor for the next page; null when no more results.
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds context about the return payload (two MP3 links, panel judge IDs, transcript snippets) and mentions 'durable copy,' which hints at data reliability. It does not disclose any additional behavioral traits like rate limits or pagination specifics beyond what the schema already covers, so this is adequate but not exceptional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary purpose, and then details the key output features. Every sentence contributes meaningful information, and there is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, output schema present), the description is sufficiently complete for selection and invocation. It explains what the tool does, what it returns, and how to use the results with another tool. The schema handles parameter details, and the output schema handles return-value details. The only minor gap is the lack of explicit comparison to sibling search tools, but the name and description make the scope clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add any additional meaning to the parameters themselves; it only describes output fields. The parameter details are fully captured in the input schema, so no extra value is provided beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Search appellate oral argument audio recordings.' It clearly distinguishes this from sibling tools by specifying the content type (oral arguments) and the action (search vs. get). The scope is also clarified with 'appellate' and 'largest public collection.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use this tool: when searching for oral argument audio recordings. It also gives guidance on a related usage pattern by noting that panel judge IDs can be passed to courtlistener_get_judge for biographical context. However, it does not explicitly state when not to use it or compare it to other search tools (e.g., search_opinions), so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.