Skip to main content
Glama
advancedcommunities

Salesforce MCP Server

Salesforce MCP Server

NPM Version NPM Downloads GitHub Downloads License

What is it

Salesforce MCP Server is a Model Context Protocol (MCP) server that enables AI assistants to interact with Salesforce organizations. It provides a set of tools that allow AI models to execute Apex code, query data, describe objects, and manage Salesforce org connections through the Salesforce CLI.

NPM Package: @advanced-communities/salesforce-mcp-server

Installation

Prerequisites

The easiest way to install Salesforce MCP Server is directly from NPM using npx:

npx @advanced-communities/salesforce-mcp-server

This command will:

  • Download the latest version from NPM

  • Run the server directly without manual installation

  • Automatically handle all dependencies

Benefits of NPM Installation:

  • ✅ No manual building required

  • ✅ Always get the latest stable version

  • ✅ Automatic dependency management

  • ✅ Easy updates with npm update

  • ✅ No need to clone the repository

Option 2: MCP Bundle (MCPB) - One-Click Installation

For a fully managed installation experience:

  1. Download the latest salesforce-mcp-server.mcpb file from the releases page

  2. Double-click the .mcpb file to install

  3. The extension will be automatically configured in your AI client

  4. All dependencies will be managed automatically

Option 3: Manual Installation - Build from source

For development or customization:

  1. Clone the repository: git clone https://github.com/advancedcommunities/salesforce-mcp-server.git

  2. Navigate to the directory: cd salesforce-mcp-server

  3. Install and build: npm install && npm run build

  4. The server will be available at build/index.js

Add MCP Configuration to your client

To be able to run the MCP Server – you need a client. The client can be any AI app which supports the MCP protocol, such as:

Use it with Claude Desktop

  1. Install Claude Desktop from Anthropic.

  2. Open it up and authenticate to Claude.

  3. Edit your config file at:

    • Mac: ~/Library/Application\ Support/Claude/claude_desktop_config.json

    • Windows: C:\\Users\\YOUR_USERNAME\\AppData\\Roaming\\Claude\\claude_desktop_config.json

    If you can't find the file. Open Claude Desktop, open the Settings menu, go to the Developer section and click Edit Config inside the servers section. Open and edit this file using the instructions below.

  4. Add the following to your config file under the "mcpServers" key:

    {
        "mcpServers": {
            "salesforce-mcp-server": {
                "command": "npx",
                "args": ["@advanced-communities/salesforce-mcp-server"]
            }
        }
    }

    With environment variables (optional):

    {
        "mcpServers": {
            "salesforce-mcp-server": {
                "command": "npx",
                "args": ["@advanced-communities/salesforce-mcp-server"],
                "env": {
                    "READ_ONLY": "true",
                    "ALLOWED_ORGS": "dev,qa,staging"
                }
            }
        }
    }
  5. Restart Claude Desktop (quit & re-open the app). Now you are able to use the MCP in the Claude Desktop.

Use it with Claude Code

  1. Install Claude Code.

  2. Open it up and authenticate to Claude by runnung the claude command in your terminal.

  3. Execute one of the following commands in your terminal:

    Basic installation (local scope - default):

    claude mcp add salesforce-mcp-server npx @advanced-communities/salesforce-mcp-server

    User scope installation (recommended for global access):

    claude mcp add --scope user salesforce-mcp-server npx @advanced-communities/salesforce-mcp-server

    With environment variables:

    # Read-only mode (local scope)
    claude mcp add salesforce-mcp-server npx @advanced-communities/salesforce-mcp-server -e READ_ONLY=true
    
    # Read-only mode (user scope)
    claude mcp add --scope user salesforce-mcp-server npx @advanced-communities/salesforce-mcp-server -e READ_ONLY=true
    
    # Restrict to specific orgs (user scope)
    claude mcp add --scope user salesforce-mcp-server npx @advanced-communities/salesforce-mcp-server -e ALLOWED_ORGS=dev,qa,staging
    
    # Both restrictions (user scope)
    claude mcp add --scope user salesforce-mcp-server npx @advanced-communities/salesforce-mcp-server -e READ_ONLY=true -e ALLOWED_ORGS=production
    
    # Open orgs and records in the client's built-in browser (user scope)
    claude mcp add --scope user salesforce-mcp-server npx @advanced-communities/salesforce-mcp-server -e USE_CLIENT_BROWSER=true

    Note: By default, Claude Code installs MCP servers in local scope (current directory). Use --scope user to install globally for all projects.

Claude Code Skill

The server includes an install_skill tool that adds a Salesforce-specific skill to Claude Code. The skill teaches Claude how to effectively use all 40 tools, 5 prompts, and 5 resources together — including tool selection guidance, workflow patterns, and common pitfalls to avoid.

Automatic installation: Claude can call the install_skill tool when working on Salesforce tasks. You can also ask Claude directly: "Install the Salesforce skill."

Manual installation: Copy skills/salesforce/SKILL.md from this repository to .claude/skills/salesforce/SKILL.md in your project directory.

Once installed, the skill persists across Claude Code sessions in the project and activates automatically when working with Salesforce orgs.

Use it with Codex CLI

The Codex CLI can be configured to leverage MCP servers by defining an mcp_servers section in ~/.codex/config.toml. It is intended to mirror how tools such as Claude and Cursor define mcpServers in their respective JSON config files, though the Codex format is slightly different since it uses TOML rather than JSON, e.g.:

[mcp_servers.salesforce-mcp-server]
command = "npx"
args = ["@advanced-communities/salesforce-mcp-server"]

# Optional: Add environment variables
[mcp_servers.salesforce-mcp-server.env]
READ_ONLY = "true"
ALLOWED_ORGS = "dev,qa,staging"
USE_CLIENT_BROWSER = "true"

Use it with VS Code

  1. In VS Code, open the Command Palette by pressing Command + Shift + P or Ctrl + Shift + P.

  2. Type "MCP Add", select the MCP: Add Server option.

  3. Select Command(stdio) option.

  4. Put the npx @advanced-communities/salesforce-mcp-server into the command input.

  5. For MCP Server Id put salesforce-mcp-server.

  6. Choose either Global or Workspace installation option.

  7. (Optional) To add environment variables, manually edit the VS Code settings:

    • Open settings.json (Preferences: Open Settings (JSON))

    • Add environment variables to your MCP server configuration:

    "mcp.servers": {
      "salesforce-mcp-server": {
        "command": "npx",
        "args": ["@advanced-communities/salesforce-mcp-server"],
        "env": {
          "READ_ONLY": "true",
          "ALLOWED_ORGS": "dev,qa"
        }
      }
    }

Use it with Cursor

  1. Install Cursor

  2. Open it up and create your account and connect to a model provider

  3. Open Cursor -> Settings -> Cursor Settings -> Mcp

  4. Add new global MCP Server

  5. This will drop you into an editor of the JSON config. Fill in a value for the key salesforce-mcp-server:

    {
        "mcpServers": {
            "salesforce-mcp-server": {
                "command": "npx",
                "args": ["@advanced-communities/salesforce-mcp-server"]
            }
        }
    }

    With environment variables (optional):

    {
        "mcpServers": {
            "salesforce-mcp-server": {
                "command": "npx",
                "args": ["@advanced-communities/salesforce-mcp-server"],
                "env": {
                    "READ_ONLY": "true",
                    "ALLOWED_ORGS": "production,staging"
                }
            }
        }
    }

    If there are any existing keys under mcpServer, don't delete them. Add salesforce-mcp-server to the end.

  6. Save the file. Go back to the Cursor Settings tab. You should see salesforce-mcp-server listed and the dot should go green.

  7. Open Composer view and toggle from normal to agent (small text on bottom of input)

  8. You can now use tools

Related MCP server: Salesforce MCP Server

Configuration

The server supports the following environment variables for access control:

  • READ_ONLY=true - Prevents execution of Apex code (anonymous execution and tests)

  • ALLOWED_ORGS=ALL - Allow access to all orgs (default)

  • ALLOWED_ORGS=org1,org2,org3 - Restrict access to specific org aliases

  • USE_CLIENT_BROWSER=true - Hand org and record URLs to the AI client's built-in browser instead of launching your desktop browser (default: false)

When ALLOWED_ORGS is set, the list_connected_salesforce_orgs tool will only show orgs that match the allowed list.

Org Identifier Masking

Org identifiers are always masked before they reach the AI client; there is nothing to configure. list_connected_salesforce_orgs returns:

  • Usernames partially masked, e.g. jane.doe@example.com becomes ja***@ex***.com (sandbox suffixes such as .uat are kept as the last label)

  • Org IDs with only the 00D prefix and last 4 characters visible, e.g. 00D***********dEAA

  • Instance URLs with the scheme and Salesforce domain suffix kept and the My Domain part masked, e.g. https://acme.my.salesforce.com becomes https://ac***.my.salesforce.com. Sandbox My Domains mask the company and sandbox names separately, e.g. https://acme--uat.sandbox.my.salesforce.com becomes https://ac***--ua***.sandbox.my.salesforce.com. Suffixes such as .develop.my.salesforce.com, .scratch.my.salesforce.com and .lightning.force.com are kept; for unknown hosts only the leftmost label is masked. Paths and query strings are dropped.

  • A note field reminding the assistant to use aliases as targetOrg, since masked usernames cannot be used to target an org

Aliases, isDevHub and apiVersion are not masked. Production/sandbox/scratch categorization is done on the raw values before masking.

The default org is reported by alias only. get_default_org, the defaultOrg field of get_server_permissions and the salesforce://permissions resource return the alias of the CLI's target-org, even when it's configured as a username (the org's first alias is used). If the default org has no alias, they return a masked username and get_default_org asks you to set an alias. Usernames, org IDs and instance URLs of the default org are never returned. Tools still run against the real default org.

When a tool runs against the default org, the targetOrg it echoes back (in text and structured output), its access-denied message and the prompts' text use the same alias-only form, never the raw username.

Other places identifiers are masked:

  • login_into_org, logout, open (desktop browser mode) and display_user mask the username, org ID and instance/login URLs in the CLI result. open in desktop mode also drops the path and login token from the returned URL, since the browser is already open. In client browser mode, open and open_record still return the real pre-authenticated URL, because the client's browser needs it.

  • The salesforce://org/{alias}/metadata resource and the org_health_check prompt return masked usernames, org IDs and instance URLs.

  • Usernames listed in ALLOWED_ORGS are masked in the tool's permissionMessage, in the server description, in access-denied messages, and in the allowedOrgs value returned by get_server_permissions and the salesforce://permissions resource.

  • Error messages from list_connected_salesforce_orgs and MCP log notifications (for example the CLI commands the server runs) are scrubbed of usernames, org IDs and URLs.

  • Resource alias completions suggest aliases only.

Orgs without an alias can't be targeted by the assistant, so set one first:

sf alias set myOrg=user@example.com

Use Client's Built-in Browser

Some AI clients ship their own browser. Set USE_CLIENT_BROWSER=true to keep Salesforce inside that browser instead of popping open your desktop one. Verified with the Claude Cowork and ChatGPT desktop apps; it also works with any client that has a browser tool attached, such as the Chrome DevTools or Playwright MCP servers.

{
    "mcpServers": {
        "salesforce-mcp-server": {
            "command": "npx",
            "args": ["@advanced-communities/salesforce-mcp-server"],
            "env": {
                "USE_CLIENT_BROWSER": "true"
            }
        }
    }
}

In MCPB installs the same option appears as the Use Client's Built-in Browser checkbox in the extension settings.

What changes when it is enabled:

  • open and open_record no longer launch a browser. They return a pre-authenticated Salesforce URL (generated with sf org open --url-only) together with openInClientBrowser: true, so the assistant can navigate to it with its own browser tool.

  • The server advertises the mode in its MCP instructions, which clients surface to the assistant, so it knows to open the returned URL rather than print it.

  • open and open_record accept forceSystemBrowser: true to launch your desktop browser for that one call.

  • Passing browser or privateMode to open counts as asking for your desktop browser, so the org opens there even while the mode is active — neither option means anything to the client's browser.

  • login_into_org is unaffected — the Salesforce CLI OAuth flow always uses your desktop browser.

