Skip to main content
Glama

mc-next-mcp-server

CI Release License Node MCP Endpoints

An MCP (Model Context Protocol) server that exposes Salesforce Marketing Cloud Next, Data 360, and Data 360 Connect APIs, plus a set of Salesforce platform tools inspired by Salesforce Inspector Reloaded.

The endpoint catalog is generated from the official Salesforce Postman collections, so the tool surface stays in sync with the published API reference.

At a glance

  • 445 API endpoints across 3 families and 44 resource groups, driven by a generated catalog

  • 30 MCP tools — 8 catalog-driven, 6 platform, 8 record CRUD, 6 metadata CRUD, 2 maintenance

  • Two Salesforce hosts — core org (Marketing Cloud Next + platform) and Data 360 tenant

  • One OAuth token — client credentials, shared across every family

  • Two safety gates — destructive operations and schema changes are off by default

  • No credentials needed to browse the catalog or run the smoke test

  • Optional HTTP transport — off by default; stdio is the default and the safer mode

Quick Start

Get the server running and verified in about five minutes. No Salesforce org is required for steps 1–4 — the catalog tools work without credentials, so you can confirm the wiring before you set up authentication.

1. Clone and install

git clone https://github.com/supanmaniar/salesforce-mc-next-mcp.git
cd salesforce-mc-next-mcp
npm install

2. Build

npm run build

3. Verify — no credentials needed

npm run smoke

This connects to the built server over stdio as a real MCP client and asserts the tool surface, both safety gates, and the validation paths. You should see ✔ smoke test complete — all assertions passed.

If this passes, the server is healthy and any remaining problem is configuration.

4. Try it without credentials

The server starts fine with no credentials — it warns on stderr and only fails when you make an API call. Point your MCP client at it and ask:

List the endpoints available for publishing an email.
What API families and resource groups does the mc-next server cover?

5. Add credentials

