> ## Documentation Index
> Fetch the complete documentation index at: https://docs.courtrules.app/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP: Enforcement Data

> Connect AI agents to structured privacy enforcement data from 21 jurisdictions using the Model Context Protocol.

# MCP: Enforcement Data

The Court Rules MCP server gives AI agents access to structured enforcement actions from the FTC, HHS, and 19 state attorneys general. Three tools let you search events, get full details, and aggregate statistics.

## What you get

Three enforcement-focused tools:

| Tool | Purpose |
| - | - |
| `search_privacy_enforcement_actions` | Search enforcement events by jurisdiction, date, industry, violation type |
| `get_privacy_enforcement_action` | Full event details with laws cited, remedies, and source quotes |
| `get_privacy_enforcement_stats` | Summary statistics by jurisdiction, violation type, or time period |

The same MCP server also provides six court rules tools for filing compliance. See [MCP: Court Rules](/guides/mcp-court-rules).

## Quick start

Add the server to your AI client, then sign in when the client asks. It opens [console.courtrules.app](https://console.courtrules.app) in your browser, you sign in and approve the connection once, and the client keeps you signed in after that.

### Claude Code

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
claude mcp add --transport http court-rules https://mcp.courtrules.app/mcp
```

Then run `/mcp` in Claude Code, select `court-rules`, and choose **Authenticate**.

### Claude Desktop and claude.ai

Open **Settings > Connectors > Add custom connector**. Enter `Court Rules` as the name and `https://mcp.courtrules.app/mcp` as the URL, click **Add**, then click **Connect** and sign in.

### Cursor

Add to `~/.cursor/mcp.json`, then open **Cursor Settings > MCP** and click the sign-in prompt next to `court-rules`:

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "mcpServers": {
    "court-rules": {
      "url": "https://mcp.courtrules.app/mcp"
    }
  }
}
```

### VS Code

Add to `.vscode/mcp.json`. VS Code asks you to sign in the first time it starts the server.

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "servers": {
    "court-rules": {
      "type": "http",
      "url": "https://mcp.courtrules.app/mcp"
    }
  }
}
```

### Codex CLI

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
codex mcp add court-rules --url https://mcp.courtrules.app/mcp
codex mcp login court-rules
```

### Scripts, backends, and clients without sign-in

Send the API key from your [console](https://console.courtrules.app) dashboard as `Authorization: Bearer <api_key>`. Keys do not expire. See [Authentication](/authentication#mcp-authentication) for header configs and an SDK example.

Once connected, try asking your agent: *"What privacy enforcement actions happened in California this year?"*

## Tool reference

### search\_privacy\_enforcement\_actions

Search privacy and regulatory enforcement events. Filters combine with AND logic.

**Parameters:**

| Parameter | Type | Description |
| - | - | - |
| `jurisdiction` | string | Filter by jurisdiction: CA, FTC, NY, TX, HHS, CT, CO, OR, NJ, VA, MN, etc. |
| `date_from` | string | Start date (YYYY-MM-DD) |
| `date_to` | string | End date (YYYY-MM-DD) |
| `industry` | string | Entity industry: technology, healthcare, gaming, education, financial\_services, etc. |
| `violation_type` | string | Violation category: data\_breach, opt\_out\_failure, children\_data, security\_failure, etc. |
| `entity_name` | string | Partial match on entity name |
| `risk_level` | string | critical, high, medium, or low |
| `limit` | number | Max results (default 20, max 100) |

**Example request:** `{"jurisdiction": "CA", "limit": 1}`

**Example response:**

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "results": [
    {
      "id": "14875044-3259-4cce-95c2-7d7e97b18118",
      "slug": "ca-california-state-legislature-2026-08-28-60e39f",
      "title": "California Legislature Passes SB 923 (Expanding Privacy Rights Act) to Expand CCPA Deletion Rights",
      "event_date": "2026-08-28",
      "jurisdiction": "CA",
      "event_type": "new_law",
      "entity_name": "California State Legislature",
      "fine_amount": null,
      "violation_types": ["record_retention"],
      "risk_level": "low",
      "summary": "The California Privacy Protection Agency announced that the California State Legislature approved the Expanding Privacy Rights Act (SB 923), which expands the CCPA's right to delete to cover all non-exempt personal information a business...",
      "primary_source_url": "https://privacy.ca.gov/2026/08/california-legislature-advances-bill-to-strengthen-deletion-rights/",
      "public_url": "https://www.courtrules.app/enforcement/ca-california-state-legislature-2026-08-28-60e39f"
    }
  ],
  "total": 78
}
```

