The CourtListener MCP server gives AI assistants direct access to the CourtListener legal database - US federal and state court opinions, dockets, RECAP filings, PACER data, oral arguments, and judges - plus the Electronic Code of Federal Regulations, all through the official CourtListener API v4. Vaquill hosts a public instance with bring-your-own-key (BYOK) auth, so your CourtListener token is forwarded on every request and never stored.Documentation Index
Fetch the complete documentation index at: https://vaquill.ai/docs/llms.txt
Use this file to discover all available pages before exploring further.
GitHub
Source code, Docker images, issues
CourtListener API
Upstream API docs and free key signup
Hosted endpoint
courtlistener-mcp.vaquill.aiForked from Travis-Prall/court-listener-mcp. The Vaquill fork adds a hosted endpoint, BYOK auth, a
/health route, and production Docker hardening. Tools and search semantics are unchanged.Quickstart
Get a free CourtListener token
Sign up at courtlistener.com/help/api/rest/ and copy your API key. The Free Law Project does not charge for API access.
Point your client at the hosted endpoint
URL:
https://courtlistener-mcp.vaquill.ai/mcp/Header: X-CourtListener-Token: <your-token>Client setup
Tools
Search
| Tool | Description |
|---|---|
search_opinions | Full-text search across court opinions with court, date, judge, and citation filters |
search_dockets | Search dockets by case name, court, judge, party, or date range |
search_dockets_with_documents | Same as search_dockets but only returns dockets with PACER documents attached |
search_recap_documents | Search RECAP-archived PACER filings (briefs, motions, orders) |
search_audio | Oral argument audio recordings |
search_people | Federal and state judges, with biographical and political data |
Get by ID
| Tool | Description |
|---|---|
get_opinion | Full text and metadata for a single opinion |
get_docket | Full docket record including parties and event timeline |
get_audio | Oral argument audio file metadata and download URL |
get_court | Court metadata (jurisdiction, position in hierarchy, dates of operation) |
get_person | Judge biography, education, appointments, political affiliation |
get_cluster | Opinion cluster - groups majority, concurrence, and dissent for a single decision |
Citations
| Tool | Description |
|---|---|
lookup_citation | Resolve a single citation string to the canonical opinion |
batch_lookup_citations | Bulk variant - resolve up to 100 citations in one call |
verify_citation_format | Validate Bluebook citation format without hitting the database |
parse_citation_with_citeurl | Use the citeurl library to parse complex citation strings |
extract_citations_from_text | Extract all citations from a block of text |
enhanced_citation_lookup | Combines extraction, parsing, and lookup in a single call |
eCFR
| Tool | Description |
|---|---|
list_titles | List all 50 titles of the Code of Federal Regulations |
list_agencies | List federal agencies with their CFR title assignments |
search_regulations | Full-text search across the eCFR |
list_all_corrections | Recent CFR corrections (errata) |
list_corrections_by_title | Corrections scoped to a single CFR title |
get_search_suggestions | Autocomplete suggestions for the search bar |
get_search_summary | Aggregate stats for a search query |
get_title_search_counts | Hit counts per CFR title for a query |
get_daily_search_counts | Daily hit-count time series for a query |
get_ancestry | Hierarchical ancestry for a CFR section (title > chapter > part > section) |
get_title_structure | Full table of contents for a CFR title |
get_source_xml | Raw XML source for a CFR section |
get_source_json | Parsed JSON source for a CFR section |
System
| Tool | Description |
|---|---|
status | High-level server status string |
get_api_status | Detailed CourtListener API connectivity check |
health_check | Liveness probe (returns { "status": "healthy" }) |
Authentication
Two modes, in priority order:- Per-request header (BYOK, preferred) - send the user’s CourtListener key on every MCP request:
X-CourtListener-Token: <key>(preferred), orAuthorization: Token <key>(CourtListener’s native scheme - only works if the MCP server itself is not gated byAuthorization).
- Server env fallback - set
COURT_LISTENER_API_KEYon the server. Used when no per-request header is supplied. Leave unset on public instances to force BYOK.
ValueError with a clear message.
Self-hosting
Docker
Python (uv)
Stdio (local CLI integration)
Environment variables
| Variable | Required | Default | Description |
|---|---|---|---|
COURT_LISTENER_API_KEY | Optional* | - | Server-side fallback when no per-request header. Leave unset on public servers to force BYOK. |
COURTLISTENER_BASE_URL | No | https://www.courtlistener.com/api/rest/v4/ | Upstream API root |
COURTLISTENER_TIMEOUT | No | 30 | Per-request timeout in seconds |
MCP_TRANSPORT | No | stdio | stdio, http, or sse |
MCP_PORT | No | 8000 | HTTP / SSE only |
HOST | No | 0.0.0.0 | HTTP / SSE only |
Health check
Usage examples
Type these to any connected AI assistant:“Search for Supreme Court opinions on qualified immunity from the last two terms.” “Look up docket 23-1234 in the Southern District of New York and list the filings since January.” “Find all cases citing Miranda v. Arizona and group by circuit.” “Verify the citation format 410 U.S. 113 and resolve it to the canonical opinion.” “Extract every citation from this brief, then look each one up:” (paste text) “Pull the eCFR text for 17 CFR 240.10b-5 and list any 2024 corrections.” “Show me Judge Stephen Breyer’s biography and the courts he sat on.”
Related
MCP overview
All Vaquill MCP servers at a glance
Vaquill MCP
Cross-jurisdiction wrapper over the Vaquill API
Integrations
Chatbots, widgets, browser extensions, automation
Authentication
How Vaquill handles auth across products