To make real API calls you need a Salesforce Connected App. Set these environment variables (in your MCP client's env block):

{
  "env": {
    "SF_CLIENT_ID": "your_connected_app_consumer_key",
    "SF_CLIENT_SECRET": "your_connected_app_consumer_secret",
    "MC_NEXT_API_BASE_URL": "https://my-org.my.salesforce.com/services/data/v66.0",
    "DATA360_TENANT_URL": "https://my-tenant.c360a.salesforce.com",
    "DATA360_CONNECT_BASE_URL": "https://my-tenant.c360a.salesforce.com/services/data/v66.0"
  }
}

For a quick local test, a .env file works too:

cp .env.example .env
# edit .env, then:
node --env-file=.env dist/index.js

6. Wire up your client

Client

Guide

VS Code + GitHub Copilot

docs/VS-CODE-SETUP.md

Claude Desktop

docs/CLAUDE-DESKTOP-SETUP.md

Connected App creation

docs/SALESFORCE-CONNECTED-APP-GUIDE.md

Safety default: destructive operations and schema changes are both off. The gates block the 63 destructive endpoints, but the server is not read-only — see SECURITY.md.

Where to go next

I want to…

Read

Understand how the server is put together

docs/ARCHITECTURE.md

See worked examples with real tool calls

docs/EXAMPLES.md

Understand or regenerate the catalog

docs/POSTMAN-COLLECTIONS.md

Deploy it (Docker, multi-org, monitoring)

docs/DEPLOYMENT-GUIDE.md

Review the security model

SECURITY.md

Related MCP server: MCP Salesforce Lite

What it covers

API family

Endpoints

Source collection

mc-next — Marketing Cloud Next (Content / CMS)

27

Salesforce Marketing Cloud Next APIs

data360 — Data 360 core

35

Salesforce Data 360 APIs

data360-connect — Data 360 Connect

383

Salesforce Data 360 Connect APIs

Total

445 across 44 groups

Plus Salesforce platform tools: SOQL query, object list/describe, generic REST explorer, org limits, and full record + object CRUD.

How it works across Salesforce products

The server spans two different Salesforce hosts, which is the single most important thing to understand about it. Marketing Cloud Next lives on your core org; Data 360 lives on a separate tenant host.

                        ┌──────────────────────────────────────┐
   one OAuth token ───► │  login.salesforce.com                │
   shared by every      │  SF_LOGIN_URL                        │
   API family           │  POST /services/oauth2/token         │
                        └──────────────────────────────────────┘
                                        │
        ┌───────────────────────────────┴───────────────────────────────┐
        │                                                               │
        ▼                                                               ▼
┌──────────────────────────┐                    ┌──────────────────────────────────┐
│  CORE ORG HOST           │                    │  DATA 360 TENANT HOST            │
│  my-org.my.salesforce.com│                    │  my-tenant.c360a.salesforce.com  │
│                          │                    │                                  │
│  MC_NEXT_API_BASE_URL    │                    │  DATA360_TENANT_URL              │
│  SF_INSTANCE_URL         │                    │  DATA360_CONNECT_BASE_URL        │
│                          │                    │                                  │
│  ┌────────────────────┐  │                    │  ┌────────────────────────────┐  │
│  │ mc-next       (27) │  │                    │  │ data360            (35)    │  │
│  │ Content / CMS      │  │                    │  │ Query, Profile, Ingestion, │  │
│  │                    │  │                    │  │ Metadata, Data Graphs      │  │
│  ├────────────────────┤  │                    │  ├────────────────────────────┤  │
│  │ sf_* platform      │  │                    │  │ data360-connect   (383)    │  │
│  │ SOQL, describe,    │  │                    │  │ Activations, Segments,     │  │
│  │ REST, limits       │  │                    │  │ Streams, Connections, ML,  │  │
│  ├────────────────────┤  │                    │  │ Governance, Clean Rooms…   │  │
│  │ sf_* record CRUD   │  │                    │  └────────────────────────────┘  │
│  │ sf_* metadata CRUD │  │                    │                                  │
│  └────────────────────┘  │                    │                                  │
└──────────────────────────┘                    └──────────────────────────────────┘

The platform and CRUD tools only ever talk to the core org host. The catalog-driven mcnext_* tools pick their host per endpoint, based on the endpoint's base key.

Product-by-product coverage

Salesforce product

Host

Endpoints

What you can do

Marketing Cloud Next (Content / CMS)

Core org

27

Search content, manage workspaces, create/update/publish/clone emails and email templates

Data 360 — Query & Insights

Tenant

8

Query API V1 & V2, Query Unified Record ID, Calculated Insights

Data 360 — Profile, Ingestion, Metadata & Auth

Tenant

27

Profile API, Ingestion API (incl. CSV bulk upload), Metadata API, Data Graph API, Auth

Data 360 Connect — Activation

Tenant

59

Activations, Activation Platforms/Targets, External Platforms, Data Actions

Data 360 Connect — Data

Tenant

99

Data Streams, Data Lake/Model Objects, Data Spaces, Data Graphs, Data Transforms, Data Kits, Data Shares, Connections

Data 360 Connect — Identity & Segments

Tenant

32

Identity Resolutions, Universal ID Lookup, Segments, Profile, Search Index, Insights

Data 360 Connect — AI & Governance

Tenant

164

Machine Learning, Document AI, Notebook AI, Agent Configuration, Data Governance, Clean Rooms

Data 360 Connect — Platform

Tenant

29

Metadata, Query (Current), Query V1 & V2, Auth, Limits, Private Network Routes, Connectors, Calculated Insights

Salesforce Platform (any org)

Core org

n/a

SOQL, object describe, REST explorer, org limits, record CRUD, custom object/field CRUD

How a request flows

  1. Discover — mcnext_list_endpoints filters the catalog by family/group/kind/search.

  2. Describe — mcnext_describe_endpoint returns the resolved base URL, path params, query params, and body schema.

  3. Invoke — the verb tool (mcnext_query / read / create / update / delete / action) resolves the endpoint's base key to the right host and sends the request.

  4. Authenticate — one cached OAuth token is shared by every family; a 401 triggers a single transparent re-auth and retry.

The platform and CRUD tools bypass the catalog entirely and call /services/data/vXX/... directly on SF_INSTANCE_URL.

Limitations

These are the honest boundaries of the current implementation.

Authentication

  • Client credentials only. The server uses the OAuth 2.0 client-credentials flow. There is no JWT bearer flow, no username/password flow, and no interactive/browser login. A Connected App with the client-credentials flow permitted is required.

  • One identity for everything. All calls run as the Connected App's integration user. There is no per-user or per-request impersonation, so Salesforce sharing rules and field-level security apply to that single user.

  • One org per server instance. The base URLs are fixed at startup from environment variables. Pointing at a second org or tenant requires a second server instance.

  • No token persistence. Tokens are cached in memory only and re-fetched on restart.

API surface

  • Catalog-driven coverage only. The 445 endpoints come from the three Postman collections. Anything not in those collections is reachable only through sf_rest_request (core org) — there is no equivalent generic passthrough for the Data 360 tenant hosts.

  • No GraphQL. The Salesforce GraphQL API is not covered.

  • No SOAP. The Partner/WSDL-based SOAP API is not covered. This matters for one specific case: Inspector's Data Import uses SOAP to set assignment rules, duplicate rules, and owner-change options on inserts. Those options are not available here.

  • No Bulk API 2.0. The /jobs/ingest and /jobs/query endpoints are not in the catalog. Bulk record work uses the Composite API instead, which caps at 200 records per call — fine for hundreds of records, not for millions.

  • No Metadata API deploy/retrieve. There is no package.xml generation, no retrieve/deploy jobs, and no destructive-changes deployment. Custom object and field creation goes through the Tooling API instead, which is a different mechanism with different limits.

  • No Tooling API passthrough for arbitrary metadata. sf_soql_query and sf_describe_object accept a tooling: true flag, and the metadata CRUD tools use Tooling endpoints, but there is no general "call any Tooling endpoint" tool.

  • No file uploads. No endpoint in the catalog uses multipart/form-data, so the form-data code path is currently unexercised. The Ingestion API's CSV upload is sent as a raw text/csv body, not as a file part.

Features deliberately not ported

These Inspector features were left out because they depend on a browser session or a UI, not because they were overlooked:

Inspector feature

Why it's absent

Data Export / Data Import UI

Browser UI over SOQL/SOAP; the underlying query and CRUD capability is available via sf_soql_query and the record CRUD tools

Debug Logs viewer

Needs log streaming and a viewer; sf_rest_request can fetch ApexLog bodies but there is no filtering or analysis

Event Monitor

Requires a long-lived CometD/streaming subscription, which does not fit a request/response MCP tool

Flow Scanner / Object Scanner / Dependencies Explorer

Rule engines over metadata; would need the Metadata API and a rules port

Field Creator UI

The capability is ported (sf_create_custom_field), minus the bulk-import spreadsheet UI

Org Limits UI

Ported as sf_org_limits

REST Explorer UI

Ported as sf_rest_request

Operational

  • No caching of API responses. Every tool call hits Salesforce. Repeated sf_describe_object calls cost API requests.

  • No rate-limit coordination. Retries use exponential backoff on 429/5xx, but the server does not track or budget the org's daily API allowance. Check sf_org_limits before bulk work.

  • No pagination helper for the catalog tools. mcnext_query returns whatever the API returns; following nextPageToken-style cursors is the caller's responsibility. Only SOQL has a dedicated pagination tool (sf_soql_query_more).

  • Asynchronous metadata changes. sf_create_custom_object and sf_create_custom_field return as soon as the Tooling API accepts the request. The object or field may take seconds to become visible; re-check with sf_list_objects / sf_describe_object.

  • No write confirmation or dry-run mode. Tools execute immediately once the safety gates are open. There is no preview step.

  • stdio transport only. No HTTP/SSE transport, so the server cannot be hosted as a shared remote service.

  • No automated tests against a real org. The smoke test asserts the tool surface, safety guards, and validation logic without credentials. End-to-end behaviour against a live Salesforce org is unverified.

Design: why 30 tools instead of 445

Exposing 445 individual MCP tools would bloat the model's context and hurt tool-selection accuracy. Instead the server exposes a small set of generic, catalog-driven tools. The model discovers endpoints, then invokes them:

mcnext_list_endpoints  ->  mcnext_describe_endpoint  ->  mcnext_query / read / create / update / delete / action

Tools

Catalog-driven (Marketing Cloud Next / Data 360)

Tool

Purpose

mcnext_list_endpoints

Browse/search the 445 endpoints by family, group, kind, method, or free text

mcnext_describe_endpoint

Full contract for one endpoint: path params, query params, body schema, sample body

mcnext_query

GET a collection (kind query)

mcnext_read

GET a single record (kind read)

mcnext_create

POST a new record (kind create)

mcnext_update

PATCH/PUT a record (kind update)

mcnext_delete

DELETE a record (kind delete) — gated

mcnext_action

Non-CRUD operations: publish, clone, activate, run, search, resolve, … — some gated

Salesforce platform (Inspector-style)

Tool

Purpose

sf_soql_query

Run SOQL (data or Tooling API)

sf_soql_query_more

Paginate via nextRecordsUrl

sf_list_objects

Global describe — list sObjects

sf_describe_object

Field-level metadata for an sObject

sf_rest_request

Generic REST explorer for any /services/data/... path

sf_org_limits

Org limits and current API usage

Record CRUD — ported from Inspector's Inspect page and batch patterns

Tool

Purpose

sf_create_record

Create one record (POST /sobjects/{SObject})

sf_get_record

Read one record by Id, optionally field-limited

sf_update_record

Update one record (PATCH)

sf_delete_record

Delete one record — gated

sf_bulk_create_records

Create up to 200 records per call (POST /composite/sobjects)

sf_bulk_update_records

Update up to 200 records per call (PATCH /composite/sobjects)

sf_bulk_delete_records

Delete up to 200 records per call — gated

sf_composite

Batched mixed subrequests (POST /composite, max 25)

Object & field metadata CRUD — ported from Inspector's Field Creator

Tool

Purpose

sf_create_custom_object

Create a custom object (Tooling API CustomObject) — gated

sf_create_custom_field

Create a custom field, with optional field-level security — gated

sf_delete_custom_field

Delete a custom field by Tooling Id — gated

sf_delete_custom_object

Delete a custom object by Tooling Id — gated

sf_list_custom_objects

List custom objects with their Tooling Ids

sf_list_custom_fields

List custom fields with their Tooling Ids

Maintenance

Tool

Purpose

mcnext_cache

Inspect, clear, or re-tune the response cache (stats / clear / ttl / off)

mcnext_poll_job

Poll a long-running job to completion; read-only (GET) endpoints only

Resources & prompts

  • Resources: mcnext://catalog (full catalog), mcnext://overview (auth model, bases, stats)

  • Prompts: explore-mc-next, explore-salesforce-org

Documentation

Guide

What it covers

VS Code + Copilot setup

Prerequisites, mcp.json format, verification prompts, troubleshooting

Claude Desktop setup

Config file locations, mcpServers format, logs, Claude Code CLI

Salesforce Connected App guide

Creating the Connected App, scope → capability mapping, secrets, rotation

Deployment guide

stdio model, env var management, multi-org, logging, monitoring

Docker deployment

Image build, client integration, why compose up -d does not work

Architecture

Tool taxonomy, request flow, token caching, the two-host model

Examples

Worked tool calls and error-handling patterns

Postman collections

Catalog provenance, regeneration, validation

HTTP deployment

Optional network transport, auth, and its identity limitation

Async operations

Polling long-running jobs with mcnext_poll_job

Performance

Response caching, TTL tuning, reducing API consumption

Security policy

Threat model, what is and isn't protected, safety-gate gaps, disclosure

Roadmap

What's planned near-, medium-, and long-term, and how to influence it

Not read-only by default. The safety gates block the 63 destructive endpoints, but the other 382 — including 180 create/update/action endpoints — are allowed. See SECURITY.md.

Install

git clone https://github.com/supanmaniar/salesforce-mc-next-mcp.git
cd salesforce-mc-next-mcp
npm install
npm run build

catalog/endpoints.json is committed, so npm run generate is optional — and it cannot run without the source Postman collections, which are not in this repo.

From npm

npm install -g mc-next-mcp-server

Or run it without installing:

npx mc-next-mcp-server

This installs the compiled dist/ and the generated catalog/. You still need a Salesforce Connected App and the environment variables described in Configure.

Not yet published. The package is prepared for publishing but has not been released to the npm registry yet. Until then, use the git clone above. See Publishing for the maintainer checklist.

With Docker

docker build -t mc-next-mcp-server:1.0.0 .
docker run --rm -i --env-file .env mc-next-mcp-server:1.0.0

The -i flag is required — the server is stdio-only. See Docker deployment.

Publishing

Maintainers only. The prepublishOnly hook runs the build and the catalog audit before anything is uploaded, so a broken or truncated catalog cannot be published.

npm login                 # if not already authenticated
npm run prepublishOnly    # build + audit — exactly what the hook runs
npm pack --dry-run        # inspect the contents
npm publish               # publishConfig sets access: public

prepublishOnly deliberately does not run npm run generate: regeneration requires the source Postman collections, which are not in this repository, so it would fail on a clean checkout.

Configure

Copy .env.example to .env and fill in your values. The server reads configuration from the process environment — it does not auto-load .env files. Use your MCP client's env block, or run with node --env-file=.env dist/index.js.

Required

Variable

Description

SF_CLIENT_ID

Connected App consumer key

SF_CLIENT_SECRET

Connected App consumer secret

MC_NEXT_API_BASE_URL

MC Next base incl. /services/data/vXX

DATA360_TENANT_URL

Data 360 tenant URL (c360a host)

DATA360_CONNECT_BASE_URL

Data 360 Connect base incl. /services/data/vXX

Optional

Variable

Default

Description

SF_LOGIN_URL

https://login.salesforce.com

OAuth token host (use test.salesforce.com for sandboxes)

SF_INSTANCE_URL

origin of MC_NEXT_API_BASE_URL

Instance URL for the platform tools

SF_API_VERSION

66.0

API version for platform tools

MC_NEXT_TIMEOUT_MS

60000

Request timeout

MC_NEXT_MAX_RETRIES

3

Retries for 429 / 5xx

MC_NEXT_ALLOW_DESTRUCTIVE

false

Allow DELETE and destructive actions

MC_NEXT_ALLOW_METADATA_CHANGES

false

Allow custom object/field creation and deletion

MC_NEXT_DEBUG

false

Log HTTP requests to stderr

MC_NEXT_CACHE_TTL_MS

30000

Response cache TTL for GETs. 0 disables caching

MC_NEXT_CACHE_MAX_ENTRIES

500

Max cached responses (LRU eviction)

MC_NEXT_POLL_INTERVAL_MS

2000

Default delay between mcnext_poll_job polls

MC_NEXT_POLL_TIMEOUT_MS

120000

Default polling time budget

MC_NEXT_HTTP_ENABLED

false

Enable the HTTP transport (see HTTP deployment)

MC_NEXT_HTTP_PORT

3000

HTTP listen port

MC_NEXT_HTTP_HOST

127.0.0.1

HTTP bind host. Non-loopback requires an auth token

MC_NEXT_HTTP_AUTH_TOKEN

(unset)

Bearer token. Required for any non-loopback bind

MC_NEXT_HTTP_ALLOWED_HOSTS

(unset)

Comma-separated allowed Host values (DNS-rebinding protection)

Authentication

All three API families are reached with a single OAuth 2.0 client-credentials token.

Note on the source collections. The Marketing Cloud Next collection already uses the client-credentials grant. The two Data 360 collections use the OAuth 2.0 implicit grant, which is browser-only and cannot be used by a server. This server converts them to client-credentials, which requires a Connected App with the relevant scopes enabled.

Create a Connected App in Salesforce Setup with OAuth enabled, the client-credentials flow permitted, and the scopes you need:

  • sfdc_cms_api — Marketing Cloud Next (Content/CMS)

  • cdp_query_api — Data 360 query

  • cdp_profile_api — Data 360 profile

  • cdp_ingest_api — Data 360 ingestion

Safety

There are two independent gates, because deleting a data row and changing org schema carry very different risk.

MC_NEXT_ALLOW_DESTRUCTIVE (default false)

Blocks operations that destroy data:

  • every DELETE endpoint in the catalog (45 of them)

  • destructive catalog actions such as delete, remove, purge, cancel, deactivate, revoke, unpublish

  • sf_delete_record, sf_bulk_delete_records

  • DELETE via sf_rest_request or sf_composite

MC_NEXT_ALLOW_METADATA_CHANGES (default false)

Blocks operations that change org schema:

  • sf_create_custom_object, sf_delete_custom_object

  • sf_create_custom_field, sf_delete_custom_field

Metadata changes are gated separately because they are materially harder to reverse than a record delete — removing a custom field destroys its data, and removing an object destroys all of its records.

Both flags must be set explicitly; neither is implied by the other.

These gates do not make the server read-only. They block the 63 destructive endpoints and the tools listed above. The remaining 382 endpoints — including 103 create, 45 update, and 32 action operations — are allowed by default. sf_rest_request also permits arbitrary POST/PATCH/PUT; only DELETE is gated. See SECURITY.md for the full picture and the recommended posture per environment.

Use with an MCP client

The example below uses the Claude Desktop shape (mcpServers). VS Code uses the key servers and requires "type": "stdio" — see VS-CODE-SETUP.md for the exact format, and CLAUDE-DESKTOP-SETUP.md for config file locations.

{
  "mcpServers": {
    "mc-next": {
      "command": "node",
      "args": ["/absolute/path/to/mc-next-mcp-server/dist/index.js"],
      "env": {
        "SF_CLIENT_ID": "...",
        "SF_CLIENT_SECRET": "...",
        "MC_NEXT_API_BASE_URL": "https://my-org.my.salesforce.com/services/data/v66.0",
        "DATA360_TENANT_URL": "https://my-tenant.c360a.salesforce.com",
        "DATA360_CONNECT_BASE_URL": "https://my-tenant.c360a.salesforce.com/services/data/v66.0"
      }
    }
  }
}

Development

npm run generate     # regenerate catalog/endpoints.json from the Postman collections
npm run build        # tsc -> dist/
npm run typecheck    # tsc --noEmit
npm run dev          # tsc --watch
npm run smoke        # end-to-end MCP client test (no credentials needed)
npm run audit        # catalog fidelity checks
npm run lint         # ESLint
npm run format       # Prettier

A pre-commit hook runs ESLint and Prettier on staged files. CI runs all of the above plus a dependency audit on Node 18, 20, and 22.

See CONTRIBUTING.md for the catalog regeneration workflow, code standards, and the commit message format. For running the server in Docker, on multiple orgs, or with debug logging, see DEPLOYMENT-GUIDE.md.

Scripts

Script

Purpose

scripts/generate-catalog.mjs

Postman collections → catalog/endpoints.json

scripts/audit-catalog.mjs

Fidelity checks on the generated catalog

scripts/inspect-raw.mjs

Diagnose raw request bodies in the source collections

scripts/smoke-test.mjs

Connects over stdio and asserts the tool surface

Never hand-edit catalog/endpoints.json — regenerate it with npm run generate.

Catalog notes

  • No required arrays in body schemas. The Postman collections only provide sample bodies, so every property appears present. Marking them all required would be wrong, especially for PATCH endpoints. Schemas describe shape and types, not obligations.

  • Empty raw bodies are normalized to "no body". Many GET/DELETE requests declare mode: raw with an empty string; that means no body, not an empty JSON body.

  • Non-JSON bodies are typed explicitly. The Ingestion API's bulk upload is CSV and is passed through verbatim with Content-Type: text/csv.

  • Postman variable placeholders are stripped. {{nextPageToken}}-style values are not real defaults.

License

MIT

Available Tools

28 tools
mcnext_actionRun a Marketing Cloud Next / Data 360 actionA

Invoke a non-CRUD operation (kind "action"): publish, unpublish, clone, activate, deactivate, run, execute, refresh, validate, search, query, resolve, merge, and similar. Some actions are destructive (delete/remove/cancel/deactivate) and are blocked unless MC_NEXT_ALLOW_DESTRUCTIVE=true. For file-upload endpoints, pass formData with an absolute file path for the "file" field.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON request body, when the endpoint expects one.
queryNoQuery string parameters, e.g. { "pageSize": 50, "orderBy": "name" }.
headersNoAdditional request headers.
formDataNoForm-data fields for multipart endpoints; file fields take an absolute path.
endpointIdYesEndpoint id from the catalog, e.g. "content.create-an-email-with-html", "activations.query-activations". Use mcnext_list_endpoints to discover ids.
pathParamsNoPath parameter values, e.g. { "contentKey": "my-email" }.

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden and does disclose an important safety behavior: destructive actions are blocked unless MC_NEXT_ALLOW_DESTRUCTIVE=true, plus the file-upload formData expectation. However, it does not address authorization, side effects, idempotency, or response/error behavior, leaving meaningful uncertainty for a generic action invoker.

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 compact sentences: the first defines the tool's scope with examples, and the second packs two critical caveats (destructive actions and file uploads). There is no filler, and the most important usage guardrail appears early.

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 generic endpoint-driven action tool with no output schema and no annotations, it provides adequate starting context: operation category, destructive-action guardrail, and file-upload format. It does not mention response/error behavior or per-endpoint discovery beyond what the schema already says about mcnext_list_endpoints, so completeness is moderate.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description's formData hint largely restates the schema's note about file fields taking an absolute path, adding little beyond what the input schema already provides.

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

Purpose5/5

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

The description opens with a specific verb ('Invoke') and resource ('non-CRUD operation (kind "action")'), reinforced by a concrete list of action verbs. This clearly distinguishes the tool from the CRUD-oriented siblings like mcnext_create, mcnext_update, and mcnext_delete.

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

Usage Guidelines3/5

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

The description implies usage by framing the tool as the non-CRUD counterpart to sibling CRUD tools and gives representative action verbs, but it never explicitly names alternative tools or states when not to use it. The destructive-action guardrail adds a usage constraint but not tool-selection guidance.

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

mcnext_createCreate a Marketing Cloud Next / Data 360 recordA

Create a record (POST, kind "create"). Pass the JSON payload in body. Use mcnext_describe_endpoint to see the expected body schema and sample.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON request body.
queryNoQuery string parameters, e.g. { "pageSize": 50, "orderBy": "name" }.
headersNoAdditional request headers.
endpointIdYesEndpoint id from the catalog, e.g. "content.create-an-email-with-html", "activations.query-activations". Use mcnext_list_endpoints to discover ids.

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It discloses the HTTP method (POST) and that it creates a record, but says nothing about side effects, authorization requirements, error behavior, or return format. For a mutation tool, this is a significant gap.

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 concise sentences with no waste. The primary action is front-loaded, and the critical prerequisite (using describe_endpoint) is stated clearly. Efficient and well-structured.

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 create operation with no output schema, the description is adequate for basic usage but incomplete. It lacks information about what the response will contain, whether the operation is idempotent, or any authentication prerequisites. The pointer to describe_endpoint partially compensates for body structure, but the overall behavioral context is thin.

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

Parameters4/5

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

Schema coverage is 100%, so all parameters are documented in the schema. The description adds value by pointing to mcnext_describe_endpoint for the body schema and sample, which helps the agent construct a valid payload. It also reinforces the role of the 'body' parameter.

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 clearly states the verb 'Create' and resource 'a record', and specifies it is a POST of kind 'create'. This distinguishes it from read/update/delete tools, though it does not explicitly name sibling tools. The purpose is unambiguous and actionable.

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 instructs the agent to use mcnext_describe_endpoint to obtain the expected body schema and sample, which is essential for correct invocation. However, it does not explicitly state when to prefer this over mcnext_update or other mutation tools, leaving that to the tool name and context.

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

mcnext_deleteDelete a Marketing Cloud Next / Data 360 recordA

Delete a record (DELETE, kind "delete"). Requires the path parameter. This is destructive and is blocked unless MC_NEXT_ALLOW_DESTRUCTIVE=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoQuery string parameters, e.g. { "pageSize": 50, "orderBy": "name" }.
headersNoAdditional request headers.
endpointIdYesEndpoint id from the catalog, e.g. "content.create-an-email-with-html", "activations.query-activations". Use mcnext_list_endpoints to discover ids.
pathParamsNoPath parameter values, e.g. { "contentKey": "my-email" }.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does disclose the most critical traits: the operation is destructive and gated by an environment variable. It stops short of stating irreversibility or success/error behavior, but the destructive guardrail is substantive.

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 definition is a single compact sentence that front-loads the action and follows with necessary constraints. The parenthetical 'kind "delete"' is slightly redundant with 'Delete', but the overall structure has no fluff.

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?

The description covers the safety gate and path requirement, and the schema documents all parameters. However, with no output schema it does not describe what a successful delete returns or whether deletion is permanent/irreversible, leaving an agent without a complete model of the call's result.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by warning that the path parameter is required even though pathParams is not marked required in the schema, and it does not repeat the schema's property descriptions.

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

Purpose5/5

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

The description states a specific verb and resource ('Delete a record') and reinforces it with the HTTP method DELETE. The name and title additionally scope it to Marketing Cloud Next / Data 360, clearly distinguishing it from the SF delete siblings and from mcnext_create/update/action.

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 provides actionable invocation context: the path parameter is required, and the tool is blocked unless MC_NEXT_ALLOW_DESTRUCTIVE=true. This tells the agent the preconditions and an explicit condition under which not to attempt the call, though it does not name alternative tools.

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

mcnext_describe_endpointDescribe a Marketing Cloud Next / Data 360 endpointA

Get the full contract for one endpoint: HTTP method, base URL family, path, path params, query params, request body JSON schema, and a sample body. Call this before invoking an endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
endpointIdYesEndpoint id from the catalog, e.g. "content.create-an-email-with-html", "activations.query-activations". Use mcnext_list_endpoints to discover ids.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It is transparent that this is a read-only descriptor tool that returns a full endpoint contract, and 'before invoking' implies it does not execute the endpoint. It omits potential auth/error details, but they are less critical for a describe operation.

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 with the tool's core purpose and output contents, followed by an explicit usage instruction. Every sentence earns its place with no redundancy.

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

Completeness5/5

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

For a single-parameter metadata tool with no output schema and no annotations, the description is complete: it lists return contents, states when to call it, and the schema fully documents the one parameter. An agent has enough to select and invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%: endpointId is well documented with examples and discovery instructions. The main description adds no additional parameter semantics, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description names a specific verb ('Get'), a specific resource ('full contract for one endpoint'), and enumerates exactly what is returned: method, base URL family, path, params, body schema, sample body. It clearly differentiates this metadata tool from sibling endpoint-execution tools like mcnext_query or mcnext_create.

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?

It explicitly says to call this tool before invoking an endpoint, which is a clear trigger condition. The endpointId parameter description also tells the agent to use mcnext_list_endpoints to discover ids, giving complementary tool guidance.

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

mcnext_list_endpointsList Marketing Cloud Next / Data 360 API endpointsA

Browse the 445 endpoints across 3 API families (mc-next: 27, data360: 35, data360-connect: 383) and 44 resource groups. Use this first to discover the endpoint id you need. Filter by family, group, kind, method, or a free-text search.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoEndpoint kind. "query" = list, "read" = get one, "action" = non-CRUD operation.
groupNoResource group, e.g. "Content", "Activations", "Segments", "Query API V2".
limitNoMax results (default 50).
familyNoAPI family. "mc-next" = Marketing Cloud Next content/CMS, "data360" = Data 360 core, "data360-connect" = Data 360 Connect.
methodNo
searchNoFree-text search over id, name, path and description.
includeDestructiveNoInclude destructive endpoints (DELETE, delete/remove/cancel actions). Default true.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavior. 'Browse' implies a read-only, non-destructive operation, but the description does not explicitly state it, nor does it mention pagination, response format, rate limits, or any side effects. It does add the counts (445, 27, 35, 383, 44) which are useful context. Given the tool's simplicity, this is adequate but not rich. A 3 reflects the moderate disclosure.

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

Conciseness5/5

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

Two sentences with zero waste. The first sentence packs the scope (445 endpoints, families, groups) and the second sentence gives the usage directive and filter options. Front-loaded and to the point.

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

Completeness4/5

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

The description provides the core purpose, scope, and usage direction. It lacks an explicit statement of the return format (e.g., list of endpoint metadata with id, name, path), but that is inferable from the tool type and the mention of 'discover the endpoint id.' For a listing/discovery tool with no output schema, this is sufficient. A 5 would be given if it detailed pagination or response structure, but the tool is simple enough.

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 86% (6 of 7 parameters have descriptions), so the schema already documents most parameters. The description adds a summary of filters: 'Filter by family, group, kind, method, or a free-text search.' This helps agents understand the grouping but does not add syntax or format details beyond the schema. The missing parameter (method) is covered by its enum. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Browse') and resource ('445 endpoints across 3 API families... 44 resource groups'), and clarifies its role as a discovery tool: 'Use this first to discover the endpoint id you need.' It clearly distinguishes from siblings like mcnext_query or mcnext_read, which execute operations on specific endpoints. No ambiguity.

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

Usage Guidelines4/5

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

The description explicitly states when to use it: 'Use this first to discover the endpoint id you need.' This gives clear context and implies it precedes other mcnext_* tools. It does not explicitly name alternatives or conditions to avoid, but the purpose is unambiguous given the sibling tool names. A 4 is appropriate; a 5 would require explicit exclusions.

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

mcnext_queryQuery Marketing Cloud Next / Data 360 recordsB

List/filter records from a collection endpoint (GET, kind "query"). Supports pagination and filters such as pageSize, offset, orderBy, and family-specific filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoQuery string parameters, e.g. { "pageSize": 50, "orderBy": "name" }.
headersNoAdditional request headers.
endpointIdYesEndpoint id from the catalog, e.g. "content.create-an-email-with-html", "activations.query-activations". Use mcnext_list_endpoints to discover ids.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It discloses that this is a GET/query operation (safe, read-only) and that it supports pagination and filters. However, it doesn't disclose response format, pagination behavior details, or any rate-limit/error considerations. The read-only nature is implied by 'GET' and 'query' but not explicitly stated.

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 and front-loads the core purpose. It mentions supported features (pagination, filters) without excessive detail. The only minor issue is that 'family-specific filters' is vague and could be expanded or removed.

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 query tool with no output schema and no annotations, the description is adequate but not complete. It covers the operation type and supported parameters, but an agent might need more context on how pagination works, what the response looks like, and how this differs from mcnext_read. The schema covers parameter semantics, but behavioral context is 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?

Schema description coverage is 100%, so the schema already documents all three parameters. The description adds context about pagination and filter capabilities (pageSize, offset, orderBy, family-specific filters), which maps to the query object parameter. However, it doesn't add much beyond what the schema already provides.

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 ('List/filter records') and resource ('collection endpoint'), and clarifies the HTTP method and kind ('GET, kind "query"'). It distinguishes itself from siblings like mcnext_create/mcnext_update/mcnext_delete, though it doesn't explicitly name a sibling alternative for read operations (mcnext_read).

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

Usage Guidelines3/5

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

The description implies usage for querying collection endpoints and mentions pagination/filter support, but it does not explicitly state when to use this tool versus mcnext_read or mcnext_describe_endpoint. It also doesn't mention that endpointId should be discovered via mcnext_list_endpoints, though the schema does.

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

mcnext_readRead a Marketing Cloud Next / Data 360 recordA

Fetch a single record by id or key (GET, kind "read"). Requires the path parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoQuery string parameters, e.g. { "pageSize": 50, "orderBy": "name" }.
headersNoAdditional request headers.
endpointIdYesEndpoint id from the catalog, e.g. "content.create-an-email-with-html", "activations.query-activations". Use mcnext_list_endpoints to discover ids.
pathParamsNoPath parameter values, e.g. { "contentKey": "my-email" }.

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the read-only nature (GET, kind 'read') and states the requirement for the path parameter, which are useful behavioral cues. However, it does not mention potential error responses, authentication needs, or rate limits, and it does not clarify whether the operation is safe or idempotent beyond the 'read' label. This is minimal but not misleading, so a score of 3 is appropriate.

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

Conciseness5/5

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

The description is a single, tightly written sentence that front-loads the core action and the critical requirement. There is zero wasted language, and every word contributes to clarity. It is an example of efficient specification.

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 operation with no output schema and no annotations, the description provides the bare essentials but omits context about response format, error handling, or when to prefer this over mcnext_query. It also does not explain that endpointId must be discovered via mcnext_list_endpoints, though that is covered in the schema. Given the simplicity of the tool, it is minimally adequate but could benefit from a sentence on usage context or typical workflow.

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

Parameters4/5

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

Schema coverage is 100%, so each parameter already has a description. The tool description adds value by explicitly stating 'Requires the path parameter,' which is not marked as required in the schema (only endpointId is). This clarifies a common usage pattern and helps the agent understand that pathParams is typically needed, even if not schema-required. This additional guidance warrants a 4 rather than the baseline 3.

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 states a specific verb ('Fetch'), a resource ('a single record'), and the method ('by id or key, GET'). This clearly distinguishes it from siblings like mcnext_query (which implies multiple records) and mutating tools like mcnext_create/update/delete. It also explicitly labels the operation as a read, leaving no ambiguity about its purpose.

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 mentions 'Requires the path parameter' but does not explicitly state when to use this tool versus alternatives like mcnext_query. It implies use for single-record retrieval, but lacks explicit exclusions or conditions (e.g., 'for multiple records, use mcnext_query'). The schema does reference mcnext_list_endpoints for endpoint discovery, but that is outside the description, so the guidance is only implied, not explicit.

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

mcnext_updateUpdate a Marketing Cloud Next / Data 360 recordA

Update a record (PATCH or PUT, kind "update"). Requires the path parameter and a JSON body. For PATCH, include only the fields to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON request body.
queryNoQuery string parameters, e.g. { "pageSize": 50, "orderBy": "name" }.
headersNoAdditional request headers.
endpointIdYesEndpoint id from the catalog, e.g. "content.create-an-email-with-html", "activations.query-activations". Use mcnext_list_endpoints to discover ids.
pathParamsNoPath parameter values, e.g. { "contentKey": "my-email" }.

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the behavioral burden. It discloses that the tool modifies a record, supports PATCH or PUT, and specifies PATCH partial-update behavior. However, it does not mention authentication, response shape, idempotency, or whether PUT fully replaces fields, so the behavioral picture is only partially drawn.

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 compact: three short sentences front-load the operation, the required inputs, and the PATCH-specific rule. The phrase 'kind "update"' is slightly redundant, and the requirements sentence is imprecise, but overall the structure is scannable and free of filler.

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?

With 5 parameters, no output schema, and no annotations, the description needs to cover request construction, response expectations, and sibling-tool alternatives. It covers only request essentials and PATCH behavior, omitting response info, PUT full-replacement semantics, and how to distinguish this tool from the many Salesforce update siblings. An agent would still face meaningful uncertainty when 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?

Schema coverage is 100%, so the baseline is 3; the description adds useful context by explaining PATCH partial-update semantics and the need for a JSON body. However, its claim that the path parameter and body are required conflicts with the input schema, where only endpointId is required. This inconsistency weakens the reliability of the parameter guidance.

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 states a specific verb and resource: 'Update a record (PATCH or PUT)', and the title anchors it to Marketing Cloud Next / Data 360. This clearly separates it from siblings like mcnext_create, mcnext_delete, mcnext_query, and mcnext_read. The 'kind "update"' phrase is redundant, but it does not reduce clarity.

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

Usage Guidelines4/5

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

The description establishes clear usage context: update an existing record, with PATCH/PUT semantics and a concrete PATCH rule ('include only the fields to change'). It also names required inputs, though those requirements conflict with the schema's required list. It does not explicitly contrast with alternatives such as mcnext_create or sf_update_record, so it falls short of full when-to-use/when-not-to-use guidance.

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

sf_bulk_create_recordsBulk create Salesforce recordsA

Create up to 200 records in one call (POST /composite/sobjects). Each record is a field map. Set allOrNone to true to roll back the whole batch if any record fails. Larger inputs are split into multiple calls automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
recordsYesArray of field maps, e.g. [{ "Name": "A" }, { "Name": "B" }].
sobjectYesAPI name of the sObject, e.g. "Account", "Contact", or "My_Object__c".
allOrNoneNoRoll back the entire batch if any record fails. Default false.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does well: it discloses the one-call batch limit, the POST endpoint, allOrNone rollback semantics, and automatic splitting of larger inputs. It does not mention response shape or partial-success behavior when allOrNone is false, which keeps it short of 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.

Conciseness5/5

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

The description is three tight sentences with no filler. The core action and limit are front-loaded, and each subsequent sentence adds valuable behavioral or parameter guidance. Every sentence earns its place.

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

Completeness4/5

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

For a moderately complex bulk operation with no annotations and no output schema, the description covers the main usage contract well: batch limits, rollback behavior, and automatic splitting. It is close to complete but does not describe what the call returns or how errors from split calls surface, which would make it fully self-contained.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents sobject, records, and allOrNone. The description adds some context by calling records 'a field map' and explaining the allOrNone effect, but most of this is a restatement of what the schema already provides. Baseline 3 applies.

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 and resource: 'Create up to 200 records in one call (POST /composite/sobjects).' This clearly describes the operation and distinguishes it from siblings like sf_bulk_update_records and sf_bulk_delete_records by stating the action and endpoint. The bulk scope is explicit, so an agent won't confuse it with sf_create_record.

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

Usage Guidelines4/5

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

The description clearly implies this is the bulk-create tool, and the 200-record cap plus automatic splitting tells an agent when its capacity is appropriate. It does not explicitly name alternatives such as sf_create_record for single-record creates, nor does it state when not to use this tool, so it misses the explicit exclusion that would earn a 5.

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

sf_bulk_delete_recordsBulk delete Salesforce recordsA

Delete up to 200 records per call (DELETE /composite/sobjects?ids=...). This is destructive and is blocked unless MC_NEXT_ALLOW_DESTRUCTIVE=true. Larger inputs are split into multiple calls automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesArray of record Ids to delete.
sobjectYesAPI name of the sObject, e.g. "Account", "Contact", or "My_Object__c".
allOrNoneNoRoll back the entire batch if any delete fails. Default false.

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description fully discloses the critical behavioral facts: the operation is destructive, it is gated behind an environment variable, it has a 200-record per-call cap, and larger inputs are transparently chunked. This is exactly the side-effect and prerequisite information an agent needs before invoking a delete tool.

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, information-dense sentences front-load the action and limit, then give the destructive warning, then the batching behavior. No filler or repetition.

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 destructive multi-record tool with no output schema, the description covers the essential operational context: what is deleted, the per-call limit, the guard flag, and automatic handling of larger inputs. An agent has enough to decide whether to invoke it and what to expect.

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

Parameters3/5

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

Schema coverage is 100% and the schema descriptions for ids, sobject, and allOrNone are already clear and complete. The description reinforces the ids limit and batching behavior, but does not add significant new meaning beyond the schema, so the baseline 3 applies.

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 action on a specific resource: delete up to 200 Salesforce records via the composite sobjects endpoint. The bulk scope and per-call limit distinguish it from single-record delete siblings like sf_delete_record and from bulk create/update tools.

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

Usage Guidelines4/5

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

The description clearly frames when to use the tool: for deleting batches of records up to 200 per call, with automatic splitting for larger inputs. It also flags a prerequisite (MC_NEXT_ALLOW_DESTRUCTIVE=true). It does not explicitly name alternative tools for single-record deletes, 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.

sf_bulk_update_recordsBulk update Salesforce recordsA

Update up to 200 records in one call (PATCH /composite/sobjects). Each record must include its Id plus the fields to change. Larger inputs are split into multiple calls automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
recordsYesArray of field maps, each including "Id", e.g. [{ "Id": "001...", "Name": "A" }].
sobjectYesAPI name of the sObject, e.g. "Account", "Contact", or "My_Object__c".
allOrNoneNoRoll back the entire batch if any record fails. Default false.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the endpoint, the 200-record cap, the required `Id` field, and the automatic splitting behavior. It does not cover partial-failure or response-shape behavior, 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.

Conciseness5/5

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

Three short sentences, each earning its place: the core capability, the required record shape, and the automatic splitting behavior. No filler or repetition.

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?

All invocation-critical details are present: endpoint, batch size, `Id` requirement, auto-splitting, and the `allOrNone` option in the schema. The only notable gap is the lack of response/error shape, but since there is no output schema, this is a minor omission.

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

Parameters3/5

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

Schema description coverage is 100%, so per the rubric the baseline is 3. The description reinforces that `records` entries need an `Id` plus changed fields and adds batch-size context, but it does not add meaning beyond what the schema already conveys.

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

Purpose5/5

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

Clearly states the action ('update'), the resource ('Salesforce records'), and the distinguishing scope ('up to 200 records in one call', PATCH /composite/sobjects). The bulk nature separates it from single-record siblings like sf_update_record and from create/delete bulk tools.

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

Usage Guidelines4/5

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

Provides clear context by specifying a batch limit and noting that larger inputs are split automatically. It does not explicitly name alternatives or say 'use this tool instead of X', so it stops short of 5, but the intended use case is unmistakable.

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

sf_compositeRun a Salesforce Composite requestA

Execute up to 25 subrequests in one API call (POST /composite), like Inspector's Composite usage. Subrequests can reference earlier results with "@{referenceId.field}". Useful for multi-step operations that must stay within one API call.

ParametersJSON Schema
NameRequiredDescriptionDefault
allOrNoneNoRoll back all subrequests if any fails. Default false.
compositeRequestYesSubrequests, max 25.

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It discloses the batching limit, the endpoint, and the '@{referenceId.field}' chaining behavior. However, it does not mention side effects of mutating subrequests, allOrNone rollback behavior, or failure/response semantics, which are significant for a tool that can execute arbitrary HTTP methods.

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 with the core capability front-loaded and the reference syntax explained. The phrase 'like Inspector's Composite usage' is a minor distraction for an AI agent, but the rest is tight and useful.

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?

The description is adequate for selection and basic invocation, but with no output schema and no annotations it leaves gaps: it does not describe the composite response shape, per-subrequest status handling, or allOrNone failure behavior. Given the tool's complexity, more context would be needed for fully autonomous use.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real value by explaining the reference syntax '@{referenceId.field}' and the 'one API call' semantics, which are not fully captured by the schema's referenceId description. This helps an agent construct compositeRequest correctly.

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

Purpose5/5

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

The description names a specific verb ('Execute'), a concrete resource ('up to 25 subrequests in one API call (POST /composite)'), and the distinguishing constraint 'must stay within one API call.' This clearly separates it from single-request siblings like sf_rest_request or the CRUD tools.

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

Usage Guidelines4/5

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

It states the intended context: 'multi-step operations that must stay within one API call.' It does not explicitly name alternatives or give when-not-to-use conditions, but the use case is clear enough for an agent to choose this over single-request tools.

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

sf_create_custom_fieldCreate a custom fieldA

Create a custom field on an object via the Tooling API (POST /tooling/sobjects/CustomField), mirroring Inspector's Field Creator. Optionally grants field-level security to profiles/permission sets. Gated behind MC_NEXT_ALLOW_METADATA_CHANGES=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesField API name without the __c suffix, e.g. "Due_Date".
typeYesField type.
labelYesField label, e.g. "Due Date".
scaleNoDecimal places for numeric types.
lengthNoLength for Text/LongTextArea/Html.
sortedNoSort picklist values alphabetically. Default false.
uniqueNoMark the field unique. Default false.
grantToNoField-level security grants, applied after the field is created.
sobjectYesObject API name, e.g. "Account" or "Invoice__c".
requiredNoMark the field required. Default false.
precisionNoTotal digits for numeric types.
externalIdNoMark the field as an external id. Default false.
descriptionNo
defaultValueNoDefault value (e.g. true for a Checkbox).
visibleLinesNoVisible lines for long text areas.
inlineHelpTextNo
picklistValuesNoPicklist values, required for Picklist/MultiselectPicklist.
firstValueDefaultNoMake the first picklist value the default. Default false.

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral disclosure burden. It does disclose the endpoint, the metadata-change gate (MC_NEXT_ALLOW_METADATA_CHANGES=true), and optional field-level security grants. However, it omits side effects, permission requirements, and reversibility for this mutation operation.

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, each carrying distinct information: the action and endpoint, the optional FLS behavior, and the required gate flag. It is front-loaded with the core purpose and contains 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?

The description is adequate for basic invocation, but with 18 parameters, no output schema, and no annotations, it should disclose more about expected responses, error conditions, and permission prerequisites. The gate flag and endpoint help, but an agent is left guessing about post-creation behavior.

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 89%, so the baseline is 3; the schema already documents most parameters well. The description adds value by mentioning field-level security grants, but it does not add parameter-level detail beyond what the schema provides.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Create a custom field on an object' via the Tooling API. It names the exact endpoint and distinguishes this from sibling tools like sf_create_custom_object and sf_delete_custom_field. The reference to Inspector's Field Creator further clarifies intent.

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 clearly implies when to use this tool: when creating a custom field on an object. However, it does not explicitly state when not to use it or mention alternatives such as sf_create_custom_object for objects. The gating flag is a useful prerequisite but not a full usage guideline.

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

sf_create_custom_objectCreate a custom objectA

Create a custom object via the Tooling API (POST /tooling/sobjects/CustomObject). The API name is derived from label (or name) with a "__c" suffix. A Name field is created automatically unless you pass nameFieldType: "AutoNumber". Gated behind MC_NEXT_ALLOW_METADATA_CHANGES=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoAPI name without the __c suffix, e.g. "Invoice". Defaults to a slug of the label.
labelYesSingular label, e.g. "Invoice".
descriptionNo
pluralLabelNoPlural label, e.g. "Invoices". Defaults to label + "s".
sharingModelNoOrg-wide default sharing. Default "ReadWrite".
nameFieldTypeNoType of the auto-created Name field. Default "Text".
nameFieldLabelNoLabel for the auto-created Name field.
nameFieldFormatNoDisplay format when nameFieldType is "AutoNumber", e.g. "INV-{0000}".
deploymentStatusNoDeployment status. Default "Deployed".

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations available, the description carries the behavioral burden and does so well: it discloses the endpoint, the automatic '__c' suffix derivation, the auto-created Name field behavior, and the feature-flag gate. It lacks details about permissions or failure modes, but otherwise gives strong 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?

Three dense sentences convey the endpoint, naming rule, key side effect, and gating condition with zero filler. The most decision-relevant information is front-loaded.

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

Completeness4/5

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

For a 9-parameter metadata-create tool with no annotations and no output schema, the description covers the critical behavioral context: endpoint, naming derivation, auto-created Name field, and the required feature flag. Combined with high schema coverage, this is enough to invoke the tool correctly, though return-value details could still be an optional addition.

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 already 89%, and the description adds important relationships not visible in the schema: 'label' (or 'name') drives the API-name derivation, and 'nameFieldType: AutoNumber' suppresses the automatic Name field. This helps the agent understand how the parameters interact.

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

Purpose5/5

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

The description names the operation ('Create a custom object'), the exact API resource ('CustomObject' via Tooling API), and the POST endpoint, making the tool's purpose unambiguous. It clearly distinguishes this from record-level tools like sf_create_record and field-level tools like sf_create_custom_field.

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 gives a clear prerequisite (MC_NEXT_ALLOW_METADATA_CHANGES=true) and implies a metadata-creation context, but it never explicitly tells the agent when to choose this over alternatives such as sf_create_record or sf_create_custom_field. An agent must infer routing from the tool name and the phrase 'custom object.'

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

sf_create_recordCreate a Salesforce recordA

Create a single sObject record (POST /sobjects/{SObject}). Returns the new record Id. Use sf_describe_object first to check which fields are createable and required.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesField name -> value map, e.g. { "Name": "Acme", "Industry": "Technology" }. Use sf_describe_object to discover field names and types.
sobjectYesAPI name of the sObject, e.g. "Account", "Contact", or "My_Object__c".
toolingNoCreate via the Tooling API instead (for metadata records). Default false.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses the operation (POST), the effect (creating a record), and the return value (new record Id). It also warns about field requirements without over-explaining, which is strong for a create tool.

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 tightly written sentences: the first is action-oriented and states the return value, and the second provides a prerequisite. Every clause earns its place with no padding.

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

Completeness4/5

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

Given the absence of annotations and an output schema, the description appropriately covers the core invocation details: what is created, how it is called, what is returned, and what to do first. It leaves out error behavior and bulk alternatives, but these are secondary for this tool.

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 schema already documents all three parameters with 100% coverage, so the baseline is 3. The description adds a useful pointer to sf_describe_object but does not add parameter-level meaning beyond what the schema provides.

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

Purpose5/5

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

The description states a specific verb ('Create'), a precise resource ('single sObject record'), and the HTTP endpoint. It establishes the scope as single-record creation, which clearly differentiates it from sibling bulk operations and update/delete tools.

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

Usage Guidelines4/5

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

The description gives clear, actionable context: use sf_describe_object first to check createable and required fields. It does not explicitly exclude alternatives like sf_bulk_create_records, but the word 'single' communicates the intended use case clearly enough.

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

sf_delete_custom_fieldDelete a custom fieldA

Delete a custom field via the Tooling API (DELETE /tooling/sobjects/CustomField/{id}). Requires the field's Tooling API Id — find it with sf_list_custom_fields. Gated behind MC_NEXT_ALLOW_METADATA_CHANGES=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldIdYesThe Tooling API Id of the CustomField record (starts with 00N).

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the HTTP mechanism, the prerequisite ID, and the feature gate. However, it does not explicitly state that deletion is permanent or describe side effects, permissions, or failure conditions, which would strengthen a destructive tool's transparency.

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, each earning its place: the action, the prerequisite, and the gate. No filler or repetition beyond what is necessary.

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

Completeness4/5

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

For a simple one-parameter delete operation, the description covers the endpoint, how to get the required ID, and the activation flag. Since there is no output schema, a brief note about the expected response would improve completeness, but nothing critical is missing for invoking the tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds extra value by telling the agent how to obtain the fieldId via sf_list_custom_fields, supplementing the schema's format hint with a concrete lookup path.

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

Purpose5/5

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

The description uses a specific verb, 'Delete a custom field,' and names the exact resource and API endpoint (DELETE /tooling/sobjects/CustomField/{id}). This clearly distinguishes it from sibling tools like sf_delete_custom_object and sf_list_custom_fields.

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

Usage Guidelines4/5

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

The description gives clear actionable context: it requires the field's Tooling API Id and points to sf_list_custom_fields as the way to find it. It also states the gating flag, but it does not explicitly contrast this tool with deletion alternatives or state when not to use it.

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

sf_delete_custom_objectDelete a custom objectA

Delete a custom object via the Tooling API (DELETE /tooling/sobjects/CustomObject/{id}). Requires the object's Tooling API Id — find it with sf_list_custom_objects. This removes the object and its data. Gated behind MC_NEXT_ALLOW_METADATA_CHANGES=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectIdYesThe Tooling API Id of the CustomObject record (starts with 01I).

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It clearly discloses the destructive nature ('removes the object and its data') and the gating condition. However, it doesn't mention irreversibility or any side effects beyond data deletion, which could be more explicit for a delete operation. Still, the key behavioral traits are evident.

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

Conciseness5/5

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

The description is two sentences, front-loading the core action and then adding the prerequisite and gating. Every sentence carries useful information; there is no fluff or repetition. It is concise while covering all key points.

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 simple delete operation with one parameter and no output schema, the description is complete. It covers what is deleted, how to identify the target, the API used, and a gating condition. Nothing an agent needs to invoke it correctly 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?

Schema coverage is 100% and the schema already describes objectId as the Tooling API Id. The description adds value by explicitly stating the requirement and pointing to a method to find that ID (sf_list_custom_objects). This goes beyond the schema's bare description and helps an agent populate the parameter correctly.

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

Purpose5/5

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

The description clearly states it deletes a custom object via the Tooling API and specifies the exact resource and endpoint. It distinguishes from siblings like sf_delete_custom_field and sf_create_custom_object by naming the specific operation and resource. The mention of the required Tooling API Id further clarifies the scope.

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

Usage Guidelines5/5

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

The description explicitly states the prerequisite (Tooling API Id) and points to sf_list_custom_objects as the way to obtain it. It also discloses the gating condition (MC_NEXT_ALLOW_METADATA_CHANGES=true), which is a clear usage constraint. Though it doesn't name all alternatives, this is strong guidance for an agent.

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

sf_delete_recordDelete a Salesforce recordA

Delete a single record (DELETE /sobjects/{SObject}/{id}). This is destructive and is blocked unless MC_NEXT_ALLOW_DESTRUCTIVE=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe 15- or 18-character Salesforce record Id.
sobjectYesAPI name of the sObject, e.g. "Account", "Contact", or "My_Object__c".
toolingNoDelete via the Tooling API instead. Default false.

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full transparency burden. It usefully discloses that the operation is destructive and gated behind MC_NEXT_ALLOW_DESTRUCTIVE=true, which is critical behavior. However, it does not mention permanence/recoverability, required Salesforce permissions, or what response or error the caller should expect, leaving material behavioral gaps.

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 deliver the operation, the HTTP mapping, the destructive nature, and the environment variable gate with zero filler. The core verb and resource are front-loaded, and every clause earns 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 mutation with no annotations and no output schema, the description communicates the key gate and scope but omits return-value behavior and failure modes. An agent can attempt the call correctly, but it lacks information about success indication, 404 handling, and post-delete effects, so the description is only partially complete.

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

Parameters3/5

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

The input schema already has 100% description coverage for all three parameters, so the baseline is 3. The description's endpoint template {SObject}/{id} mirrors but does not enrich the schema. It adds no new meaning about id format, sobject naming, or the tooling flag beyond what the schema already provides.

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

Purpose5/5

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

The description opens with a precise verb-resource pair: 'Delete a single record', then reinforces it with the exact HTTP endpoint DELETE /sobjects/{SObject}/{id}. 'Single' explicitly distinguishes this tool from bulk delete siblings like sf_bulk_delete_records, and the endpoint makes the operation unambiguous.

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

Usage Guidelines4/5

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

The description gives clear usage context: this is for deleting a single Salesforce record, and it is only usable when MC_NEXT_ALLOW_DESTRUCTIVE=true. It does not name alternative sibling tools or explicitly state when not to use it, but the 'single record' scope plus the destructive guardrail provides enough guidance for correct selection in most cases.

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

sf_describe_objectDescribe a Salesforce objectA

Get field-level metadata for an sObject: field names, types, labels, picklist values, and whether each field is required/createable/updateable. Essential before writing SOQL or building a record payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
sobjectYesAPI name of the object, e.g. "Account" or "My_Object__c".
toolingNoDescribe a Tooling API object instead. Default false.
includePicklistsNoInclude picklist values for picklist fields. Default false (keeps output small).

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It discloses that includePicklists defaults to false to keep output small, which is a behavioral trait. It implies a read operation but does not explicitly state read-only status, error behavior, or rate limits. It adds moderate transparency beyond the schema.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the key output and immediately followed by practical guidance. Zero filler; every word contributes.

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 describe tool with no output schema and no annotations, it adequately explains what is returned and why to use it. It does not mention tooling API or error handling, but those are covered by parameter descriptions. It provides enough for an agent to call it correctly and interpret the result.

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

Parameters4/5

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

Schema coverage is 100%, so each parameter is already documented. The description adds extra context for includePicklists (default false to keep output small), which enriches parameter understanding. It also implicitly explains the purpose of the sobject parameter by framing the tool as a metadata getter.

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

Purpose5/5

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

The description clearly states the action (get metadata) and the resource (sObject), listing specific metadata types (field names, types, labels, picklist values, flags). It also distinguishes itself from siblings like sf_list_objects and sf_soql_query by framing its use as a prerequisite for SOQL and payload building.

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

Usage Guidelines4/5

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

The description explicitly states when to use it ('Essential before writing SOQL or building a record payload'), giving clear context for invocation. It does not explicitly name alternatives or exclusions, but the use-case guidance is strong enough for an agent to choose it over sibling query/list tools.

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

sf_get_recordGet a Salesforce recordA

Fetch a single record by Id (GET /sobjects/{SObject}/{id}). Optionally restrict the returned fields with fields to keep the response small.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe 15- or 18-character Salesforce record Id.
fieldsNoOnly return these field names, e.g. ["Id", "Name"]. Omit for all fields.
sobjectYesAPI name of the sObject, e.g. "Account", "Contact", or "My_Object__c".
toolingNoRead via the Tooling API instead. Default false.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden, and 'Fetch' plus 'GET /sobjects/{SObject}/{id}' makes the read-only nature clear. The fields option also signals response-size control. It does not mention not-found behavior or auth requirements, but for a straightforward GET-by-Id operation the core behavior is transparent.

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 contain the endpoint, the primary use, and the optional field restriction. The most decision-relevant information is front-loaded and every phrase earns its place.

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

Completeness4/5

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

For a simple get-by-Id operation with a fully described schema, the description gives enough to invoke the tool and predict its basic behavior. Since there is no output schema, a brief note on the return shape would fully complete the picture, but 'fetch a record' largely covers it.

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

Parameters3/5

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

Schema coverage is 100%: every parameter already has a meaningful description, so the schema carries the semantic weight. The description adds only the rationale that restricting fields keeps the response small, which is useful but not essential.

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

Purpose5/5

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

The description uses a specific verb ('Fetch') and resource ('single record by Id'), and also gives the exact REST endpoint pattern. This clearly distinguishes it from siblings like sf_soql_query, sf_create_record, and sf_update_record, which have different targets and verbs.

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?

'Fetch a single record by Id' provides clear invocation context: use this when you already have a record Id and need one object. It does not explicitly name query or rest_request as alternatives, which keeps it just below a 5.

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

sf_list_custom_fieldsList custom fieldsA

List custom fields with their Tooling API Ids (via a Tooling API SOQL query on CustomField). Use the returned Id with sf_delete_custom_field.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results. Default 200.
searchNoFilter by DeveloperName (case-insensitive substring).
sobjectNoOnly fields on this object, e.g. "Account". Omit for all objects.

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description must carry behavioral disclosure. It implies a read-only list operation but does not explicitly state that it has no side effects or discuss rate limits or pagination. The mention of Tooling API SOQL gives some context, but it does not go beyond the obvious.

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

Conciseness5/5

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

The description is two sentences with no fluff. It front-loads the purpose and provides a practical pointer to a sibling tool. Every word earns its place.

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

Completeness4/5

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

The description is adequate for a simple list tool: it states what is returned (custom fields with Ids) and how to use the result. The schema covers parameter details. It could be slightly more explicit about the output structure, but that is not critical given the simplicity.

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?

All three parameters (limit, search, sobject) are fully described in the schema (100% coverage). The description adds no additional parameter semantics, so it meets the baseline of 3.

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

Purpose5/5

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

The description clearly states the action (list), the resource (custom fields), and a distinguishing detail (Tooling API Ids). It also specifies the underlying method (SOQL query on CustomField). This distinguishes it from sibling tools like sf_list_objects or sf_list_custom_objects.

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

Usage Guidelines3/5

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

The description implies usage for enumerating custom fields but does not explicitly contrast with alternatives. It only mentions a follow-up tool (sf_delete_custom_field) without stating when to use this tool versus others, so the agent must infer the appropriate context.

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

sf_list_custom_objectsList custom objectsA

List custom objects in the org with their Tooling API Ids (via a Tooling API SOQL query on CustomObject). Use the returned Id with sf_delete_custom_object.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results. Default 200.
searchNoFilter by DeveloperName (case-insensitive substring).

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It does add useful context by revealing that this runs 'a Tooling API SOQL query on CustomObject' and returns Tooling API Ids. It does not explicitly confirm read-only behavior, ordering, or output shape beyond the Ids, but 'List' and 'query' imply a non-mutating operation.

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

Conciseness5/5

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

The description is two sentences with no filler. The primary purpose is front-loaded, and the downstream usage hint ('Use the returned Id with sf_delete_custom_object') is a valuable, compact addition.

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

Completeness4/5

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

For a simple list tool with no output schema and no annotations, the description provides the core information: what is listed, how it is queried, and what the returned Ids are for. It does not detail every return field, but the stated purpose of obtaining Tooling API Ids is sufficient for the intended use.

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

Parameters3/5

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

Schema description coverage is 100%: both 'limit' and 'search' already have meaningful descriptions in the input schema. The tool description adds no additional parameter-level detail, so the baseline of 3 applies.

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 states a specific action ('List'), a clear resource ('custom objects in the org'), and a key output detail ('Tooling API Ids'). It also distinguishes this from general object listing by specifying custom objects and the Tooling API query mechanism.

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

Usage Guidelines3/5

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

The description implies a usage context by saying 'Use the returned Id with sf_delete_custom_object,' which helps the agent understand one downstream purpose. However, it does not explicitly state when to prefer this tool over siblings like sf_list_objects or sf_soql_query, nor does it mention exclusions.

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

sf_list_objectsList Salesforce objectsA

List the sObjects in the org (global describe). Returns each object's name, label, and key prefix. Use sf_describe_object for field-level detail.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoFilter by name or label (case-insensitive substring).
toolingNoList Tooling API objects instead. Default false.

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of explaining behavior. It discloses that this is a global describe and specifies the returned fields (name, label, key prefix), but it does not mention pagination, performance implications, or any filtering behavior beyond what the schema already states.

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 each carry distinct value: what the tool does, what it returns, and when to use a sibling tool. The information is front-loaded and there is no redundant or filler content.

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

Completeness4/5

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

For a simple list tool with no output schema, the description covers the key return shape and the main alternative. It could mention how search interacts with the global describe, but that is already covered by the input schema, so the description is largely complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters search and tooling are already documented. The description adds no additional meaning about parameter usage, so a baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('List'), a clear resource ('the sObjects in the org'), and the method ('global describe'). It also differentiates itself from the sibling tool sf_describe_object by noting the tools covers listing vs. field-level detail, making the tool's purpose unambiguous.

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

Usage Guidelines4/5

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

The description provides explicit guidance to use sf_describe_object when field-level detail is needed, giving the agent an alternative route. It does not mention exclusions or when to prefer other sibling list tools like sf_list_custom_objects, but the context is clear enough for this tool's scope.

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

sf_org_limitsGet Salesforce org limitsA

Read the org's governor limits and current usage (/limits), including DailyApiRequests, DataStorageMB, and FileStorageMB. Useful for checking remaining API quota before bulk work.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoOnly return limits whose name contains this string (case-insensitive).

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It explicitly states it 'Reads' the limits, implying a non-destructive operation. It doesn't disclose any additional behavior such as authentication requirements, rate limits, or return format. For a simple read operation, the description is adequate but not rich; it provides the endpoint (/limits) and examples but omits details about response structure.

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

Conciseness5/5

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

The description is two sentences with no filler. It front-loads the core action ('Read the org's governor limits and current usage') and follows with a practical use case. Every word serves a purpose, making it highly efficient.

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 tool with one optional parameter and no output schema, the description covers the essential information: what it does, examples, and a practical use case. It doesn't describe the response structure, but since the tool name and description are clear, this is a minor gap. Given the simplicity, it is sufficiently complete.

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 schema description coverage is 100%, and the schema already documents the 'filter' parameter clearly ('Only return limits whose name contains this string (case-insensitive).'). The description does not mention the filter or add any extra semantic meaning beyond what the schema provides. With full schema coverage, the baseline of 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?

The description clearly states the tool reads the org's governor limits and current usage, with specific examples like DailyApiRequests, DataStorageMB, and FileStorageMB. It uses a specific verb ('Read') and resource ('org's governor limits and current usage'). It doesn't explicitly differentiate from siblings like sf_rest_request, but the purpose is unambiguous enough to distinguish it as a dedicated limits reader.

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

Usage Guidelines4/5

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

The description provides a clear use case: 'Useful for checking remaining API quota before bulk work.' This gives an agent context on when to invoke it. However, it doesn't mention alternatives or explicitly state when not to use it, leaving some room for interpretation.

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

sf_rest_requestCall any Salesforce REST endpointA

Generic REST explorer (like Salesforce Inspector's REST Explorer). Call any path under /services/data/vXX with any method. Paths may be relative (e.g. "/sobjects/Account/describe") or absolute (e.g. "/services/data/v66.0/limits"). Use this for endpoints not covered by the other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON request body for POST/PATCH/PUT.
pathYesPath relative to /services/data/vXX, or an absolute /services/data/... path.
methodYesHTTP method.
headersNoAdditional request headers.

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of disclosing behavior. It does transparently state that any method can be used, including potentially destructive ones, and clarifies path resolution rules. However, it does not mention authentication requirements, error behavior, or explicit warnings about mutating/destructive operations beyond the unadorned 'any method' phrase.

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

Conciseness5/5

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

The description is three sentences with no filler. It front-loads the core purpose, follows with path-format examples that resolve ambiguity, and ends with a directive on when to use it. Every sentence earns its place.

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

Completeness4/5

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

For a generic REST explorer with no output schema, the description adequately conveys the tool's purpose, path syntax, method flexibility, and fallback role. It does not detail the response format, error semantics, or rate limits, but these are less critical for a raw endpoint caller and the provided information is sufficient for correct invocation.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantic detail about the most ambiguous parameter, 'path', by explaining that it can be either relative to /services/data/vXX or an absolute /services/data/... path, and provides concrete examples. This goes beyond the schema's own description.

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 states a specific verb ('Call'), a well-defined resource ('any path under /services/data/vXX'), and any HTTP method, with examples of both relative and absolute paths. It explicitly distinguishes itself from siblings by positioning itself as the generic fallback for endpoints not covered by other tools, making it easy for an agent to recognize when this tool is the right choice.

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

Usage Guidelines5/5

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

The description gives an explicit usage condition: 'Use this for endpoints not covered by the other tools.' This directly tells an agent when to select this tool over siblings, and implicitly when not to use it, without requiring the agent to inspect other tool schemas.

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

sf_soql_queryRun a SOQL queryA

Execute a SOQL query against the org (Salesforce REST /query). Returns records plus done and nextRecordsUrl for pagination. Use sf_soql_query_more to fetch the next page. Example: SELECT Id, Name FROM Account LIMIT 10

ParametersJSON Schema
NameRequiredDescriptionDefault
soqlYesThe SOQL query, e.g. "SELECT Id, Name FROM Account LIMIT 10".
toolingNoQuery the Tooling API instead of the data API (for metadata objects). Default false.

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It does disclose the return fields ('records', 'done', 'nextRecordsUrl') and pagination behavior, which is useful. However, it omits any mention of side effects (or lack thereof), permission requirements, rate limits, or error behavior, leaving gaps for a tool with no annotation coverage.

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

Conciseness5/5

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

Three sentences, each earning its place: the first states the core action, the second explains pagination and directs to the sibling, and the third gives a concrete example. The most important scoping information is front-loaded.

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

Completeness4/5

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

For a two-parameter tool with 100% schema coverage and no output schema, the description covers the key return shape and pagination flow, which is what an agent needs to call it and handle the response. It could additionally mention error conditions or overall result size limits, but these are secondary for a straightforward query tool.

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

Parameters3/5

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

Schema description coverage is 100% for both 'soql' and 'tooling', so the structured schema already explains the parameters. The description adds an example query but that example duplicates the one already in the schema, providing no additional parameter semantics beyond what the schema offers.

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 states a specific verb ('Execute'), a concrete resource ('SOQL query against the org'), and even identifies the underlying REST endpoint. It clearly distinguishes itself from sf_soql_query_more by explaining that this tool returns pagination fields and that the sibling handles subsequent pages.

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

Usage Guidelines5/5

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

The description gives an explicit alternative: 'Use sf_soql_query_more to fetch the next page.' This tells the agent exactly when not to use this tool and which sibling to call, which is the core selection guidance needed for pagination.

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

sf_soql_query_moreFetch the next page of a SOQL queryA

Fetch the next page of results using the nextRecordsUrl returned by sf_soql_query.

ParametersJSON Schema
NameRequiredDescriptionDefault
nextRecordsUrlYesThe nextRecordsUrl from a previous query, e.g. "/services/data/v66.0/query/01g...-2000".

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It discloses the core behavior (fetching the next page) and the dependency on a prior URL, but does not mention error behavior, whether further pagination URLs are returned, or the side-effect-free nature beyond the word 'Fetch'.

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?

A single sentence with a front-loaded verb and no filler. Every word contributes to the meaning, and the structure is immediately scannable.

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 one-parameter tool with no output schema, the description states the source of the required URL and the purpose. It does not detail response shape or pagination termination, but the operation is simple enough that the description is adequate.

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

Parameters3/5

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

Schema coverage is 100% and the parameter already has a description and example. The description adds the relational context that the URL comes from `sf_soql_query`, but does not add significant new parameter-level meaning, so the baseline score of 3 applies.

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 ('Fetch') and resource ('next page of results') and explicitly ties it to `nextRecordsUrl` returned by `sf_soql_query`. This clearly distinguishes it from the initial-query sibling and leaves no ambiguity about what the tool does.

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 clear context: this is the follow-up pagination tool for a prior `sf_soql_query` call. It does not explicitly list when-not-to-use or alternative tools, but the dependency on `nextRecordsUrl` makes the usage boundary obvious.

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

sf_update_recordUpdate a Salesforce recordA

Update a single record (PATCH /sobjects/{SObject}/{id}). Pass only the fields you want to change. Returns 204 No Content on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe 15- or 18-character Salesforce record Id.
fieldsYesField name -> value map, e.g. { "Name": "Acme", "Industry": "Technology" }. Use sf_describe_object to discover field names and types.
sobjectYesAPI name of the sObject, e.g. "Account", "Contact", or "My_Object__c".
toolingNoUpdate via the Tooling API instead. Default false.

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It does disclose meaningful traits: the operation is a PATCH (partial update), only provided fields are changed, and success returns 204 No Content. However, it omits permissions, error behavior, or side-effect details, so the transparency is adequate but 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?

The description is two short sentences with no filler. The core operation and endpoint are front-loaded, followed by the key usage rule and the success response, making every sentence earn its place.

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

Completeness4/5

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

For a simple update tool with a well-covered schema and no output schema, the description provides the essential return information (204) and the partial-update semantics. It is complete enough to invoke correctly, though error cases and permission requirements are not addressed.

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 input schema already covers all 4 parameters at 100%, giving a baseline of 3. The description adds value beyond the schema by clarifying partial-update semantics: 'Pass only the fields you want to change' tells the agent the fields object is not a full replacement payload.

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 states a specific verb and resource: 'Update a single record' with the Salesforce REST endpoint PATCH /sobjects/{SObject}/{id}. The 'single record' qualifier clearly distinguishes it from bulk update siblings like sf_bulk_update_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?

It provides clear context: update one record via PATCH, and 'Pass only the fields you want to change' gives practical invocation guidance. It does not explicitly name alternatives or when-not-to-use scenarios, but the single-record framing makes the intended scope evident relative to bulk tools.

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. 28 tool updatesv1.0.0
    • First observedmcnext_action
    • First observedmcnext_create
    • First observedmcnext_delete
    • First observedmcnext_describe_endpoint
    • First observedmcnext_list_endpoints
    • First observedmcnext_query
    • First observedmcnext_read
    • First observedmcnext_update
    • First observedsf_bulk_create_records
    • First observedsf_bulk_delete_records
    • First observedsf_bulk_update_records
    • First observedsf_composite
    • First observedsf_create_custom_field
    • First observedsf_create_custom_object
    • First observedsf_create_record
    • First observedsf_delete_custom_field
    • First observedsf_delete_custom_object
    • First observedsf_delete_record
    • First observedsf_describe_object
    • First observedsf_get_record
    • First observedsf_list_custom_fields
    • First observedsf_list_custom_objects
    • First observedsf_list_objects
    • First observedsf_org_limits
    • First observedsf_rest_request
    • First observedsf_soql_query
    • First observedsf_soql_query_more
    • First observedsf_update_record

TDQS

A3.7/5.0

Scored across 28 tools

Disambiguation3/5

The mcnext_* CRUD tools and the sf_* record tools cover the same conceptual operations (create/read/update/delete/query) on different API families, so an agent could initially select the wrong one. The descriptions and naming prefixes clarify the distinction, but the overlap is real and requires careful reading.

Naming Consistency4/5

Most tools follow a clear prefix + verb + noun pattern (mcnext_query, sf_create_record, sf_bulk_delete_records). The main inconsistency is the use of read/get and query/soql_query across the two prefixes, plus mcnext_ vs sf_ as competing prefixes, but the overall style is uniform snake_case and predictable.

Tool Count3/5

28 tools is on the heavy side, and the server covers two fairly large domains (Salesforce operations and mc-next endpoint access). While most tools have a specific purpose, several could be consolidated or omitted without losing much capability.

Completeness4/5

The set covers CRUD, bulk operations, query/pagination, schema discovery, org limits, composite requests, and custom object/field lifecycle for Salesforce, plus generic endpoint browsing for mc-next. Minor gaps exist (e.g., no metadata update tools for custom objects/fields), but the generic REST and composite tools can fill most holes.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to interact with Salesforce organizations through natural language by exposing Salesforce APIs (REST, Bulk v2, GraphQL, Tooling, Auth) as MCP tools for querying data, managing records, and executing SOQL queries.
    4 npm
    19
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to securely interact with Salesforce CRM data through SOQL queries, CRUD operations, and metadata exploration. Supports connecting to Salesforce objects like Accounts, Contacts, and Opportunities via OAuth 2.0 authentication.
    8
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to interact with Salesforce through a secure interface for performing CRUD operations, executing SOQL queries, and managing schema discovery. It features a smart learning system that analyzes custom objects and fields to provide intelligent assistance tailored to specific Salesforce configurations.
    14
    28 npm
    17
    BSD 2-Clause "Simplified"
  • F
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to interact with Salesforce data by listing objects, describing fields, and executing SOQL queries.
    4
    -