
Salesforce
io.github.mindstone由 GitHub 帳號 mindstone 發布v0.2.6更新於 Nov 7, 2026
Salesforce CRM MCP server: accounts, contacts, opportunities, leads, tasks, and custom objects
概覽
在本機執行的 npm MCP 伺服器,讓助理讀寫 Salesforce CRM 記錄,例如客戶、聯絡人、商機、潛在客戶與任務。
- 可以做什麼
- 透過 OAuth 連接、列出與中斷 Salesforce 帳戶
- 讀取、建立與更新客戶、聯絡人、商機、潛在客戶、任務、個案與事件
- 將潛在客戶轉換為客戶與聯絡人,並建立附加在記錄上的備註
- 跨物件全文搜尋,並執行既有的 Salesforce 報表
- 執行原始 SOQL 查詢、描述物件並列出可用物件
- 透過通用 CRUD 工具建立、更新與查詢任何 Salesforce 記錄
- 適用情境
- 適合需要在本機以 stdio 方式接入 CRM 的宿主,用於日常業務工作,例如用一句自然語言請求找出客戶、建立商機並加上後續任務,而不是使用 Salesforce 託管的端點。
- 執行需求
- 需要 Node.js 20+ 與 npm,透過 npx 在本機執行。OAuth 方式需要 Salesforce Connected App(SALESFORCE_CLIENT_ID 與 SALESFORCE_CLIENT_SECRET);手動權杖方式需要有效的 SALESFORCE_ACCESS_TOKEN 與 SALESFORCE_INSTANCE_URL。選用設定包括 SALESFORCE_SANDBOX、SALESFORCE_CONFIG_DIR、SALESFORCE_OAUTH_PORT 與 SALESFORCE_OAUTH_SCOPES。需要連線至 Salesforce 的網路存取。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Salesforce,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
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.
來源:connectors/salesforce/README.md,提交 3ae4aa1
工具
0版本歷史
5- v0.2.6最新Nov 7, 2026
- v0.2.5Nov 3, 2026
- v0.2.4Nov 1, 2026
- v0.2.3Sep 29, 2026
- v0.2.2Sep 16, 2026
評分
已滿足適用檢查項的 40%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
請在儲存庫或註冊中心條目中宣告授權條款。