Connect your AI Agents to Salesforce Data 360 in minutes

Merge lets you securely connect your agents to Salesforce Data 360 and thousands of tools instantly

Available tools

list_activation_targets

List activation targets (destinations segments are published to) with limit/offset paging. Returns each target's ID and platform type; pass the ID to getactivationtarget, updateactivationtarget, or create_activation.

get_activation_target

Get one activation target's configuration by ID. Use listactivationtargets to find target IDs.

create_activation_target

Create an activation target. External targets must reference an existing connection: use listconnections to find its ID. Returns the new target's ID for createactivation. The API defines no delete for activation targets (DELETE returns 405), so create them sparingly.

update_activation_target

Update an activation target by ID (PATCH; only given keys change). Changes can affect downstream delivery. Use listactivationtargets to find the target ID; updating by name can fail.

list_activations

List activations (segment-to-target publications) with limit/offset paging, optionally in one data space. Returns each activation's ID, segment, and target; pass the ID to getactivation, updateactivation, or delete_activation.

get_activation

Get one activation's full definition by ID. Use list_activations to find activation IDs.

create_activation

Create an activation that publishes a published segment's members to an activation target, by name (segmentApiName, activationTargetName). One activation per segment and target. Use listsegments and listactivationtargets. It starts PROCESSING. Remove it with deleteactivation.

update_activation

Replace an activation's definition (PUT: full replace, so omitted fields are cleared). Call getactivation first and send the complete body. Refused while the activation is PROCESSING; wait for ACTIVE. Use listactivations to find the activation ID.

delete_activation

Permanently delete an activation so the segment stops publishing to its target. The segment and target are kept. Use list_activations to find the activation ID.

list_calculated_insights

List calculated insights (CIs) with limit/offset paging, optionally in one data space. Returns each CI's apiName and calculatedInsightStatus; segments need ACTIVE CIs. Pass apiName to getcalculatedinsight. To read a CI's computed rows, use querycalculatedinsight.

get_calculated_insight

Get one calculated insight's definition: SQL expression, status, schedule, and derived dimensions and measures. Use listcalculatedinsights to find the cio API name. For run status use getcalculatedinsightstatus; for result rows use querycalculated_insight.

create_calculated_insight

Create a calculated insight from ANSI SQL over DMOs. apiname must end with cio, and COUNT(DISTINCT) is not supported. Call validatecalculatedinsight first, and use listdatamodelobjects for DMO and field names. Returns the CI in PROCESSING status. Remove it with deletecalculatedinsight.

validate_calculated_insight

Check a calculated insight's SQL expression without saving it. Call this before createcalculatedinsight or updatecalculatedinsight to catch SQL errors. COUNT(DISTINCT) is not supported. Some orgs return APIDISABLEDFOR_ORG; then validate by creating the CI instead.

update_calculated_insight

Update a calculated insight's display name, description, SQL expression, or schedule (PATCH; only given fields change). Changing the expression triggers recompilation; run validatecalculatedinsight first. Use listcalculatedinsights to find the cio API name.

delete_calculated_insight

Permanently delete a calculated insight. Segments and activations that use it will break, so check listsegments first. Use listcalculatedinsights to find the _cio API name. A follow-up get may briefly show status DELETING.

enable_calculated_insight

Enable a calculated insight so it refreshes and can be used by segments and activations. Inverse of disablecalculatedinsight. Use listcalculatedinsights to find the cio API name.

disable_calculated_insight

Disable a calculated insight so it stops refreshing; dependent segments and activations may be affected. Inverse of enablecalculatedinsight. Use listcalculatedinsights to find the cio API name.

run_calculated_insight

Start a calculation run of a calculated insight now, consuming compute and updating downstream results. Check progress with getcalculatedinsightstatus. Use listcalculatedinsights to find the _cio API name. The API defines no inverse; a started run cannot be cancelled.

get_calculated_insight_status

Get the current run status of a calculated insight (POST refresh-status; changes nothing). Use after runcalculatedinsight to see whether the run finished. Use listcalculatedinsights to find the cio API name.

list_connectors

List the connector types in the org's Data 360 catalog (e.g. SalesforceDotCom, SNOWFLAKE). Call this first to get the connectortype that listconnections and getconnection require, or a name for getconnector.

get_connector

Get one connector type's metadata, including the parameter and credential names its connections use. Use list_connectors to find connector names.

