
List all options for a SELECT or MULTISELECT attribute on a Unify object. Use listattributes to find valid attribute names.
Get a single option from a SELECT or MULTISELECT attribute on a Unify object. Use listattribute_options to find valid option names.
Create a new option for a SELECT or MULTISELECT attribute on a Unify object. The apiname is permanent. Use list_attributes to confirm the attribute type before adding options.
Update the display name of an attribute option. The apiname cannot be changed. Use listattribute_options to find valid option names.
Delete an option from a SELECT or MULTISELECT attribute permanently. Records with this option value will have it set to null. Use listattribute_options to find valid option names.
List all attributes for a Unify object, including type, required/unique flags, and options for SELECT types. Use list_objects to find valid object names.
Get a single attribute definition for a Unify object by attribute name. Use list_attributes to find valid attribute names.
Create a new attribute on a Unify object. The apiname is permanent. For SELECT/MULTISELECT types, add options with createattributeoption. Use list_objects to find valid object names.
Update an attribute's display name or description. The apiname and type cannot be changed after creation. Use listattributes to find valid attribute names.
Delete an attribute from a Unify object. This permanently removes the attribute and its values from all existing records. Use list_attributes to confirm the attribute name.
Create an async bulk events export job in Unify. Returns the job ID. Poll with geteventsquery until status is 'completed', then retrieve results with geteventsquery_results.
List bulk events query jobs in Unify with cursor pagination. Returns jobs and page_info with a cursor for the next page.
Get the status and details of a Unify bulk events query job by ID. Poll until status is 'completed' or 'failed', then use geteventsquery_results to retrieve the data.
Cancel a running Unify bulk events query job. Use geteventsquery to confirm the job is in a cancellable state before calling this.
Get paginated results from a completed Unify bulk events query job. Returns up to pagesize events (max 2000). Use getevents_query first to confirm status is 'completed'.
List all objects in Unify, including standard built-in objects ('company', 'person', 'opportunity', 'user') and custom objects. No pagination — returns all objects.
Get a Unify object definition by API name (e.g. 'company', 'person', 'opportunity'). Use list_objects to find valid object names.
Create a custom object in Unify. The apiname is permanent and cannot be changed after creation. Use listobjects to check existing names before creating.
Update a Unify object's display name or description. The apiname cannot be changed. Use listobjects to find valid object names.
Delete a custom Unify object and all its records permanently. Standard objects (company, person, opportunity, user) cannot be deleted. Use list_objects to find valid object names.
Create a new record in a Unify object. Standard objects: 'company' requires 'domain'; 'person' requires 'email'; 'opportunity' requires 'name' and 'uniquenesskey'. Use listattributes to see all required fields.
Get a Unify record by object name and record ID (UUID). Use find_record to look up records by attribute values when you don't have the ID.
Update attribute values on an existing Unify record by ID. Only provided attributes are changed; omitted attributes remain unchanged. Use getrecord or findrecord to confirm the ID first.
Delete a Unify record by ID. Permanent — references from other records are set to null, not deleted. Use getrecord or findrecord to confirm the ID before deleting.
Create or update a Unify record based on matching unique attributes. 'match' identifies the record (must include a unique attribute). 'create' is REQUIRED by the API on every call (values used when no match is found; must include the unique attribute). Use 'update' for existing-only values and 'createorupdate' for both.
Find a single Unify record by unique attribute values (e.g. email for person, domain for company). Returns found=false if no match. Use upsert_record to create-or-update in one step.
Validate the Unify API key by listing objects. Returns success and a message.

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}It's an MCP server that lets your agents access data and functionality from Unify via tools. Your agents can invoke these tools to pull intent signals for an account, look up a company's buying stage, enroll a contact in a play, check enrichment data, and more.
Unify doesn't offer an MCP server purpose built for Unify, but you can use one from a third-party platform, like Merge Agent Handler.
The use cases naturally depend on the agent you've built, but here are a few common ones:
Here are some of the most commonly used tools:
list_objects: returns the object types defined in a Unify workspace, including custom objects built on top of companies and contacts. Useful for agents that need to discover the data model before querying recordsfind_record: searches for a record matching a set of filter conditions, like a company domain or a contact's email. Call this when an agent needs to check whether a record already exists before creating oneupsert_record: creates a record if it doesn't exist or updates it if it does, in a single call. Good for workflows that sync account or contact data from another system without a separate lookup stepget_record: retrieves a single record by ID, returning its current attribute values. Helpful when an agent needs the latest state of an account before deciding on a next actioncreate_events_query: kicks off a query against Unify's event data, like intent signals or page visits, scoped to a time window and set of accounts. Use this when an agent needs to detect a signal spike rather than pull a single recordget_events_query_results: fetches the results of a previously submitted events query once it's finished processing. Agents typically call this right after create_events_query to pull the actual signal dataThere are several reasons to use Merge Agent Handler's Unify MCP server over building or maintaining your own:
You can take the following steps:
1. Create or log into your Merge Agent Handler account.
2. Install the Merge CLI by running pipx install merge-api, then run merge configure to link the CLI to your Merge account and merge login to authenticate your session.
3. Register the Agent Handler MCP server with Claude Code by running claude mcp add --transport http agent-handler https://ah-api.merge.dev/mcp, then open Claude Code and run /mcp to confirm agent-handler appears with a connected status.
4. Select agent-handler from the MCP list. This opens a browser window where you select which integrations to authenticate. Choose Unify and complete the auth flow. Merge stores and manages the credentials going forward.
5. Open a Claude Code session and start querying Unify data directly. The first time you use a Unify tool, a Magic Link may appear to complete connector authentication.
If you want to connect Merge Agent Handler's Unify MCP with internal or customer-facing agentic products, you can follow the steps in our docs.
Yes, Merge for Workforce lets your employees connect Claude, ChatGPT, Microsoft Copilot, Cursor, and other MCP-compatible AI tools to Unify without bypassing IT governance.
IT can provision access by role or group via SCIM. A sales development rep, for example, gets Unify access to check an account's latest intent signals, Salesforce to log outreach, and Slack to alert their manager; while a demand generation marketer gets Unify access to monitor signal spikes across target accounts, HubSpot to update campaign audiences, and Google Sheets to track weekly signal reports.
Every tool call an employee's AI makes to Unify is also inspected against your DLP rules and logged to a searchable audit trail, giving security teams full visibility into what data was accessed and by whom.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now