# UK Competition Case MCP Server (`nexgenwatch/uk-competition-case-mcp`) Actor

Answer 'is there a UK competition case touching these companies or this market' from the Competition and Markets Authority case register, with an explicit guardrail against reporting an investigation as a finding.

- **URL**: https://apify.com/nexgenwatch/uk-competition-case-mcp.md
- **Developed by:** [NexGen Watch](https://apify.com/nexgenwatch) (community)
- **Categories:** Agents, Business
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 tool calls

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## UK Competition Case MCP Server

Answer **"is there a UK competition case touching these companies or this market"** from the
Competition and Markets Authority's case register, live.

Built for deal and legal teams.

### The guardrail is the product

**An open Competition Act or cartel case is an INVESTIGATION, not a finding.** Saying
otherwise about a named company is not a data-quality slip — it is a false statement about
identified parties. Three rules, each enforced by a test:

1. **A finding is never inferred.** `finding_status` comes from an explicit map of the **27
   outcome slugs the register actually contains**, enumerated by walking all 2,572 cases. An
   outcome this build has not seen reports as `no-finding-recorded-unmapped-outcome` — never
   a guess.

2. **No party name is ever extracted from an investigation title.** Merger titles are
   structured (`Sky / ITV merger inquiry`) and naming the parties to a merger implies nothing
   bad about them, so parties are extracted there. For Competition Act and civil cartels,
   criminal cartels, director disqualification and consumer enforcement, the title is carried
   verbatim and `parties` is **empty by construction**.

3. **A criminal-cartels verdict is not a conviction.** A verdict can be an acquittal and the
   register does not say which way it went — it reports as
   `verdict-recorded-direction-not-in-feed`. The same care applies to commitments (accepted
   with no admission of liability) and administrative closures (the CMA closed on resource
   grounds, having found nothing).

**Only four of the 27 outcomes state anything adverse about a party**, and each is a
published finding: Chapter I infringement, Chapter II infringement, a disqualification order
granted, and a consumer-law court order.

### Two things measured live that a naive read gets wrong

#### 1. An unrecognised filter value returns zero cases, not an error

```
filter_case_type=not-a-real-type              -> HTTP 200, total 0
filter_market_sector=energy-and-environment   -> HTTP 200, total 0   (an invented slug)
filter_market_sector=distribution-and-service-industries -> total 256
```

A typo therefore answers *"no competition case touches your market"* — the worst possible
wrong answer for a deal team. **Every value is validated against the enumerated vocabulary
before any query is sent**, and the refusal explains why.

The vocabularies were enumerated by **walking all 2,572 cases** on 2026-07-30, not read off
documentation: 12 case types, 33 market sectors, 2 states, 27 outcomes.

**And the filters are real** — proven control vs test against that independent walk: no
filter 2,572; `case_type=mergers` 1,991; `case_state=open` 71; a real sector 256; an invented
one 0.

#### 2. The company search is free text, not a party index

Measured: `q=Paramount` returns three cases — the live *Paramount / Warner Bros. Discovery
merger inquiry*, an unrelated 2006 *NTL / Virgin Mobile* merger, and a pay-TV market
investigation. The API matches document text, so a hit need not name the company as a party.
Every row reports whether your query is visible in its title, and every search reports the
ratio.

### Tools

| tool | what it answers |
|---|---|
| `find_cases` | Cases matching a company, term, family, state or market sector |
| `open_cases` | Every case currently open — 71 of 2,572 — optionally narrowed |
| `market_case_profile` | How much competition activity touches one sector: all-time and open totals plus recent cases |
| `list_market_sectors` | The 33 real sector values, enumerated from the full walk |
| `explain_limits` | The guardrail in full, the two traps, and every vocabulary. Read before acting. |

### Scope

**The CMA case register only** — 2,572 cases as of 2026-07-30, 71 open. Mergers, Competition
Act and cartel investigations, market studies, consumer enforcement, subsidy referrals,
digital markets, regulatory appeals.

**Not covered:** the sector regulators with concurrent competition powers (Ofcom, Ofgem, the
FCA and the rest) publish separately, and neither is the Competition Appeal Tribunal. A
"no cases" answer means the CMA register is silent — not that no UK competition matter exists.

`gov.uk/robots.txt` disallows `/search/all*` and `/*/print$`, and sets a `Crawl-delay: 10`
for AhrefsBot only. **The `/api/search.json` path is not disallowed and no crawl-delay
applies to us** — every call is paced at **2 requests/second** anyway.

This server reports what the CMA publishes. It states **no view** on whether any party did
anything wrong, and it is not legal advice.

### Pricing

| Event | Price |
|---|---|
| Server start (`apify-actor-start`) | $0.05, charged once per server run by the platform |
| Tool call (`mcp-tool-call`) | **$0.05 flat per completed tool call** |

No other events. Memory is pinned to 1024 MB so the start fee is charged **once** — on this
platform the start event bills once per gigabyte.

**Errors and notices are not charged.** An unrecognised case type, state or market sector,
an unfiltered request, or a gov.uk read failure returns without billing.

**A sourced "no CMA case matches" IS charged** — that is the answer a deal team is paying
for.

If a tool call cannot be billed correctly, **the call fails** rather than serving free.

# Actor input Schema

## `note` (type: `string`):

This Actor runs as an MCP server in Standby mode. Connect an MCP client to the server URL with path /mcp; there is no batch input to fill in.

## Actor input object example

```json
{
  "note": "standby"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "note": "standby"
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgenwatch/uk-competition-case-mcp").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "note": "standby" }

# Run the Actor and wait for it to finish
run = client.actor("nexgenwatch/uk-competition-case-mcp").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "note": "standby"
}' |
apify call nexgenwatch/uk-competition-case-mcp --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgenwatch/uk-competition-case-mcp"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/NSSBgsp2O6YbyafLC/builds/jAEtTSBEZFwcgE1WT/openapi.json
