Skip to main content
Glama
sunny980123

Salesforce MCP Server

by sunny980123

Salesforce MCP Server

Salesforce CRM과 Claude를 연결하는 MCP 서버. 레코드 CRUD, SOQL/SOSL, Tooling API, Flow/Apex 메타데이터 추출, Sandbox 관리까지 지원합니다.

특징

  • 🔐 SF CLI 기반 자동 토큰 갱신 — 한 번 로그인하면 토큰 만료 걱정 없음

  • 🧰 클론/빌드 불필요npx 한 줄로 실행

  • 🛡️ 안전한 권한 모드 — 삭제 금지 / 읽기 전용

  • 🧪 Prod / Sandbox 분리 접속 — 동일 MCP 서버로 두 org를 별도 등록


빠른 시작 (팀원 온보딩, 5분)

1. 필수 도구 설치

brew install node sf
npm install -g @anthropic-ai/claude-code

이미 설치돼 있으면 건너뛰세요. (node -v, sf --version, claude --version으로 확인)

2. Salesforce 로그인

sf org login web --instance-url https://channel-b.my.salesforce.com

브라우저에서 @channel.io 계정으로 로그인. Successfully authorized ... 뜨면 완료.

3. MCP 등록 (한 줄 — 본인 이메일만 교체)

claude mcp add -s user salesforce -e SALESFORCE_SF_CLI_USERNAME=본인이메일@channel.io -e PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin -e SALESFORCE_NO_DELETE=true -- npx -y github:sunny980123/Salesforce-MCP-Server

⚠️ 대괄호 금지. SALESFORCE_SF_CLI_USERNAME=east@channel.io 처럼 값만.

4. 확인

claude mcp list
# → salesforce: ... - ✓ Connected

Claude Code에서 "Salesforce에서 최근 생성된 리드 5개 보여줘" 요청으로 테스트해보세요.


Related MCP server: Salesforce MCP Server

인증 & 환경변수

SF CLI의 refresh token을 재사용합니다. Security Token, Connected App, JWT 키 전부 불필요.

변수

필수

설명

SALESFORCE_SF_CLI_USERNAME

SF CLI에 로그인된 이메일 (예: jay@channel.io)

PATH

/opt/homebrew/bin 포함 필수 (MCP 프로세스가 sf 찾을 수 있도록)

SALESFORCE_NO_DELETE

true 시 삭제 차단 (생성/수정은 허용)

SALESFORCE_READONLY

true 시 모든 쓰기 차단 (조회만)

PATH를 빠뜨리면 MCP 서버가 sf를 못 찾아 조용히 실패합니다.


권한 모드

팀원 공유 시 아래 2가지 모드 중 하나를 사용하세요. 레코드 삭제 및 메타데이터 배포는 이 서버를 통해 일반 사용자에게 제공되지 않습니다.

모드

설정

조회

생성

수정

삭제

🛡️ 삭제 금지 (권장)

SALESFORCE_NO_DELETE=true

🔒 읽기 전용

SALESFORCE_READONLY=true

🛡️ 삭제 금지 모드 (기본 추천)

claude mcp add -s user salesforce \
  -e SALESFORCE_SF_CLI_USERNAME=본인이메일@channel.io \
  -e PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin \
  -e SALESFORCE_NO_DELETE=true \
  -- npx -y github:sunny980123/Salesforce-MCP-Server

🔒 읽기 전용 모드 (감사/분석용)

claude mcp add -s user salesforce \
  -e SALESFORCE_SF_CLI_USERNAME=본인이메일@channel.io \
  -e PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin \
  -e SALESFORCE_READONLY=true \
  -- npx -y github:sunny980123/Salesforce-MCP-Server

도구별 권한 매트릭스

도구

삭제 금지

읽기 전용

salesforce_query

salesforce_search

salesforce_get_record

salesforce_describe_object

salesforce_list_objects

salesforce_get_limits

salesforce_metadata_query

salesforce_retrieve_metadata

salesforce_list_sandboxes

salesforce_create_record

salesforce_update_record

salesforce_delete_record

salesforce_deploy_metadata

salesforce_create_sandbox


제공 도구

📦 레코드 CRUD (표준 API)

도구

설명

salesforce_query

SOQL 쿼리로 레코드 조회

salesforce_search

SOSL로 전체 텍스트 검색

salesforce_get_record

ID로 단일 레코드 조회

salesforce_create_record

새 레코드 생성

salesforce_update_record

기존 레코드 수정

salesforce_delete_record

레코드 삭제 (제한적 접근)

salesforce_describe_object

오브젝트 필드 메타데이터 조회

salesforce_list_objects

사용 가능한 오브젝트 목록

salesforce_get_limits

API 사용량 및 한도 확인

🔍 Tooling API 조회 — 메타데이터 SOQL

도구

설명

salesforce_metadata_query

Tooling API로 ValidationRule/Flow/Apex 등 메타데이터 조회

표준 SOQL로 접근할 수 없는 설정/메타데이터 조회에 사용:

조회 대상

예시 쿼리

