Skip to main content
Glama
voriq-ai

smartleadai-mcp

by voriq-ai

smartleadai-mcp

Unofficial MCP integration for Smartlead. This project is not affiliated with, endorsed by, or sponsored by Smartlead.ai.

A Model Context Protocol server for the Smartlead API, with complete SmartProspect coverage, for MCP-capable agents and clients.

183 safety-reviewed tools across all four Smartlead API hosts. The official reference cannot be represented honestly as a simple tool-count ratio: it has duplicate pages, and one page combines four different API-key methods. Unsafe, duplicate, financially consequential, and undocumented operations are excluded with recorded reasons — see docs/endpoint-coverage.md.

That includes all 26 documented SmartProspect endpoints, the prospecting product other Smartlead MCP servers omit entirely.

Everything is built from Smartlead's public official documentation. Exposed routes, methods, parameters, corrections, and known documentation gaps are listed in docs/endpoint-coverage.md.


Table of contents


Related MCP server: SmartLead MCP Server

Why this exists

Smartlead's SmartProspect family lives on a different API host from the rest of the Smartlead API, and its most useful operations spend prospecting credits. Existing third-party tooling either omits SmartProspect entirely or targets routes that are not in Smartlead's current API reference (for example POST /api/v1/verify-emails, which returns 404 Cannot POST /api/v1/verify-emails). This package:

  • talks to all four documented Smartlead hosts, correctly and separately;

  • never implements an undocumented route — there is no verify_emails tool here;

  • treats credit spend as a privileged action that requires two independent approvals before any HTTP request is made;

  • returns structured JSON envelopes instead of prose, so an agent can branch on the result.

Requirements

  • Node.js 20.19 or newer. CI runs the full verification suite on 20.19 (the declared floor) and 22 on every push.

  • A Smartlead API key with SmartProspect access.

Installation

Run it directly with npx (no install step):

SMARTLEAD_API_KEY=sl_your_key npx -y smartleadai-mcp

Or install it and use the smartleadai-mcp bin:

npm install -g smartleadai-mcp
SMARTLEAD_API_KEY=sl_your_key smartleadai-mcp

The server speaks MCP over stdio. Started by hand it will simply wait for a client on stdin; that is expected.

Command line

The same binary is an MCP server when run with no arguments, and a small helper CLI when given a subcommand.

smartleadai-mcp init       # interactive setup: verify the key, print client config
smartleadai-mcp doctor     # check configuration and validate the key
smartleadai-mcp config     # print effective configuration (credential redacted)
smartleadai-mcp tools      # list tools with their safety classification
smartleadai-mcp help

Start here:

npx -y smartleadai-mcp init

init verifies the key, asks which safety mode you want, then prints ready-to-paste config for Claude Desktop, Claude Code and Hermes. It offers to write a local .env (mode 0600) but never overwrites an existing key.

doctor diagnoses a broken setup:

✓ configuration  valid
  key            <configured; hidden>
  mode           readonly  (default — no writes, no credit spend)
  credit spend   disabled
✓ api key        accepted by Smartlead
✓ tools          183 registered

Both validate the key against GET /countries?limit=1 — free, read-only, and touching no contact data, so diagnosing a setup can never spend credits or pull a prospect record. The CLI never prints any character from the configured key.

Client configuration

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "smartlead": {
      "command": "npx",
      "args": ["-y", "smartleadai-mcp"],
      "env": {
        "SMARTLEAD_API_KEY": "sl_your_key",
        "SMARTLEAD_MCP_MODE": "readonly"
      }
    }
  }
}

Hermes

