LeadAce
LeadAce server is an autonomous lead-generation and outbound-sales backend: manage projects and prospects, run AI-optimized multi-channel outreach, collect responses, and iterate on strategy.
Project lifecycle: create, list, delete, and configure projects (outbound mode, channels, target countries, follow-up cadence, inquiry landing pages, compliance footer).
Prospect management: add, import from CSV, dedupe, link, update, delete, and search prospects; manage per-project status and priority; set do-not-contact flags; maintain an organization registry.
Outreach execution: fetch ranked outbound targets, send or draft emails via Gmail, record form/SNS/platform outreach, manage pending-review drafts, skip prospects, and check mailbox health/quota.
Response intake: record replies, bounces, meeting requests, and rejection feedback; auto-apply rejection handling (deferrals, DNC, decision-maker pointers); summarize PMF/tactical signals.
Strategy optimization: maintain message variants and discovery strategies; run a daily lever tick that recomputes draw weights, channel affinity, targeting lifts, and futility verdicts.
Analytics and reporting: get evaluation stats (response rates, channel/sentiment/industry/size/country performance), recent outreach logs, and lever decision history.
Documents and settings: manage project documents and master templates, tenant compliance settings, and readiness checks.
Auxiliary: report bugs/feedback, list country codes, list/create suggestions, and check server/plugin versions.
Allows sending outbound emails and checking email replies via Gmail for lead outreach and response management.
LeadAce
Autonomous lead generation plugin for Claude Cowork and Claude Code. Builds prospect lists, runs outbound outreach, and iterates on strategy — all hands-free.
Website: https://leadace.ai
Two ways to run it. Use the hosted service at app.leadace.ai (Free tier — 5 outreach/day, paid plans from $29/mo), or self-host the backend on your own Cloudflare + Supabase. The plugin is the same in either case — point it at the hosted MCP or your own.
For Users
Prerequisites
Claude Cowork (in the Claude Desktop app) or Claude Code, on an Anthropic Pro or Max plan — verified on macOS; by default
/setup-cronruns the daily cycle as a Cowork scheduled task in Anthropic's cloudA LeadAce account at https://app.leadace.ai (Free tier — no card)
A connected Gmail account — for sending email (granted when you sign in with Google, or via the "Connect Gmail" banner in the web app)
Gmail MCP (claude.ai built-in) — for checking email replies
A browser, only for browser channels — contact forms run on Cowork's built-in browser or any browser-automation MCP you configure (e.g. Playwright); SNS DMs and SNS reply checking require Claude in Chrome. A scheduled run reaches the browser only while Claude Desktop is open, with its default browser chosen beforehand
Installation
In Claude Desktop: Customize → Plugins → Add from a repository →
aitit-inc/leadace → Install → Connectors → Connect, then Customize →
Connectors → LeadAce → Connect and sign in with Google.
Or one line in your terminal (Claude Code):
claude plugin marketplace add aitit-inc/leadace && claude plugin install leadace@leadaceOr, from inside a running Claude Code session:
/plugin marketplace add aitit-inc/leadace
/plugin install leadace@leadaceTo update later:
/plugin marketplace update
/plugin update leadace@leadaceSign in to LeadAce
The first time the plugin calls a LeadAce tool, your browser opens for Google sign-in (the same Google account as the web app). The token is cached locally for subsequent runs. See plugin/README.md for details and troubleshooting.
Usage
Most commands take your project name as the first argument (chosen during /leadace onboarding); /leadace itself takes a free-form question or homepage URL.
Run them in a Cowork session (the Cowork tab, not Chat — /daily-cycle runs sub-agents, which Chat can't start) or in Claude Code.
Command | Purpose |
Setup | |
| Entry point — onboarding, environment setup / re-check, strategy authoring, overview, and routing |
Add prospects (pick one) | |
| Web search for new prospects |
| Load CSV / Excel / SQLite |
| Reuse prospects already in your tenant |
Sales loop | |
| Send via email, contact forms, SNS DMs |
| Collect Gmail + SNS replies → DB |
| PDCA — analyse, auto-improve strategy, and surface tactical rejection signals (recontact queue, decision-maker referrals, targeting hints) |
Reflection | |
| Surface PMF signals from rejection feedback (feature gaps, competitor presence) — ad-hoc product reflection |
Automation | |
| One-shot bundle: check-responses → evaluate → outbound + build-list |
| Schedule |
Maintenance | |
| Permanently delete a project and all its data |
Projects, prospects, outreach logs, and strategy documents live in the cloud — there are no local files to manage. Review everything in the web app at https://app.leadace.ai.
Flow
flowchart TD
LA["/leadace<br/>onboard · setup · strategy"] --> P{add prospects}
P -- web search --> BL["/build-list"]
P -- CSV / Excel --> IP["/import-prospects"]
P -- reuse tenant --> MP["/match-prospects"]
BL --> OB["/outbound"]
IP --> OB
MP --> OB
OB --> CR["/check-responses"]
CR --> EV["/evaluate"]
EV -- next round --> P
CR -. PMF signals .-> CF["/check-feedback"]
CF -. revisit strategy .-> LA
DC["/daily-cycle<br/>check + outbound + build, one shot"]
SC["/setup-cron<br/>daily schedule"] --> DC
DC -. replaces manual loop .-> P
DEL["/delete-project"]Solid arrows = the main loop. Dashed = optional / occasional / wrapper.
/evaluate also consumes the tactical slice of rejection feedback (recontact requests, decision-maker referrals, not_relevant industry clusters) recorded by /check-responses — no separate user step.
Related MCP server: swarmix-mcp
License
LeadAce is released under the LeadAce Open Source License — a modified Apache 2.0 with two additional conditions:
No multi-tenant SaaS for third parties without a commercial license from SurpassOne Inc. Self-hosting for your own organization is fine.
Frontend logo and copyright must be preserved in any deployment exposing the LeadAce console.
Hosted service (cloud)
Free tier: 1 project, 500 prospects, 5 outreach actions per day (100 lifetime cap)
Paid plans start at $29/month. Manage your subscription from the web app.
Self-host
See docs/self-host.md. The self-hosted edition runs on the unlimited tier — no Stripe, no caps. For commercial-license inquiries, contact leo.uno@surpassone.com.
For Developers
Repository layout
plugin/ # Claude Code plugin
├── .claude-plugin/plugin.json # Manifest
├── .mcp.json # MCP server config
├── skills/ # Slash commands (each directory has SKILL.md)
├── scripts/fetch_url.py # Local web fetch helper
└── references/ # Shared reference docs
backend/ # API + MCP servers (Cloudflare Workers, Hono, Drizzle)
frontend/ # Web app (SvelteKit, Cloudflare Pages)
docs/ # Project-wide docs (deploy runbook, self-host, architecture)
docker-compose.yml # Bare Postgres for non-Supabase local devPlugin conventions and the schema-change workflow: CLAUDE.md
Self-hosting and local dev: docs/self-host.md
Quick start (local dev)
One-time setup — copy the env templates:
cp backend/.dev.vars.example backend/.dev.vars
cp frontend/.env.example frontend/.envFill in the Supabase keys from supabase status — it prints them once the
local stack is running, so run make dev once first (it starts Supabase), then
paste the keys in.
For Google sign-in to your local stack, also create a Google OAuth client and
export SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID / _SECRET in your shell (via
.envrc) before the first make dev — it boots Supabase, which reads them
from the shell at start time. See
docs/self-host.md → Local development.
(These shell vars gate sign-in; the GOOGLE_CLIENT_ID / _SECRET in
backend/.dev.vars are separate — they power Gmail send.)
Then start the whole stack with one command — Supabase, migrations, the master
seed, the API/MCP Workers, and the frontend, all together. Ctrl-C tears the dev
servers down (Supabase stays up for a fast restart; make stop halts it):
make dev # or: ./scripts/dev.shService | URL |
Frontend | |
API Worker | |
MCP Worker | |
Supabase Studio |
To run on different ports (e.g. one is taken by another dev server), copy
dev.ports.env.example to dev.ports.env and set the ports there — dev.sh
rewires every dependent URL (and Google sign-in keeps working). Defaults are
unchanged when the file is absent.
npx supabase start # Auth + Postgres on ports 54321/54322
cd backend
npm install
npm run db:migrate
npx tsx scripts/seed-master-documents.ts
npm run dev:api # API → http://localhost:8787
npm run dev:mcp # MCP → http://localhost:8788 (separate terminal)
cd ../frontend
npm install
npm run dev # → http://localhost:5273Pre-release checks:
cd backend && npm run typecheck
cd frontend && npm run checkUpdating dependencies (lockfile gotcha)
npm install with node_modules already present can prune other-platform
optional deps (@emnapi/*, @img/sharp-*, esbuild binaries) from
package-lock.json (npm/cli#7961, npm
10.3+–11.x). CI then runs npm ci against that pruned lockfile and fails with
Missing: … from lock file. This bites both backend/ and frontend/, and is
what makes Dependabot's npm PRs go red.
When you change a package.json / package-lock.json (or repair a Dependabot
PR), regenerate the lockfile under the repo's pinned toolchain — not in
Docker:
nvm use # node 22 (repo .nvmrc) — matches CI
cd backend # or cd frontend
rm -rf node_modules # removing this first is what avoids the prune
npm install --no-audit --no-fundThen commit the regenerated package-lock.json. Code-only changes don't need
this — CI consumes the committed lockfile as-is.
Available Tools
55 toolsadd_prospectsB
Batch-register prospects; server-side dedup is authoritative. Returns inserted, skipped, and skippedDetails [{name, reason, detail?}]. Rows whose industry is not in the tpl_industries vocabulary are skipped (reason unknown_industry), and rows whose discoveryStrategy is not registered on the project are skipped (reason unknown_strategy) — fix and re-register.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Project name or ID; omit to save prospects tenant-only (no project link). | |
| prospects | Yes | Max 100 per call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals key behaviors: server-side dedup is authoritative and it returns inserted, skipped, and skippedDetails. It also explains specific skip reasons (unknown_industry, unknown_strategy). However, it does not mention side effects like one-way ratchets for doNotContact or write-once fields, which are present in the schema but not highlighted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, covering the core purpose, dedup behavior, return format, and common skip reasons in three sentences. It avoids unnecessary verbosity while providing essential information. The structure is clear and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool with many parameters and nuanced behaviors, the description covers the high-level operation, dedup, and typical failure modes. It does not repeat all schema details, which is appropriate, but it could mention additional core behaviors like write-once fields or ratchets to be fully complete. Overall, it provides sufficient context for an agent to understand the tool's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds context on how industry and discoveryStrategy values affect processing (skip reasons), which supplements the schema. However, the schema already provides detailed descriptions for all parameters, and the description does not significantly deepen understanding beyond that. The added value is moderate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Batch-register prospects') and its resource (prospects). It distinguishes from update tools by mentioning server-side dedup and provides a clear return structure. However, it could be slightly more explicit about being an 'add' vs 'update' operation, though 'register' implies creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives like import_prospects_from_csv or update_prospect. It implies batch use and dedup authority, but lacks direct guidance on selection criteria. Without explicit usage conditions, the agent may struggle to choose between similar batch-import tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_prospect_dedupA
Read-only duplicate pre-check. Returns decisions[] in input order, each {kind: 'fresh' | 'skip', reason?}; reasons are the dedup subset of add_prospects (no plan_limit).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Project name or ID; omit for tenant-scope dedup only (no project-link check). | |
| candidates | Yes | Max 100 per call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explicitly states 'Read-only' (implying no side effects) and describes the output structure and the reason field. However, it does not disclose error handling, normalization behavior, or constraints like max candidates (though that is in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using a single sentence with clear structure. It packs crucial information: read-only nature, output format, and relationship to add_prospects, with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately describes the return structure. It also covers the dedup logic and key behaviors. However, it does not specify error cases or rate limits, but that is mitigated by the straightforward nature of a pre-check tool and the schema's coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds value by explaining the effect of omitting projectId (tenant-scope only, no project-link check) and mentions normalization server-side for organizationDomain, which complements the schema. This goes beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: a read-only duplicate pre-check that returns decisions in input order with kind ('fresh' or 'skip'). It specifies the exact output structure and explicitly mentions the dedup subset, distinguishing it from sibling tools like add_prospects and skip_prospect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly indicates this is a pre-check tool (read-only) and references the dedup subset of add_prospects, which suggests when to use it (before adding prospects). However, it does not explicitly state when not to use it or name alternatives beyond the reference to add_prospects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_organizationA
Register an organization by domain alone — e.g. to flag a company do_not_contact before any prospect exists. Omitted name/websiteUrl default from the domain; CONFLICT if the domain already exists (use update_organization).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| domain | Yes | Domain or website URL; protocol, path, and "www." are stripped. Pass the apex domain (e.g. "example.com") — a subdomain only excludes that exact subdomain. | |
| websiteUrl | No | ||
| doNotContact | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavior such as defaulting name/websiteUrl from the domain and CONFLICT handling on duplicate, which is valuable. It could also clearly state that this is a write operation, but the mutation is strongly implied by 'register' and 'CONFLICT'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main purpose, and every clause adds useful behavioral or contextual detail. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, when to use, conflict handling, and default behavior for common parameters. For a create tool with no output schema, it is largely complete, though it could mention what the create action returns on success if that matters for follow-up calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (only domain is documented in the schema), but the description clarifies the semantics of the 'name' and 'websiteUrl' parameters (default from domain) and illustrates the 'doNotContact' use case. It does not explicitly describe the doNotContact parameter, but the schema has a default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Register an organization') with a clear resource and method ('by domain alone'). The example of flagging a company and the explicit pointer to update_organization for existing domains distinguishes it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an explicit use case ('before any prospect exists') and explicitly says 'CONFLICT if the domain already exists (use update_organization)', which tells the agent when to choose a different tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_organizationsA
Permanently delete organizations by id (max 200); organizations that still have prospects are skipped with a reason. Preview with list_organizations.
| Name | Required | Description | Default |
|---|---|---|---|
| organizationIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses permanent deletion, the max batch size, and the skip behavior with a reason. It does not mention idempotency or error responses, but the key destructive and partial-failure aspects are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no redundancy. It front-loads the action and immediately provides critical constraints and a useful preview tip, making every word purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter delete tool with no output schema, the description covers the essential context: permanence, limit, conditional skipping, and preview. It does not explain return values, but that is not required given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly notes 'by id' and 'max 200', which aligns with the schema's organizationIds array and maxItems. Since schema coverage is 0%, the description partially compensates, but it adds little beyond what the parameter name and schema already imply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (delete), the resource (organizations), and the scope (by id). It also highlights a key constraint (max 200) and a behavioral nuance (skipped if prospects exist), which distinguishes it from related tools like delete_prospects or delete_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises to 'Preview with list_organizations,' which gives clear usage context. However, it does not explicitly mention when not to use this tool or alternative tools for deleting individual prospects, leaving some room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_projectA
Delete a project and its project-scoped data (project-prospect links, outreach logs, responses, inquiry sessions, learned send-optimization state, documents, settings, message variants). Prospects are tenant assets and are NOT deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project name or ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently lists the categories of project-scoped data that will be deleted and adds a crucial warning that prospects are NOT deleted, which is a significant side-effect clarification. It doesn't mention reversibility or permissions, but for a delete operation, this coverage is above average.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Despite being a single sentence, the description efficiently packs essential details: the action, the explicit list of affected data, and the exclusion of prospects. The structure front-loads the verb and resource, and the parenthetical list is scannable. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with one parameter and no output schema, the description covers the key aspects: what gets deleted, what doesn't, and the scope of impact. It doesn't address restore capabilities or authorization, but that's acceptable. The nuance about prospects being tenant assets is valuable and covers a likely source of confusion.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with a description for projectId ('Project name or ID.'). The description adds no additional parameter-level detail beyond the schema, which is acceptable since the schema is complete. This is a baseline 3, as the description doesn't enhance parameter understanding beyond the structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Delete' and identifies the resource 'project' while listing the exact scope of deletion (project-prospect links, outreach logs, etc.). It distinguishes itself from sibling tools like delete_prospects and delete_organizations by explicitly scoping the deletion to project-scoped data and highlighting that prospects are tenant assets and NOT deleted, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on what the tool does and implies when to use it (when deleting a project without affecting tenant prospects). However, it does not explicitly name alternatives or state 'use this instead of X.' The clarification about prospects suggests a boundary but doesn't offer explicit guidance on choosing between this and other delete tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_prospectsA
Permanently delete prospects by id (max 200), workspace-wide. Do-not-contact prospects, prospects with outreach history, and prospects on 2+ projects are skipped with a reason; reports organizations left with no prospects. Preview with list_project_prospects.
| Name | Required | Description | Default |
|---|---|---|---|
| prospectIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses permanence ('permanently delete'), workspace-wide scope, skip conditions, and a side effect (reports organizations left with no prospects). This is highly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action and constraints, and contains no unnecessary words. Every word contributes to understanding the tool's purpose and edge cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with one parameter and no output schema, the description covers purpose, scope, exclusions, preview step, and side effects. It is sufficiently complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully constrains the single parameter prospectIds (array of integers, max 200). The description adds 'by id' and 'max 200', but those duplicate schema constraints; no significant new meaning beyond the schema is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool permanently deletes prospects by ID with a maximum of 200, workspace-wide. This distinguishes it from sibling delete tools like delete_project and delete_organizations, and the preview reference adds context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly recommends previewing with list_project_prospects before deleting, which is an alternative. It also notes skipped categories (do-not-contact, outreach history, 2+ projects), helping the agent decide when the tool is appropriate, though it doesn't contrast with softer alternatives like skip_prospect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discard_draftsA
Batch-delete pending_review drafts by ids, or by projectId to wipe every pending_review draft in the project. Only pending_review rows are deleted; any other status silently excluded. Returns the deleted count and any skipped ids. Preview with list_drafts.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Outreach log ids to discard. Mutually exclusive with projectId. | |
| projectId | No | Project name or ID. Mutually exclusive with ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and reveals meaningful behavioral details: it only deletes pending_review rows, silently skips other statuses, returns the deleted count and skipped ids. It does not mention irreversible nature but 'delete' is explicit and the status-filtering and return-value disclosure is good.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: first states the action and both modes, second clarifies scope/exclusion, third states return values and preview workflow. Every sentence earns its place; no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deletion tool with no annotations or output schema, the description covers invocation mode, scope, exclusions, return value, and preview alternative. Missing minor details like whether projectId matches exact prefix or exact name, but the critical operational facts are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both ids and projectId described, so baseline credit applies. The description adds that ids/projectId are 'mutually exclusive' (also in schema descriptions) and confirms the ids represent outreach log ids, matching the schema. It doesn't need to add syntax because the schema already covers both parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('batch-delete') with a clear resource ('pending_review drafts') and explicitly distinguishes two invocation modes (by ids or by projectId). It also differentiates from sibling delete tools like delete_project and delete_prospects by scoping to drafts, and even points to list_drafts for preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool (batch-delete pending_review drafts) and describes exclusionary behavior ('only pending_review rows are deleted; any other status silently excluded'). The note 'Preview with list_drafts' gives a clear workflow and alternative for dry-running before deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_compliance_statusA
Pre-flight compliance check for outbound. Reports ready or incomplete, with the unset fields. Incomplete means at least one of legalName / physicalAddress / defaultSenderCountry is missing, and send_email_and_record / record_outreach_with_inquiry then refuse with 412.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that it reports readiness status, defines 'incomplete' precisely with the missing fields, and states the downstream 412 consequence. This is transparent for a read-only check, though it doesn't mention side effects or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the core purpose, then provides essential detail about the incomplete condition and downstream actions. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description fully explains what it returns (ready/incomplete with unset fields) and why it matters. It is complete for its simple scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4. The description doesn't need to explain parameters, and it correctly focuses on output semantics instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Pre-flight compliance check for outbound.' It specifies what it reports (ready or incomplete) and the specific fields checked, distinguishing it as a pre-condition checker for outbound actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool by calling it a 'pre-flight check' and noting that send_email_and_record and record_outreach_with_inquiry refuse with 412 if incomplete. This gives clear context for usage, though it doesn't name alternative check tools or explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_documentA
Get the latest version of a project document by slug.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Document slug: "business", "sales_strategy", "search_notes", "learnings", or "playbook_<strategy-slug>" | |
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose a behavioral trait: it returns the latest version, not a specific historical version. But it does not mention return format, not-found behavior, or any read-only guarantees. Since 'get' implies a fetch, this is a minimal but acceptable disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded and contains no filler. Every word contributes to meaning: 'Get', 'latest version', 'project document', 'by slug'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with two well-documented parameters, so the description is mostly complete. However, there is no output schema and the description does not explain the return shape or behavior for missing documents. Sibling context shows document-related tools exist, but the description doesn't clarify how this differs from get_master_document.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; both slug and projectId have useful descriptions in the schema. The tool description adds no extra parameter semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get the latest version of a project document by slug.' It clearly identifies the target resource (project document), the action (get), and the key parameter (slug). It also distinguishes from siblings like list_documents and get_master_document through 'latest version' and 'by slug.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied via 'by slug' and 'latest version' — the tool is for targeted retrieval of a specific document version. However, there is no explicit guidance on when to choose this over related siblings such as list_documents or get_master_document, and no alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eval_dataA
Evaluation statistics for a project: response rates, channel performance, sentiment breakdown, discoveryStrategyResponseRate (per discovery strategy; reply metrics count mature sends only while its bounce metrics span all sends — the early source-quality read; the null bucket is prospects without recorded provenance), targeting observation axes (industryResponseRate by coarse bucket / sizeResponseRate by employee band / countryResponseRate — these also count mature sends only, older than the reply-maturity window), freshSignalResponseRate, inquiry-landing outcome counts, respondedMessages, and a data-sufficiency check. Reply rates exclude bounces/auto-replies; per-bucket bounces + bounceRate are a threaded-only lower bound.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses important behavioral nuances: mature-send windows, bounce metrics spanning all sends, reply rates excluding bounces/auto-replies, and the threaded-only lower-bound nature of per-bucket bounces. It does not mention return format, permissions, or rate limits, but the counting semantics are unusually well specified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and runs on as one long sentence with multiple parenthetical asides, making it hard to scan. However, nearly every clause carries substantive information about metric definitions, so the length is not padded with filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex metrics tool with no output schema and no annotations, the description covers many metric fields, bucket definitions, and counting caveats, including the maturity-window distinction and null provenance bucket. It stops short of describing the exact return shape or the data-sufficiency check outcome, but overall coverage is strong relative to complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter projectId is already fully documented in the schema with 100% coverage, so the description does not need to add parameter syntax. The project-scoped context is implicit in the schema and the description adds no extra parameter-specific meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Evaluation statistics for a project' and enumerates specific metric families (response rates, channel performance, sentiment breakdown, targeting axes), making the tool's resource and output scope clear. It is clearly distinguishable from sibling tools like get_outbound_targets or get_mailbox_health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when project evaluation statistics are needed, but it never explicitly states when to choose this tool over alternatives or lists exclusions. There is no mention of prerequisites, typical scenarios, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gmail_statusA
Whether the current user's Google account is connected (gmail.send scope), the address it is connected as, and whether Google has revoked the stored access.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It clearly indicates this is a read-only status query and enumerates the data returned, but it does not mention authentication, rate limits, or error behavior. This is adequate for a simple status tool but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core purpose and lists the exact pieces of information returned. Every word earns its place; there is no wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity tool with no parameters and no output schema. The description sufficiently explains the return values (connection status, address, revocation) and overall behavior, making it complete enough for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics to explain. Per the rubric, a baseline of 4 is appropriate when no parameters exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a status check for the current user's Gmail connection, specifying the scope (gmail.send), connected address, and revocation status. It is specific but does not explicitly differentiate from siblings like get_mailbox_health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as get_mailbox_health, nor any prerequisites or exclusions. Usage context is only implied by the nature of a status check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lever_decisionsA
Read-only history of the project's daily lever-tick decisions, newest first. Each entry is one UTC day: message-variant draw weights, variants archived that day (reason "stagnation" marks a rotation, absent = dominated), per-variant sample counts, channel affinity per coarse-industry bucket, targetingLifts, the discovery-strategy decision (weights / archived / samples / the prior UTC day's per-strategy registration counts), vitals — the project futility check over recent mature email sends (sends / replies / pDead / verdict), and configUsed — the effective lever config the tick ran under (the latter four null on pre-upgrade entries). Empty until the tick has run at least once.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window in days (default 30) | |
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it states read-only behavior, newest-first ordering, per-entry composition, null semantics for pre-upgrade entries, and empty-state behavior until the tick runs. This far exceeds minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph but front-loads the core purpose and then systematically enumerates entry fields. It is longer than minimal, but the complexity of the returned data justifies the detail; it remains organized and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and the tool returns highly structured historical data, the description is remarkably complete: it covers ordering, field contents, null behavior, and empty-state semantics. No critical behavioral or return-value aspects are left obscure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: projectId and days are both described in the schema. The tool description adds no parameter-level detail beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Read-only history of the project's daily lever-tick decisions, newest first,' which clearly identifies the verb (read/get), resource (lever-tick decisions), and scope (daily history per project). It differentiates from sibling tools like run_lever_tick and get_lever_state by emphasizing historical read-only access.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes the tool's context: it is for inspecting past daily lever-tick decisions and explicitly notes 'Empty until the tick has run at least once,' setting expectations for when results exist. It does not explicitly name alternatives or provide when-not-to-use guidance, but the read-only history framing makes the appropriate use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lever_stateA
Read-only snapshot of the project's outbound optimizer: message-variant draw weights (null until the first tick → uniform), channel affinity per coarse-industry bucket ({} until measured → policy order), targetingLifts (null until a tick has computed them → neutral ordering), updatedAt, per-active-variant mature-sample progress, the discovery block (the strategy registry — each entry's slug, approach, and archived state; the active set is what /build-list runs, while add_prospects accepts any registered slug — plus the tick's strategy draw weights, a batchPlan apportioning a registration batch of batchSize across the active strategies by those weights, and a needsReplenishment flag that asks /evaluate to register fresh strategies), today's tick decision if it ran, and the variant-pool needsReplenishment (also true while a stagnation-rotation slot awaits its fresh angle).
| Name | Required | Description | Default |
|---|---|---|---|
| batchSize | No | Registration batch size the discovery.batchPlan apportions (default 30). | |
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavior, and it does extensively. It explicitly states 'read-only', explains null/default states (null until first tick, {} until measured), and details how flags like needsReplenishment behave. This provides the agent with a clear understanding of side-effects and state semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is an extremely long single sentence with numerous nested parentheticals, making it difficult to parse. Although it is information-dense, it lacks structural breaks (e.g., bullet points, sentences) and buries key facts. This reduces readability and violates the principle of front-loading with concise scannable text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (many state fields, relationships to other operations), the description is exceptionally complete, covering all reported state elements and their meanings. It even explains how the discovery block connects to /build-list, add_prospects, and /evaluate. Since no output schema exists, the description carries the full burden of describing return content, which it does thoroughly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter coverage with descriptions for both projectId and batchSize. The description does not add significant parameter-specific meaning beyond the schema; it mentions batchSize in context of batchPlan but the schema already describes it. Therefore baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Read-only snapshot of the project's outbound optimizer', clearly identifying the tool's purpose and immediate read-only nature. It enumerates the specific state components (draw weights, channel affinity, targetingLifts, discovery block, etc.), distinguishing it from sibling tools like run_lever_tick (which executes a tick) and get_lever_decisions (which retrieves decision records).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the tool is for inspecting the current state of the optimizer, contrasting indirectly with actions like running a tick or registering strategies. However, it does not explicitly state 'use this when you need to view the optimizer state' or exclude specific alternatives, so it falls 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.
get_mailbox_healthA
Warmup and daily-cap state of the mailbox this project sends from (assigned custom mailbox, else connected Gmail). This per-mailbox email cap is separate from the plan/billing outreach quota — email sends only, resets at UTC midnight. Returns the mailbox email, warmup ramp (week X of N) or fixed cap override, today's cap/used/remaining, any pause, and a trailing 30-day bounceRate (threaded-only lower bound). Returns a no-mailbox state when the project has no assigned mailbox and no linked Gmail.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It is transparent about what the tool returns (mailbox email, warmup ramp, cap, used, remaining, pause, bounce rate), the reset time (UTC midnight), the scope (email sends only), and the edge case of a no-mailbox state. It also clarifies the bounce rate is a 'threaded-only lower bound', which is a useful nuance. It doesn't explicitly state read-only, but the 'get' nature implies it, and no side effects are mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph that front-loads the primary purpose and then enumerates the return fields. It is concise but information-dense, covering all necessary details without redundancy. Every sentence adds value, and the length is appropriate for the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description must explain the return values, and it does so thoroughly: mailbox email, warmup ramp or fixed cap override, today's cap/used/remaining, pause status, and 30-day bounce rate, plus the no-mailbox state. It also provides relevant context like reset timing and the separate quota distinction, making it fully self-sufficient for an agent to understand expected outputs and behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single parameter projectId with a clear description ('Project name or ID'). Since schema description coverage is 100%, the baseline is 3. The tool description does not add any additional meaning to the parameter itself, but it doesn't need to because the schema covers it; the description focuses on the return value context instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves mailbox health state, listing specific data points like warmup ramp, daily cap, used/remaining, bounce rate. It uses a specific verb 'get' with a well-defined resource 'mailbox health', and it implicitly distinguishes itself from sibling tools like get_gmail_status and get_lever_state by focusing on per-mailbox sending limits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool by explaining it covers the mailbox used for sending, and explicitly notes the daily cap is separate from the plan/billing outreach quota, which helps avoid confusion with other quota-related tools. However, it doesn't explicitly name alternative tools or state dedicated 'when to use' versus '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.
get_master_documentA
Get a shared master document by slug.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Master document slug (e.g. "tpl_business", "tpl_email_guidelines") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description carries the burden of transparency, and 'Get' clearly signals a read-only operation. It adds the qualifier 'shared,' which hints at the resource type, but does not disclose what the response contains, any required permissions, or potential error conditions—adequate for a simple getter but not detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundant phrasing. Every word contributes meaning, making it exceptionally concise and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read operation with no output schema or annotations, the description provides the essential 'what' and 'how.' However, it omits any indication of the returned document structure or format, leaving the agent to infer the response shape—acceptable for a simple tool but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single 'slug' parameter, including an example, so the description's 'by slug' adds no new semantic information. The description reinforces the parameter's role but does not go beyond what the schema already states, earning the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Get') and explicitly names the resource ('shared master document') and retrieval method ('by slug'), which sets it apart from the generic get_document sibling. However, it does not explicitly contrast itself with get_document or list_master_documents, so it stops short of a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: the agent should call this when a master document's slug is known. It provides no explicit when-not-to-use guidance or reference to alternatives like get_document or list_master_documents, so the context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_outbound_targetsA
Prospects due for outreach (new + follow-up/recycle touches), ordered by the measured targeting score (x priority multiplier; a share of each batch is random exploration slots); server-filters by enabled channels and deliverable country (unknown country passes unless the project sets targetCountries). Reports the reachable total and its email / formOnly / snsOnly / platformOnly split, the outbound mode (send|draft), remaining outreach quota, and the mailbox email cap; then the prospects as JSON, each carrying country, discoveryStrategy, and cycle {kind, touchNumber}.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max number of prospects to return | |
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses internal logic such as the use of a measured targeting priority, random exploration for a share of batches, server-side filtering by enabled channels and country, and the structure of the output (reachable total, split, mode, quota). This goes well beyond any annotations (none provided).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph covering multiple aspects (ordering, filters, output details). It is not overly verbose but conveys a lot of information efficiently. Well-structured despite length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by detailing the return format (reachable total, split, mode, quota, and prospect fields). It also explains query parameters' effects and filtering logic, making it fairly complete for a get operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for both parameters (limit and projectId). The tool description does not add significant extra meaning to these parameters beyond what is already in the schema, though it does imply their role in the overall process. Baseline is 3 due to full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves prospects due for outreach, specifying ordering, filtering, and output details. It distinguishes itself from sibling tools by detailing its unique behavior (priority-based ordering, random exploration, server-side filters).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool's behavior (e.g., how prospects are ordered and filtered) but does not explicitly state when to use it over alternatives or provide when-not-to-use guidance. The context is implicit, but no explicit usage comparisons are made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_settingsA
Get user-editable project settings as JSON (outboundMode, sender identity, unsubscribeEnabled, footerOverride, inquiry-landing config, follow-up/recycle windows, outboundChannels, targetCountries, targetLanguage). Fields the user never set carry their column defaults; 404 when the project does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It clearly states this is a read operation returning JSON, explains that unset fields revert to column defaults, and specifies a 404 error for missing projects. This is valuable contextual information beyond the bare operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the purpose and lists return fields, the second explains default behavior and error case. There is no redundant information, and the key details are front-loaded. Every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with one parameter and no output schema, the description is comprehensive. It specifies the return format (JSON), lists the contained fields, explains defaulting behavior, and handles the error case. No additional information is necessary for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the single parameter 'projectId' as 'Project name or ID', achieving 100% schema coverage. The description does not add further parameter-specific details, but the baseline score of 3 is appropriate given the high schema coverage. The description implies the parameter identifies the project to fetch settings for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as retrieving user-editable project settings, listing specific fields and distinguishing it from the sibling update_project_settings by focusing on the read aspect. It uses a specific verb 'get' and resource 'project settings', with a clear scope of what is returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: this is the read-only counterpart to update_project_settings. While it doesn't explicitly state when to use this versus alternatives, the purpose is unambiguous and the tool is a natural getter for project settings. It provides no exclusion criteria but sets expectations about defaults and error handling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_outreachA
Recent outreach logs for a project. Confirmed events only (sent / failed / skipped) — pending_review drafts and pre_send rows are excluded; use list_drafts for those. Each log carries recipient identifiers (prospectName, contactName, prospectEmail, organizationDomain) and inquiry-landing aggregates (inquirySessionCount, inquiryOutcome, inquiryMeetingSource, inquiryLastVisitAt).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It clarifies the filtering behavior and lists included fields, but does not specify any additional behavioral aspects like authentication, rate limiting, or how 'recent' is determined. It's not misleading but could add more context about the returned data's scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loads the main purpose, and includes necessary detail about exclusions and output fields without unnecessary fluff. Each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only 2 parameters, no output schema, and no annotations, the description provides a solid overview of behavior, exclusions, and output fields. It is sufficient for a straightforward read operation, though it could mention how 'recent' is defined or any default ordering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 50% of parameters with projectId having a description, but limit is unexplained. The description does not elaborate on either parameter, relying on the schema. Since the description does not add meaning beyond what the schema provides, and the coverage is partial, this is a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves recent outreach logs for a project, and explicitly distinguishes itself from list_drafts by noting that it only includes confirmed events and excludes pending_review and pre_send rows. This differentiates it from sibling tools like list_drafts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (for confirmed outreach events) and points to an alternative (list_drafts) for excluded statuses. This directly helps the agent decide between get_recent_outreach and list_drafts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rejection_feedback_summaryA
Aggregate rejection_feedback for a project. Returns primaryReasonDistribution, the tactical fields recontactWindows / decisionMakerPointers / notRelevantNotes / budgetNotes (budget free-text), and the pmf field feature_gap free-text notes. Read-only view — any deferral or prospect creation these rows imply happened at record_response time, not on read.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | "pmf" → PMF slice only; "tactical" → non-PMF slice only; "all" (default) → unfiltered union. | |
| projectId | Yes | Project name or ID | |
| windowDays | No | Restrict to rejections received within the last N days. Omit for all-time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It explicitly states 'Read-only view' and explains that deferral/prospect creation happen elsewhere, which is transparent about side effects. It could mention pagination or performance, but for an aggregation summary, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, focuses only on key details, and is front-loaded with the core action. Every word adds value—no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description lists the return fields (primaryReasonDistribution, tactical fields, pmf field). This covers the main expected result. It does not explain edge cases like empty results, but the read-only nature and field details are sufficient for a summary tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema. The description does not add extra meaning beyond what schema already explains, but it does mention the output fields, which are not parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Aggregate rejection_feedback for a project' and lists the specific output fields. This is specific and distinguishes from siblings, though no sibling does the same thing. It's a clear verb+resource+scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description sets context by noting it's a read-only view and clarifies that side effects occurred at record_response time, not on read. This guides usage for reading aggregated feedback. However, it doesn't explicitly mention when to prefer this over alternatives, though no similar tool exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_versionA
Returns { serverVersion, minPluginVersion } for the LeadAce backend MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral transparency. It states that the tool 'Returns' data, implying a read-only operation with no side effects. While it doesn't explicitly mention side effects or lack thereof, the nature of the operation (fetching version info) makes it safe to assume no modifications occur. This is adequate for a simple getter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that directly states the tool's output. It uses clear language ('Returns { serverVersion, minPluginVersion }') without any superfluous information. Every word serves a purpose, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although no output schema is provided, the description explicitly lists the return fields (serverVersion and minPluginVersion), giving users a complete picture of what to expect. This is sufficient for a tool with such a simple output. No additional context is required for understanding the tool's behavior or result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is trivially 100% (no parameters to document). The description does not need to elaborate on parameters. Per the rubric, with high schema coverage and no parameter info, a baseline score of 3 is appropriate. The description adds no parameter-related details because none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it retrieves the server version and minimum plugin version for the LeadAck backend MCP server. The verb 'Returns' specifies the action, and the resource (server version) is unambiguous. It is distinct from sibling tools, none of which appear to fetch version information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys the tool's function without explicit guidance on when to use it. Since it is a simple getter with no alternatives, the context is implied. However, it lacks explicit 'when not to use' or comparison with other tools, though the simplicity of the operation makes it clear it should be called when version information is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tenant_settingsA
Returns the workspace identity/compliance fields (legalName, physicalAddress, defaultSenderCountry) plus a readiness status line; all three gate outbound: send tools refuse (412) until each is set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It does well by stating the tool returns specific fields and a readiness status, and by disclosing the downstream gating behavior (412 refusal). It does not explicitly state 'read-only' or 'no side effects', but 'Returns' strongly implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one dense sentence that conveys the resource, the specific fields, the additional status output, and the behavioral consequence of the gate. No filler or redundant wording; it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description does a good job telling the agent what the tool returns and why it matters. It misses an explicit differentiation from the sibling get_compliance_status, but the field-level detail and gate explanation make the tool's purpose sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to explain. Based on the rubric, 0 params earns a baseline of 4. The description adds no parametric semantics, but none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and names the exact resource ('workspace identity/compliance fields') plus its output ('readiness status line'). It clearly distinguishes itself from generic getters by specifying the field names and the outbound gating behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies strong usage context: check these settings before sending outbound, as send tools refuse 412 until all three fields are set. It does not explicitly exclude or name alternatives like get_compliance_status, but it provides clear context for when the tool's output is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_prospects_from_csvA
Import prospects from a canonical CSV string. Returns inserted, overwritten, skipped, errors, skippedDetails [{row, name, reason}], and errorDetails. dedupPolicy 'overwrite' refreshes prospects matched by email, contactFormUrl, or platformUrl and re-links them, but domain-only matches skip as already_in_project and do_not_contact rows are always skipped; doNotContact is a one-way ratchet on overwrite (true sets it, false/absent never clears). Max 1000 data rows.
| Name | Required | Description | Default |
|---|---|---|---|
| csvText | Yes | Full CSV text including header row. | |
| projectId | No | Project name or ID; omit to save prospects tenant-only (no project link). | |
| dedupPolicy | No | skip |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it succeeds thoroughly. It exposes the one-way doNotContact ratchet, domain-only skip behavior, overwrite re-linking semantics, and the complete return payload including skippedDetails and errorDetails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause carries necessary information: input format, output fields, dedup policy semantics, edge cases, and limits. There is no filler or repetition of schema trivia; it is front-loaded with the core action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, this description is remarkably complete. It documents return fields, error/skip details, dedup edge cases, the doNotContact ratchet, and the max row count; only the exact CSV column contract is left to the 'canonical' term, which is a reasonable shared assumption.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, and the description substantially enriches the dedupPolicy parameter by explaining exactly how 'overwrite' matches prospects and why domain-only matches are skipped. It also adds the meaning of 'canonical CSV string' and the significance of omitting projectId, going well beyond the schema's enum and minLength.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause states the operation precisely: 'Import prospects from a canonical CSV string.' It clearly distinguishes this bulk-import tool from sibling tools like add_prospects or list_tenant_prospects by focusing on CSV ingestion, dedup policy, and import results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong situational context: it explains dedupPolicy behavior, tenant-only behavior when projectId is omitted, and the 1000-row limit. It does not explicitly name alternatives such as add_prospects for non-CSV or single-prospect scenarios, so exclusions are implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_existing_prospects_to_projectA
Link existing tenant prospects to a project; does NOT create new prospects or organizations. Skips prospects that are do_not_contact or not found in this tenant (per-prospect reason in skippedDetails); returns linked / alreadyLinked / skipped counts.
| Name | Required | Description | Default |
|---|---|---|---|
| links | Yes | ||
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses key behaviors: it links existing prospects, skips do_not_contact or not-found prospects, and returns counts with per-prospect reasons in skippedDetails. This gives the agent a clear picture of side effects and expected behavior, though it omits permission requirements or potential irreversible changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that front-loads the purpose and includes all essential behavior and return summary. There is no filler or redundancy; every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (two parameters, one an array of objects) and no output schema, the description adequately covers the main behavior, return counts, and skipping logic. It notes skippedDetails for per-prospect reasons, which is helpful. It could mention error handling for invalid projectIds or further shape the skippedDetails structure, but the description is reasonably complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, with descriptions for projectId and matchReason in the schema itself. The description adds meaning to prospectId by stating it must reference existing prospects and that certain ones are skipped, but it does not elaborate on the priority field or the structure of the links array beyond what the schema already covers. It adds some value but does not fully compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: linking existing tenant prospects to a project, and explicitly distinguishes from creating new prospects or organizations. It also mentions the skipping behavior and return counts, making the purpose unambiguous and distinct from siblings like add_prospects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clarifies that this tool does NOT create new prospects or organizations, which implicitly tells users to use this when they have existing prospect IDs. It also notes that do_not_contact or not-found prospects are skipped, providing context on when results may be partial. However, it does not explicitly name alternative tools or contrast with add_prospects or import_prospects_from_csv.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_country_codesA
Lists the ISO 3166-1 alpha-2 country codes LeadAce recognizes for a prospect/organization country. Returns { countries: [{ code, name, sendAllowed }], sendAllowed, note }; sendAllowed marks codes outreach can currently deliver to, others store but are blocked at send time.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It covers the return shape and the semantics of sendAllowed, including that non-allowed codes 'store but are blocked at send time.' This is valuable behavioral context beyond the bare tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states what the tool lists; the second explains the return object and the key behavioral distinction. Every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, reference-style tool with no output schema, the description is complete: it names the standard, the domain, the exact return fields, and the meaning of sendAllowed. The agent has enough information to invoke and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so the baseline is 4. The description correctly avoids inventing parameter details and instead provides output semantics. Its mention of the 'country' context is useful but not a parameter definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lists') and a precise resource ('ISO 3166-1 alpha-2 country codes LeadAce recognizes'), with additional scope defined as 'for a prospect/organization country.' This is clearly distinct from any sibling tool in the set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when this tool is relevant: when working with country values for prospects/organizations. It also explains the meaningful distinction between sendAllowed and blocked codes, which helps the agent decide how to use the results. No explicit alternatives or exclusions are given, but no competing sibling tool exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_documentsB
List all documents for a project with their last updated timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only listing but does not clarify any side effects, pagination, sorting, or permission requirements. The minimal information does not add behavioral insight beyond the action itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that conveys the core action and output immediately. No redundant phrasing or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and no output schema. The description gives the essential purpose and hints at the returned data (timestamps), but omits details like whether output includes document names, pagination limits, or how to interpret the list. Adequate for a basic list, but not fully complete without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description covers 100% of the single parameter (projectId). The description adds no extra semantic detail about the parameter beyond what the schema already provides, but it does clarify the context (documents for a project). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list all documents) and the object (documents for a project), and mentions the included data (last updated timestamps). However, it does not explicitly distinguish itself from sibling tools like list_master_documents, leaving slight ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as list_master_documents or get_document. No mention of prerequisites or typical use cases beyond the basic action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_draftsA
List pending_review drafts for a project, newest first. Returns total and rows with a truncated bodyPreview; doNotContact marks drafts whose recipient became DNC after drafting — discard those, sending is blocked.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It discloses output shape (total, rows, truncated bodyPreview), sorting order, and the important doNotContact behavior with blocked sending. It omits auth/permission details, but those are not critical for a simple read/list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences: the first front-loads the purpose and ordering, the second adds return-shape detail and a behavior-critical warning. Every sentence earns its place with no repetition of schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no annotations and no output schema, the description covers the essential behavior: scope, ordering, return elements, and a critical filtering caveat. A small gap is that pagination behavior isn't explicitly tied to limit/offset, though the schema defaults mitigate that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% because projectId is the only parameter with a description. The description adds no detail for limit or offset, leaving their semantics entirely to schema names and defaults, so it fails to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly identifies a specific verb+resource: lists pending_review drafts for a project, newest first. It distinguishes itself from sibling tools like list_documents and discard_drafts by scoping to the draft review workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: the tool is the drafts-listing entry point, and it explicitly instructs how to handle doNotContact rows — discard them because sending is blocked. It doesn't name alternatives or when-not-to-use scenarios, so it doesn't earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_master_documentsB
List all available master documents (templates, guidelines, frameworks).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'List all available master documents', implying a read-only operation but never explicitly stating safety, output format, or side effects. The phrase 'all available' adds scope but not enough 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that immediately states the action and object, followed by a clarifying parenthesis. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema list tool, the description is minimally viable. It tells what is listed and what qualifies as a master document, but it omits any mention of the return structure, potential volume, or distinction from closely related sibling tools like 'list_documents' and 'get_master_document'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially 100% covered. The description adds useful domain context about what counts as a master document, but since there are no parameters to describe, a baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('List') and a specific resource ('master documents'), with a parenthetical clarifying the resource as templates, guidelines, and frameworks. It is unambiguous in what it does, but it does not explicitly differentiate from the sibling tool 'list_documents', leaving potential confusion about when to use which.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not mention when to use this tool versus alternatives like 'list_documents' or 'get_master_document', nor does it give any contextual prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_message_variantsA
List the project's message-angle variants. Reports the active / archived counts, then the variants as JSON — [{ variantId, subjectPattern, bodyApproach, label, archivedAt, … }] ordered by createdAt asc.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses meaningful behavior: it reports active/archived counts, then returns variants as a JSON array with specific fields and ordering by createdAt asc. It does not discuss auth or rate limits, but for a simple read-only list the disclosed behavior is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence: it states the purpose first and then gives compact output details. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple one-parameter read tool with no output schema, and the description sufficiently compensates by specifying the output shape, fields, counts, and ordering. Any missing detail like empty-result behavior is minor for this tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the only parameter, projectId, with the description 'Project name or ID'. The tool description adds no additional parameter semantics beyond restating project scope, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a clear resource ('the project's message-angle variants'), and it distinguishes itself from sibling operations like upsert_message_variant and pick_message_variant by focusing on enumeration. The scope is explicit: project-level variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: this tool is for listing message-angle variants for a project. However, it does not explicitly state when to use it instead of pick_message_variant or upsert_message_variant, nor does it mention any exclusions or prerequisites beyond a projectId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_organizationsA
List tenant organizations with employee-size band and per-org prospect and project counts; do-not-contact organizations are marked [DNC].
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Substring search on name / domain | |
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the burden. 'List' implies a read-only operationcars, and it discloses output characteristics (employee-size band, counts, DNC marking). However, it doesn't explicitly state side-effect-free behavior or potential performance implications, but for a simple list it's adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence that's front-loaded with the action and resource, immediately followed by key output details. No fluff, easily scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool, the description captures the essential return values. It doesn't mention pagination exactly but the schema covers defaults. It doesn't discuss edge cases like empty results or performance, but overall it's adequate for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description doesn't explain the query parameter q's behavior beyond schema's 'substring' hint. It adds no context for limit/offset, which are self-explanatory. Since schema coverage is only 33%, the description should compensate but doesn't. The user isn't guided on how to filter or paginate effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact action ('List') and resource ('organizations'), plus what's included (employee-size band, counts, DNC marking). It clearly distinguishes from other list tools (e.g., list_projects) and conveys the scope (tenant-level).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (when you need an overview of organizations with counts and DNC status) but doesn't explicitly contrast with alternatives or state exclusions. It's clear enough for an agent to pick this for listing orgs, but doesn't mention not to use it for filtered prospect searches, for example.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_prospectsA
List a project's prospects with per-project status, priority, and matchReason. Unlike get_outbound_targets (reachable rows only), lists prospects in any status. Sorted by priority ascending, newest first within a rank.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Substring search on prospect name / contact name / organization name / domain | |
| limit | No | ||
| offset | No | ||
| status | No | Filter by per-project status | |
| priority | No | Filter by exact priority | |
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses sorting order (priority ascending, newest first within rank) and full status coverage, which are key behavioral traits. It does not mention read-only or pagination details, but 'list' implies non-mutating, and adding more might bloat the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, differentiation, and sorting. No fluff, key information front-loaded. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description compensates by naming key output fields (status, priority, matchReason) and conveying the filtering/sorting behavior. It lacks explicit mention of pagination default or search fields, but the schema covers those. For a list tool with moderate complexity, this is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description does not add extra meaning to parameters beyond what the schema already provides. The schema descriptions for q, status, priority, and projectId are informative; limit/offset are self-explanatory from names and bounds. The description's mention of status and priority refers to output fields, not parameter usage, so it adds limited semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists a project's prospects with status, priority, and matchReason. It explicitly distinguishes itself from get_outbound_targets, making its purpose and scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance by contrasting with get_outbound_targets: use this tool for prospects in any status, while the sibling lists reachable rows only. This clarifies when to choose one over the other.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
List all projects for the current user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It clearly implies a read-only operation but does not mention any side effects, authentication requirements, pagination, or whether the list includes all project details or just summaries. It is not misleading but lacks additional context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that states the action and scope with no superfluous words. It is front-loaded and to the point, earning a perfect score for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with no parameters and no output schema, the description covers the basic purpose but does not specify the return format, whether archived projects are included, or any ordering/filtering. It is minimally adequate but lacks completeness given that the agent has no other clues about the output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the description needs to explain no parameter semantics. It does mention the implicit scope 'current user' which defines the context of the operation. Since there are no parameters, a baseline of 4 is appropriate given the description adds the only relevant semantic detail (user scope).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all projects for the current user' clearly identifies the action (list), resource (projects), and scope (current user). It is distinct from sibling tools like delete_project or setup_project, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (when you need a list of projects), but it does not explicitly mention when not to use it or suggest alternatives from the sibling set. There is no guidance on how it differs from other list tools like list_documents or list_organizations, so the usage context is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_suggestionsA
List persisted suggestions for a project: id, kind, dedupeKey, title, body, command, status (open/dismissed/done), timestamps. Optional status filter.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by status | |
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It describes a read operation ('List persisted suggestions') and indicates it returns all suggestions by default, with an optional filter. It doesn't mention pagination, ordering, or whether deleted suggestions are included, but it is a simple read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is compact and front-loaded with the core purpose. It lists the fields and the optional filter with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple: two parameters, no output schema, and no nested objects. The description covers the purpose, fields, and filter. It is complete enough for an agent to know what to expect, though it could mention if there is a limit or ordering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: projectId and status are both described in the schema. The description adds that status filter is optional and lists the status values, but it doesn't add much beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists persisted suggestions for a project and enumerates the returned fields. It distinguishes itself from siblings like record_suggestion (which creates) and list_documents, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It indicates the optional status filter and implies it is for reading suggestions in a project context. However, it does not provide explicit when-to-use or when-not-to-use guidance versus other list tools, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tenant_prospectsA
List existing prospects across the entire tenant, excluding do-not-contact prospects. No pagination — results beyond limit are truncated.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Substring search on name / overview / industry / org name | |
| limit | No | ||
| industry | No | Exact-match industry filter | |
| excludeProjectId | No | Project name or ID — omit prospects already linked to this project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits: it excludes do-not-contact prospects and warns that results are truncated beyond the limit (no pagination). Since no annotations are provided, the description carries the full burden, and it covers the most important behaviors. It does not mention potential errors or response format, but these are not critical for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, succinct sentence that front-loads the main purpose and immediately follows with key behavior notes. It contains no redundant or extraneous information, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core aspects: purpose, tenant-wide scope, exclusion of do-not-contact, and truncation behavior. It does not explicitly mention the filter parameters, but those are fully defined in the schema, which the description complements. For a list function, this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters (q, limit, industry, excludeProjectId) have descriptions in the input schema, giving 100% schema coverage. The tool description itself adds no parameter-specific information, so it meets the baseline of 3 as per the rubric for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List existing prospects across the entire tenant, excluding do-not-contact prospects.' It specifies the verb (list), resource (prospects), scope (entire tenant), and exclusion criteria, leaving no ambiguity about the tool's primary purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating the scope and exclusions, and it provides a practical note about truncation ('No pagination — results beyond limit are truncated'), which guides users on setting limits. However, it does not explicitly contrast with alternative tools, though no direct alternatives for listing prospects exist among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pick_message_variantA
Pick an active message-angle variant for the project via a server-side weighted draw. Returns the drawn variant id, its subject pattern, its body approach (line absent when the variant has none), and label; NOT_FOUND when the project has no active variants.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project name or ID | |
| variantId | No | A specific active variant id to bypass the weighted draw; an unknown or archived id silently falls through to the draw. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since there are no annotations, the description carries the full burden and does well: it discloses the weighted draw, the bypass behavior, silent fallback on unknown/archived variant IDs, and the NOT_FOUND return. It also describes what is returned (variant id, subject pattern, body approach, label) and the subtlety that body line is absent when no body exists. This is transparent and helps the agent anticipate edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is information-dense but not overly long. It front-loads the primary purpose and packs important nuances (return values, NOT_FOUND, body line absence) into a compact form. It could be slightly improved by adding a comma after 'project' for readability, but it is still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 parameters (100% schema coverage) and no output schema, the description covers the input semantics and return value details well. It also handles an important edge case (NOT_FOUND) and explains the optional bypass parameter. The absence of an output schema is mitigated by the explicit return values. This is nearly 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters well (projectId as name/ID, variantId as specific active variant with pattern and fallback). The description adds the context of the weighted draw and the bypass semantics, which enriches the meaning of variantId. Since schema coverage is 100%, the description doesn't need to re-explain parameters but adds useful behavioral nuance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Pick') and resource ('active message-angle variant') and clearly explains the server-side weighted draw mechanism. It also explicitly notes the return values and the NOT_FOUND case, which distinguishes it from sibling tools like list_message_variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 you need to randomly select an active variant) and mentions the optional variantId to bypass the draw. It doesn't explicitly name alternatives or when not to use it, but the sibling tools (like list_message_variants) are distinct enough that the intended use is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_outreachA
Record an outreach log entry. status="sent" flips the prospect to "contacted" and stamps next_outreach_after = sentAt + noResponseRecycleDays so it recycles back into get_outbound_targets only after that window; status="failed" stamps the same window without marking the prospect contacted so it drops out of get_outbound_targets for it; status="pending_review" leaves the prospect unchanged but excludes it from get_outbound_targets while the draft is open. For form / SNS DM submissions, prefer record_outreach_with_inquiry.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| status | No | "sent" = delivered; "failed" = send error; "pending_review" = draft created. | sent |
| channel | Yes | ||
| subject | No | ||
| projectId | Yes | Project name or ID | |
| variantId | No | Message variant id from pick_message_variant. | |
| prospectId | Yes | ||
| errorMessage | No | Required when status="failed"; rejected when status="sent" or "pending_review". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries disclosure of side effects. It clearly explains that 'sent' flips prospect status to contacted, stamps next_outreach_after = sentAt + noResponseRecycleDays, and gates inclusion in get_outbound_targets; it also clarifies that 'failed' and 'pending_review' have distinct downstream consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is packed with necessary behavioral detail in a single coherent paragraph, with no filler or repetition. Every clause contributes either a status transition or an alternative-routing hint, and the final sentence intentionally steers the reader to the sibling when appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description covers all critical behavioral context: side effects, downstream target queues, recycle windows, prospect state changes, and channel-specific exceptions. This is sufficient for an agent to safely and correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 50% schema description coverage, the description compensates meaningfully by giving value-level semantics to 'status' and to the 'channel' such that form/SNS DM paths through the alternative tool. It does not explicitly describe body, subject, or prospectId in prose, but those are simpler text/integer fields and partially self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Record an outreach log entry', then defines behavioral distinctions for each status value. It distinguishes itself from record_outreach_with_inquiry by explicitly redirecting form/SNS DM submissions, which goes beyond vague purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the alternative tool: 'For form / SNS DM submissions, prefer record_outreach_with_inquiry.' The status walkthrough also gives implementable guidance for choosing between sent, failed, and pending_review based on intended state transitions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_outreach_with_inquiryA
Reserve an outreach log row for a form / SNS DM / platform channel before submission. Returns outreachLogId, status ("pre_send" in send mode, "pending_review" in draft mode), inquiryUrl, and finalBody — the body with the compliance footer (legal identity + opt-out line, plus an inquiry-landing URL line when inquiryLandingEnabled) appended; channel "platform" gets no footer (solicited in-platform message). The "pre_send" row must be resolved by update_outreach_status ("sent" / "failed"); a "pending_review" row needs no follow-up call. For email use send_email_and_record instead.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| channel | Yes | ||
| subject | No | ||
| projectId | Yes | Project name or ID | |
| variantId | No | Message variant id from pick_message_variant. | |
| prospectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses the returned fields, the two possible statuses based on mode, the requirement to resolve pre_send rows via update_outreach_status, the no-follow-up nature of pending_review, and the platform-channel footer exception.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single long sentence but is front-loaded with the core purpose and every clause adds substantive detail about behavior, return values, or follow-up requirements. It is dense rather than wasteful, though it could be broken into clearer sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and no annotations, the description does a good job explaining return values, status semantics, follow-up obligations, and footer behavior. It is not fully complete because it omits parameter semantics for several fields and does not mention error conditions or permissions, but it covers the most critical operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, so the description must compensate for undocumented parameters. It does add meaning for channel (platform gets no footer) and body (footer appended), but it does not explain subject, prospectId, or variantId beyond what the schema already provides, leaving a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Reserve an outreach log row for a form / SNS DM / platform channel before submission.' It clearly distinguishes this tool from send_email_and_record by explicitly stating that email should use the other tool, and it also conveys the unique pre-submission reservation role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: use before submission for form/SNS DM/platform channels, and explicitly directs email use to send_email_and_record instead. It does not explicitly contrast with the sibling record_outreach tool, so it misses a full when-not/alternatives comparison, but the provided guidance is still strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_responseA
Record a response (email reply, SNS DM, etc.) to an outreach; updates prospect status and marks do-not-contact. do_not_contact is forced on responseType=bounce, on rejectionFeedback opt-out reasons, and when the per-project rejection cycle cap (maxReapproachCycles) is reached — the cap also drops the recontact window so a would-be deferred becomes rejected. rejectionFeedback with wrong_timing/budget plus a recontact window sets status=deferred (next_outreach_after); a decision_maker_pointer auto-creates or updates a prospect, reported back as derived prospects.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | ||
| content | Yes | Response content | |
| sentiment | Yes | ||
| receivedAt | No | ||
| responseType | Yes | ||
| outreachLogId | Yes | ID of the outreach log this response is for | |
| markDoNotContact | No | Manual do_not_contact flag; bounces and rejectionFeedback opt-outs force it regardless. | |
| rejectionFeedback | No | Only valid when responseType="rejection". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full responsibility and excels by disclosing forced do_not_contact triggers (bounce, opt-out reasons, cap reached), cap-related recontact window behavior, and auto-creation of prospects via `decision_maker_pointer`. All significant side effects are transparently spelled out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence packs meaningful business logic, and the description is front-loaded with the core purpose. However, it is a dense single paragraph that could benefit from bullet points or breaks to improve scannability and comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the non-obvious conditional behaviors (bounce, cap, deferral, derived prospects) integral to using the tool correctly. Given no output schema, it stops short of describing return values or error handling, which is a minor gap given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, so the description must compensate, and it does thoroughly. It explains the meaning of `responseType` values (e.g., bounce forces DNC), the `rejectionFeedback` nuances (e.g., wrong_timing/budget leads to deferred status), and the role of `markDoNotContact` relative to forced behavior. This adds substantial value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Record a response (email reply, SNS DM, etc.) to an outreach' which identifies the action and resource, and it accurately distinguishes from related tools like `record_outreach` and `record_outreach_with_inquiry`. It also outlines primary side effects ('updates prospect status and marks do-not-contact'), making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use the tool and detailed conditional logic (e.g., 'rejectionFeedback with wrong_timing/budget plus a recontact window sets status=deferred'). However, it does not explicitly compare with alternatives or state when not to use it, such as for outbound outreach, which would elevate 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.
record_suggestionA
Persist an actionable suggestion for the user (surfaced in the Web UI dashboard). Reserve for actions only the user can perform. Upserts by kind + dedupeKey: refreshes an open suggestion, never resurrects a dismissed/done one — the confirmation reports id, status, and whether it was written or left untouched.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Rationale and expected payoff, markdown | |
| kind | Yes | Suggestion kind, lowercase kebab-case category | |
| title | Yes | Short headline shown in the Web UI | |
| command | Yes | Copy-runnable next action, e.g. a /leadace one-liner | |
| dedupeKey | Yes | Stable dedup key within the kind | |
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and addresses key behaviors: upsert semantics ('refreshes an open suggestion, never resurrects a dismissed/done one') and confirmation details (id, status, whether written or untouched). It does not cover permissions or side effects, but these are not critical for this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, followed by a concise explanation of key behaviors. Every clause adds necessary information—no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description covers the essential aspects: purpose, dedup behavior, and the nature of the confirmation response. It does not explain return structure in detail, but it indicates what the confirmation reports, which is adequate for a straightforward write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter clearly described. The description adds value by explaining that 'kind + dedupeKey' drive the upsert logic, which the schema alone does not convey. This complements the schema without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Persist an actionable suggestion for the user' with a specific verb and resource. It also differentiates from siblings like list_suggestions (read) and record_outreach (different resource) by noting the Web UI dashboard context and the 'user-only action' reservation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear usage criterion: 'Reserve for actions only the user can perform.' This tells the agent when to use it, distinguishing from system‑level actions. It does not explicitly name alternative tools, but the guidance is sufficient for the intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_bugA
File a bug, feedback, or idea about LeadAce. Daily-capped per tenant; over-cap returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | What you tried, what happened, what you expected. | |
| title | Yes | One-line summary. | |
| context | No | Suggested keys: skill, pluginVersion, projectId, prospectId, errorMessage. | |
| category | Yes | feedback = works but rough, not broken. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It does disclose a meaningful behavioral trait: the daily per-tenant cap and that exceeding it returns an error. However, it does not describe what happens on successful submission, expected response shape, or side effects, leaving notable gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the purpose and adds one crucial behavioral constraint. Every word contributes value, and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters, a nested object, and no output schema, this description provides the essential purpose and cap behavior but omits what the response looks like on success or failure. The schema fills in parameter details, so the description is adequate but not complete for an agent needing to interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides thorough descriptions for all four parameters, including enum meaning for category, suggested keys for context, and length constraints for title/body. The tool description adds no additional parameter-level semantics beyond the cap context, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: filing a bug, feedback, or idea about LeadAce. It uses a specific verb ('File') and identifies the resource, making the primary intent unambiguous. However, it does not explicitly differentiate from the sibling 'record_suggestion' tool, which may overlap in purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (for bug, feedback, or idea submissions about LeadAce) and adds a key usage constraint (daily cap, error over cap). It does not provide explicit when-not-to-use guidance or mention alternatives, leaving the usage context only implicit rather than fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_lever_tickC
Run the project's daily outbound-optimization tick: recompute the message-variant draw weights pick_message_variant reads (Thompson sampling over graded reward; archives variants whose P(best) stays below the threshold at maturity, never below two active), the discovery-strategy draw weights over the active registry (same Thompson math; archives dominated strategies, never below two active), the per-industry channel affinity get_outbound_targets surfaces, and the measured targeting lifts (industry / size / country / discovery strategy / fresh signal) that re-score the get_outbound_targets ordering. After a sustained flat streak (every arm mature yet none likely best) it rotates out the weakest variant to free a slot for a fresh angle. Idempotent per UTC day — a repeat call returns that day's recorded decision without re-applying. Returns variant weights and archived variants (a stagnation rotation is marked as such), strategy weights and archived strategies, channelAffinity by industry bucket, targeting lifts, the futility vitals verdict (ok / insufficient / futile over recent mature email sends — futile means outreach is statistically drawing no replies and belongs in the cycle report; it clears on its own once recent sends draw replies again), and the live needsReplenishment / needsStrategyReplenishment flags (recomputed each call, not the frozen recorded value).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for transparency. It discloses idempotency, return values (variant weights, archived variants), and flags (needsReplenishment), but the convoluted phrasing makes these behaviors less transparent than they could be.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, extremely long sentence with repetitive jargon and unclear clause boundaries. It is not concise and would benefit from breaking into structured points, but it does at least follow a logical order of operations and return values.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers core aspects: what the tool does, idempotency, and return values. However, the dense and repetitive language obscures some details, and the lack of an output schema adds burden, making it only moderately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides a description for projectId ('Project name or ID'), achieving 100% coverage. The tool description does not add further semantic detail beyond reinforcing that it operates on a project, so the baseline of 3 is maintained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Run the project's daily outbound-optimization tick' and elaborates on the actions performed. It differentiates from siblings by focusing on the daily optimization routine, though the verbose explanation slightly obscures the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions idempotency per UTC day, implying it should be run once daily, but does not explicitly state when to use this tool versus alternatives. No comparative guidance is provided, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_documentA
Save a project document by slug as a new immutable version; prior versions preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Document slug: "business", "sales_strategy", "search_notes", "learnings", or "playbook_<strategy-slug>" | |
| content | Yes | Full markdown content of the document | |
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the immutability and versioning behavior, which is critical for an agent to understand the side effects. However, it doesn't mention any permissions or error conditions, but the core behavioral trait is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action and key behavior. Every word adds value, and it is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 params, no output schema), the description covers the essential behavior (immutable versioning) and the schema covers parameters. It could mention what happens on success (e.g., returns version info) but that is not required since no output schema exists. The description is complete enough for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds the context that content is full markdown and slug has specific allowed values, but these are already in the schema. The description doesn't add significant extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (save a project document by slug), the resource (project document), and the key behavior (creates a new immutable version, preserving prior versions). It distinguishes from siblings like get_document and list_documents by focusing on the save operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (when you need to save a document version) but does not explicitly state when not to use or mention alternatives. It doesn't clarify if this is for creating new documents or only updating existing ones, which could be ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailA
Sends an email via the connected Gmail account without recording an outreach log; returns Gmail messageId/threadId. For prospect outreach use send_email_and_record instead.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | ||
| bcc | No | ||
| body | Yes | ||
| subject | Yes | ||
| inReplyTo | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden of behavioral disclosure. It clearly states the side-effecting send behavior, the connected Gmail account, the lack of logging, and the returned identifier. It does not mention auth prerequisites or possible delivery failures, but the core behavioral contract is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the action and important distinction, restates the logging trade-off, gives the return value, and points to the sibling tool for an alternative use case.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a side-effecting email tool with no output schema, and the description covers the essential output identifiers. It is somewhat limited by the lack of parameter semantics, but for an otherwise standard 6-parameter email call, the situational context is easy for an agent to grasp.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no parameter-level meaning. While names like to, cc, and bcc are conventional, the description does not clarify inReplyTo usage, message body formatting, or how the parameters relate to the Gmail API request.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and resource: 'Sends an email via the connected Gmail account', and immediately distinguishes itself from send_email_and_record with the 'without recording an outreach log' trait. It also states the return value, which further clarifies the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit alternatives and exclusions: 'For prospect outreach use send_email_and_record instead.' This tells an agent exactly when not to use the tool and names the preferred sibling, which is strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_email_and_recordA
Sends a prospect email to the address stored on the prospect and records the outreach log in one call; project outboundMode decides send vs a pending_review draft. Reports whether it sent or drafted, the outreach id, and on a send the From address the project's sending mailbox used.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| subject | Yes | ||
| projectId | Yes | Project name or ID | |
| variantId | No | Message variant id from pick_message_variant | |
| prospectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly discloses side effects (email send, outreach log) and conditional behavior based on outboundMode. It also discloses the return information (sent/drafted status, From address on send). It omits potential failure modes or authorization requirements, but for a typical send+record tool, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence. It front-loads the primary action ('Sends... records') and then adds critical behavioral conditions (outboundMode) and return values. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the tool's purpose, the conditional behavior (send vs draft), and the return information (status, id, From address). It doesn't detail error cases or prerequisites (like mailbox setup), but it is sufficient for common usage. It also differentiates from siblings like send_email and record_outreach by emphasizing the combined one-call action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers only 2 of 5 parameters (projectId and variantId have descriptions). The tool description does not explicitly explain the parameters, but it implies prospectId is used to resolve the email address and subject/body are the email content. It adds some semantic context (e.g., 'address stored on the prospect') but doesn't fully compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Sends a prospect email... and records the outreach log') and specifies the resource (prospect email and outreach log). It distinguishes from sibling tools like send_email and record_outreach by emphasizing the combined one-call behavior, and notes outboundMode conditional behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the tool is used to both send and record in one call, implying when to use it. It also mentions the outboundMode condition, which gives context on when it sends vs. drafts. However, it does not explicitly exclude alternatives like using send_email and record_outreach separately, or mention when to choose this over other siblings like record_outreach_with_inquiry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_prospect_do_not_contactA
Set the do_not_contact flag on a tenant prospect. DNC prospects are excluded from re-discovery and outbound targeting.
| Name | Required | Description | Default |
|---|---|---|---|
| prospectId | Yes | ||
| doNotContact | Yes | false clears an existing flag. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry transparency. It explains the behavioral consequence (exclusion from re-discovery and outbound targeting) but does not disclose that setting the flag to false clears it, nor any auth requirements or side effects beyond the targeting effect. Partial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the action and then the consequence. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool, the description covers the main effect but does not explain what happens when doNotContact is false (though schema does), nor any error conditions or permissions. It's adequate but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (only doNotContact has a description). The tool description clarifies that the prospect is a 'tenant prospect', giving some meaning to prospectId, but does not elaborate further. It doesn't add details about doNotContact beyond the schema. Overall, marginal additional value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set the do_not_contact flag') and the target ('on a tenant prospect'), and explains the consequence (excluded from re-discovery and outbound targeting). This is specific and distinguishes the tool's purpose from siblings like 'skip_prospect'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on the effect of setting the flag (exclusion from re-discovery and targeting), implying usage when exclusion is desired, but it does not explicitly mention alternatives or when not to use it. This is an implied rather than explicit guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_prospect_priorityA
Set one prospect's outreach priority (1=highest) within a project. Per-prospect operator override applied regardless of the prospect's status; measured targeting outranks priority in the outbound ordering once data accrues. Read the current value via list_project_prospects or get_outbound_targets.
| Name | Required | Description | Default |
|---|---|---|---|
| priority | Yes | ||
| projectId | Yes | Project name or ID | |
| prospectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It explains the priority scale, that the value is a per-prospect operator override independent of status, that measured targeting outranks priority after data accrues, and how to read the current value. This goes well beyond a basic 'sets priority' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded, and every sentence earns its place: first defines the operation, second provides key semantic behavior, third tells the agent how to verify the result. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple setter with three required parameters and no output schema, this description is reasonably complete. It covers the tool's effect, priority ordering nuance, and a readback path. It could still mention whether the value is permanent or reversible, but this is not a major gap given the tool kind.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (33%), but the description compensates partly by defining the priority meaning ('1=highest') and clarifying that prospectId refers to one prospect within a project. The projectId parameter already has the schema description 'Project name or ID', while prospectId is left mostly to inference, so the compensation is incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Set one prospect's outreach priority (1=highest) within a project.' It clearly differentiates from sibling tools like update_prospect or set_prospect_do_not_contact by focusing specifically on outreach priority.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the intended use case by naming the operation and explicitly points to read tools (list_project_prospects, get_outbound_targets) for verification. However, it does not explicitly state when to prefer this over related setter tools such as update_prospect_status or set_prospect_do_not_contact.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_projectA
Create a new LeadAce project; returns the auto-generated project id. Errors if the plan project limit is reached.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Project name (unique per tenant). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that creation fails if the plan limit is reached, which is useful. However, it does not mention whether the operation is idempotent, what happens if the name already exists (though unique per tenant implies an error), or any authorization requirements, leaving gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that conveys the action, output, and error condition without redundancy. Every word adds value, making it highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one required parameter, no output schema, no nested objects), the description sufficiently covers the core aspects. It provides the essential error condition and output, which is adequate for a simple creation tool, though it could mention potential errors like duplicate names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage, describing 'name' as 'Project name (unique per tenant).' The description adds no extra semantics beyond the schema, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (create a new LeadAce project) and the specific resource (project). It also mentions the unique output (auto-generated project id) and a key failure condition (plan limit). This distinguishes it from siblings like delete_project and list_projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It is evident this tool is for the initial creation of a project, contrasting with management tools like update_project_settings. It does not explicitly state when not to use it, but the context is clear since it's the only creation tool among its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skip_prospectA
Record a deliberate skip of a prospect on this outbound run — no send is attempted. Writes a "skipped" audit row and stamps next_outreach_after = sentAt + noResponseRecycleDays so the prospect drops out of get_outbound_targets for that window; no quota is consumed and the prospect is NOT marked contacted. Not for unsupported-country prospects — get_outbound_targets already filters those server-side.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | One-line context shown in the recent-outreach feed. | |
| reason | Yes | ||
| channel | Yes | The channel the run was about to use. | |
| projectId | Yes | Project name or ID | |
| prospectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and exceeds expectations: it details the audit row write, the exact stamping formula (next_outreach_after = sentAt + noResponseRecycleDays), the effect on get_outbound_targets queries, plus explicit non-effects (no quota consumed, not marked contacted). This is model-level transparency for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences with zero filler. Every clause earns its place: the purpose, the side effects, the system interaction, and the key exclusion. Front-loaded with the action verb and clear object, the description delivers a full behavioral contract in under 60 words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity 5-parameter tool with no output schema, the description covers all essential facets: purpose, side effects (audit row), state mutation (next_outreach_after stamp), temporal behavior (window), non-effects (no quota/contact), and edge-case exclusion (unsupported countries). Returning the skipped prospect's updated state or error semantics would be nice-to-have context, but nothing critical is missing—especially given the strong schema coverage on the more complex parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 60% schema coverage, the schema already documents projectId, channel, and note reasonably well. The description alludes to domain concepts (noResponseRecycleDays, get_outbound_targets) that help the agent understand the tool's effect without fully mapping to individual parameters, but it doesn't add meaningfully beyond the schema—which is a fair trade given the existing annotation quality.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb-phrase 'Record a deliberate skip' immediately followed by the resource ('a prospect on this outbound run') and a clear boundary ('no send is attempted'). It differentiates from siblings by explicitly stating 'no quota is consumed and the prospect is NOT marked contacted,' distinguishing it from record_outreach, while the one-window impact differentiates it from permanent actions like set_prospect_do_not_contact or delete_prospects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit when-not-to-use exclusion: 'Not for unsupported-country prospects — get_outbound_targets already filters those server-side,' which both names a sibling and explains why skip is unnecessary in that case. It lacks an explicit 'use alternative X for case Y' statement, but the behavioral framing (drops out of get_outbound_targets for that window) clearly implies when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_organizationA
Partial-update an organization's name, website URL, employeeBand, or doNotContact; domain is immutable. organizationId is the PK returned in the organizationId field of list_tenant_prospects / list_project_prospects / get_outbound_targets, not a domain.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | At least one required. | |
| organizationId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It mentions 'partial-update' (indicating only provided fields change) and 'domain is immutable', adding transparency. It also clarifies the nature of organizationId. While it does not detail side effects like permission requirements or response format, it provides meaningful context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently communicates the action, target fields, and the critical constraint about domain immutability. Every clause earns its place with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a patch operation with a nested object and no output schema, the description covers the key aspects: partial update behavior, immutable fields, and ID provenance. It relies on the schema for doNotContact semantics. It does not mention error cases or authorization, but those are less critical given the concise and clear description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds value by explaining that organizationId is the primary key from specific list endpoints, not a domain, and by enumerating the updateable fields. Since schema coverage is 50% (only patch and doNotContact have descriptions), the description compensates for missing details on name, websiteUrl, and employeeBand, though it does not elaborate on their constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a partial update on an organization, listing specific mutable fields (name, website URL, employeeBand, doNotContact) and noting that domain is immutable. This distinguishes it from sibling tools like create_organization or delete_organizations, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (to modify an organization's mutable fields) and explicitly notes that domain cannot be changed. It also clarifies that organizationId is the PK from specific list methods, not a domain, which prevents common misuse. However, it does not explicitly contrast with other update tools or state prerequisites beyond the ID source.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_outreach_statusA
Resolve the "pre_send" outreach log row from record_outreach_with_inquiry. Both terminal transitions stamp next_outreach_after = sentAt + noResponseRecycleDays, dropping the prospect from get_outbound_targets for that window: status="sent" also flips the prospect to "contacted", confirms quota consumption, and advances the follow-up sequence; status="failed" refunds the in-flight quota reservation. Only the "pre_send" → terminal transition is accepted.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | "sent" = submit succeeded; "failed" = submit failed. | |
| errorMessage | No | Required when status="failed". | |
| outreachLogId | Yes | outreachLogs.id from record_outreach_with_inquiry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for disclosing behavior. It does describe side effects (stamping next_outreach_after, dropping the prospect from get_outbound_targets, refunding quota, flipping status, confirming quota), but it omits key behaviors such as idempotency, error conditions, and whether changes are reversible. For a mutating tool, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph. It front-loads the core action and then provides necessary detail about consequences. It is not excessively long, but could be broken into bullet points for readability. Still, each sentence serves a purpose and there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple side effects, state transitions), the description covers most critical points: allowed transitions, effects of each status, and the timing of next_outreach_after. It does not mention error handling or idempotency, and there is no output schema. Overall, it is sufficiently complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds semantic context by linking the status parameter to its consequences ('sent' flips prospect status, 'failed' refunds quota), which goes beyond the schema's basic descriptions. It doesn't add syntax details, but the schema is thorough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to resolve a 'pre_send' outreach log row into one of two terminal states ('sent' or 'failed'). It names the exact source tool (record_outreach_with_inquiry) and the specific state transition, distinguishing it from sibling tools like record_outreach and update_prospect_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: it explains that this tool follows record_outreach_with_inquiry)Skip_prospect, and it clarifies that only the 'pre_send' → terminal transition is accepted. It also outlines the effects of each status choice, giving clear when-to-use context versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_project_settingsA
Update user-editable project settings. Any omitted field keeps its current value. Pass null to clear nullable fields.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project name or ID | |
| outboundMode | No | "send" sends immediately; "draft" stores as reviewable LeadAce drafts instead of sending. | |
| inquiryCtaUrl | No | CTA URL, https:// only. For inquiryCtaType="meeting": optional scheduling URL — when null the meeting button is notify-only. For inquiryCtaType="signup": the signup page URL, required. | |
| inquiryPdfUrl | No | Public URL for the "download PDF" button on the landing page. https:// only. | |
| footerOverride | No | Custom footer replacing the default compliance footer VERBATIM on every outbound message (email, and form / SNS draft text) — when set, it must itself carry the "---" separator and the legally required disclosures. null restores the default. Mutually exclusive with inquiryLandingEnabled (400). | |
| inquiryCtaType | No | Landing CTA mode. "meeting" (default): Book/Request meeting button, inquiryCtaUrl optional (scheduling URL). "signup": Sign up button redirecting to inquiryCtaUrl, which is required in this mode. | |
| senderJobTitle | No | Job title / role shown alongside senderDisplayName on the inquiry-landing header. No-op when senderDisplayName is null. | |
| targetLanguage | No | Language of this project's outbound messages (default "en"): sets the compliance-footer / identity localization and the language outbound subjects and bodies are written in. Independent of targetCountries; recipient-facing web pages (inquiry landing, unsubscribe) follow the visitor's browser language instead. | |
| inquiryOneLiner | No | Single-sentence value prop shown above the chat input on the landing page. | |
| inquiryVideoUrl | No | YouTube/Vimeo unlisted video URL embedded on the landing page. https:// only. | |
| targetCountries | No | Country codes that further narrow the compliance-level send allowlist. Empty array (default) = no project-level restriction; non-empty = explicit allowlist. | |
| followUpSequence | No | Follow-up sequence for unanswered prospects. gapDays = relative waits in DAYS before each next touch (default [3,7,7]). Whole-object replace: omitting `enabled` sets it false, disabling follow-ups AND clearing in-progress sequences — pass enabled:true explicitly to keep them on while changing cadence. | |
| inquiryChatBrief | No | Briefing for the inquiry-landing chat agent. null disables chat input but keeps the rest of the landing page rendering. | |
| outboundChannels | No | Channels the project is allowed to use for outbound. Default: email, form, sns_twitter, sns_linkedin — "platform" must be enabled explicitly. Empty array pauses automated outbound (manual per-draft send still works). | |
| senderEmailAlias | No | Gmail Send-As alias to use as From: address. null = primary Gmail. Ignored when the project sends from a custom SMTP mailbox. | |
| inquiryBrandColor | No | Landing-page accent color. | |
| senderCompanyName | No | Company / brand name shown to recipients on the inquiry landing. Distinct from the compliance-footer legal name and the internal workspace name. null omits it. | |
| senderDisplayName | No | Personal name shown as the email From: display name and on the inquiry-landing header. | |
| unsubscribeEnabled | No | Attach the RFC 8058 List-Unsubscribe one-click headers to outbound email. | |
| inquiryBrandLogoUrl | No | Public URL for the brand logo shown on the landing page. https:// only. | |
| maxReapproachCycles | No | Hard cap on rejection cycles before forcing rejected + DNC. Default 3. | |
| inquiryDarkBackground | No | Landing background mode: false = light (default), true = dark. | |
| inquiryLandingEnabled | No | When true, outbound emails include an inquiry-landing URL footer that hosts a per-recipient AI chat, meeting-request button, and unsubscribe-with-reason flow. | |
| noResponseRecycleDays | No | Days after a sent outreach before the prospect is re-eligible if no response arrived. Default 90. Only advances the re-eligibility window forward, never shortens a longer existing deferral (e.g. a rejection-feedback 12-month window). | |
| unspecifiedRecontactWindowMonths | No | Months to defer when rejection feedback preferred_recontact_window is "unspecified". Default 3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses key partial-update semantics ('Any omitted field keeps its current value') and null-clearing behavior, which is valuable. However, it does not mention return values, error conditions, or side effects beyond what the schema already describes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main purpose, and zero unnecessary words. The description is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity (25 params, nested objects, no output schema, no annotations), the description is minimal. It covers core update semantics but omits return-value behavior and any high-level caution about interactions (though schema descriptions cover many). Leveraging the rich schema, it is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 a universal patch semantic (omitted equals keep, null clears) that applies to all 25 parameters, which is not repeated in each schema property. This adds value beyond the structured schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update') and the resource ('user-editable project settings'). It distinguishes from siblings like get_project_settings (read) and update_organization/update_tenant_settings (different scopes) by specifying project-level settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope is implied by 'project settings', but there is no explicit guidance on when to use this tool versus update_organization or update_tenant_settings. Given the sibling list includes several update tools, explicit alternative naming would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_prospectA
Partial-update a tenant prospect's fields. UNPROCESSABLE if the patch would leave no contact channel (email, contactFormUrl, an snsAccounts entry, or platformUrl); CONFLICT if email, contactFormUrl, or platformUrl already belongs to another prospect in the workspace. Changing email resets its deliverability verdict and queues a background re-check. Per-project status via update_prospect_status, priority via set_prospect_priority, DNC via set_prospect_do_not_contact.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | Omit a key to leave it unchanged; pass null to clear a nullable field. | |
| prospectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses partial-update semantics, uniqueness conflicts, the no-contact-channel constraint, and the side effect that changing email resets its deliverability verdict and queues a background re-check. These details go well beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and every clause delivers useful information—constraints, conflict behavior, side effects, and explicit alternatives. There is no filler or wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex partial-update tool with a nested patch object, no annotations, and no output schema, the description is remarkably complete: it covers error states, uniqueness rules, side effects, null-clear behavior via the schema, and sibling-tool routing. An agent can confidently select and invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context beyond the schema, especially around conflict behavior and email reset side effects. The schema itself already documents omit/null patch semantics, so the description need not repeat every field; it compensates for the 50% schema coverage with the most critical behavioral constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Partial-update a tenant prospect's fields.' It also distinguishes itself from sibling tools by naming update_prospect_status, set_prospect_priority, and set_prospect_do_not_contact for related but separate concerns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use alternative tools: 'Per-project status via update_prospect_status, priority via set_prospect_priority, DNC via set_prospect_do_not_contact.' It also communicates invalid-patch conditions through UNPROCESSABLE and CONFLICT error semantics, helping the agent decide whether the tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_prospect_statusA
Update a prospect's status within a project. Setting 'new' is rejected while the prospect has sent outreach in that project.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| projectId | Yes | Project name or ID | |
| prospectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden and it discloses a meaningful non-obvious behavior: setting status to 'new' is rejected if the prospect has already received outreach in that project. It does not cover authorization or side effects, but the rejection rule is valuable and reduces surprise for agents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The main purpose is front-loaded, and the critical behavioral caveat is added immediately after, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter update operation, the description gives the core purpose and a key constraint. It does not explain return behavior or parameter meanings in depth, but the tool complexity is low and the provided information covers the main workflow gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only projectId is documented). The description adds meaning only for the 'new' status value and does not explain the other enum values or the prospectId parameter, leaving significant semantic gaps for a low-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('update') and clearly identifies the resource ('a prospect's status within a project'). This distinguishes it from sibling tools like update_prospect, which is broader, and update_outreach_status, which focuses on outreach rather than prospect status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its use case by scoping status changes to a project and highlights a special condition when 'new' is rejected. However, it does not explicitly state when to use this tool instead of alternatives such as update_prospect, update_outreach_status, or set_prospect_priority, nor does it mention when it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tenant_settingsA
Updates workspace identity/compliance fields; only the keys passed are written (merge, not replace). legalName, physicalAddress, defaultSenderCountry gate outbound: send tools refuse (412) until all are set. defaultSenderCountry is the sender's own country, separate from recipient targeting and message language.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Workspace display name (internal label). | |
| legalName | No | Registered business name shown in the email compliance footer. | |
| physicalAddress | No | Postal address shown in the email compliance footer. | |
| defaultSenderCountry | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the merge-not-replace behavior and the gating condition for outbound sends, which is essential for safe use. It also clarifies the semantics of defaultSenderCountry. However, it does not mention permission requirements or other side effects, so it's not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with three sentences that each add value: the first states the operation and merge semantics, the second warns about gating, and the third clarifies a specific parameter's meaning. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a settings update tool with no required parameters and no output schema, the description covers all key aspects: what fields are affected, the merge behavior, the gating condition, and the special meaning of defaultSenderCountry. It is sufficient for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 75% of parameters with descriptions, but the description adds critical context by explaining the merge behavior and explicitly detailing the meaning of defaultSenderCountry, which lacks a schema description. This goes beyond the schema's pattern constraint to clarify its role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates workspace identity/compliance fields, with a specific verb and resource. It also explains the merge behavior (only keys passed are written), distinguishing it from a replace operation. This sets it apart from get_tenant_settings or update_organization.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides practical context by explaining that legalName, physicalAddress, and defaultSenderCountry gate outbound sends (412) until all are set. It also clarifies that defaultSenderCountry is separate from recipient targeting. This gives clear guidance on when these settings matter, though it doesn't explicitly name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_discovery_strategyA
Register or update a discovery strategy — the named prospect-search arm /build-list executes and add_prospects stamps for per-strategy reply attribution. Idempotent by slug: re-calling updates the approach, and any call without archived=true lands the strategy active (re-registering an archived slug revives it). archived=true retires it from registration while keeping historic attribution. Refused (400) when it would push the active count past the project's cap.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Kebab-case arm id, stable for life — renaming orphans its measured history. | |
| approach | Yes | Where/how to search and why it should work (2-5 lines). Platform-specific procedures belong in the playbook_<slug> document, not here. | |
| archived | No | true archives; omit or false lands the strategy active. | |
| projectId | Yes | Project name or ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so excellently. It discloses idempotency by slug, update behavior, archive/revive semantics, activation default, and the 400 refusal on exceeding the cap—providing thorough transparency beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph that front-loads the core purpose, then sequentially explains idempotency, archive behavior, and the cap constraint. Every sentence provides necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description fully explains the tool's behavior, including edge cases (revival of archived slugs) and failure conditions (400 on cap). It covers all aspects needed for correct invocation despite the absence of structured hints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, giving a baseline of 3. The description adds significant extra meaning for 'slug' (stable for life, renaming orphans history) and 'approach' (2-5 lines, playbook referral), enriching the parameter understanding beyond raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Register or update a discovery strategy' with a clear resource. It also distinguishes the tool by referencing how it relates to '/build-list' and 'add_prospects', making its purpose unique among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when the tool is used (create/update a discovery strategy) and includes critical usage nuances (idempotency, archive behavior, revival, and the cap refusal). However, it does not explicitly name alternatives or state when not to use it, so it falls short of the 'explicit when-not/alternatives' criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_message_variantA
Register or update a message-angle variant (subject pattern + optional body approach) on a project. Idempotent by variantId — re-calling updates that variant's fields / archived state. archived=true retires it from rotation but keeps it analysable for historic outreach rows. Refused (400) when it would push the active count past the project's cap.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Human-readable display label; null clears it. | |
| archived | No | Omit to leave the archived state unchanged; false un-archives. | |
| projectId | Yes | Project name or ID | |
| variantId | Yes | ||
| bodyApproach | No | Angle brief (2-5 lines: structure / tone / CTA type / length / opener policy) the body is written from; null clears it, leaving the email guidelines alone to shape the body. | |
| subjectPattern | Yes | Subject template; may embed {{placeholders}} substituted at send time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It transparently explains idempotency, the effect of archived=true, and the 400 refusal on exceeding the cap. It does not cover authentication or rate limits, but the core side effects are disclosed well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action, and every sentence adds essential behavioral information (idempotency, archival semantics, cap enforcement). No redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema or annotations, the description covers key behavioral aspects: idempotent updates, archived state handling, and 400 on cap. It lacks explicit mention of return values or authentication/rate limits, but for an upsert tool with rich parameter descriptions, it is sufficiently complete. Minor gap: no explicit 'when to use' exclusions, but the CRUD context is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83% (5 of 6 properties have descriptions), so the schema already documents each parameter. The description adds broader context (how archived affects rotation, why some params are null, the purpose of bodyApproach), though it doesn't detail each parameter beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Register or update a message-angle variant' with specifics on idempotency, archived state, and cap enforcement. It distinguishes itself from sibling tools like list_message_variants and pick_message_variants by focusing on creation/update behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 the tool (when registering or updating a variant) and explains the 400 error condition for cap violations, but does not explicitly contrast with alternatives like pick_message_variant or when not to use it. It gives enough behavioral guidance for an agent to select appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
55 tool updates
v0.7.54- First observed
add_prospects - First observed
check_prospect_dedup - First observed
create_organization - First observed
delete_organizations - First observed
delete_project - First observed
delete_prospects - First observed
discard_drafts - First observed
get_compliance_status - First observed
get_document - First observed
get_eval_data - First observed
get_gmail_status - First observed
get_lever_decisions - First observed
get_lever_state - First observed
get_mailbox_health - First observed
get_master_document - First observed
get_outbound_targets - First observed
get_project_settings - First observed
get_recent_outreach - First observed
get_rejection_feedback_summary - First observed
get_server_version - First observed
get_tenant_settings - First observed
import_prospects_from_csv - First observed
link_existing_prospects_to_project - First observed
list_country_codes - First observed
list_documents - First observed
list_drafts - First observed
list_master_documents - First observed
list_message_variants - First observed
list_organizations - First observed
list_project_prospects - First observed
list_projects - First observed
list_suggestions - First observed
list_tenant_prospects - First observed
pick_message_variant - First observed
record_outreach - First observed
record_outreach_with_inquiry - First observed
record_response - First observed
record_suggestion - First observed
report_bug - First observed
run_lever_tick - First observed
save_document - First observed
send_email - First observed
send_email_and_record - First observed
set_prospect_do_not_contact - First observed
set_prospect_priority - First observed
setup_project - First observed
skip_prospect - First observed
update_organization - First observed
update_outreach_status - First observed
update_project_settings - First observed
update_prospect - First observed
update_prospect_status - First observed
update_tenant_settings - First observed
upsert_discovery_strategy - First observed
upsert_message_variant
TDQS
Most tools target distinct resources and actions, but several outreach-logging and prospect-registration paths overlap: record_outreach, record_outreach_with_inquiry, send_email_and_record, and update_outreach_status all write or resolve outreach state, while add_prospects and import_prospects_from_csv are both batch-registration entry points. The descriptions do distinguish the intended use cases, but the boundaries are not immediately obvious from tool names alone.
The tool set is overwhelmingly consistent: snake_case verb_noun names like list_projects, delete_prospects, and update_project_settings are predictable. Minor inconsistencies remain — setup_project versus create_organization, upsert_* rather than create/update, and send_email_and_record rather than record_* — but none of these are confusing enough to significantly impair agent navigation.
With 55 tools, LeadAce is well beyond the heavy range and presents a large selection surface for an agent. The scope is genuinely broad, covering projects, prospects, organizations, outreach, compliance, optimization, documents, and suggestions, but this volume would be better split across multiple focused MCP servers.
Core workflows are covered: prospect import, project setup, outreach sending, response logging, and evaluation are all present. Notable gaps remain though, including no get_project by ID, no way to unlink a prospect from a project after linking it, and no delete operation for documents or master documents. These force workarounds and leave some lifecycle paths incomplete.
Maintenance
Related MCP Connectors
Cold email infrastructure — campaigns, prospects, mailbox health and replies via Claude.
LinkedIn outreach MCP server — 19 tools for AI agents to prospect, sequence, and manage contacts.
Coldrig — cold-email infra run by your agent: 28 MCP tools, live sending, free sandbox. $99/mo.
Human-in-the-loop LinkedIn outreach and a built-in sales CRM for AI agents. Safety-gated, anti-spam.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceSales Intelligence · B2B Lead Extraction An MCP (Model Context Protocol) server that gives AI agents structured B2B lead intelligence extracted directly from company websites. Point it at any URL and get back a clean JSON object — company summary, buying signals, inferred needs, and personalised icebreaker lines — ready to drop into your outreach pipeline. Built for agent pipelines. Works with Cl1MIT
- AlicenseAqualityDmaintenanceAI client acquisition autopilot. 15 MCP tools for LinkedIn, Email, X, Instagram & Blog outreach from Claude.1416MIT
- FlicenseNot gradedqualityCmaintenanceArgorant MCP Server — give your AI agent direct access to 614M verified B2B contacts. Query by industry, role, geography, and 100+ filters, then export emails verified by a live SMTP probe at request time (catch-alls flagged, invalids free). OAuth-secured. Works with Claude, ChatGPT, Cursor, and any MCP client. Endpoint: https://mcp.argorant.com/mcp1-
- FlicenseNot gradedqualityDmaintenanceA free MCP server that runs a full B2B outbound pipeline inside a Claude conversation, enabling lead scraping, Google Sheets integration, and Instantly campaign creation.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/aitit-inc/leadace'
If you have feedback or need assistance with the MCP directory API, please join our Discord server