Connect your AI Agents to Deel in minutes

Merge lets you securely connect your agents to Deel and thousands of tools instantly

Available tools

list_contracts

List contracts in the organization. Filter server-side by type, status, team, legal entity, country, currency, or a title/worker-name search. Supports cursor pagination.

get_contract

Get a single contract by id. Use list_contracts to find valid IDs.

create_contract

Create an independent-contractor (IC) contract. Discover required IDs first: listgroups (teamid), listlegalentities (legalentityid), listjobtitles, listsenioritylevels, listcountries, listcurrencies. Creates only the core IC contract record — contractor invoicing, timesheet submission, milestone execution, invoice adjustments, and payments are out of scope for this connector.

terminate_contract

Terminate a non-EOR contract (independent-contractor, PAYG, etc). Use terminateeorcontract instead for contracts where getcontract's type is 'eor'. Provide either terminatenow=true or completiondate. Use getcontract first to confirm the contract's type before calling this. Use listcontractterminationreasons to find a valid terminationreason_id.

terminate_eor_contract

Initiate offboarding/termination for an EOR (Employer of Record) contract. Use terminatecontract instead for non-EOR contract types. Use getcontract first to confirm the contract's type is 'eor' before calling this. reasondetail must be at least 100 characters. usedtime_off's shape is unconfirmed by Deel — try {} first (sends no fields at all); if rejected, investigate manually.

amend_contract

Amend an existing contract's terms (compensation, job title, seniority, scope of work, etc). Only send the fields that are changing. Use listjobtitles / listsenioritylevels / list_currencies to find valid IDs/codes for those fields.

list_contract_termination_reasons

List contract termination reasons available in this organization. Use for terminatecontract's terminationreason_id.

discover_person_custom_fields

List the custom field definitions available on people profiles in this organization (name, type, and whether required). Use this before getpersoncustom_fields to know which field ids/types to expect.

get_person_custom_fields

Get the custom field values set on one person's profile. Use listpeople to find the worker id, and discoverpersoncustomfields to understand each field's type.

set_person_custom_fields

Set a custom field's value on one person's profile. Use listpeople to find the worker id, and discoverpersoncustomfields to find the customfieldid and its type (which determines the shape of field_value).

list_groups

List groups (teams) in the organization. Use this to find team/group IDs for other tools.

create_group

Create a group (team).

update_group

Rename a group (team). Use list_groups to find valid IDs.

delete_group

Archive (delete) a group by id. Use list_groups to find valid IDs.

list_legal_entities

List legal entities in the organization. Use this to find legalentityid for create_contract.

list_job_titles

List job titles available in this organization. Use for createcontract's jobtitle_id.

list_countries

List countries supported by Deel, with ISO codes. Use for createcontract's countrycode.

list_seniority_levels

List seniority levels available in this organization. Use for createcontract's seniorityid.

list_currencies

List supported currencies (ISO 4217 codes). Use for createcontract's compensationdetails currency.

list_time_off_types

List global time-off category names (e.g. VACATION, SICKLEAVE) for reference only — these are not valid timeofftypeid values. Use listtimeoffpolicies for the policyid and timeofftypeid needed by createtimeoffrequest.

list_working_locations

List working locations configured for this organization. Use for updatepersonworklocation's workinglocation_id.

list_organization_structures

List organization structures (team hierarchies, roles) for this organization.

list_people

List people (HRIS profiles) in the organization. Supports search by name, and filtering by team, hiring status, hiring type, and person status. Use this to find a person's HRIS profile id for other tools (time off, custom fields).

get_person

Get a single person's HRIS profile by id. Use list_people to find valid IDs.

update_person_work_location

Update a person's working location. Use listpeople to find the HRIS profile id, and listworkinglocations to find a valid workinglocation_id.

list_time_off_policies

List the time-off policies available to one HRIS profile (e.g. vacation, sick leave). Use listpeople to find the hrisprofileid, and this tool's output for a policyid when creating a time-off request.