Add this under mcp_servers in ~/.hermes/config.yaml (use hermes config path to locate the active profile's file):

mcp_servers:
  smartlead:
    command: "npx"
    args: ["-y", "smartleadai-mcp"]
    env:
      SMARTLEAD_API_KEY: "sl_your_key"
      SMARTLEAD_MCP_MODE: "readonly"
      SMARTLEAD_MCP_ALLOW_CREDIT_SPEND: "false"

Restart Hermes, then verify with hermes mcp test smartlead. Hermes filters the subprocess environment, so the API key must be present in this server's env mapping rather than merely exported in an unrelated shell.

Any other stdio MCP client

Launch the process with the API key in its environment and speak MCP over stdin/stdout:

{
  "command": "npx",
  "args": ["-y", "smartleadai-mcp"],
  "transport": "stdio",
  "env": { "SMARTLEAD_API_KEY": "sl_your_key" }
}

Programmatic use (for embedding in your own host):

import { createServer, loadConfig } from 'smartleadai-mcp';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';

const { server } = createServer(loadConfig());
await server.connect(new StdioServerTransport());

Environment variables

Variable

Required

Default

Notes

SMARTLEAD_API_KEY

yes

Read from the environment only. It can never be passed as a tool argument.

SMARTLEAD_CORE_BASE_URL

no

https://server.smartlead.ai/api/v1

Core Smartlead host.

SMARTLEAD_PROSPECT_BASE_URL

no

https://prospect-api.smartlead.ai/api/v1/search-email-leads

SmartProspect host.

SMARTLEAD_DELIVERY_BASE_URL

no

https://smartdelivery.smartlead.ai/api/v1

Smart Delivery host.

SMARTLEAD_SENDERS_BASE_URL

no

https://smart-senders.smartlead.ai/api/v1

Smart Senders host.

SMARTLEAD_MCP_MODE

no

readonly

readonly | standard | unrestricted.

SMARTLEAD_MCP_ALLOW_CREDIT_SPEND

no

false

Literal true/false.

SMARTLEAD_MCP_ALLOW_SEND

no

false

Literal true/false.

SMARTLEAD_MCP_ALLOW_DESTRUCTIVE

no

false

Literal true/false.

SMARTLEAD_MCP_TIMEOUT_MS

no

30000

Per-request timeout, 1000–600000.

SMARTLEAD_MCP_MAX_RETRIES

no

2

Extra attempts, 0–5. Applies to safe GETs only.

SMARTLEAD_LIVE_TESTS

no

false

Development only; enables the opt-in read-only live test suite.

Boolean flags accept only the literal strings true and false (case insensitive). 1, yes and on are rejected so a typo can never silently enable spending.

See .env.example.

Safety modes

readonly (default)

standard

unrestricted

Read-only operations

allowed

allowed

allowed

Remote mutations (saved searches, campaign drafts, lead import, block-list add)

blocked

allowed

allowed

Credit spending

blocked

needs env flag and confirm_credit_spend: true

needs env flag and confirm_credit_spend: true

Sending / campaign activation

blocked

blocked

needs SMARTLEAD_MCP_ALLOW_SEND=true and confirm_send: true

Destructive operations

blocked

blocked

needs SMARTLEAD_MCP_ALLOW_DESTRUCTIVE=true and confirm_destructive: true

Lead import

blocked

needs confirm_import: true

needs confirm_import: true

Rules that hold in every mode:

  1. A confirmation field must be boolean true. "true", 1 and "yes" are rejected. There is no confirmation field that defaults to true.

  2. A blocked call is refused before any HTTP request is made, so a blocked credit-spending call costs nothing.

  3. Refusals come back as a normal structured envelope with error.kind: "policy", a machine-readable error.code, and an error.requirements array telling the operator exactly what to change.

Tool reference

183 tools across four hosts. The full table would be unreadable here, so list them from the CLI instead — it prints each tool's safety classification:

smartleadai-mcp tools              # all 183
smartleadai-mcp tools campaign     # filter by substring

Host

Base URL

Tools

Prefix

SmartProspect

prospect-api.smartlead.ai/api/v1/search-email-leads

26

smartprospect_

Core

server.smartlead.ai/api/v1

128

smartlead_

Smart Delivery

smartdelivery.smartlead.ai/api/v1

24

smartdelivery_

Smart Senders

smart-senders.smartlead.ai/api/v1

5

smartsenders_

By safety classification:

Classification

Tools

Gate

Read-only

113

none — available in every mode

Remote mutation

70

standard mode or above

Sends email

10

unrestricted + ALLOW_SEND + confirm_send

Destructive

12

unrestricted + ALLOW_DESTRUCTIVE + confirm_destructive

Consumes credits

2

ALLOW_CREDIT_SPEND + confirm_credit_spend + preflight

Classification is reviewed per endpoint, not inferred from the HTTP verb. Smartlead serves 14 searches over POST — those are read-only. Several DELETE and stop/suspend/block routes are suppression-increasing and are deliberately not destructive, so the safe action is never harder to take than the dangerous one.

Every tool returns the same envelope:

{
  "ok": true,
  "operation": "smartprospect_search_contacts",
  "credit_spending": false,
  "remote_mutation": false,
  "data": { "list": [] },
  "pagination": { "scroll_id": "…", "filter_id": 327105, "total_count": 16064669 },
  "warnings": []
}

The SmartProspect workflow

SmartProspect separates searching (free) from revealing (paid). The tools mirror that split.

1. Inspect credits. Always first, always free.

// smartprospect_get_search_analytics
{}
// → data.availableCredits { available, total, used }, maxSingleFetchLimit, maxDailyFetchLimit

2. Build valid filter values. Free lookups: smartprospect_list_countries, _list_states, _list_cities, _list_industries, _list_sub_industries, _list_departments, _list_seniority_levels, _list_head_counts, _list_revenue_ranges, _list_companies, _list_domains, _list_job_titles, _list_keywords.

3. Search previews. Free. Returns a page of candidates plus the filter_id you will need later, the total_count of matches, and a scroll_id for the next page. Preview records are de-identified by default; set include_full_records: true only when names and personal fields are needed.

// smartprospect_search_contacts
{
  "limit": 25,
  "title": ["Head of Growth"],
  "country": ["United States"],
  "companyHeadCount": ["25 - 100"],
  "titleExactMatch": false
}

4. Review candidates. Page with scroll_id, narrow the filters, and — if you want to avoid sending personal data to the model at all — pass include_full_records: false to receive a de-identified summary.

Optionally persist the filter:

// smartprospect_save_search   (standard mode or above)
{ "search_string": "US Heads of Growth, 25-100", "title": ["Head of Growth"], "country": ["United States"] }

5. Intentionally reveal selected contacts. This is the step that spends credits, and it is doubly gated.

// smartprospect_fetch_contacts   (needs SMARTLEAD_MCP_ALLOW_CREDIT_SPEND=true)
{ "filter_id": 327105, "limit": 50, "visual_limit": 50, "confirm_credit_spend": true }

or, for a handful of named people you already know:

// smartprospect_find_emails      (max 10 per call)
{
  "contacts": [{ "firstName": "Ada", "lastName": "Lovelace", "companyDomain": "example.com" }],
  "confirm_credit_spend": true
}

6. Retrieve contacts you already paid for. Free — never re-fetch.

// smartprospect_get_contacts
{ "filter_id": 327105, "limit": 100, "offset": 0, "verification_status": "valid" }

Use smartprospect_list_fetched_searches to find filters whose contacts have already been revealed, and smartprospect_review_contacts to re-sync a filter's metrics.

Controlling credit spend

Credit-consuming tools are gated at three independent layers:

  1. Process configuration. SMARTLEAD_MCP_ALLOW_CREDIT_SPEND=true must be set in the server's environment. Without it, the tool refuses and no HTTP request is made.

  2. Per-call confirmation. The call must include confirm_credit_spend: true as a real boolean.

  3. Credit preflight (smartprospect_fetch_contacts only). Before the paid request, the tool calls the free search-analytics endpoint and compares the requested quantity against availableCredits.available and maxSingleFetchLimit. If the request exceeds either, it is rejected with an explanation — never silently reduced. The preflight result is returned in data.credit_preflight.

// Refused: env flag not set. No request was sent to Smartlead.
{
  "ok": false,
  "operation": "smartprospect_fetch_contacts",
  "credit_spending": false,
  "remote_mutation": false,
  "data": null,
  "pagination": null,
  "warnings": [],
  "error": {
    "kind": "policy",
    "code": "credit_spend_disabled",
    "message": "This operation can consume SmartProspect credits and credit spending is disabled.",
    "requirements": ["Set SMARTLEAD_MCP_ALLOW_CREDIT_SPEND=true and restart the MCP server."]
  }
}
// Refused: request larger than the balance. Only the free preflight ran.
{
  "ok": false,
  "error": {
    "kind": "refusal",
    "code": "insufficient_credits",
    "message": "Requested 900 contact(s) but only 100 SmartProspect credit(s) are available. The request was not sent and no credits were spent.",
    "requirements": ["Reduce the request to 100 or fewer.", "Or top up SmartProspect credits in the Smartlead dashboard."]
  }
}

Neither credit-consuming request is ever retried automatically. Retries are enabled only for safe idempotent GETs.

The preflight cannot be skipped. If analytics is unavailable or does not return recognisable credit and account-limit fields, the paid request fails closed.

Error handling

Failures never throw across the MCP boundary. They come back as an envelope with ok: false and a typed error.kind:

error.kind

Meaning

policy

Blocked locally by the safety policy. No HTTP request was made.

refusal

Blocked locally by a tool-level check (e.g. insufficient credits).

authentication

HTTP 401 — key missing or invalid.

permission

HTTP 403.

payment

HTTP 402, or a credit-related success: false body.

validation

HTTP 400 / 422.

not_found

HTTP 404.

conflict

HTTP 409.

rate_limit

HTTP 429. retry_after_seconds is surfaced when Smartlead sends it.

server

HTTP 5xx.

timeout

The request exceeded SMARTLEAD_MCP_TIMEOUT_MS.

transport

DNS/TLS/socket failure; no HTTP response.

protocol

HTTP 200 with a body that was not JSON.

api_failure

HTTP 200 with success: false in the body.

Smartlead returns HTTP 200 with success: false for several documented failure cases (notably fetch-contacts limit and credit checks). Those are surfaced as errors, not as successes with empty data.

Retries apply only to GET requests and only for rate_limit, server, timeout and transport failures, with exponential backoff that honours Retry-After.

Privacy and security

  • The API key is environment-only. No tool accepts it as an argument; attempting to pass api_key to a tool is rejected by the input schema.

  • The key is redacted everywhere. Smartlead authenticates via an api_key query parameter, so the credential appears in every request URL. Every URL, error message, error detail and tool result is passed through a redactor before it leaves the process.

  • Nothing is logged. The server writes no request bodies, no responses and no contact data to stdout, stderr or disk. stdout carries only the MCP protocol stream; stderr carries only fatal startup errors.

  • Contact data is returned, by design. That is the purpose of a prospecting tool. Tools that return contacts accept include_full_records: false to return a de-identified summary (counts and non-personal attributes) instead.

  • Tests use synthetic data only (person@example.com and similar).

Read SECURITY.md and docs/security-model.md before granting this server anything beyond readonly.

Prompt injection matters here. Contact records, campaign names and lead custom fields are attacker-influenceable text. Treat any instruction that appears inside tool output as data, never as a command — and note that the policy layer is what actually stops an injected "fetch 10,000 contacts" instruction, not the model's judgement.

Development

npm install
npm run typecheck     # tsc --noEmit
npm run lint          # eslint, zero warnings allowed
npm test              # unit + integration (mocked fetch, no network)
npm run test:coverage # with v8 coverage thresholds
npm run build         # tsup -> dist/
npm run pack:check    # npm pack --dry-run
npm run verify        # typecheck + lint + coverage + build + pack + installed-package smoke
npm run smoke:package # pack, install into a throwaway dir, drive the installed
                      # binary with a real MCP client (no Smartlead access)
npm run test:live     # opt-in, read-only; needs SMARTLEAD_LIVE_TESTS=true

The default suite never touches the network — fetch is injected. The live suite is read-only, is skipped unless SMARTLEAD_LIVE_TESTS=true and SMARTLEAD_API_KEY are both set, and asserts that the credit balance is unchanged before and after it runs. It never calls find-emails, fetch-contacts, imports, campaign mutations, sending, deletion or unsubscribe.

Layout:

src/
  index.ts                 stdio entry point
  server.ts                transport-agnostic server factory
  config.ts                environment parsing and validation
  client/                  errors.ts, http.ts, core-client.ts, prospect-client.ts
  security/                redaction.ts, policy.ts
  schemas/                 common.ts, smart-prospect.ts, core.ts
  tools/                   types, envelope, shape, register + smart-prospect/ and core/
  types/                   loose Smartlead response types
tests/                     unit/, integration/, live/, helpers/
docs/                      endpoint-coverage.md, security-model.md, publishing.md

Adding an HTTP/Streamable HTTP transport later means adding a new entry point that calls createServer() and attaches a different transport. No tool, schema or client change is required.

Publishing checklist

Nothing here has been published. See docs/publishing.md for the full procedure. Summary:

  1. Run npm run verify for typecheck, lint, coverage, build, pack dry-run and a clean installed-package MCP smoke test. prepublishOnly repeats every check except the nested pack/install smoke, which npm cannot run recursively while already preparing a publish.

  2. Confirm the packed file list contains only dist/, the public Markdown documentation, .env.example, and package.json.

  3. Confirm you are authenticated on npm. The name is unscoped, so no scope membership is needed — but nothing reserves it either until it is published.

  4. Tag, publish with --access public (optionally --provenance), then run a post-publication smoke test from a clean directory.

Official Smartlead documentation

Per-endpoint source pages, with the date each was checked, are listed in docs/endpoint-coverage.md.

Known limitations

  • Unsafe or undocumented operations are excluded. These include mailbox credential ingestion, client API-key management, live OTP retrieval, domain purchases, and sending or Smart Delivery operations whose request schema is absent from the official page. A duplicate lead-update page is also collapsed into the canonical tool. See docs/endpoint-coverage.md for the full list.

  • Most tools are catalog-generated. The 39 hand-written tools encode every documented range, enum and cross-field rule (such as the id/filter_id XOR). Another 144 are generated from corrected documentation metadata. The correction layer removes flattened nested fields, fixes documented integer types, applies reviewed safety overrides, and enforces known cross-field rules.

  • This server can send email. With unrestricted mode plus SMARTLEAD_MCP_ALLOW_SEND=true, 10 tools can put mail in a real recipient's inbox, including smartlead_utilities_send_single_email. The gate stops accidents, not a determined agent that has been given the flag.

  • fetch-contacts elevated limit is unverifiable locally. Smartlead documents 1–10000 "or 30000 for some users" without exposing which applies. The schema accepts up to 30000 and warns above 10000; the account's real maxSingleFetchLimit from the preflight is what is actually enforced.

  • Daily fetch limits are enforced from analytics. If the requested quantity plus leadsFoundToday exceeds maxDailyFetchLimit, the paid request is refused locally.

  • Undocumented maximums are guarded, not derived. A few lookup endpoints document a default but no maximum; this package applies a client-side bound (noted in docs/endpoint-coverage.md) rather than inventing a documented one.

  • Rate-limit tiers are per account. Smartlead documents 60–120 requests per minute depending on plan. This server does not throttle; it retries safe GETs with backoff and surfaces rate_limit errors otherwise.

  • Response shapes are passed through. Smartlead's response envelopes vary between endpoint families; tools unwrap the common { success, message, data } wrapper but do not otherwise normalise upstream field names.

  • Limited live verification. Independent review exercised search analytics, countries, and a one-result filtered contact search through the assembled MCP server. The account credit balance was unchanged. Mutations and paid endpoints remain mocks-only by design.

Licence

MIT — see LICENSE and THIRD_PARTY_NOTICES.md.

"Smartlead" and "SmartProspect" are trademarks of their respective owner. This project is not affiliated with, endorsed by, or sponsored by Smartlead.ai, and uses those names only to identify the API it integrates with.

Available Tools

39 tools
smartlead_add_domain_to_block_listSmartlead: add domains to the block listA

Add domains or email addresses to the global block list so no campaign emails them. Safety — read-only: no; may consume SmartProspect credits: no; creates or modifies remote state: yes; can send email: no; destructive: no. Endpoint: POST https://server.smartlead.ai/api/v1/leads/add-domain-block-list. Creates remote state. Blocked in readonly mode. Does not send email. This is a suppression action: it reduces, never increases, outbound sending.

ParametersJSON Schema
NameRequiredDescriptionDefault
client_idNoAssociate the entries with a client.
domain_block_listYesDomains or email addresses to block. Smartlead documents no maximum; 1000 is a client-side guard.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.4/5.0
Behavior5/5

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

The description goes well beyond the annotations by disclosing that it 'creates remote state', is 'blocked in readonly mode', and 'does not send email'. It also states it is non-destructive. These facts align with annotations and add valuable operational context.

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

Conciseness3/5

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

The description is front-loaded with the purpose and uses small, readable sections. However, there is redundancy: the 'Safety —' line duplicates the later statements 'Creates remote state' and 'Does not send email'. This prevents a higher score.

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?

Together with the rich input schema and output schema, the description covers purpose, safety profile, endpoint, and suppression semantics. It is sufficient for correct invocation, though it could optionally mention auth or rate limits.

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

Parameters4/5

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

The schema already provides 100% coverage of parameters, so the baseline is 3. The description adds meaningful context by emphasizing 'global block list' and 'no campaign emails them', clarifying that the domain_block_list parameter applies across all campaigns, not just a single campaign.

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: 'Add domains or email addresses to the global block list so no campaign emails them.' It specifies the verb, resource, and effect, and clearly distinguishes the tool from its siblings like get_domain_block_list and remove_domain_from_block_list.

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 makes the use case clear: use it to suppress outbound emails to certain domains/addresses. It also frames it as a 'suppression action' and contrasts with the read-only get/remove siblings. However, it does not explicitly state when not to use it or mention alternative tools.

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

smartlead_add_leads_to_campaignSmartlead: add leads to a campaignA
Destructive

Import leads into an explicitly named campaign. Safety — read-only: no; may consume SmartProspect credits: no; creates or modifies remote state: yes; can send email: no; destructive: yes. Endpoint: POST https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/leads. Creates remote state. Blocked in readonly mode. Requires an explicit campaign_id and confirm_import: true. Maximum 400 leads per call. Duplicate emails are removed locally (case-insensitive, trimmed) before the request and the number removed is reported. Never activates the campaign — use smartlead_update_campaign_status separately. Bypassing the global block list, unsubscribe list, duplicate protection or community bounce list is classified as destructive and requires unrestricted mode plus destructive confirmation. Never auto-retried: a retry could import leads twice.

ParametersJSON Schema
NameRequiredDescriptionDefault
settingsNoSmartlead validation and duplicate-handling settings.
lead_listYesLeads to import (1-400). Duplicate emails are removed locally before sending.
campaign_idYesTarget campaign ID. Required — leads are never imported implicitly.
confirm_importNoMust be true. Acknowledges that leads will be written into the target campaign.
confirm_destructiveNoMust be true when any suppression or bounce-list validation bypass is enabled in settings.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.4/5.0
Behavior5/5

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

Despite annotations already indicating readOnlyHint=false and destructiveHint=true, the description adds rich context: endpoint, creates/modifies remote state, blocked in readonly mode, duplicate email handling (case-insensitive, trimmed), no auto-retry to avoid double imports, and detailed destructive bypass conditions. This goes far beyond annotations and fully discloses behavior.

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

Conciseness4/5

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

The description is appropriately sized for a complex tool, with useful front-loading of the core purpose and safety summary. It covers many behavioral aspects without being overly verbose, though the 'Safety' bullet list and the later 'Creates remote state' line are somewhat redundant.

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

Completeness5/5

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

Given the tool's complexity (nested objects, 5 params, write operation, destructive potential), the description is exceptionally complete. It covers key gotchas: no auto-retry (idempotency), dedupe behavior, activation separation, destructive confirmation requirements, and readonly blocking. An output schema exists, so not explaining return values is acceptable.

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 repeats some parameter constraints (confirm_import must be true, max 400, duplicate removal) that are already in the schema. It adds minor context around the meaning of confirm_destructive and the local deduplication behavior, but does not substantially enhance understanding beyond the schema's own parameter 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 opens with 'Import leads into an explicitly named campaign,' which is a specific verb+resource statement that clearly distinguishes it from sibling tools like smartlead_get_campaign_leads (retrieves) and smartlead_update_campaign_status (changes status). It also explicitly disambiguates by stating 'Never activates the campaign — use smartlead_update_campaign_status separately.'

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

Usage Guidelines4/5

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

The description provides clear operational constraints: requires explicit campaign_id and confirm_import: true, max 400 leads, and blocks in readonly mode. It also points to the alternative tool for activation. However, it does not explicitly state when to prefer this tool over other lead-importing methods or list all sibling alternatives.

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

smartlead_create_campaignSmartlead: create campaignA

Create a new Smartlead campaign. Smartlead creates it in DRAFTED status. Safety — read-only: no; may consume SmartProspect credits: no; creates or modifies remote state: yes; can send email: no; destructive: no. Endpoint: POST https://server.smartlead.ai/api/v1/campaigns/create. Creates remote state. Blocked in readonly mode. The new campaign is a draft: it does not send anything until it is explicitly started. Never auto-retried — a retry could create a duplicate campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoCampaign name. Smartlead defaults to "Untitled Campaign".
client_idNoAssociate the campaign with a client.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.3/5.0
Behavior5/5

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

The description reveals important behaviors beyond annotations: DRAFTED status, inability to send email until explicitly started, remote state creation, readonly-mode blocking, and non-idempotency with duplicate-campaign risk. No contradiction with annotations.

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

Conciseness4/5

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

The description is front-loaded with the core purpose and includes structured safety info. However, it repeats 'Creates remote state' and the draft status, making it slightly redundant. Overall, each section still 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 relatively simple create operation with a complete schema and output schema, the description adequately covers behavior, safety, and endpoint. It does not mention authentication or rate limits, but those are not essential for invocation.

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

Parameters3/5

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

The input schema already provides 100% description coverage for both parameters (name and client_id). The tool description adds no additional parameter-level detail, 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?

The description states 'Create a new Smartlead campaign' — a specific verb and resource. It also notes the DRAFTED status, which distinguishes it from other campaign-related tools like status updates or listing.

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 usage context is clear: this is the tool to create a campaign. It provides operational constraints such as 'Blocked in readonly mode' and 'Never auto-retried', but does not explicitly name alternative tools or when not to use this one.

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

smartlead_get_campaignSmartlead: get campaignA
Read-only

Retrieve full configuration for one campaign by ID. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://server.smartlead.ai/api/v1/campaigns/{campaign_id}. Free and read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idYesCampaign ID.
include_tagsNoInclude campaign tags in the response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A3.6/5.0
Behavior1/5

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

The description provides extensive safety detail: 'read-only: yes; ... creates or modifies remote state: no; ... destructive: no.' However, the annotation idempotentHint=false directly contradicts the description's claim of no state modification, which implies idempotency. This is an annotation contradiction, so the behavioral transparency score is 1.

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 concise and front-loaded with the purpose. The safety list is clear but redundant at the end ('Free and read-only' repeats earlier statements). Overall, it is efficient and does not waste words, though it could be slightly tighter.

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

Completeness5/5

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

Given the low complexity (2 parameters, no nested objects) and the presence of an output schema, the description is complete: it states the purpose, provides the endpoint, and explicitly discloses all relevant safety traits. The idempotency contradiction does not affect the completeness of usage instructions for this simple read-only GET.

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 covers both parameters with descriptions (campaign_id and include_tags) at 100% coverage. The description adds only the endpoint template (e.g., {campaign_id}) but no additional semantic detail beyond what the schema already provides. Baseline 3 for full schema coverage.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Retrieve full configuration for one campaign by ID.' It specifies the action (retrieve), the resource (full configuration for one campaign), and the selection criterion (by ID). This distinguishes it from siblings like smartlead_list_campaigns (which lists campaigns) and smartlead_get_campaign_analytics (which retrieves analytics).

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 context: use when you need the full configuration of a specific campaign by ID. However, it does not explicitly name alternatives or state when not to use this tool. It implies the usage but lacks an explicit comparison to sibling tools.

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

smartlead_get_campaign_analyticsSmartlead: get campaign analyticsA
Read-only

Retrieve performance analytics for one campaign (sent, opened, replied, bounced). Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/analytics. Free and read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idYesCampaign ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true and destructiveHint=false. The description goes beyond this by explicitly stating 'may consume SmartProspect credits: no' and 'can send email: no', adding useful side-effect context. The endpoint is also disclosed, which helps understanding the remote 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 compact, starting with a clear purpose sentence, followed by a structured safety summary and endpoint. Every sentence earns its place; no fluff 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?

Given the tool's simple parameter set (one required integer) and the presence of an output schema (so return values need no explanation), the description is fully sufficient. It covers purpose, safety, and endpoint without requiring further clarification.

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 fully documents campaign_id with type integer and description 'Campaign ID' (100% coverage). The description mentions 'one campaign' but does not add extra detail about how to obtain or format the ID, so it provides minimal incremental meaning beyond the schema.

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

Purpose5/5

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

The description states a specific verb ('Retrieve') and resource ('performance analytics for one campaign') along with the included metrics (sent, opened, replied, bounced). This clearly distinguishes it from siblings like smartlead_get_campaign, which likely fetches campaign details rather than analytics.

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 when to use this tool: when needing analytics for a specific campaign. The read-only safety guarantees also make it a safe choice for read operations. However, it does not explicitly name alternatives or exclusions, but the single-purpose phrasing provides sufficient context.

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

smartlead_get_campaign_leadsSmartlead: get campaign leadsA
Read-only

List leads in a campaign with pagination and status/engagement filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/leads. Free and read-only. Returns personal data (lead email addresses and names).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRecords per page (1-100).
offsetNoPagination offset.
statusNoLead sequence status filter.
campaign_idYesCampaign ID.
emailStatusNoFilter by email engagement status.
created_at_gtNoISO 8601 timestamp; leads created after this.
event_time_gtNoISO 8601 timestamp; filter by last event time.
lead_category_idNoFilter by lead category ID.
last_sent_time_gtNoISO 8601 timestamp; leads whose last email was sent after this.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations' readOnlyHint and destructiveHint, the description explicitly enumerates safety properties: 'may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no.' It also adds a privacy note about returning personal data (emails and names), which is valuable context not present in annotations.

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

Conciseness5/5

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

The description is remarkably concise, with a single-sentence purpose followed by a compact safety/endpoint block. Every sentence carries meaningful information; there is no redundancy or filler.

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

Completeness5/5

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

With an output schema present (per context signals) and full parameter documentation in the input schema, the description only needs to convey safety and data sensitivity, which it does. It also specifies the REST endpoint, providing a complete operational picture.

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

Parameters3/5

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

Schema coverage is 100% with detailed descriptions for each parameter. The description's mention of 'pagination and status/engagement filters' adds no new meaning beyond the schema, so it earns the baseline score for a well-documented schema.

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

Purpose5/5

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

The description states 'List leads in a campaign with pagination and status/engagement filters,' which is a specific verb+resource combination that clearly distinguishes this tool from siblings like smartlead_get_campaign (which retrieves campaign details) and smartlead_get_campaign_analytics (which returns analytics). The scope is unambiguous.

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

Usage Guidelines2/5

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

The description does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention any exclusions or prerequisite conditions. It simply describes the function without situating it among the many sibling tools.

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

smartlead_get_domain_block_listSmartlead: get domain block listA
Read-only

List blocked domains and email addresses with their source and client association. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://server.smartlead.ai/api/v1/leads/get-domain-block-list. Free and read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRecords to return (1-1000).
offsetNoPagination offset.
filter_client_idNoFilter by client ID.
filter_email_or_domainNoSearch by email or domain name.
filter_email_with_domainNoSearch by email with domain.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already provide readOnlyHint and destructiveHint, but the description adds concrete safety specifics: 'read-only: yes', 'may consume SmartProspect credits: no', 'creates or modifies remote state: no', 'can send email: no', and 'destructive: no'. It also states the endpoint, providing useful context beyond the annotations.

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

Conciseness4/5

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

The description is front-loaded with the purpose and then provides a structured safety block. The final 'Free and read-only' is slightly redundant with the safety line, but the overall length is acceptable and every other sentence adds value.

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 list operation, this description is complete: it states the purpose, safety profile, endpoint, and is backed by a full input schema and output schema. The agent has all necessary context to invoke the tool safely and correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already fully documented in the input schema. The description's mention of 'source and client association' hints at filter_client_id 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 opens with 'List blocked domains and email addresses' which uses a specific verb and resource, and adds 'with their source and client association' to clarify the returned data. It clearly distinguishes this get/list tool from sibling add/remove block-list 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 implies this is the read-only viewing tool for the domain block list, especially given sibling tools 'smartlead_add_domain_to_block_list' and 'smartlead_remove_domain_from_block_list'. However, it lacks explicit when-to-use or exclusionary language, 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.

smartlead_get_lead_by_emailSmartlead: get lead by emailA
Read-only

Look up a single lead by email address and return its associated campaign data. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://server.smartlead.ai/api/v1/leads/. Free and read-only. Returns personal data for the matched lead.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesEmail address to look up.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description goes beyond this by explicitly stating no SmartProspect credit consumption, no email sending, no remote state modification, and that it returns personal data. It also provides the endpoint. This adds significant behavioral context beyond the structured annotations.

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

Conciseness5/5

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

The description is concise and well-structured: a single-purpose statement, followed by neatly labeled safety details, and a final note about personal data. Every sentence adds value, and no unnecessary words are used.

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

Completeness5/5

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

Given the simple nature of the tool, the presence of an output schema, and the annotations, the description fully covers purpose, safety, endpoint, and a privacy consideration. It is complete for an agent to select and invoke the tool confidently.

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 has 100% coverage over the sole 'email' parameter, with its own description 'Email address to look up.' The tool description only reiterates the email-based lookup without adding format, examples, or constraints. Baseline of 3 is correct since the schema does the heavy lifting.

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 clear, specific verb+resource: "Look up a single lead by email address and return its associated campaign data." This immediately distinguishes it from sibling tools like smartlead_list_campaigns or smartprospect_get_contacts. The scope is precise and 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 clearly implies the use case: looking up a lead by email. It provides context but does not explicitly mention alternatives or when not to use this tool. Since the tool is simple and the context is clear, it does not need exclusions, but naming an alternative would have pushed it to a 5.

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

smartlead_list_campaignsSmartlead: list campaignsA
Read-only

List all Smartlead campaigns with status, schedule and sending configuration. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://server.smartlead.ai/api/v1/campaigns/. Free and read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
client_idNoRestrict to one client (agency / white-label accounts).
include_tagsNoInclude campaign tags in the response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.5/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, destructiveHint), the description explicitly states 'may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no' and 'Free and read-only'. This adds detailed safety context, and there is no contradiction with annotations.

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

