SF MCP
Conflict-aware Salesforce MCP preset catalog and plan-bound configuration tool for Pi's native MCP runtime
What it does
Provides an opt-in, product-grouped Salesforce MCP preset catalog over Pi's built-in MCP runtime. The plan-bound sf_mcp family tool lets agents inspect status and conflicts, configure connection/authentication separately from reviewed tool exposure, apply exact native MCP entries through Guardrail, disable unchanged managed entries, and produce human OAuth login handoffs. Pi-native project overrides are recognized without being mistaken for complete manual servers and remain editable through /mcp unless explicitly reset. Interactive Connection & Authentication, Tool Access, and Tool Conflict Review pages replace the former unified editor. Conflict, drift, adoption, and apply workflows stay fail-closed and preserve user-owned configuration.
Start
Open the extension from its primary command:
/sf-mcpOpen its Manager detail or change its package state with:
/sf-pi open sf-mcp
/sf-pi enable sf-mcp
/sf-pi disable sf-mcpSafety notes
- No Salesforce MCP server is configured, connected, launched, or exposed by default; status and plan actions are non-mutating.
- configure.apply and disable.apply require an exact session-bound plan id/hash, unchanged source state, explicit scope, allow_mutation=true, and SF Guardrail approval.
- Pi's built-in MCP extension owns transport, OAuth, tokens, connections, exposure, resources, and readiness; login.handoff never performs human OAuth consent.
- Direct capability overlaps default to native SF Pi owners; complementary profiles use hidden-by-default server exposure with exact approved tools.
- Manual or externally modified native MCP entries are adopted or reset only after an explicit review; malformed configuration is never overwritten.
- Pi-native project overrides preserve the matching global transport and credentials, remain editable through /mcp, and are replaced with full project presets only after an explicit reviewed reset.
- Pi-normalized server-name collisions require the user to choose the one entry to keep.
- Governed presets, including Salesforce DX, Tableau, Tableau Next, Trailhead, Marketing Cloud Engagement, and MuleSoft DX, use hidden server exposure with exact reviewed per-tool policies; newly observed unapproved tools remain unreachable.
- Connection and authentication are configured separately from Tool Access; risky Direct choices still warn and every save retains explicit diff review before persistence.
- Exact tool conflict recommendations change only MCP exposure; SF MCP never disables an SF Pi capability owner automatically.
- Observed additions remain locked hidden until a reviewed preset revision approves them; removed documented tools are unavailable and can be repaired to Hidden on unchanged managed entries.
- Agentforce Sales is sandbox-only and experimental in SF Pi; its secret is an environment reference and every operation remains Guardrail-mediated and fail-closed without exact OAuth-org identity.
- Standalone Tableau uses Pi-native OAuth against Tableau's managed endpoint; Trailhead uses its published no-auth, read-only public-content endpoint.
- Custom MCP URLs start with no callable tools.
- Legacy SObject MCP entries are not managed by SF MCP; if manually configured, their mutation tools remain Guardrail-mediated and fail closed.
- Agentforce Sales, Slack, and MuleSoft secrets are referenced through environment variables and are never stored in SF MCP managed state.
- Slack and Informatica connections start quarantined because their public references do not publish stable exact tool-name contracts; observed tools remain Hidden pending a reviewed preset revision.
- B2C Commerce uses the GA @salesforce/b2c-dx-mcp package with a versioned reviewed tool contract and hidden-by-default exposure.
Exact reference
Show commands, tools, providers, and hooks
- Extension id:
sf-mcp - Intent: Personalize pi
- Category: Agent Tool
- Maturity: experimental
- Default state: on
- Commands:
/sf-mcp - LLM tools:
sf_mcp - Providers: none
- Events/hooks:
session_start,before_agent_start