Validation Rule 전체 목록

SELECT Id, ValidationName, Active, EntityDefinitionId FROM ValidationRule

Validation Rule 조건식 (1건)

SELECT Id, ValidationName, Metadata FROM ValidationRule WHERE Id = '03d...'

활성 Flow 버전 목록

SELECT Id, MasterLabel, Status, VersionNumber FROM Flow WHERE Status = 'Active'

Flow 내부 로직 (1건)

SELECT Id, MasterLabel, Metadata FROM Flow WHERE Id = '301...'

Apex 클래스 코드

SELECT Id, Name, Body FROM ApexClass WHERE Name = 'MyClass'

Apex 트리거 코드

SELECT Id, Name, Body FROM ApexTrigger WHERE TableEnumOrId = 'Account'

주의: Metadata 또는 FullName 필드를 포함할 경우 반드시 WHERE Id = '...'1건만 조회해야 합니다.

활용 예시: 특정 필드를 참조하는 모든 로직 찾기

1. ValidationRule 목록 조회 (Metadata 없이 전체)
   → SELECT Id, ValidationName, EntityDefinitionId FROM ValidationRule

2. 각 Rule의 Metadata 조회 (1건씩)
   → SELECT Id, ValidationName, Metadata FROM ValidationRule WHERE Id = '03d...'

3. Flow 활성 버전 → Metadata 순차 조회

📤 메타데이터 추출 — Flow / Apex XML 읽기

도구

설명

salesforce_retrieve_metadata

Flow/ApexClass/ValidationRule 등을 XML로 추출

지원 타입: Flow, ApexClass, ApexTrigger, ValidationRule, PermissionSet, Layout, CustomObject

내부 동작: 임시 SFDX 프로젝트를 만들고 sf project retrieve start를 실행합니다. sf CLI가 PATH에 있고 SALESFORCE_SF_CLI_USERNAME이 설정돼 있어야 합니다.

객체 정의 읽기 권한만 있으면 동작하며, 모든 권한 모드에서 사용 가능합니다.

# Claude에 요청 예시
"Existing_Flow라는 Flow의 XML을 가져와서 어떤 조건에서 실행되는지 요약해줘"
→ salesforce_retrieve_metadata(metadata_type="Flow", api_name="Existing_Flow")

🧪 Sandbox 관리

도구

설명

salesforce_list_sandboxes

존재하는 sandbox + 생성 중인 SandboxProcess 목록

salesforce_create_sandbox

새 sandbox 생성 (Developer / Dev Pro / Partial / Full)

두 툴 모두 prod MCP에서 호출합니다 (SandboxInfo는 prod org에 저장). create_sandbox는 Salesforce 측 "Manage Sandboxes" 권한이 필요합니다.

Sandbox 생성부터 접속까지의 전체 플로우는 아래 Sandbox 워크플로우 참조.


Sandbox 워크플로우

생성 → 접속

1. (prod MCP에서) sandbox 생성 요청
   Claude에 "Salesforce sandbox 'MyDev' DEVELOPER로 생성해줘" 요청
   → salesforce_create_sandbox 호출됨

2. 진행 상태 확인
   Claude에 "sandbox 생성 진행 상황 보여줘" 요청
   → salesforce_list_sandboxes에서 CopyProgress %

3. 완료 후 터미널에서 sandbox 로그인
   sf org login web -r https://test.salesforce.com
   → 브라우저에서 sandbox username 입력
      (본인이메일@channel.io + "." + sandbox_이름_소문자)
      예: east@channel.io.mydev

4. Sandbox 전용 MCP 추가 등록 (prod MCP와 공존)
   claude mcp add -s user salesforce-sandbox \
     -e SALESFORCE_SF_CLI_USERNAME=본인이메일@channel.io.mydev \
     -e PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin \
     -e SALESFORCE_NO_DELETE=true \
     -- npx -y github:sunny980123/Salesforce-MCP-Server

Claude Code에서:

  • mcp__salesforce__* 툴 → prod에 붙음

  • mcp__salesforce-sandbox__* 툴 → sandbox에 붙음

Sandbox username 규칙

Prod의 모든 active user는 sandbox 생성 시 자동 복제됩니다. 별도 등록 불필요.

Prod username

Sandbox username (sandbox 이름이 MyDev인 경우)

sunny@channel.io

sunny@channel.io.mydev

east@channel.io

east@channel.io.mydev

  • 비밀번호: Developer/Dev Pro는 prod와 동일 (생성 시점 기준). Partial/Full은 Salesforce가 리셋 이메일 발송.

  • Email 필드는 .invalid 접미사로 자동 스크램블됨 (prod 유저한테 테스트 이메일 발송 방지).

  • Inactive user는 복제되지 않습니다.

권한

Sandbox MCP에서도 prod와 동일한 권한 체계 적용. Deploy/delete가 prod에서 막혀 있는 사용자는 sandbox에서도 막힘 — sandbox는 격리된 환경이지 권한 우회 수단이 아닙니다.


트러블슈팅

NamedOrgNotFoundError: No authorization information found for ...