Conciseness5/5

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

The description is concise and well-structured: one sentence for purpose, one for safety, one for endpoint, and a short concluding phrase. Every sentence adds distinct value with no redundancy except minor repetition of 'read-only'.

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

Completeness5/5

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

Given an output schema exists, return values are covered. The description plus annotations and schema fully cover the behavior of this simple list tool: what it does, safety profile, endpoint, and parameter details. No critical gaps remain.

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%, with both parameters (client_id, include_tags) already described in the input schema. The tool description does not add additional parameter semantics, 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 opens with 'List all Smartlead campaigns with status, schedule and sending configuration', which is a specific verb ('List'), resource ('Smartlead campaigns'), and scope ('all'). This clearly distinguishes it from sibling tools like smartlead_get_campaign which fetches a single campaign.

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 usage for listing all campaigns, but it does not explicitly mention alternatives or when-not-to-use. The 'List all' phrasing provides clear context and filters, though no exclusions or alternatives are stated.

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

smartlead_list_email_accountsSmartlead: list email accountsA
Read-only

List connected sending accounts with warmup, SMTP and provider filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://server.smartlead.ai/api/v1/email-accounts/. Free and read-only. Returns mailbox addresses, which are personal data.

ParametersJSON Schema
NameRequiredDescriptionDefault
espNoFilter by email service provider.
limitNoAccounts per page (1-100).
offsetNoPagination offset.
isInUseNoFilter by whether the account is used in campaigns.
usernameNoPartial match on the account username.
client_idNoFilter by client ID.
isSmtpSuccessNoFilter by SMTP connection success.
fetch_campaignsNoInclude the campaign IDs each account is used in.
isWarmupBlockedNoFilter by warmup blocked status.
emailWarmupStatusNoFilter by warmup status.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations, the description explicitly discloses read-only behavior, no credit consumption, no state modification, no email sending, and no destructive actions. It also notes that mailbox addresses are personal data, adding a privacy consideration not present in the structured metadata.

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

