simple-salesforce-mcp
Provides tools for interacting with the Salesforce REST API, including running SOQL queries, searching records, getting/creating/updating/deleting records, describing objects, listing objects, and fetching org information. Update and delete operations require explicit confirmation.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@simple-salesforce-mcpRun a SOQL query to get the 10 most recent accounts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
simple-salesforce-mcp
A lightweight Salesforce MCP server. Talks straight to the
Salesforce REST API over stdio with two runtime dependencies (mcp, httpx) — built as a
fast-cold-start replacement for the official @salesforce/mcp DX server, whose dependency
tree is too heavy for sandboxed environments.
Tools
Tool | Writes? | Notes |
| no | Raw SOQL escape hatch with pagination ( |
| no | Cross-object full-text search (parameterized search API) |
| no | Fetch one record by Id, optional field list |
| yes | Create a record |
| yes, confirm-gated | Requires literal |
| yes, confirm-gated | Requires literal |
| no | Trimmed object metadata (fields, types, required, picklists) |
| no | Org objects, system noise filtered by default |
| no | Current user, org, instance URL, API version |
Every tool carries MCP annotations (readOnlyHint / destructiveHint / idempotentHint).
update_record and delete_record refuse to act unless the call includes confirm: true,
and the refusal message instructs the model to present the exact change to the user and get
approval first. SOQL itself cannot modify data, so the escape hatch stays read-only.
Related MCP server: Salesforce MCP Server
Authentication
The server performs no OAuth flow itself; it consumes an existing access token, resolved on every tool call (so an external process may rotate the token at any time):
Salesforce CLI auth store under
$HOME:~/.sf/config.json→{"target-org": "<username>"}(or legacy~/.sfdx/sfdx-config.json→{"defaultusername": ...})~/.sfdx/<username>.json→{"accessToken": "...", "instanceUrl": "https://..."}
This is the shape written by
sf org login, and the shape the JustParent platform materialises into sandboxes (with the platform refreshing the access token before each call). Refresh tokens and client secrets in these files are ignored — never read into memory, stored, or logged.Environment variables (fallback, for local/standalone use):
SALESFORCE_ACCESS_TOKENandSALESFORCE_INSTANCE_URL.
On a rejected token (HTTP 401 / INVALID_SESSION_ID) the server re-reads the auth store
once and retries, then reports that the connection needs to be re-established.
The REST API version defaults to 62.0; override with SALESFORCE_API_VERSION.
Running
# Standalone with env vars (get a token via: sf org display --json)
SALESFORCE_ACCESS_TOKEN=... \
SALESFORCE_INSTANCE_URL=https://yourorg.my.salesforce.com \
uvx --from git+https://github.com/JustParent/simple-salesforce-mcp simple-salesforce-mcpClaude Desktop / generic MCP client config:
{
"mcpServers": {
"salesforce": {
"command": "uvx",
"args": ["--from", "git+https://github.com/JustParent/simple-salesforce-mcp", "simple-salesforce-mcp"],
"env": {
"SALESFORCE_ACCESS_TOKEN": "...",
"SALESFORCE_INSTANCE_URL": "https://yourorg.my.salesforce.com"
}
}
}
}Smoke test (no network, prints version, credential status, and tools; exits 0):
uvx --from . simple-salesforce-mcp --testDevelopment
uv run pytest # unit tests, no network needed
uv run ruff check . # lint
uv run ruff format . # format (--check to verify only)
uv run mypy # type check (src and tests)
uv run simple-salesforce-mcp --test
npx @modelcontextprotocol/inspector uv run simple-salesforce-mcp # interactiveCI (.github/workflows/tests.yml) runs on every push and pull request: the test
suite on Python 3.10–3.13, ruff lint and format checks plus mypy, and a packaging
job that installs the package the way sandboxes do (uvx --from .) to catch
packaging breakage.
Security notes
Access-token only: the server never requests, reads, or persists refresh tokens.
Destructive operations (update/delete) are gated behind an explicit
confirm=trueargument with model-facing guidance to obtain user approval first.SOQL pagination cursors (
next_url) are validated to be/services/data/...paths, and object/record identifiers are validated before being placed in URLs.Responses are size-capped with explicit truncation notices.
Available Tools
9 toolscreate_recordA
Create a new Salesforce record. Use describe_object first to find the required fields and valid picklist values.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Field API names to values, e.g. {"Name": "Acme", "Industry": "Energy"}. | |
| object_type | Yes | Object API name, e.g. Account, Contact, or My_Object__c. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate that this is a mutating, non-idempotent write operation (readOnlyHint=false, idempotentHint=false, destructiveHint=false). The description adds the scoping detail that creating a record requires prior schema discovery, which is useful. However, it does not disclose potential side effects such as triggering workflows, required permissions, or duplicate-check behavior, but the annotations cover the core safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the core action, the second gives a critical prerequisite workflow. Every clause earns its place, and the guidance is front-loaded before the advisory sentence. No filler or redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with full schema coverage and annotations indicating mutating behavior, the description provides the essential missing context: how to correctly determine payload fields. It also routes the agent to a sibling tool, describe_object, which closes the main knowledge gap. It could briefly mention that responses include the new record ID, but the absence of an output schema reduces that burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both parameters include clear descriptions with examples (object API name and field-values map). The description adds the workflow context of needing required fields and valid picklists, which complements rather than duplicates the schema. It does not need to restate parameter meanings because the schema already carries them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair ('Create a new Salesforce record'), immediately distinguishing this tool from siblings like get_record, update_record, and delete_record. It also names the exact API domain (Salesforce) and pairs with a supporting sibling, describe_object, so an agent can tell what this tool is for at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs the agent to call describe_object first to determine required fields and valid picklist values. This is a concrete, actionable usage guideline that prevents errors and clearly differentiates the workflow from simply guessing at field names. It also implicitly warns that this is a create operation, not an update or upsert.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_recordADestructiveIdempotent
Permanently delete a Salesforce record. Requires confirm=true: first present the deletion to the user and get their approval.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be literally true. Before setting it, show the user the exact record and field changes and get their approval. | |
| record_id | Yes | 15- or 18-character Salesforce record Id. | |
| object_type | Yes | Object API name, e.g. Account, Contact, or My_Object__c. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive, and the description adds meaningful context: the deletion is permanent and user confirmation must precede execution. This goes beyond the structured annotations by specifying the required confirmation workflow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler: the first states the core action and permanence, the second gives the essential safety condition. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive three-parameter tool, the description, annotations, and schema together cover the operation, required confirmation, parameter formats, and irreversibility. No output schema exists, but explaining a delete return value is not essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already documents each parameter in detail, including the confirm requirement and the need to show the user the exact record. The description mostly restates the confirm policy rather than adding new parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('delete'), names the resource ('Salesforce record'), and adds the critical qualifier 'permanently'. This clearly distinguishes it from the sibling tools create_record, update_record, get_record, and search_records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit operational guidance: confirm=true is required and user approval must be obtained before proceeding. It doesn't explicitly name alternatives, but the delete intent is self-evident and the confirmation gate is the key usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_objectARead-onlyIdempotent
Get a Salesforce object's fields: API names, types, required flags, and picklist values. Use before writing SOQL or creating/updating records.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | basic (default): fields with type/required/picklists. full: adds child relationships, record types, per-field help text and defaults. | |
| object_type | Yes | Object API name, e.g. Account or My_Object__c. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds useful output context (field metadata, picklist values) but does not disclose additional behavioral traits such as auth requirements, rate limits, or edge-case behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The core action and output are front-loaded, and the usage guidance follows immediately. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only metadata tool with only two parameters and no output schema, the description covers the essential behavior and use case. It could be slightly richer by noting the basic vs. full detail distinction, but the schema already documents that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both object_type and detail are already well documented. The description does not need to compensate, and it adds no significant parameter-level detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get') and resource ('a Salesforce object's fields') and even enumerates what is returned: API names, types, required flags, and picklist values. It clearly distinguishes this metadata-description tool from record-focused siblings like get_record or run_soql_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives explicit guidance: 'Use before writing SOQL or creating/updating records.' This tells an agent when the tool is appropriate, though it does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_org_infoARead-onlyIdempotent
Current Salesforce user, org id/name/type, instance URL, and API version in use. Call this first to establish context.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds concrete payload details (user, org id/name/type, instance URL, API version), which is useful behavioral context beyond the annotations. No contradiction or missing critical traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler: the first states exactly what is returned, the second gives the invocation order. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only info tool, the description fully specifies the returned content and the recommended call order. No output schema exists, but the description enumerates the fields, making the tool fully actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema description coverage is 100%, so no parameter explanation is needed. Per the baseline for zero parameters, this scores well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly enumerates the returned data: current Salesforce user, org id/name/type, instance URL, and API version. This is a specific, distinct purpose and clearly separates get_org_info from the sibling CRUD/query tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly directs the agent to 'Call this first to establish context,' providing a clear when-to-use instruction. It does not name exclusions or alternatives, but no sibling tool overlaps with org-level metadata, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recordARead-onlyIdempotent
Fetch a single Salesforce record by Id.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Field API names to return (relationship paths like Account.Name allowed). Omit for all accessible fields. | |
| record_id | Yes | 15- or 18-character Salesforce record Id. | |
| object_type | Yes | Object API name, e.g. Account, Contact, or My_Object__c. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and idempotentHint, and the description adds no behavioral context beyond the basic fetch operation. It does not mention error handling, missing-record behavior, field-level security, or authentication considerations, and no additional context is provided beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, front-loading the core action and target resource. It is easy to skim and every word contributes to understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only lookup tool with fully documented parameters and safe-operation annotations, the description is mostly sufficient. However, since there is no output schema, it does not clarify the return shape or error behavior, and it relies on the agent to infer usage relative to sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains record_id, object_type, and fields clearly. The description adds no parameter-level detail, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and identifies the exact resource ('single Salesforce record by Id'), clearly distinguishing a direct-ID lookup from sibling query/search/list tools. It is unambiguous and immediately actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when an agent already has a record Id and needs a single record, but it does not explicitly state when to prefer this tool over run_soql_query or search_records, nor does it mention exclusions or alternatives. This is adequate implied guidance, not explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_objectsARead-onlyIdempotent
List the org's Salesforce objects (API name and label). System noise (Share/History/Feed/ChangeEvent tables, non-queryable objects) is excluded by default.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Case-insensitive substring match on API name or label. | |
| include_system | No | Include non-queryable and system objects (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds meaningful behavioral context by naming the excluded system object categories (Share/History/Feed/ChangeEvent tables, non-queryable objects) and the default include_system=false behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core action and output are front-loaded in the first sentence, and the second sentence adds a valuable default-behavior caveat without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with two optional parameters and no output schema, the description is nearly complete: it states return fields and default filtering. It could slightly improve by pointing to describe_object for detailed metadata, but this is not a significant gap given the tool's simplicity and annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description reinforces that filtering is case-insensitive substring matching and that system objects are excluded by default, but it does not add significant new parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('the org's Salesforce objects') and clearly states the output fields (API name and label). This distinguishes it from siblings like run_soql_query, describe_object, and get_org_info without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the tool's scope clear—listing object names and labels, with optional filtering—and notes the default exclusion of system noise. However, it does not explicitly state when to choose this over describe_object for metadata or run_soql_query for records, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_soql_queryARead-onlyIdempotent
Run a raw SOQL query against the Salesforce org. Read-only — SOQL cannot modify data. Use this as the escape hatch for anything the other tools don't cover: filtering, joins via relationship fields, aggregates, ORDER BY. Always include a LIMIT for exploratory queries. If a field or object name errors, check the exact API names with describe_object.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | SOQL query, e.g. SELECT Id, Name FROM Account WHERE Industry = 'Energy' ORDER BY Name LIMIT 50 | |
| next_url | No | Pagination cursor: pass the next_url value returned by a previous call to fetch the next page. When set, query is ignored. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The read-only nature is stated and aligns with the readOnlyHint and idempotentHint annotations. The description adds useful behavioral context by explaining that SOQL cannot modify data, advising LIMIT to avoid runaway exploratory queries, and signaling that invalid field/object names produce errors. It doesn't discuss pagination or result shape, but annotations already cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short, purposeful sentences with the main purpose and read-only caveat front-loaded. Every sentence earns its place: purpose, safety, use cases, LIMIT guidance, and error recovery. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a general-purpose SOQL tool with two parameters and no output schema, the description covers the essential context: scope, capabilities, safety, usage guardrails, and error handling. Pagination is documented in the schema's next_url description, so the absence of that detail in the tool description is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% parameter coverage for query and next_url, so the baseline is 3. The description adds practical value by reinforcing the need for LIMIT in queries and pointing to describe_object for resolving invalid API names, which goes slightly beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb and resource: 'Run a raw SOQL query against the Salesforce org.' It also names the tool's role as the escape hatch for filtering, joins, aggregates, and ORDER BY, which clearly distinguishes it from sibling tools like search_records, get_record, and describe_object.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'anything the other tools don't cover,' and gives concrete use cases. It also gives a guardrail ('Always include a LIMIT for exploratory queries') and tells the agent what to do on errors ('check the exact API names with describe_object').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recordsARead-onlyIdempotent
Full-text search across Salesforce records (name, email, phone, and other searchable fields). Good for 'find the record for X' when you don't know the object or Id. For precise filtering use run_soql_query instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum records overall (default 20, max 200). | |
| fields | No | Fields to return for each matched record (default: Id only). E.g. ["Id", "Name"] — note not every object has Name (Case uses CaseNumber). Requires object_types, and each field must exist on every listed object. | |
| search_term | Yes | Text to search for (minimum 2 characters). | |
| object_types | No | Restrict to these objects, e.g. ["Account", "Contact"]. Omit to search all searchable objects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is covered. The description adds that this is full-text search and lists common searchable fields, but it does not disclose result shape, default fields, or pagination behavior, which are relevant but not severe gaps given the read-only annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The core function is front-loaded, and the alternative routing is given concisely in the second sentence. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is moderate complexity with four documented parameters and helpful annotations. The description adequately covers purpose and usage context. A return-value or result-format note might help since there is no output schema, but the tool's search behavior is already clear enough for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters clearly. The description adds no parameter-level detail beyond mentioning searchable fields, which is not necessary because the schema handles parameter semantics effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Full-text search across Salesforce records'), specifies the resource, and gives concrete examples of searchable fields. It also distinguishes itself from run_soql_query by noting this is for when the object or Id is unknown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly identifies when to use this tool: 'Good for find the record for X when you don't know the object or Id.' It also names the alternative for precise filtering: 'use run_soql_query instead.' This gives an agent clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_recordADestructiveIdempotent
Update fields on an existing Salesforce record. Requires confirm=true: first present the exact change to the user and get their approval.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Only the fields to change, as field API names to values. | |
| confirm | Yes | Must be literally true. Before setting it, show the user the exact record and field changes and get their approval. | |
| record_id | Yes | 15- or 18-character Salesforce record Id. | |
| object_type | Yes | Object API name, e.g. Account, Contact, or My_Object__c. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only, is destructive, and is idempotent. The description adds the important behavioral requirement that the agent must first present the exact change to the user and obtain approval before setting confirm=true. This goes beyond the annotations and covers the main side-effect risk of updating a record.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, and the core operation is stated first. The confirmation requirement is front-loaded right after the purpose, making the most important behavioral constraint immediately visible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter update tool, the description covers the purpose, the confirmation requirement, and the target resource. There is no output schema, so a note about the return value would add completeness, but all invocation-critical information is present and the annotations cover safety traits like destructiveness and idempotency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage, so the schema already explains object_type, record_id, data, and confirm. The description reinforces the confirm requirement but does not add substantial meaning beyond the schema. Baseline 3 applies because the schema carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Update fields on an existing Salesforce record.' This clearly differentiates it from siblings like create_record, delete_record, and get_record, and immediately identifies the operation as an update rather than a read or creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it updates an existing Salesforce record. It also communicates the key prerequisite that confirm=true must be set only after user approval. It does not explicitly name alternatives like create_record or delete_record, but the update-vs-create/delete distinction is clear enough for an agent to choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.0- First observed
create_record - First observed
delete_record - First observed
describe_object - First observed
get_org_info - First observed
get_record - First observed
list_objects - First observed
run_soql_query - First observed
search_records - First observed
update_record
TDQS
Scored across 9 tools
Each tool targets a distinct operation: SOQL query, full-text search, record CRUD by Id, object metadata, and org context. The descriptions explicitly contrast run_soql_query with search_records, and get_record with run_soql_query, leaving no ambiguity.
All tool names follow a clear verb_noun pattern in snake_case: run_soql_query, search_records, get_record, create_record, update_record, delete_record, describe_object, list_objects, get_org_info. The naming is perfectly uniform and predictable.
Nine tools is a well-scoped size for a Salesforce MCP server, covering query, search, CRUD, schema introspection, and org context. Every tool has a clear purpose with no redundant or filler tools.
The set provides complete CRUD lifecycle coverage (create, get, update, delete), plus two read/search mechanisms, object metadata discovery, and org context. It covers the full range of common Salesforce interactions an agent would need, with no glaring dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Unified MCP Server is a remote MCP connector for AI agents and vertical AI products that provides access to 22,000+ authorized SaaS tools across 400+ integrations and 24 categories directly inside LLMs (Claude, GPT, Gemini, Cohere). Tools operate only on explicitly authorized customer connections, enabling agents to safely read and write against live third-party systems.
Hosted MCP server for AI-driven data ops. Create apps, manage schemas, and CRUD structured data.
- GentkeyOAuthcom.gentkey
One MCP URL for all your connectors — scoped writes, enforced constraints, and a full audit trail.
Run SOQL queries to explore and retrieve Salesforce data. Access accounts, contacts, opportunities…
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA focused MCP server for Salesforce CRM that exposes read/write access to standard CRM objects via six tools, designed for multi-tenant gateway deployments.18MIT
- FlicenseBqualityDmaintenanceA customizable MCP server for integrating Salesforce APIs with GenAI applications, supporting SOQL queries, record CRUD, metadata access, and more.136-
- AlicenseAqualityAmaintenanceEnables SOQL queries, SOSL search, and record CRUD operations on a single Salesforce org via MCP, with optional read-only mode.978MIT
- AlicenseAqualityCmaintenanceEnables AI agents to interact with Salesforce through MCP, supporting queries, records, metadata, and bulk operations with flexible OAuth authentication.16MIT