SALESFORCE_SF_CLI_USERNAME 값이 잘못됐거나, 해당 이메일로 sf org login web을 하지 않았습니다.

# 현재 로그인된 org 확인
sf org list

# 재로그인
sf org login web --instance-url https://channel-b.my.salesforce.com

# MCP 재등록 (이메일 정확히 — 대괄호 없이)
claude mcp remove salesforce -s user
claude mcp add -s user salesforce -e SALESFORCE_SF_CLI_USERNAME=본인이메일@channel.io -e PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin -e SALESFORCE_NO_DELETE=true -- npx -y github:sunny980123/Salesforce-MCP-Server

zsh: command not found: claude

Claude Code CLI가 설치되지 않았습니다.

npm install -g @anthropic-ai/claude-code

zsh: command not found: -e

명령어를 여러 줄로 복붙하다가 줄바꿈이 깨졌습니다. 한 줄로 복붙하세요.

sf: command not found (MCP 내부 로그)

PATH 환경변수를 빠뜨렸습니다. MCP 프로세스는 shell profile을 상속받지 않으니 명시적으로 /opt/homebrew/bin을 포함해야 합니다.

✓ Connected인데 툴 호출 시 권한 에러

구버전이 npx 캐시에 남아 있을 수 있습니다:

rm -rf ~/.npm/_npx
claude mcp remove salesforce -s user
# 다시 add (위 명령어 그대로)
# 그 뒤 Claude Code 완전 재시작

팀원이 기존 project-scoped 설정과 충돌

이전에 다른 방식으로 등록한 적이 있으면 ~/.claude.json에 project-scoped 엔트리가 남아 있을 수 있습니다. GUIDE.md의 정리 스크립트를 참고하세요.


소스에서 직접 빌드 (개발자용)

서버 코드를 수정·기여하려는 경우:

git clone https://github.com/sunny980123/Salesforce-MCP-Server.git
cd Salesforce-MCP-Server
npm install && npm run build

로컬 빌드로 MCP 등록:

claude mcp add -s user salesforce \
  -e SALESFORCE_SF_CLI_USERNAME=본인이메일@channel.io \
  -e PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin \
  -e SALESFORCE_NO_DELETE=true \
  -- node ~/Salesforce-MCP-Server/dist/index.cjs

라이선스

MIT

Available Tools

14 tools
salesforce_create_recordCreate Salesforce RecordA

Create a new record in Salesforce.

Args:

  • object_type (string): The Salesforce object type (e.g., 'Account', 'Contact', 'Lead')

  • fields (object): Key-value pairs of field API names and their values

Returns: { id: string, success: boolean } - The new record ID on success.

Common required fields:

  • Account: Name (required)

  • Contact: LastName (required), AccountId (optional)

  • Lead: LastName + Company (required)

  • Opportunity: Name + StageName + CloseDate (required)

  • Case: Subject (required)

Examples:

  • Create account: object_type='Account', fields={ "Name": "Acme Corp", "Industry": "Technology" }

  • Create lead: object_type='Lead', fields={ "FirstName": "John", "LastName": "Doe", "Company": "Acme", "Email": "john@acme.com" }

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesField values as key-value pairs. Keys are Salesforce field API names.
object_typeYesSalesforce object type to create (e.g., Account, Contact, Opportunity)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations: it specifies the return format (id, success), lists common required fields per object type, and provides examples. This compensates for the few annotations, though it does not mention error handling or permissions.

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 well-structured with sections for args, returns, common fields, and examples. It is concise and front-loaded with the main purpose, no unnecessary words.

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?

Given the tool complexity (create with object_type and fields), the description covers return value, examples, and field requirements. It is mostly complete but lacks mention of potential errors, rate limits, or authentication, which would be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant value beyond the schema: it documents common required fields for multiple object types and provides concrete examples. The schema has 100% coverage, but the description deepens understanding.

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 purpose: 'Create a new record in Salesforce.' It uses a specific verb and resource, and distinguishes from sibling tools like salesforce_get_record, salesforce_update_record, and salesforce_delete_record.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives such as salesforce_update_record or salesforce_query. It lacks context for usage boundaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_create_sandboxCreate Salesforce SandboxA

Create a new sandbox via Tooling API SandboxInfo. Requires Manage Sandboxes permission.

Creation is asynchronous and can take minutes (Developer) to hours (Full). After creation, a SandboxProcess record tracks progress — use salesforce_list_sandboxes with include_in_progress=true to monitor.

Args:

  • sandbox_name: 1-10 chars, letters/digits, must start with a letter. Case-sensitive.

  • license_type: DEVELOPER (default) | DEVELOPER_PRO | PARTIAL | FULL

  • description (optional): free-form description

Notes:

  • DEVELOPER: config-only, metadata copy, refreshable daily

  • DEVELOPER_PRO: same as DEVELOPER with more storage

  • PARTIAL: sample of prod data (up to 5GB)

  • FULL: complete prod clone (costly, limited quota)

  • Must run against PRODUCTION org. After creation, connect via: sf org login web -r https://test.salesforce.com and register a separate MCP entry targeting the sandbox username.