Conciseness4/5

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

The description is front-loaded with the core purpose and all information is concise. There is slight redundancy with 'Free and read-only' repeating part of the safety block, but overall each sentence provides unique value.

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 covers the endpoint, safety profile, and a privacy note. It does not explain return values or pagination, but the presence of an output schema and the schema's limit/offset parameters makes this unnecessary for a read-only list operation. The description is sufficiently complete for its complexity.

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

Parameters3/5

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

The input schema has 100% parameter coverage, so the schema already documents each parameter. The description adds only a high-level mention of warmup, SMTP, and provider filters without adding per-parameter syntax or details. The baseline 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 clearly states 'List connected sending accounts with warmup, SMTP and provider filters', using a specific verb and resource. It is easily distinguishable from sibling tools like smartlead_list_campaigns, which focus on campaigns rather than email accounts.

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 context by mentioning the resource type and filters, but it does not explicitly state when to use this tool versus alternatives, nor does it name other tools for related tasks. It provides no exclusions or explicit 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.

smartlead_list_lead_listsSmartlead: list lead listsA
Read-only

List saved lead lists with optional name and tag filtering. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://server.smartlead.ai/api/v1/lead-list/. Free and read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoLists to return (1-1000).
offsetNoRecords to skip.
tagIdsNoComma-separated tag IDs, e.g. "1,2,3".
listNameNoPartial match on the list name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.5/5.0
Behavior5/5

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

The description goes beyond the annotations by explicitly stating that it consumes no SmartProspect credits, does not create or modify remote state, cannot send email, and is not destructive. This directly addresses safety and side-effect concerns, adding significant value over the readOnlyHint and destructiveHint annotations.

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

Conciseness5/5

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

The description is two concise sentences. The first sentence states the core functionality, and the second summarizes safety and endpoint details. No unnecessary words or repetition. Information is front-loaded.

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, read-only list operation with four optional parameters and an output schema, the description is complete. It states the endpoint, confirms read-only behavior, and the output schema covers return values. No critical information is missing.

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

Parameters3/5

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

The input schema provides 100% coverage with detailed descriptions for all four parameters. The description mentions 'name and tag filtering' which maps to listName and tagIds, but adds no new semantic information beyond summarizing what the schema already states. This meets the baseline for full schema coverage.

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

Purpose5/5

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

The description clearly states the tool's action ('List') and resource ('saved lead lists'), and mentions the optional filtering capabilities ('name and tag filtering'). This unambiguously distinguishes it from sibling tools like smartlead_list_campaigns or smartlead_list_email_accounts.

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

Usage Guidelines4/5

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

The description provides clear context: this is for listing lead lists, with optional filters. While it does not explicitly name alternatives or exclusion criteria, the purpose is self-evident and aligns with the tool's name. The 'Free and read-only' note adds practical guidance.

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

smartlead_remove_domain_from_block_listSmartlead: remove an entry from the block listA
Destructive

Delete one entry from the global block list, re-enabling outreach to that domain or address. Safety — read-only: no; may consume SmartProspect credits: no; creates or modifies remote state: yes; can send email: no; destructive: yes. Endpoint: DELETE https://server.smartlead.ai/api/v1/leads/delete-domain-block-list. Classified as DESTRUCTIVE: it deletes a suppression record and re-enables sending to a previously blocked recipient. Requires unrestricted mode, SMARTLEAD_MCP_ALLOW_DESTRUCTIVE=true and confirm_destructive: true. Call smartlead_get_domain_block_list first to confirm which entry the ID refers to.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID of the block list entry to delete (from smartlead_get_domain_block_list).
confirm_destructiveNoMust be true. Deleting a block list entry re-enables outreach to that domain.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond the annotations by detailing the runtime effects: it deletes a suppression record, re-enables sending to a previously blocked recipient, and classifies itself as DESTRUCTIVE. It also includes an endpoint URL and a safety summary. This exceeds what the annotations alone provide, offering clear expectations about the tool's side effects and prerequisites.

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 structured in short lines, each delivering a distinct piece of information (action, safety, endpoint, guardrails, prerequisite). It is longer than necessary but remains focused and easy to scan. The front-loaded sentence states the core purpose and consequence clearly.

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

Completeness5/5

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

With an output schema present, the description does not need to explain return values. It covers the purpose, prerequisites, safety classification, and related sibling tool for verification. The combination of schema, annotations, and context signals is comprehensive enough for an AI agent to use this tool correctly and safely.

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

Parameters4/5

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

The schema already covers both parameters with descriptions, and the description reinforces the semantics by stating that the id comes from smartlead_get_domain_block_list and that confirm_destructive must be true. This adds useful context beyond the schema, though it does not introduce new parameters or change the baseline understanding.

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

Purpose5/5

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

The description uses a specific verb ('Delete') and clearly identifies the resource ('one entry from the global block list') and its consequence ('re-enabling outreach to that domain or address'). It also distinguishes itself from sibling tools like smartlead_get_domain_block_list and smartlead_add_domain_to_block_list by specifying the exact destructive action.

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 a prerequisite action ('Call smartlead_get_domain_block_list first to confirm which entry the ID refers to') and required configuration (unrestricted mode, SMARTLEAD_MCP_ALLOW_DESTRUCTIVE=true, confirm_destructive: true). It leaves no ambiguity about when and how to invoke this tool, including the need for explicit confirmation.

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

smartlead_update_campaign_statusSmartlead: update campaign statusA
Destructive

Start, pause or stop a campaign. Safety — read-only: no; may consume SmartProspect credits: no; creates or modifies remote state: yes; can send email: yes; destructive: yes. Endpoint: POST https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/status. PAUSED is an ordinary mutation and works in standard mode. START activates the campaign and will cause email to be sent: it requires unrestricted mode, SMARTLEAD_MCP_ALLOW_SEND=true and confirm_send: true. STOPPED permanently stops the campaign and cannot be undone: it requires unrestricted mode, SMARTLEAD_MCP_ALLOW_DESTRUCTIVE=true and confirm_destructive: true. Smartlead documents the activation value as "START", not "ACTIVE".

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYesNew status. START begins or resumes sending (Smartlead documents "START", not "ACTIVE"); PAUSED halts sending; STOPPED permanently stops the campaign.
campaign_idYesCampaign ID.
confirm_sendNoMust be true when status is START. Acknowledges that activating the campaign will send email.
confirm_destructiveNoMust be true when status is STOPPED. Acknowledges that permanently stopping a campaign cannot be undone.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.5/5.0
Behavior5/5

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

The description goes well beyond the annotations by specifying exact safety traits: no read-only, may consume credits, modifies remote state, can send email, destructive. It also discloses the endpoint, mentions the permanent nature of STOPPED, and clarifies the 'START' vs 'ACTIVE' naming. This provides deeper behavioral context than the annotations alone.

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 dense but well-structured, with each line serving a distinct purpose: action summary, safety flags, endpoint, per-status behavior, and naming clarification. For a tool with destructive and email-sending implications, the length is justified and every sentence earns its place.

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

Completeness5/5

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

