Legal Docket Monitor MCP Server
This server enables law firms to search, monitor, and analyze federal court dockets via CourtListener, and integrate with a firm's client database for conflict checking and business development.
Search & Retrieve Dockets
Search federal dockets by case name, party name, or keywords, with optional filters for court, date range, and result limit (
search_dockets)Fetch full metadata for a specific docket by its numeric ID (
get_docket)Retrieve all or recent docket entries/filings for a case (
get_new_filings)Get a combined summary of key metadata plus the most recent filings (
get_docket_summary)List the parties and attorneys involved in a docket (
get_parties)
Monitor Dockets
Add a docket to a watch list with a human-readable matter label (
watch_docket)Remove a docket from the watch list (
unwatch_docket)List all currently watched dockets (
list_watched_dockets)Poll all watched dockets for new filings, with optional AI-powered triage that classifies each filing as routine, needs-review, or urgent (
check_watched_dockets)
Client Intelligence & Conflict Checking
Fuzzy-search the firm's client list (SharePoint, Excel, or custom webhook) to find clients matching a party or case name (
find_matching_clients)Link a CourtListener docket to a client in the firm's database, with automatic high-confidence linking or interactive confirmation when multiple matches exist (
link_docket_to_client)Health-check the configured client list backend to verify credentials and connectivity (
check_client_source)
All tools forbid background task execution, keeping the human in the loop. The client data layer is swappable (SQLite, SharePoint, etc.) without changing the tool interface.
Click 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., "@Legal Docket Monitor MCP Server Check my watched dockets for new filings."
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.
Docket Intelligence
Monitors court dockets and cross-references them against a client database to surface business development opportunities and conflict flags for law firms.
Built with MCP (Model Context Protocol), Claude, and Python. Runs locally with SQLite; deploys to Azure with SharePoint as the data layer.
Architecture
Scheduler (cron / Azure Logic App)
│
▼
Agent Orchestrator ←──── Claude API (entity extraction + classification)
│
├──► Docket Monitor MCP Server (CourtListener / Docket Alarm)
├──► Client Intel MCP Server (SQLite locally / SharePoint in prod)
└──► Notifications MCP Server (log file locally / Graph API in prod)Related MCP server: CourtListener MCP Server
Local Setup
1. Clone and install dependencies
git clone <repo>
cd docket-intelligence
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt2. Configure environment
cp .env.example .env
# Edit .env and add your ANTHROPIC_API_KEY at minimum3. Seed the local client database
python scripts/seed_clients.py4. Run the agent
# Dry run — fetches and analyzes dockets but writes nothing
python -m src.agent.orchestrator --dry-run
# Live run — logs opportunities to SQLite, sends mock notifications
python -m src.agent.orchestrator
# Filter by court and date
python -m src.agent.orchestrator --court nysd --date-from 2024-01-015. Run tests
pytest tests/ -vProject Structure
docket-intelligence/
├── src/
│ ├── models/
│ │ └── models.py # Pydantic data models (Docket, Client, Opportunity, …)
│ ├── mcp_servers/
│ │ ├── docket_monitor/
│ │ │ └── server.py # MCP server: fetches dockets from CourtListener
│ │ ├── client_intel/
│ │ │ ├── server.py # MCP server: client DB operations
│ │ │ └── sqlite_repo.py # SQLite adapter (swap for Graph adapter in prod)
│ │ └── notifications/
│ │ └── server.py # MCP server: Teams/email/tasks (logs locally)
│ └── agent/
│ └── orchestrator.py # Core AI loop connecting all three servers
├── scripts/
│ └── seed_clients.py # Populate local DB with test clients
├── tests/
│ └── test_client_repo.py # Unit tests for SQLite repo and matching
├── data/ # Local SQLite DB and notification logs (git-ignored)
├── .env.example
└── requirements.txtSwapping to Production (Microsoft)
The local → production swap is controlled by one env variable: ENV=production.
When ENV=production, the Client Intel server loads graph_adapter.py instead of
sqlite_repo.py. The MCP tool interface is identical — only the data layer changes.
See DEPLOYMENT.md for Azure setup instructions.
CourtListener Wrapper Server
src/mcp_servers/courtlistener_wrapper/server.py is a unified server that combines
the official CourtListener hosted MCP server with this project's conflict-checking and
opportunity-management tools. Use it when you want a single connection point instead of
running three separate servers.
What it exposes
Source | Tools |
Official CL MCP (proxied) | All tools from |
Conflict & client intel |
|
Combined |
|
Connecting
If COURTLISTENER_API_TOKEN is set, the wrapper connects to the official CourtListener
MCP server via OAuth SSE and proxies its full tool set. Without a token it runs in
local-only mode (direct REST API + conflict tools only).
# Run the wrapper standalone (e.g. to wire into Claude Desktop or another MCP host)
python -m src.mcp_servers.courtlistener_wrapper.serverTo point the orchestrator at the wrapper instead of the three individual servers,
replace the StdioServerParameters in orchestrator.py with a single entry:
WRAPPER_SERVER = StdioServerParameters(
command="python",
args=["-m", "src.mcp_servers.courtlistener_wrapper.server"],
)Adding a New Docket Data Source
Create
src/mcp_servers/docket_monitor/adapters/your_source.pyImplement
fetch_dockets(...)returninglist[Docket]Set
DOCKET_SOURCE=your_sourcein.envThe server picks up the new adapter via the factory in
server.py
Key Design Decisions
Adapter pattern — every external dependency sits behind an interface, making the local↔production swap clean and testable without cloud access.
MCP over direct function calls — each server can be tested, replaced, or scaled independently. The agent only knows tool names and schemas, not implementations.
Human in the loop — the agent surfaces and classifies; attorneys decide. No automated outreach without human approval.
Tenant-local in production — client data never leaves the Microsoft 365 tenant. The only external calls are reads from court data APIs and the Claude API.
Available Tools
12 toolscheck_client_sourceA
Health check the configured client list backend (SharePoint, Excel, or webhook). Useful when setting up a new connection to verify credentials and connectivity.
Inputs: no named parameters.
check_watched_docketsA
Poll all watched dockets for new filings since they were last checked. Updates the last-checked timestamp for each docket after polling. When triage is enabled, each new filing is classified by urgency via the connected model (sampling) — routine, needs-review, or urgent.
Inputs: since_override, triage.
find_matching_clientsA
Fuzzy-search the firm's configured client list (SharePoint, Excel, or custom webhook) for clients matching a name or query. Requires CLIENT_SOURCE_TYPE to be configured. Use this to find candidate clients before linking a docket with link_docket_to_client.
Inputs: query (required), limit.
get_docketB
Fetch full metadata for a specific CourtListener docket by its numeric ID. Returns case name, docket number, court, judge, filing dates, and status.
Inputs: docket_id (required).
get_docket_summaryA
Get a combined summary of a docket: key metadata plus the most recent N filings. Ideal for a quick status check on a matter.
Inputs: docket_id (required), recent_entry_count.
get_new_filingsA
Get docket entries (filings) for a case, optionally filtered to entries since a given date. Use this to check what has been filed since you last looked at a case.
Inputs: docket_id (required), since, limit.
get_partiesC
Get the parties and their attorneys for a docket.
Inputs: docket_id (required).
link_docket_to_clientA
Link a docket to a client in the firm's client list. If the case name matches a single client with high confidence, links automatically. If multiple clients are plausible matches, asks the user to confirm via an interactive prompt (elicitation) rather than guessing. Requires CLIENT_SOURCE_TYPE to be configured.
Inputs: docket_id (required), case_name (required).
list_watched_docketsA
List all dockets currently on the watch list.
Inputs: no named parameters.
search_docketsA
Search CourtListener for federal court dockets by case name, party name, or docket number. Returns a list of matching cases with IDs you can use in other tools.
Inputs: query (required), court, date_filed_after, date_filed_before, +1 more.
unwatch_docketB
Remove a docket from the watch list.
Inputs: matter_id (required).
watch_docketA
Add a docket to the watch list. Use check_watched_dockets to poll all watched dockets for updates.
Inputs: docket_id (required), matter_id (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Each tool has a clearly distinct purpose, from health checks to client linking to docket retrieval and watch list management. No two tools overlap in functionality; descriptions are precise and disambiguate effectively.
All tool names follow a consistent verb_noun pattern using lowercase with underscores, e.g., check_client_source, get_docket, link_docket_to_client. The naming is predictable and aids in understanding tool roles.
12 tools is well-scoped for a legal docket monitoring server, covering search, retrieval, watch list management, client linking, and health checks with no unnecessary clutter.
The tool surface provides comprehensive coverage for monitoring court dockets: searching, fetching metadata, filings, parties, managing a watch list, linking to clients, and verifying connectivity. There are no obvious gaps for the stated purpose.
Maintenance
Related MCP Connectors
CourtListener MCP — Free Law Project's CourtListener API (v4).
Search US court opinions, federal dockets, judges, citations, and oral arguments via CourtListener.
Search US federal and state court records through CourtListener and the RECAP archive
MCP for CourtListener: US federal and state opinions, dockets, judges, plus eCFR regulations.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables searching and downloading court documents, listing cases, and retrieving case details via the DocketBird API. It supports secure OAuth 2.0 authentication for remote access and a standard local mode for personal use.16Apache 2.0
- FlicenseNot gradedqualityBmaintenanceEnables LLM-friendly access to the CourtListener legal database and eCFR for searching legal opinions, court cases, judges, documents, and federal regulations.13-
- AlicenseNot gradedqualityBmaintenanceSearch and retrieve US court opinions, federal dockets, judge records, citation networks, and oral arguments from CourtListener's 9M+ opinion corpus via MCP.186 npm4Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables users to search and retrieve court docket records across US state, county, and federal courts, including PACER party searches, and to get full case details.125 npmMIT