Caller must be in owner or deployer allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNo
license_typeNoDEVELOPER
sandbox_nameYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only mark readOnlyHint=false and idempotentHint=false. Description adds crucial behavioral context: async operation, time ranges, permission requirement, production org requirement, and caller allowlist. Goes far beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with sections, but slightly long. Every sentence is informative and earns its place, though could be slightly more concise.

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 tool with 3 params, async behavior, no output schema, and multiple sandbox types, the description covers all necessary information for correct use, including monitoring and post-creation connection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 0% description coverage, but description fully compensates: explains sandbox_name constraints, license_type differences (data, time, cost), and description field.

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 verb ('Create') and resource ('a new sandbox via Tooling API SandboxInfo'), and distinguishes from sibling tools like salesforce_list_sandboxes which monitors progress.

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?

Explicitly explains asynchronous nature, how to monitor with salesforce_list_sandboxes, and provides notes on when each license type is appropriate. Lacks explicit 'when not to use' but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_delete_recordDelete Salesforce RecordA
Destructive

Permanently delete a Salesforce record. This action cannot be undone (record goes to Recycle Bin).

Args:

  • object_type (string): The Salesforce object type (e.g., 'Account', 'Lead')

  • record_id (string): The 15 or 18-character Salesforce record ID to delete

Returns: Confirmation message on success.

Warning: This operation moves the record to the Recycle Bin. It can be restored within 15 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
record_idYes15 or 18-character Salesforce record ID to delete
object_typeYesSalesforce object type of the record to delete

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the annotations (destructiveHint=true) by detailing that the action cannot be undone, the record goes to the Recycle Bin, and has a 15-day restoration window. This provides critical behavioral context for an agent.

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 concise and well-structured: front-loaded with the core action, followed by parameter details, return info, and a warning. No unnecessary words.

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?

Given the tool's simplicity (2 required params, no output schema), the description is complete. It covers purpose, parameters, return type, and behavioral implications, requiring no additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 100% schema coverage, the description adds value by specifying the format for record_id (15 or 18 characters) and giving examples for object_type. This helps the agent provide correct inputs without relying solely on 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 clearly states the tool's purpose: 'Permanently delete a Salesforce record.' This specific verb-resource pairing distinguishes it from sibling tools like salesforce_create_record and salesforce_update_record.

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 a clear warning about the irreversibility and Recycle Bin behavior, guiding when to use this tool (for deletion). It does not explicitly mention alternatives or when not to use, but the purpose is straightforward.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_deploy_metadataDeploy Salesforce MetadataA

Deploy a metadata component (Flow, ApexClass, ValidationRule, etc.) to the Salesforce org via the SF CLI.

Use this to create OR update declarative metadata. Salesforce deploy is upsert-style: if 'api_name' already exists in the org, this overwrites it.

Typical workflow for creating a new Flow:

  1. (Optional) salesforce_retrieve_metadata to pull an existing Flow as a template

  2. Author the Flow XML (...)

  3. Call this tool with check_only=true to validate (dry-run)

  4. Re-run with check_only=false to actually deploy

Supported metadata types: Flow, ApexClass, ApexTrigger, ValidationRule, PermissionSet, Layout, CustomObject

Args:

  • metadata_type: One of the supported types above.

  • api_name: Metadata API name, e.g. 'My_New_Flow'. Must match Salesforce naming rules.

  • xml_content: Full *-meta.xml content. For Flows, a complete document.

  • body_content: Required for ApexClass (.cls body) and ApexTrigger (.trigger body).

  • object_name: Required for ValidationRule — parent sObject (e.g. 'Account').

  • check_only: If true, validate without committing (dry-run). Default: false.

Blocked entirely when SALESFORCE_READONLY=true (including dry-runs). Requires SALESFORCE_SF_CLI_USERNAME and the Salesforce user to have metadata deploy permissions (e.g. 'Customize Application' or 'Modify Metadata Through Metadata API Functions').

Returns: Deploy status with per-component successes and failures (with error messages).

ParametersJSON Schema
NameRequiredDescriptionDefault
api_nameYesMetadata API name (e.g., My_New_Flow)
check_onlyNoValidate only (dry-run). Default: false
object_nameNoParent sObject API name — required for ValidationRule
xml_contentYesFull *-meta.xml content for the component
body_contentNoBody text — required for ApexClass (.cls) and ApexTrigger (.trigger)
metadata_typeYesMetadata type. Supported: Flow, ApexClass, ApexTrigger, ValidationRule, PermissionSet, Layout, CustomObject

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that deploy is upsert-style (overwrites existing api_name), blocked when SALESFORCE_READONLY=true (including dry-runs), and requires specific permissions. Adds context beyond annotations (readOnlyHint=false, openWorldHint=true) without contradiction.

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?

Front-loaded with a clear one-sentence summary, then organized into upsert behavior, workflow, supported types, parameter details, blocking conditions, and returns. Every sentence adds value with no 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?

