Connect your AI Agents to Dealops in minutes

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

Available tools

list_approval_groups

List the organization's approval groups — who can approve, how many approvals each group needs, and where it sits in the chain. Call this to resolve a group name to the ID that listapprovals takes as usergroupid. Pass the pageinfo cursor to read the next page.

get_approval_group

Fetch one approval group by ID, with its assignees and required-approval count. Use listapprovalgroups to find approval group IDs.

list_approval_rules

List the approval rules that decide which quotes need approval and which group they route to. Read these to explain why a quote triggered approval, or to predict whether one will before calling submitapproval. Pass the pageinfo cursor to read the next page.

list_approval_rule_groups

List approval rule groups — named sets of approval rules, each returned with the rules it contains. Use this for an overview of the approval policy; use listapprovalrules when you want the rules flat. Pass the page_info cursor to read the next page.

list_approvals

List approval requests, newest first, filtered server-side by status, approval group, or quote owner. To narrow by opportunity, filter the results yourself — Dealops ignores an opportunity-name filter. Use listapprovalgroups to find a usergroupid. Pass the pageinfo cursor to read the next page. Use getactive_approval instead when you want the in-flight request for one quote.

get_approval

Fetch one approval request with its full chain: which groups must approve, in what order, and what each approver has done. Use list_approvals to find approval request IDs.

get_active_approval

Return the in-flight approval request for one pricing quote, or null when no approval is active on it. Use this to check whether a quote is already out for approval before calling submitapproval. Use listpricing_quotes to find quote IDs.

submit_approval

Submit an opportunity's pricing quotes for approval, returning one approval request ID per quote. Chain membership comes from the org's approval rules (listapprovalrules). Use getopportunity for the opportunityid and listpricingquotes for quote IDs. Check getactiveapproval first so you do not resubmit a quote already in flight.

recall_approval

Recall a still-pending approval request, withdrawing it from the chain. The API key acts as the user it was issued to, so it can only recall what that user could recall in the app. Use list_approvals with status PENDING to find recallable requests.

list_deal_groups

Find every deal group that contains a given opportunity, most recent first. This is a reverse lookup, not a full listing — an opportunity ID is required and there is no way to list all deal groups. Use get_opportunity to turn a CRM id into the Dealops opportunity ID this takes.

get_deal_group

Fetch one deal group with its opportunity memberships in sequence order. Read this before addopportunitytodealgroup or reorderdealgroup, which both need the current membership list. Use listdealgroups to find deal group IDs.

create_deal_group

Create a deal group — the chain an account's opportunities move through. Returns the new deal group ID for addopportunitytodealgroup. On the engagement-contract model, status must be ACTIVE (anything else is a 400), accountName and crmAccountId apply, and Dealops also creates the backing account and engagement.

update_deal_group

Update a deal group's name, status, or CRM contract link. Only the fields you send change. Set clearcrmcontractid true to unlink the CRM contract, since a null crmContractId means leave it alone. Use listdeal_groups to find deal group IDs.

add_opportunity_to_deal_group

Add an opportunity to a deal group at a given sequence position, and return the group with its updated memberships. Read the group with getdealgroup first to pick a free position. Use get_opportunity to turn a CRM id into the opportunity ID this takes.

reorder_deal_group

Reorder every opportunity in a deal group, assigning sequence 1, 2, 3 in the order given. The list must name all current members — read them with getdealgroup first, since any member you leave out has no defined position afterwards. Use listdealgroups to find deal group IDs.

get_opportunity

Fetch a Dealops opportunity by its CRM record id. Dealops creates the opportunity from the CRM record on first access, so this always returns one for a valid id. Use it to get the Dealops opportunity id that createpricingquote, submit_approval and the deal group tools take. Set refresh true to re-sync from the CRM first.

update_opportunity

Update a Dealops opportunity by its CRM record id. This REPLACES the record rather than patching it: read it with getopportunity first and send every field back with your changes applied, because anything you omit is cleared and a null clears it too. Set updatecrm true to push the change to the CRM as well.

list_products