The returned URL contains a single-use Salesforce login token minted by Salesforce (/services/oauth2/singleaccess) and valid for up to one minute. It logs whoever opens it into the org as you, so treat it like a credential: it is meant for the client's browser tool, not for chat logs or third parties.

Open one link before asking for the next. Salesforce caches the token for the life of that minute, so URLs generated back to back can carry the same token with different destinations, and navigating several in quick succession may drop the browser on a login page instead of the record you asked for. Once the first link has signed the browser in, that session carries the login — ordinary Salesforce URLs work from then on without a token.

Client browser mode is reported by the get_server_permissions tool and the salesforce://permissions resource as useClientBrowser.

Default Org

All tools that interact with a Salesforce org accept an optional targetOrg parameter. When targetOrg is not provided, the server automatically resolves the default org from your Salesforce CLI configuration.

To set a default org:

sf config set target-org <alias-or-username>

To check which org is currently set as default:

sf config get target-org

When a default org is configured, you can use any tool without specifying targetOrg — the server will use the default automatically. If no targetOrg is provided and no default org is configured, the tool will return an error asking you to either provide targetOrg or set a default.

You can check the current default org via the get_server_permissions tool, which includes its alias in its response.

Permission Examples

Read-only access to all orgs:

{
    "mcpServers": {
        "salesforce-mcp-server": {
            "command": "npx",
            "args": ["@advanced-communities/salesforce-mcp-server"],
            "env": {
                "READ_ONLY": "true"
            }
        }
    }
}

Full access to specific orgs only:

{
    "mcpServers": {
        "salesforce-mcp-server": {
            "command": "npx",
            "args": ["@advanced-communities/salesforce-mcp-server"],
            "env": {
                "ALLOWED_ORGS": "dev,qa,staging"
            }
        }
    }
}

Read-only access to specific orgs:

{
    "mcpServers": {
        "salesforce-mcp-server": {
            "command": "npx",
            "args": ["@advanced-communities/salesforce-mcp-server"],
            "env": {
                "READ_ONLY": "true",
                "ALLOWED_ORGS": "production,prod-backup"
            }
        }
    }
}

You can check the current permission settings using the get_server_permissions tool.

How to use it

Once the SF MCP Server is configured in your AI client, you can interact with Salesforce using natural language. The AI assistant will have access to 40 powerful tools, 5 guided workflow prompts, 5 browsable resource types, and structured logging with progress reporting:

Available Tools

1. List Connected Salesforce Orgs

View all Salesforce orgs currently authenticated with the Salesforce CLI. Usernames, org IDs and instance URLs are masked (see Org Identifier Masking).

Example prompts:

  • "Show me all connected Salesforce orgs"

  • "List my available Salesforce organizations"

  • "Which Salesforce orgs can I access?"

2. List Objects in an Org

Retrieve all standard and custom objects available in a specific Salesforce org.

Example prompts:

  • "List all custom objects in my dev org"

  • "Show me all objects in the production org"

  • "What custom objects exist in sandbox1?"

3. Describe an Object

Get detailed metadata about a specific Salesforce object, including fields, relationships, and properties.

Example prompts:

  • "Describe the Account object in my org"

  • "Show me all fields on the Custom_Object__c in dev org"

  • "What are the relationships on the Contact object?"

4. Execute Apex Code

Run anonymous Apex code directly in a Salesforce org and see the debug output.

Example prompts:

  • "Execute this Apex in my dev org: System.debug('Hello World');"

  • "Run a query in Apex to count all Accounts"

  • "Execute Apex code to create a test Account record"

5. Query Records

Execute SOQL queries and retrieve results in JSON format.

Example prompts:

  • "Query the first 10 Accounts from my org"

  • "Find all Contacts with email domain '@example.com'"

  • "Get Opportunities closed this month with amount over $10,000"

  • "Query all Case records created today"

6. Query Records to File

Execute SOQL queries and save results to CSV or JSON files.

Example prompts:

  • "Export all Leads to a CSV file"

  • "Save all Opportunities from Q4 2024 to a JSON file"

  • "Create a CSV export of Accounts with their related Contacts"

7. Run Apex Tests

Execute Apex test classes with various options including test level and code coverage.

Example prompts:

  • "Run all tests in my dev org"

  • "Execute the AccountTriggerTest class with code coverage"

  • "Run all local tests excluding managed packages"

8. Get Apex Test Results

Retrieve results from a previous asynchronous Apex test run.

Example prompts:

  • "Get the results of test run ID 707xx0000000001"

  • "Show me the code coverage from the last test run"

9. Get Apex Code Coverage

Get code coverage information for a Salesforce org.

Example prompts:

  • "What's the overall code coverage in my org?"

  • "Show code coverage from the latest test run"

10. Generate Apex Class

Generate metadata source files for a new Apex class.

Example prompts:

  • "Generate a new Apex class called AccountHelper"

  • "Create an Apex controller class named MyCustomController"

  • "Generate a batch class called DataCleanupBatch in the classes directory"

11. Generate Apex Trigger

Generate metadata source files for a new Apex trigger.

Example prompts:

  • "Generate a trigger called AccountTrigger for the Account object"

  • "Create a before insert trigger for the Contact object"

  • "Generate an after update trigger for MyCustomObject__c"

12. List Apex Logs

Fetch and list Apex debug logs from the org.

Example prompts:

  • "Show me all Apex debug logs in my dev org"

  • "List the recent debug logs from production"

  • "Get the IDs of debug logs in sandbox"

13. Get Apex Log

Fetch specific Apex debug logs or recent logs from the org.

Example prompts:

  • "Get the debug log with ID 07L...."

  • "Show me the last 5 debug logs from my org"

  • "Fetch the most recent debug log from production"

14. Login to Salesforce Org

Authenticate and login to a Salesforce org via web browser.

Example prompts:

  • "Login to a new production org with alias 'prod'"

  • "Connect to a sandbox with alias 'dev-sandbox'"

15. Get Server Permissions

Check current server permission settings.

Example prompts:

  • "Show me the current server permissions"

  • "What orgs am I allowed to access?"

16. Run Code Analyzer

Analyze your code with configurable rules to ensure good coding practices.

Example prompts:

  • "Run code analyzer on all Apex classes"

  • "Analyze my Lightning Web Components for security issues"

  • "Check PMD rules on the force-app directory"

17. List Code Analyzer Rules

List available rules for code analysis.

Example prompts:

  • "Show me all available code analyzer rules"

  • "List security-related code analysis rules"

  • "What ESLint rules are available?"

18. Scanner Run

Scan a codebase with various security and quality rules using multiple engines.

Example prompts:

  • "Scan all Apex files for security vulnerabilities"

  • "Run PMD and ESLint scanners on my codebase"

  • "Check for retire-js vulnerabilities in my JavaScript files"

  • "Scan with high severity threshold and save results to CSV"

19. Scanner Run DFA

Run Salesforce Graph Engine for data flow analysis to identify complex security issues.

Example prompts:

  • "Run data flow analysis on my Apex controllers"

  • "Check for SOQL injection vulnerabilities using Graph Engine"

  • "Perform path-based security analysis on all Apex classes"

  • "Run DFA with pilot rules enabled"

20. Assign Permission Set

Assign permission sets to one or more org users.

Example prompts:

  • "Assign the DreamHouse permission set to the admin user in my dev org"

  • "Grant CloudHouse and AppBuilder permission sets to user@example.com"

  • "Assign multiple permission sets to a list of users in sandbox"

21. Assign Permission Set License

Assign permission set licenses to org users.

Example prompts:

  • "Assign the Sales Cloud license to user@example.com"

  • "Grant Service Cloud permission set license to multiple users"

  • "Assign Platform Event license to the admin user"

22. Display User

Display information about a Salesforce user including profile, org ID, and access details.

Example prompts:

  • "Show me information about the admin user in my org"

  • "Display user details for user@example.com"

  • "Get the profile and access token for the current user"

23. List Metadata

List metadata components and properties of a specified type.

Example prompts:

  • "List all CustomObject components in my org"

  • "Show me all Dashboard components in the Sales folder"

  • "Get all EmailTemplate metadata with API version 60.0"

  • "List Layout components and save to a file"

24. List Metadata Types

Display details about all metadata types enabled for your org.

Example prompts:

  • "Show me all available metadata types in my org"

  • "List metadata types for package.xml creation"

  • "Get all enabled metadata types with API version 60.0"

  • "Display metadata types and save to file for reference"

25. Logout

Log out of a Salesforce org, removing stored authentication.

Example prompts:

  • "Logout from my dev org"

  • "Remove authentication for sandbox1"

  • "Logout from all connected orgs"

26. Open

Open a Salesforce org in your browser. With USE_CLIENT_BROWSER=true it returns a pre-authenticated URL for the client's built-in browser instead; pass forceSystemBrowser: true to launch your desktop browser anyway.

Example prompts:

  • "Open my dev org in Chrome"

  • "Open the Lightning Experience page in my sandbox"

  • "Open my org in private/incognito mode"

  • "Open a Visualforce page /apex/MyPage in production"

  • "Open my FlexiPage in Lightning App Builder"

  • "Open my dev org in my own browser, not yours"

27. Open Record

Open a specific Salesforce record in the browser. With USE_CLIENT_BROWSER=true it returns a pre-authenticated URL for the client's built-in browser instead; pass forceSystemBrowser: true to launch your desktop browser anyway.

Example prompts:

  • "Open record 001XX0000XXXXX in my dev org"

  • "Navigate to Account record 001... in production"

  • "Show me the Contact record 003... in the browser"

28. Create Record

Create a new record in a Salesforce org using the REST API.

Example prompts:

  • "Create a new Account with Name 'Acme Corp' and Type 'Customer'"

  • "Insert a Contact record with FirstName 'John' and LastName 'Doe'"

  • "Create a Case with Subject 'Technical Issue' and Priority 'High'"

  • "Add a new Lead with Company 'Tech Startup' and Email 'lead@example.com'"

29. Update Record

Update an existing record in a Salesforce org using the REST API.

Example prompts:

  • "Update Account 001XX... to set BillingCity to 'San Francisco'"

  • "Change the Status of Opportunity 006XX... to 'Closed Won'"

  • "Update Contact 003XX... with Phone '(555) 123-4567'"

  • "Modify Case 500XX... to set Priority to 'Critical'"

30. Delete Record

Delete a record from a Salesforce org using the REST API.

Example prompts:

  • "Delete the Account record 001XX..."

  • "Remove Contact 003XX... from the org"

  • "Delete Lead record 00QXX..."

  • "Remove the test Case record 500XX..."

31. Package Install

Install or upgrade a package version in a Salesforce org.

Example prompts:

  • "Install package 04tXXXXXXXXXXXXXX in my dev org"

  • "Upgrade the package with ID 04t... in production with 10 minute wait time"

  • "Install a protected package with key 'mykey123' in sandbox"

  • "Install package and compile only package Apex code"

  • "Upgrade unlocked package and deprecate removed components"

32. Package Uninstall

Uninstall a second-generation package from a Salesforce org.

Example prompts:

  • "Uninstall package 04tXXXXXXXXXXXXXX from my dev org"

  • "Remove the package with alias 'old_package' from production"

  • "Uninstall package and wait 5 minutes for completion"

  • "Remove package with spaces in alias from sandbox"

33. Schema Generate Tab

Generate metadata source files for a new custom tab on a custom object.

Example prompts:

  • "Create a tab for MyObject__c with icon 54 in the tabs directory"

  • "Generate a custom tab for Invoice__c object with icon 25"

  • "Add a navigation tab for Customer__c with icon 75 in force-app/main/default/tabs"

  • "Create a tab for Product__c custom object with default icon"

34. Search Records

Execute SOSL text-based searches across multiple objects. This is the primary tool for finding records that mention or contain specific text across your Salesforce org.