Covers purpose, workflow, parameters, blocking, permissions, return status. Lacks explicit details on return format or how unused parameters are handled per metadata type, but overall comprehensive given complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds significant context beyond the 100% schema coverage: e.g., 'api_name must match Salesforce naming rules'; 'body_content required for ApexClass and ApexTrigger'; workflow guidance for check_only. Schema descriptions are adequate, but the narrative enriches understanding.

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?

Clearly states the tool deploys a metadata component to Salesforce via SF CLI, specifies upsert behavior (create or update), and lists supported types. Distinguishes from sibling tools like salesforce_retrieve_metadata (retrieve) and salesforce_create_record (records).

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?

Provides a typical workflow for creating a new Flow, including optional retrieval, authoring, dry-run, and deploy. Notes blocking when SALESFORCE_READONLY=true and required permissions. Implicitly distinguishes from similar tools by focusing on metadata deployment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_describe_objectDescribe Salesforce ObjectA
Read-onlyIdempotent

Get metadata for a Salesforce object: field names, types, labels, and whether fields are required/editable.

Use this to discover what fields are available before writing SOQL queries or creating/updating records.

Args:

  • object_type (string): The Salesforce object API name (e.g., 'Account', 'Contact', 'Opportunity__c')

  • include_picklists (boolean): Whether to include picklist values for picklist fields (default: false)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: Object metadata including:

  • All field API names, labels, and data types

  • Required fields

  • Createable and updateable flags

  • Picklist values (if requested)

ParametersJSON Schema
NameRequiredDescriptionDefault
object_typeYesSalesforce object API name (e.g., Account, Contact, Opportunity, MyCustomObject__c)
response_formatNoOutput format: 'markdown' for human-readable or 'json' for machine-readablemarkdown
include_picklistsNoWhether to include picklist values for picklist/multipicklist fields

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations, such as the ability to include picklist values and choose response format. It also explains the type of metadata returned. No contradictions with annotations (readOnlyHint=true, etc.).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with separate sections for Args and Returns, front-loading the main purpose. It is moderately sized without excessive verbosity, though some redundancy exists (e.g., repeating field details).

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?

The description is thorough for a tool with no output schema, detailing return values (field names, types, required flags, picklist values). It fully covers all parameters and provides sufficient context for effective use.

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 describes all parameters with examples and defaults. The description's Args section repeats similar information, adding little new meaning. Thus, baseline 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 clearly states it gets metadata for a Salesforce object, listing specific details like field names and types. It distinguishes itself from siblings by explicitly indicating its use before writing SOQL queries or CRUD operations, which contrasts with querying or listing objects.

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 explicitly states when to use: 'Use this to discover what fields are available before writing SOQL queries or creating/updating records.' It provides clear context for its usage, though it does not explicitly mention when not to use or alternatives like salesforce_metadata_query.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_get_limitsGet Salesforce API LimitsA
Read-onlyIdempotent

Check your Salesforce org's current API usage and remaining limits.

Returns: Key limits including:

  • DailyApiRequests: Daily REST API call quota (Max and Remaining)

  • DailyBulkApiRequests: Bulk API limits

  • Other org limits

Use this to monitor API consumption before running large batch operations.

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 indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows it's safe. The description adds value by specifying the returned data (key limits and their structure), which goes beyond the annotation hints.

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 concise and well-structured. It starts with a clear purpose sentence, then lists key returns, and ends with a usage note. Every sentence is necessary and provides value without redundancy.

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?

Given the tool's simplicity (no parameters, no output schema), the description fully covers what an agent needs: it explains what the tool does, what it returns, and when to use it. No additional context is needed.

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 the input schema coverage is 100%. With no parameters to document, the description does not need to add parameter semantics. The baseline score of 4 is appropriate as no information is missing.

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 tool name and title directly indicate it retrieves Salesforce API limits. The description explicitly states 'Check your Salesforce org's current API usage and remaining limits,' listing specific limits like DailyApiRequests and DailyBulkApiRequests. This clearly distinguishes it from sibling tools like salesforce_query or salesforce_get_record, which operate on 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 provides a clear use case: 'Use this to monitor API consumption before running large batch operations.' While it does not explicitly state when not to use it or list alternatives, the context is sufficient for an agent to decide when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_get_recordGet Salesforce RecordA
Read-onlyIdempotent

Retrieve a single Salesforce record by its ID.

Args:

  • object_type (string): The Salesforce object type (e.g., 'Account', 'Contact', 'Opportunity')

  • record_id (string): The 15 or 18-character Salesforce record ID

  • fields (string[]): Optional list of specific fields to retrieve. If empty, returns all fields.

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: The full record with all requested fields.

Examples:

  • Get an account: object_type='Account', record_id='001xx000003...'

  • Get specific contact fields: object_type='Contact', record_id='003xx...', fields=['Name','Email','Phone']

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoOptional list of field API names to retrieve. Empty means all fields.
record_idYes15 or 18-character Salesforce record ID
object_typeYesSalesforce object type (e.g., Account, Contact, Opportunity, Case, Lead)
response_formatNoOutput format: 'markdown' for human-readable or 'json' for machine-readablemarkdown

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, idempotentHint, etc. Description adds behavioral details: returns all fields if fields array empty, supports response_format options, and specifies return of the full record. No contradictions.

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?

