Connects Claude to CourtListener's v4 API and the Electronic Code of Federal Regulations, giving you programmatic access to US federal and state court opinions, dockets, RECAP filings, oral arguments, judge profiles, and live eCFR regulations. You get 25+ tools spanning search, citation parsing, batch lookup, and regulatory text retrieval. The Vaquill team runs a public HTTPS endpoint where you bring your own free CourtListener token via custom headers, so there's no local install required for Claude Desktop, Cursor, or VS Code. Useful when you're building legal research workflows, need to verify citations in context, or want to pull current CFR text without leaving your editor.
Public tool metadata for what this MCP can expose to an agent.
search_cases_by_problemFind relevant cases using LLM-generated search keywords. The LLM should extract legal keywords from the problem description and provide them for precise case law search.7 paramsFind relevant cases using LLM-generated search keywords. The LLM should extract legal keywords from the problem description and provide them for precise case law search.
limitnumbercase_typestringconsumer · small-claims · landlord-tenant · contract · warranty · debt-collectiondate_rangestringrecent-2years · established-precedent · all-timedefault: recent-2yearscourt_levelstringtrial · appellate · supreme · alldefault: alljurisdictionstringproblem_summarystringsearch_keywordsarrayget_case_detailsDeep dive into specific case for precedent analysis with full legal reasoning2 paramsDeep dive into specific case for precedent analysis with full legal reasoning
case_idstringcontent_modestringsummary · fulldefault: summaryfind_similar_precedentsFind cases with similar legal reasoning or outcomes to a reference case5 paramsFind cases with similar legal reasoning or outcomes to a reference case
limitnumberjurisdictionstringlegal_conceptsarrayreference_case_idstringcitation_thresholdnumberanalyze_case_outcomesAnalyze outcome patterns for similar cases to predict success likelihood4 paramsAnalyze outcome patterns for similar cases to predict success likelihood
case_typestringdate_rangestringlast-year · last-2years · last-5yearsdefault: last-2yearscourt_levelstringtrial · appellate · alldefault: alljurisdictionstringget_judge_analysisAnalyze judge's typical rulings on similar issues for strategic insights4 paramsAnalyze judge's typical rulings on similar issues for strategic insights
courtstringcase_typestringjudge_namestringjurisdictionstringvalidate_citationsVerify and expand legal citations with related case discovery3 paramsVerify and expand legal citations with related case discovery
citationsarraycontext_textstringjurisdictionstringget_procedural_requirementsFind procedural rules and filing requirements for specific case types in any jurisdiction4 paramsFind procedural rules and filing requirements for specific case types in any jurisdiction
courtstringcase_typestringclaim_amountnumberjurisdictionstringtrack_legal_trendsIdentify recent trends in similar cases for strategic advantage3 paramsIdentify recent trends in similar cases for strategic advantage
legal_areastringconsumer-protection · small-claims · landlord-tenant · contract-disputes · warranty-claimstrend_typestringoutcomes · filing-patterns · new-precedents · settlement-ratesdefault: outcomestime_periodstringlast-6months · last-year · last-2yearsdefault: last-yearsearch_pacer_dockets📊 PACER SEARCH: Search federal court dockets from PACER via CourtListener's RECAP Archive. Find active and terminated cases with comprehensive party, attorney, and filing information. Search by case name, party name, or nature of suit across all federal courts or specific jur...7 params📊 PACER SEARCH: Search federal court dockets from PACER via CourtListener's RECAP Archive. Find active and terminated cases with comprehensive party, attorney, and filing information. Search by case name, party name, or nature of suit across all federal courts or specific jur...
courtstringlimitnumbercase_namestringcase_typestringcivil · criminal · bankruptcy · alldefault: alldate_rangeobjectparty_namestringnature_of_suitstringget_docket_entries🔒 PREMIUM ACCESS REQUIRED | EXPERIMENTAL: Get detailed docket entries for a specific case, including all filings, orders, and document references from PACER. Note: This function requires CourtListener premium API access and is experimental - may not work with basic API keys.3 params🔒 PREMIUM ACCESS REQUIRED | EXPERIMENTAL: Get detailed docket entries for a specific case, including all filings, orders, and document references from PACER. Note: This function requires CourtListener premium API access and is experimental - may not work with basic API keys.
limitnumberdocket_idstringentry_typestringall · documents · orders · filingsdefault: allsearch_parties_attorneys📊 BASIC ACCESS: Search for parties and attorneys across PACER cases. Track representation patterns and attorney success rates. Note: Basic API access provides limited data - premium access required for full attorney/party details.6 params📊 BASIC ACCESS: Search for parties and attorneys across PACER cases. Track representation patterns and attorney success rates. Note: Basic API access provides limited data - premium access required for full attorney/party details.
courtstringlimitnumberfirm_namestringdate_rangeobjectparty_namestringattorney_namestringanalyze_case_timeline🔒 PREMIUM ACCESS REQUIRED | EXPERIMENTAL: Analyze case progression timeline from PACER docket entries. Track delays, activity patterns, and case development. Note: Requires premium access to docket-entries endpoint - basic API access provides limited timeline data only.3 params🔒 PREMIUM ACCESS REQUIRED | EXPERIMENTAL: Analyze case progression timeline from PACER docket entries. Track delays, activity patterns, and case development. Note: Requires premium access to docket-entries endpoint - basic API access provides limited timeline data only.
docket_idstringanalysis_typestringprogression · delays · activity · alldefault: allinclude_documentsbooleantrack_case_status📊 BASIC ACCESS: Track current status and recent activity for PACER cases. Monitor active litigation progress. Note: Basic access provides case metadata only - premium access required for detailed activity tracking.3 params📊 BASIC ACCESS: Track current status and recent activity for PACER cases. Monitor active litigation progress. Note: Basic access provides case metadata only - premium access required for detailed activity tracking.
docket_idstringstatus_historybooleaninclude_recent_activitybooleanget_case_documents🔒 PREMIUM ACCESS REQUIRED | EXPERIMENTAL: Retrieve case documents from PACER with full text extraction. Access orders, motions, briefs, and opinions. Note: This function requires CourtListener premium API access and is experimental - may not work with basic API keys.4 params🔒 PREMIUM ACCESS REQUIRED | EXPERIMENTAL: Retrieve case documents from PACER with full text extraction. Access orders, motions, briefs, and opinions. Note: This function requires CourtListener premium API access and is experimental - may not work with basic API keys.
limitnumberdocket_idstringinclude_textbooleandocument_typestringall · orders · motions · briefs · opinionsdefault: allA Model Context Protocol server that gives AI assistants access to the CourtListener legal database (US federal + state court opinions, dockets, RECAP filings, PACER data, oral arguments, judges) and the Electronic Code of Federal Regulations via the official CourtListener API v4.
Use it with Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, ChatGPT Desktop, or any MCP-compatible client.
Forked from Travis-Prall/court-listener-mcp. This fork adds a hosted endpoint, bring-your-own-key (BYOK) auth, a
/healthroute, and Dockerfile hardening for production hosting. Tools and search semantics are unchanged.
The Vaquill team runs a public instance for the community:
https://courtlistener-mcp.vaquill.ai/mcp/
You bring your own free CourtListener token from courtlistener.com/help/api/rest/, the server forwards it. We never see or store your key.
~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or
%APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"courtlistener": {
"url": "https://courtlistener-mcp.vaquill.ai/mcp/",
"headers": {
"X-CourtListener-Token": "YOUR_COURTLISTENER_TOKEN"
}
}
}
}
.cursor/mcp.json:
{
"mcpServers": {
"courtlistener": {
"url": "https://courtlistener-mcp.vaquill.ai/mcp/",
"headers": { "X-CourtListener-Token": "YOUR_COURTLISTENER_TOKEN" }
}
}
}
.vscode/mcp.json:
{
"servers": {
"courtlistener": {
"type": "http",
"url": "https://courtlistener-mcp.vaquill.ai/mcp/",
"headers": { "X-CourtListener-Token": "YOUR_COURTLISTENER_TOKEN" }
}
}
}
Settings → Connectors → Add custom connector → paste the URL and add
X-CourtListener-Token as a header. Workspace owners only.
Any client that supports MCP streamable HTTP with custom headers works.
For stdio-only clients, run the server locally (see below) or proxy with
mcp-remote.
| Group | Tools |
|---|---|
| Search | search_opinions, search_dockets, search_dockets_with_documents, search_recap_documents, search_audio, search_people |
| Get | get_opinion, get_docket, get_audio, get_court, get_person, get_cluster |
| Citation | lookup_citation, batch_lookup_citations, verify_citation_format, parse_citation_with_citeurl, extract_citations_from_text, enhanced_citation_lookup |
| eCFR | list_titles, list_agencies, search_regulations, list_all_corrections, list_corrections_by_title, get_search_suggestions, get_search_summary, get_title_search_counts, get_daily_search_counts, get_ancestry, get_title_structure, get_source_xml, get_source_json |
| System | status, get_api_status, health_check |
See app/README.md for parameter details.
Two modes, in priority order:
X-CourtListener-Token: <key> (preferred), orAuthorization: Token <key> (CourtListener's native scheme — only works
if the MCP server itself isn't already gated by Authorization).COURT_LISTENER_API_KEY on the server.
Used when no per-request header is supplied. Leave unset on public
instances to force BYOK and avoid burning the operator's quota.If neither is provided, tools return a ValueError with a clear message.
git clone https://github.com/Vaquill-AI/courtlistener-mcp.git
cd courtlistener-mcp
cp .env.example .env # optionally set COURT_LISTENER_API_KEY for single-tenant
docker compose up -d
# server at http://localhost:8000/mcp/
uv sync
uv run python -m app --transport http
uv run python -m app --transport stdio
Add to Claude Desktop:
{
"mcpServers": {
"courtlistener-local": {
"command": "uv",
"args": ["run", "--directory", "/abs/path/to/courtlistener-mcp", "python", "-m", "app", "--transport", "stdio"],
"env": { "COURT_LISTENER_API_KEY": "your_token" }
}
}
}
| Var | Required | Default | Notes |
|---|---|---|---|
COURT_LISTENER_API_KEY | Optional* | — | Fallback when no per-request header. Leave unset on public servers. |
COURTLISTENER_BASE_URL | No | https://www.courtlistener.com/api/rest/v4/ | |
COURTLISTENER_TIMEOUT | No | 30 | seconds |
MCP_TRANSPORT | No | stdio | stdio | http | sse |
MCP_PORT | No | 8000 | http/sse only |
HOST | No | 0.0.0.0 | http/sse only |
* Required only if running in single-tenant mode without BYOK.
curl https://courtlistener-mcp.vaquill.ai/health
# {"status":"healthy","service":"courtlistener-mcp","version":"..."}
uv sync --dev
uv run pytest
uv run ruff format . && uv run ruff check .
uv run mypy app/
CourtListener data is provided by the Free Law Project under their respective terms.