Example prompts:

  • "Search for 'Anna Jones' in all Name fields"

  • "Find records containing 'Acme' across all objects"

  • "Search for phone number '415-555-1234' in Contact and Lead"

  • "Find all records mentioning our competitor 'Acme Corp' across Accounts, Opportunities, and Cases"

  • "Execute SOSL: FIND {Smith} IN ALL FIELDS RETURNING Contact, Lead"

35. Generate Lightning Component

Generate Lightning Web Components (LWC) or Aura components with configurable templates and output directories.

Example prompts:

  • "Generate a Lightning Web Component called AccountList"

  • "Create an Aura component named ContactForm in the components directory"

  • "Generate an LWC with analyticsDashboard template called SalesMetrics"

  • "Create a Lightning component MyCustomView with default template"

36. Deploy Metadata to Org

Deploy metadata components to a Salesforce org with various configuration options including test execution.

Example prompts:

  • "Deploy all metadata from force-app directory to my dev org"

  • "Validate deployment to production with all tests but don't save (dry run)"

  • "Deploy specific Apex classes matching 'Account*' pattern to sandbox"

  • "Deploy using package.xml manifest with RunLocalTests"

  • "Deploy metadata and run specific test classes: TestClass1, TestClass2"

37. Get Default Org

Get the alias of the current default target org configured in the Salesforce CLI. This is the org used automatically when no targetOrg is specified. Only the alias is returned; if the default org has no alias, a masked username is returned with a prompt to set one (sf alias set <alias>=<username>).

Example prompts:

  • "What is my default Salesforce org?"

  • "Show me the current default target org"

  • "Which org am I connected to by default?"

38. Set Default Org

Set the default target org for the Salesforce CLI. Once set, all tools will use this org when no targetOrg is specified.

Example prompts:

  • "Set my default org to dev-sandbox"

  • "Change the default target org to production"

  • "Make 'staging' my default Salesforce org"

39. Clear Default Org

Clear the default target org from the Salesforce CLI configuration. After clearing, all tools will require an explicit targetOrg parameter.

Example prompts:

  • "Clear the default Salesforce org"

  • "Remove the default target org setting"

  • "Unset my default org"

40. Install Skill

Install the Salesforce MCP Server skill for Claude Code, providing domain-specific guidance on tool usage, workflows, and best practices.

Example prompts:

  • "Install the Salesforce skill"

  • "Set up the Salesforce MCP skill for Claude Code"

  • "Reinstall the Salesforce skill with force"

Available Resources

The server exposes MCP Resources that clients can browse and include in conversations for contextual data about your Salesforce orgs.

#

Resource

URI

Description

1

Server Permissions

salesforce://permissions

Current server permission settings (read-only mode, allowed orgs, default org)

2

Org Metadata

salesforce://org/{alias}/metadata

Org metadata summary with available metadata types

3

Org Objects

salesforce://org/{alias}/objects

List of all standard and custom SObjects in the org

4

Object Schema

salesforce://org/{alias}/object/{name}

Detailed schema for a specific SObject (fields, relationships, record types)

5

Org Limits

salesforce://org/{alias}/limits

API limits and usage (daily API calls, storage, governor limits)

Resources support autocomplete for org aliases and object names. Template resources (2-5) respect the ALLOWED_ORGS permission setting.

Available Prompts

The server provides MCP Prompts — templated workflows that appear as slash commands in clients like Claude Desktop. They fetch live org data and guide the AI through common Salesforce tasks.

#

Prompt

Arguments

Description

1

soql_builder

objectName (required), targetOrg

Describe an SObject and interactively build a SOQL query step by step

2

apex_review

className (required), targetOrg

Fetch an Apex class from the org and perform a structured code review

3

org_health_check

targetOrg

Fetch org info, API limits, and test coverage to assess org health

4

deploy_checklist

targetOrg

Generate a pre-deployment readiness checklist with live org data

5

debug_apex

targetOrg, logId

Fetch and analyze an Apex debug log for errors and performance issues

All prompts respect the ALLOWED_ORGS permission setting and use the default org when targetOrg is not provided.

Practical Examples

Example 1: Data Analysis

User: "I need to analyze our customer data. First, show me what custom objects we have in the production org."

AI: [Lists all custom objects]

User: "Great! Now query all Customer__c records created this year and export them to CSV."

AI: [Executes query and creates CSV file]

Example 2: Debugging

User: "I'm having issues with a trigger. Can you execute this Apex to test it:
List<Account> accs = [SELECT Id, Name FROM Account LIMIT 5];
for(Account a : accs) {
    System.debug('Account: ' + a.Name);
}"

AI: [Executes the code and shows debug logs]

Example 3: Schema Documentation

User: "I need to document our data model. Can you describe the Order__c object including all its fields and relationships?"

AI: [Provides detailed object metadata]

Logging

The server emits structured MCP log messages (notifications/message) with typed severity levels and named loggers. Clients that support the MCP logging capability will receive these messages automatically.

Logger names: salesforce, cli, permissions

Log levels used:

  • debug — CLI command execution details

  • info — Server startup and general status

  • warning — Permission denials

  • error — Command failures and connection errors

  • critical — Authentication/auth-info failures

Clients can set a minimum log level via the logging/setLevel request to filter out lower-severity messages.

Progress Reporting

Long-running tools report real-time progress via MCP progress notifications (notifications/progress). Clients that include a progressToken in _meta when calling a tool will receive progress updates with step messages.

Tools with progress reporting:

  • deploy_start — Resolving target org → Validating permissions → Deploying metadata

  • run_apex_tests — Resolving target org → Validating permissions → Running Apex tests

  • scanner_run — Validating permissions → Running scan

  • scanner_run_dfa — Validating permissions → Running data flow analysis

  • run_code_analyzer — Validating permissions → Running code analysis

  • query_records_to_file — Resolving target org → Validating permissions → Exporting records to file

Progress is reported as fire-and-forget notifications and will never interrupt tool execution. Clients that don't provide a progress token will not receive any notifications.

Elicitation (User Confirmation)

Destructive operations request user confirmation via MCP elicitation before proceeding. When a client supports elicitation, the server will prompt the user with a confirmation dialog before executing the operation.

Tools that request confirmation:

  • delete_record — Confirms before permanently deleting a Salesforce record

  • package_uninstall — Confirms before uninstalling a package from the org

  • logout — Confirms before logging out of a specific org or all orgs

  • deploy_start — Confirms before deploying metadata (skipped for dry-run/validation-only deployments)

Elicitation degrades gracefully: if the client does not support elicitation, or the server has not been initialized, operations proceed without confirmation. This ensures backward compatibility with all MCP clients.

Completions (Argument Auto-Complete)

Prompt arguments and resource URI variables support auto-completion via the MCP Completions API. When a client sends a completion/complete request, the server returns matching suggestions.

Prompt argument completions:

  • targetOrg — All 5 prompts auto-complete with connected org aliases filtered by ALLOWED_ORGS

  • objectName (soql_builder) — Auto-completes with SObject API names from the resolved target org

Resource URI completions:

  • {alias} — All template resources auto-complete with connected org aliases

  • {name} (org_object_schema) — Auto-completes with SObject names from the resolved org

Completions are powered by the SDK's completable() wrapper and require no additional client configuration.

Server Title & Icon

The server provides a human-readable title ("Salesforce MCP Server") and an embedded icon in its metadata. Clients that support the MCP Implementation metadata (SDK 1.25+) will display the server name and icon in their UI. Tool-level icons are not currently supported by the MCP SDK.

Structured Tool Output

The following tools support MCP structured output (outputSchema + structuredContent) for programmatic result parsing:

  • query_records — returns { targetOrg, records }

  • sobject_list — returns { targetOrg, sobjects }

  • sobject_describe — returns { targetOrg, name, label, fields, childRelationships, recordTypeInfos, ... }

  • list_connected_salesforce_orgs — returns { devHubOrgs, production, sandboxes, scratchOrgs, totalOrgs, permissionMessage?, note } (usernames, org IDs and instance URLs always masked)

  • get_apex_test_results — returns { targetOrg, summary, tests, codecoverage }

Clients that support the MCP outputSchema capability will receive validated structured data in addition to the text content. All tool schemas are advertised with the JSON Schema 2020-12 dialect so that clients validating outputSchema with a 2020-12-only validator accept them.

Tips for Best Results

  1. Specify the Target Org: Always mention which org you want to work with (e.g., "in my dev org", "using production")

  2. Be Specific with Queries: Provide field names and conditions for SOQL queries

    • Good: "Query Account records with Type = 'Customer' and show Id, Name, and CreatedDate"

    • Less specific: "Get some Accounts"

  3. Object Names: You can use either user-friendly names or API names - the AI assistant will use the describe tools to find the correct API names

    • Both work: "Query Custom Object records" or "Query Custom_Object__c records"

    • The assistant will automatically resolve field names too

  4. Apex Code Formatting: When providing Apex code, you can use code blocks or inline code

  5. File Exports: Specify the format (CSV or JSON) when exporting query results

Troubleshooting

"No orgs found": Make sure you have authenticated orgs using sf org login

"Object not found": Verify the object exists and you're using the correct API name

"Query error": Check your SOQL syntax and field names

"Apex execution failed": Review the debug logs for specific error messages

"Tool ... has an invalid outputSchema: JSON Schema declares an unsupported dialect": Update to the latest server version — tool schemas are now published as JSON Schema 2020-12 instead of draft-07

Security Considerations

  • The server executes commands with the permissions of the authenticated Salesforce user

  • While client browser mode is enabled, open and open_record return URLs that contain a one-time Salesforce login token — whoever opens one first is logged in as you, so keep them out of shared logs and tickets

  • Be cautious when executing DML operations in production orgs

  • Review Apex code before execution, especially in production environments

  • Consider using sandbox orgs for testing and development

Building MCP Bundle (MCPB) Locally

If you want to build the MCP Bundle file yourself:

  1. Clone the repository and navigate to the salesforce-mcp-server directory

  2. Install dependencies: npm install

  3. Build the MCPB file: npm run build:mcpb

  4. The .mcpb file will be created in the dist/ directory

  5. Share this file with others for easy one-click installation

For more details about MCP Bundles, see MCPB.md

Available Tools

40 tools
apex_get_logB
Read-onlyIdempotent

Fetch the specified log or given number of most recent logs from the org.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered by structured data. The description adds only the org-wide scope ('from the org'); it says nothing about log size, truncation, or return format, so it adds limited value 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?

A single tight sentence with the two operating modes front-loaded and no filler. Nothing is wasted, though it is arguably too terse for a tool whose sibling overlap and return semantics need clarification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with annotations covering safety and a schema documenting each nested field, the description is minimally adequate. It leaves the return value shape (log content vs metadata) and the relationship to the sibling apex_log_list unexplained, which matters because no output schema exists.

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 description conveys that either a specific log or a count of recent logs can be requested, which maps onto logId vs recentLogsNumber. But the schema's nested properties already carry the real parameter documentation (including the pointer to apex_get_logs for IDs and the targetOrg default behavior), so the description adds little beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Fetch) and resource (log) and clarifies the two modes: a specific log by ID or the N most recent logs. However it does not differentiate itself from the sibling apex_log_list, which appears to serve a similar listing purpose, so an agent cannot tell the two apart from the description alone.

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?