Description is well-structured with a summary, bulleted args, returns, and examples. Every sentence is informative and there is no unnecessary text.

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?

Given the tool's simplicity and good annotations, the description covers all necessary aspects: parameters, return values, examples. No output schema, but return format is explained. Complete for a get-record operation.

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?

Schema coverage is 100% with descriptions. Description adds examples and clarifies behavior like 'If empty, returns all fields' and default response_format, adding value 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 clearly states 'Retrieve a single Salesforce record by its ID', providing a specific verb and resource. It distinguishes from sibling tools like salesforce_query (multiple records) and salesforce_describe_object (metadata) without needing explicit differentiation.

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 implies usage: when you have a record ID and need a single record. It provides clear context but does not explicitly mention when not to use (e.g., for bulk queries or metadata).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_list_objectsList Salesforce ObjectsA
Read-onlyIdempotent

List all available Salesforce objects (standard and custom) in the org.

Use this to discover what objects exist before querying or manipulating data.

Args:

  • filter (string): Optional text to filter object names/labels (case-insensitive)

  • queryable_only (boolean): If true, only return objects that support SOQL queries (default: true)

  • limit (number): Maximum number of objects to return (default: 50, max: 500)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: List of objects with their names, labels, and CRUD capabilities.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of objects to return (default: 50)
filterNoOptional text filter applied to object name or label (case-insensitive)
queryable_onlyNoIf true, only return objects that support SOQL queries
response_formatNoOutput format: 'markdown' for human-readable or 'json' for machine-readablemarkdown

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds behavioral context by describing the return value ('List of objects with their names, labels, and CRUD capabilities'), which is not covered by 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 concise with clear sections (purpose, usage, args, returns). Every sentence adds value, and the structure is well-organized for quick scanning.

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?

Given the rich annotations, full schema coverage, and no output schema, the description adequately explains the tool's behavior and return value. It is complete for an agent to understand how to use it.

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% with detailed parameter descriptions. The description in the Args section largely mirrors the schema (e.g., 'filter (string): Optional text to filter object names/labels (case-insensitive)'), adding minimal new meaning beyond what the schema already provides.

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 explicitly states 'List all available Salesforce objects (standard and custom) in the org,' using a specific verb and resource. It distinguishes this tool from siblings like salesforce_query (querying data) and salesforce_describe_object (describing a specific object), making its purpose clear.

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 says 'Use this to discover what objects exist before querying or manipulating data,' providing clear guidance on when to use it. It does not explicitly exclude scenarios, but the context of sibling tools implies alternatives for data operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_list_sandboxesList Salesforce SandboxesA
Read-onlyIdempotent

List all sandboxes registered under the production org via Tooling API SandboxInfo.

Shows both existing sandboxes and in-progress creations. For status of an in-progress creation, also check SandboxProcess records (use salesforce_metadata_query).

Args:

  • include_in_progress (bool): include SandboxProcess records for pending creations (default: true)

Returns:

  • SandboxInfo list: Id, SandboxName, LicenseType, Description, Status

  • (optional) SandboxProcess list: recent creation progress

Note: This tool must be run against the PRODUCTION org (sandboxes live under prod).

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatNomarkdown
include_in_progressNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint, idempotentHint, openWorldHint, and non-destructive. The description adds behavioral context beyond these: it explains the output includes both SandboxInfo and optionally SandboxProcess lists, and emphasizes the production org requirement. No contradictions with 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 well-structured with clear sections (Description, Args, Returns, Note). It is concise, no filler sentences, and all information is front-loaded. Every sentence adds value to the agent's understanding.

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?

Given the tool's complexity (list with optional progress tracking) and lack of output schema, the description completely covers input parameters, return types, and an important usage constraint (production org). No gaps for an AI agent to select and invoke correctly.

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?

Schema description coverage is 0%, but the description explains both parameters in the Args section: include_in_progress controls the inclusion of SandboxProcess records (default true), and response_format defaults to markdown. This adds necessary meaning that the schema lacks. The return structure is also described.

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 tool lists all sandboxes via Tooling API SandboxInfo, distinguishing it from sibling tools like salesforce_metadata_query (for SandboxProcess) and salesforce_create_sandbox (for creation). It specifies the verb 'list', the resource 'sandboxes', and the scope 'under the production org'.

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 explicit guidance: it lists sandboxes and includes in-progress creations, and suggests using salesforce_metadata_query for SandboxProcess status. The note 'must be run against the PRODUCTION org' is a crucial usage constraint. However, it does not explicitly state when not to use this tool versus alternatives like salesforce_query.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_metadata_querySalesforce Metadata QueryA
Read-onlyIdempotent

Execute a SOQL query using the Salesforce Tooling API to access metadata objects not available via standard SOQL.

Use for: ValidationRule, Flow/FlowVersionView, ApexClass/ApexTrigger, WorkflowRule, FieldDefinition.