The description covers the essential operational context: endpoint, safety profile, per-status requirements, and the non-standard 'START' value. Since an output schema exists, return value details are not needed. This is complete for a complex, mutating 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 coverage is 100%, so all four parameters (status, campaign_id, confirm_send, confirm_destructive) are already fully described in the schema. The description adds minimal additional parameter semantics beyond repeating the enum values and confirm requirements, which are already documented in 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 opens with a specific verb phrase 'Start, pause or stop a campaign', clearly identifying the action (update status) and resource (campaign). It distinguishes itself from sibling tools like smartlead_list_campaigns or smartlead_get_campaign by focusing on status changes, not retrieval or creation.

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

Usage Guidelines4/5

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

The description provides clear context on when each status is appropriate: PAUSED is an ordinary mutation, START requires unrestricted mode and confirm_send, STOPPED is permanent and requires confirm_destructive. It effectively explains prerequisites and exclusions, though it does not explicitly name alternative tools or state 'use this when...'.

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

smartprospect_fetch_contactsSmartProspect: fetch contacts for a filter (consumes credits)A

Reveal contact email addresses for a saved filter, either by explicit adapt IDs or by a bounded limit. CONSUMES SMARTPROSPECT CREDITS. Safety — read-only: no; may consume SmartProspect credits: yes; creates or modifies remote state: yes; can send email: no; destructive: no. Endpoint: POST https://prospect-api.smartlead.ai/api/v1/search-email-leads/fetch-contacts. Provide exactly one of id (explicit adapt IDs) or limit. Documented limit range is 1-10000 (up to 30000 on some accounts). Requires SMARTLEAD_MCP_ALLOW_CREDIT_SPEND=true and confirm_credit_spend: true. Runs a free, read-only credit preflight first and rejects — never silently reduces — a request that exceeds available credits or the account single-fetch limit. Never retried automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoAdapt IDs to fetch. Mutually exclusive with limit.
limitNoNumber of contacts to fetch for the filter. Smartlead documents 1-10000 (up to 30000 for some accounts). Mutually exclusive with id.
filter_idYesFilter ID returned by smartprospect_search_contacts.
visual_limitNoPage size for the returned page (1-1000).
visual_offsetNoOffset for the returned page.
confirm_credit_spendNoMust be true. Acknowledges that this call can consume SmartProspect credits.
include_full_recordsNoReturn complete contact records including email addresses and names. Set to false to receive a de-identified summary (counts plus non-personal attributes) instead.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.4/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=false, destructiveHint=false), the description discloses critical non-obvious behaviors: credit consumption, remote state modification, email sending capability (no), credit preflight check with rejection (never silent reduction), and no automatic retries. The safety breakdown explicitly echoes and expands on the annotations without contradiction.

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

Conciseness4/5

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

The description is structured into clear sections: purpose, credit warning, safety breakdown, endpoint, parameter constraints, and behavioral guarantees. Each sentence adds meaningful information, though the safety breakdown somewhat restates what the annotations and title already convey. Still, it remains focused and front-loaded.

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 credit-consuming mutation tool with 7 parameters and an output schema, the description is exceptionally complete. It covers the endpoint, authentication requirement, prerequisites, parameter relationships, credit preflight behavior, and error handling (rejects rather than reduces). The presence of an output schema means return value details are not required, and the description fills all other gaps.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by emphasizing the mutual exclusivity of 'id' and 'limit' (also in schema) and by clarifying the documented limit range (1-10000, up to 30000 on some accounts), which goes beyond the schema's simple min/max. It also highlights the need for confirm_credit_spend=true, reinforcing the schema's 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 action ('Reveal contact email addresses') on a specific resource ('a saved filter'), with two distinct modes ('explicit adapt IDs' or 'bounded limit'). This clearly distinguishes it from sibling tools like smartprospect_search_contacts (search) and smartprospect_get_contacts (likely retrieving already fetched contacts).

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 a saved filter and provides clear prerequisites (SMARTLEAD_MCP_ALLOW_CREDIT_SPEND=true, confirm_credit_spend=true) and a mutual exclusion rule (id vs limit). However, it does not explicitly state when to prefer this tool over related tools like smartprospect_get_contacts or smartprospect_find_emails, nor does it provide '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.

smartprospect_find_emailsSmartProspect: find emails (consumes credits)A

Look up email addresses for up to 10 named contacts at their company domains. CONSUMES SMARTPROSPECT CREDITS. Safety — read-only: no; may consume SmartProspect credits: yes; creates or modifies remote state: yes; can send email: no; destructive: no. Endpoint: POST https://prospect-api.smartlead.ai/api/v1/search-email-leads/search-contacts/find-emails. Maximum 10 contacts per call; each contact requires firstName, lastName and companyDomain. Requires SMARTLEAD_MCP_ALLOW_CREDIT_SPEND=true and confirm_credit_spend: true. Without both, the call is refused locally without contacting Smartlead. Never retried automatically — a retry could be charged twice. Check smartprospect_get_search_analytics first to see the credit balance.

ParametersJSON Schema
NameRequiredDescriptionDefault
contactsYesContacts to look up (1-10).
confirm_credit_spendNoMust be true. Acknowledges that this call can consume SmartProspect credits.
include_full_recordsNoReturn complete contact records including email addresses and names. Set to false to receive a de-identified summary (counts plus non-personal attributes) instead.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations indicate non-read-only and non-destructive, but the description adds critical context: consumes credits, creates/modifies remote state, maximum 10 contacts, never retried automatically to avoid double charging, and the endpoint. This goes well beyond the structured annotations.

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

Conciseness5/5

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

Every sentence serves a purpose: purpose, safety, endpoint, limits, prerequisites, retry policy, and credit-check reminder. The structure front-loads the core function and uses a compact safety summary line, making it efficient and easy to scan.

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?

Although an output schema exists, this tool has unusual complexity (credit spending, env var requirement, non-read-only behavior). The description covers usage limits, prerequisites, safety, retry policy, and points to a sibling tool for credit balance, leaving no critical gaps for agent 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 covers all three parameters at 100% coverage, but the description adds operational semantics: the 10-contact limit, the mandatory firstName/lastName/companyDomain trio, and the environment variable gate for confirm_credit_spend. It reinforces the critical flag without duplicating schema text.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Look up email addresses for up to 10 named contacts at their company domains.' This is a specific verb+resource+scope that differentiates it from sibling tools focused on broader searches or analytics.

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 preconditions: requires SMARTLEAD_MCP_ALLOW_CREDIT_SPEND=true and confirm_credit_spend: true, and advises checking smartprospect_get_search_analytics first for credit balance. It doesn't contrast with search_contacts alternatives, but clearly states when the call will be refused locally.

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

smartprospect_get_contactsSmartProspect: get already-fetched contactsA
Read-only

Retrieve contacts that were already saved or fetched, by adapt IDs or by filter_id, with optional verification and catch-all filtering. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: POST https://prospect-api.smartlead.ai/api/v1/search-email-leads/get-contacts. Read-only. Returns contacts whose emails were already paid for; it does not spend credits. Provide exactly one of id (max 200 adapt IDs) or filter_id — never both. limit, offset, search, verification_status and catch_all_status apply when using filter_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoAdapt IDs to retrieve (max 200). Mutually exclusive with filter_id.
limitNoRecords to return (1-1000). Use with filter_id.
offsetNoRecords to skip. Use with filter_id.
searchNoMatch first name, last name or full name.
filter_idNoFilter ID to retrieve contacts for. Mutually exclusive with id.
catch_all_statusNoFilter by catch-all status.
verification_statusNoFilter by email verification status.
include_full_recordsNoReturn complete contact records including email addresses and names. Set to false to receive a de-identified summary (counts plus non-personal attributes) instead.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.7/5.0
Behavior5/5

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

Adds substantial behavioral context beyond annotations: explicitly states it does not consume SmartProspect credits, creates or modifies no remote state, cannot send email, and is destructive: no. This goes beyond readOnlyHint and gives concrete operational details.

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 compact and well-structured, front-loading the core purpose in the first sentence and then providing safety and usage constraints. Each sentence adds unique information, with only minor redundancy around read-only status.

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

Completeness5/5

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

Given 8 parameters, full schema descriptions, and an output schema, the description covers all essential aspects: purpose, safety profile, endpoint, parameter selection rules, and scoping of filters. No critical gaps remain for effective 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% with descriptions, so baseline is 3. The description adds extra value by centralizing the mutual exclusivity rule and specifying that limit, offset, search, verification_status, and catch_all_status apply only when using filter_id, which is not fully apparent from individual parameter descriptions.

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

Purpose5/5

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

The description clearly states the tool retrieves already-saved or fetched contacts, using a specific verb ('Retrieve') and resource ('contacts'). It distinguishes from siblings like smartprospect_fetch_contacts by explicitly noting these are already paid for and no credits are spent.

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: use this for already-fetched contacts without spending credits and states the constraint to provide exactly one of id or filter_id. It does not explicitly name alternative tools for when-not-to-use, but the 'already fetched' phrasing and credit-saving implication serve as implicit guidance.

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

smartprospect_get_reply_analyticsSmartProspect: reply analyticsA
Read-only

Return SmartProspect reply counts for the current and previous month, with the trend. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/reply-analytics. Free and read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.7/5.0
Behavior5/5

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

Adds explicit safety details (credits, remote state, email, destructive) and endpoint beyond the readOnlyHint annotation.

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 concise sentences front-loaded with purpose, followed by essential safety and endpoint info.

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?

Fully sufficient: purpose, safety, endpoint, and output schema covers return values.

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?

No parameters to document; baseline 4 for zero-param tool.

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 it returns reply counts for current and previous month with trend, using specific verb 'Return' and resource 'reply counts', distinguishing from sibling analytics 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?

Clear purpose implies when to use, but does not explicitly contrast with alternatives like smartprospect_get_search_analytics.

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

smartprospect_get_search_analyticsSmartProspect: search analytics and credit balanceA
Read-only

Return SmartProspect credit balance (available/total/used), daily and single-fetch limits, and leads-found / emails-fetched metrics. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/search-analytics. Read this before any credit-consuming call. Free and read-only. Pass filter_id to also get per-filter leads-found and emails-fetched figures.

ParametersJSON Schema
NameRequiredDescriptionDefault
filter_idNoReturn leads-found and emails-fetched figures for one saved filter.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.4/5.0
Behavior4/5

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

The description adds safety declarations beyond annotations, notably 'may consume SmartProspect credits: no' and 'free and read-only,' which are not in the annotations. It also discloses the endpoint. No contradictions with the readOnlyHint and destructiveHint annotations.

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

Conciseness4/5

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

The description is front-loaded with the main purpose and organized logically. The safety line is somewhat redundant with annotations but adds credit-consumption context; otherwise, each sentence serves a purpose.

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

Completeness5/5

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

Given the simple one-parameter tool with output schema and rich annotations, the description covers purpose, usage timing, safety, and the optional parameter effectively. The 'before any credit-consuming call' guidance completes the contextual picture.

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

Parameters4/5

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

