
Salesforce
io.github.mindstonePublished by GitHub account mindstonev0.2.6Updated Nov 7, 2026
Salesforce CRM MCP server: accounts, contacts, opportunities, leads, tasks, and custom objects
Overview
Local npm MCP server that gives an assistant read and write access to Salesforce CRM records such as accounts, contacts, opportunities, leads and tasks.
- What you can do
- Connect, list and disconnect Salesforce accounts via OAuth
- Read, create and update accounts, contacts, opportunities, leads, tasks, cases and events
- Convert leads into accounts and contacts, and create notes attached to records
- Search across objects and run existing Salesforce reports
- Run raw SOQL queries, describe objects and list available objects
- Create, update and query any Salesforce record through generic CRUD tools
- When to use it
- Useful when a stdio MCP host needs a locally run CRM connector for everyday sales work, such as finding an account, creating an opportunity and adding a follow-up task from one natural-language request, rather than a Salesforce-hosted endpoint.
- Requirements
- Node.js 20+ and npm; runs locally via npx. Either a Salesforce Connected App (SALESFORCE_CLIENT_ID and SALESFORCE_CLIENT_SECRET) for the OAuth flow, or a valid SALESFORCE_ACCESS_TOKEN plus SALESFORCE_INSTANCE_URL for manual token mode. Optional settings include SALESFORCE_SANDBOX, SALESFORCE_CONFIG_DIR, SALESFORCE_OAUTH_PORT and SALESFORCE_OAUTH_SCOPES. Network access to Salesforce is required.
Installation
In SourceWeft
- Open Salesforce in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
@mindstone/mcp-server-salesforce
[npm version] [License: FSL-1.1-MIT]
Salesforce CRM MCP server — accounts, contacts, opportunities, leads, tasks, users, and custom objects via the Salesforce API.
Best when an MCP host needs a local, install-and-run CRM connector for everyday sales work rather than a Salesforce-hosted endpoint.
Status
- Version: 0.2.6 · npm
- Auth: OAuth (local 127.0.0.1 callback) or static access token (
SALESFORCE_CLIENT_SECRET,SALESFORCE_ACCESS_TOKEN) - Tools: 37 (accounts, contacts, opportunities, leads, tasks, cases, events, search, notes, campaigns, reports, query)
- Surface: cloud-api
- Machine-readable:
STATUS.json
Why this exists
Salesforce's own MCP options are the right starting point for many teams. This package is for teams that want a normal npm MCP server they can run locally in any stdio host.
It gives an assistant focused access to the CRM work people actually ask for: finding accounts and contacts, updating leads, creating opportunities and tasks, running CRM searches, and working with custom objects. The benefit is a short path from a natural-language sales request to the right Salesforce records, with write actions kept visible to the host.
Example interaction
"Find Acme Corp in Salesforce, create a Q3 expansion opportunity for $75,000, and add a follow-up task for next Friday."
Tools the host calls:
salesforce_get_accounts— searches accounts by name and returns the matching account ID.salesforce_create_opportunity— creates the opportunity against that account.salesforce_create_task— adds a follow-up task related to the new opportunity.
Response (trimmed):
Requirements
- Node.js 20+
- npm
- A Salesforce Connected App for the OAuth path, or a valid access token plus instance URL for manual-token mode.
One-click install
[Add to Cursor] [Add to VS Code] [Add to VS Code Insiders]
After clicking the button, your host will prompt you to fill: SALESFORCE_CLIENT_ID, SALESFORCE_CLIENT_SECRET, SALESFORCE_ACCESS_TOKEN, SALESFORCE_CONFIG_DIR, SALESFORCE_OAUTH_PORT.
Manual config for Claude Desktop / Claude Code / Goose / Continue.dev (Salesforce)
Quick Start
Install & build
npx
Local
Configuration
OAuth (Recommended)
Set these environment variables:
SALESFORCE_CLIENT_ID— Your Salesforce Connected App client IDSALESFORCE_CLIENT_SECRET— Your Salesforce Connected App client secretSALESFORCE_SANDBOX— Set to"true"for sandbox environments (optional)
Then call salesforce_connect_account to start the OAuth flow.
Manual Token
SALESFORCE_ACCESS_TOKEN— A valid Salesforce access tokenSALESFORCE_INSTANCE_URL— Your Salesforce instance URL (e.g.,https://mycompany.my.salesforce.com)
Additional Options
SALESFORCE_CONFIG_DIR— Custom config directory (default:~/.mcp/salesforce)SALESFORCE_OAUTH_PORT— OAuth callback port (0= OS-assigned; default:0)SALESFORCE_OAUTH_SCOPES— Space-separated OAuth scopes. Leave unset to use the connector default.
Available Tools (37)
Account Management
salesforce_connect_account— Connect a Salesforce account via OAuthsalesforce_list_connected_accounts— List connected accountssalesforce_disconnect_account— Disconnect an account
CRM Accounts
salesforce_get_accounts— Get CRM accounts with filterssalesforce_create_account— Create a CRM accountsalesforce_update_account— Update a CRM account
Contacts
salesforce_get_contacts— Get contacts with filterssalesforce_create_contact— Create a contactsalesforce_update_contact— Update a contact
Opportunities
salesforce_get_opportunities— Get opportunities with filterssalesforce_create_opportunity— Create an opportunitysalesforce_update_opportunity— Update an opportunity
Leads
salesforce_get_leads— Get leads with filterssalesforce_create_lead— Create a leadsalesforce_convert_lead— Convert a lead to Account + Contactsalesforce_update_lead— Update a lead
Tasks
salesforce_get_tasks— Get tasks with filterssalesforce_create_task— Create a tasksalesforce_update_task— Update a task
Cases
salesforce_get_cases— Get support cases with filterssalesforce_create_case— Create a support casesalesforce_update_case— Update a support case
Events
salesforce_get_events— Get calendar events with filterssalesforce_create_event— Create a calendar event
Search
salesforce_search— Cross-object full-text search (SOSL); the response'struncatedflag tells you whether more matches exist beyond the limit
Notes
salesforce_get_notes— Get notes attached to a recordsalesforce_create_note— Create a note, optionally attached to a record (a failed attach rolls the note back, or reports the orphaned note ID)
Campaigns
salesforce_get_campaigns— Get marketing campaigns with filterssalesforce_get_campaign_members— Get leads/contacts in a campaign
Reports
salesforce_run_report— Run an existing Salesforce report (Analytics REST API)
Users
salesforce_get_users— Get Salesforce users
Query & Schema
salesforce_query— Execute raw SOQL queriessalesforce_describe_object— Get object metadata and fieldssalesforce_list_objects— List available Salesforce objects
Generic CRUD
salesforce_create_record— Create any Salesforce recordsalesforce_update_record— Update any Salesforce recordsalesforce_get_records— Query any Salesforce object
Security notes
- The standalone OAuth callback server binds to
127.0.0.1; it does not honour environment overrides that would expose the callback beyond loopback. - OAuth credentials are stored under
SALESFORCE_CONFIG_DIR(default~/.mcp/salesforce) with restrictive directory and file permissions. - Write and disconnect tools are marked so capable hosts can ask for confirmation before changing Salesforce data.
- SOQL helper paths escape backslashes and apostrophes. Filters treat
%and_literally, including theLIKEoperator insalesforce_get_records. SOSL searches escape reserved characters, including apostrophes. Insalesforce_get_records, dates (2026-01-31), datetimes with a time zone (2026-01-31T09:00:00Z) and JSONnullare sent unquoted: use dates for date fields and datetimes for datetime fields such asCreatedDate. Use JSONnull, not the string"null", with=or!=to match empty fields. For text that looks like a date, usesalesforce_query. - Raw SOQL queries strip comments without changing string literals and cap row or grouped results at 200. Ungrouped aggregates receive no generated LIMIT: an explicit
COUNT()limit is preserved to bound the count, while limits on other ungrouped aggregates are removed because Salesforce rejects them.FOR VIEWandFOR REFERENCEstay after LIMIT and OFFSET. - Read fields and generic filter fields accept relationship paths such as
Owner.Name; write field keys must be single API names. - Session expiry is recognized by Salesforce's error code as well as its message. A refused expired or revoked refresh token asks you to reconnect and clears the cached connection, leaving the token file unchanged. A failed save of a renewed sign-in returns
TOKEN_SAVE_FAILEDwithout running the request; saving is retried on the next call. If that save still fails, the failure is logged and the request runs, but a restart may require reconnecting. Invalid field, invalid object and malformed query errors include recovery hints; vendor messages remain wrapped as untrusted content. When Salesforce refuses a field, the error can also includefield_suggestions: up to three real field names from that object. These are possible matches, not confirmed replacements, because the field may be hidden from this user. salesforce_get_notesreads up to 150 linked documents before fetching the linked notes, returns an empty result when no links exist, and addstruncated: truewhen it reaches 150, because linked files use up that allowance and notes may be missing. The note result limit remains 200 (default 50).- Record text returned by read tools is wrapped in
<untrusted-content>envelopes so Salesforce-authored field values are presented to the model as data, not instructions. salesforce_convert_leadreports a conversion as failed when Salesforce rejects it at the record level (e.g. a validation rule), instead of claiming success; the org-authored error detail is enveloped the same way.
Licence
FSL-1.1-MIT — Functional Source License, Version 1.1, with MIT future licence. The software converts to MIT licence on 2030-04-08.
Source: connectors/salesforce/README.md at commit 3ae4aa1
Tools
0Version history
5- v0.2.6LatestNov 7, 2026
- v0.2.5Nov 3, 2026
- v0.2.4Nov 1, 2026
- v0.2.3Sep 29, 2026
- v0.2.2Sep 16, 2026
Score
40% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Declare a license in the repository or the registry entry.