Examples:

  • SELECT Id, ValidationName, Active, EntityDefinitionId FROM ValidationRule

  • SELECT Id, MasterLabel, Status, VersionNumber FROM Flow WHERE Status = 'Active'

  • SELECT Id, MasterLabel, Metadata FROM Flow WHERE Id = '301xx...'

  • SELECT Id, Name, Body FROM ApexClass WHERE Name = 'MyClass'

Note: Queries with Metadata or FullName fields must return exactly 1 row (use WHERE Id = '...')

ParametersJSON Schema
NameRequiredDescriptionDefault
soqlYesSOQL query string targeting Tooling API objects (e.g., SELECT Id, ValidationName FROM ValidationRule)
limitNoMaximum number of records to return (default: 20)
response_formatNoOutput format: 'markdown' for human-readable or 'json' for machine-readablemarkdown

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds critical behavioral context beyond annotations: it specifies use of the Tooling API, the restriction on Metadata/FullName fields requiring exactly one row, and implies it complements standard SOQL. No contradiction with annotations (readOnlyHint, etc.).

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 concise: a clear opening statement, targeted use cases, representative examples, and a critical constraint note. Every sentence serves a purpose with no redundancy.

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?

Given the tool's complexity and lack of output schema, the description is comprehensive. It covers purpose, applicable objects, examples, and the key single-row constraint, enabling correct agent 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 description coverage is 100%, so the baseline is 3. The description adds usage examples for the soql parameter but does not significantly enhance meaning beyond the schema for limit and response_format.

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 tool executes SOQL queries using the Salesforce Tooling API for metadata objects, with specific objects listed and examples. It distinguishes from siblings like salesforce_query by explicitly noting it accesses metadata not available via standard SOQL.

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 explicit use cases (e.g., ValidationRule, Flow) and examples, and notes the single-row constraint for Metadata/FullName fields. However, it lacks explicit 'when not to use' or comparison to alternative tools like salesforce_describe_object or salesforce_retrieve_metadata.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_querySalesforce SOQL QueryA
Read-onlyIdempotent

Execute a SOQL (Salesforce Object Query Language) query to retrieve records from Salesforce.

SOQL is similar to SQL. Example queries:

  • SELECT Id, Name, Industry FROM Account WHERE Industry = 'Technology' LIMIT 10

  • SELECT Id, Name, Email FROM Contact WHERE AccountId = '001xx000...'

  • SELECT Id, Name, StageName, Amount FROM Opportunity WHERE CloseDate = THIS_YEAR

Args:

  • soql (string): A valid SOQL query string

  • limit (number): Max records to return from results (default: 20, max: 200)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Returns: JSON: { totalSize, done, records[], nextRecordsUrl? } Markdown: Formatted table of results

Error: Returns descriptive error if query syntax is invalid or fields don't exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
soqlYesSOQL query string (e.g., SELECT Id, Name FROM Account LIMIT 10)
limitNoMaximum number of records to return (default: 20)
response_formatNoOutput format: 'markdown' for human-readable or 'json' for machine-readablemarkdown

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is handled. The description adds value by detailing return formats (JSON/Markdown), error messaging, and the default/max limit for results. This provides behavioral context 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 well-organized: first sentence states purpose, then examples, then parameter list, then return info, then error info. Every sentence adds value, and the structure is easy to parse. No fluff.

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?

Given the complexity of a SOQL query tool, the description covers all essential aspects: query language, parameters, return format, and error handling. No output schema is provided, but the text describes the return value sufficiently. It is complete for an AI agent to invoke correctly.

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?

Schema coverage is 100%, but the description adds examples and explains the soql parameter with syntax hints, the limit parameter with defaults, and the response_format parameter with format descriptions. This goes beyond the schema's basic descriptions.

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 it executes a SOQL query to retrieve records, using a specific verb ('Execute') and resource ('Salesforce records'). It provides examples of typical queries, distinguishing it from sibling tools like salesforce_get_record (single record by ID) or salesforce_search (full-text search). No ambiguity.

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 explains when to use this tool (for SOQL queries) and gives examples of valid use cases. It doesn't explicitly list when not to use it, but the sibling tools implicitly cover alternatives. The context is clear enough for an AI agent to decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_retrieve_metadataRetrieve Salesforce MetadataA
Read-onlyIdempotent

Retrieve a metadata component (Flow, ApexClass, ValidationRule, etc.) from the Salesforce org as XML via SF CLI.

Use this to:

  • Inspect an existing Flow's XML as a reference before authoring a new one

  • Fetch a component, modify the XML, then redeploy via salesforce_deploy_metadata

Supported metadata types: Flow, ApexClass, ApexTrigger, ValidationRule, PermissionSet, Layout, CustomObject

Args:

  • metadata_type: The type of metadata to retrieve

  • api_name: Metadata API name

  • object_name: Required for ValidationRule (parent sObject)

Requires SALESFORCE_SF_CLI_USERNAME. This tool is read-only — allowed even under SALESFORCE_READONLY.