The schema already describes filter_id, but the description adds that passing it yields per-filter metrics in addition to aggregate figures, clarifying the default behavior. This subtle enrichment goes beyond the schema's basic 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 clearly states the tool returns SmartProspect credit balance, limits, and leads found/emails fetched metrics. It uses a specific verb ('Return') and names the resource and scope, distinguishing it from sibling tools like get_reply_analytics.

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 advises reading this tool before any credit-consuming call, establishing a clear use case. It does not explicitly list alternatives or when-not-to-use, but the context of a free, read-only pre-flight check is evident.

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

smartprospect_list_citiesSmartProspect: list citiesA
Read-only

List city values available as SmartProspect search filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/cities. Reference data only. Does not reveal contacts and does not consume credits. Smartlead documents that filtering by country also requires state.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return (1-100).
stateNoComma-separated state names to filter by, e.g. "california,texas".
offsetNoNumber of records to skip.
searchNoMatch city names starting with this value.
countryNoComma-separated country names. Smartlead documents that this requires `state`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.4/5.0
Behavior5/5

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

The description goes well beyond the annotations by explicitly enumerating safety properties: read-only, no credit consumption, no remote state changes, no email, not destructive. It also discloses that it does not reveal contacts and includes a specific behavioral note about the country/state filter requirement. This is excellent context beyond the structured annotations.

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

Conciseness4/5

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

The description is reasonably concise and front-loaded with the core purpose. Every sentence adds value (purpose, safety, endpoint, reference data, dependency note), though the safety line and reference data sentence slightly overlap on the 'no credits' point, making it a touch redundant.

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

Completeness5/5

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

Given the tool is a simple reference-data listing with an output schema available, the description provides all needed context: purpose, endpoint, safety profile, and a known filter constraint. The output schema covers return values, so the absence of further return details is not a gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3; each parameter already has a clear description. The description adds no new parameter details, only repeating the country requires state note already present in the schema. This does not elevate above baseline.

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 exactly what the tool does: 'List city values available as SmartProspect search filters.' This is a specific verb + resource, and the 'cities' focus clearly distinguishes it from sibling list tools (states, countries, departments, etc.). The endpoint is also provided for additional 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 provides context by noting this is 'Reference data only' and 'Does not reveal contacts and does not consume credits,' implying it should be used for filter dropdowns rather than contact discovery. It also mentions the country/state dependency. However, it doesn't explicitly contrast with sibling alternatives (e.g., 'use list_states for states') 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.

smartprospect_list_companiesSmartProspect: list companiesA
Read-only

List company names available as SmartProspect search filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/company. Reference data only. Does not reveal contacts and does not consume credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return. Smartlead documents a default of 100 and no maximum; 1000 is a client-side guard.
offsetNoNumber of records to skip.
searchNoFilter companies by name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.5/5.0
Behavior5/5

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

An enumeration of safety properties is provided: read-only, no credit consumption, no state modification, no email sending, no destructive behavior. It also adds the exact endpoint and clarifies that it does not reveal contacts, going well beyond the annotation hints and giving the agent confidence in side-effect-free use.

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 compact and front-loaded with the purpose. Every line adds value: purpose, safety details, endpoint, and reference-data clarification. No wasted words.

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

Completeness5/5

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

This is a low-complexity list operation with a high-quality schema, an output schema present, and clear safety/endpoint disclosure. The description sufficiently covers what the tool does, its constraints, and its non-contacting scope, making it complete for agent decision-making.

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 documents all three parameters with complete descriptions (100% coverage). The tool description adds no extra information about limit, offset, or search semantics, so it earns the baseline score for schema-covered parameters.

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 clear verb+resource statement: 'List company names available as SmartProspect search filters.' It also distinguishes from sibling contact-search tools by noting 'Does not reveal contacts,' making its scope 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 implies the use case (retrieving reference data for filter options) and explicitly states 'Reference data only,' which excludes contact discovery. However, it does not name specific alternative tools or when-not-to-use conditions, so it stops short of full explicit guidance.

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

smartprospect_list_countriesSmartProspect: list countriesA
Read-only

List country values available as SmartProspect search filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/countries. Reference data only. Does not reveal contacts and does not consume credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return (1-100).
offsetNoNumber of records to skip.
searchNoMatch country names starting with this value.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, destructiveHint, openWorldHint), the description explicitly enumerates safety properties: no credit consumption, no remote state changes, no email, no destructive actions. It also provides the exact endpoint and clarifies that the tool returns reference data only, which exceeds 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?

The description is three sentences: the first clearly states the purpose, the second provides a structured safety summary, and the third reinforces the reference-only nature. Every sentence adds distinct value without repetition or fluff.

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

Completeness5/5

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

For a simple reference-data listing tool with an output schema present, the description covers purpose, safety, endpoint, and usage context. It fully addresses the tool's function and constraints, making it complete for an AI agent to decide when and how to invoke it.

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

Parameters3/5

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

Schema coverage is 100% with detailed descriptions for limit, offset, and search. The description adds no additional parameter-specific meaning; it only frames them as search filters. Baseline 3 is appropriate since the schema carries the explanatory burden.

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 starts with 'List country values available as SmartProspect search filters,' which is a specific verb+resource statement. It clearly identifies the tool as a reference data listing for countries and distinguishes it from sibling list tools (states, cities, industries, etc.).

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 states the tool lists country values for use as search filters, implying when to use it. It adds 'Reference data only' and 'Does not reveal contacts,' which clarifies it is not for lead retrieval. However, it does not explicitly name alternative tools or state when not to use it, so it misses the top score.

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

smartprospect_list_departmentsSmartProspect: list departmentsA
Read-only

List department values available as SmartProspect search filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/departments. Reference data only. Does not reveal contacts and does not consume credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return (1-100).
offsetNoNumber of records to skip.
searchNoMatch department names starting with this value.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, destructiveHint), the description explicitly discloses that it consumes no SmartProspect credits, sends no email, creates/modifies no remote state, and does not reveal contacts. This provides concrete safety and side-effect context that annotations alone don't cover, with no contradictions.

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

Conciseness5/5

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

The description is compact and front-loaded, leading with the core purpose, followed by safety assertions, endpoint, and a concise note about reference data. Every sentence adds useful information with no redundancy.

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

Completeness5/5

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

Given the low complexity of a reference-data list tool, the description fully covers what an agent needs: purpose, safety profile, endpoint, and the fact that it neither reveals contacts nor consumes credits. The output schema is present, so return-value details are handled externally.

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 covers all three parameters (limit, offset, search) with detailed descriptions, so schema coverage is 100%. The description adds no additional parameter-specific semantics, so baseline 3 is appropriate per the rubric.

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 and resource: 'List department values available as SmartProspect search filters.' This clearly distinguishes it from sibling reference-data tools like list_countries or list_industries. The endpoint is also provided for additional 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 implies usage context by stating these are 'search filters' and 'Reference data only,' making it clear this is for retrieving filter options. However, it doesn't explicitly mention when to prefer this tool over other list_* tools or search_contacts, though the name and purpose make this fairly evident.

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

smartprospect_list_domainsSmartProspect: list company domainsA
Read-only

List company domains available as SmartProspect search filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/domain. Reference data only. Does not reveal contacts and does not consume credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return. Smartlead documents a default of 100 and no maximum; 1000 is a client-side guard.
offsetNoNumber of records to skip.
searchNoFilter company domains by name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.5/5.0
Behavior5/5

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

Beyond annotations, the description details specific safety traits: 'read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no.' It also states 'Does not reveal contacts' and includes the endpoint, adding valuable behavioral context. No contradictions with annotations.

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

Conciseness5/5

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

The description is concise and front-loaded with the primary purpose. The safety and endpoint details are provided in compact, structured lines. The slight repetition of 'does not consume credits' is minor and does not detract from overall clarity.

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

Completeness5/5

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

The tool is simple, has an output schema, and the description covers purpose, safety, endpoint, and reference-data nature. It does not need to explain return values given the output schema. The description is sufficiently complete for an AI agent to select and invoke this tool 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?

The input schema has 100% description coverage, so all three parameters (limit, offset, search) are already documented with defaults and ranges. The tool description adds no additional parameter semantics beyond what the schema provides, aligning with 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 opens with 'List company domains available as SmartProspect search filters,' which is a specific verb+resource statement. It clearly distinguishes from sibling list tools by targeting company domains, not countries, states, or other filter types. The title reinforces this.

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 statement 'available as SmartProspect search filters' provides clear context for when to use the tool: to obtain domain options for building search filters. 'Reference data only' adds context that this is not for contact retrieval. However, it does not explicitly name alternatives or state when not to use it, stopping 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.

smartprospect_list_fetched_searchesSmartProspect: list fetched searchesA
Read-only

List searches whose contacts have already been fetched, including per-filter fetch metrics (total contacts, emails, bounces). Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/search-filters/fetched-searches. Free and read-only. Contacts listed here were already paid for; retrieve them with smartprospect_get_contacts rather than fetching again.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return. Smartlead documents no maximum; 1000 is a client-side guard.
offsetNoNumber of records to skip.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.6/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, destructiveHint), the description adds critical safety context: no SmartProspect credit consumption, no remote state modification, no email sending, and the fact that contacts were already paid for. This provides a complete safety profile without requiring the agent to infer from annotations alone.

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 somewhat verbose with repetitive safety statements, but each sentence adds unique value (purpose, safety, endpoint, alternative). It is well-structured and easy to scan, though it could be tightened without losing meaning.

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

Completeness5/5

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

The tool is fully contextualized: purpose, safety, endpoint, relation to paid contacts, and the recommended companion tool for retrieval. An output schema exists, so return-value details are not needed in the description.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for both limit and offset. The description does not add parameter-specific semantics beyond what the schema already provides, 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 specifies the exact resource ('searches whose contacts have already been fetched') and includes per-filter fetch metrics, clearly distinguishing it from sibling tools like list_saved_searches and list_recent_searches. The verb 'List' is concrete 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 Guidelines5/5

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

Explicit guidance is given: 'Contacts listed here were already paid for; retrieve them with smartprospect_get_contacts rather than fetching again.' This tells the agent when to use this tool versus alternatives, and also states the tool is free and read-only.

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

smartprospect_list_head_countsSmartProspect: list company head count rangesA
Read-only

List company head count (size) ranges available as SmartProspect search filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/head-counts. Reference data only. Does not reveal contacts and does not consume credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return (1-100).
offsetNoNumber of records to skip.
searchNoMatch head count ranges starting with this value.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and destructiveHint, but the description adds valuable behavioral context: 'may consume SmartProspect credits: no', 'creates or modifies remote state: no', 'can send email: no', and 'Does not reveal contacts.' This goes beyond the binary hints and clarifies cost and data exposure.

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 compact (about 80 words) and front-loaded with purpose, followed by a structured safety summary and endpoint. Every sentence adds information; the safety bullet duplicates some annotation hints but includes credit and contact exposure details not present in annotations, making it justified.

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 reference-data listing tool with a full output schema and 100% parameter coverage, the description provides all necessary context: what it lists, that it's read-only and free, that it does not reveal contacts, and the exact endpoint. No critical gaps.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for limit, offset, and search. The description does not add further parameter semantics, so the baseline of 3 applies. It correctly implies these are list-pagination/filter parameters but without additional detail.

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: 'List company head count (size) ranges available as SmartProspect search filters.' This clearly distinguishes it from sibling list tools (countries, industries, etc.) by naming the exact resource (head count ranges) and its role as search filter values.

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 phrase 'available as SmartProspect search filters' provides clear context for when this tool is useful (populating filter options). It does not explicitly exclude alternatives or state when not to use it, but the purpose is self-evident and the description adds 'Reference data only' to set expectations.

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