No when-to-use guidance is given. There is no mention of how this differs from apex_log_list, nor any prerequisite or context such as needing a log ID first (that hint lives only in the schema's logId description). The agent must infer usage entirely.

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

apex_log_listB
Read-onlyIdempotent

Fetch the list of apex debug logs returning the logs with their IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so safety and idempotency are covered. The description adds only that log IDs are returned; it says nothing about pagination, result limits, or how the default-org fallback affects scope.

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?

A single compact sentence with the action front-loaded. The trailing clause about IDs is slightly redundant but still informative and wastes little space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/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 no output schema this is close to adequate, but it omits pagination/limits and any hint about the default-org behavior that the schema only partially documents.

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

Parameters2/5

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

There is one parameter (targetOrg) with schema-level description coverage reported at 0%, and the description adds no information about it at all. Baseline for one undocumented parameter is low, and nothing here compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: fetches the list of Apex debug logs, and notes the return includes IDs. It implicitly contrasts with the singular sibling apex_get_log, but never names it, so the differentiation is left to inference.

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 word 'list' implies bulk retrieval as opposed to getting one log, which is enough to separate it from apex_get_log in practice. However, there is no explicit when-to-use, no mention of prerequisites (debug logging must be enabled), and no stated alternative.

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

assign_permission_setC
Destructive

Assign a permission set to one or more org users. To specify an alias for the --target-org or --on-behalf-of flags, use the CLI username alias, such as the one you set with the 'alias set' command. Don't use the value of the Alias field of the User Salesforce object for the org user. To assign multiple permission sets, specify multiple names in the permissionSetNames array. Enclose names that contain spaces in the array elements. The same syntax applies to onBehalfOf array for specifying multiple users.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations declare destructiveHint=true, idempotentHint=false, openWorldHint=true, so the safety profile is covered by structured data. The description adds useful domain context about CLI username aliases vs the User Alias field, which is not in annotations. However, it doesn't state that the operation requires specific permissions, nor mention the destructive/non-idempotent nature explicitly.

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

Conciseness3/5

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

The core assignment sentence is front-loaded, which is good, but the remaining sentences are dense and somewhat repetitive about alias vs Alias field and array syntax, adding length without proportionate clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation tool with no output schema and 0% schema coverage, the description omits prerequisites (permissions needed, org authentication), irreversibility, and what happens on partial failure. The alias-domain detail is present, but the risk-relevant information is not.

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 0%, so the description must compensate. It does explain that permissionSetNames accepts multiple names and that onBehalfOf accepts multiple users with the same syntax, plus alias-vs-Alias-field guidance. But it does not explain targetOrg semantics beyond the schema's own description, and the array element syntax guidance is partial – much of the parameter meaning still rests on the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb+resource: 'Assign a permission set to one or more org users.' The sibling assign_permission_set_license is not mentioned, so it lacks explicit differentiation, but the purpose itself is unambiguous.

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?

No guidance on when to use this tool versus assign_permission_set_license or other permission-related siblings. The description explains CLI alias syntax mechanics but never says when this tool is the right choice.

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

assign_permission_set_licenseB
Destructive

Assign a permission set license to one or more org users. To specify an alias for the --target-org or --on-behalf-of flags, use the CLI username alias, such as the one you set with the 'alias set' command. Don't use the value of the Alias field of the User Salesforce object for the org user. To assign multiple permission set licenses, specify multiple names in the licenseNames array. Enclose names that contain spaces in the array elements. The same syntax applies to onBehalfOf array for specifying multiple users.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds a genuinely useful behavioral caveat (use the CLI username alias, not the User object's Alias field) but says nothing about required permissions, re-assignment behavior, or reversibility.

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 purpose is front-loaded in the first sentence, and every subsequent sentence carries syntax detail. Slight verbosity and mild redundancy in the closing sentence about onBehalfOf, but nothing that fails to earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation with nested parameters and no output schema, the description covers the input syntax well but omits operational context such as permission requirements and what happens when a license is already assigned. Adequate but with clear gaps.

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?

Top-level schema description coverage is 0% for the sole 'input' wrapper, and the description compensates with real added meaning: alias semantics for targetOrg/onBehalfOf, repeated-array syntax for licenseNames, and quoting rules for names containing spaces. It goes beyond what the nested property descriptions convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Assign a permission set license') plus scope ('one or more org users'). It is clear what the tool does, but it never distinguishes itself from the sibling assign_permission_set, which is a subtly different operation an agent could easily confuse with this one.

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?

There is no guidance on when to use this tool versus assign_permission_set or any alternative, and no prerequisites or when-not conditions are given. The only usage-flavored text concerns alias and array syntax, which is parameter mechanics rather than tool selection.

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

clear_default_orgA
DestructiveIdempotent

Clear the default target org from the Salesforce CLI configuration. After clearing, all tools will require an explicit targetOrg parameter until a new default is set.

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 flag destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful beyond-annotation context: the effect on subsequent tool invocations requiring explicit targetOrg. It doesn't state whether the prior default is recoverable, which would round it out.

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, front-loaded with the action and followed immediately by the consequence; no filler.

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 no-argument mutation whose safety profile is carried by annotations and which returns no structured output, the description supplies everything an agent needs, including the cross-tool impact.

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?

Zero parameters, so the baseline is 4; there is nothing for the description to clarify on the input side.

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?

Specific verb (clear) plus resource (default target org in Salesforce CLI config), clearly distinguishing it from siblings set_default_org and get_default_org. An agent can pick this correctly without opening a schema.

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 downstream consequence ('all tools will require an explicit targetOrg parameter until a new default is set') gives clear operational context for when this is appropriate, but it never names the alternative (set_default_org) or an explicit when-not condition.

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

create_recordB
Destructive

Create a new record in a Salesforce org using the REST API. Returns the ID of the created record on success. Input must be a JSON object with keys: sObject (string), recordJson (string), and optionally targetOrg (string).

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, readOnlyHint=false, and openWorldHint=true, so the safety profile is covered. The description usefully adds that it returns the created record ID on success and that it operates over REST. It does not disclose failure modes, required permissions, or how invalid recordJson is handled, so it adds only modest value over 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.

Conciseness4/5

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

Two sentences, front-loaded with the core action and return value. The third element (enumerating input keys) is mildly redundant with the schema but still short. No wasted prose overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description correctly notes the ID is returned. However, it omits permissions/auth requirements and error behavior, and no output schema exists to cover return semantics. Adequate but with visible gaps.

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 description restates the parameter keys (sObject, recordJson, targetOrg) already documented in the nested schema. Because the nested properties carry rich descriptions (field API names, default org behavior, sobject_list/sobject_describe hints), the description's summary is largely redundant rather than additive. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (create a new record in a Salesforce org) plus the implementation (REST API) and the success return value (the created record's ID). The create action is inherently distinguishable from siblings like update_record and delete_record by name, though the description never explicitly contrasts them.

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?

No when-to-use guidance, no prerequisites, and no named alternatives. It never says when to call this versus update_record/query_records, or that a target org must be authenticated. The only procedural hints (run sobject_list/sobject_describe first) live in the schema, not the description.

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

delete_recordA
Destructive

Delete a record from a Salesforce org using the REST API. Permanently removes the specified record. Input must be a JSON object with keys: sObject (string), recordId (string), and optionally targetOrg (string).

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true. The description reinforces this with 'Permanently removes the specified record,' clarifying irreversibility, but adds no permission requirements, error behavior, or confirmation semantics beyond what the annotations imply.

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?

Three sentences, front-loaded with purpose and the destruction warning, then parameter shape. The final parameter enumeration is slightly redundant with the schema but earns its place given the nested structure and low reported coverage.

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 mutation with full annotation coverage and no output schema, the description covers purpose, irreversibility, and parameter shape. It stops short of permissions requirements or behavior when the record ID is invalid/missing, which would matter for a permanent delete.

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 description enumerates the nested keys (sObject, recordId, optionally targetOrg) and flags which are required, which is valuable given the nested object and the reported 0% schema description coverage at the top level. It does not restate the format hints (15/18-char ID, API name examples) that the nested 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?

States a specific verb (delete) and resource (Salesforce record) plus the mechanism (REST API). The destructive verb inherently separates it from siblings create_record and update_record, so an agent can route correctly without opening a schema.

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?

No when-to-use, when-not-to-use, or alternative guidance is given. It never mentions update_record or create_record as alternatives, nor any precondition such as confirming the record exists first. Usage must be entirely inferred from the verb.

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

deploy_startC
Destructive

Deploy metadata to Salesforce org with test execution options.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, openWorldHint=true, idempotentHint=false, and readOnlyHint=false, so the mutation/safety profile is conveyed structurally. The description adds essentially nothing beyond that - no note that deployment is long-running, async, returns a deploy id, or modifies the target org's live metadata.

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?

One compact sentence with no filler and the core action front-loaded. It is appropriately sized, though its brevity contributes to the gaps noted elsewhere rather than being a stylistic flaw.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world, non-idempotent deploy operation with no output schema, the description omits essential context: authentication/default-org requirement, asynchronous/long-running behavior, and what happens to existing org metadata. An agent could invoke it but with meaningful blind spots.

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 single top-level parameter is a nested object whose inner properties carry their own detailed schema descriptions (tests, dryRun, manifest, testLevel, sourceDirectory, etc.). The description only alludes to 'test execution options' and adds no semantics of its own, so it neither compensates for nor enhances the schema - baseline 3 for a rich nested schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (Deploy) and resource (metadata to a Salesforce org), which is clear at a glance. It does not distinguish itself from adjacent siblings such as package_install or run_apex_tests, so it stops short of a 5.

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?

There is no guidance on when to use this versus alternatives like package_install, run_apex_tests, or execute_anonymous_apex, and no prerequisites (e.g., needing an authenticated/default org) are stated. 'With test execution options' hints at the testLevel/tests parameters but not when to pick them.

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

display_userB
Read-onlyIdempotent

Display information about a Salesforce user. Output includes the profile name, org ID, access token, instance URL, login URL, and alias if applicable. The username, org ID, instance URL and login URL are masked for privacy. The displayed alias is local and different from the Alias field of the User sObject record of the new user, which you set in the Setup UI.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered. The description adds genuinely useful behavior: which fields are returned and that username/org ID/URLs are masked for privacy. However, the final alias sentence is muddled ('...of the new user'), which undermines clarity rather than adding it.

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

Conciseness3/5

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

The first two sentences are well front-loaded and earn their place. The trailing sentence about the alias is long, tangential, and confusing, weakening an otherwise efficient description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema, describing the returned fields and masking is the right move. But the definition omits any auth/org-context behavior (what happens when no targetOrg is given is only in the schema) and the alias note confuses rather than completes the picture.

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 description never mentions targetOrg, so it adds nothing about the single parameter's semantics; the schema's nested targetOrg description (fallback to SF CLI default) does carry that meaning. Reported description coverage is low, but the schema does document the param, so this is a baseline 3 rather than a full gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Display information about a Salesforce user.' An agent can distinguish this from list_connected_salesforce_orgs or get_default_org. It stops short of naming when this is preferred over those siblings, but the resource is unambiguous.

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?

No explicit when-to-use guidance and no alternatives named, despite many sibling org/user tools (get_default_org, list_connected_salesforce_orgs, sobject_describe). The reader must infer the context from the description alone.

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

execute_anonymous_apexB
Destructive

Execute Apex code in a Salesforce Org. This command allows you to run Apex code directly against a specified Salesforce Org. The code is executed in the context of the Org, and the results are returned in JSON format. You can use this command to test Apex code snippets, run batch jobs, or perform other Apex-related tasks. You can review the debug logs of the execution to see the results of the code execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds the JSON return format and the availability of debug logs, which is genuinely useful since there is no output schema, but it never cautions that arbitrary Apex can mutate Org data.

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

Conciseness3/5

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

Four sentences that repeat the core idea ('Execute Apex code' then 'allows you to run Apex code directly') and close with vague filler about 'other Apex-related tasks.' Front-loading is decent but the padding dilutes it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an arbitrary-code-execution tool with no output schema but strong destructive annotations, the description covers return format and debug logging but omits any caution about irreversible Org mutations and says nothing about the parameters. Adequate but with clear gaps.

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

Parameters2/5

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

The description never mentions the code or targetOrg parameters in text, and reports 0% schema description coverage, so the description does not compensate for the gap. 'Against a specified Salesforce Org' only faintly hints at targetOrg, while the required code argument is not addressed at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Execute Apex code in a Salesforce Org') and clarifies that execution happens in the target Org context. It is clear on its own but never differentiates itself from the closely related sibling run_apex_tests, which an agent must choose between.

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?

Offers implied usage contexts ('test Apex code snippets, run batch jobs, or perform other Apex-related tasks') but gives no when-not guidance and never names an alternative tool for those cases. The agent is left to infer that this is for ad-hoc/anonymous scripts rather than tests.

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

generate_classC
Destructive

