run_soql_query returns CSV by default and its guidance pushes named fields and a LIMIT, get_record returns every field and says as much, and get_object_fields exists so the schema is fetched once instead of guessed at across retries. Below the typed tools sit tooling_execute, apex_execute and restful, which will reach anything the authenticated profile can — useful, and the reason this belongs on an org where that profile is scoped deliberately. The bulk tools take whole record lists, so a wrong filter is wrong at scale.
A server over a Salesforce org's REST, Tooling and Apex endpoints — queries, record CRUD, bulk operations and a raw REST escape hatch — in 14 tools.
- SOQL queries and SOSL searches run directly, returning CSV by default and JSON on request when nested structure matters
- Field discovery before query writing: a per-object list of name, label, type and updateable, and an enumeration of every standard and custom SObject in the org
- Single-record work by id — fetch, create, update, delete
- Bulk create, update and delete across a list of records of one SObject type
- Tooling API and Apex REST requests for the work the data endpoints do not cover
- A direct REST call taking method, path, params and body, which reaches anything else in the org's API surface
A Salesforce org this machine can authenticate to, and uv with a Python available since the package runs under it. The profile behind that authentication is the boundary — the Apex and raw REST tools reach whatever it can. MIT.
One command plus a key — uvx --from mcp-salesforce-connector salesforce, then supply credentials