list_connections

List configured connections of one connector type (required; use listconnectors), filterable by devname, label, organizationid and data space, with offset pagination. Connections are created and edited in Data 360 Setup; this connector only reads them. Returns IDs for getconnection.

get_connection

Get one connection by ID. Requires its connectortype. Use listconnections to find connection IDs and list_connectors for connector types.

list_connection_schemas

List database schemas available through a database connection (e.g. Snowflake), scoped by advancedattributes such as the database. Read-only. Use listconnections to find the connection ID, then listconnectionobjects to list tables in a schema.

list_connection_objects

List source objects (tables) available through a connection. Read-only. For database connectors scope with advancedattributes {database, schema} to avoid huge results. Use listconnections for the connection ID; pass an object name to getconnectionobject_fields.

get_connection_object_fields

Describe the fields (columns, types, keys) of one source object in a connection. Read-only. Use listconnections for the connection ID and listconnection_objects for the object name.

list_data_action_targets

List data action targets (event destinations such as webhooks) with offset pagination. Returns each target's apiname: pass it to get/update/deletedataactiontarget and in createdataaction dataactiontarget_names (targets carry no id). These are not segment activation targets.

get_data_action_target

Get one data action target by ID, including its type, status and config. Use listdataaction_targets to find target IDs.

create_data_action_target

Create a data action target, the destination (e.g. a WebHook endpoint) that data actions send events to. Returns status PROCESSING, then ACTIVE. Use listdataspaces for the data space. Undo with deletedataaction_target.

update_data_action_target

Update a data action target's label and/or config. Only the fields you pass change: the tool reads the target and sends its full definition, as the API requires. Changing the endpoint affects every data action using it. Use listdataaction_targets to find the target API name.

delete_data_action_target

Permanently delete a data action target. First call deletedataaction for every action using it. Confirm removal with listdataaction_targets (a follow-up GET may error instead of returning not found).

list_data_actions

List data actions (event-triggered rules that send DMO changes to data action targets) with offset pagination. Returns each action's developerName for getdataaction.

get_data_action

Get one data action by developer name, including its sources, conditions and targets. Use listdataactions to find developer names.

create_data_action

Create a data action that sends events when source DMO records change. It must reference an existing target: use listdataactiontargets (or createdataactiontarget) for target API names, listdatamodelobjects for sources, listdataspaces for the data space. Undo with deletedata_action.

delete_data_action

Permanently and irreversibly delete a data action by developer name. Delete a data action before the data action target it uses (deletedataactiontarget). Use listdata_actions to find developer names.

list_data_model_objects

List data model objects (DMOs, API names ending dlm) with offset paging, filtered by category and data space and sortable by orderby. Items omit field lists unless includefields is true; use getdatamodelobject for one DMO's schema. Use listdata_spaces for dataspace names.

get_data_model_object

Get one DMO's full schema (fields, category, data space) by its dlm API name. Use listdatamodelobjects to find names. Use this before createdmo_mapping to get exact target field names.

create_data_model_object

