Skip to main content

MCP Integration

The Court Rules MCP server gives AI agents direct access to structured legal data: court rules for 20+ districts and 630+ judges, plus privacy enforcement actions from 21 jurisdictions (FTC, HHS, and 19 state AGs).

What you get

Seven tools across two data domains:
DomainToolPurpose
Court Ruleslist_courtsList all courts with status and judge counts
Court Rulessearch_judgesSearch judges by district, name, or type
Court Rulesget_judge_rulesGet all rules for a specific judge (page limits, format, procedures)
Court Rulescheck_complianceGenerate compliance check parameters for the REST API (/api/v1/check)
Enforcementsearch_enforcement_actionsSearch enforcement events by jurisdiction, date, industry, violation type
Enforcementget_enforcement_detailsFull event details with laws cited, remedies, and source quotes
Enforcementget_enforcement_statsSummary statistics by jurisdiction, violation type, or time period

How it works

Your MCP client connects to the hosted server. Tool calls query structured court rules and enforcement data. Results include source citations and official document links.

Quick start

Add to your MCP client config (Claude Desktop, Cursor, Windsurf, or any MCP client):
{
  "mcpServers": {
    "court-rules": {
      "url": "https://mcp.courtrules.app/mcp",
      "transport": "streamable-http"
    }
  }
}
No local setup or environment variables required. Auth is handled automatically through the OAuth flow.

Try it

Open Claude Desktop and ask:
“What privacy enforcement actions happened in California this year?”
The agent will call search_enforcement_actions with jurisdiction: "CA" and return structured results with entity names, fine amounts, violation types, and source URLs.

Sample vs Full access

The hosted MCP server has two access tiers:
SampleFull
Auth requiredNoOAuth 2.1
Enforcement events3 recent highlights1,100+ events
Court rules3 courts, 3 judges20+ courts, 630+ judges
FiltersDisabledFull query support
Use caseEvaluate data quality and tool behaviorProduction integration
Sample access returns a fixed preview of real enforcement data so you can evaluate the data shape, field quality, and tool behavior before authenticating. All sample responses include "access": "sample" and a notice explaining the limitation. To upgrade to full access, contact saurabh@courtrules.app for OAuth credentials.

Tool reference

search_enforcement_actions

Search privacy and regulatory enforcement events. Filters combine with AND logic. Parameters:
ParameterTypeDescription
jurisdictionstringFilter by jurisdiction: CA, FTC, NY, TX, HHS, CT, CO, OR, NJ, VA, MN, etc.
date_fromstringStart date (YYYY-MM-DD)
date_tostringEnd date (YYYY-MM-DD)
industrystringEntity industry: technology, healthcare, gaming, education, financial_services, etc.
violation_typestringViolation category: data_breach, opt_out_failure, children_data, security_failure, etc.
entity_namestringPartial match on entity name
risk_levelstringcritical, high, medium, or low
limitnumberMax results (default 20, max 100)
Example response:
{
  "results": [
    {
      "id": "evt_001",
      "title": "Attorney General Bonta Announces $2.75 Million CCPA Settlement with Disney",
      "event_date": "2026-02-11",
      "jurisdiction": "CA",
      "event_type": "settlement",
      "entity_name": "The Walt Disney Company",
      "fine_amount": 2750000,
      "violation_types": ["opt_out_failure"],
      "risk_level": "high",
      "summary": "Disney's opt-out processes failed to stop data sharing across devices. $2.75M penalty.",
      "primary_source_url": "https://oag.ca.gov/news/press-releases/..."
    }
  ],
  "total": 1
}

get_enforcement_details

Get full details for a specific enforcement event, including laws cited, remedies, and verbatim source quotes. Parameters:
ParameterTypeRequiredDescription
event_idstringYesEvent UUID
Example response:
{
  "id": "evt_001",
  "title": "Attorney General Bonta Announces $2.75 Million CCPA Settlement with Disney",
  "event_date": "2026-02-11",
  "jurisdiction": "CA",
  "event_type": "settlement",
  "entity_name": "The Walt Disney Company",
  "entity_industry": "media_entertainment",
  "fine_amount": "$2,750,000",
  "consumers_affected": null,
  "violation_types": ["opt_out_failure"],
  "risk_level": "high",
  "summary": "California AG secured a $2.75M settlement after finding Disney's streaming platforms failed to honor consumer opt-out requests for the sale and sharing of personal information under CCPA.",
  "laws_cited": ["California Consumer Privacy Act (CCPA)", "California Privacy Rights Act (CPRA)"],
  "statute_sections": ["Cal. Civ. Code §1798.120"],
  "remedy_types": ["monetary_penalty", "injunction"],
  "remedy_summary": "Disney must pay $2.75 million in civil penalties and implement opt-out methods that fully stop the sale or sharing of consumers' personal information across all platforms and devices.",
  "document_urls": ["https://oag.ca.gov/system/files/attachments/press-docs/...pdf"],
  "primary_source_url": "https://oag.ca.gov/news/press-releases/...",
  "is_multistate": false,
  "co_enforcers": [],
  "search_terms": ["opt-out", "do not sell", "right to opt out", "GPC", "global privacy control"],
  "contract_impact": "Review vendor agreements for opt-out mechanism requirements.",
  "source_quotes": [],
  "sources": [
    {
      "source_id": "src_001",
      "source_url": "https://oag.ca.gov/news/press-releases/...",
      "scraped_at": "2026-02-12T08:30:00Z"
    }
  ]
}

