courtlistener-mcp-server
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.
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.
Tool Definition Quality
Average 4.5/5 across 13 of 13 tools scored.
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.
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.
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.
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 toolscourtlistener_get_citationsGet Citation NetworkARead-onlyInspect
Retrieve the citation network for an opinion cluster. Supports two directions: "cited_by" (opinions that cite this one — measures precedential influence) and "citing" (opinions this one cites — reveals the authority chain relied on). This is the primary tool for tracing legal precedent chains. Note: the free tier supports shallow traversal — following 1–2 hops of a single case is practical; deep multi-hop analysis burns through the daily budget quickly.
| Name | Required | Description | Default |
|---|---|---|---|
| court | No | Filter results to a specific court (e.g., "scotus", "ca9"). Applies to both directions. | |
| cursor | No | Pagination cursor from a previous response's next_cursor field. | |
| direction | No | "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_size | No | Number of results to request (default 20). For direction="cited_by", CourtListener enforces a minimum of 20 results per page regardless of the value passed — you will always receive at least 20 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_id | Yes | Opinion cluster ID to retrieve citations for. Obtain from courtlistener_search_opinions or courtlistener_lookup_citation. | |
| filed_after | No | Limit to citations filed after this date (ISO 8601). For "cited_by", useful for "how has this precedent been applied recently?" |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Context when no citations are returned — either that this page had no match under the filters and more pages remain, or a recovery hint echoing direction and filters. |
| results | Yes | Related opinions in the citation network. |
| direction | Yes | Direction of the citation relationship returned. |
| totalCount | Yes | Total citations in the requested direction. For "cited_by" it counts matching clusters with the court and filed_after filters applied. For "citing" it counts the distinct opinions this case cites, 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_cursor | Yes | Pagination cursor for the next page; null when no more results. |
| source_case_name | Yes | Case name for the source cluster. |
| source_cluster_id | Yes | The cluster ID this citation network is for. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 DocketARead-onlyIdempotentInspect
Fetch full docket metadata and entry list for a single federal case by docket ID. Returns all available docket entries with document availability status. Documents with is_available=true have a RECAP-stored copy; others require a PACER account. Obtain docket IDs from courtlistener_search_dockets or from opinion results.
| Name | Required | Description | Default |
|---|---|---|---|
| docket_id | Yes | Docket ID from a search result's docket_id field or from an opinion cluster result. | |
| entries_page | No | Page of docket entries to fetch (1-indexed). Docket entries are page-paginated at 20 per page; pass the next_cursor from a previous response here to page through large cases. | |
| entries_page_size | No | 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 beyond the first 20 (large cases can have hundreds). |
Output Schema
| Name | Required | Description |
|---|---|---|
| cause | Yes | Legal cause of action. |
| court | Yes | Court display name for major federal courts; the court identifier otherwise. |
| entries | Yes | Docket entries for this page (fixed at 20 per page; entries_page_size is not honored by upstream). |
| court_id | Yes | Court identifier — the stable value for filtering. |
| case_name | Yes | Short case name. |
| docket_id | Yes | Docket ID. |
| date_filed | Yes | Date the case was filed. |
| assigned_to | Yes | Assigned judge name; null if not recorded. |
| jury_demand | Yes | Jury demand status. |
| next_cursor | Yes | Next page number to pass as the `entries_page` argument (docket entries are page-paginated); null when this is the last page. |
| referred_to | Yes | Referred judge name; null if not recorded. |
| entries_page | Yes | Current entries page number (1-indexed). |
| docket_number | Yes | Docket number. |
| pacer_case_id | Yes | PACER case ID; null if not in RECAP. |
| total_entries | Yes | Total number of docket entries available — may exceed the returned entries list. |
| case_name_full | Yes | Full case name. |
| date_terminated | Yes | Date the case was terminated; null if active. |
| jurisdiction_type | Yes | Jurisdiction type. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 DisclosureARead-onlyIdempotentInspect
Fetch a single judicial financial disclosure by ID with its parsed line-item rows — investments, debts, positions, reimbursements, non-investment and spouse income, agreements, and gifts. This is the itemized companion to courtlistener_search_financial_disclosures (which returns only category counts). Pass categories:[...] to select specific categories; omit for all. Coded value/income columns are decoded to readable dollar ranges. When the full itemization is too large to inline, the response lists each category as a retrievable section by byte size while keeping the filing metadata and counts — re-call with categories:[...] to pull specific categories in full. Obtain disclosure IDs from courtlistener_search_financial_disclosures (the disclosure_id field).
| Name | Required | Description | Default |
|---|---|---|---|
| categories | No | Line-item categories to return in full: investments, debts, positions, reimbursements, non_investment_incomes, spouse_incomes, agreements, gifts. Omit for all categories (or an outline if they overflow the inline budget). Also the re-call selector — after an outline response, re-call with the category names it lists. | |
| disclosure_id | Yes | Financial disclosure ID — the disclosure_id field from a courtlistener_search_financial_disclosures result. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | 'full' returns the requested category rows; 'outline' lists each category as a retrievable section (by byte size) when the itemization overflows the inline budget. Filing metadata and counts are present either way. |
| year | Yes | Filing year. |
| debts | No | Debts and liabilities. |
| gifts | No | Reported gifts. |
| counts | Yes | Count of line items in each disclosure category. |
| pdf_url | Yes | URL to the source disclosure PDF; null if unavailable. |
| sections | No | Retrievable categories, largest first — pass names to `categories` on a re-call. |
| person_id | Yes | Person ID of the filer — pass to courtlistener_get_judge; null if absent. |
| positions | No | Outside positions. |
| agreements | No | Continuing agreements. |
| is_amended | Yes | True if this filing is an amendment. |
| page_count | Yes | Page count of the source filing; null if not recorded. |
| investments | No | Investment holdings. |
| report_type | Yes | Report type (Nomination, Initial, Annual, Final, or Unknown). |
| disclosure_id | Yes | Financial disclosure ID. |
| reimbursements | No | Reimbursements. |
| spouse_incomes | No | Spouse income sources. |
| retrieval_notice | No | How to re-call the tool for specific categories when the itemization overflows. |
| has_been_extracted | Yes | True if line items were parsed from the PDF; category arrays are empty when false. |
| non_investment_incomes | No | Non-investment income sources. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 ProfileARead-onlyIdempotentInspect
Fetch full biographical profile for a single judge: positions on record — judicial appointments across all courts plus non-judicial roles — education, political affiliations, and ABA ratings. The position list is paginated upstream and walked under a page bound; the response reports whether it was truncated. Obtain person IDs from courtlistener_search_judges results.
| Name | Required | Description | Default |
|---|---|---|---|
| person_id | Yes | Judge person ID from a search result's person_id field. Identifies a specific judge across all courts they have served on. |
Output Schema
| Name | Required | Description |
|---|---|---|
| dob | Yes | Date of birth as CourtListener stores it, always full ISO 8601 — but the month and day are placeholders unless dob_granularity is "day". Read dob_granularity before presenting this as an exact date. Null if not recorded. |
| dod | Yes | Date of death as CourtListener stores it, always full ISO 8601 — precision qualified by dod_granularity, as with dob. Null if living or not recorded. |
| name | Yes | Full name. |
| fjc_id | Yes | Federal Judicial Center ID for cross-referencing with FJC data; null if not available. |
| gender | Yes | Gender. |
| notice | No | Present only when positions[] was truncated: what was withheld. |
| dob_city | Yes | City of birth; null if not recorded. |
| dob_state | Yes | State of birth; null if not recorded. |
| education | Yes | Educational history. |
| person_id | Yes | Person ID. |
| positions | Yes | Positions on record, across all courts — judicial appointments plus non-judicial roles (private practice, prosecutor, professor), which carry no court and describe themselves in job_title. CourtListener paginates this list and the walk is bounded, so read the truncated flag before treating it as a complete career. |
| truncated | Yes | True when the bounded /positions/ page walk stopped with pages outstanding — positions[] is then a prefix of the person's record, not the whole of it. False when the walk reached the end. |
| aba_ratings | Yes | ABA qualification ratings, expanded to readable labels (e.g., "Well Qualified"). |
| positionsShown | Yes | Number of position records returned. |
| dob_granularity | Yes | Precision actually recorded for dob: "year", "month", or "day". Null when CourtListener recorded no precision. An unrecognized upstream value passes through unchanged. |
| dod_granularity | Yes | Precision actually recorded for dod: "year", "month", or "day". Null when CourtListener recorded no precision. |
| political_affiliations | Yes | Political affiliation history. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 OpinionARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sections | No | Opinion variant identifiers to retrieve in full, from a prior outline response (e.g. ["opinion_12345"]). Omit to return all variants, or an outline if they overflow the inline byte budget. | |
| cluster_id | Yes | Opinion cluster ID — identifies a case decision and groups all opinion variants (majority, concurrence, dissent). Obtain from courtlistener_search_opinions, courtlistener_lookup_citation, or from docket results that link to opinions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | 'full' returns the opinion variants (all, or a selected subset); 'outline' lists each variant as a retrievable section (opinion_<id>) when the opinions overflow the inline byte budget. Cluster metadata is present either way. |
| court | Yes | Court display name. |
| judges | Yes | Judge names. |
| posture | Yes | Procedural posture (may be empty). |
| court_id | Yes | Court identifier. |
| opinions | No | All opinion variants within this cluster. Present in full mode; omitted in outline mode — re-call with sections:["opinion_<id>"] to retrieve specific variants. |
| sections | No | Retrievable opinion variants, largest first — pass names to `sections` on a re-call. |
| syllabus | Yes | Syllabus text (may be empty). |
| case_name | Yes | Short case name. |
| citations | Yes | All known citation strings for this case. |
| docket_id | Yes | Associated docket ID. |
| cite_count | Yes | Total number of citations from other opinions. |
| cluster_id | Yes | Opinion cluster ID. |
| date_filed | Yes | Date the opinion was filed. |
| docket_number | Yes | Docket number. |
| case_name_full | Yes | Full case name with parties. |
| retrieval_notice | No | How to re-call the tool for specific opinion variants when the opinions overflow. |
| precedential_status | Yes | Publication/precedential status. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 ArgumentARead-onlyIdempotentInspect
Fetch the full detail record for a single oral argument audio recording by its ID (the audio_id from courtlistener_search_oral_arguments). Returns the case name, panel judge IDs, duration, MP3 download URL, linked docket, and the speech-to-text transcript when transcription has completed. A long transcript is withheld and listed as a retrievable section instead; re-call with sections:["transcript"] to pull it. Every other field is present either way. The argument date is not on this record — it comes from the search result or the linked docket.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Audio recording ID — the audio_id field from a courtlistener_search_oral_arguments result. | |
| sections | No | Section identifiers to retrieve, from a prior outline response — ["transcript"] is the only one that adds anything, since every other field is returned regardless. A selection that omits "transcript" therefore returns the record without it. Omit this argument entirely for the whole record, or the record minus an oversized transcript. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | 'full' carries the transcript inline; 'outline' withholds it and lists it as a retrievable section because it overflows the inline byte budget. Every other field of the record is present either way. |
| judges | No | Free-text judge names; often empty on this endpoint. |
| sections | No | Sections withheld from this response — only ever `transcript`; pass its name to `sections` on a re-call. Absent when nothing was withheld. |
| case_name | No | Case name. |
| docket_id | No | Associated docket ID; 0 if not linked. |
| panel_ids | No | Person IDs of panel judges — pass to courtlistener_get_judge. |
| transcript | No | Speech-to-text transcript; empty string if transcription has not completed. The only field an outline response withholds — re-call with sections:["transcript"] to retrieve it. |
| download_url | No | Direct MP3 download URL; null if not available. |
| case_name_full | No | Full case name with parties. |
| has_transcript | No | True if a speech-to-text transcript is available. |
| duration_seconds | No | Recording duration in seconds. |
| oral_argument_id | No | Audio recording ID. |
| retrieval_notice | No | How to re-call the tool for the transcript when it overflows the inline budget. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 PartiesARead-onlyIdempotentInspect
Fetch all parties and attorneys of record for a RECAP federal docket by docket ID. Returns each party's name, role (Plaintiff, Defendant, Petitioner, Respondent, etc.), and their attorneys with contact information, scoped to this docket. Costs two upstream requests per call (parties + attorney lookup) against a rate-limited free tier, and one more for each extra page of a large attorney roster. Obtain docket IDs from courtlistener_search_dockets or courtlistener_get_docket.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | 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 selects nothing and re-serves the first page. | |
| docket_id | Yes | Docket ID from a courtlistener_search_dockets or courtlistener_get_docket result's docket_id field. | |
| page_size | No | Requested number of parties per page (1–10). CourtListener paginates this endpoint at a fixed size and does not honor the requested value, so a page can come back larger than asked for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| parties | Yes | Parties on this page. |
| docket_id | Yes | Docket ID these parties belong to. |
| totalCount | No | 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 any list spanning more than one page. |
| next_cursor | Yes | Opaque pagination cursor for the next page — pass it back as the `cursor` argument; null when this is the last page. |
| total_parties | Yes | Total parties on this docket across all pages; null when no total is derivable — CourtListener serves the count as a URL rather than a number here, so it is only known when the first page is also the last. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 CitationARead-onlyIdempotentInspect
Resolve legal citations (e.g., "410 U.S. 113", "93 S. Ct. 705") to opinion cluster IDs and case metadata. Enables workflows that start from a known citation rather than a search query. CourtListener extracts every citation it finds in the submitted text, so passing a passage returns one entry per citation, each with its own resolution status — an unresolved or ambiguous citation is reported in the results, not raised as an error. Supports standard US reporter formats. Costs one request against CourtListener's per-citation quota, plus one ordinary request per distinct docket whose court is resolved — max_court_lookups bounds that second half (default 4, set 0 to skip court resolution entirely). CourtListener meters this endpoint by citations submitted rather than by call, so a long passage spends proportionally more of that quota. Requires authentication — uses the CourtListener /citation-lookup/ endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| citation | Yes | Text to extract citations from — normally a single citation (e.g., "410 U.S. 113", "347 U.S. 483", "93 S. Ct. 705"), but any passage works and every citation in it is resolved. Supports standard 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_lookups | No | 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 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
| Name | Required | Description |
|---|---|---|
| notice | No | 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 or an attempted lookup returned nothing, since only the first is worth retrying with a larger budget. Absent when none applies. |
| matches | Yes | One entry per citation CourtListener extracted from the input, in the order they appear. |
| queriedCitation | Yes | The citation string that was looked up. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 CourtsARead-onlyInspect
List courts with optional filtering by jurisdiction type, active/inactive status, and scraper coverage. Primarily used to discover court IDs for use in search and filter parameters across all other courtlistener tools. Defaults to the active bench — the courts CourtListener still scrapes; pass status:'inactive' for historical courts or status:'any' for every court. A bundled snapshot returns the complete list of matching court IDs without paging whenever the filtered set fits the response budget, which covers the default bench and every jurisdiction filter. Full court records — names, citation strings, scraper status — come live from CourtListener at a fixed 20 rows per page, so pull those only when a court ID alone is not enough.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 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 way to pull a larger page. Pass the next_cursor from a previous response here to walk them one call at a time. | |
| status | No | 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 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 |
| jurisdiction | No | 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=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_scraper | No | Filter to courts with active opinion scraping. Useful when planning search queries — courts without scrapers have sparse coverage. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Current page number (1-indexed). |
| courts | Yes | Matching courts on this page. |
| notice | No | Recovery hint when no courts match the applied filters. |
| totalCount | Yes | Total courts returned. |
| next_cursor | Yes | Next page number to pass as the `page` argument (this list is page-paginated at a fixed 20 rows/page); null when this is the last page — a non-null value means the courts shown are a partial view of the filtered set. |
| all_matching_court_ids | Yes | Every court id matching the same filters, from a snapshot of /courts/ bundled with this server (taken 2026-07-30) — the complete set, not just this page, and free of any request. Paging `courts` is 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_complete | Yes | True when all_matching_court_ids holds every matching court id. False when more than 1000 courts match: the list is withheld whole rather than truncated, and the notice gives the count and how to narrow. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 DocketsARead-onlyInspect
Search RECAP federal court dockets. Query terms match case name, docket number, party, and attorney names; filters narrow by party name, court, and filing date. RECAP is a crowd-sourced mirror of PACER (the federal court filing system) — coverage varies by court and date. Returns docket metadata with the parties, attorneys, and firms of record, plus up to 3 sample document entries per docket. Use courtlistener_lookup_courts to find court IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Query terms matched against case name, docket number, party names, and attorney names. Example: "Apple Inc patent infringement". | |
| court | No | Filter to a specific federal court ID (e.g., "dnd", "cacd", "deb" for Delaware Bankruptcy). Use courtlistener_lookup_courts to find court IDs. | |
| cursor | No | Pagination cursor from a previous response's next_cursor field. | |
| page_size | No | Number of results to request (default 20). CourtListener search enforces a minimum of 20 results per page regardless of the value passed — you will always receive at least 20 results. | |
| party_name | No | 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. | |
| filed_after | No | Earliest case filing date (ISO 8601). | |
| filed_before | No | Latest case filing date (ISO 8601). |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Recovery hint when results are empty — echoes filters and suggests how to broaden. |
| results | Yes | Matching docket records. |
| totalCount | Yes | Total matching dockets. |
| next_cursor | Yes | Pagination cursor for the next page; null when no more results. |
| coverage_note | Yes | Note about RECAP coverage limitations. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 DisclosuresARead-onlyInspect
Search federal judicial financial disclosure filings — the annual reports judges file on investments, gifts, debts, outside positions, and income. Filter by judge (person ID from courtlistener_search_judges) and/or filing year; the year filter is applied to the fetched page only (CourtListener has no server-side year filter), so page through with cursor to reach a judge's filings for a year that fall on later pages. Returns per-filing metadata, category counts, itemized gifts, and a link to the source PDF. Line-item investments (often hundreds per filing, with coded values) are summarized as counts; the linked PDF carries the full itemization. Use this for judicial-ethics and recusal research after identifying a judge's person ID.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | 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 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. | |
| cursor | No | Pagination cursor from a previous response's next_cursor field. | |
| judge_id | No | Person ID of the judge whose disclosures to return — obtain from courtlistener_search_judges (the person_id field). Omit to browse across all filers. | |
| page_size | No | Number of filings to request (default 20). CourtListener enforces a minimum of 20 results per page regardless of the value passed — you will always receive at least 20 filings. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Recovery hint when no filings are found — echoes filters and suggests next steps. |
| results | Yes | Matching financial disclosure filings. |
| totalCount | No | 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). |
| next_cursor | Yes | Pagination cursor for the next page; null when no more results. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 JudgesARead-onlyInspect
Search judge/person records by name, appointing president, court, political affiliation, or demographic. Returns biographical data, current position, and appointment summary. Use courtlistener_get_judge for full appointment history and education records.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query — judge name, court, city, or relevant keywords. | |
| court | No | Filter to judges who have held a position at this court (e.g., "scotus", "ca9"). Use court_id strings from courtlistener_lookup_courts. | |
| cursor | No | Pagination cursor from a previous response's next_cursor field. | |
| appointer | No | Filter by appointing president's last name (e.g., "Obama", "Trump", "Biden"). Matches against the appointer field in position records. | |
| page_size | No | Number of results to request (default 20). CourtListener search enforces a minimum of 20 results per page regardless of the value passed. | |
| political_affiliation | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Recovery hint when results are empty — echoes filters and suggests how to broaden. |
| results | Yes | Matching judge records. |
| totalCount | Yes | Total matching judge records. |
| next_cursor | Yes | Pagination cursor for the next page; null when no more results. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 OpinionsARead-onlyInspect
Full-text search across 9M+ written US court opinions with field-level filtering. Returns opinion cluster summaries with case metadata, citations, matched text snippets, and the individual opinion variants filed in each case. Supports CourtListener field syntax (caseName:"roe v wade", court_id:scotus, judge:"Alito") and boolean operators (AND, OR, NOT). Use courtlistener_lookup_courts to find court IDs. CourtListener publishes free-tier limits of 5 req/min, 50/hr, 125/day; actual limits vary by token tier.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Full-text query. Supports field syntax (caseName:"roe v wade", court_id:scotus, judge:"Alito") and boolean operators (AND, OR, NOT). Use plain English for semantic-style queries or legal citations. | |
| court | No | Filter to a specific court by court ID (e.g., "scotus", "ca9", "nyed"). Use courtlistener_lookup_courts to find court IDs. | |
| cursor | No | Pagination cursor from a previous response's next_cursor field. Omit for the first page. | |
| status | No | Opinion 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_by | No | Result ordering. "score desc" (default) ranks by relevance. "citeCount desc" surfaces most-cited opinions first. | score desc |
| page_size | No | Number of results to request (default 20). CourtListener search enforces a minimum of 20 results per page regardless of the value passed — you will always receive at least 20 results. Each search costs one request against the rate limit. | |
| filed_after | No | Earliest filing date (ISO 8601, e.g., "2020-01-01"). Narrows search to opinions filed on or after this date. | |
| filed_before | No | Latest filing date (ISO 8601). Narrows search to opinions filed before or on this date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Recovery hint when results are empty — echoes filters and suggests how to broaden. |
| results | Yes | Matching opinion cluster summaries. |
| totalCount | Yes | Total matching opinions in the corpus. |
| next_cursor | Yes | Pagination cursor for the next page; null when no more results. |
| effectiveQuery | Yes | Query terms sent to CourtListener. |
Tool Definition Quality
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.
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.
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.
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.
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.
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 ArgumentsARead-onlyInspect
Search appellate oral argument audio recordings — the largest public collection of oral argument audio. Returns recording metadata with two direct MP3 links per result (download_url at the originating court, local_path for CourtListener's durable copy), panel judge IDs, and transcript snippets where available. Panel judge IDs can be passed to courtlistener_get_judge for biographical context.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Query terms matched against case name and transcribed argument text (where available). | |
| court | No | Filter to a specific court (e.g., "scotus", "ca9"). | |
| cursor | No | Pagination cursor from a previous response's next_cursor field. | |
| page_size | No | Number of results to request (default 20). CourtListener search enforces a minimum of 20 results per page regardless of the value passed. | |
| argued_after | No | Earliest date the case was argued (ISO 8601) — filters by argument date, not publication date. | |
| argued_before | No | Latest date the case was argued (ISO 8601). |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Recovery hint when results are empty — echoes filters and suggests how to broaden. |
| results | Yes | Matching oral argument recordings. |
| totalCount | Yes | Total matching oral argument recordings. |
| next_cursor | Yes | Pagination cursor for the next page; null when no more results. |
Tool Definition Quality
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.
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.
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.
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.
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.
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.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- Flicense-qualityFmaintenanceEnables LLM-friendly access to the CourtListener legal database and eCFR for searching legal opinions, court cases, judges, documents, and federal regulations.Last updated12
- Alicense-qualityDmaintenanceEnables legal research across 3,352 U.S. courts using the CourtListener API, providing access to case search, precedent analysis, judge patterns, citation validation, and federal PACER dockets through natural language queries.Last updated272MIT
- Alicense-qualityCmaintenanceEnables AI agents to query and access legal data from the Free Law Project's CourtListener API, including court opinions, judges, and dockets, with basic access requiring no authentication.Last updated145MIT
- AlicenseAqualityBmaintenanceMCP server for free U.S. case-law and court-docket search via CourtListener, providing tools for opinion search, docket lookup, citation verification, and more.Last updated6MIT
Your Connectors
Sign in to create a connector for this server.