
Create a new Salesforce account. Required: Name (must be unique). Use unique account names with timestamps to avoid duplicates. Set OwnerId to assign to another user. Accepts any other standard or custom Account field; call discover_properties('Account') to list them.
Retrieve a Salesforce account by ID with complete details including standard and custom fields. Returns account information such as name, industry, revenue, employee count, addresses, and any custom fields. Use this to fetch full account details before updating or to verify account data. Supports selective field retrieval for performance optimization.
Update an existing Salesforce account with new information. Modify any account fields including name, industry, revenue, employee count, addresses, parent relationship, and custom fields. Only provide fields you want to change - unchanged fields remain as-is. Supports partial updates for efficient data management. Use when account information changes or to enrich account data.
Permanently delete a Salesforce account from the system. This moves the account to the Recycle Bin where it can be restored within 15 days, after which it's permanently deleted. Use with extreme caution - deleting accounts removes all related contacts, opportunities, cases, and activities. This is a destructive operation that impacts multiple objects. Requires delete permissions on Account object.
List Salesforce accounts with automatic field access handling. Dynamically removes inaccessible fields and retries query.
Search Salesforce accounts using text queries across name, website, and phone fields. Automatically handles field access permissions by removing inaccessible fields and retrying. More powerful than list_accounts for finding specific accounts by keywords. Returns ranked results based on relevance.
Create a new Salesforce event. Required: Subject, StartDateTime, EndDateTime (ISO 8601 UTC). Set OwnerId to assign to another user. Accepts any other standard or custom Event field; call discover_properties('Event') to list them.
Get a Salesforce event by ID
Update an existing Salesforce event. Set OwnerId to reassign it. Accepts any other standard or custom Event field; call discover_properties('Event') to list them.
Delete a Salesforce event
List Salesforce events
Log a completed Salesforce activity (call, email, meeting) as a Task. Use activitydate to backdate it, durationseconds or durationminutes for call length (stored on CallDurationInSeconds), and ownerid to assign it to another user. Optionally creates a follow-up task.
Search Salesforce events
Create a new Salesforce case. Required: Subject. Status defaults to New, Priority to Medium. Set OwnerId to assign to another user or queue. Accepts any other standard or custom Case field; call discover_properties('Case') to list them.
Retrieve a Salesforce case by ID with complete details including standard and custom fields. Returns case information such as case number, subject, status, priority, origin, contact/account associations, and any custom fields. Use this to fetch full case details before updating or to verify case data. Supports selective field retrieval for performance optimization.
Update an existing Salesforce case with new information. Modify any case fields including subject, status, priority, type, reason, description, contact/account associations, and custom fields. Only provide fields you want to change - unchanged fields remain as-is. Supports partial updates for efficient case management. Use when case details change or to update case status/priority.
Permanently delete a Salesforce case from the system. This moves the case to the Recycle Bin where it can be restored within 15 days, after which it's permanently deleted. Use with caution - deleting cases removes customer support history and metrics. All related activities, emails, and case comments are also deleted. Requires delete permissions on Case object.
List Salesforce cases with automatic field access handling. Dynamically removes inaccessible fields and retries query. Supports flexible filtering with comparison operators.
Search Salesforce cases using text queries across subject and description fields. Automatically handles field access permissions by removing inaccessible fields and retrying. Returns ranked results based on relevance.
Get comments for a Chatter feed element.
Post comment to Chatter feed element.
Update Chatter comment by ID.
Delete Chatter comment by ID.
Get specific Chatter comment by ID.
Get Chatter feed for news, user, group, or record.
Post to Chatter feed (news, user, group, or record). News feed posts redirect to user-profile endpoint since the news feed is read-only.
Get specific Chatter feed element by ID.
Delete Chatter feed element by ID.
List Chatter groups.
Create new Chatter group.
Get specific Chatter group by ID.
Join Chatter group.
Leave Chatter group.
Get Chatter group members.
Get Chatter user information by ID.
Follow Chatter user.
Unfollow Chatter user.
Get Chatter user followers.
Get Chatter users being followed.
Like Chatter item (feed element or comment).
Unlike Chatter item (feed element or comment).
Create a new Salesforce contact. Required: LastName. Set OwnerId to assign to another user. Accepts any other standard or custom Contact field; call discover_properties('Contact') to list them.
Retrieve a Salesforce contact by ID with complete details including standard and custom fields. Returns contact information such as name, email, phone, account association, title, department, and any custom fields. Use this to fetch full contact details before updating or to verify contact data. Supports selective field retrieval for performance optimization.
Update an existing Salesforce contact with new information. Modify any contact fields including name, email, phone, account association, title, department, address, and custom fields. Only provide fields you want to change - unchanged fields remain as-is. Supports partial updates for efficient data management. Use when contact information changes or to enrich contact data.
Permanently delete a Salesforce contact from the system. This moves the contact to the Recycle Bin where it can be restored within 15 days, after which it's permanently deleted. Use with caution - deleting contacts removes relationship history with accounts and opportunities. All related activities, notes, and attachments are also deleted. Requires delete permissions on Contact object.
List Salesforce contacts with automatic field access handling. Dynamically removes inaccessible fields and retries query. Supports flexible filtering with comparison operators.
Search Salesforce contacts using text queries across name, email, and phone fields. Automatically handles field access permissions by removing inaccessible fields and retrying. Returns ranked results based on relevance.
List all standard and custom objects in the Salesforce org. Use this to discover what objects are available before creating or querying records. Supports filtering by standard/custom objects and searching by name or label. Returns object metadata including capabilities (createable, updateable, deletable, queryable).
Discover the minimal set of required fields for Salesforce write operations. Returns only non-nullable, createable fields without defaults — exactly what you need to create a record. Includes slim picklist values and lookup targets. Use this before any create_* operation. Supports standard and custom objects.
Discover all fields for a Salesforce object with category tags. Returns a flat list of every field once, tagged with: required, custom, picklist, lookup, readonly, recommended. Supports standard and custom objects. Optional before querying or writing, but returns a larger response — use discoverrequiredfieldsforwrites for write pre-flight checks.
Create a new Salesforce record for any SObject — custom objects (c), managed-package objects, or non-exposed standard objects. Pass field values as extra kwargs alongside objecttype. Call listobjects() to find object names, discoverproperties(objecttype) to learn fields. For Account/Contact/Lead/Opportunity/Case/Task/Event/Note prefer their dedicated tools.
Retrieve any Salesforce record by object type and ID. Optionally specify which fields to return. Use discoverproperties(objecttype) to find available field names. For Account/Contact/Lead/Opportunity/Case/Task/Event/Note prefer their dedicated tools.
Update any Salesforce record by object type and ID. Pass only the fields to change — all other fields remain unchanged. Call discoverproperties(objecttype) to find field names and types. For Account/Contact/Lead/Opportunity/Case/Task/Event/Note prefer their dedicated tools.
Delete any Salesforce record by object type and ID. Moves the record to the Recycle Bin (restorable within 15 days). For Account/Contact/Lead/Opportunity/Case/Task/Event/Note prefer their dedicated tools.
Create or update a Salesforce record matched by an external ID field. Creates the record if the external ID is not found; updates it if found. The external ID field must be marked as an External ID in Salesforce setup. Use listobjects() and discoverproperties(object_type) to find field names.
Full-text search across any Salesforce SObject using SOSL. Returns records whose text fields contain the query term. Specify fields to return; defaults to Id + Name. Use discoverproperties(objecttype) to find searchable field names. For Account/Contact/Lead/Opportunity/Case/Task prefer their dedicated search tools.
Create a new Salesforce lead. Required: LastName, Company. Use unique email addresses and company names to avoid duplicate detection issues. Set OwnerId to assign to another user. Accepts any other standard or custom Lead field; call discover_properties('Lead') to list them.
Retrieve a Salesforce lead by ID with complete details including standard and custom fields. Returns lead information such as name, company, email, phone, status, lead source, and any custom fields. Use this to fetch full lead details before updating or to verify lead data. Supports selective field retrieval for performance optimization.
Update an existing Salesforce lead with new information. Modify any lead fields including name, company, contact details, status, rating, and custom fields. Only provide fields you want to change - unchanged fields remain as-is. Supports partial updates for efficient data management. Use after lead qualification or when contact information changes.
Permanently delete a Salesforce lead from the system. This moves the lead to the Recycle Bin where it can be restored within 15 days, after which it's permanently deleted. Use with caution - consider converting leads instead of deleting them to preserve data history. Requires delete permissions on Lead object.
List Salesforce leads with automatic field access handling. Dynamically removes inaccessible fields and retries query. Supports flexible filtering with comparison operators.
Search Salesforce leads using text queries across name, company, email, and phone fields. Automatically handles field access permissions by removing inaccessible fields and retrying. Returns ranked results based on relevance.
Convert a Salesforce lead to Account, Contact, and optionally Opportunity. IMPORTANT: Works best with newly created leads to avoid duplicate detection issues. Use unique account/contact names.
Create a new Salesforce note. Required: Title, Body, ParentId (record to attach to). Accepts any other standard or custom Note field; call discover_properties('Note') to list them.
Get a Salesforce note by ID
Update a Salesforce note. Accepts any standard or custom Note field; call discover_properties('Note') to list them.
List Salesforce notes (both legacy Notes and modern ContentNotes)
Search Salesforce notes (both legacy Notes and modern ContentNotes)
Delete a Salesforce note
Create a new Salesforce opportunity. Required: Name, AccountId, StageName, CloseDate. Use valid AccountId and standard stage names. Set OwnerId to assign to another user. Accepts any other standard or custom Opportunity field; call discover_properties('Opportunity') to list them.
Retrieve a Salesforce opportunity by ID with complete details including standard and custom fields. Returns opportunity information such as name, amount, stage, close date, probability, account association, and any custom fields. Use this to fetch full opportunity details before updating or to verify opportunity data. Supports selective field retrieval for performance optimization.
Permanently delete a Salesforce opportunity. This moves the opportunity to the Recycle Bin where it can be restored within 15 days, after which it's permanently deleted. Use with caution - deleting opportunities removes sales history and forecasting data. All related activities, notes, and opportunity contact roles are also deleted. Requires delete permissions on Opportunity object.
Update an existing Salesforce opportunity with new information. Modify any opportunity fields including name, amount, stage, close date, probability, and custom fields. Only provide fields you want to change - unchanged fields remain as-is. Supports partial updates for efficient data management. Use to progress opportunities through sales stages or update deal information.
List Salesforce opportunities with automatic field access handling. Dynamically removes inaccessible fields and retries query. Supports flexible filtering with comparison operators.
Search Salesforce opportunities with automatic field access handling. Supports text search combined with flexible filtering. Dynamically removes inaccessible fields and retries query.
Execute a raw SOQL query against the Salesforce org. Use for ad-hoc queries, cross-object joins, aggregations, or any query not covered by entity-specific tools. Only SELECT queries are supported. Use listobjects to discover available objects, and discoverproperties to find valid field names. Supports pagination via nextrecordsurl.
Create a new Salesforce task. Required: Subject. Status defaults to Not Started, Priority to Normal. Set OwnerId to assign to another user. Accepts any other standard or custom Task field; call discover_properties('Task') to list them.
Retrieve a Salesforce task by ID with complete details including standard and custom fields. Returns task information such as subject, status, priority, activity date, related contact/lead, related account/opportunity, and any custom fields. Use this to fetch full task details before updating or to verify task data. Supports selective field retrieval for performance optimization.
Update an existing Salesforce task with new information. Modify any task fields including subject, status, priority, activity date, related contacts/accounts, and custom fields. Only provide fields you want to change - unchanged fields remain as-is. Supports partial updates for efficient data management. Use to progress tasks through workflow or update task information.
Permanently delete a Salesforce task from the system. This moves the task to the Recycle Bin where it can be restored within 15 days, after which it's permanently deleted. Use with caution - deleting tasks removes activity history and tracking data. Requires delete permissions on Task object.
List Salesforce tasks with automatic field access handling. Dynamically removes inaccessible fields and retries query. Supports flexible filtering with comparison operators.
Search Salesforce tasks using text queries across subject and description fields. Automatically handles field access permissions by removing inaccessible fields and retrying. Returns ranked results based on relevance.
Validate Salesforce credentials. Verifies authentication by querying the organization. Returns {success, 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}The use cases naturally depend on the agent you’ve built, but here are a few common ones:
Here are some popular MCP tools broken down into categories:
Here are just a few reasons:
To add the Salesforce connector to a Tool Pack in Merge Agent Handler:
1. Log into the Agent Handler dashboard.
2. Create or select a Tool Pack. Navigate to "Tool Packs" in the sidebar, and either create a new Tool Pack or select an existing one.
3. Add the Salesforce connector to your Tool Pack. Simply Click "Add Connector," select Salesforce from the available connectors, and configure the authentication type (Individual or Shared credentials).
4. Customize the connector (optional). Navigate to "Connectors" in the sidebar, and then select the Salesforce connector. From there, you can add new tools, modify existing tool descriptions, or adjust input schemas. You can also edit tool implementations for custom Salesforce actions.
5. Save your changes.The Salesforce connector and its tools should now be available in your Tool Pack.
Yes, Agent Handler for Employees lets your employees connect Claude, ChatGPT, Microsoft Copilot, Cursor, and other MCP-compatible AI tools to Salesforce without bypassing IT governance.
Instead of setting up direct connections with personal credentials that IT can't monitor or revoke, each employee authenticates through Agent Handler and gets individual credentials tied to their identity.
IT also provisions access by role or group via SCIM. A sales rep, for example, gets Salesforce access to manage pipeline, Gong to review call recordings, and Gmail to handle outreach; while a CS manager gets Salesforce access to track accounts, Zendesk to resolve tickets, and Slack to coordinate with the team.
Every tool call an employee's AI makes to Salesforce 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