Generates the Apex *.cls file and associated metadata file. These files must contained in a parent directory called "classes" in your package directory. Either run this command existing directory of this name, or use the --output-dir flag to generate one or point to an existing one.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the agent knows this is a writing, non-idempotent operation. The description adds the directory-placement constraint but never says whether an existing class file of the same name is overwritten — the single most important behavioral fact for a destructive generator.

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

Conciseness3/5

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

Purpose is front-loaded in one clean sentence, which is good. But the follow-up is garbled ('Either run this command existing directory of this name'), wasting space on awkward and partly unparseable instructions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world generator with no output schema and effectively undocumented nested parameters, the description omits overwrite semantics, success/failure reporting, and reliable parameter naming. What an agent needs in order to call this safely is not covered.

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

Parameters2/5

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

Schema coverage is reported at 0% for a nested input object, so the description must compensate. Instead it introduces a CLI-style '--output-dir' flag name that does not match the schema's 'outputDir', and says nothing about the 40-character/letter-start rule for the required name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: generates the Apex *.cls file plus its metadata file. That distinguishes it from generate_component and generate_trigger by artifact type, though the description never names those siblings to route the agent explicitly.

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 only guidance is about file placement (files 'must' live in a parent 'classes' directory, or use the flag to create/point to one). There is no when-to-use statement, no prerequisites, and no comparison against alternative generators.

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

generate_componentC
Destructive

Generate Lightning Web Components (LWC) or Aura components with customizable templates and output directories

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, openWorldHint=true, and idempotentHint=false, so the safety profile is covered. However, the description adds nothing beyond that: it does not say whether existing files are overwritten, what files are created, or that it writes to the local filesystem — important for a destructive, non-idempotent generator.

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?

A single efficient sentence with no filler, front-loading the verb and resource. It is appropriately sized, though it is perhaps too terse for the scope of what the tool does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent file-generating tool with no output schema, the description omits overwrite behavior, what artifacts are produced, and any prerequisites. Annotations cover the safety flags but leave these operational questions unanswered.

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 nested schema actually documents all four sub-parameters in detail (name length limits, type values aura/lwc, template values, outputDirectory semantics), despite the reported 0% coverage metric. The description adds no parameter-level meaning, so the schema carries the burden and baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Generate) and resource (Lightning Web Components / Aura components) with scope modifiers (templates, output directories). It is distinguishable from siblings like generate_class and generate_trigger, though the shared 'generate_*' family pattern is not explicitly contrasted.

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?

No guidance on when to choose this over generate_class, generate_trigger, or schema_generate_tab, and no prerequisites (e.g., whether a default org or login is required) are stated. The agent must infer usage entirely from the name.

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

generate_triggerB
Destructive

Generates the Apex trigger *.trigger file and associated metadata file. These files must be contained in a parent directory called "triggers" in your package directory. Either run this command from an existing directory of this name, or use the --output-dir flag to generate one or point to an existing one. If you don't specify the --sobject flag, the .trigger file contains the generic placeholder SOBJECT; replace it with the Salesforce object you want to generate a trigger for. If you don't specify --event, "before insert" is used.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

B3.2/5.0
Behavior2/5

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

Annotations declare destructiveHint=true and idempotentHint=false, yet the description never addresses whether existing files are overwritten or how conflicts are handled — the single most important behavior for a generator with those hints. It explains file placement but not the destructive/irreversible implications.

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?

Four sentences, each earning its place about file location, defaults, and placeholder behavior. Front-loaded with the generation action and reasonably free of padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a file-generating tool with no output schema and nested params, the description covers location and default behavior but omits overwrite semantics, return value, and the mismatch around the nonexistent --event flag. Annotations already flag destructiveness but the description should confirm 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 reported at 0% for the top-level 'input' object, so the description must carry meaning, and it does map '--output-dir' to outputDir and '--sobject' to sObjectName. But it references a '--event' flag with a 'before insert' default that does not exist as a parameter in the schema, which is misleading.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Generates the Apex trigger *.trigger file and associated metadata file.' It's clearly distinguishable in content from a generic action, but it never differentiates itself from the closely related siblings generate_class and generate_component, all of which produce source files.

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?

It gives contextual instructions about where files must live ('a parent directory called triggers') and how to use --output-dir, which is genuinely useful usage guidance. However, it offers no when-to-use/when-not guidance relative to generate_class/generate_component and no prerequisites such as org auth.

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

get_apex_code_coverageA
Read-onlyIdempotent

Get code coverage information for a Salesforce Org. This command allows you to retrieve org-wide coverage percentage or coverage details from a specific test run. Use this to monitor and ensure your code meets the 75% coverage requirement.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the from-tests/org-wide distinction and the conditional requirement of a test run ID, but says nothing about output shape, latency, or org permissions.

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?

Three compact sentences, front-loaded with the core action, then the two modes, then the motivating use case. No filler, though the third sentence is optional context.

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 read-only query tool with well-documented nested params and annotations covering safety, the description is nearly sufficient; the absence of an output schema means return values need not be spelled out. Only the lack of routing guidance against sibling tools leaves a small gap.

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?

Top-level coverage is 0% because the schema wraps everything in a nested 'input' object, but the nested properties themselves carry full descriptions (targetOrg default behavior, testRunId requirement, coverageType enum). The description reinforces the two coverage modes but adds no syntax or format detail beyond the nested schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('get code coverage information for a Salesforce Org') and distinguishes its two modes (org-wide percentage vs. coverage from a specific test run). It doesn't explicitly differentiate from siblings like get_apex_test_results, but the purpose is unambiguous.

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?

Gives a context for use ('monitor and ensure your code meets the 75% coverage requirement') but does not say when to prefer this over adjacent tools such as get_apex_test_results or run_apex_tests, nor any exclusion conditions.

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

get_apex_test_resultsA
Read-only

Retrieve results from a previous asynchronous Apex test run. Use this command with a test run ID to get detailed test results including pass/fail status, error messages, stack traces, and optionally code coverage information.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
testsYes
summaryYes
targetOrgYes
codecoverageNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already carry the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower; the description adds useful content about what is retrieved (pass/fail status, error messages, stack traces, optional coverage). It omits the polling nuance implied by idempotentHint=false — that an async run may still be in progress and results may be incomplete.

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, with the core action front-loaded and the returned payload enumerated second. Nothing needs trimming.

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?

With an output schema present, the description need not detail return values, and it covers the async-retrieval workflow adequately. The one gap is the targetOrg behavior (default-org fallback), which is only discoverable from the schema.

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 description matches the schema's testRunId and codeCoverage semantics without adding syntax or format detail beyond them, and it never mentions the targetOrg selector, which the schema documents. With the schema carrying the parameter burden, this is baseline-level.

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?

States a specific verb (Retrieve) and resource (results from a previous asynchronous Apex test run), with the scope narrowed to an existing run rather than starting one. This cleanly separates it from sibling run_apex_tests and from get_apex_code_coverage.

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?

"Use this command with a test run ID" states the prerequisite (a previously executed async run) and what the ID is for. It does not explicitly name an alternative tool or a when-not condition, so it stops short of full routing guidance.

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

get_default_orgA
Read-onlyIdempotent

Get the current default target org configured in the Salesforce CLI. Returns only the org's alias, which is used as the default when no targetOrg is specified in other tool calls. If the default org has no alias, a masked username is returned with a hint asking the user to set an alias; usernames, org IDs and instance URLs are never returned.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false. Beyond that, the description discloses non-obvious output behavior: only the alias is returned, a username-less org yields a masked username plus an alias hint, and usernames, org IDs and instance URLs are never returned. This is exactly the kind of detail annotations cannot convey.

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?

Three tight sentences, front-loaded with the core action, then the return-value contract. No filler or redundancy; each sentence adds a distinct fact.

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?

With no output schema, the description must define the return value, and it does so precisely (alias, or masked username plus hint, with explicit exclusions). For a zero-parameter read tool with full annotation coverage, nothing an agent needs is missing.

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 takes zero parameters, so the baseline is 4. There is nothing for the description to add on parameter semantics, and it correctly does not invent any.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the current default target org configured in the Salesforce CLI') with clear scope. The read-only framing implicitly separates it from set_default_org and clear_default_org, but no sibling is named explicitly, so sibling differentiation is left to inference.

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 notes the alias 'is used as the default when no targetOrg is specified in other tool calls', which implies the context in which this lookup matters. It gives no explicit when-not guidance and never points to alternatives such as set_default_org, clear_default_org, or list_connected_salesforce_orgs.

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

get_server_permissionsC
Read-onlyIdempotent

Get current server permission settings

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond that — no mention of auth requirements, whether the read is org-scoped, or what the permission settings actually represent. With annotations doing all the work, the description contributes no extra behavioral context.

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?

A single short sentence with no filler; appropriately sized for a no-argument read tool. It is front-loaded with the verb, though it is too terse to carry much structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read operation the description is minimally viable, but there is no output schema, so the agent gets no signal about what the returned permission settings look like or in what scope they apply. That gap is small but real.

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?

Zero parameters, so there is nothing for the description to clarify beyond what the empty schema already implies. Baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a verb and resource ("Get current server permission settings"), so the agent knows it's a read of permission configuration. However, "server permission settings" is vague — it doesn't say which server, which scope of permissions, or how it differs from permission-related siblings like assign_permission_set or list_metadata. The purpose is identifiable but not sharp.

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?

No when-to-use guidance, no prerequisites, and no mention of alternatives among the many sibling tools. The agent must infer from the name alone whether this is the right tool for inspecting permissions versus assigning them.

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

install_skillA
Idempotent

Install the Salesforce MCP Server skill for Claude Code into the current working directory (.claude/skills/salesforce/SKILL.md). The skill provides domain-specific guidance on how to effectively use all 40 Salesforce tools, 5 prompts, and 5 resources together. Once installed, the skill persists across Claude Code sessions in this project and helps Claude choose the right tools, chain them into workflows, and avoid common Salesforce mistakes.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and the description is consistent with them (it writes a file and persists). It adds useful context beyond the annotations: the precise file path written and cross-session persistence, though it omits what happens on failure or whether the write is project-scoped vs global.

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 action and destination are front-loaded in the first sentence, followed by rationale and persistence. Four sentences are close to ideal; the benefit list is slightly padded but each sentence contributes 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?

For a single-parameter install tool with annotations covering the safety profile and no output schema, the description gives enough to call it correctly: what it writes, where, and that it persists. Only the return/failure semantics are left implicit, which is a minor gap.

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?

There is effectively one parameter (force), which the input schema documents clearly, but the description never mentions it or the overwrite/skip behavior. Per the baseline rule, when the schema carries the parameter documentation the description need not repeat it, so a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (install the Salesforce MCP Server skill) and pins down the exact destination (.claude/skills/salesforce/SKILL.md), so the action is unambiguous. It does not explicitly distinguish itself from superficially similar siblings like package_install, but the Claude Code skill framing makes the intent clear.

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?

It conveys the benefit (domain guidance for the 40 tools, 5 prompts, 5 resources) and persistence, implying this is a one-time setup step for a project. However, it never states when an agent should call it versus alternatives, nor any prerequisite such as being in the right project directory.

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

list_code_analyzer_rulesA
Read-onlyIdempotent

List available code analysis rules with details. Use to determine rules for code-analyzer run command.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safe read-only profile is covered. The description adds nothing beyond 'with details' – no note on how rule discovery scopes to workspace vs config file, or on result volume/pagination.

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 the purpose front-loaded and the downstream use immediately after. Nothing is wasted and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool, the essentials are present, but with a nested schema and no output schema the description never explains that the returned rules are the input vocabulary for run_code_analyzer, leaving the selection mechanism (selector, view, target) implicit.

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

Parameters2/5

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

The description gives no guidance on the five nested inputs (view, target, workspace, configFile, ruleSelector) and reports 0% schema description coverage at the top level, so it does not compensate. Although the nested schema properties do carry their own descriptions, the tool-level description adds no parameter meaning of its own.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'List available code analysis rules with details.' It also implicitly separates itself from the sibling run_code_analyzer by naming that tool's run command as the downstream consumer, though it never names the sibling explicitly by tool name.

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?

