Skip to main content
Glama
JustParent

simple-salesforce-mcp

by JustParent

simple-salesforce-mcp

Tests

一个轻量级的 Salesforce MCP 服务器。它通过 stdio 直接与 Salesforce REST API 通信,仅有两个运行时依赖(mcp、httpx)——旨在作为官方 @salesforce/mcp DX 服务器的快速冷启动替代品,后者的依赖树对于沙盒环境来说过于庞大。

工具

工具

是否写入?

备注

run_soql_query

否

带分页(next_url)的原始 SOQL 逃生通道

search_records

否

跨对象的全文搜索(参数化搜索 API)

get_record

否

按 Id 获取单条记录,可选字段列表

create_record

是

创建一条记录

update_record

是,受 confirm 门控

必须包含字面量 confirm=true

delete_record

是,受 confirm 门控

必须包含字面量 confirm=true

describe_object

否

精简的对象元数据(字段、类型、必填、下拉列表)

list_objects

否

组织对象,默认过滤系统噪音

get_org_info

否

当前用户、组织、实例 URL、API 版本

每个工具都带有 MCP 注解(readOnlyHint / destructiveHint / idempotentHint)。 update_record 和 delete_record 拒绝执行,除非调用包含 confirm: true, 并且拒绝消息会指示模型先将确切的更改展示给用户并获得批准。 SOQL 本身无法修改数据,因此该逃生通道保持只读。

Related MCP server: Salesforce MCP Server

身份验证

服务器本身不执行 OAuth 流程;它使用现有的访问令牌,该令牌在每次工具调用时解析(因此外部进程可以随时轮换令牌):

  1. Salesforce CLI 认证存储,位于 $HOME 下:

    • ~/.sf/config.json → {"target-org": "<username>"}(或旧版 ~/.sfdx/sfdx-config.json → {"defaultusername": ...})

    • ~/.sfdx/<username>.json → {"accessToken": "...", "instanceUrl": "https://..."}

    这是 sf org login 写入的格式,也是 JustParent 平台在沙盒中生成的格式(平台会在每次调用前刷新访问令牌)。这些文件中的刷新令牌和客户端密钥会被忽略——绝不会读入内存、存储或记录。

  2. 环境变量(备用,用于本地/独立使用): SALESFORCE_ACCESS_TOKEN 和 SALESFORCE_INSTANCE_URL。

当令牌被拒绝(HTTP 401 / INVALID_SESSION_ID)时,服务器会重新读取认证存储一次并重试,然后报告连接需要重新建立。

REST API 版本默认为 62.0;可通过 SALESFORCE_API_VERSION 覆盖。

运行

# 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-mcp

Claude Desktop / 通用 MCP 客户端配置:

{
  "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"
      }
    }
  }
}

冒烟测试(无需网络,打印版本、凭据状态和工具;退出码为 0):

uvx --from . simple-salesforce-mcp --test

开发

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   # interactive

CI(.github/workflows/tests.yml)在每次推送和拉取请求时运行:针对 Python 3.10–3.13 的测试套件、ruff lint 和格式检查以及 mypy,还有一个打包任务,它会以沙盒的方式安装该包(uvx --from .),以捕获打包问题。

安全说明

  • 仅使用访问令牌:服务器从不请求、读取或持久化刷新令牌。

  • 破坏性操作(update/delete)受显式 confirm=true 参数门控, 并带有面向模型的指引,要求先获得用户批准。

  • SOQL 分页游标(next_url)会被验证为 /services/data/... 路径, 对象/记录标识符在放入 URL 之前也会经过验证。

  • 响应有大小上限,并带有明确的截断提示。

Available Tools

9 tools
create_recordA

Create a new Salesforce record. Use describe_object first to find the required fields and valid picklist values.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesField API names to values, e.g. {"Name": "Acme", "Industry": "Energy"}.
object_typeYesObject API name, e.g. Account, Contact, or My_Object__c.

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_recordA
DestructiveIdempotent

Permanently delete a Salesforce record. Requires confirm=true: first present the deletion to the user and get their approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesMust be literally true. Before setting it, show the user the exact record and field changes and get their approval.
record_idYes15- or 18-character Salesforce record Id.
object_typeYesObject API name, e.g. Account, Contact, or My_Object__c.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_objectA
Read-onlyIdempotent

Get a Salesforce object's fields: API names, types, required flags, and picklist values. Use before writing SOQL or creating/updating records.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNobasic (default): fields with type/required/picklists. full: adds child relationships, record types, per-field help text and defaults.
object_typeYesObject API name, e.g. Account or My_Object__c.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_infoA
Read-onlyIdempotent

Current Salesforce user, org id/name/type, instance URL, and API version in use. Call this first to establish context.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_recordA
Read-onlyIdempotent

Fetch a single Salesforce record by Id.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoField API names to return (relationship paths like Account.Name allowed). Omit for all accessible fields.
record_idYes15- or 18-character Salesforce record Id.
object_typeYesObject API name, e.g. Account, Contact, or My_Object__c.

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_objectsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoCase-insensitive substring match on API name or label.
include_systemNoInclude non-queryable and system objects (default false).

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_queryA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoSOQL query, e.g. SELECT Id, Name FROM Account WHERE Industry = 'Energy' ORDER BY Name LIMIT 50
next_urlNoPagination cursor: pass the next_url value returned by a previous call to fetch the next page. When set, query is ignored.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_recordsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum records overall (default 20, max 200).
fieldsNoFields 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_termYesText to search for (minimum 2 characters).
object_typesNoRestrict to these objects, e.g. ["Account", "Contact"]. Omit to search all searchable objects.

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_recordA
DestructiveIdempotent

Update fields on an existing Salesforce record. Requires confirm=true: first present the exact change to the user and get their approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesOnly the fields to change, as field API names to values.
confirmYesMust be literally true. Before setting it, show the user the exact record and field changes and get their approval.
record_idYes15- or 18-character Salesforce record Id.
object_typeYesObject API name, e.g. Account, Contact, or My_Object__c.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 9 tool updatesv0.1.0
    • First observedcreate_record
    • First observeddelete_record
    • First observeddescribe_object
    • First observedget_org_info
    • First observedget_record
    • First observedlist_objects
    • First observedrun_soql_query
    • First observedsearch_records
    • First observedupdate_record

TDQS

A4.3/5.0

Scored across 9 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    A focused MCP server for Salesforce CRM that exposes read/write access to standard CRM objects via six tools, designed for multi-tenant gateway deployments.
    12 npm
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    A customizable MCP server for integrating Salesforce APIs with GenAI applications, supporting SOQL queries, record CRUD, metadata access, and more.
    13
    8
    -
  • A
    license
    A
    quality
    A
    maintenance
    Enables SOQL queries, SOSL search, and record CRUD operations on a single Salesforce org via MCP, with optional read-only mode.
    9
    170 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to interact with Salesforce through MCP, supporting queries, records, metadata, and bulk operations with flexible OAuth authentication.
    16
    MIT