# EOR Scope (remote · mcp.eorscope.com)

Statutory employer cost by country, before any Employer of Record (EOR) fee.

- Trust score: 80/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-25

## Components

- remote · `mcp.eorscope.com`: 80/100 (this document), [markdown](https://verifymcp.io/servers/eorscope-eorscope-mcp/mcp.md), [page](https://verifymcp.io/servers/eorscope-eorscope-mcp/mcp)
- npm · `eorscope-mcp`: 67/100, [markdown](https://verifymcp.io/servers/eorscope-eorscope-mcp/eorscope-mcp.md), [page](https://verifymcp.io/servers/eorscope-eorscope-mcp/eorscope-mcp)

## Channel facts

- Endpoint: `https://mcp.eorscope.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.2.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-25.

- **Endpoint Security**: 80/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 75/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 4958 tokens (~309/item across 16 items; 14 tools + 2 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 47/100
  - Stability observed for 14 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 99/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 97% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 14 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 16 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

## Install

### How do I install the EOR Scope MCP server?

EOR Scope is a hosted endpoint at https://mcp.eorscope.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http eorscope-eorscope-mcp 'https://mcp.eorscope.com/mcp'
```

### Cursor

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

### VS Code

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

### Codex

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

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "eorscope-eorscope-mcp": {
      "type": "remote",
      "url": "https://mcp.eorscope.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add eorscope-eorscope-mcp --url 'https://mcp.eorscope.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  eorscope-eorscope-mcp:
    url: "https://mcp.eorscope.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "eorscope-eorscope-mcp": {
      "Transport": "http",
      "Url": "https://mcp.eorscope.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add eorscope-eorscope-mcp -t streamable-http -u 'https://mcp.eorscope.com/mcp'
```

### Other

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

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-25 (score 80, +1)

No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-23 (score 79, 0)

- [security] Tool “compare_offers” rewrote its description, which is the text the model reads
- [security] Tool “compare_countries” rewrote its description, which is the text the model reads
- [security] Tool “compare_structures” rewrote its description, which is the text the model reads
- [security] Tool “show_ledger” rewrote its description, which is the text the model reads
- [security] Tool “show_compare” rewrote its description, which is the text the model reads
- [security] Tool “scheduled_changes” rewrote its description, which is the text the model reads
- [security] Tool “reconcile_quote” rewrote its description, which is the text the model reads
- [security] Tool “max_salary_for_budget” rewrote its description, which is the text the model reads
- [security] Tool “list_countries” rewrote its description, which is the text the model reads
- [security] Tool “fx_stress” rewrote its description, which is the text the model reads
- [security] Tool “employment_terms” rewrote its description, which is the text the model reads
- [security] Tool “employer_cost” rewrote its description, which is the text the model reads
- [security] Tool “cost_next_year” rewrote its description, which is the text the model reads
- [security] Tool “contractor_rate_equivalent” rewrote its description, which is the text the model reads

### 2026-10-22 (score 79, +1)

- [security] Tool “list_countries” rewrote its description, which is the text the model reads
- [security] Tool “compare_countries” rewrote its description, which is the text the model reads
- [security] Tool “compare_offers” rewrote its description, which is the text the model reads
- [security] Tool “compare_structures” rewrote its description, which is the text the model reads
- [security] Tool “contractor_rate_equivalent” rewrote its description, which is the text the model reads
- [security] Tool “cost_next_year” rewrote its description, which is the text the model reads
- [security] Tool “employer_cost” rewrote its description, which is the text the model reads
- [security] Tool “employment_terms” rewrote its description, which is the text the model reads
- [security] Tool “fx_stress” rewrote its description, which is the text the model reads
- [security] Tool “max_salary_for_budget” rewrote its description, which is the text the model reads
- [security] Tool “reconcile_quote” rewrote its description, which is the text the model reads
- [security] Tool “scheduled_changes” rewrote its description, which is the text the model reads
- [security] Tool “show_compare” rewrote its description, which is the text the model reads
- [security] Tool “show_ledger” rewrote its description, which is the text the model reads

### 2026-10-20 (score 78, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-18 (score 77, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-16 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-14 (score 75, +1)

- [security] Tool “show_ledger” rewrote its description, which is the text the model reads
- [security] Tool “compare_countries” rewrote its description, which is the text the model reads
- [security] Tool “compare_offers” rewrote its description, which is the text the model reads
- [security] Tool “compare_structures” rewrote its description, which is the text the model reads
- [security] Tool “contractor_rate_equivalent” rewrote its description, which is the text the model reads
- [security] Tool “cost_next_year” rewrote its description, which is the text the model reads
- [security] Tool “employer_cost” rewrote its description, which is the text the model reads
- [security] Tool “employment_terms” rewrote its description, which is the text the model reads
- [security] Tool “fx_stress” rewrote its description, which is the text the model reads
- [security] Tool “list_countries” rewrote its description, which is the text the model reads
- [security] Tool “max_salary_for_budget” rewrote its description, which is the text the model reads
- [security] Tool “reconcile_quote” rewrote its description, which is the text the model reads
- [security] Tool “scheduled_changes” rewrote its description, which is the text the model reads
- [security] Tool “show_compare” rewrote its description, which is the text the model reads

### 2026-10-13 (score 74, 0)

- [security] Tool “employment_terms” rewrote its description, which is the text the model reads
- [security] Tool “compare_countries” rewrote its description, which is the text the model reads
- [security] Tool “compare_offers” rewrote its description, which is the text the model reads
- [security] Tool “compare_structures” rewrote its description, which is the text the model reads
- [security] Tool “fx_stress” rewrote its description, which is the text the model reads
- [security] Tool “contractor_rate_equivalent” rewrote its description, which is the text the model reads
- [security] Tool “cost_next_year” rewrote its description, which is the text the model reads
- [security] Tool “employer_cost” rewrote its description, which is the text the model reads
- [security] Tool “show_ledger” rewrote its description, which is the text the model reads
- [security] Tool “show_compare” rewrote its description, which is the text the model reads
- [security] Tool “scheduled_changes” rewrote its description, which is the text the model reads
- [security] Tool “reconcile_quote” rewrote its description, which is the text the model reads
- [security] Tool “max_salary_for_budget” rewrote its description, which is the text the model reads
- [security] Tool “list_countries” rewrote its description, which is the text the model reads

## MCP tools (14)

### `list_countries` (~112 tokens)

Countries covered

Use this when the user asks which countries EOR Scope covers, or wants the countries of a region (Europe, Asia, Latin America...) with ISO code, currency, an example salary and the statutory employer cost at that salary. Do not use for the detailed cost of one country (use employer_cost). Data snapshot 2026-10-22. Cost comparison, not legal or tax advice.

Input parameters:

- `region` (string): Filter by region, e.g. "Europe", "Asia", "Latin America"

Output parameters:

- `count` (number)
- `countries` (array)
- `meta` (object)
- `reading`
- `summary` (string)

### `employer_cost` (~525 tokens)

Employer cost of an employee in a country

Use this when the user asks what an employee costs the employer in a country beyond the gross salary: employer social security contributions, payroll taxes, pension, health or accident insurance, mandatory levies, or the total cost of employment (e.g. "how much does it cost to employ a developer in Germany at 80k", "employer charges in Spain", "coût employeur d'un salarié en Pologne"). Returns each statutory employer contribution with its rate, base, ceiling, source (official wherever one exists) and check date, then the monthly and annual total and its percent of gross, before any Employer of Record fee. A total the country declares as a floor or a ceiling is written "at least" or "at most". A monthly salary is passed as the user gives it, with salary_period "month": the country's statutory 13th or 14th month is then applied (e.g. "a hire at 4,000 a month in Madrid", "un salarié payé 2 500 par mois à Lisbonne"). Do not use for an employee's net pay or income tax, for legal advice, or for the fees of a provider. Amounts given in the local currency come back in it, with the USD in brackets. Data snapshot 2026-10-22. Cost comparison, not legal or tax advice.

Input parameters:

- `assumptions` (object): Override an adjustable assumption the country declares, e.g. {"basic_share_of_gross": 0.6}. See `assumptions` in an employer_cost answer.
- `country` (string, required): ISO 3166-1 alpha-2 code ("DE") or country name ("Germany")
- `include_notes` (boolean): Include the long legal note behind each line
- `payments_per_year` (number): With salary_period "month" only: the total number of monthly salaries the contract pays in a year, statutory ones included (e.g. 14). Omit to use the statutory number of the country.
- `salary` (number): Gross salary, a year unless salary_period is "month". Omit to use the country's example salary.
- `salary_currency` (string): Currency of `salary`: USD, or the local currency of the country
- `salary_period` (string): Whether the salary is a year (default) or a month. Pass a monthly salary as the user gives it, with "month": the statutory number of monthly payments of the country (13th, 14th month) is applied, see…

Output parameters:

- `assumptions` (array)
- `country` (object)
- `employer_cost` (object)
- `included_in_gross_salary` (object)
- `lines` (array)
- `meta` (object)
- `not_in_total` (array)
- `salary` (object)
- `salary_basis` (object)
- `summary` (string)
- `widget` (object)

### `compare_countries` (~269 tokens)

Employer cost of one salary in several countries

Use this when the user wants the statutory employer cost of the same gross salary in 2 to 10 countries (e.g. "employer cost of 70k in Poland, Portugal and Spain", "combien coûte un salaire de 60 000 en Irlande et aux Pays-Bas"). Before any Employer of Record fee; rows come back in the order requested, not ranked. Do not use when each country has its own salary (use compare_offers). Data snapshot 2026-10-22. Cost comparison, not legal or tax advice.

Input parameters:

- `countries` (array, required)
- `payments_per_year` (number): With salary_period "month" only: the total number of monthly salaries the contract pays in a year, statutory ones included (e.g. 14). Omit to use the statutory number of the country.
- `salary_period` (string): Whether the salary is a year (default) or a month. Pass a monthly salary as the user gives it, with "month": the statutory number of monthly payments of the country (13th, 14th month) is applied, see…
- `salary_usd` (number, required): Gross salary in USD, a year unless salary_period is "month", applied to every country

Output parameters:

- `countries` (array)
- `meta` (object)
- `reading`
- `salary_annual_usd` (number)
- `salary_monthly_usd`
- `summary` (string)
- `widget` (object)

### `max_salary_for_budget` (~352 tokens)

Gross salary that fits a hiring budget

Use this when the user has an all-in budget for a hire in a country and asks what gross salary it allows (e.g. "I have 100k a year for a hire in Germany, what salary can I offer?", "quel salaire brut pour un budget de 8 000 par mois en Espagne"). Returns the largest gross salary whose statutory employer cost (salary plus employer charges, plus an Employer of Record fee if the user gives one) stays within the budget, solved on the same ledger as employer_cost, so ceilings, floors, bands and fixed amounts are taken into account, and the monthly salary it stands for, paid the country's statutory number of times (13th, 14th month). Amounts given in the local currency come back in it, with the USD in brackets. Do not use for net pay. Data snapshot 2026-10-22. Cost comparison, not legal or tax advice.

Input parameters:

- `assumptions` (object): Override an adjustable assumption the country declares, e.g. {"basic_share_of_gross": 0.6}. See `assumptions` in an employer_cost answer.
- `budget` (number, required): Total employer budget for one employee
- `budget_currency` (string): Currency of `budget`: USD, or the local currency of the country
- `budget_period` (string): Whether `budget` is per year or per month
- `country` (string, required): ISO 3166-1 alpha-2 code ("DE") or country name ("Germany")
- `eor_fee_usd_month` (number): An EOR fee to take out of the budget first, in USD per employee per month, as the user gives it

Output parameters:

- `budget` (object)
- `country` (object)
- `employer_cost` (object)
- `max_monthly_salary` (object)
- `max_salary` (object)
- `meta` (object)
- `reading`
- `summary` (string)
- `total` (object)

### `employment_terms` (~141 tokens)

Statutory employment terms

Use this when the user, hiring in a country, asks about statutory minimums: paid leave days, public holidays, maximum probation, notice period, 13th-month payment or other mandatory payments (e.g. "how many days of leave in Brazil", "is there a 13th month in Mexico"). Each term comes with its source and check date. Do not use for legal advice on a specific dismissal, contract dispute or visa. Data snapshot 2026-10-22. Cost comparison, not legal or tax advice.

Input parameters:

- `country` (string, required): ISO 3166-1 alpha-2 code ("DE") or country name ("Germany")

Output parameters:

- `country` (object)
- `extra_month_payments` (array)
- `meta` (object)
- `reading`
- `salary_payments` (object)
- `statutory_extras` (array)
- `summary` (string)
- `terms` (object)

### `reconcile_quote` (~558 tokens)

Check an EOR or payroll quote

Use this when the user shares a quote, offer, invoice or cost breakdown from an Employer of Record, PEO or payroll provider and asks whether it is fair, correct, overpriced or what it includes (e.g. "here is my EOR quote for Germany: salary 5,900, employer contributions 1,350, fee 560 a month, is it honest?", "voici le devis de mon EOR, est-il correct ?"). Checks the quote lines against the statutory ledger of the country at the same salary: expected and quoted amount per statutory line, statutory lines missing from a detailed quote, charges with no statutory counterpart, and the gap split into fee lines, charges above the statutory ledger and the salary-line difference (often an exchange-rate margin). When the quote gives employer charges as one total, that total is compared with the statutory total and the expected line-by-line breakdown is returned. A monthly quote in a country paying more than 12 monthly salaries a year (e.g. 14 in Spain) is read against one monthly payment, the extra payments being owed outside its lines. Amounts given in the local currency come back in it, with the USD in brackets. Pass the amounts as written on the quote; the provider's name is never needed. Do not use without figures from the user. Data snapshot 2026-10-22. Cost comparison, not legal or tax advice.

Input parameters:

- `amounts_currency` (string): Currency of the quote line amounts
- `assumptions` (object): Override an adjustable assumption the country declares, e.g. {"basic_share_of_gross": 0.6}. See `assumptions` in an employer_cost answer.
- `country` (string, required): ISO 3166-1 alpha-2 code ("DE") or country name ("Germany")
- `lines` (array, required)
- `payments_per_year` (number): With salary_period "month" only: the total number of monthly salaries the contract pays in a year, statutory ones included (e.g. 14). Omit to use the statutory number of the country.
- `period` (string): Whether the quote line amounts are per month or per year (one employee)
- `salary` (number, required): Gross salary the quote is for, a year unless salary_period is "month"
- `salary_currency` (string): Currency of `salary`: USD, or the local currency of the country
- `salary_period` (string): Whether the salary is a year (default) or a month. Pass a monthly salary as the user gives it, with "month": the statutory number of monthly payments of the country (13th, 14th month) is applied, see…

Output parameters:

- `aggregate_lines` (array)
- `country` (object)
- `expected_breakdown` (array)
- `gap_breakdown` (object)
- `lines` (array)
- `meta` (object)
- `missing_from_quote` (array)
- `missing_note`
- `not_in_statutory_ledger` (array)
- `per_month_local` (object)
- `per_month_usd` (object)
- `quote_detail` (string)
- `reading`
- `salary` (object)
- `salary_basis` (object)
- `salary_line` (object)
- `summary` (string)

### `compare_structures` (~503 tokens)

EOR, own entity or contractor cost

Use this when the user is deciding between hiring through an Employer of Record, setting up their own entity, or engaging contractors in a country and wants the cost of each over 1 to 5 years (e.g. "from how many employees should we open an entity in Poland instead of using an EOR?"). Uses the fees and entity costs the user enters plus the statutory employer charges, and gives the headcount at which entity costs and EOR fees cross. Costs only: it does not say whether a contractor arrangement is lawful. Data snapshot 2026-10-22. Cost comparison, not legal or tax advice.

Input parameters:

- `assumptions` (object): Override an adjustable assumption the country declares, e.g. {"basic_share_of_gross": 0.6}. See `assumptions` in an employer_cost answer.
- `contractor_fee_usd_month` (number): A contractor platform fee, if the user has one, in USD per employee per month, as the user gives it
- `country` (string, required): ISO 3166-1 alpha-2 code ("DE") or country name ("Germany")
- `entity_annual_usd` (number): Yearly entity running cost in USD (payroll, accounting, filings), from the user
- `entity_setup_usd` (number): One-off entity set-up cost in USD, from the user
- `eor_fee_usd_month` (number, required): The EOR fee the user has been quoted, in USD per employee per month, as the user gives it
- `headcount` (integer): Number of employees
- `payments_per_year` (number): With salary_period "month" only: the total number of monthly salaries the contract pays in a year, statutory ones included (e.g. 14). Omit to use the statutory number of the country.
- `salary` (number): Gross salary, a year unless salary_period is "month". Omit to use the country's example salary.
- `salary_currency` (string): Currency of `salary`: USD, or the local currency of the country
- `salary_period` (string): Whether the salary is a year (default) or a month. Pass a monthly salary as the user gives it, with "month": the statutory number of monthly payments of the country (13th, 14th month) is applied, see…
- `years` (integer): Horizon in years

Output parameters:

- `break_even` (object)
- `caveats` (array)
- `country` (object)
- `cumulative_usd` (array)
- `employer_cost` (object)
- `meta` (object)
- `over_horizon_usd` (object)
- `per_month_usd` (object)
- `salary` (object)
- `salary_basis` (object)
- `summary` (string)
- `your_inputs` (object)

### `compare_offers` (~238 tokens)

Employer cost of job offers in several countries

Use this when the user has job offers or candidates in 2 to 6 countries, each with its own gross salary (in USD or the local currency), and wants the total employer cost of each (e.g. "candidate A in Poland at 240,000 PLN, candidate B in Portugal at 45k: what does each cost the company?"). A monthly offer is passed with salary_period "month", which applies each country's statutory 13th or 14th month (e.g. "un candidat à 3 000 par mois à Madrid et un autre à 60 000 par an à Dublin"). Returns salary plus statutory employer charges, before any Employer of Record fee, the difference and ratio of each total to the smallest one, and the contribution ceilings each salary reaches. Rows come back in the order given. Do not use when the salary is the same in every country (use compare_countries). Data snapshot 2026-10-22. Cost comparison, not legal or tax advice.

Input parameters:

- `offers` (array, required): One offer per country, 2 to 6 countries, each with its own salary

Output parameters:

- `meta` (object)
- `offers` (array)
- `reading`
- `smallest_total` (object)
- `summary` (string)
- `widget` (object)

### `fx_stress` (~390 tokens)

Exchange-rate stress test

Use this when the user pays, or plans to pay, an employee in local currency and asks about exchange-rate risk or a USD budget (e.g. "what if the real moves 10%", "risque de change sur un salaire en pesos"). Returns the USD cost (gross salary plus statutory employer charges, before any Employer of Record fee) at the official exchange rate of the data snapshot, with its date and source, and if the local currency moves by 5, 10 or 20 percent either way; with a USD budget, the headroom in each case and the move at which the budget is reached. Do not use for currency conversion alone. Data snapshot 2026-10-22. Cost comparison, not legal or tax advice.

Input parameters:

- `assumptions` (object): Override an adjustable assumption the country declares, e.g. {"basic_share_of_gross": 0.6}. See `assumptions` in an employer_cost answer.
- `budget_usd` (number): Annual budget in USD for salary plus employer charges, if the user has one
- `country` (string, required): ISO 3166-1 alpha-2 code ("DE") or country name ("Germany")
- `payments_per_year` (number): With salary_period "month" only: the total number of monthly salaries the contract pays in a year, statutory ones included (e.g. 14). Omit to use the statutory number of the country.
- `salary_local` (number, required): Gross salary in the local currency of the country, a year unless salary_period is "month"
- `salary_period` (string): Whether the salary is a year (default) or a month. Pass a monthly salary as the user gives it, with "month": the statutory number of monthly payments of the country (13th, 14th month) is applied, see…

Output parameters:

- `budget` (object)
- `country` (object)
- `employer_cost` (object)
- `exchange_rate` (object)
- `meta` (object)
- `reading`
- `salary_annual_local`
- `salary_basis` (object)
- `scenarios` (array)
- `summary` (string)
- `total_annual_local`
- `total_at_official_rate` (object)

### `contractor_rate_equivalent` (~495 tokens)

Contractor rate equivalent to an employee

Use this when the user asks what day or hour rate a contractor would need to cost the same as an employee in a country, or wants to set a contractor rate against the full cost of employment (e.g. "what daily rate equals an 80k employee in Germany?"). The employee's annual cost (gross salary plus statutory employer charges, plus an Employer of Record fee if the user gives one) is divided by working days, by default 260 weekdays minus the country's statutory paid leave and public holidays, both adjustable. Costs only: it does not say whether a contractor arrangement is lawful or how to classify a worker. Data snapshot 2026-10-22. Cost comparison, not legal or tax advice.

Input parameters:

- `assumptions` (object): Override an adjustable assumption the country declares, e.g. {"basic_share_of_gross": 0.6}. See `assumptions` in an employer_cost answer.
- `country` (string, required): ISO 3166-1 alpha-2 code ("DE") or country name ("Germany")
- `eor_fee_usd_month` (number): An EOR fee to add to the employee cost, in USD per employee per month, as the user gives it
- `hours_per_day` (number): Hours per working day
- `paid_leave_days` (number): Paid leave days a year. Omit to use the country's statutory minimum.
- `payments_per_year` (number): With salary_period "month" only: the total number of monthly salaries the contract pays in a year, statutory ones included (e.g. 14). Omit to use the statutory number of the country.
- `public_holidays` (number): Public holidays falling on weekdays. Omit to use the number recorded for the country.
- `salary` (number): Gross salary, a year unless salary_period is "month". Omit to use the country's example salary.
- `salary_currency` (string): Currency of `salary`: USD, or the local currency of the country
- `salary_period` (string): Whether the salary is a year (default) or a month. Pass a monthly salary as the user gives it, with "month": the statutory number of monthly payments of the country (13th, 14th month) is applied, see…
- `working_days` (number): Working days a year, replacing the default calculation

Output parameters:

- `annual_cost` (object)
- `caveats` (array)
- `country` (object)
- `employer_cost` (object)
- `equivalent_rate` (object)
- `hours_per_day`
- `meta` (object)
- `salary` (object)
- `salary_basis` (object)
- `summary` (string)
- `working_days` (object)

### `scheduled_changes` (~189 tokens)

Scheduled employer contribution changes

Use this when the user asks what is changing in a country's statutory employer contributions: new rates, ceilings, floors or thresholds, their effective dates, or measures announced in a budget (e.g. "employer contribution changes in Ireland in 2027", "hausse des cotisations patronales en Allemagne l'an prochain"). Each change comes with its status (enacted, or announced in a budget and not yet enacted), whether the date is stated in the source or deduced from it, and the source with a word-for-word quote and its reading date. A country whose changes are not tracked yet is answered "not yet tracked", which does not mean that nothing is scheduled. Data snapshot 2026-10-22. Cost comparison, not legal or tax advice.

Input parameters:

- `country` (string, required): ISO 3166-1 alpha-2 code ("DE") or country name ("Germany")

Output parameters:

- `changes` (array)
- `country` (object)
- `coverage` (string)
- `meta` (object)
- `pending` (array)
- `reading`
- `researched_on`
- `summary` (string)
- `tracking` (string)

### `cost_next_year` (~430 tokens)

Employer cost at a future date

Use this when the user budgets an employee for next year or a future date and asks how the statutory employer cost will move (e.g. "what will this hire in Brazil cost the employer in January 2027?"). Returns the cost today and at that date (by default 1 January of next year), at the same gross salary and exchange rate, applying only the enacted dated changes recorded for the country; changes announced in a budget come in a separate, flagged variant, and dates deduced from a source are flagged. A country whose changes are not tracked yet gets today's cost and "not yet tracked", never a projection. Amounts given in the local currency come back in it, with the USD in brackets. Data snapshot 2026-10-22. Cost comparison, not legal or tax advice.

Input parameters:

- `assumptions` (object): Override an adjustable assumption the country declares, e.g. {"basic_share_of_gross": 0.6}. See `assumptions` in an employer_cost answer.
- `country` (string, required): ISO 3166-1 alpha-2 code ("DE") or country name ("Germany")
- `on_date` (string): Date of the projection, YYYY-MM-DD. Omit for 1 January of the year after the data snapshot.
- `payments_per_year` (number): With salary_period "month" only: the total number of monthly salaries the contract pays in a year, statutory ones included (e.g. 14). Omit to use the statutory number of the country.
- `salary` (number): Gross salary, a year unless salary_period is "month". Omit to use the country's example salary.
- `salary_currency` (string): Currency of `salary`: USD, or the local currency of the country
- `salary_period` (string): Whether the salary is a year (default) or a month. Pass a monthly salary as the user gives it, with "month": the statutory number of monthly payments of the country (13th, 14th month) is applied, see…

Output parameters:

- `country` (object)
- `coverage` (string)
- `current` (object)
- `flags` (array)
- `meta` (object)
- `on_date`
- `projected`
- `reading`
- `researched_on`
- `salary` (object)
- `salary_basis` (object)
- `summary` (string)
- `tracking` (string)
- `with_budget_announced` (object)

### `show_ledger` (~411 tokens)

Show the employer cost ledger

Use this when the user wants to see, display, keep, copy or export the line-by-line employer cost of one employee in a country as a table or card (e.g. "show me the breakdown", "display it as a table", "affiche le détail des cotisations patronales"). It computes the figures itself: call it directly, with no data tool first, or after employer_cost with the arguments employer_cost returns in `widget`. Displays the salary basis (a monthly salary times the statutory number of payments), one row per statutory line with its rate, base, floor or ceiling, source and check date, a monthly or annual view, a salary field to recalculate, and a CSV copy. Takes the same country, salary and assumptions as employer_cost. Data snapshot 2026-10-22. Cost comparison, not legal or tax advice.

Input parameters:

- `assumptions` (object): Override an adjustable assumption the country declares, e.g. {"basic_share_of_gross": 0.6}. See `assumptions` in an employer_cost answer.
- `country` (string, required): ISO 3166-1 alpha-2 code ("DE") or country name ("Germany")
- `payments_per_year` (number): With salary_period "month" only: the total number of monthly salaries the contract pays in a year, statutory ones included (e.g. 14). Omit to use the statutory number of the country.
- `salary` (number): Gross salary, a year unless salary_period is "month". Omit to use the country's example salary.
- `salary_currency` (string): Currency of `salary`: USD, or the local currency of the country
- `salary_period` (string): Whether the salary is a year (default) or a month. Pass a monthly salary as the user gives it, with "month": the statutory number of monthly payments of the country (13th, 14th month) is applied, see…

Output parameters:

- `assumptions` (array)
- `country` (object)
- `employer_cost` (object)
- `included_in_gross_salary` (object)
- `lines` (array)
- `meta` (object)
- `not_in_total` (array)
- `salary` (object)
- `salary_basis` (object)
- `salary_input` (object)
- `scenario_url`
- `summary` (string)

### `show_compare` (~168 tokens)

Show the job offer comparison

Use this when the user wants the employer cost of job offers or salaries in 2 to 6 countries shown or displayed as a table they can read at a glance: for each country, the gross salary, statutory employer charges, total employer cost, difference and ratio to the smallest total, and contribution ceilings reached. It computes the figures itself: call it directly, with no data tool first, or after compare_offers or compare_countries with the arguments they return in `widget`. Inline up to 3 countries, full screen above. Takes the same offers as compare_offers. Data snapshot 2026-10-22. Cost comparison, not legal or tax advice.

Input parameters:

- `offers` (array, required): One offer per country, 2 to 6 countries, each with its own salary

Output parameters:

- `display` (string)
- `meta` (object)
- `offers` (array)
- `reading`
- `smallest_total` (object)
- `summary` (string)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/eorscope-eorscope-mcp/mcp#diagnostics

## Score history

- 2026-10-25: 80
- 2026-10-24: 79
- 2026-10-23: 79
- 2026-10-22: 79
- 2026-10-21: 78
- 2026-10-20: 78
- 2026-10-19: 77
- 2026-10-18: 77
- 2026-10-17: 76
- 2026-10-16: 76
- 2026-10-15: 75
- 2026-10-14: 75
- 2026-10-13: 74
- 2026-10-12: 74
- 2026-10-11: 73

## Common questions

### What is the EOR Scope MCP server?

EOR Scope is an MCP server listed in the public MCP registry as io.github.eorscope/eorscope-mcp. Statutory employer cost by country, before any Employer of Record (EOR) fee. This page covers its hosted endpoint (https://mcp.eorscope.com/mcp).

### Is the EOR Scope MCP server safe to use?

EOR Scope scores 80 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the EOR Scope MCP server expose?

EOR Scope exposes 14 tools: list_countries, employer_cost, compare_countries, max_salary_for_budget, employment_terms, and 9 more. Their descriptions and schemas cost roughly 4,781 tokens of context every time the server is loaded.

### Does the EOR Scope MCP server require authentication?

No. We connected to EOR Scope without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the EOR Scope MCP server still maintained?

EOR Scope is still listed as active in the MCP registry. We last reached this channel on 25 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://mcp.eorscope.com/mcp
- Repository: https://github.com/eorscope/eorscope-mcp
- Website: https://eorscope.com/eor-cost-calculator/
- Changelog RSS feed: https://verifymcp.io/servers/eorscope-eorscope-mcp/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/eorscope-eorscope-mcp/mcp.json
- HTML version of this page: https://verifymcp.io/servers/eorscope-eorscope-mcp/mcp
