CourtAPI MCP Server
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CourtAPI MCP ServerFind the Sbarro bankruptcy case and show me the latest docket entries"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CourtAPI MCP Server
Search and retrieve US federal court cases, dockets, claims, and documents via PACER — directly from Claude and other MCP-compatible AI assistants.
What it does
This MCP server exposes CourtAPI as a set of tools that let an AI assistant:
Find cases by party name, case number, or free-text keywords across all federal courts
Get case metadata — title, chapter, judge, filing dates, assets/liabilities, and what sub-resources have been purchased
Get dockets — full docket sheets with filing history, keyword search, and date filtering
Download documents — PDFs attached to docket entries, with cost-checking before purchase
Get claims — bankruptcy claims registers with creditor names, amounts, and claim types
Get parties — all parties and attorneys in a case
Get creditors — scheduled creditors (Schedules D/E/F), separate from filed claims
Search PACER NCL — National Case Locator for cross-court party searches
List courts — all ~200 PACER courts with their codes
Manage PACER credentials — store and validate PACER username/password
Coverage: all US federal courts — bankruptcy, district, and appellate. State courts are not supported.
Related MCP server: legal-mcp
Prerequisites
CourtAPI account — Get credentials (APP_ID + APP_KEY) at the developer portal. A free 30-day sandbox is available (150 API calls/day, 500/month) — contact support@courtapi.com to start one.
PACER account — Required for fetching live data (docket updates, document downloads). Register free at pacer.uscourts.gov. PACER charges per page for documents; CourtAPI passes these fees through at cost.
Installation
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"courtapi": {
"command": "npx",
"args": ["-y", "@courtio/courtapi-mcp"],
"env": {
"COURTAPI_APP_ID": "your_app_id",
"COURTAPI_APP_KEY": "your_app_key"
}
}
}
}Restart Claude Desktop. The hammer icon will show CourtAPI tools listed.
Other MCP clients
The server uses stdio transport by default, which is compatible with any MCP host. Use the same command/args/env pattern above.
HTTP mode (Streamable HTTP transport)
For clients that use HTTP rather than stdio (e.g. the OpenAI Responses API remote tools):
COURTAPI_APP_ID=your_id COURTAPI_APP_KEY=your_key PORT=3000 \
npx @courtio/courtapi-mcp --httpFrom source
git clone https://gitlab.com/courtio/courtio.git
cd courtio/mcp/courtapi
npm install && npm run build
# then point Claude Desktop at dist/index.js instead of npxEnvironment variables
Variable | Required | Description |
| Yes | Your CourtAPI application ID |
| Yes | Your CourtAPI application key |
| No | Override API base URL (default: |
Quick start
Once connected, try these prompts in Claude:
"Find the Sbarro bankruptcy case and show me the latest docket entries"
"Search for Chapter 11 cases filed in the Delaware bankruptcy court in 2024"
"Get the claims register for case 1:14-bk-10557 in the SDNY bankruptcy court"
"Set my PACER credentials to username johndoe and password mypassword"
Tools
find_cases
Discover cases you don't have a court code or full case number for. Pass a party/company name, partial case number, or free-text keywords. The tool automatically picks the best search endpoint:
Party/title search — fast, free, good for company or person names
Case number search — resolves partial or ambiguous numbers
Keyword search (
search-filings) — full-text across CourtAPI's filing repository; costs 1 API call per 25 results returned
Returns court_code + case_number pairs needed by all other tools.
get_case
Get all metadata for a known case: title, chapter, judge, key dates (filed/closed/discharged), assets, liabilities, and the menu object. The menu has one entry per sub-resource (dockets, claims, parties, etc.) with a modified timestamp — null means that resource has never been purchased from PACER.
Always call this first after finding a case to check what data is already available. Free unless include_live_pacer=true.
get_dockets
Get the docket sheet — all filings in chronological order with dates, descriptions, and attached document info. Supports keyword search and date/number range filtering.
Two useful fields on every docket entry:
binder.documents— pre-fetched document metadata includingis_cachedanddownload_costfor each PDF, so you can check availability without a separate documents API call.annotations— key dates extracted from docket text (deadlines, hearings, etc.) withkey_phrase,datetime, andtime_zone. Useful for building calendar integrations without parsing docket text.
When calling with include_live_pacer=true to buy a fresh docket sheet from PACER, always pass date_filed_from to limit the purchase to entries newer than what CourtAPI already has. Omitting it buys the entire docket history — expensive for active cases.
get_document
Get a PDF attached to a docket entry. Checks the cache first:
is_cached=trueordownload_cost="0.00"→ returnsdownload_url,preview_url, andocr_linkat no costNot cached +
purchase=false(default) → returns cost info so you can decide before spendingNot cached +
purchase=true→ buys from PACER, stores it, returnsdownload_url+ PACERreceipt
docket_seq comes from docket entries (e.g. "42.00000"). part defaults to 1 (main document); exhibits and attachments have higher part numbers.
Once purchased, the document is cached — all subsequent GETs are free.
get_claims
Get the bankruptcy claims register — all proofs of claim filed by creditors, with amounts (filed/allowed/paid), claim type, creditor names, and filing dates. Essential for Chapter 11 creditor analysis.
Filter by claim_type (secured, unsecured, priority, admin, etc.) and sort by claim number, filing date, or amendment date.
get_parties
Get all parties in a case (debtors, creditors, plaintiffs, defendants, trustees) and optionally their attorneys with firm name, contact info, and bar number. Attorney records return null (not an error) when they haven't been purchased for this case — use include_attorneys=false to suppress the attorney fetch.
Useful for conflicts checks, service lists, and identifying who is involved in a case.
get_creditors
Get scheduled creditors from bankruptcy Schedules D/E/F. This is different from get_claims — creditors listed here may not have filed a proof of claim. Use both to get a complete creditor picture.
ncl_search
Search PACER's National Case Locator across all federal courts at once. More comprehensive than find_cases for party name searches because it queries PACER directly. Costs PACER credits.
Supports: name searches, SSN/TIN lookups (with last name), case number, chapter, court, and date range filters. Paginate with search_id from the previous response.
list_courts
List all ~200 PACER courts with their court codes and names. Filter by type: bankruptcy, district, or appellate.
Common codes: nysbke (NY Southern Bankruptcy), debke (Delaware Bankruptcy), ilnbke (IL Northern Bankruptcy), cacdbe (CA Central Bankruptcy), txnbke (TX Northern Bankruptcy).
get_pacer_credentials
Manage PACER credentials stored in CourtAPI. PACER credentials are required before any include_live_pacer=true call.
| What it does |
| Show the stored PACER username (password not returned) |
| Store |
| Test credentials against PACER without storing |
| Remove stored credentials |
Understanding costs
CourtAPI has two independent cost layers:
CourtAPI API credits — charged by your CourtAPI plan. Free for: case GET lookups, party/title searches, docket GETs from cache, document GETs from cache. Costs 1 call per 25 results for keyword search (search-filings).
PACER fees — charged by the US federal courts per page. Only incurred when:
include_live_pacer=trueon dockets, claims, creditors, or case refreshpurchase=trueonget_document
download_cost="0.00" means a document is cached and free to retrieve. Always check before purchasing.
Case number format
CourtAPI requires long-form PACER case numbers. PACER often shows short forms in its UI (e.g. 14-10557) but the API always needs the full form.
Non-appellate courts (district, bankruptcy):
O:YY-TT-NNNNNO— office/division number (e.g.1,2,3)YY— two-digit filing yearTT— case type:bkbankruptcy,cvcivil,crcriminal,apadversary proceedingNNNNN— sequence number
Example: 1:14-bk-10557 (not 14-10557)
Appellate courts:
YY-NNNNNExample: 23-1234
If PACER shows a short form, use find_cases to resolve it. Always pair a case number with its court_code — the same sequence number can exist in multiple courts.
PACER screenshots on updates
When get_dockets or get_claims fetches live data from PACER (include_live_pacer=true), the response includes links.screenshot.pdf.href — a link to a PDF screenshot of the actual PACER page that was fetched. Useful for audit and compliance verification.
License
MIT — © CourtDrive. See courtapi.com for API terms.
Available Tools
10 toolsfind_casesA
Discover federal court cases you don't have the court+number for yet. Pass a party/company name, a (partial) case number, or free-text keywords. Returns court_code + case_number needed by all other tools. No PACER cost. Note: keyword search (search-filings) charges 1 CourtAPI API call per 25 results returned. Examples: query='Sbarro', query='1:14-bk', query='retail chapter 11 2026'.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Party name, case number (full or partial), or free-text keywords. The tool picks the best search endpoint automatically. | |
| chapter | No | Bankruptcy chapters, e.g. [11] or [7, 13] | |
| page_size | No | ||
| court_type | No | Narrow to a court type. 'national' searches all courts. | |
| page_number | No | ||
| date_filed_to | No | MM/DD/YYYY | |
| date_filed_from | No | MM/DD/YYYY |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It discloses 'No PACER cost' and the API call pricing for keyword search, which is valuable context. However, it does not mention other behavioral aspects like whether results are paginated, ordering, or potential failure modes, so it is decent but not exhaustive.
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 well-structured: it starts with the core purpose, then explains inputs, output, cost, and examples. Every sentence earns its place, and the inclusion of concrete examples improves clarity without unnecessary verbosity.
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 (7 parameters, no output schema), the description covers the key aspects: purpose, input types, the critical output (court_code + case_number), and cost behavior. It does not describe the full response structure or pagination details, but for a discovery tool, this is sufficient to invoke it 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?
The schema covers 71% of parameters with descriptions, and the description adds examples for the query parameter (e.g., 'Sbarro', '1:14-bk') and clarifies query types. However, it adds no information about page_size, page_number, or other parameters beyond the schema, leaving some gaps that are not fully compensated.
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 'Discover' and specifies the target ('federal court cases you don't have the court+number for yet'). It clearly states the resource and distinguishes the tool from siblings by emphasizing it provides court_code + case_number needed by all other tools, which is unique among the listed 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 states when to use this tool ('when you don't have the court+number yet') and notes the output is a prerequisite for other tools. A cost caveat for keyword search is also given, but it does not explicitly name an alternative tool for other scenarios, so it falls short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_caseA
Get all metadata for a known case: title, chapter, judge, key dates (filed/closed/discharged), assets, liabilities, and links to sub-resources (dockets, claims, parties, etc.) with their last-modified timestamps. Always call this first after finding a case. The response includes a 'menu' object where each entry has a 'modified' timestamp (null = never purchased) showing what sub-resources are available. Free unless include_live_pacer=true.
| Name | Required | Description | Default |
|---|---|---|---|
| court_code | Yes | Court code, e.g. 'nysbke' (NY Southern Bankruptcy), 'debke' (Delaware Bankruptcy), 'ilnbke' (IL Northern Bankruptcy). Use list_courts to find the right code. | |
| case_number | Yes | Long-form case number, e.g. '1:14-bk-10557'. Always use the long form — PACER short forms like '14-10557' will not match. Use find_cases if unsure. | |
| include_live_pacer | No | true = fetch fresh data from PACER (costs PACER credits). Default false = free cached. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses that the response includes a 'menu' object with 'modified' timestamps (null = never purchased), and explains cost behavior ('Free unless include_live_pacer=true'). It could add details about authentication or edge cases, but the core behavioral traits are covered.
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, starts with the core purpose, and packs relevant details (metadata fields, menu timestamps, cost) without redundancy or fluff. Every sentence earns its place.
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?
There is no output schema, so the description must explain return values—it does, by listing metadata categories and the menu object with timestamp semantics. It also provides workflow context ('Always call this first'). It could mention error behavior or the full list of sub-resources, but for a read-only metadata hub, it is sufficiently complete.
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 well-documented (court_code examples, long-form case_number, PACER cost note). The description does not offer unique parameter meaning beyond the schema; the cost note duplicates the schema's include_live_pacer description. Baseline 3 is appropriate.
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 'Get all metadata for a known case' and enumerates specific contents (title, chapter, judge, dates, assets, liabilities) and sub-resource links. It distinguishes itself from sibling tools like get_dockets and get_claims by positioning itself as the umbrella resource-fetching tool.
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 instruction 'Always call this first after finding a case' provides explicit when-to-use guidance. It implies the tool precedes sub-resource fetches, but it does not explicitly name alternatives or exclusion criteria like 'for dockets use get_dockets instead,' so it falls just 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.
get_claimsA
Get the bankruptcy claims register — all proofs of claim filed by creditors, with amounts (filed/allowed/paid), claim type (secured/unsecured), creditor names, and filing dates. Essential for Chapter 11 analysis and creditor research. Supports keyword search and date/number range filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| number_to | No | ||
| page_size | No | ||
| claim_type | No | Filter by claim type | |
| court_code | Yes | Court code, e.g. 'nysbke' (NY Southern Bankruptcy), 'debke' (Delaware Bankruptcy), 'ilnbke' (IL Northern Bankruptcy). Use list_courts to find the right code. | |
| sort_order | No | ||
| case_number | Yes | Long-form case number, e.g. '1:14-bk-10557'. Always use the long form — PACER short forms like '14-10557' will not match. Use find_cases if unsure. | |
| number_from | No | ||
| page_number | No | ||
| sort_column | No | ||
| date_filed_to | No | MM/DD/YYYY | |
| search_keyword | No | ||
| date_filed_from | No | MM/DD/YYYY | |
| include_live_pacer | No | true = refresh claims from PACER (costs credits). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It transparently implies a read operation and mentions filtering capabilities, but omits significant behavioral details like live PACER refresh costs (include_live_pacer), pagination, and default sorting 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 concise sentences, front-loaded with the core function, followed by use case and filtering capabilities. Every sentence earns its place with no 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?
For a tool with 13 parameters and no output schema, the description gives a good overview of purpose, return content, and filter types, but misses critical context like pagination, sorting options, and the live PACER refresh behavior. This leaves gaps for correct invocation.
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 only 46%, so the description must compensate. It adds meaning by explaining output fields (amounts, claim types) and citing 'keyword search and date/number range filtering', but does not clarify individual parameters such as sort_order, sort_column, number_from/to, or page_size.
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 'Get the bankruptcy claims register' and specifies the content (amounts, claim type, creditor names, filing dates). It distinguishes the tool as focused on claims, but does not explicitly differentiate from sibling tools like get_creditors.
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 usage context by stating 'Essential for Chapter 11 analysis and creditor research.' It does not mention exclusions or alternatives, such as when to use get_creditors instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_creditorsA
Get the creditor list for a bankruptcy case — all creditors scheduled in Schedules D/E/F, whether or not they filed a proof of claim. Different from get_claims (which shows filed proofs of claim).
| Name | Required | Description | Default |
|---|---|---|---|
| court_code | Yes | Court code, e.g. 'nysbke' (NY Southern Bankruptcy), 'debke' (Delaware Bankruptcy), 'ilnbke' (IL Northern Bankruptcy). Use list_courts to find the right code. | |
| case_number | Yes | Long-form case number, e.g. '1:14-bk-10557'. Always use the long form — PACER short forms like '14-10557' will not match. Use find_cases if unsure. | |
| include_live_pacer | No | true = refresh from PACER (costs credits). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does clarify an important nuance: the creditor list includes creditors even if they did not file a claim. However, it doesn't explicitly state that this is a read-only operation or mention cost implications for live PACER refresh, though the schema does cover the latter.
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 long, front-loaded with the core purpose and immediately followed by a differentiation from a sibling tool. There is zero redundancy; every phrase adds 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?
For a straightforward retrieval tool, the description is well-rounded: it defines the data source, inclusion criteria, and relationship to get_claims. The absence of an output schema is mitigated by the clear 'list' indication. Minor omissions like pagination details are not critical, given the tool's simplicity.
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 all parameters are already well-documented in the schema. The main description adds no parameter-specific information, so the baseline score of 3 is appropriate.
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 ('Get') and resource ('creditor list'), then clearly defines the scope: all creditors scheduled in Schedules D/E/F, whether or not they filed a proof of claim. It also explicitly contrasts itself with the sibling tool get_claims, making the tool's 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 directly names get_claims as an alternative and explains the key distinction (scheduled creditors vs. filed proofs of claim). This gives explicit when-to-use guidance. Additionally, the schema parameter descriptions recommend using list_courts and find_cases when unsure, providing further orientation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_docketsA
Get the docket sheet for a case — all filings in chronological order with dates, descriptions, and attached document info (is_cached, download_cost). The header includes judge, attorneys, trustees, and 341 meeting date. Supports keyword search and date/number range filtering. Free unless include_live_pacer=true.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | ||
| court_code | Yes | Court code, e.g. 'nysbke' (NY Southern Bankruptcy), 'debke' (Delaware Bankruptcy), 'ilnbke' (IL Northern Bankruptcy). Use list_courts to find the right code. | |
| sort_order | No | ||
| case_number | Yes | Long-form case number, e.g. '1:14-bk-10557'. Always use the long form — PACER short forms like '14-10557' will not match. Use find_cases if unsure. | |
| page_number | No | ||
| sort_column | No | ||
| date_filed_to | No | MM/DD/YYYY | |
| search_keyword | No | Filter docket text | |
| date_filed_from | No | MM/DD/YYYY | |
| docket_number_to | No | ||
| include_documents | No | When include_live_pacer=true: wait for document metadata (binder.documents) to be populated before returning. Slower but the response includes is_cached and download_cost for each PDF. Default false (metadata fetched in background). | |
| docket_number_from | No | ||
| include_live_pacer | No | true = purchase updated docket sheet from PACER (costs credits). Default false. Always pass date_filed_from when refreshing to only buy entries newer than what CourtAPI already has — omitting it buys the entire docket (expensive for active cases). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that filings are in chronological order, the header content, filtering support, and cost behavior. However, it omits details on pagination, sorting options (beyond default), and the behavioral implications of include_documents or other parameters, leaving gaps in fully predicting tool 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 concise at three sentences, front-loaded with the primary purpose and immediately followed by essential details on content, filters, and cost. Every sentence earns its place without redundant or fluff 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?
Given the tool's complexity (13 parameters, no output schema, no annotations), the description provides a solid high-level overview but is not fully complete. It lacks explicit guidance on pagination, sorting behavior, and the exact output structure beyond mentions of header fields and document info. The schema fills some gaps, but the description alone is insufficient for a fully informed invocation.
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 description adds meaning beyond the schema by summarizing the filter capabilities (keyword search, date/number ranges) and cost implications of include_live_pacer. However, with schema description coverage at 54%, the description only partially compensates for undocumented parameters like page_size, sort_order, and docket_number_from, not detailing their exact usage or interplay.
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 and resource: 'Get the docket sheet for a case'. It distinguishes itself from sibling tools like get_case (case details) and get_document (individual documents) by specifying the docket sheet content, including filings, dates, descriptions, and attached document info.
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 the tool (for obtaining a docket sheet) and notes filtering capabilities like keyword search and date/number ranges. It also hints at cost implications with 'Free unless include_live_pacer=true'. However, it does not explicitly state when not to use it or name alternative tools, lacking explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_documentA
Get a PDF attached to a docket entry. Always checks the cache first. If cached (is_cached=true), returns download_url + preview_url + ocr_link at no cost. If not cached and purchase=true, buys from PACER and returns download_url + receipt. If not cached and purchase=false (default), returns cost info so you can decide. docket_seq comes from docket entries (e.g. '42.00000'). part defaults to 1 (main doc).
| Name | Required | Description | Default |
|---|---|---|---|
| part | No | Document part, 1 = main doc | |
| purchase | No | true = buy from PACER if not cached (costs credits). Default false. | |
| court_code | Yes | Court code, e.g. 'nysbke' (NY Southern Bankruptcy), 'debke' (Delaware Bankruptcy), 'ilnbke' (IL Northern Bankruptcy). Use list_courts to find the right code. | |
| docket_seq | Yes | Docket sequence number, e.g. '42.00000' or '42' | |
| case_number | Yes | Long-form case number, e.g. '1:14-bk-10557'. Always use the long form — PACER short forms like '14-10557' will not match. Use find_cases if unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden of behavioral disclosure. It clearly explains the caching mechanism, the conditional branches (cached vs. not cached, purchase true/false), and what is returned in each scenario. The cost implications of purchase=true and the 'no cost' cached case are transparent, leaving no major behavioral surprises.
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 comprehensive. It front-loads the core purpose, then uses a conditional structure to explain behaviors without redundancy. Every sentence contributes necessary context, making it efficient and well-organized.
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 absence of an output schema, the description appropriately explains what the tool returns in each possible branch (cached, purchase=true, purchase=false). It also offers context on obtaining docket_seq and the part parameter, making it complete for a tool of this moderate complexity.
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 input schema already covers all parameters with descriptions (100% coverage), so the baseline is 3. The description adds value by clarifying the format of docket_seq (e.g., '42.00000'), emphasizing that part defaults to 1 (main doc), and reiterating the purchase default. This extra context goes beyond the schema but does not fully restructure 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 starts with a specific verb+resource: 'Get a PDF attached to a docket entry.' It clearly distinguishes itself from sibling tools like get_case (which retrieves case-level info) and get_dockets (which lists docket entries). The purpose is unambiguous and accurately reflects the tool's function.
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 the tool: when you need a specific PDF from a docket entry. It explains the default behavior (purchase=false) and how to change it, and notes that docket_seq comes from docket entries. However, it does not explicitly mention alternatives or when NOT to use this tool, though the guidance is substantive enough to be above a basic 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pacer_credentialsA
Check or update PACER credentials stored in CourtAPI. PACER credentials are required before any include_live_pacer=true call. action='check' → show stored username (password not returned). action='set' → store pacer_user + pacer_pass. action='validate' → test credentials without storing. action='delete' → remove stored credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| validate | No | For action='set': whether to test credentials against PACER before storing. Default true. | |
| pacer_pass | No | Required for set/validate | |
| pacer_user | No | Required for set/validate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses key behaviors: password is not returned on check, validate tests without storing, and delete removes stored credentials. It also implies side effects for set/delete. While it does not cover failure modes or return formats, it provides meaningful behavioral transparency beyond 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?
The description is compact and well-structured. It opens with a one-sentence purpose, then efficiently lists actions in a readable arrow format. Every sentence provides necessary information without redundant 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?
The tool has four distinct actions with different behaviors, and the description covers each sufficiently. It omits explicit return values or error handling, which would be helpful given no output schema, but the core usage and semantics are clear. The prerequisite note about include_live_pacer=true adds important context.
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 75%, and the description adds significant meaning to the action enum by mapping each value to its effect. It also clarifies that pacer_user and pacer_pass are needed for set/validate, matching the schema. However, the 'validate' boolean parameter is not mentioned in the description, though the schema already describes it.
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 purpose: 'Check or update PACER credentials stored in CourtAPI.' It specifies the resource (PACER credentials) and the verb (check/update), and enumerates four distinct actions with their behaviors. This distinguishes it from sibling tools that handle case data retrieval.
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 contextual usage: 'PACER credentials are required before any include_live_pacer=true call.' This tells the agent when the tool is needed. It does not explicitly mention alternatives or when not to use it, but the prerequisite context serves as a clear guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_partiesA
Get all parties in a case (debtors, creditors, plaintiffs, defendants, trustees) and optionally their attorneys with firm name, contact info, and bar number. Useful for conflicts checks, service lists, and identifying who is involved.
| Name | Required | Description | Default |
|---|---|---|---|
| court_code | Yes | Court code, e.g. 'nysbke' (NY Southern Bankruptcy), 'debke' (Delaware Bankruptcy), 'ilnbke' (IL Northern Bankruptcy). Use list_courts to find the right code. | |
| case_number | Yes | Long-form case number, e.g. '1:14-bk-10557'. Always use the long form — PACER short forms like '14-10557' will not match. Use find_cases if unsure. | |
| include_attorneys | No | Also fetch attorney records. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the optional include_attorneys behavior and specifies the attorney data returned (firm name, contact info, bar number). It does not mention potential side effects, but as a 'get' tool, the read-only nature is clear. The scope ('all parties') and optional behavior are sufficiently transparent.
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 main purpose, and includes relevant use cases without any wasted words. Every sentence earns its place.
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 moderate complexity and lack of an output schema, the description covers the main behavioral aspects: party scope, optional attorneys, and use cases. It does not enumerate return fields for parties themselves, but the party types are listed, making it sufficiently complete for a list-type 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 input schema already provides 100% coverage with detailed descriptions for court_code and case_number, including examples and formatting guidance. The description adds no additional parameter semantics beyond what the schema states, so the baseline score of 3 is appropriate.
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 'Get all parties in a case' with specific party types (debtors, creditors, plaintiffs, defendants, trustees) and optionally attorneys. It distinguishes itself from siblings like get_creditors by covering all parties, and from get_case by focusing on party lists.
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 lists concrete use cases ('conflicts checks, service lists, and identifying who is involved'), providing clear context for when to use it. However, it does not explicitly mention alternatives or when not to use it, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_courtsA
List all PACER courts with their court codes. Call this when you need a court_code and don't know it. Returns ~200 courts; use type to filter. Common codes: nysbke, debke, ilnbke, cacdbe, txnbke.
| Name | Required | Description | Default |
|---|---|---|---|
| test | No | false = exclude training/test courts (recommended). Omit to include all. | |
| type | No | Filter by court type. Omit for all ~200 courts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even without annotations, the description discloses key behaviors: it returns ~200 courts, supports type-based filtering, and provides common court code examples. It doesn't describe pagination or authentication requirements, but for a simple list operation, the added context is adequate.
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 short, purposeful sentences. It front-loads the core purpose, gives a usage trigger, and provides immediately actionable examples—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?
For a simple list tool with two optional parameters and no output schema, the description covers purpose, usage trigger, result scale, filtering, and sample values. It is self-sufficient and unlikely to leave an agent guessing.
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 descriptions already fully cover both 'test' and 'type' parameters (100% coverage). The description adds little beyond restating 'use type to filter' and providing examples, so it stays at the baseline for schema-covered params.
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 begins with a specific verb and resource: 'List all PACER courts with their court codes.' It clearly distinguishes this tool from siblings like get_case or find_cases by focusing on court metadata lookup.
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 when to call the tool: 'Call this when you need a court_code and don't know it.' It also directs filtering via 'use type to filter,' though it doesn't mention specific alternatives or exclusions. The when-condition is clear and useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ncl_searchA
Search PACER's National Case Locator across all federal courts at once. More comprehensive than find_cases for party name searches — queries PACER directly. Costs PACER credits. Returns up to ~50 cases per page; pass search_id + page to paginate. Use for: finding a person's cases across all courts, SSN lookups, cross-court party searches.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Requires search_id. | |
| ssn4 | No | Last 4 digits of SSN (requires last_name) | |
| ssntin | No | Full SSN or TIN (requires last_name) | |
| case_no | No | Case number | |
| chapter | No | Bankruptcy chapter, e.g. '11' | |
| filed_to | No | MM/DD/YYYY | |
| last_name | No | Last name or business name | |
| search_id | No | From a previous ncl_search response — pass to get the next page | |
| court_code | No | Limit to a specific court | |
| court_type | No | Which court type to search | all |
| filed_from | No | MM/DD/YYYY | |
| first_name | No | ||
| party_name | No | Full name 'last, first' — alternative to last_name/first_name | |
| sort_field | No | Sort field, e.g. 'cs_date_filed' | |
| middle_name | No | ||
| party_exact | No | Exact name match only | |
| region_code | No | PACER region code | |
| sort_reverse | No | Reverse sort direction |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses important behavioral traits: costs PACER credits, returns up to ~50 per page, and pagination via search_id+page. It could add more about error handling or authentication, but covers the most critical operational aspects.
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 sentences cover purpose, differentiation, cost, page size, pagination, and use cases—no filler. Information is front-loaded and every sentence earns its place.
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 complex 18-parameter tool with no output schema and no annotations, the description provides purpose, alternatives, cost, pagination, and use cases. It does not describe the return structure beyond page count, but the schema handles parameter specifics. Slight gap on prerequisites like PACER credentials, but acceptable.
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 89%, so parameters are already well-documented. The description reinforces the search_id+page pagination relationship but does not add significant meaning beyond the schema. It hints at party name usage but leaves parameter details to 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 explicitly states the tool searches PACER's National Case Locator across all federal courts, providing a specific verb and resource. It also distinguishes from sibling find_cases by noting it is 'more comprehensive' for party name searches, establishing clear differentiation.
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 explicit use cases: 'finding a person's cases across all courts, SSN lookups, cross-court party searches.' It also tells the agent when not to use it by contrasting with find_cases, so the agent can select correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.1.1- First observed
find_cases - First observed
get_case - First observed
get_claims - First observed
get_creditors - First observed
get_dockets - First observed
get_document - First observed
get_pacer_credentials - First observed
get_parties - First observed
list_courts - First observed
ncl_search
TDQS
Scored across 10 tools
Each tool targets a distinct resource or action: case discovery, national search, court codes, case metadata, dockets, documents, claims, parties, creditor schedules, and PACER credentials. Descriptions explicitly differentiate similar tools such as get_creditors vs get_claims and ncl_search vs find_cases, so there is no ambiguity.
Most tools consistently use the 'get_' prefix for retrieving known resources (get_case, get_dockets, get_document, get_claims, get_parties, get_creditors, get_pacer_credentials). However, three tools deviate: ncl_search, list_courts, and find_cases use different verb styles or acronyms, introducing minor inconsistency.
With 10 tools, the server is well-scoped. Each tool covers a distinct aspect of court record access, from case finding to document retrieval to credential management, with no redundancy. This is an appropriate size for the domain.
The tool set covers the full workflow: discovering cases (find_cases, ncl_search), retrieving case metadata (get_case), dockets (get_dockets), documents (get_document), parties (get_parties), creditors (get_creditors), and claims (get_claims), plus court metadata (list_courts) and PACER credentials (get_pacer_credentials). No obvious gaps for a read-only court records API.
Maintenance
Related MCP Connectors
MCP for CourtListener: US federal and state opinions, dockets, judges, plus eCFR regulations.
Federal court records and PACER case data. 4 MCP tools for legal research.
Search U.S. case law, fetch opinions, and ask matter-aware legal questions over your documents.
Search US court opinions, federal dockets, judges, citations, and oral arguments via CourtListener.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables 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.22 npm3MIT
- FlicenseNot gradedqualityDmaintenanceEnables US case law search, citation parsing, practice management via Clio, and federal court filings through PACER.-
- FlicenseNot gradedqualityAmaintenanceEnables LLM-friendly access to the CourtListener legal database and eCFR for searching legal opinions, court cases, judges, documents, and federal regulations.12-
- AlicenseAqualityCmaintenanceLegalMCP is a comprehensive US legal MCP server that enables AI assistants to search over 4 million US court opinions, manage Clio practice data, and access PACER federal filings through natural language.1866MIT