### get\_privacy\_enforcement\_action

Get full details for a specific enforcement event, including laws cited, remedies, and verbatim source quotes.

**Parameters:**

| Parameter | Type | Required | Description |
| - | - | - | - |
| `event_id` | string | Yes | Event UUID |

**Example response:**

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "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\_privacy\_enforcement\_stats

Aggregate enforcement data by dimension.

**Parameters:**

| Parameter | Type | Required | Description |
| - | - | - | - |
| `group_by` | string | Yes | "jurisdiction", "violation\_type", "risk\_level", or "month" |
| `date_from` | string | No | Start date filter |
| `date_to` | string | No | End date filter |

**Example request:** `{"group_by": "jurisdiction"}`

**Example response:**

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "stats": [
    {
      "group": "HHS",
      "count": 706,
      "total_fines": "$0"
    },
    {
      "group": "CT",
      "count": 188,
      "total_fines": "$11,874,907,793"
    },
    {
      "group": "FTC",
      "count": 186,
      "total_fines": "$10,972,452,326.33"
    },
    {
      "group": "NY",
      "count": 95,
      "total_fines": "$25,531,011,250"
    },
    {
      "group": "NJ",
      "count": 93,
      "total_fines": "$2,074,312,268.81"
    }
  ],
  "total_events": 1617
}
```

## Integration patterns

### Regulatory feed widget

Use `search_privacy_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_privacy_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_privacy_enforcement_actions (filtered by jurisdiction + industry)
2. For each new event: get_privacy_enforcement_action
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
```

### Agent-powered research

Combine tools for research 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_privacy_enforcement_actions(industry: "technology", violation_type: "data_breach", date_from: "2025-09-25")
2. For each result: get_privacy_enforcement_action(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_privacy_enforcement_actions` with a `date_from` filter set to your last check time:

```
Tool: search_privacy_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:

| Field | Type | Description |
| - | - | - |
| `fine_amount` | string or null | Formatted currency (e.g., "\$2,750,000"). Null when no monetary penalty was imposed (consent decree or injunction only) |
| `consumers_affected` | number or null | Null when the count was not quantified in the official source |
| `entity_industry` | string or null | Industry classification (e.g., "gaming", "education", "social\_media") |
| `violation_types` | string\[] | One or more violation categories from a fixed set of 18 types |
| `risk_level` | string | One of: "critical", "high", "medium", "low" |
| `laws_cited` | string\[] | Full names of laws referenced (e.g., "California Consumer Privacy Act (CCPA)") |
| `statute_sections` | string\[] | Specific statutory references (e.g., "Cal. Civ. Code §1798.120") |
| `remedy_types` | string\[] | Categories of remedies imposed (e.g., "monetary\_penalty", "injunction") |
| `search_terms` | string\[] | Contract-relevant keywords for vendor agreement scanning |
| `contract_impact` | string or null | What to check in your contracts based on this enforcement action |
| `source_quotes` | array | Verbatim quotes from the official source (may be empty) |
| `co_enforcers` | string\[] | Other agencies involved in multistate actions (empty if single-state) |
| `is_multistate` | boolean | Whether 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:

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "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 or risk\_level**: the server rejects a value outside the listed choices before the tool runs. `group_by` takes `jurisdiction`, `violation_type`, `risk_level` or `month`; `risk_level` takes `critical`, `high`, `medium` or `low`
* **Database error**: `"Error querying enforcement data: ..."`

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 appear within 24-48 hours of government announcement
* **Read-only**: The MCP server provides data access only, no write operations

For higher throughput or custom filtering, use the [REST API](/api-reference/overview) directly.

## Next steps

* [Browse enforcement data](https://www.courtrules.app/enforcement) to see the data quality
* [Try the MCP playground](https://www.courtrules.app/mcp) to test tools interactively
* [MCP: Court Rules](/guides/mcp-court-rules) for filing compliance tools on the same MCP server


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.