# ComplyOnSite MCP server

> Connect Claude, ChatGPT, Cursor, VS Code or Codex to ComplyOnSite’s waste codes, exposure calculators and construction data. No account, read-only.
> Web page: https://complyonsite.com/docs/mcp

Give an AI assistant the waste codes, exposure calculators, first-aid rules, waste paperwork and construction data behind the free tools on this site. No account or key. It answers questions; it never saves, signs or sends anything.

Version 0.2.0. Streamable HTTP. Listed in the [official MCP Registry](https://registry.modelcontextprotocol.io/v0.1/servers/com.complyonsite%2Ftools/versions/0.2.0) as `com.complyonsite/tools`.

`https://mcp.complyonsite.com/mcp`

## Connect

Add the server address as a remote MCP server. There is nothing to sign in to.

### Claude

In claude.ai or Claude Desktop, on any plan:

1. Open **Customize**, then **Connectors**.
2. Choose **Add**, then **Add custom connector**.
3. Name it ComplyOnSite and paste the server address.
4. Choose **No sign in**, then **Add**.

On Team and Enterprise plans, an owner adds it first in **Organization settings**, **Connectors**.

### ChatGPT

1. Open [chatgpt.com/plugins](https://chatgpt.com/plugins).
2. Choose **+**, then **Add custom MCP server**.
3. Enter a name, and the server address under **Connection**.
4. Choose no authentication, accept the warning, then **Create as a plugin**.

In a workspace, an admin may need to allow custom MCP servers first.

### Claude Code

```sh
claude mcp add --transport http complyonsite https://mcp.complyonsite.com/mcp
```

Add `--scope user` to use it in every project.

### Codex

```sh
codex mcp add complyonsite --url https://mcp.complyonsite.com/mcp
```

Or add it to `~/.codex/config.toml`:

```toml
[mcp_servers.complyonsite]
url = "https://mcp.complyonsite.com/mcp"
```

### Cursor

Add it to `~/.cursor/mcp.json` for every project, or `.cursor/mcp.json` for one:

```json
{
  "mcpServers": {
    "complyonsite": {
      "url": "https://mcp.complyonsite.com/mcp"
    }
  }
}
```

### VS Code

Run **MCP: Add Server** from the Command Palette and choose HTTP, or add it to `.vscode/mcp.json`:

```json
{
  "servers": {
    "complyonsite": {
      "type": "http",
      "url": "https://mcp.complyonsite.com/mcp"
    }
  }
}
```

### Other clients

Any client that supports remote MCP servers over Streamable HTTP. Add the address with no authentication. Most JSON configurations take this form:

```json
{
  "mcpServers": {
    "complyonsite": {
      "type": "http",
      "url": "https://mcp.complyonsite.com/mcp"
    }
  }
}
```

## What it covers

### It answers

- [Find UK waste codes](https://complyonsite.com/docs/mcp#ewc_search): Search the UK List of Waste by material words, one or more codes, or a code prefix.
- [Estimate first-aid cover](https://complyonsite.com/docs/mcp#first_aid_requirements): Estimate workplace first-aid cover for each shift from HSE guidance, with EYFS and education guidance where relevant.
- [Calculate daily HAVS exposure](https://complyonsite.com/docs/mcp#havs_daily_exposure): Calculate one person’s daily hand-arm vibration exposure as A(8), HSE points and low/high range.
- [Calculate daily noise exposure](https://complyonsite.com/docs/mcp#noise_daily_exposure): Calculate one person’s daily LEP,d and optional weekly LEP,w from measured task LAeq or dosemeter readings.
- [Get construction injury statistics](https://complyonsite.com/docs/mcp#construction_injury_statistics): Return a retained HSE series for construction deaths, non-fatal injuries or ill health in Great Britain.
- [Get power-tool exposure data](https://complyonsite.com/docs/mcp#power_tool_types): List available power-tool type slugs, or return aggregate vibration and declared noise spreads for one type.
- [Check waste paperwork requirements](https://complyonsite.com/docs/mcp#waste_paperwork): Return waste-paperwork requirements for a named document, or choose the UK route from jurisdiction and hazardous status.
- [Get a compliance document link](https://complyonsite.com/docs/mcp#start_document): Return an anonymous ComplyOnSite URL for a waste transfer note, hazardous waste consignment note or RAMS flow.

### It does not

- Classify waste. A code search returns candidate codes and the assessment each one needs.
- Create, save, sign or send a document. `start_document` returns a link to the form with the codes or job filled in.
- Build RAMS, convert safety data sheets or check Defra Receipt of Waste spreadsheets. Those run on the website.
- Return single tool models’ declared figures. Those are on the [power tool pages](https://complyonsite.com/data/power-tools), linked to each maker’s document.
- Read HSE live. Injury figures are the release shown on the [injury statistics page](https://complyonsite.com/data/construction-injury-statistics).

## Tools (8)

Every tool, with its inputs, a question it answers and the arguments an assistant sends. Every tool only reads.

### Find UK waste codes

`ewc_search` · read-only

Search the UK List of Waste by material words, one or more codes, or a code prefix. Returns official entries, hazardous and mirror status, partner codes, source lineage and any assessment needed. Use the returned entries as candidates: origin, process and composition still determine the classification.

#### Inputs

- **`query` text, required**: Material words, one or more EWC/LoW codes, or a code prefix; common spaced, hyphenated and unspaced formats are accepted. 1 to 80 characters.
- **`limit` whole number, optional**: Maximum matched waste groups and official entries to return; defaults to 5. 1 to 10. Default 5.

#### Example

**Ask:** “What is EWC code 17 09 04?”

```json
{ "name": "ewc_search", "arguments": { "query": "17 09 04" } }
```

**The answer, shortened**

```json
{
  "source": {
    "name": "ComplyOnSite",
    "url": "https://complyonsite.com/tools/ewc-code-finder?code=17-09-04"
  },
  "query": "17 09 04",
  "kind": "code",
  "entry": {
    "code": "170904",
    "display": "17 09 04",
    "hazardous": false,
    "type": "MN",
    "description": "mixed construction and demolition wastes other than those mentioned in 17 09 01, 17 09 02 and 17 09 03",
    "chapter": {
      "code": "17",
      "display": "17",
      "title": "Construction and demolition wastes (including excavated soil from contaminated sites)"
    },
    "subChapter": {
      "code": "1709",
      "display": "17 09",
      "title": "other construction and demolition wastes"
    },
    "mirrorPartners": [
      "170901",
      "170902",
      "… 1 more"
    ],
    "subChapterPartners": [],
    "name": "Mixed construction and demolition waste",
    "mirror": {
      "rule": "Only if an assessment shows it isn’t hazardous.",
      "other": "If it’s hazardous: 17 09 01*, 17 09 02* or 17 09 03*.",
      "text": "Only if an assessment shows it isn’t hazardous. If it’s hazardous: 17 09 01*, 17 09 02* or 17 09 03*."
    },
    "url": "https://complyonsite.com/tools/ewc-code-finder?code=17-09-04"
  },
  "partners": [
    {
      "code": "170901",
      "display": "17 09 01*",
      "hazardous": true,
      "type": "MH",
      "description": "construction and demolition wastes containing mercury",
      "chapter": {
        "code": "17",
        "display": "17",
        "title": "Construction and demolition wastes (including excavated soil from contaminated sites)"
      },
      "subChapter": {
        "code": "1709",
        "display": "17 09",
        "title": "other construction and demolition wastes"
      },
      "mirrorPartners": [
        "170904"
      ],
      "subChapterPartners": [],
      "name": "Construction and demolition waste with mercury",
      "mirror": {
        "rule": "When it’s hazardous, or you can’t find out what’s in it.",
        "other": "If it isn’t hazardous: 17 09 04.",
        "text": "When it’s hazardous, or you can’t find out what’s in it. If it isn’t hazardous: 17 09 04."
      },
      "url": "https://complyonsite.com/tools/ewc-code-finder?code=17-09-01"
    },
    {
      "code": "170902",
      "display": "17 09 02*",
      "hazardous": true,
      "type": "MH",
      "description": "construction and demolition wastes containing PCB (for example PCB-containing sealants, PCB-containing resin-based floorings, PCB-containing sealed glazing u…",
      "chapter": {
        "code": "17",
        "display": "17",
        "title": "Construction and demolition wastes (including excavated soil from contaminated sites)"
      },
      "subChapter": {
        "code": "1709",
        "display": "17 09",
        "title": "other construction and demolition wastes"
      },
      "mirrorPartners": [
        "170904"
      ],
      "subChapterPartners": [],
      "name": "Construction and demolition waste with PCBs",
      "mirror": {
        "rule": "When it’s hazardous, or you can’t find out what’s in it.",
        "other": "If it isn’t hazardous: 17 09 04.",
        "text": "When it’s hazardous, or you can’t find out what’s in it. If it isn’t hazardous: 17 09 04."
      },
      "url": "https://complyonsite.com/tools/ewc-code-finder?code=17-09-02"
    },
    "… 1 more"
  ],
  "partnersNamed": true,
  "wastes": [],
  "wasteTotal": 0,
  "entries": [],
  "entryTotal": 0,
  "codes": [],
  "nearby": [],
  "nearbyHeading": null,
  "prefix": null,
  "suggestion": null,
  "sources": [
    {
      "title": "Commission Decision 2000/532/EC, Annex: List of wastes (as retained in UK law)",
      "name": "the UK List of Waste",
      "url": "https://www.legislation.gov.uk/eudn/2000/532/annex",
      "edition": "revised version as at 31 December 2020",
      "read": "27 September 2026"
    },
    {
      "title": "Waste classification: guidance on the classification and assessment of waste (WM3), Appendix A",
      "name": "the Environment Agency’s WM3 guidance",
      "url": "https://www.gov.uk/government/publications/waste-classification-technical-guidance",
      "edition": "1st edition v1.2.GB, updated 28 September 2021",
      "read": "27 September 2026"
    }
  ],
  "limit": "Choose by origin, process and composition. A non-hazardous mirror entry needs assessment evidence."
}
```

### Estimate first-aid cover

`first_aid_requirements` · read-only

Estimate workplace first-aid cover for each shift from HSE guidance, with EYFS and education guidance where relevant. Returns recommended roles, training, shortages, practical steps, factors and source lineage. This starts a workplace needs assessment; it is not a statutory staffing quota.

#### Inputs

- **`work` text, optional**: Workplace setting; defaults to construction site. One of "site", "factory", "office", "shop", "nursery", "school". Default "site".
- **`shifts` list of whole numbers, required**: Highest number of people present at once on each shift. 1 to 4 items. Each: 1 to 10000.
- **`firstAidersAvailable` list of whole numbers, optional**: First-aiders already available on each shift, in the same order. At most 4 items. Each: 0 to 10000.
- **`receptionClass` true or false, optional**: For a school: whether it has a reception or nursery class. Default false.
- **`factors` list of text, optional**: Relevant factor ids returned by this tool for the selected workplace. At most 5 items. Each: 1 to 30 characters.

#### Example

**Ask:** “How many first-aiders do we need with 51 people on site?”

```json
{ "name": "first_aid_requirements", "arguments": { "work": "site", "shifts": [ 51 ] } }
```

**The answer, shortened**

```json
{
  "source": {
    "name": "ComplyOnSite",
    "url": "https://complyonsite.com/tools/first-aid-requirements-calculator?work=site"
  },
  "work": "site",
  "result": {
    "place": {
      "id": "site",
      "label": "Construction site",
      "hazard": "higher",
      "tag": "Higher risk",
      "covers": "Building, demolition, groundworks, site maintenance"
    },
    "factors": [],
    "plan": {
      "shifts": [
        "{…}"
      ],
      "missing": [],
      "firstAiders": 2,
      "appointed": 0
    },
    "many": false,
    "children": false,
    "room": true,
    "answered": true,
    "answers": [
      {
        "key": "shift-1",
        "eyebrow": "Recommended",
        "headline": "{…}",
        "minor": false,
        "have": null
      }
    ],
    "steps": [
      {
        "key": "cover",
        "title": "Holiday cover",
        "text": "Train a spare person, so someone is always on duty."
      },
      {
        "key": "kit",
        "title": "A first-aid kit",
        "text": "Easy to reach, with a green and white cross sign."
      },
      "… 2 more"
    ]
  },
  "calculatorUrl": "https://complyonsite.com/tools/first-aid-requirements-calculator?work=site&people=51",
  "availableFactors": [
    {
      "id": "shared",
      "label": "Other contractors work on this site"
    },
    {
      "id": "bleeding",
      "label": "Risk of serious bleeding"
    },
    "… 3 more"
  ],
  "sources": [],
  "limit": "A starting point for the needs assessment. Consider the work, workforce, site layout, shifts, remoteness and people who are not employees before deciding the…"
}
```

### Calculate daily HAVS exposure

`havs_daily_exposure` · read-only

Calculate one person’s daily hand-arm vibration exposure as A(8), HSE points and low/high range. For each tool, supply a measured vibration magnitude in m/s² or an HSE category and variant returned by power_tool_types. Time means actual tool-running time in the person’s hands.

#### Inputs

- **`tools` list of objects, required**: Tools or tasks used by one person during one day; 1 to 20 entries. 1 to 20 items.Each item of tools:`tools[].label` text, optionalOptional task or tool label used in the result. 1 to 60 characters.`tools[].minutes` whole number, requiredActual exposure time in minutes, not the whole shift. 1 to 1440.`tools[].category` text, optionalHSE tool-category slug returned by power_tool_types; use with variant when vibration is omitted. 1 to 60 characters.`tools[].variant` text, optionalHSE variant slug belonging to category; use when that category has multiple variants. 1 to 60 characters.`tools[].vibration` number, optionalYour own vibration value, m/s². The website rounds this input to two decimal places. 0.1 to 100.

#### Example

**Ask:** “What is the vibration exposure for two hours on a tool at 5 m/s²?”

```json
{ "name": "havs_daily_exposure", "arguments": { "tools": [ { "vibration": 5, "minutes": 120 } ] } }
```

**The answer, shortened**

```json
{
  "source": {
    "name": "ComplyOnSite",
    "url": "https://complyonsite.com/tools/havs-calculator"
  },
  "exposure": {
    "tools": [
      {
        "id": "tool-1",
        "label": "Tool 1",
        "minutes": 120,
        "magnitude": "{…}",
        "a8": 2.5,
        "a8Low": 2.5,
        "a8High": 2.5,
        "points": 100,
        "pointsLow": 100,
        "pointsHigh": 100,
        "share": 1
      }
    ],
    "hours": 2,
    "a8": 2.5,
    "a8Low": 2.5,
    "a8High": 2.5,
    "points": 100,
    "pointsLow": 100,
    "pointsHigh": 100,
    "band": "above-action",
    "bandLow": "above-action",
    "bandHigh": "above-action",
    "largest": null
  },
  "display": {
    "a8": "2.50",
    "points": "100",
    "a8Low": "2.50",
    "a8High": "2.50"
  },
  "units": {
    "a8": "m/s² A(8)",
    "time": "minutes"
  },
  "thresholds": {
    "action": 2.5,
    "limit": 5
  },
  "sources": [
    {
      "title": "HSE, Vibration risk assessment, Table 1 \"Some typical vibration levels for common tools\"",
      "url": "https://www.hse.gov.uk/vibration/hav/assessrisks.htm",
      "read": "read 16 September 2026"
    }
  ],
  "limit": "Initial estimate for the entered tasks. Real exposure varies; the range can cross a threshold even when the central estimate does not."
}
```

### Calculate daily noise exposure

`noise_daily_exposure` · read-only

Calculate one person’s daily LEP,d and optional weekly LEP,w from measured task LAeq or dosemeter readings. Optionally assesses peak dB(C) and sound at the ear from SNR or HML protection data. Do not use sound power LwA or per-shot values; omitted peak or protection measurements remain explicitly unassessed.

#### Inputs

- **`tasks` list of objects, required**: Measured tasks for one person in one day; 1 to 10 entries. 1 to 10 items.Each item of tasks, option 1:`tasks[].label` text, optionalShort human-readable label or stable slug, up to 60 characters. 1 to 60 characters.`tasks[].minutes` whole number, requiredActual exposure time in minutes, not the whole shift. 1 to 1440.`tasks[].level` number, requiredMeasured task-equivalent continuous A-weighted sound level, LAeq in dB(A). 40 to 140.`tasks[].protectionWorn` true or false, optionalWhether hearing protection is worn during this task; defaults to false. Default false.`tasks[].levelC` number, optionalMeasured C-weighted task level in dB(C), needed to estimate protection at the ear. 40 to 160.Each item of tasks, option 2: kind "dosemeter":`tasks[].kind` "dosemeter", required`tasks[].label` text, optionalShort human-readable label or stable slug, up to 60 characters. 1 to 60 characters.`tasks[].measuredMinutes` whole number, requiredHow long the dosemeter measured. 1 to 1440.`tasks[].minutes` whole number, optionalExposure time represented. Defaults to measuredMinutes. 1 to 1440.`tasks[].protectionWorn` true or false, optionalWhether hearing protection is worn during this task; defaults to false. Default false.`tasks[].levelC` number, optionalMeasured C-weighted task level in dB(C), needed to estimate protection at the ear. 40 to 160.`tasks[].unit` "pa2h" or "dose85" or "dose80", requiredWith unit: "pa2h": Sound exposure in Pa²h. With unit: "dose85": Percentage dose referenced to 85 dB(A) for 8 hours. With unit: "dose80": Percentage dose referenced to 80 dB(A) for 8 hours.`tasks[].reading` number, requiredWith unit: "pa2h": Dosemeter sound exposure in Pa²h. 0.0001 to 10000. With unit: "dose85": Dosemeter reading as a percentage. 0.0001 to 100000. With unit: "dose80": Dosemeter reading as a percentage. 0.0001 to 100000.
- **`peak` number, optional**: Highest measured C-weighted peak sound pressure level in dB(C). 60 to 200.
- **`protector` object, optional**: Hearing-protector attenuation from its SNR or H/M/L ratings.Inside protector, option 1: method "snr":`protector.method` "snr", required`protector.snr` number, requiredHearing-protector attenuation rating in decibels. 1 to 60.Inside protector, option 2: method "hml":`protector.method` "hml", required`protector.h` number, requiredHearing-protector attenuation rating in decibels. 1 to 60.`protector.m` number, requiredHearing-protector attenuation rating in decibels. 1 to 60.`protector.l` number, requiredHearing-protector attenuation rating in decibels. 1 to 60.
- **`week` object, optional**: Repeat the calculated day this many days, or supply the daily LEP,d for each exposed day.Inside week, option 1:`week.days` whole number, requiredNumber of days, from 1 to 7, on which this calculated daily exposure repeats. 1 to 7.Inside week, option 2:`week.levels` list of numbers, requiredDaily LEP,d values in dB(A), one for each exposed day, maximum 7. 1 to 7 items. Each: 40 to 140.

#### Example

**Ask:** “Eight hours at 85 dB(A): what is the daily noise exposure?”

```json
{ "name": "noise_daily_exposure", "arguments": { "tasks": [ { "level": 85, "minutes": 480 } ] } }
```

**The answer, shortened**

```json
{
  "source": {
    "name": "ComplyOnSite",
    "url": "https://complyonsite.com/tools/noise-exposure-calculator"
  },
  "exposure": {
    "tasks": [
      {
        "id": "task-1",
        "label": "Task 1",
        "level": 85,
        "minutes": 480,
        "points": 100,
        "partial": 85,
        "share": 1,
        "moreBeforeLower": 0,
        "moreBeforeUpper": 0
      }
    ],
    "minutes": 480,
    "points": 100,
    "level": 85,
    "band": "upper",
    "largest": null
  },
  "display": {
    "level": "85",
    "points": "100",
    "atEar": "85"
  },
  "week": null,
  "action": {
    "band": "upper",
    "byPeak": false
  },
  "peak": {
    "assessed": false
  },
  "atEar": {
    "tasks": [
      {
        "id": "task-1",
        "atEar": 85,
        "worn": false,
        "fit": null
      }
    ],
    "level": 85,
    "overLimit": false
  },
  "units": {
    "level": "dB(A) LEP,d",
    "week": "dB(A) LEP,w",
    "peak": "dB(C)",
    "time": "minutes"
  },
  "thresholds": {
    "lowerAction": 80,
    "upperAction": 85,
    "atEarLimit": 87
  },
  "sources": [
    {
      "title": "HSE L108, third edition (2021)",
      "url": "https://www.hse.gov.uk/pubns/priced/l108.pdf",
      "read": "read 27 September 2026"
    },
    {
      "title": "Control of Noise at Work Regulations 2005",
      "url": "https://www.legislation.gov.uk/uksi/2005/1643/contents"
    }
  ],
  "limit": "Action values use noise before protection. The 87 dB(A) limit uses noise at the ear; a missing protector rating or C-weighted level leaves it unassessed. Mis…"
}
```

### Get construction injury statistics

`construction_injury_statistics` · read-only

Return a retained HSE series for construction deaths, non-fatal injuries or ill health in Great Britain. Preserves each series’ period, units, provisional or revised status, confidence intervals, source file and publication date. This does not query a live HSE feed.

#### Inputs

- **`series` text, optional**: Dataset series to return; defaults to the latest headline figures. One of "latest", "deaths", "fatal-accident-kinds", "employment", "self-reported-injury", "reported-injuries", "ill-health". Default "latest".

#### Example

**Ask:** “How many construction workers died last year in Great Britain?”

```json
{ "name": "construction_injury_statistics", "arguments": { "series": "latest" } }
```

**The answer, shortened**

```json
{
  "source": {
    "name": "ComplyOnSite",
    "url": "https://complyonsite.com/data/construction-injury-statistics"
  },
  "series": "latest",
  "coverage": "Great Britain, construction",
  "rows": {
    "workerDeaths": {
      "year": "2025/26p",
      "deaths": 25,
      "rate": 1.23,
      "provisional": true
    },
    "fiveYear": {
      "period": "2021/22 - 2025/26p",
      "deaths": 186,
      "averageRate": 1.78,
      "provisional": true
    },
    "fallsFromHeight": {
      "period": "2021/22 - 2025/26p",
      "deaths": 97,
      "totalDeaths": 186
    },
    "employment": {
      "year": "2024/25r",
      "employeeDeaths": 17,
      "employeeRate": 1.28,
      "selfEmployedDeaths": 18,
      "selfEmployedRate": 2.31,
      "status": "revised",
      "provisional": false,
      "revised": true,
      "sourceTable": "RIDFATAL Table 1"
    },
    "selfReportedInjury": {
      "period": "2022/23 - 2024/25",
      "constructionRate": 2500,
      "constructionLower": 1930,
      "constructionUpper": 3060,
      "allIndustriesRate": 1780,
      "allIndustriesLower": 1650,
      "allIndustriesUpper": 1910,
      "sourceTable": "LFSINJIND Table-1"
    }
  },
  "release": {
    "id": "2026-10-03",
    "retrieved": "2026-10-03"
  },
  "sources": {
    "fatalitiesHistorical": {
      "sourceTable": "RIDHIST Table 1",
      "sourceSheet": "Table 1",
      "published": "2025-11-20",
      "url": "https://www.hse.gov.uk/statistics/assets/docs/ridhist.xlsx"
    },
    "fatalitiesLatest": {
      "sourceTable": "RIDFATAL Table 1",
      "sourceSheet": "Table 1",
      "published": "2026-07-01",
      "url": "https://www.hse.gov.uk/statistics/assets/docs/ridfatal.xlsx"
    },
    "fatalKinds": {
      "sourceTable": "Fatalities reportable under RIDDOR (record list), aggregated",
      "sourceSheet": "Fatals 2122 to 2526p",
      "published": "2026-07-01",
      "url": "https://www.hse.gov.uk/statistics/assets/docs/fatalities-reportable-under-riddor.xlsx"
    },
    "selfReportedInjury": {
      "sourceTable": "LFSINJIND Table-1",
      "sourceSheet": "Table-1",
      "published": "2025-11-20",
      "url": "https://www.hse.gov.uk/statistics/assets/docs/lfsinjind.xlsx"
    },
    "reportedInjuries": {
      "sourceTable": "RIDIND Table 3",
      "sourceSheet": "Table 3",
      "published": "2025-11-20",
      "url": "https://www.hse.gov.uk/statistics/assets/docs/ridind.xlsx"
    },
    "illHealthAll": {
      "sourceTable": "LFSILLIND Table-1",
      "sourceSheet": "Table-1",
      "published": "2025-11-20",
      "url": "https://www.hse.gov.uk/statistics/assets/docs/lfsillind.xlsx"
    },
    "illHealthMusculoskeletal": {
      "sourceTable": "LFSILLIND Table-2",
      "sourceSheet": "Table-2",
      "published": "2025-11-20",
      "url": "https://www.hse.gov.uk/statistics/assets/docs/lfsillind.xlsx"
    }
  },
  "units": "Deaths and reported injuries are counts; rates are per 100,000 workers; ill health is in thousand workers. Self-reported injury is a Labour Force Survey esti…",
  "limit": "Latest published periods differ by series. Provisional and revised figures retain their status; these are the website’s retained release, not a live HSE feed."
}
```

### Get power-tool exposure data

`power_tool_types` · read-only

List available power-tool type slugs, or return aggregate vibration and declared noise spreads for one type. A selected type also includes mapped HSE vibration variants and HSE in-use noise comparisons where available. It does not return maker-model rows or quotes; declared LpA is not measured task LAeq.

#### Inputs

- **`type` text, optional**: Tool-type slug returned by this tool, for example angle-grinder; omit to list all available types. 1 to 60 characters.

#### Example

**Ask:** “How much do angle grinders vibrate?”

```json
{ "name": "power_tool_types", "arguments": { "type": "angle-grinder" } }
```

**The answer, shortened**

```json
{
  "source": {
    "name": "ComplyOnSite",
    "url": "https://complyonsite.com/data/power-tools/angle-grinders"
  },
  "type": {
    "slug": "angle-grinder",
    "label": "Angle grinder",
    "group": "grinding",
    "page": "angle-grinders",
    "hse": "angle-grinder",
    "vibration": {
      "models": 544,
      "p10": 4.5,
      "median": 6.5,
      "p90": 8.9,
      "min": 1.7,
      "max": 13.5
    },
    "noise": {
      "models": 572,
      "p10": 83,
      "median": 89,
      "p90": 95,
      "min": 73,
      "max": 98
    }
  },
  "hseVibration": {
    "slug": "angle-grinder",
    "label": "Angle grinder",
    "aliases": [
      "grinder",
      "disc cutter",
      "… 3 more"
    ],
    "group": "grinding",
    "printed": "Grinders - Angle",
    "action": "rotary",
    "variants": [
      {
        "slug": "small",
        "label": "100 to 180 mm disc",
        "printed": "Grinders - Angle: 100 - 180 mm",
        "low": 3,
        "high": 10,
        "value": 7
      },
      {
        "slug": "flap-disc",
        "label": "100 or 125 mm flap disc",
        "printed": "Grinders - Angle: 125 and 100 mm Flapper discs",
        "low": 2,
        "high": 5,
        "value": 4
      },
      "… 1 more"
    ]
  },
  "inUseNoise": {
    "above": [
      6.8,
      22.8
    ],
    "tested": "six angle grinders cutting and grinding stone and metal",
    "report": "HSE RR1182, 2022",
    "url": "https://www.hse.gov.uk/research/rrhtm/rr1182.htm"
  },
  "perShotNoise": false,
  "retrieved": {
    "from": "2026-09-29",
    "to": "2026-09-30"
  },
  "units": {
    "vibration": "m/s²",
    "noise": "dB(A) declared LpA"
  },
  "terms": "Summary figures calculated by ComplyOnSite from makers’ declared values. Reuse them with credit to ComplyOnSite and a link to https://complyonsite.com/data/p…",
  "sources": [
    {
      "title": "ComplyOnSite aggregates of makers’ declared figures",
      "url": "https://complyonsite.com/data/power-tools/angle-grinders"
    },
    {
      "title": "HSE, Vibration risk assessment, Table 1 \"Some typical vibration levels for common tools\"",
      "url": "https://www.hse.gov.uk/vibration/hav/assessrisks.htm"
    }
  ],
  "limit": "Spreads describe declared figures across models, not a person’s exposure or a measured workplace level. Use a measured LAeq for noise exposure; model figures…"
}
```

### Check waste paperwork requirements

`waste_paperwork` · read-only

Return waste-paperwork requirements for a named document, or choose the UK route from jurisdiction and hazardous status. A document id takes precedence when both forms are supplied. Results cover parties, required items, retention, electronic and signature status, regulator route and source lineage. Preparation tools do not issue, submit or confirm acceptance of official documents.

#### Inputs

- **`document` text, optional**: A document id returned by this tool, for example us-asbestos-wsr or sct-special-waste. 1 to 60 characters.
- **`jurisdiction` text, optional**: UK jurisdiction; use together with hazardous, or omit both to list documents. One of "gb-eng", "gb-wls", "gb-sct", "gb-nir".
- **`hazardous` true or false, optional**: Whether the waste is hazardous; use together with jurisdiction.

#### Example

**Ask:** “What paperwork goes with non-hazardous waste in England?”

```json
{ "name": "waste_paperwork", "arguments": { "jurisdiction": "gb-eng", "hazardous": false } }
```

**The answer, shortened**

```json
{
  "source": {
    "name": "ComplyOnSite",
    "url": "https://complyonsite.com/tools/waste-transfer-note"
  },
  "jurisdiction": "England",
  "document": "Waste transfer note",
  "available": true,
  "paperwork": {
    "id": "gb-eng-transfer",
    "country": "United Kingdom",
    "countryId": "gb",
    "place": "England",
    "covers": "Non-hazardous waste",
    "kind": "note",
    "electronic": {
      "answer": "yes",
      "label": "Yes",
      "note": "It must be viewable in a visible, legible form.",
      "from": "spec",
      "source": null
    },
    "signature": {
      "answer": "yes",
      "label": "Yes",
      "note": "An electronic note takes an electronic signature.",
      "from": "spec",
      "source": null
    },
    "tool": {
      "href": "/tools/waste-transfer-note",
      "label": "Waste transfer note"
    },
    "document": "Waste transfer note",
    "issuedBy": "Anyone: the law sets the items, not the layout",
    "parties": [
      {
        "role": "Transferor (the person handing the waste over)",
        "does": "Sections A and B, and signs section D",
        "optional": false
      },
      {
        "role": "Transferee (the person collecting it)",
        "does": "Section C, and signs section D",
        "optional": false
      }
    ],
    "partiesFrom": "text",
    "items": null,
    "kept": {
      "years": 2,
      "who": "Transferor and transferee",
      "rule": "The transferor and the transferee each keep the note, or a copy, for at least 2 years."
    },
    "system": {
      "name": "Digital waste tracking",
      "url": "https://www.gov.uk/government/publications/digital-waste-tracking-service/digital-waste-tracking-service",
      "note": "Permitted receiving sites report each load from 1 October 2026; the note still goes with the waste."
    },
    "sources": [
      {
        "title": "Waste (England and Wales) Regulations 2011, regulation 35",
        "url": "https://www.legislation.gov.uk/uksi/2011/988/regulation/35",
        "read": "6 October 2026"
      },
      {
        "title": "Digital waste tracking service (GOV.UK)",
        "url": "https://www.gov.uk/government/publications/digital-waste-tracking-service/digital-waste-tracking-service",
        "read": "6 October 2026"
      }
    ]
  },
  "rules": {
    "changes": "The waste hierarchy statement is England and Wales’s, and registration numbers are checked with the Environment Agency.",
    "hierarchy": "By signing in section D, I confirm that I have fulfilled my duty to apply the waste hierarchy as required by regulation 12 of the Waste (England and Wales) R…",
    "producerImporter": false,
    "destination": false,
    "regulator": "the Environment Agency",
    "register": "https://environment.data.gov.uk/public-register/view/search-waste-carriers-brokers",
    "tiers": true,
    "hazardous": {
      "href": "https://www.gov.uk/dispose-hazardous-waste/consignment-notes",
      "label": "Consignment notes on GOV.UK"
    },
    "tracking": "Since 1 October 2026"
  },
  "sources": [
    {
      "title": "Waste transfer note",
      "url": "https://complyonsite.com/tools/waste-transfer-note"
    },
    {
      "title": "Waste paperwork by jurisdiction",
      "url": "https://complyonsite.com/data/waste-paperwork#doc-gb-eng-transfer"
    },
    "… 2 more"
  ],
  "limit": "Business waste, one non-hazardous transfer. This identifies the note route; it does not decide every exemption or certify a movement."
}
```

### Get a compliance document link

`start_document` · read-only

Return an anonymous ComplyOnSite URL for a waste transfer note, hazardous waste consignment note or RAMS flow. Waste-note links prefill validated EWC codes; RAMS links select a job and optional supported operation. The tool does not create, save, sign, issue or submit a document.

#### Inputs

Option 1: document "waste-transfer-note" or document "consignment-note":

- **`document` "waste-transfer-note" or "consignment-note", required**: With document: "waste-transfer-note": Open the non-hazardous waste transfer note. With document: "consignment-note": Open the hazardous waste consignment note.
- **`codes` list of text, optional**: With document: "waste-transfer-note": Non-hazardous EWC codes to prefill; defaults to none, maximum 5. At most 5 items. Each: Short human-readable label or stable slug, up to 60 characters. 1 to 60 characters. With document: "consignment-note": Hazardous EWC codes to prefill; defaults to none, maximum 5. At most 5 items. Each: Short human-readable label or stable slug, up to 60 characters. 1 to 60 characters.

Option 2: document "rams":

- **`document` "rams", required**: Open the RAMS flow.
- **`job` text, optional**: RAMS job slug returned in an error when an unknown slug is supplied. 1 to 60 characters.
- **`operation` text, optional**: Supported operation slug belonging to the selected job. 1 to 60 characters.

#### Example

**Ask:** “Start a waste transfer note for mixed rubble and wood.”

```json
{ "name": "start_document", "arguments": { "document": "waste-transfer-note", "codes": [ "17 09 04", "17 02 01" ] } }
```

**The answer, shortened**

```json
{
  "source": {
    "name": "ComplyOnSite",
    "url": "https://complyonsite.com/tools/waste-transfer-note"
  },
  "url": "https://complyonsite.com/tools/waste-transfer-note?code=170904-170201",
  "prefilled": {
    "codes": [
      "170904",
      "170201"
    ]
  },
  "created": false,
  "sources": [
    {
      "title": "Waste transfer note",
      "url": "https://complyonsite.com/tools/waste-transfer-note"
    },
    {
      "title": "Commission Decision 2000/532/EC, Annex: List of wastes (as retained in UK law)",
      "name": "the UK List of Waste",
      "url": "https://www.legislation.gov.uk/eudn/2000/532/annex",
      "edition": "revised version as at 31 December 2020",
      "read": "27 September 2026"
    }
  ],
  "limit": "Only EWC codes are filled in. Jurisdiction must be chosen on the page. Parties, addresses, load details, dates and signatures need a versioned answer-import …"
}
```

## What an answer contains

- **`source`**: The ComplyOnSite page that shows the same answer, with its address.
- **`sources`**: The regulations, HSE guidance or data behind the figures, with links.
- **`limit`**: What the answer does not establish, for example that a search result is not a waste classification.
- **Format**: The same JSON comes as text and as structured content.
- **Errors**: An input the tool does not know, such as an unlisted waste code or tool type, returns an error with the accepted choices.

## Limits

- **Requests**: 6000 every 60 seconds, and 600 every 10 seconds from one IP address, counted separately at each Cloudflare location.
- **Over the limit**: HTTP 429, with `Retry-After: 60` or `Retry-After: 10`.
- **Request size**: Up to 32 KB. Each tool also limits its own inputs, shown in its table.
- **Methods**: `POST, OPTIONS`. No sessions and no event stream.

## Privacy

- No account, key, sign-in or cookie.
- Read-only: no tool stores or changes anything.
- Tool arguments and answers are not logged.
- Your IP address is used to count requests against the limit.
- For 10% of requests, chosen at random, Cloudflare keeps logs and traces for 7 days: the time, IP address and the approximate location and network it implies, the client name, the request headers including which tool was called, and the response status.
- No analytics.

The [privacy policy](https://complyonsite.com/legal/privacy#mcp-server) covers the server in full.

## Support

- A wrong answer or a problem connecting: email [hello@complyonsite.com](mailto:hello@complyonsite.com?subject=MCP%20server) with the tool, the arguments and what you expected.
- Privacy questions: [hi@complyonsite.com](mailto:hi@complyonsite.com).