get_enforcement_stats

Aggregate enforcement data by dimension. Parameters:
ParameterTypeRequiredDescription
group_bystringYes”jurisdiction”, “violation_type”, “risk_level”, or “month”
date_fromstringNoStart date filter
date_tostringNoEnd date filter
Example response (group_by: “jurisdiction”):
{
  "stats": [
    { "group": "CA", "count": 12, "total_fines": 18750000 },
    { "group": "FTC", "count": 8, "total_fines": 412000000 },
    { "group": "NY", "count": 6, "total_fines": 9200000 }
  ],
  "total_events": 42,
  "total_fines": 470300000
}

list_courts

List all courts. Parameters:
ParameterTypeDescription
statusstringOptional filter: “live”, “preview”, or “coming_soon”
Example response:
[
  { "district_id": "edny", "name": "Eastern District of New York", "judge_count": 47 },
  { "district_id": "sdny", "name": "Southern District of New York", "judge_count": 72 },
  { "district_id": "cdca", "name": "Central District of California", "judge_count": 47 },
  { "district_id": "ndca", "name": "Northern District of California", "judge_count": 43 },
  { "district_id": "sdfl", "name": "Southern District of Florida", "judge_count": 46 }
]

search_judges

Search for judges by district, name, or type. Parameters:
ParameterTypeDescription
district_idstringDistrict identifier (e.g., “edny”, “sdny”, “cdca”)
namestringPartial name match
judge_typestring”district”, “senior”, “magistrate”, “chief_district”, etc.
limitnumberMax results (default 20)
Example response:
[
  {
    "judge_slug": "amon",
    "judge_name": "Carol Bagley Amon",
    "judge_type": "senior",
    "district_id": "edny",
    "status": "active"
  },
  {
    "judge_slug": "brown",
    "judge_name": "Sterling Johnson Brown",
    "judge_type": "district",
    "district_id": "edny",
    "status": "active"
  },
  {
    "judge_slug": "choudhury",
    "judge_name": "Nusrat Choudhury",
    "judge_type": "district",
    "district_id": "edny",
    "status": "active"
  }
]

get_judge_rules

Get all extracted rules for a specific judge. Parameters:
ParameterTypeRequiredDescription
judge_slugstringYesJudge identifier (e.g., “brown”, “amon”)
district_idstringYesDistrict identifier (e.g., “edny”)
Example response:
[
  {
    "rule_id": "rule-001",
    "content": {
      "logic_type": "PageWordLimitRule",
      "summary": "Memoranda of law in support of or in opposition to motions shall not exceed 20 pages",
      "page_limit": 20,
      "trigger": { "document_type_set": ["brief_support", "brief_opposition"] },
      "source_citation": { "document": "Individual Rules", "section": "§2.B", "page": 3 }
    },
    "doc_kind": "standing_order",
    "document_date": "2024-06-15",
    "source_url": "https://www.nyed.uscourts.gov/..."
  },
  {
    "rule_id": "rule-002",
    "content": {
      "logic_type": "PageWordLimitRule",
      "summary": "Reply memoranda shall not exceed 10 pages",
      "page_limit": 10,
      "trigger": { "document_type_set": ["brief_reply"] },
      "source_citation": { "document": "Individual Rules", "section": "§2.B", "page": 3 }
    },
    "doc_kind": "standing_order",
    "document_date": "2024-06-15",
    "source_url": "https://www.nyed.uscourts.gov/..."
  },
  {
    "rule_id": "rule-003",
    "content": {
      "logic_type": "FormatConstraint",
      "summary": "All documents must be double-spaced with 12-point font and one-inch margins",
      "source_citation": { "document": "Individual Rules", "section": "§2.A", "page": 2 }
    },
    "doc_kind": "standing_order",
    "document_date": "2024-06-15",
    "source_url": "https://www.nyed.uscourts.gov/..."
  }
]

check_compliance

Generate compliance check parameters for the Court Rules REST API. This tool formats your check request; the actual compliance check runs at api.courtrules.app/api/v1/check (requires an API key). Parameters:
ParameterTypeRequiredDescription
judge_slugstringYesJudge identifier
district_idstringYesDistrict identifier
document_scopestringYesDocument type (brief_support, brief_opposition, brief_reply, etc.)
page_countnumberYesTotal body pages
word_countnumberYesTotal word count
motion_typestringNoMotion type (Rule_56, Rule_12, etc.)
is_pro_sebooleanNoWhether filer is pro se
This tool does not perform compliance checks directly. It generates the parameters and a curl example for calling the REST API. Example response:
{
  "content": [
    {
      "type": "text",
      "text": "Compliance checking requires the full linting engine. Use the Court Rules API at https://api.courtrules.app/api/v1/check for live checks.\n\nYou can use the following parameters in your API call:\n{\n  \"judge_slug\": \"brown\",\n  \"district_id\": \"edny\",\n  \"document_scope\": \"brief_support\",\n  \"page_count\": 25,\n  \"word_count\": 6500\n}\n\nExample:\ncurl -X POST https://api.courtrules.app/api/v1/check \\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"judge_slug\":\"brown\",\"district_id\":\"edny\",\"document_scope\":\"brief_support\",\"page_count\":25,\"word_count\":6500}'"
    }
  ]
}

