Connect your AI Agents to Deel in minutes

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.

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}
11Open 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}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 }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}FAQs on using Merge's Deel MCP server
FAQs on using Merge's Deel MCP server
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

























