courtlistener-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOST | No | Host for HTTP/SSE transport. | 0.0.0.0 |
| MCP_PORT | No | Port for HTTP/SSE transport. | 8000 |
| ECFR_BASE_URL | No | Base URL for the eCFR API. | https://www.ecfr.gov |
| MCP_TRANSPORT | No | Transport type: stdio, http, or sse. | stdio |
| RATE_LIMIT_RPS | No | Max requests per second per client. | 15 |
| RATE_LIMIT_BURST | No | Burst capacity per client. | 40 |
| RATE_LIMIT_ENABLED | No | Enable per-client rate limiting. | true |
| COURTLISTENER_TIMEOUT | No | Timeout in seconds for CourtListener API requests. | 30 |
| COURTLISTENER_BASE_URL | No | Base URL for the CourtListener API. | https://www.courtlistener.com/api/rest/v4/ |
| COURT_LISTENER_API_KEY | No | Fallback API key when no per-request header is provided. Leave unset on public servers to force BYOK. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| statusA | Check the status of the CourtListener MCP server. Returns: A dictionary containing server status, system metrics, and service information. |
| search_opinionsA | Search case law opinion clusters with nested Opinion documents in CourtListener. |
| search_docketsB | Search federal cases (dockets) from PACER in CourtListener. |
| search_dockets_with_documentsA | Search federal cases (dockets) with up to three nested documents. If there are more than three matching documents, the more_docs field will be true. |
| search_recap_documentsA | Search federal filing documents from PACER in the RECAP archive. |
| search_audioB | Search oral argument audio recordings in CourtListener. |
| search_peopleA | Search judges and legal professionals in the CourtListener database. |
| get_opinionA | Get a specific court opinion by ID from CourtListener. |
| get_docketA | Get a specific court docket by ID from CourtListener. |
| get_audioA | Get oral argument audio information by ID from CourtListener. |
| get_clusterB | Get an opinion cluster by ID from CourtListener. |
| get_personA | Get judge or legal professional information by ID from CourtListener. |
| get_courtB | Get court information by ID from CourtListener. |
| citation_lookup_citationA | Look up a legal citation to find the opinion it references in CourtListener. This tool accepts various citation formats including:
|
| citation_batch_lookup_citationsA | Look up multiple legal citations in a single request. This is more efficient than making individual requests for each citation. Accepts up to 100 citations at once. |
| citation_verify_citation_formatA | Verify if a citation string is in a valid format using citeurl's advanced parsing. This tool performs validation using citeurl's comprehensive citation templates to check if a citation appears to be in a recognized legal citation format. This is much more accurate than simple regex matching. Returns information about the citation format and any detected issues. |
| citation_parse_citation_with_citeurlA | Parse a legal citation using citeurl's advanced citation recognition. This tool uses the citeurl library to parse legal citations and extract structured information including tokens, normalized format, and URL generation. Returns detailed information about the citation including:
|
| citation_extract_citations_from_textA | Extract all legal citations from a block of text using citeurl. This tool finds and parses all legal citations within a given text, including both long-form and short-form citations (like 'id.' references). |
| citation_enhanced_citation_lookupA | Enhanced citation lookup combining citeurl parsing with CourtListener data. This tool first uses citeurl to parse and validate the citation format, then optionally queries the CourtListener API for additional case information. |
| ecfr_list_titlesA | List all 50 CFR titles with their latest amended/issue dates and status. |
| ecfr_get_title_versionsA | List the available content versions (issue dates) for one CFR title. |
| ecfr_get_title_structureA | Get the full hierarchical structure (title -> section) of a CFR title on a date. |
| ecfr_get_ancestryA | Get the ancestry chain (title -> ... -> node) for a CFR node on a date. |
| ecfr_get_source_xmlA | Fetch the source regulation TEXT (XML) for a CFR node on a snapshot date. Pass a part or section to scope the request. Fetching an entire large title
at once can time out on the eCFR side, so narrowing is strongly recommended.
Returns the raw XML under |
| ecfr_list_agenciesA | List all agencies that appear in the CFR, with their title/chapter references. |
| ecfr_list_all_correctionsB | List CFR corrections, optionally filtered by title and/or effective date. |
| ecfr_list_corrections_by_titleA | List all corrections for a single CFR title. |
| ecfr_search_regulationsA | Full-text search over federal regulations, returning matching sections with hierarchy. |
| ecfr_get_search_countB | Get the total number of CFR sections matching a search query. |
| ecfr_get_search_summaryB | Get summary details (counts + metadata) for a CFR search query. |
| ecfr_get_title_search_countsA | Get search result counts broken down by CFR title. |
| ecfr_get_daily_search_countsA | Get search result counts broken down by date (daily histogram). |
| ecfr_get_hierarchy_search_countsA | Get search result counts distributed across the CFR hierarchy. |
| ecfr_get_search_suggestionsA | Get search-term suggestions for a partial CFR query. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 34 tools
Each tool has a distinct and well-described purpose. Citation tools cover different operations (lookup, batch, verify, parse, extract, enhanced lookup). eCFR tools each handle a separate task (list titles, get versions, structure, ancestry, search, counts, etc.). General CourtListener tools are clearly separated by resource and action (search vs get, opinions vs dockets vs audio vs people). No two tools appear to overlap in functionality.
Tools are grouped with clear prefixes: 'citation_' for citation tools, 'ecfr_' for eCFR tools, and unprefixed verb+noun for general tools (e.g., get_court, search_opinions). Within each group, naming follows a consistent verb_noun pattern. The only minor inconsistency is the lack of a common prefix for general tools, but this is acceptable given the distinct functional areas.
With 34 tools, the count exceeds the recommended range for a well-scoped server (3-15). While the server covers three broad legal domains (citations, eCFR, CourtListener), the tool surface is quite large and could potentially be split into separate servers for better focus. Many tools are very granular, especially for eCFR search counts and hierarchies.
The tool set covers the major operations for legal research: citation handling (lookup, batch, parsing, validation, extraction), eCFR retrieval and search (titles, versions, structure, ancestry, corrections, full-text search with counts), and CourtListener data access (search and get for opinions, dockets, audio, people, courts, RECAP documents). Minor gaps might include advanced filtering or sorting options, but overall the surface is comprehensive for the intended use.