smartprospect_list_industriesSmartProspect: list industriesA
Read-only

List industry values available as SmartProspect search filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/industries. Reference data only. Does not reveal contacts and does not consume credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return (1-100).
offsetNoNumber of records to skip.
searchNoMatch industry names starting with this value.
withSubIndustryNoInclude the sub-industry list for each industry.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare read-only and non-destructive, but the description adds critical context: no credit consumption, no contact exposure, and the exact endpoint. These are meaningful beyond the structured fields, fully disclosing side effects.

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 compact sentences, each carrying substantive value: purpose, safety profile, and reference-only nature. No fluff or redundant phrasing.

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

Completeness5/5

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

With an output schema present, the tool's return value is fully documented. The description covers purpose, safety, endpoint, and usage context, making it complete for this simple read-only list operation.

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 provides 100% parameter descriptions, so the description does not need to compensate. The baseline of 3 applies as the description adds no additional parameter-level meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's function: to list industry values used as SmartProspect search filters. It is specific and distinguishes this tool from sibling list tools (e.g., countries, states, sub-industries).

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 indicates the tool's role as a reference for search filters and explicitly states it does not reveal contacts or consume credits, which helps set context. However, it does not explicitly mention when to prefer this over alternatives such as list_sub_industries.

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

smartprospect_list_job_titlesSmartProspect: list job titlesA
Read-only

List job title values available as SmartProspect search filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/job-title. Reference data only. Does not reveal contacts and does not consume credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return. Smartlead documents a default of 100 and no maximum; 1000 is a client-side guard.
offsetNoNumber of records to skip.
searchNoFilter job titles by name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description goes further by stating 'may consume SmartProspect credits: no', 'creates or modifies remote state: no', 'can send email: no', and 'does not reveal contacts'. This adds valuable context beyond annotations and includes the endpoint for clarity.

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 compact: a one-sentence purpose, a structured safety block, and an endpoint. Every sentence provides useful information without redundancy.

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

Completeness5/5

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

For a simple reference-data list tool with an output schema, the description covers purpose, safety, endpoint, and explicitly clarifies that it does not expose contacts or consume credits. This is complete for the tool's complexity.

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 fully documents limit, offset, and search. The description adds no additional parameter semantics beyond the schema, 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 starts with 'List job title values available as SmartProspect search filters' – a specific verb and resource that clearly distinguishes this from sibling list_* tools (countries, states, cities, etc.). It also notes 'Reference data only. Does not reveal contacts', differentiating it from contact-related 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 provides clear context: this returns reference data for SmartProspect search filters and explicitly states it does not reveal contacts or consume credits. This implies when to use it (needing filter values) and when not (needing contacts), though it doesn't name alternative tools explicitly.

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

smartprospect_list_keywordsSmartProspect: list company keywordsA
Read-only

List company keyword values available as SmartProspect search filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/keywords. Reference data only. Does not reveal contacts and does not consume credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return. Smartlead documents a default of 100 and no maximum; 1000 is a client-side guard.
offsetNoNumber of records to skip.
searchNoFilter keywords by name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds concrete safety details: no SmartProspect credit consumption, no remote state modification, no email, and no contact revelation. It also provides the exact endpoint, offering transparency beyond the structured annotations.

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

Conciseness5/5

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

Three concise, front-loaded sentences: purpose, safety, and endpoint/note. Every sentence contributes value with no redundancy or fluff.

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

Completeness5/5

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

For a simple read-only reference tool with an output schema and fully described parameters, the description covers purpose, safety, endpoint, credit implications, and contact privacy. Nothing relevant is missing.

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

Parameters3/5

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

Input schema has 100% description coverage for all three parameters (limit, offset, search), including constraints and defaults. The description adds no additional parameter-level semantics, so the baseline of 3 applies — the schema carries the parameter information.

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

Purpose5/5

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

The description clearly states the tool lists 'company keyword values available as SmartProspect search filters' — a specific verb and resource. It explicitly notes it is reference data and does not reveal contacts, distinguishing it from sibling contact-search 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 implies usage: retrieving filter options for SmartProspect searches. It clarifies it is reference-only and does not reveal contacts, which helps the agent avoid using it for contact discovery. However, it does not explicitly name alternative tools or state when not to use it, so it falls short of a 5.

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

smartprospect_list_recent_searchesSmartProspect: list recent searchesA
Read-only

List recently executed SmartProspect searches with their filter details. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/search-filters/recent-searches. Free and read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return. Smartlead documents no maximum; 1000 is a client-side guard.
offsetNoNumber of records to skip.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds safety clarifications beyond annotations: 'may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no,' plus the endpoint. No contradiction with annotations.

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

Conciseness4/5

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

The description is three sentences, front-loaded with the purpose. The safety block and endpoint are useful, but 'read-only' appears twice ('read-only: yes' and 'Free and read-only'), creating slight redundancy. Overall, it is concise and well-structured.

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 read-only list tool with an output schema present and annotations covering safety, the description is complete. It correctly does not need to explain return values or pagination in detail, as the schema already documents limit and offset.

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 covers 100% of parameters (limit and offset) with detailed descriptions including defaults and bounds. The description adds no parameter-specific meaning, but the schema fully documents the parameters, so 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 'List recently executed SmartProspect searches with their filter details,' which clearly identifies the action and scope. It differentiates from sibling list tools like list_saved_searches and list_fetched_searches by focusing on 'recently executed' searches.

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

Usage Guidelines3/5

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

The description does not explicitly specify when to use this tool versus alternatives such as list_saved_searches or list_fetched_searches. The use case of browsing recent search history is implied by 'recently executed,' but no explicit guidance, exclusions, or alternative mentions are provided.

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

smartprospect_list_revenue_rangesSmartProspect: list revenue rangesA
Read-only

List company revenue range values available as SmartProspect search filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/revenue. Reference data only. Does not reveal contacts and does not consume credits. This endpoint takes no pagination parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description reveals that the tool does not reveal contacts, does not consume SmartProspect credits, and takes no pagination parameters (meaning returns all data at once). It also provides the endpoint URL, adding useful 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?

The description is concise and front-loaded: the first sentence states the purpose, followed by safety, endpoint, reference nature, and pagination. Each sentence earns its place with no redundant information.

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 zero-parameter reference-data list tool, the description covers purpose, safety, credit consumption, contact privacy, and pagination. An output schema exists, so detailed return format is not needed in the description.

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

Parameters4/5

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

The tool takes zero parameters, and the input schema confirms this. The description adds that the endpoint takes no pagination parameters, which aligns with the schema. Per baseline for 0 params, a score of 4 is appropriate.

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

Purpose5/5

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

The description clearly states 'List company revenue range values available as SmartProspect search filters' with a specific verb and resource. It distinguishes from sibling list tools by specifying the exact data type (revenue ranges) and their role as search filters.

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 phrase 'available as SmartProspect search filters' provides clear context for when to use this tool (when needing reference values for filters). However, it does not explicitly name alternatives or mention when not to use it, 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.

smartprospect_list_saved_searchesSmartProspect: list saved searchesA
Read-only

List saved SmartProspect search filters with their stored filter details. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/search-filters/saved-searches. Free and read-only. Use the returned id as a filter_id elsewhere.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return. Smartlead documents no maximum; 1000 is a client-side guard.
offsetNoNumber of records to skip.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.5/5.0
Behavior5/5

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

The description goes beyond the annotations by explicitly enumerating safety properties: 'read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no.' This provides detailed behavioral transparency, including credit consumption and email capabilities, which annotations alone do not convey.

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

Conciseness5/5

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

The description is efficiently structured: a clear opening sentence, a compact safety block, the endpoint, and a practical usage tip. Every sentence adds value, and the main purpose is front-loaded, making it easy for the agent to quickly grasp the tool's function.

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

Completeness5/5

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

Given the low complexity (two optional parameters), presence of an output schema, and annotations covering safety, the description is complete. It adds the endpoint URL and the crucial cross-tool hint about using the returned `id` as a `filter_id`, covering all necessary operational context.

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 covers 100% of parameters with descriptions for both limit and offset, including bounds and client-side guard rationale. The description does not add extra parameter-level detail, but it doesn't need to because the schema already provides sufficient semantics. 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 clearly states the verb 'list', the resource 'saved searches', and adds 'with their stored filter details' to specify the returned information. This distinguishes it from sibling tools like list_recent_searches and list_fetched_searches, which focus on different types of searches.

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

Usage Guidelines4/5

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

The description provides clear usage context by stating 'Use the returned `id` as a `filter_id` elsewhere', which tells the agent how to leverage the output. It also notes 'Free and read-only', implying safe to call, but does not explicitly name alternatives or exclusions relative to sibling list tools.

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

smartprospect_list_seniority_levelsSmartProspect: list seniority levelsA
Read-only

List seniority level values available as SmartProspect search filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/levels. Reference data only. Does not reveal contacts and does not consume credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return (1-100).
offsetNoNumber of records to skip.
searchNoMatch seniority level names starting with this value.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and destructiveHint, and the description adds concrete details: 'does not consume credits,' 'creates or modifies remote state: no,' 'can send email: no,' and the endpoint URL. This goes beyond annotation basics, clarifying credit usage and remote effects.

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 compact, with the main purpose in the first sentence, followed by a structured safety summary and endpoint. Every sentence provides distinct value, and the formatting is clean and scannable.

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 reference-list tool with an output schema, the description covers purpose, safety profile, endpoint, and credit consumption. It does not need to explain return values because the output schema exists, and the low complexity means no missing behavioral constraints.

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 (limit, offset, search) are fully documented in the schema. The description adds no further semantic detail about how these parameters affect the list, 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 states 'List seniority level values available as SmartProspect search filters,' which clearly identifies the verb (list), resource (seniority levels), and scope (search filters). This distinguishes it from sibling list tools like list_countries or list_departments.

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

Usage Guidelines4/5

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

The description provides clear context: 'Reference data only. Does not reveal contacts and does not consume credits.' This implies it is for retrieving filter values, not contact data. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to decide when to use it.

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

smartprospect_list_statesSmartProspect: list statesA
Read-only

List state/region values available as SmartProspect search filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/states. Reference data only. Does not reveal contacts and does not consume credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return (1-100).
offsetNoNumber of records to skip.
searchNoMatch state names starting with this value.
countryNoComma-separated country names to filter by, e.g. "india,usa,canada".

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.4/5.0
Behavior5/5

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