List the products in the Dealops catalog with their pricing and cost, one page at a time. Call this before building or editing a quote: a quote line's productSpecId must be a productId from here, and these slugs are catalog-specific. Pass the page_info cursor to read the next page.

get_product

Fetch one catalog product by its slug, with its pricing and cost components. Use list_products to find product IDs.

list_pricing_quotes

List the organization's pricing quotes, one page at a time. Returns metadata only — no input or output block — so use getpricingquote to read what a quote actually sells. Dealops supports no filters here, so filter the returned list yourself. Pass the page_info cursor to read the next page.

get_pricing_quote

Fetch one pricing quote in full: its product lines, terms, commitments, and the pricing engine's output. Read this before updatepricingquote so you can copy the shape of the fields you intend to change. Use listpricingquotes to find quote IDs.

create_pricing_quote

Create a pricing quote on an opportunity. pricingSpecId and dataSheetId are organization-specific: copy them from an existing quote on the same opportunity via listpricingquotes or getpricingquote. Use get_opportunity to turn a CRM id into the opportunityV2Id. On an amendment or renewal the new quote is seeded from the prior opportunity's quote.

update_pricing_quote

Update a pricing quote's name, comment, or input. Name and comment patch independently, but input REPLACES the stored input — a partial one is a 400, so read the quote with getpricingquote, change what you need, and send the whole input back. Product lines are keyed by productSpecId: call listproducts for valid slugs. Use listpricing_quotes to find quote IDs.

validate_credential

Validate the Dealops API key with one lightweight read against /whoami, the cheapest call in the API.

get_organization

Return the Dealops organization the API key belongs to. Use this to confirm which organization's catalog, quotes and approvals the other tools will act on. Use validate_credential instead when you only need to know whether the key works.

list_webhook_configs

List the organization's registered webhook endpoints, with their subscribed events and delivery health. Revoked endpoints are not returned. Pass the page_info cursor to read the next page.

get_webhook_config

Fetch one webhook endpoint by ID, with its subscribed events, status, and failure counters. The signing secret is never returned here — only createwebhookconfig and rotatewebhooksecret return it. Use listwebhookconfigs to find webhook config IDs.

create_webhook_config

Register a webhook endpoint for the organization and subscribe it to events. Returns the new config ID and the signing secret — the secret is shown once here and never again, so store it immediately.

update_webhook_config

Update a webhook endpoint's name, URL, event subscription, or status. Sending eventTypes replaces the whole subscription rather than adding to it, so read the current list with getwebhookconfig first. Set status PAUSED to stop deliveries without revoking the endpoint.

delete_webhook_config

Revoke a webhook endpoint. Deliveries stop and the endpoint disappears from listwebhookconfigs. This cannot be undone through the API — register a new endpoint to replace it. Use updatewebhookconfig with status PAUSED instead if you only want to stop deliveries temporarily.

rotate_webhook_secret

Generate a new signing secret for a webhook endpoint. The new secret is returned once here and never again, and the previous one stops working immediately — update your receiver before calling this. Use listwebhookconfigs to find webhook config IDs.

list_webhook_deliveries

List delivery attempts for one webhook endpoint, most recent first, with the HTTP status and error for each. Filter by status to find what is failing. Use listwebhookconfigs to find webhook config IDs.

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 Dealops  MCP server

FAQs on using Merge's Dealops  MCP server

Explore other MCP servers built and managed by Merge

activecampaign
ActiveCampaign
adobe_pdf_services
Adobe PDF Services
ahrefs
Ahrefs
airtable
Airtable
amadeus
Amadeus
amazon_s3
Amazon S3
amplitude
Amplitude
anaplan
Anaplan
apollo
Apollo
arize
Arize
articulate
Articulate Reach 360
asana
Asana
ashby
Ashby
attio
Attio
avalara
Avalara
aviationstack
Aviationstack
axiom
Axiom
bamboohr
BambooHR
basecamp
Basecamp
biorxiv
bioRxiv
bitbucket
Bitbucket
bitly
Bitly
box
Box
brex
Brex

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