'Use to determine rules for code-analyzer run command' gives a clear triggering context, tying discovery to a subsequent analysis run. It stops short of stating when NOT to use it or naming alternatives by tool name, so it falls just below the top bar.

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

list_connected_salesforce_orgsA
Read-onlyIdempotent

List connected Salesforce Orgs. This command retrieves a list of all Salesforce Orgs that are currently connected to the Salesforce CLI. The results are returned in JSON format, providing details about each Org, including its alias, username, and other metadata. Use this command to see which Salesforce Orgs you have access to and can interact with using the Salesforce CLI. Usernames, org IDs and instance URLs in the result are masked for privacy; refer to orgs by alias when passing targetOrg to other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteYes
sandboxesYes
totalOrgsYes
devHubOrgsYes
productionYes
scratchOrgsYes
permissionMessageNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive, open-world behavior, so the bar is lower. The description still adds non-obvious value by disclosing that usernames, org IDs, and instance URLs are masked for privacy, and that orgs should be referenced by alias when passed to targetOrg elsewhere.

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?

Four sentences, front-loaded with the core action, and the privacy/alias caveat is well-placed at the end. The first two sentences restate the same idea slightly, costing a bit of tightness.

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?

With an output schema present and no parameters, the description need not explain return values; instead it supplies the one thing the schema cannot - the masking caveat and alias convention. Nothing an agent needs to call and use this tool is missing.

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 takes zero parameters, so the baseline is 4. The description correctly implies no input is required and instead guides how the output identifiers should be used downstream.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List connected Salesforce Orgs') and clarifies the scope as Orgs connected to the Salesforce CLI. It is clearly distinguishable from write/mutation siblings, though it does not explicitly name related read tools like get_default_org.

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?

'Use this command to see which Salesforce Orgs you have access to and can interact with' gives an implied usage context, but there are no when-not conditions, prerequisites, or named alternatives among the many sibling org tools. Adequate but leaves routing to inference.

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

list_metadataA
Read-onlyIdempotent

List the metadata components and properties of a specified type. Use this command to identify individual components in your manifest file or if you want a high-level view of particular metadata types in your org. For example, you can use this command to return a list of names of all the CustomObject or Layout components in your org, then use this information in a retrieve command that returns a subset of these components. The username that you use to connect to the org must have the Modify All Data or Modify Metadata Through Metadata API Functions permission.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: the required org permission ('Modify All Data or Modify Metadata Through Metadata API Functions') is exactly the kind of auth detail annotations cannot convey.

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?

Three sentences, front-loaded with the core action, followed by usage context and then the permission caveat. No filler and each sentence carries distinct 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?

For a read-only listing tool with full annotation coverage and no output schema, the description supplies the purpose, workflow, and auth prerequisite. The only real gap is that it does not clarify the non-metadataType parameters, but that is comparatively minor.

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 reported at 0%, so the description must compensate. It adds meaning for metadataType by naming example values (CustomObject, Layout) but says nothing about folder, targetOrg, apiVersion, or outputFile, leaving most of the nested input object unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List the metadata components and properties of a specified type.' It distinguishes itself implicitly from the sibling list_metadata_types (which returns types, not components of a type), though it never names that sibling explicitly.

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?

Gives clear usage context: identify components in a manifest or get a high-level view of a metadata type, and describes the follow-on workflow ('then use this information in a retrieve command that returns a subset of these components'). No explicit exclusions or alternative tool named, so it falls short of a 5.

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

list_metadata_typesA
Read-onlyIdempotent

Display details about the metadata types that are enabled for your org. The information includes Apex classes and triggers, custom objects, custom fields on standard objects, tab sets that define an app, and many other metadata types. Use this information to identify the syntax needed for a element in a manifest file (package.xml). The username that you use to connect to the org must have the Modify All Data or Modify Metadata Through Metadata API Functions permission.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint, idempotent, non-destructive, open world). The description adds genuinely useful context beyond them: the required Modify All Data / Modify Metadata Through Metadata API Functions permission and that output can be directed to a file for manifest extraction.

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?

Three front-loaded sentences that each carry information; only minor filler ('and many other metadata types'). Permission requirement is placed last, which is sensible.

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 read-only listing tool with no output schema and only one (nested) input object, the description covers purpose, use case, and auth prerequisites adequately. A note on the return shape would be a minor improvement.

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 description adds no meaning about targetOrg, apiVersion, or outputFile; that role is left to the schema's own sub-property descriptions. With the stated 0% coverage metric, the description does not compensate, so it sits at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: displaying details about metadata types enabled for the org, and enumerates examples (Apex classes, custom objects, tab sets). It is distinguishable from the sibling list_metadata, though the distinction is implied rather than explicit.

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?

Provides a clear use case: identifying the syntax needed for a <name> element in a package.xml manifest. It also states the required permission level. It does not, however, explicitly contrast this tool with list_metadata or note exclusions.

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

login_into_orgA
Destructive

Authenticate and login to a Salesforce org via web browser. This command opens a browser window for OAuth authentication flow, allowing you to securely connect to a Salesforce org. After successful authentication, the org credentials are stored locally by the Salesforce CLI for future use. Use isProduction=true for production/developer orgs (login.salesforce.com) or isProduction=false for sandboxes/scratch orgs (test.salesforce.com). The alias parameter creates a convenient shorthand name for accessing this org in subsequent commands. IMPORTANT: This tool requires both 'alias' and 'isProduction' parameters to be provided before execution - do not proceed until all required parameters are supplied.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true, openWorldHint=true, and non-idempotent, and the description adds real context: a browser window opens for OAuth and credentials are persisted locally by the CLI. That interactive/persistent side effect is valuable and not derivable from the annotations alone, though auth prerequisites and failure behavior remain unstated.

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?

Purpose, flow, and parameter guidance are front-loaded and readable. The trailing IMPORTANT sentence largely restates the required-parameter fact already implied earlier, which is mild 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?

There is no output schema, so the description must carry the return/behavior burden, and it explains the interactive flow and local credential storage. Given the browser-based, stateful nature of the tool, more detail on timing/timeout or what happens on failure would help, but the essentials are present.

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 reported at 0%, so the description must compensate, and it does explain alias semantics (shorthand for subsequent commands) and isProduction semantics (login.salesforce.com vs test.salesforce.com). It does not address the nested 'input' wrapper object, so it is not fully complete.

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 (authenticate and login to a Salesforce org) and clarifies the mechanism (via web browser / OAuth). This clearly distinguishes it from siblings like logout, list_connected_salesforce_orgs, and set_default_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?

It gives explicit selection criteria for the isProduction flag (production/developer vs sandbox/scratch), which is genuine when-to-use guidance. However, it never names sibling alternatives (e.g., list_connected_salesforce_orgs, set_default_org) or when NOT 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.

logoutA
Destructive

Log out of a Salesforce org. Use targetOrg to logout of a specific org, or set all to true to logout of all orgs. The logout is performed with --no-prompt flag to avoid confirmation prompts. Be careful! If you log out of a scratch org without having access to its password, you can't access the scratch org again, either through the CLI or the Salesforce UI.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds real context beyond that: the --no-prompt flag behavior and the irreversibility warning for scratch orgs whose passwords are unavailable. It does not describe the response, but for a logout that is minor.

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?

Four sentences, each earning its place: purpose, parameter routing, execution behavior, and the critical irreversibility warning. The warning is placed last where it lands hardest, and nothing is redundant.

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 nested-object tool with no output schema, the description covers purpose, parameter semantics, execution behavior (--no-prompt) and the key destructive consequence. Return value is undocumented, which is a small gap for a tool whose result is essentially success/failure.

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?

With schema description coverage reported at 0%, the description must carry the parameter burden, and it does: it explains the meaning and interaction of targetOrg and all, including that omitting both causes failure. The nested-object shape is not elaborated further, keeping it below a 5.

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?

States a specific verb and resource ('Log out of a Salesforce org') that cleanly distinguishes it from the sibling login_into_org. An agent immediately knows the operation without opening the schema.

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 routes the agent between the two modes: 'Use targetOrg to logout of a specific org, or set all to true to logout of all orgs.' It covers the failure condition when neither is set. It lacks an explicit statement of when not to use the tool (e.g. vs. clear_default_org), so it stops short of a 5.

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

openA
Read-onlyIdempotent

Open your Salesforce org in a browser. To open a specific page, specify the portion of the URL after 'https://mydomain.my.salesforce.com' as the path value. Use sourceFile to open ApexPage, FlexiPage, Flow, or Agent metadata from your local project in the associated Builder.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds behavior annotations do not capture: that this launches a client-side browser, that path values are appended to the org domain, and that sourceFile routes into a metadata-specific Builder rather than a generic page.

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?

Three sentences, front-loaded with the core action, and each sentence adds a distinct mode or constraint. No filler or restatement of the tool name.

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?

With no output schema, the description still conveys the observable outcome (a browser opens the org or a Builder). It covers the two primary invocation paths adequately; the only gap is that it does not clarify the return payload or whether the call blocks until the browser launches.

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 description coverage signal is 0% at the top level, so the description carries real weight — it explains the expected shape of path (the portion after 'https://mydomain.my.salesforce.com') and constrains sourceFile to ApexPage, FlexiPage, Flow, or Agent metadata. The remaining parameters (browser, targetOrg, privateMode, forceSystemBrowser) are only documented inside the schema, not the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — opening a Salesforce org in a browser — and extends it to two concrete modes (a URL path, or a local metadata file in its Builder). It is clearly not a CRUD tool, but it never explicitly distinguishes itself from the sibling open_record, which an agent must infer.

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?

It gives conditional usage for the two main modes ('To open a specific page, specify...', 'Use sourceFile to open...'), which is genuinely helpful routing. However, there is no statement of when NOT to use it, no mention of open_record as the alternative for record pages, and no prerequisites (e.g., an authenticated/default org) beyond what the schema implies.

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

open_recordB
Read-onlyIdempotent

Opens a Salesforce record in a browser.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds the one behavior not in annotations (that it triggers a browser launch), but says nothing about whether it returns a URL, blocks, or errors when no org is authenticated.

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?

A single short sentence, front-loaded with the verb and resource, with no padding. It is arguably too terse for a tool with side effects, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering safety and no output schema to reconcile, the definition is minimally adequate for a browser-launch tool. It still omits what the caller gets back and how it behaves against a default vs explicit org, which matters given the targetOrg parameter.

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 reported top-level coverage is 0% (the wrapper 'input' object is undescribed), but the nested schema actually documents recordId, targetOrg defaulting behavior, and forceSystemBrowser in detail, so the structured data carries the semantics. The description itself adds no parameter information at all, so it earns only the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (opens) and resource (a Salesforce record) plus the mechanism (in a browser), which is enough for an agent to know what happens. However, it does nothing to distinguish itself from the sibling tool named 'open', so a sibling-aware agent gets no help here.

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?

There is no guidance on when to use this versus the sibling 'open' tool, versus querying/displaying a record, or any prerequisite (e.g. needing a logged-in org). Usage must be inferred entirely from the name.

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

package_installB
Destructive

Install or upgrade a package version in a Salesforce org. Supports both package IDs (04t) and aliases with various configuration options.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, openWorldHint=true, and readOnlyHint=false, so the mutation/safety profile is covered. The description does not add beyond that: it never mentions that installs are long-running (hence the wait/publishWait minutes), that org auth or an installation key may be required, or what happens to existing components on upgrade. Some added value (04t vs alias support) but no real behavioral disclosure.

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?