Integration patterns

Regulatory feed widget

Use search_enforcement_actions with jurisdiction and industry filters to surface relevant enforcement events in your legal workspace. Poll periodically for new events.
Agent prompt: "Search for new enforcement actions in [jurisdiction]
since [last_check_date] relevant to [industry]"
→ Calls: search_enforcement_actions
→ Returns: New events with structured data
→ Your platform: Creates feed items or notifications

Auto-matter creation

When a relevant enforcement event appears, automatically create a matter in your legal workspace:
1. search_enforcement_actions (filtered by jurisdiction + industry)
2. For each new event: get_enforcement_details
3. Map fields to your matter schema:
   - Matter title ← event title
   - Assigned team ← based on jurisdiction
   - Priority ← risk_level mapping
   - Description ← summary + laws_cited
   - Attachments ← document_urls

Pre-filing compliance

Check documents against judge-specific rules before filing:
1. get_judge_rules (judge_slug, district_id) → show requirements during drafting
2. check_compliance (page_count, word_count, etc.) → validate before filing
3. Surface failures and warnings in your document editor

Agent-powered research

Combine tools for complex compliance queries:
"Which companies in the technology industry were fined for data breaches
in the last 6 months, and what remedies were required?"

Agent calls:
1. search_enforcement_actions(industry: "technology", violation_type: "data_breach", date_from: "2025-09-25")
2. For each result: get_enforcement_details(event_id)
3. Synthesizes: entity names, fine amounts, remedy details, with source citations

Polling for new events

The MCP server does not push notifications when new enforcement events are added. To check for new events, poll search_enforcement_actions with a date_from filter set to your last check time:
Tool: search_enforcement_actions
Arguments: { "date_from": "2026-03-20", "limit": 50 }
For platform integrations that auto-create matters, run this on a schedule (e.g., every 6 hours) and process any new events.

Response field reference

Key fields in enforcement event responses, with types and null semantics:
FieldTypeDescription
fine_amountstring or nullFormatted currency (e.g., “$2,750,000”). Null when no monetary penalty was imposed (consent decree or injunction only)
consumers_affectednumber or nullNull when the count was not quantified in the official source
entity_industrystring or nullIndustry classification (e.g., “gaming”, “education”, “social_media”)
violation_typesstring[]One or more violation categories from a fixed set of 19 types
risk_levelstringOne of: “critical”, “high”, “medium”, “low”
laws_citedstring[]Full names of laws referenced (e.g., “California Consumer Privacy Act (CCPA)“)
statute_sectionsstring[]Specific statutory references (e.g., “Cal. Civ. Code §1798.120”)
remedy_typesstring[]Categories of remedies imposed (e.g., “monetary_penalty”, “injunction”)
search_termsstring[]Contract-relevant keywords for vendor agreement scanning
contract_impactstring or nullWhat to check in your contracts based on this enforcement action
source_quotesarrayVerbatim quotes from the official source (may be empty)
co_enforcersstring[]Other agencies involved in multistate actions (empty if single-state)
is_multistatebooleanWhether the action involved multiple jurisdictions

Error handling

MCP tool calls return errors as text content, not HTTP error codes. If a tool encounters an error (invalid parameters, database unavailable), the response will contain a descriptive error message in the content array:
{
  "content": [
    { "type": "text", "text": "Error: No enforcement event found with ID \"invalid-id\"." }
  ]
}
Common error patterns:
  • Invalid event_id: "No enforcement event found with ID \"...\"."
  • Invalid group_by: "Invalid group_by value \"...\". Must be one of: jurisdiction, violation_type, risk_level, month"
  • Database error: "Error querying courts: ..." or "Error searching judges: ..."
The hosted server at mcp.courtrules.app does not currently enforce rate limits on MCP tool calls.

Current limitations

  • No webhooks yet: Poll for new events using date_from filters
  • No real-time streaming: Events are batch-processed from government sources
  • Read-only: The MCP server provides data access only, no write operations
  • Session-based auth: Each MCP session requires OAuth authentication (hosted mode)
For higher throughput or custom filtering, use the REST API directly.

Data coverage

Court rules

  • 20+ district courts mapped
  • 630+ judges with individual rules
  • Three rule layers: FRCP (national), Local Rules (district), Standing Orders (judge)
  • Every rule traced to source PDF with page and section numbers

Enforcement data

  • 21 jurisdictions: FTC, HHS, and 19 state attorneys general
  • Event types: settlements, consent decrees, fines, enforcement actions, investigations
  • 19 violation type categories
  • Fine amounts, affected consumers, remedy details
  • Every event linked to official government press release

Next steps