list_time_off_requests

List existing time-off requests for one HRIS profile, with their id, status, and dates. Use listpeople to find the hrisprofileid. This is the tool to call before updatetimeoffrequest, reviewtimeoffrequest, or deletetimeoffrequest — Deel has no other way to discover an existing request's id.

create_time_off_request

Create a time-off request for a person. Use listpeople to find recipientprofileid, and listtimeoffpolicies for policyid and its timeofftypes[].id (timeofftypeid must be an id from there, not a value from listtimeoff_types).

update_time_off_request

Update an existing time-off request. Use listtimeoff_requests to find the request id first.

review_time_off_request

Approve or reject one or more time-off requests in a single call. Use listtimeoff_requests to find pending request IDs. Rejections are permanent.

delete_time_off_request

Cancel (delete) a time-off request by id. Use listtimeoff_requests to find the request id first. This immediately sets the request to CANCELED regardless of its current status and cannot be reversed.

validate_credential

Validate Deel credentials by fetching the authenticated profile. Verifies credentials during setup.

list_webhooks

List webhook subscriptions registered for this organization.

create_webhook

Create a webhook subscription. Use listwebhookevent_types to find valid event names for the events list.

update_webhook

Update a webhook subscription's status (enabled/disabled) or child-org visibility. Use list_webhooks to find valid IDs. To change the URL or events, delete and recreate.

delete_webhook

Delete a webhook subscription by id. Use list_webhooks to find valid IDs.

list_webhook_event_types

List the webhook event types available for subscription. Use for create_webhook's events list.

View all tools by creating a free accountSee more tools

How to set up Merge Agent Handler

In an mcp.json file, add the configuration below, and restart Cursor.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5      "headers": {
6        "Authorization": "Bearer yMt*****"
7      }
8    }
9  }
10}
11
Copy Code

Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.

Make sure Claude is using the Node v20+.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "command": "npx",
5      "args": [
6        "-y",
7        "mcp-remote@latest",
8        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9        "--header",
10        "Authorization: Bearer ${AUTH_TOKEN}"
11      ],
12      "env": {
13        "AUTH_TOKEN": "yMt*****"
14      }
15    }
16  }
17}
Copy Code
Copied!

Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.

Learn more in the official documentation ↗

1{
2    "mcpServers": {
3      "agent-handler": {
4        "command": "npx",
5        "args": [
6          "-y",
7          "mcp-remote@latest",
8          "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9          "--header",
10          "Authorization: Bearer ${AUTH_TOKEN}"
11        ],
12        "env": {
13          "AUTH_TOKEN": "<ah-production-access-key>"
14        }
15      }
16    }
17  }
Copy Code

In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".

You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.

Learn more in the official documentation ↗

1{
2  "inputs": [
3    {
4      "type": "promptString",
5      "id": "agent-handler-auth",
6      "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7      "password": true
8    }
9  ],
10  "servers": {
11    "agent-handler": {
12      "type": "stdio",
13      "command": "npx",
14      "args": [
15        "-y",
16        "mcp-remote@latest",
17        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18        "--header",
19        "Authorization: Bearer ${input:agent-handler-auth}"
20      ]
21    }
22  }
23}
Copy Code

FAQs on using Merge's Deel  MCP server

FAQs on using Merge's Deel  MCP server

Explore other MCP servers built and managed by Merge

calendly
Calendly
canva
Canva
casepeer
CasePeer
clay
Clay
clickup
ClickUp
clinicaltrials
ClinicalTrials.gov
clio
Clio
cloudflare
Cloudflare
cms_coverage
CMS Coverage
coda
Coda
compliancequest
ComplianceQuest
concur
Concur
confluence
Confluence
contentful
Contentful
crustdata
Crustdata
databricks
Databricks
datadog
Datadog
docrio
Docrio
docusign
DocuSign
doordash
DoorDash
dropbox
Dropbox
duffel
Duffel
dynamics365
Dynamics 365 Sales
exa
Exa

Ready to try it out?

Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now