Two sentences, front-loaded with the action, no redundancy. The trailing phrase 'with various configuration options' is vague filler that earns little, keeping it short of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, potentially slow, multi-option installation tool with no output schema, the definition covers the core action but omits invocation-relevant context: the required nesting under 'input', the default-org fallback behavior, and any indication of what is returned or how failures surface. The rich nested schema compensates for parameter gaps, but behavioral context remains thin.

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 nested schema documents all nine options in detail (apexCompile, upgradeType, securityType, installationKey, waits), so the parameter burden is largely carried by the schema rather than the description. However, the top-level 'input' wrapper is undocumented in both the schema and the description, and the description's claim of 'various configuration options' is vague rather than naming the meaningful knobs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (install/upgrade), the resource (package version), and the target system (Salesforce org), which cleanly separates it from the sibling package_uninstall. It notes accepted identifier forms (04t IDs or aliases), but never names or contrasts any sibling explicitly, so differentiation is inferred rather than stated.

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?

There is no guidance on when to choose this over alternatives (e.g., package_uninstall or deploy_start), no prerequisites such as being logged into a target org, and no exclusions. The agent is left to infer everything about selection context from the tool name.

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

package_uninstallC
Destructive

Uninstall a second-generation package from the target org. Specify the package ID (starts with 04t) or alias for the package to uninstall.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, covering the safety profile. The description adds that this is for 'second-generation' packages and specifies the target org, but does not elaborate on side effects, permissions, reversibility, or rate limits beyond what annotations state.

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 two sentences, front-loaded with the core purpose and followed by a parameter hint. It is efficient with no wasted words, though it could be slightly more informative without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no output schema and incomplete parameter coverage, the description is insufficient. It lacks usage guidance, does not mention authentication or permission requirements, does not describe the wait parameter's effect, and provides no information about failure modes or confirmation steps.

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

Parameters2/5

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

Schema description coverage is reported as 0%, so the description must compensate. It only explains the packageId parameter (format and alias) and omits the other three parameters (wait, targetOrg, apiVersion). Moreover, the packageId information duplicates what is already in the nested schema description, adding little new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Uninstall') and resource ('second-generation package from the target org'), making the purpose clear. It implicitly distinguishes itself from the sibling 'package_install', but does not explicitly name alternatives or scope limitations.

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?

There is no guidance on when to use this tool versus alternatives, nor any prerequisites or conditions. The only hint is the implied use case of uninstalling a package, but no explicit when/when-not instructions are provided.

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

query_recordsA
Read-onlyIdempotent

Query records from a SINGLE Salesforce object using structured field conditions. Use this for precise queries on ONE object with specific field criteria (e.g., Status = 'Open', Amount > 1000). NOT for text searches across multiple objects - use search_records for that. This executes SOQL queries with SELECT, WHERE, ORDER BY, and LIMIT clauses on a single SObject. The results are returned in JSON format. IMPORTANT: Always execute the sobject_list tool first to understand which objects are available in the org, and optionally execute sobject_describe for the specific SObject to understand its fields and structure before querying.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
recordsYes
targetOrgYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds real context beyond that: it discloses that SOQL SELECT/WHERE/ORDER BY/LIMIT are executed and that results come back as JSON. It does not mention pagination or query limits, which keeps it from a 5.

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?

Front-loads the core purpose and the exclusion before the implementation detail. Some redundancy – the caps-lock SINGLE/ONE/IMPORTANT and the SOQL clause sentence restate earlier content – but every sentence is functional.

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?

An output schema exists so return values need not be explained, and annotations cover the safety profile. The description supplies the routing, prerequisites, and query-capability context an agent needs. Minor gap: no mention of result limits or default-org resolution for targetOrg.

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 reported at 0%, so the description must carry parameter meaning. It does convey the WHERE/ORDER BY/LIMIT clause semantics and the prerequisite for knowing the SObject, but it says nothing about targetOrg (default org behavior) or the shape of selectClause beyond what's obvious. Partial compensation only.

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?

States a specific verb+resource (query records from a SINGLE Salesforce object) with scope and gives concrete examples of conditions. It explicitly names the sibling it is not (search_records for cross-object text search), so the agent can disambiguate without opening either schema.

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?

Gives explicit when-to-use (precise queries on one object with field criteria), when-not (text searches across multiple objects), the named alternative, and a sequencing prerequisite (run sobject_list first, optionally sobject_describe). Nothing is left to inference.

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

query_records_to_fileA
Read-only

Query records from a Salesforce SObject and save to a file. This command allows you to execute a SOQL query against a specified Salesforce SObject in a given Org and save the results to a file. You can specify the SELECT clause (fields, functions like COUNT(), aggregations, etc.), an optional WHERE clause, and save the results in various formats. The results can be saved in CSV format by default, or in other formats if specified. IMPORTANT: Always execute the sobject_list tool first to understand which objects are available in the org, and optionally execute sobject_describe for the specific SObject to understand its fields and structure before querying.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds that the operation writes a file (a side effect not captured by annotations) and that CSV is the default format, but omits where files land and whether an existing file is overwritten — notable for a file-writing tool.

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

Conciseness3/5

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

The core purpose is front-loaded, but the text repeats itself — 'save the results to a file' is restated twice and CSV-default is stated redundantly with the schema default. Several sentences could be merged without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should clarify what the call returns (a path, a summary, a confirmation) — it does not, saying only that results are saved. Prerequisites and format options are well covered, but the post-write behavior and file destination are left unspecified for a tool whose whole point is producing a file.

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 reported at 0% for the single top-level 'input' parameter, so the description must compensate, and it does: it explains the SELECT clause can hold fields, functions like COUNT(), and aggregations, that WHERE is optional, and that format defaults to CSV. It covers the main nested fields but does not mention orderBy, targetOrg, or outputFileName.

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?

States a specific verb+resource+terminal action: query a Salesforce SObject and save to a file. This distinguishes it from the sibling query_records, which returns results rather than persisting them. An agent can tell what it produces without opening the schema.

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 instructs running sobject_list first and optionally sobject_describe before querying, which is real prerequisite guidance. It does not, however, state when to prefer this over the sibling query_records or search_records, so the routing choice between query tools is left implicit.

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

run_apex_testsB
Destructive

Run Apex tests in a Salesforce Org. This command allows you to execute unit tests with various options including test level, specific classes, suites, and code coverage collection. Tests can be run synchronously or asynchronously. Use this to validate your Apex code and ensure proper test coverage.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare destructiveHint, openWorldHint, and non-idempotent, so the safety profile is covered. The description adds the sync/async execution choice, which is useful behavioral context, but it says nothing about runtime cost, wait semantics, or how results are surfaced, and does not contradict 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.

Conciseness3/5

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

Front-loaded with the core action, but four sentences with redundancy — 'Run Apex tests' and 'execute unit tests with various options' restate the same idea, and the option list duplicates the nested schema. One or two sentences would suffice.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a test-runner with no output schema and rich nested parameter docs, the description covers the main option surface adequately. However, it omits the follow-up path (get_apex_test_results) and any note on execution timing/results, leaving the agent with an incomplete picture of the end-to-end flow.

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?

Top-level schema coverage is 0% (single 'input' wrapper), but the nested properties carry rich descriptions including mutual-exclusion rules (--tests vs --class-names vs --suite-names). The description only lists the option categories at a high level and adds no semantics beyond the nested schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Run Apex tests in a Salesforce Org') and names the concrete options involved (test level, classes, suites, coverage). It is clear what the tool does, though it never explicitly contrasts itself with the sibling get_apex_test_results, so sibling differentiation is only implicit.

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?

Provides implied usage ('Use this to validate your Apex code and ensure proper test coverage') but gives no when-not conditions and never points to alternatives such as get_apex_test_results for retrieving results or execute_anonymous_apex. The agent must infer the workflow.

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

run_code_analyzerA
Destructive

Analyze code for quality and security issues. Run list_code_analyzer_rules first to select appropriate rules for ruleSelector parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

A3.5/5.0
Behavior2/5

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

Annotations declare destructiveHint=true, openWorldHint=true, readOnlyHint=false and idempotentHint=false, but the description describes only analysis and never discloses side effects (e.g., outputFile writes) or that engines/config files on disk can be touched. With annotations carrying the safety profile, the description still adds almost no behavioral context.

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, no filler, with the core purpose front-loaded and the prerequisite following immediately. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nested-object tool with no output schema and destructive/open-world annotations, the description omits return format, side effects, and supported engines. The rule-selector routing is helpful but only partially covers what an agent needs before invoking 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?

The top-level 'input' object has no schema description (0% coverage at the parameter level), yet the nested properties are documented in the schema. The description adds value only for ruleSelector by pointing to list_code_analyzer_rules for valid values; target, workspace, severity, configFile and outputFile are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Analyze code') plus the scope of analysis ('quality and security issues'). It is clearly distinguishable from siblings like list_code_analyzer_rules or scanner_run, though it does not explicitly contrast itself with scanner_run.

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?

Gives an explicit prerequisite workflow: run list_code_analyzer_rules first to pick rules for ruleSelector. It does not state when-not to use it or how it differs from scanner_run/scanner_run_dfa, but the ordering guidance is concrete and actionable.

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

scanner_runC
Destructive

Scan codebase with security and quality rules. Defaults to all rules if none specified.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

C2.6/5.0
Behavior1/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, but the description's 'Scan codebase' strongly implies a read-only analysis operation. This contradiction is not resolved by any side-effect disclosure (e.g., outfile writes), so the behavioral profile is misleading.

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, front-loaded, no filler. It tells the core action and one default in minimal size.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex scanner with many nested configuration options and no output schema, the description omits when to use it versus siblings like run_code_analyzer or scanner_run_dfa, and gives no sense of output or side effects. The annotations alone are not enough to make this complete.

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

Parameters2/5

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

Context reports schema description coverage is 0% for the single input object, so the description must compensate. It adds only 'Defaults to all rules if none specified,' leaving the numerous nested engines, formats, and config parameters unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb 'Scan' and resource 'codebase' are specific, and 'security and quality rules' clarifies the domain. However, it does not distinguish this from sibling scanners such as scanner_run_dfa or run_code_analyzer.

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 only states a parameter default ('all rules if none specified'). It gives no when-to-use guidance, no conditions for choosing this over sibling tools, and no exclusions.

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

scanner_run_dfaC
Destructive

Run Graph Engine for Apex data flow analysis. Detects complex security issues like SOQL/SQL injection.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, so the safety profile is carried structurally. The description adds nothing behavioral beyond that: no mention that it writes output files, that it is computationally heavy/long-running, or that JVM/thread/timeout tuning affects behavior.

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?

Two short, front-loaded sentences with no filler, and the core capability leads. It is efficient, though so terse that the brevity becomes under-specification rather than crispness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nested 13-field analysis tool with no output schema, no annotation detail on returns, and heavy runtime configuration, the description is far too thin. It leaves format selection, severity thresholds, and output destinations entirely unexplained.

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

Parameters2/5

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

Reported schema description coverage is 0% and the tool wraps a single nested 'input' object containing 13 tunable fields (target, projectDir, sfgeJvmArgs, pathExpLimit, thread settings, severity thresholds). The one-sentence description mentions no parameter at all, leaving the agent with no semantic guidance from the description side.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Run Graph Engine for Apex data flow analysis') and names the class of defect it finds, which distinguishes it from generic siblings like scanner_run. It stops short of explicitly contrasting with scanner_run, so an agent must infer when DFA is needed over the base scanner.

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?

No when-to-use guidance, no prerequisites (e.g., requires a project directory, JVM availability), and no routing against the obvious alternative scanner_run. The agent is told what it does but not when to pick it.

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

schema_generate_tabC
Destructive

Generate metadata source files for a new custom tab on a custom object. Custom tabs display custom object data in Salesforce navigation.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, openWorldHint=true, and idempotentHint=false, so the safety profile is covered. The description adds no behavioral context beyond the safety profile — nothing about overwrite behavior on existing tab files, prerequisites, or side effects when the directory already contains files. The 'generate' framing is consistent with the annotations, so no contradiction, but little value is added.

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?

