Server data from the Official MCP Registry
MCP for CourtListener: US federal and state opinions, dockets, judges, plus eCFR regulations.
MCP for CourtListener: US federal and state opinions, dockets, judges, plus eCFR regulations.
Remote endpoints: streamable-http: https://courtlistener-mcp.vaquill.ai/mcp/
The CourtListener MCP server is a well-structured legal database client with proper authentication mechanisms and reasonable permission scope. However, several code quality and error handling issues, combined with the inherent risk of exposing API credentials through headers, warrant a moderate risk assessment. The server correctly implements bring-your-own-key (BYOK) authentication and avoids hardcoding secrets, but lacks comprehensive input validation and has some concerning error handling patterns. Supply chain analysis found 7 known vulnerabilities in dependencies (1 critical, 3 high severity).
5 files analyzed · 16 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Available as Local & Remote
This plugin can run on your machine or connect to a hosted endpoint. during install.
From the project's GitHub README.
A 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.
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.