# UK Government Tenders: Contracts Finder & Find a Tender (`mrslm_data/uk-public-tenders`) Actor

Open UK public-sector tenders from Contracts Finder and Find a Tender in one feed: buyer, CPV, value, deadline, SME suitability and links. Keyword filter.

- **URL**: https://apify.com/mrslm_data/uk-public-tenders.md
- **Developed by:** [MRSLM Data](https://apify.com/mrslm_data) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 tenders

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## UK Government Tenders: Contracts Finder & Find a Tender

**Open UK public-sector tenders from Contracts Finder and Find a Tender in one feed: buyer, CPV, value, deadline, SME suitability and links. Filter by keyword. $2.00 per 1,000 tenders.**

UK public bodies publish their opportunities on two government services: Contracts Finder (lower-value contracts in England) and Find a Tender (higher-value contracts across the UK). This Actor merges both into one de-duplicated feed of live opportunities.

### Quick start

1. Press **Start**. The form is already filled with this example input, so the first run returns real rows in under a minute:

```json
{
  "publishedWithinDays": 14,
  "maxResults": 30
}
```

2. Swap in your own values, or call the Actor through the Apify API, Make, Zapier, n8n or the Python/JS clients with the same JSON.
3. Download the results as JSON, CSV or Excel from the **Output** tab, or schedule the run to repeat.

**Full guide: How to Find UK Government Tenders from Contracts Finder and Find a Tender in One List (Real Run: Open Cleaning Contracts)**

### What the UK Public Tenders Scraper does

The Actor reads both services through their official public data feeds (Open Contracting Data Standard). It keeps the tenders that match your CPV code prefixes, keywords, minimum value in pounds and SME flag, and by default only those whose deadline has not passed. Each tender becomes one row with the notice ID and OCID, source, stage, title, buyer name, city, postcode, region, country and website, main CPV code and description, all CPV codes, category, value in GBP, procurement method and procedure, status, published date, deadline, contract start, end and duration, lots, SME and VCSE suitability, delivery locations and a link to the notice. The description can be added too.

You can also add pipeline notices (planning and early market engagement), which show what buyers plan to procure before a tender opens.

- Contracts Finder and Find a Tender in one format.
- CPV prefix, keyword, value and SME filters.
- Deadline, value and contract dates on every row.

### Who it is for

- **Suppliers to the public sector**: get every relevant UK tender from both services, every day.
- **Bid writers and consultants**: build a feed for each client's sector and region.
- **Small businesses**: find tenders marked suitable for SMEs.
- **Market researchers**: see what councils, schools and housing associations are buying.

### Real example: open cleaning tenders from the last 30 days

Say you run a commercial cleaning company and want every open public cleaning tender in the UK published in the last month. Cleaning services have CPV codes starting with 9091 (90910000 cleaning services and the codes below it, such as 90911200 building cleaning and 90919300 school cleaning). You turn off descriptions to keep rows short.

#### Step 1: Enter the input

Open the [UK Public Tenders Scraper](https://apify.com/mrslm_data/uk-public-tenders) in Apify Console, switch the input form to **JSON** and paste this. It is the exact input used for the run in this guide:

```json
{
  "cpvPrefixes": [
    "9091"
  ],
  "publishedWithinDays": 30,
  "openOnly": true,
  "includeDescription": false,
  "maxResults": 25
}
```

What each setting does:

- `cpvPrefixes`: 9091 matches every CPV code starting with 9091. You can also write the full code 90910000; trailing zeros are removed.
- `publishedWithinDays`: 30 days back (the maximum is 90).
- `openOnly`: true keeps only tenders whose deadline has not passed.
- `includeDescription`: false leaves out the long description.
- `maxResults`: 25 rows at most.

#### Step 2: Run it

Press **Start**. On 30 October 2026 this input finished with status `SUCCEEDED` in about 8 seconds and saved 9 rows to the run's dataset. The run was charged 9 `tender` events plus one start event, so the bill was $0.0181 on the Free/Bronze tier. It found 4 open tenders on Contracts Finder and 5 on Find a Tender, 9 in total.

#### Step 3: Read the output

Here are the first rows of the real dataset, cut to the most useful columns:

| source | buyerName | buyerCity | cpvCode | valueGbp | deadline |
|---|---|---|---|---|---|
| Contracts Finder | Cheetham CE Academy | Manchester | 90919300 | 309000 | 2026-11-23T10:00:00Z |
| Contracts Finder | The Dean Trust | Sale | 90919300 | 4648437 | 2026-12-04T10:00:00Z |
| Contracts Finder | Plumpton College | Lewes | 90911200 | 1000000 | 2026-12-07T12:00:00Z |
| Contracts Finder | Holy Trinity Academy | Telford- | 90919300 | 668100 | 2026-11-25T10:00:00Z |
| Find a Tender | Glen Oaks Housing Association Limited | Glasgow | 90910000 | 585000 | 2026-11-30T12:00:00Z |
| Find a Tender | Reidvale Housing Association | Glasgow | 50700000 | 250000 | 2026-11-19T12:00:00Z |
| Find a Tender | Clyde Valley Housing Association Limited | Motherwell | 90910000 | 119000 | 2026-11-16T12:00:00Z |
| Find a Tender | South Lanarkshire Council | Hamilton | 90910000 | 15000000 | 2026-11-09T12:00:00Z |
| Find a Tender | Molendinar Park Housing Association Limited | Glasgow | 90910000 |  | 2026-11-02T12:00:00Z |

And one full row as JSON (long text shortened with …):

```json
{
  "noticeId": "389fcf27-6431-46f2-8ba7-dbe3dd8779fa-918900",
  "ocid": "ocds-b5fd17-f8e16b0f-2bd3-4988-91b2-acea6ec14174",
  "source": "Contracts Finder",
  "stage": "tender",
  "title": "CA18601 - Cheetham CE Community Academy Tender for Cleaning Services",
  "buyerName": "Cheetham CE Academy",
  "buyerCity": "Manchester",
  "buyerPostcode": "M8 9FR",
  "buyerRegion": null,
  "buyerCountry": "England",
  "cpvCode": "90919300",
  "cpvDescription": "School cleaning services",
  "cpvCodes": [
    "90919300"
  ],
  "category": "services",
  "valueGbp": 309000,
  "currency": "GBP",
  "procurementMethod": "open",
  "procedure": "Open procedure",
  "status": "active",
  "publishedDate": "2026-10-23",
  "deadline": "2026-11-23T10:00:00Z",
  "contractStart": "2027-09-01",
  "contractEnd": "2030-08-31",
  "contractDurationDays": null,
  "lots": null,
  "smeSuitable": true,
  "vcseSuitable": false,
  "deliveryLocations": [
    "M8 9FR"
  ],
  "url": "https://www.contractsfinder.service.gov.uk/Notice/389fcf27-6431-46f2-8ba7-dbe3dd8779fa"
}
```

What the 9 real tenders show:

- **The two services had different buyers.** All 4 Contracts Finder tenders are from schools and colleges in England (for example The Dean Trust in Sale at £4.6 million and Plumpton College at £1 million), all run through the same tendering platform and all marked suitable for SMEs. All 5 Find a Tender notices are from Scotland: four housing associations around Glasgow and Motherwell, and South Lanarkshire Council.
- **One large contract.** South Lanarkshire Council's specialist cleaning, clearance and disposal contract is valued at £15 million. The other values run from £119,000 to £4.6 million, and one (Molendinar Park Housing Association) gives no value.
- **School contracts start next September.** The school tenders close in November and December 2026, but their contracts start in August or September 2027 and run three years, so they are being bought almost a year ahead.
- **CPV matching uses all codes.** Reidvale Housing Association's gutter cleaning and roof inspection contract has a main code for building maintenance (50700000) but also lists building cleaning (90911200), so it matched. Check `cpvCode` if you only want the main code.
- **Short windows.** The earliest deadline was 2 November 2026, three days after the run.

The fields differ a little by source: Contracts Finder gives contract start and end dates and SME and VCSE flags, while Find a Tender gives a duration in days, lots and NUTS region codes.

### Contracts Finder or Find a Tender?

Find a Tender is the UK service for higher-value public contracts, covering England, Scotland, Wales and Northern Ireland; it replaced the UK's use of TED after Brexit. Contracts Finder lists contracts in England, mostly lower-value ones, and many small buyers such as schools and academies use it. Some tenders appear on both. Reading both, as this Actor does by default, is the simplest way not to miss one; use **sources** to read only one.

Scottish, Welsh and Northern Irish buyers also use their own national portals for smaller contracts, which this Actor does not read. Larger contracts from those buyers do appear on Find a Tender, as the Scottish housing associations in this run show.

### Output fields

Each row in the dataset has these fields. The example column shows a value from the run above.

| Field | What it means | Example from this run |
|---|---|---|
| `noticeId / ocid / url` | Notice ID, the Open Contracting ID and the notice link. | 389fcf27-6431-46f2-8ba7-dbe3dd8779fa-918900 / ocds-b5fd17-f8e16b0f-2bd3-4988-91b2-acea6ec14174 / https://www.contractsfinder.service.gov.uk/Notice/389fcf27-6… |
| `source / stage / status` | Contracts Finder or Find a Tender; tender or pipeline (planning and engagement notices); and the notice status. | Contracts Finder / tender / active |
| `title` | Tender title. | CA18601 - Cheetham CE Community Academy Tender for Cleaning… |
| `buyerName / buyerCity / buyerPostcode / buyerRegion / buyerCountry / buyerWebsite` | The buying organisation. | Cheetham CE Academy / Manchester / M8 9FR / UKM82 / England / https://suppliers.multiquote.com |
| `cpvCode / cpvDescription / cpvCodes` | Main CPV code and its name, and all codes. | 90919300 / School cleaning services / 90919300 |
| `category` | services, goods or works. | services |
| `valueGbp / currency` | Stated value in pounds. | 309000 / GBP |
| `procurementMethod / procedure` | For example open and Open procedure. | open / Open procedure |
| `publishedDate / deadline` | Publication date and tender deadline. | 2026-10-23 / 2026-11-23T10:00:00Z |
| `contractStart / contractEnd / contractDurationDays` | Contract dates or length, where published. | 2027-09-01 / 2030-08-31 / 1080 |
| `lots` | Number of lots. | 1 |
| `smeSuitable / vcseSuitable` | Buyer's SME and voluntary-sector flags (Contracts Finder). | yes / no |
| `deliveryLocations` | Postcodes or NUTS codes where the work is done. | M8 9FR |
| `description` | Tender description, when includeDescription is on. | (empty in this run) |

### Export UK tenders to CSV, Excel or Google Sheets

Every run saves its rows to a dataset, and a dataset can be downloaded in any common format. You do not need to write code for this.

**From Apify Console.** Open the run, go to the **Output** tab and click **Export**. Pick CSV, Excel (XLSX), JSON, XML, HTML or RSS. You can tick only the columns you want, for example `publishedDate`, `deadline`, `source`, `buyerName`, `title`. Nested values such as lists are flattened into columns like `cpvCodes/0` in CSV and Excel.

**From a URL.** The same export is a plain HTTPS link. Replace `<DATASET_ID>` with the dataset ID shown on the run's Storage tab:

```bash
## CSV with just the columns you need
curl -H "Authorization: Bearer $APIFY_TOKEN" \
  "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&clean=1&fields=publishedDate,deadline,source,buyerName,title,cpvCode,valueGbp,url" -o uk-tenders.csv

## Excel
curl -H "Authorization: Bearer $APIFY_TOKEN" \
  "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=xlsx&clean=1" -o uk-tenders.xlsx
```

**Into Google Sheets.** You have three good options:

1. **One-off:** download the CSV and use **File > Import > Upload** in Google Sheets. Choose "Replace current sheet" to refresh an existing tab.
2. **Automatic, no code:** in Make, Zapier or n8n, use the Apify app's "Watch Actor runs" (or "Run Actor") trigger, then "Get dataset items", then the Google Sheets "Add row" action. Every scheduled run then lands in your sheet. Apify's own [Google Sheets Import & Export](https://apify.com/lukaskrivka/google-sheets) Actor can also append a dataset to a sheet, and you can chain it to this Actor's runs with an integration.
3. **Formula:** `=IMPORTDATA("https://api.apify.com/v2/actor-tasks/<USERNAME>~<TASK_NAME>/runs/last/dataset/items?status=SUCCEEDED&format=csv&token=<YOUR_TOKEN>")` always pulls the latest successful run of a saved task. The token sits in the formula, so anyone who can open the sheet can see it. Only use this in a private sheet.

### Schedule it to run every weekday at 6 AM

Both services publish new notices every working day. A weekday run with **publishedWithinDays** set to 2 or 3 catches every new tender with some overlap; remove duplicates by `noticeId`.

1. In the Actor's input form, set up the input from Step 1 and click **Save as new task**. Give it a clear name such as `uk-cleaning-tenders`.
2. Go to **Schedules > Create new**, set the cron expression to `0 6 * * 1-5` and pick your timezone, so it runs every weekday at 6 AM.
3. Add the task to the schedule and save. Each run gets its own fresh dataset.
4. Optional: on the task's **Integrations** tab, add a webhook, Slack or email notification for "Run succeeded", or connect Make, Zapier or n8n, so the new rows go where you need them.

To fetch the newest results without looking up a run ID, use the task's last-run link: `https://api.apify.com/v2/actor-tasks/<USERNAME>~uk-cleaning-tenders/runs/last/dataset/items?status=SUCCEEDED&format=json`.

### Call it from the API (Python, JavaScript or curl)

You can start the Actor from your own code with the official Apify clients. Put your API token (Console > Settings > API & Integrations) in an environment variable called `APIFY_TOKEN` rather than in the code.

**Python** (`pip install "apify-client>=3"`). Tested with apify-client 3.4:

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run_input = {
    "cpvPrefixes": [
        "9091"
    ],
    "publishedWithinDays": 30,
    "openOnly": True,
    "includeDescription": False,
    "maxResults": 25
}

run = client.actor("mrslm_data/uk-public-tenders").call(run_input=run_input)

## apify-client 3.x returns a Run object, so use run.default_dataset_id
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item["deadline"], item["title"])
```

In apify-client 3.x, `call()` returns a typed object. Older examples that use `run["defaultDatasetId"]` were written for 1.x and 2.x and fail in 3.x with `TypeError: 'Run' object is not subscriptable`.

**JavaScript / Node.js** (`npm install apify-client`):

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const input = {
    "cpvPrefixes": [
        "9091"
    ],
    "publishedWithinDays": 30,
    "openOnly": true,
    "includeDescription": false,
    "maxResults": 25
};

const run = await client.actor('mrslm_data/uk-public-tenders').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);
```

**curl**, one request that runs the Actor and returns the rows as CSV (it waits up to 5 minutes, so keep the input small):

```bash
curl -X POST "https://api.apify.com/v2/acts/mrslm_data~uk-public-tenders/run-sync-get-dataset-items?format=csv" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"cpvPrefixes": ["9091"], "publishedWithinDays": 30, "openOnly": true, "includeDescription": false, "maxResults": 25}' -o uk-tenders.csv
```

### What it costs

The Actor uses pay-per-event pricing. **Tender**: $2.00 per 1,000 on the Free and Bronze tiers, $1.80 on Silver and $1.60 on Gold. Each run also has a start fee of $0.00005 per GB of memory (one event at the default memory). You are not billed separately for compute on normal runs: the event prices are the whole bill.

#### Price per event

Current pay-per-event prices for this Actor on Apify, by Apify subscription plan:

| Event (per 1,000) | Free / Bronze | Silver | Gold / Platinum / Diamond |
|---|---|---|---|
| Tender (`tender`) | $2.00 | $1.80 | $1.60 |
| Actor start (once per run at the default memory, not per 1,000) | $0.00005 | $0.00005 | $0.00005 |

You are charged only for the events in this table: nothing for compute, and nothing for searches that return no rows beyond the start fee.

| Scenario | Free / Bronze | Silver | Gold |
|---|---|---|---|
| The run in this guide (9 tenders) | $0.0181 | $0.0163 | $0.0145 |
| Weekday run, ~5 new tenders a day (22 runs) | $0.22 | $0.20 | $0.18 |
| Weekday run for 10 sectors, ~60 tenders a day (22 runs) | $2.64 | $2.38 | $2.11 |
| One-off: 90 days of IT tenders (~1,500) | $3.00 | $2.70 | $2.40 |

To cap spending, set **Maximum cost per run** in the run options (or `maxTotalChargeUsd` in the API). The Actor stops cleanly at the cap and you are never billed past it. Filtering happens before rows are saved, so tight CPV and keyword filters lower the cost.

### Limits

- Only Contracts Finder and Find a Tender; other national and regional portals are not read.
- Up to 90 days back. Older or closed tenders need a different source.
- Values and dates are what buyers published; some leave them out.
- Tender documents are on the buyer's chosen platform and are not downloaded.
- SME and VCSE flags are only set by Contracts Finder.

### FAQ

**Do I need an account on Contracts Finder or Find a Tender?**
No. The Actor uses their free public data feeds.

**Can I see what buyers are planning before the tender opens?**
Yes. Turn on **includePipelineNotices** for planning and market-engagement notices. They have no deadline yet.

**How do I search by keyword instead of CPV?**
Use **keywords**. A tender matches if its title, description or buyer contains any keyword.

**Can I get only tenders worth more than £100,000?**
Yes. Set **minValueGbp** to 100000. Tenders with no stated value are then left out.

**Do you have EU or US tenders?**
Yes: [TED EU Tenders](https://apify.com/mrslm_data/ted-eu-tenders) and [USAspending Awards](https://apify.com/mrslm_data/usaspending-awards).

**Can I run it on a schedule?**
Yes. Save your input as a task and attach a schedule, as shown above. Each run is independent and returns the UK tenders available at that moment.

**Does it work with Make, Zapier or n8n?**
Yes. All three have an Apify app. Use "Run Actor" (or run a saved task), then "Get dataset items" to pass the rows to the next step, such as Google Sheets, Airtable, a CRM or Slack.

**Can AI agents use it through MCP?**
Yes. Apify's hosted MCP server can expose this Actor as a tool to any MCP client (Claude Desktop, Cursor, VS Code and others). Add `https://mcp.apify.com/?tools=mrslm_data/uk-public-tenders` as a remote MCP server and sign in with your Apify account or API token. The agent fills in the same input fields shown above and gets the same rows back, billed at the same per-event prices.

### Is it legal?

This Actor only reads official open-data APIs that the publisher offers to everyone without a login or key. It obeys robots.txt, stays under the published rate limits, and never tries to get past logins, paywalls, captchas or bot checks. Buyer contact names, e-mails and phone numbers are never output, and descriptions are scrubbed of contact details. You are responsible for how you use the data: follow the source's licence and terms and the privacy and marketing laws that apply to you (GDPR, CAN-SPAM, PECR, etc.). This tool is independent and not affiliated with or endorsed by the data publisher.

# Actor input Schema

## `sources` (type: `array`):

Which government services to read.

## `keywords` (type: `array`):

Keep tenders whose title, description or buyer contains any of these. Empty = all.

## `cpvPrefixes` (type: `array`):

e.g. 72 (IT services), 4521 (building work), 90910000 (cleaning).

## `publishedWithinDays` (type: `integer`):

Look back this many days (max 90).

## `openOnly` (type: `boolean`):

Keep only tenders whose deadline has not passed.

## `minValueGbp` (type: `integer`):

Keep only tenders with a stated value at or above this. 0 = no minimum.

## `smeSuitableOnly` (type: `boolean`):

Keep only tenders the buyer marked suitable for SMEs (Contracts Finder).

## `includePipelineNotices` (type: `boolean`):

Also add planning and early market-engagement notices (no deadline yet).

## `includeDescription` (type: `boolean`):

Add the tender description (up to 4,000 characters).

## `maxResultsPerSource` (type: `integer`):

0 = no cap.

## `maxResults` (type: `integer`):

Safety cap on saved tenders across the whole run. 0 = no cap. Your max cost per run is always respected.

## Actor input object example

```json
{
  "publishedWithinDays": 14,
  "openOnly": true,
  "minValueGbp": 0,
  "smeSuitableOnly": false,
  "includePipelineNotices": false,
  "includeDescription": true,
  "maxResultsPerSource": 0,
  "maxResults": 30
}
```

# Actor output Schema

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

All tenders as a dataset (JSON, CSV, Excel and more via the API or Console).

## `summary` (type: `string`):

Matches and saved rows per search, failures and the stop reason.

# 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 = {
    "publishedWithinDays": 14,
    "maxResults": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrslm_data/uk-public-tenders").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 = {
    "publishedWithinDays": 14,
    "maxResults": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("mrslm_data/uk-public-tenders").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 '{
  "publishedWithinDays": 14,
  "maxResults": 30
}' |
apify call mrslm_data/uk-public-tenders --silent --output-dataset

```

## MCP server setup

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

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/Zusq0vTCldBorZNRa/builds/zq6KvKYlnRybSuQ7k/openapi.json