Two short sentences, front-loaded with the action and the output artifact. The second sentence is slightly peripheral (a definition of custom tabs) but earns its place by clarifying the artifact for an agent unfamiliar with the Salesforce concept.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a generation tool with no output schema and full annotation coverage of the safety profile, the description covers purpose but omits prerequisites and what is actually written/returned. Adequate to invoke, but an agent must infer project context and overwrite semantics.

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 nested schema documents all three fields (icon range 1-100 with color/icon semantics, object API name with the MyObject__c example, directory path), so the schema carries the semantic load and the description adds nothing. The top-level 'input' wrapper itself is undescribed, but the meaningful parameters are covered, which keeps this at the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Generate) and resource (metadata source files for a custom tab on a custom object), so an agent knows exactly what it produces. No sibling generates tabs, so differentiation is moot, but the second sentence explaining what custom tabs are is competent domain framing rather than a restatement of the name.

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 gives no when-to-use, no when-not-to-use, and no prerequisites (e.g., must be inside a Salesforce DX project, must reference an existing custom object). It implies the tool creates a tab for a custom object but never states the conditions that select it over manual metadata authoring or the other generate_* siblings.

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

search_recordsA
Read-only

Search for text across multiple Salesforce objects simultaneously. USE THIS TOOL when searching for records that mention, contain, or reference specific text (like company names, keywords, phrases) across different objects. This is the PRIMARY tool for text-based searches across your org - it's much more efficient than running multiple SOQL queries. Perfect for finding all records mentioning a competitor, customer name, or any text across Accounts, Opportunities, Cases, Contacts, etc. SOSL (Salesforce Object Search Language) performs full-text search across all searchable fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=true), so the description's added behavioral value is limited to explaining that this is a full-text SOSL search across all searchable fields. It omits useful behavior such as the csv resultFormat writing to disk and any result-size or pagination limits.

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

Conciseness3/5

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

The purpose is front-loaded and the core message is clear, but the text is padded with restatement ('USE THIS TOOL when searching for records that mention, contain, or reference specific text') and marketing language ('Perfect for finding all records mentioning a competitor'). Several sentences could be cut without losing 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?

For a read-only search tool with annotations covering safety and no output schema, the description gives enough to select and call it confidently, including the object scope and the SOSL basis. It stops short of covering result format trade-offs or query-construction guidance for the one nested input object.

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 description supplies no information about the inputs (query string, file path, targetOrg, resultFormat), leaving the nested 'input' wrapper entirely unexplained and offering no SOSL syntax example, which is valuable given SOSL is unusual syntax. The inner properties do carry their own schema descriptions, which keeps this at an adequate rather than failing level.

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?

States a specific verb and resource ('Search for text across multiple Salesforce objects simultaneously') and names the underlying mechanism (SOSL full-text search across all searchable fields). It is clearly distinguishable from the SOQL-based siblings such as query_records and query_records_to_file.

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?

Gives explicit when-to-use triggers ('records that mention, contain, or reference specific text') and declares itself the PRIMARY tool for cross-object text search, noting it is more efficient than running multiple SOQL queries. It never names the specific sibling to prefer for structured filtering, so routing is clear but not exhaustive.

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

set_default_orgA
DestructiveIdempotent

Set the default target org for the Salesforce CLI. Once set, all tools will use this org by default when no targetOrg is specified. The value persists across sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful persistence context ('persists across sessions'), but does not mention that setting this overwrites any existing default org or note any auth requirements.

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?

Three short sentences with zero filler, and the core action is front-loaded in the opening clause.

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 single-parameter mutation tool with annotations covering safety and idempotency and no output schema, the description covers purpose and persistence adequately. It could still note the overwriting behavior and authentication prerequisites, but nothing critical to invocation is missing.

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 reported at 0%, though targetOrg carries a description ('Username or alias of the org to set as the default target org'). The description adds only the default-target framing and no extra format or alias-syntax detail, so it does not meaningfully compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Set) and resource (default target org for the Salesforce CLI) and explains the resulting effect. It reads clearly apart from get_default_org and clear_default_org without naming them, though explicit sibling routing would have earned a 5.

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 explains downstream behavior ('all tools will use this org by default when no targetOrg is specified') but never says when an agent should call this versus passing targetOrg explicitly or using clear_default_org. Usage context is implied rather than stated.

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

sobject_describeA
Read-onlyIdempotent

Describe a Salesforce SObject. This command retrieves detailed metadata about a specific Salesforce SObject, including its fields, relationships, and other properties. The results are returned in JSON format, providing a comprehensive view of the SObject's structure. Use this command to understand the schema of a specific SObject, which is especially useful when writing Apex code or SOQL queries that interact with that SObject. Always execute this tool before querying or manipulating records in the SObject to ensure you have the correct field names and types.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
labelYes
customYes
fieldsYes
keyPrefixYes
queryableYes
targetOrgYes
recordTypeInfosYes
childRelationshipsYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description usefully adds the return format (JSON) and a workflow invariant (must precede query/manipulation), but does not mention auth requirements or org-selection behavior.

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?

Purpose is front-loaded in the first sentence, but the middle sentences are redundant — 'detailed metadata about a specific Salesforce SObject... comprehensive view of the SObject's structure' says the same thing twice. Still readable and appropriately sized.

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?

With an output schema present, the description need not explain return values, and annotations cover the safety profile. What remains — which SObject and which org — is left to the schema, which is adequate but not ideal.

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

Parameters2/5

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

The description never mentions sObjectName or targetOrg, and schema description coverage is reported as 0%. For a tool whose only meaningful input is which SObject to describe, the description fails to compensate for the missing parameter documentation.

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?

States a specific verb (describe) and resource (Salesforce SObject) and immediately scopes the payload ('fields, relationships, and other properties'), making it clearly distinct from siblings like sobject_list, list_metadata, and query_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?

Gives explicit triggering conditions ('especially useful when writing Apex code or SOQL queries') and a strong prerequisite ('Always execute this tool before querying or manipulating records'). It does not name an alternative sibling (e.g., sobject_list or list_metadata), so the routing is implied rather than fully explicit.

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

sobject_listA
Read-onlyIdempotent

List all standard and custom objects in a Salesforce Org. This command retrieves a list of all standard and custom objects available in the specified Salesforce Org. The results are returned in JSON format, providing details about each object, including its name, label, and other metadata. Use this command to explore the objects in your Salesforce Org and understand their structure and properties, especially if asked to work with specific objects in your Apex code or SOQL queries and you don't know their API names. Always execute this tool before writing Apex code or SOQL queries to ensure you have the correct object names.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
sobjectsYes
targetOrgYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, open-world and non-destructive behavior, so the safety profile is handled. The description adds real value beyond that: the JSON return shape (name, label, metadata) and a hard ordering prerequisite before Apex/SOQL authoring. It omits auth/permission requirements and rate/pagination behavior.

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

Conciseness3/5

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

Front-loaded and readable, but three of the five sentences restate the same 'list standard and custom objects' idea, and the return-format sentence duplicates what the output schema already provides. It is padded rather than tight.

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 rich annotations and an output schema, the description does not need to explain returns or safety, yet it supplies the one thing structured data cannot: the workflow prerequisite to run this before generating Apex or SOQL. Only the org-selection parameter is left under-explained.

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 only parameter (targetOrg) is mentioned only obliquely as 'the specified Salesforce Org', with no explanation of the alias format or the default-org fallback — that detail lives in the schema. With a single parameter and no added semantics in the description, this is baseline territory.

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?

States a specific verb and resource ('List all standard and custom objects in a Salesforce Org') and clarifies the scope as standard plus custom. An agent can distinguish it from describe/query siblings without opening a schema, though it never names them explicitly.

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?

Gives a concrete condition: use it to explore objects when you don't know API names, and 'always execute this tool before writing Apex code or SOQL queries.' That is strong when-to-use guidance, but it never names an alternative (e.g. sobject_describe, list_metadata) or states 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.

update_recordB
DestructiveIdempotent

Update an existing record in a Salesforce org using the REST API. Updates specified fields on the record. Input must be a JSON object with keys: sObject (string), recordId (string), recordJson (string), and optionally targetOrg (string).

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, openWorldHint=true and readOnlyHint=false, so the mutation profile is covered. The description adds one genuinely useful behavior beyond that: 'Updates specified fields on the record,' implying unspecified fields are untouched, which is a partial-merge semantic not stated in the annotations. It omits permission/error or return behavior.

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?

Three short sentences, front-loaded with the action and resource, then the input contract. No filler or redundancy, though the second sentence slightly overlaps the first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world mutation tool with rich annotations and no output schema, the description covers what the action is and what input it takes, but says nothing about required permissions, partial-update confirmation, or error/failure modes. Adequate but with clear gaps.

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 single top-level 'input' object is expanded into its sObject/recordId/recordJson/targetOrg keys with types, matching the nested schema, and marks targetOrg as optional. This largely restates what the nested schema already documents, adding no ID format, JSON syntax, or org-resolution detail beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Update) and resource (existing Salesforce record) plus the transport (REST API), which cleanly separates it from create_record and delete_record. It stops short of naming siblings or scoping constraints, but the purpose is unambiguous.

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?

Says it updates 'an existing record' but gives no when-to-use context, no prerequisites (e.g. resolve the ID first, obtain an authenticated org), and no comparison to alternatives like create_record or sobject_list/describe. Usage is left almost entirely to inference.

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. 40 tool updatesv1.7.0
    • First observedapex_get_log
    • First observedapex_log_list
    • First observedassign_permission_set
    • First observedassign_permission_set_license
    • First observedclear_default_org
    • First observedcreate_record
    • First observeddelete_record
    • First observeddeploy_start
    • First observeddisplay_user
    • First observedexecute_anonymous_apex
    • First observedgenerate_class
    • First observedgenerate_component
    • First observedgenerate_trigger
    • First observedget_apex_code_coverage
    • First observedget_apex_test_results
    • First observedget_default_org
    • First observedget_server_permissions
    • First observedinstall_skill
    • First observedlist_code_analyzer_rules
    • First observedlist_connected_salesforce_orgs
    • First observedlist_metadata
    • First observedlist_metadata_types
    • First observedlogin_into_org
    • First observedlogout
    • First observedopen
    • First observedopen_record
    • First observedpackage_install
    • First observedpackage_uninstall
    • First observedquery_records
    • First observedquery_records_to_file
    • First observedrun_apex_tests
    • First observedrun_code_analyzer
    • First observedscanner_run
    • First observedscanner_run_dfa
    • First observedschema_generate_tab
    • First observedsearch_records
    • First observedset_default_org
    • First observedsobject_describe
    • First observedsobject_list
    • First observedupdate_record

TDQS

B3.1/5.0

Scored across 40 tools

Disambiguation3/5

Most tools target distinct Salesforce operations, but several overlap: run_code_analyzer, scanner_run, and scanner_run_dfa all perform code analysis; apex_get_log vs apex_log_list and query_records vs query_records_to_file require reading descriptions to distinguish. These overlaps keep the set from being cleanly disambiguated.

Naming Consistency3/5

Tools are mostly snake_case, but ordering is inconsistent: verb_noun (create_record, list_metadata) mixes with noun_verb (sobject_list, apex_log_list, package_install, scanner_run, deploy_start). Some generic names like open and logout lack resource context, though the set remains readable.

Tool Count2/5

40 tools is excessive for a single MCP server, even for the broad Salesforce domain. Several niche CLI wrappers could be consolidated, especially the code-analysis trio and the two query_records variants, making the surface feel bloated rather than well-scoped.

Completeness4/5

Coverage spans core Salesforce domains: org auth/config, record CRUD, SOQL/SOSL, metadata listing, Apex tests/execution, deployment, packages, code analysis, and logging. Minor gaps like metadata retrieve/update/delete and direct record get are workaroundable, so the surface is broadly complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables secure interaction with Salesforce orgs through LLMs, providing tools for managing orgs, querying data, deploying metadata, running tests, and performing code analysis with granular access control and encrypted authentication.
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables interaction with Salesforce orgs to perform operations like querying data with SOQL, managing records, and executing Apex code. It provides configurable access levels and support for both standard and Tooling APIs via natural language interfaces.
    11
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with Salesforce organizations through project-based CLI integration, allowing execution of Apex, SOQL queries, object descriptions, and org management using local Salesforce DX project configurations.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with Salesforce orgs through natural language commands, supporting org management, SOQL queries, metadata operations, testing, and more.
    1
    -