Create a custom DMO. Pass name WITHOUT the dlm suffix (the platform appends it; the result's name ends dlm). Needs label, category and fields with at least one primary key; ENGAGEMENT needs eventdatetimefieldname. Use listdataspaces for dataspace. Inverse: deletedatamodel_object.

update_data_model_object

Update a DMO (PATCH, partial): label, description, or ADD fields (additive; fields cannot be removed this way). Changes can affect mappings, calculated insights and segments. Use listdatamodelobjects to find the _dlm name.

delete_data_model_object

Permanently delete a DMO. Cascades to dependent objects, including its DMO mappings. Use listdatamodelobjects to find the _dlm name; check segments and calculated insights that use it first.

list_data_lake_objects

List data lake objects (DLOs, API names ending dll) with offset paging, filtered by category and data space. Items omit field lists unless includefields is true; use getdatalakeobject for one DLO's fields. Use listdataspaces for dataspace names.

get_data_lake_object

Get one DLO's fields and metadata by its dll API name. Use listdatalakeobjects to find names. Use this before createdmo_mapping to get exact source field names.

create_data_lake_object

Create a DLO directly (data streams usually create their DLO automatically; prefer createdatastream). Needs name (usually ending dll), label, category and fields; field names cannot start with 'KQ'. Use listdataspaces for dataspace. Inverse: deletedatalakeobject.

update_data_lake_object

Add fields to a DLO (PATCH). The API does not support relabeling a DLO. Schema changes can affect data streams, mappings and search indexes. Use listdatalakeobjects to find the _dll name.

delete_data_lake_object

Permanently delete a DLO and its stored data. Use listdatalakeobjects to find the dll name. To remove a stream together with its DLO use deletedatastream with shoulddeletedatalake_object=true.

list_data_spaces

List the org's data spaces with limit/offset paging. Each item's name (e.g. 'default') is the value every other tool's dataspace parameter takes, so call this first when a task targets a non-default data space.

get_data_space

Get one data space's details by API name. Use listdataspaces to find names.

create_data_space

Create a data space (an isolated admin workspace) from a label; the platform derives its API name, returned as name (the dataspace value for other tools). Orgs cap data spaces (developer orgs: 1). Then use adddataspacemembers. Inverse: deletedata_space.

update_data_space

Update a data space's label or description (PATCH; only given fields change). Use listdataspaces to find the name. At least one of label or description is required.

list_data_space_members

List the data objects that belong to a data space, with their row filters. Use listdataspaces to find the data space name. Member names feed removedataspace_members.

add_data_space_members

Add data objects (DLO/DMO API names from listdatalakeobjects or listdatamodelobjects) to a data space, optionally with row filters. Additive: existing members are kept. Inverse: removedataspace_members.

remove_data_space_members

Remove up to 10 members from a data space by name. Use listdataspacemembers to find member names. The objects themselves are not deleted. Inverse: adddataspacemembers.

delete_data_space

Permanently delete a data space and its contents; this cannot be undone. Remove its members first (listdataspacemembers, then removedataspacemembers) and move or delete objects that other data spaces need. Use listdataspaces to find the name; never delete 'default'.

list_data_streams

List data streams (ingestion pipelines into DLOs) with offset paging, filtered by category and data space. Each item's name feeds get/update/delete/rundatastream. Use listdataspaces for dataspace names.

get_data_stream

Get a data stream's full configuration (connector, DLO, refresh settings) by name. Use listdatastreams to find names.

create_data_stream

Create a data stream and its DLO. Sources: Salesforce CRM (datastreamtype SFDC, connectorType SalesforceDotCom), AWS S3, Snowflake, third-party (connectorType DataConnector), other connectors. Use listconnections for the connection name. Then createdmomapping. Inverse: deletedatastream.

update_data_stream

Update a data stream (PATCH; only given fields are sent): label, refreshconfig, or other keys. Changes apply to future runs. Use listdatastreams to find the name; do not resend read-only fields from getdata_stream.

delete_data_stream

Delete a data stream. shoulddeletedatalakeobject chooses whether its DLO and data are deleted too. Use listdatastreams to find the name. Deletion is eventually consistent; a GET right after may still return it.

run_data_stream

Manually trigger ingestion for a data stream. Works for S3, Snowflake, file upload and other non-CRM streams; Salesforce CRM streams cannot be run via the API. Use listdatastreams to find the name. The API defines no inverse (a started run cannot be cancelled).

list_data_transforms

List data transforms (batch or streaming DLO-to-DLO transforms) with offset pagination. Definitions are omitted to keep results small; use getdatatransform for one transform's full definition.

get_data_transform

Get one data transform by ID or API name, including its full definition and status. Use listdatatransforms to find transforms.

validate_data_transform

Validate (and enrich) a data transform definition without creating it; reports issues such as TARGETDLONOTFOUND. Call this before createdatatransform or updatedatatransform. Use listdatalakeobjects to find source and target DLO names.

create_data_transform

Create a data transform from a definition (STL graph or SQL) that writes to a target DLO. Validate first with validatedatatransform; target DLOs must exist (listdatalakeobjects). Use listdataspaces for the data space. Undo with deletedata_transform.

update_data_transform

Replace a data transform (PUT: a full replace, so send the complete name, label, type and definition; omitted optional fields are cleared). Validate first with validatedatatransform. Use getdatatransform to read the current definition.

delete_data_transform

Permanently delete a data transform. Its output DLO is not deleted. Use listdatatransforms to find the transform ID.

run_data_transform

Run a batch data transform now, rewriting its output DLO; consumes org resources. Use listdatatransforms to find the transform ID. The API defines no inverse; a started run cannot be cancelled here.

get_data_transform_schedule

Get a data transform's run schedule (frequency, interval, time). Use listdatatransforms to find the transform ID; change it with setdatatransform_schedule.

set_data_transform_schedule

Set (replace) a data transform's run schedule, e.g. frequency 'Daily', interval 1, 03:00 in a time zone. Pass frequency 'None' to clear it. Do not copy the time block from getdatatransformschedule back as-is. Use listdata_transforms to find the transform ID.

list_identity_resolutions

List identity resolution rulesets with limit/offset paging, optionally in one data space. Returns each ruleset's ID, label, and profile type; pass the ID to get, update, publish, run, or delete it.

get_identity_resolution

Get one identity resolution ruleset with its match rules (priority order) and reconciliation rules. Use listidentityresolutions to find the ruleset ID.

create_identity_resolution

Create an identity resolution ruleset that merges source profiles into unified profiles. Match rules run in priority order. The DMOs used must already be mapped; use listdatamodelobjects for DMO and field names. Apply it with publishidentityresolution; remove with deleteidentity_resolution.

update_identity_resolution

Update an identity resolution ruleset (PATCH; only given fields change, but matchrules and reconciliationrules replace their whole lists). Changes apply to unified profiles only after publishidentityresolution. Use listidentityresolutions to find the ruleset ID.

delete_identity_resolution

Permanently delete an identity resolution ruleset; unified profiles it produced may be affected. Use listidentityresolutions to find the ruleset ID.

publish_identity_resolution

Retry publishing an identity resolution ruleset whose status is Error (rulesets publish automatically on create/update; the API refuses a retry in any other status). Check status with getidentityresolution. The API defines no inverse (unpublish).

run_identity_resolution

Run an identity resolution ruleset now, consuming compute and updating unified profiles. Use listidentityresolutions to find the ruleset ID. The API defines no inverse; a started run cannot be cancelled.

list_dmo_mappings

List DLO-to-DMO object mappings. Requires at least one filter (an unfiltered list can fail): dmodevelopername (from listdatamodelobjects), dlodevelopername or sourceobjectname (from listdatalakeobjects). Each item's developer_name feeds get/delete and field-mapping tools.

get_dmo_mapping

Get one object mapping's configuration, including its field mappings and their developer names (for deletefieldmapping). Use listdmomappings to find the mapping name.

create_dmo_mapping

Map a DLO to a DMO with field pairs. Call getdatalakeobject and getdatamodelobject first for exact field API names. Returns the mapping; capture developername (auto-generated). The platform adds system field mappings. Inverse: deletedmo_mapping.

add_field_mappings

Add field pairs to an existing object mapping (PATCH). Call getdmomapping first and add only verified field names. If the new pairs are missing from the response, recreate the mapping with the full set. Inverse: deletefieldmapping.

delete_dmo_mapping

Delete an object mapping. Use listdmomappings to find the name. Fails when the DMO is mapped to only one DLO (orphan protection); in that case deletedatamodel_object removes the mapping with the DMO.

delete_field_mapping

Delete one field mapping from an object mapping. Use getdmomapping to find the field mapping's developer name. Do not delete platform system field mappings (DataSourcec, KQ_*).

search_metadata

Natural-language search over Data 360 metadata (DMOs, DLOs, calculated insights), optionally filtered by metadatatypes. Use for discovery when you don't know entity names. A backend index error (e.g. PRISMRUNTIMEERROR msrmetadataindexdlm) means search isn't indexed yet; fall back to listmetadataentities or getmetadata.

get_metadata

Describe one DMO, DLO, or calculated insight by API name: fields, primary keys, relationships. Use before querysql to verify field names. Use listmetadataentities or searchmetadata to find entity names, and listdataspaces for dataspace.

list_metadata_entities

List metadata entities, optionally of one type (DataModelObject, DataLakeObject, CalculatedInsight), in one response. Returns lean name/label/category entries; pass a name to getmetadata for fields. Use searchmetadata instead for natural-language discovery.

get_profile_metadata

List profile-enabled DMOs (e.g. ssotIndividualdlm) with their fields and relationships. Call this first to find the datamodelname, fields, and filter fields for query_profile.

query_profile

Read records from a profile DMO (Individual, Account, or custom) with bracketed filters, a field projection, and limit/offset (orderby required when offset > 0). Use getprofilemetadata to find the datamodelname and field names. Use query_sql for joins or aggregates.

get_data_graph_metadata

List the org's data graphs and their schema. Call this first to find the datagraphname for lookupdatagraph and getdatagraph_record.

lookup_data_graph

Look up data graph records by natural key (lookupkeys), bounded by limit; set live=true for a real-time graph. Use getdatagraphmetadata to find datagraphname. Use getdatagraph_record instead when you already have the root record ID.

get_data_graph_record

Get one data graph record by its root record ID, with related records (limit/offset); set live=true for real time. Use getdatagraphmetadata to find datagraphname, and lookupdatagraph or querysql to find record IDs.

get_insight_metadata

List calculated insights with their dimensions and measures. Call this first to find the ciname for querycalculated_insight and which dimensions/measures its rows contain.

query_calculated_insight

Read rows (dimensions and measures) of an existing calculated insight with limit/offset pagination. Use getinsightmetadata to find ciname (ends in cio). Use querysql for custom aggregates.

query_sql

Run a Data 360 SQL SELECT query (not SOQL) and return up to rowlimit rows inline. For SELECT queries only. If done is false or hasmorerows is true, poll getquerystatus and page with getqueryrows using queryid. Verify table/field names with getmetadata or listmetadataentities; use listdata_spaces for dataspace.

get_query_status

Get the status of a query started by querysql: completionstatus, rowcount, and chunkcount. Poll until completionstatus is 'ResultsProduced', then read rows with getqueryrows. Use the queryid returned by query_sql.

get_query_rows

Fetch a page of result rows (limit up to 1000, offset) from a query started by querysql. Use when querysql reported hasmorerows; check getquerystatus first for long-running queries. Use the queryid returned by querysql.

cancel_query

Cancel a running query started by querysql; its results are discarded. Use the queryid returned by querysql. The API defines no inverse: re-run querysql to start the query again.

list_segments

List segments with limit/offset paging, optionally in one data space. Returns each segment's ID, developer name, and segmentStatus. Pass the ID to getsegment, updatesegment, or publishsegment, and the developer name to deletesegment or deactivate_segment.

get_segment

Get one segment by record ID or API name, including its type, DMO, schedule, and segmentStatus (check for ACTIVE before publishing or activating). Use list_segments to find segment IDs and API names.

create_segment

Create a segment on a segmentable DMO. Any calculated insights it uses must be ACTIVE: check with listcalculatedinsights and getinsightmetadata. Use listdatamodelobjects for the DMO name. Returns the segment in PROCESSING status; publish with publishsegment, remove with delete_segment.

update_segment

Update a segment's display name, description, or publish schedule (PATCH). Pass the current segmenttype from getsegment; for Dbt segments the tool resends the current definition, as the API requires. Cannot change SQL. Use list_segments to find the segment.

delete_segment

Permanently delete a segment by its API (developer) name, not its record ID. Irreversible; activations using it stop. Use listsegments to find the developer name. To stop a segment without deleting it, use deactivatesegment.

publish_segment

Publish a segment, starting an asynchronous membership calculation. Wait for getsegment to show the segment is no longer PROCESSING first. Use listsegments to find the segment ID. Inverse: deactivate_segment.

deactivate_segment

Deactivate a segment by its API (developer) name, not its record ID, so it stops publishing. Inverse of publishsegment. Use listsegments to find the developer name. Fails while the segment is still PROCESSING.

validate_credential

Validate Salesforce Data 360 credentials by listing the org's data spaces. Returns success and a message. Use this to confirm the instance domain and app credentials are correct and that Data 360 is provisioned on the org.

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 Salesforce Data 360  MCP server

FAQs on using Merge's Salesforce Data 360  MCP server

Explore other MCP servers built and managed by Merge

pubmed
PubMed
pylon
Pylon
quartr
Quartr
quickbooks_online
QuickBooks Online
ramp
Ramp
readme
ReadMe
render
Render
reo
Reo.dev
rootly
Rootly
sabre
Sabre
salesforce
Salesforce
salesforce_marketing_cloud
Salesforce Marketing Cloud
sanity
Sanity
sapsf
SAP SuccessFactors
sendgrid
SendGrid
sentry
Sentry
servicenow
ServiceNow
sharepoint
SharePoint
sharepoint_gcc
SharePoint GCC High
shopify
Shopify
sigma_computing
Sigma Computing
slack
Slack
slackbot
Slackbot
smartadvocate
SmartAdvocate

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