The description goes beyond annotations by explicitly stating no credits are consumed, no remote state is modified, no email is sent, and no contacts are revealed. It also provides the exact endpoint. These details enrich the annotation-provided readOnlyHint=true and destructiveHint=false without contradiction.

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

Conciseness4/5

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

The description is well-organized: one-sentence purpose, a structured safety profile, endpoint, and a reference-data caveat. Each sentence earns its place, though the safety list is somewhat redundant with annotations, keeping it from a perfect 5.

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?

This is a simple read-only list tool. The description covers purpose, safety, endpoint, and the nature of the data, while the input schema fully documents parameters and an output schema exists. No significant gaps remain for an agent using 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?

Input schema has 100% parameter description coverage, so the baseline is 3. The description does not add additional parameter-specific semantics beyond noting the tool provides filter values; it neither clarifies formats nor adds usage constraints beyond what the schema already documents.

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 'List state/region values available as SmartProspect search filters,' specifying a specific verb and resource. This distinguishes it from sibling list tools like list_countries or list_cities by naming the exact type of value (state/region) and its purpose (search filters).

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

Usage Guidelines4/5

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

The description implies the tool is for retrieving reference data to use in SmartProspect search filters and explicitly notes it does not reveal contacts. It provides clear context, but does not explicitly name alternative tools or state when not to use it, so it falls short of a perfect 5.

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

smartprospect_list_sub_industriesSmartProspect: list sub-industriesA
Read-only

List sub-industry values available as SmartProspect search filters. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: GET https://prospect-api.smartlead.ai/api/v1/search-email-leads/sub-industries. Reference data only. Does not reveal contacts and does not consume credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return (1-100).
offsetNoNumber of records to skip.
searchNoMatch sub-industry names starting with this value.
industry_idNoRestrict results to one industry ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.5/5.0
Behavior5/5

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

The description provides substantial behavioral context beyond the annotations: it includes an explicit safety block (read-only, no credit consumption, no state changes, no email), the REST endpoint, and states it 'Does not reveal contacts and does not consume credits.' This goes well beyond the basic readOnlyHint and destructiveHint annotations.

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

Conciseness5/5

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

The description is four concise sentences that front-load the core purpose, then efficiently covers safety, endpoint, and key behavioral notes. Every sentence serves a clear function with no redundant or filler content.

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

Completeness5/5

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

Given the tool's simplicity, the presence of an output schema, and complete parameter documentation, the description is fully adequate. It covers purpose, safety, endpoint, and important limitations (reference data only, no credits), leaving no significant gaps for an agent to invoke it correctly.

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

Parameters3/5

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

With 100% schema description coverage, every parameter already has detailed descriptions. The tool description doesn't add parameter-specific meaning but provides overall context about the data being listable. This meets the baseline of 3 for high schema coverage.

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

Purpose5/5

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

Description clearly states the tool 'List[s] sub-industry values available as SmartProspect search filters' using a specific verb and resource. This distinguishes it from sibling list tools like list_industries and list_countries by focusing on sub-industries as reference data.

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

Usage Guidelines4/5

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

The description implies usage context by stating these are 'available as SmartProspect search filters' and 'Reference data only,' which communicates that the tool is for retrieving filter options. It doesn't explicitly name alternatives or exclusions, but the purpose is clear enough within the sibling group.

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

smartprospect_review_contactsSmartProspect: review (re-sync) contacts for a filterA

Re-sync contact metrics and statuses for a SmartProspect filter, returning updated counts for emails, bounces and verification. Safety — read-only: no; may consume SmartProspect credits: no; creates or modifies remote state: yes; can send email: no; destructive: no. Endpoint: PATCH https://prospect-api.smartlead.ai/api/v1/search-email-leads/review-contacts/{filter_id}. Modifies remote state (records are updated) but does not consume credits. Blocked in readonly mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
filter_idYesFilter ID whose contacts should be re-synced.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.3/5.0
Behavior5/5

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

The description explicitly discloses that this modifies remote state (matching readOnlyHint=false), does not consume credits, and is blocked in readonly mode—valuable context beyond the annotations. It also clarifies it is not destructive, consistent with destructiveHint=false.

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?

All sentences carry useful information: purpose, safety profile, endpoint, and readonly restriction. No fluff or 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?

The description gives purpose, safety, endpoint, and a hint of return values while an output schema exists. It provides enough context for an agent to select and invoke correctly.

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

Parameters3/5

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

Schema coverage is 100% and the filter_id parameter is already clearly described in the schema. The tool description mentions the filter context but adds no extra parameter meaning, 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?

The description states a specific action ('Re-sync contact metrics and statuses') on a specific resource ('contacts for a SmartProspect filter') and notes the returned counts. This clearly distinguishes it from sibling tools that search, fetch, or list contacts.

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 this is for re-syncing a filter's contacts but does not explicitly state when to prefer it over alternatives like search_contacts or fetch_contacts, nor does it describe exclusions beyond being blocked in readonly mode.

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

smartprospect_search_contactsSmartProspect: search contactsA
Read-only

Search the SmartProspect contact database with filters and return a preview page plus filter_id, total_count and scroll_id. Safety — read-only: yes; may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no. Endpoint: POST https://prospect-api.smartlead.ai/api/v1/search-email-leads/search-contacts. Read-only. Running a search does not fetch or reveal credit-gated contacts and does not spend credits by itself. limit is required and must be 1-500; every array filter accepts at most 2000 items. Pass the returned scroll_id back in to page through results; keep the filter_id to fetch or retrieve contacts later.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCities (max 2000 items).
nameNoFull names (max 2000 items).
levelNoSeniority levels (max 2000 items).
limitYesNumber of contacts to return (1-500). Required by Smartlead.
stateNoStates (max 2000 items).
titleNoJob titles (max 2000 items).
countryNoCountries (max 2000 items).
lastNameNoLast names (max 2000 items).
firstNameNoFirst names (max 2000 items).
scroll_idNoScroll ID returned by a previous search, to fetch the next page.
departmentNoDepartments (max 2000 items).
companyNameNoCompany names (max 2000 items).
excludeTitleNoJob titles to exclude (max 2000 items).
includeTitleNoJob titles to include (max 2000 items).
companyDomainNoCompany domains (max 2000 items).
companyKeywordNoCompany keywords (max 2000 items).
companyRevenueNoCompany revenue ranges (max 2000 items).
excludeCompanyNoCompanies to exclude (max 2000 items).
includeCompanyNoCompanies to include (max 2000 items).
companyIndustryNoIndustries (max 2000 items).
titleExactMatchNoMatch job titles exactly.
companyHeadCountNoCompany head count ranges (max 2000 items).
companyExactMatchNoMatch company names exactly.
companySubIndustryNoSub-industries (max 2000 items).
excludeCompanyDomainNoCompany domains to exclude (max 2000 items).
includeCompanyDomainNoCompany domains to include (max 2000 items).
include_full_recordsNoReturn complete preview records including names and personal fields. Defaults to false for privacy; opt in explicitly when those fields are needed.
companyDomainExactMatchNoMatch company domains exactly.
dontDisplayOwnedContactNoExclude contacts you already own.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
dataYes
errorNo
warningsYes
operationYes
paginationYes
credit_spendingYes
remote_mutationYes

TDQS

A4.3/5.0
Behavior5/5

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

The description goes beyond the annotations by explicitly detailing safety semantics: 'may consume SmartProspect credits: no; creates or modifies remote state: no; can send email: no; destructive: no.' It also adds crucial behavioral context that 'Running a search does not fetch or reveal credit-gated contacts and does not spend credits by itself.' This clarifies the tool's side effects and limitations, adding value beyond the readOnlyHint/openWorldHint annotations. No contradictions with annotations.

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

Conciseness4/5

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

The description is structured with a clear opening sentence followed by safety details, endpoint, and usage notes. It is relatively concise but includes some redundancy: the safety list already states read-only, and then it is repeated ('Read-only.'). The endpoint URL is useful but not essential for an agent. Overall, it is efficient and front-loaded, but a few redundant phrases prevent a perfect score.

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

Completeness4/5

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

Given the tool's complexity (29 parameters, output schema present), the description provides sufficient context for initial use. It explains the tool's purpose, safety profile, pagination, and how to use filter_id for later steps (implying a workflow). The output schema covers return values, so not explaining them is acceptable. However, it does not clarify the distinction between preview records and full records beyond the include_full_records parameter, which might be a slight gap.

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

Parameters3/5

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

The schema description coverage is 100%, with every parameter documented. The description adds little beyond the schema: it reiterates that limit is required (1-500) and array filters have max 2000 items, which is already in the schema. It does clarify the scroll_id parameter's use ('Pass the returned scroll_id back in to page through results'), but the schema describes it similarly. Thus, the description does not significantly enhance parameter understanding beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Search the SmartProspect contact database with filters and return a preview page plus filter_id, total_count and scroll_id.' This uses a specific verb ('search') and resource ('contact database'), and distinguishes it from sibling tools like get_contacts or fetch_contacts, which retrieve full records. The mention of returning a preview page and pagination identifiers clarifies the tool's unique role.

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

Usage Guidelines4/5

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

The description provides clear context on when to use this tool: it is safe for initial searches (does not spend credits or reveal credit-gated contacts) and explains how to paginate with scroll_id and use filter_id for later retrieval. However, it does not explicitly state alternatives or when *not* to use the tool, though the pagination and filter_id guidance implicitly directs users to other tools (like fetch_contacts) for full data.

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

TDQS

A3.9/5.0
Disambiguation4/5

The tools are clearly separated into SmartProspect and Smartlead domains, and most actions target distinct resources. However, smartprospect_get_contacts, smartprospect_fetch_contacts, and smartprospect_find_emails all relate to obtaining contacts/emails with subtle differences that could cause misselection despite detailed descriptions.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with domain prefixes (smartprospect_/smartlead_). Reference data tools use list_*, actions use get_, create_, update_, etc., producing a predictable and readable naming convention.

Tool Count2/5

With 39 tools, the server is quite heavy, exceeding the typical well-scoped range. Many are reference data listers (countries, states, cities, etc.) that could be consolidated, making the surface feel bloated even though the two domains are clear.

Completeness3/5

Core workflows are covered (search, fetch, campaign management, lead import, block list management), but notable lifecycle gaps exist: no delete for saved searches or campaigns, no remove leads from campaign, and no campaign content update. Agents may hit dead ends when needing these operations.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    A Multi-Channel Proxy server that provides a structured interface for interacting with Smartlead's API, organizing functionality into logical tools for campaign management, lead management, and other marketing automation features.
    20
    23
    18
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    A Model Context Protocol server that provides AI coding assistants (Claude, Cursor, etc.) with access to SmartLead's cold email automation platform through 116+ API endpoints for campaign management, lead tracking, and email delivery.
    266
    21
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables AI agents to manage Smartlead campaigns, including creating campaigns, updating schedules, managing email sequences, and adding leads, all over SSE.
    233
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for Prosp.ai LinkedIn outreach automation. Manage leads, campaigns, messaging, and analytics programmatically.
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/voriq-ai/smartlead-mcp'

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