Returns: The raw *-meta.xml content (and .cls/.trigger body for Apex).

ParametersJSON Schema
NameRequiredDescriptionDefault
api_nameYesMetadata API name
object_nameNoParent sObject API name — required for ValidationRule
metadata_typeYesMetadata type. Supported: Flow, ApexClass, ApexTrigger, ValidationRule, PermissionSet, Layout, CustomObject

TDQS

A4.3/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 that the tool is safe for read-only mode and specifies the return format (raw XML, .cls/.trigger body) and prerequisites (SALESFORCE_SF_CLI_USERNAME). No contradictions with 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 well-structured with a clear first line, bullet points for usage, a list of supported types, and separate sections for args, requirements, and return value. Every sentence serves a purpose, and there is no redundancy.

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?

Given no output schema, the description compensates by stating the return format. It covers all parameters, prerequisites, and usage patterns. The tool has moderate complexity, and the description provides sufficient context for an agent to select and 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 coverage is 100%, so the schema already documents each parameter. The description restates the object_name requirement but does not add new semantic information beyond what the schema provides.

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 tool retrieves a metadata component as XML via SF CLI, lists specific use cases (inspect existing Flow, fetch, modify, redeploy), and enumerates supported metadata types. This provides a specific verb+resource and distinguishes it from sibling tools like salesforce_query or salesforce_deploy_metadata.

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 explicit use cases ('Use this to:') and notes the prerequisite environment variable. While it does not explicitly exclude other contexts, the listed use cases and the context of sibling tools make it clear when to use this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

salesforce_update_recordUpdate Salesforce RecordA
Idempotent

Update fields on an existing Salesforce record.

Args:

  • object_type (string): The Salesforce object type (e.g., 'Account', 'Contact')

  • record_id (string): The 15 or 18-character Salesforce record ID

  • fields (object): Key-value pairs of field API names and their new values

Returns: Confirmation message on success.

Notes:

  • Only the provided fields are updated; other fields remain unchanged.

  • To clear a field, set its value to null.

Examples:

  • Update account industry: object_type='Account', record_id='001xx...', fields={ "Industry": "Finance" }

  • Update opportunity stage: object_type='Opportunity', record_id='006xx...', fields={ "StageName": "Closed Won", "CloseDate": "2026-03-31" }

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesField values to update as key-value pairs. Only provided fields are modified.
record_idYes15 or 18-character Salesforce record ID to update
object_typeYesSalesforce object type (e.g., Account, Contact, Opportunity)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint=false, idempotentHint=true, etc.), the description adds important behavioral details: 'Only the provided fields are updated; other fields remain unchanged' and 'To clear a field, set its value to null.' This provides valuable context for the agent.

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 well-structured with a clear summary, Args, Returns, Notes, and Examples sections. It is concise, front-loaded, and every sentence serves a purpose. No unnecessary information.

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?

Given the tool's modest complexity (3 required parameters, no output schema), the description is complete. It explains all parameters, notes on field update behavior, and provides examples. It does not cover error cases or permissions, but these are often outside the scope of a tool description.

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?

Schema coverage is 100%, so the baseline is 3. The description adds value by providing examples, clarifying record ID length (15 or 18 characters), and explaining how to clear fields with null. These details enhance understanding 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 clearly states the tool's purpose: 'Update fields on an existing Salesforce record.' It uses a specific verb ('update') and resource ('existing Salesforce record'), and it distinguishes itself from sibling tools like create, get, delete, query, and search.

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 does not explicitly state when to use this tool versus alternatives. While the name and sibling list imply its use case (modifying an existing record), there is no guidance on when not to use it or how to choose among related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a distinct purpose: CRUD operations are separate from queries, metadata operations are distinct from data operations, and sandbox management tools are unique. No overlapping functionality.

Naming Consistency4/5

All tools start with 'salesforce_' and follow a verb_noun pattern, though a few (query, search) lack a noun after the verb, but overall the pattern is predictable and consistent.

Tool Count5/5

14 tools cover a well-scoped set of Salesforce operations: CRUD, query, search, metadata, and sandbox management. Not excessive and each tool serves a clear purpose.

Completeness4/5

The surface covers essential data and metadata operations, including CRUD, query, search, deploy/retrieve metadata, and sandbox management. Minor gaps exist (e.g., bulk operations, reports), but core workflows are complete.

Maintenance

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Integrates Claude with Salesforce to enable natural language querying, modification, and management of Salesforce records and metadata. It supports comprehensive operations including object/field management, SOSL searches, and Apex code execution.
    1,965
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Integrates Claude with Salesforce for natural language interactions with Salesforce data and metadata, enabling querying, modifying, and managing objects and records.
    20
    14
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI tools like Claude Desktop and Cline to interact with Salesforce, providing tools for SOQL queries, Apex execution, metadata management, and more.
    17
    404
    43
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Connects to Salesforce and enables running SOQL queries, SOSL searches, managing records, and executing various Salesforce APIs via natural language.
    10
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sunny980123/Salesforce-MCP-Server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server