OutreachPilot MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OutreachPilot MCP ServerBuild a 3-step email campaign"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OutreachPilot MCP Server
The official Model Context Protocol (MCP) server for OutreachPilot โ AI-Powered Sales Outreach Platform.
Connect your AI agents โ Claude Desktop, Cursor, LangChain, CrewAI, or any MCP-compatible client โ directly to your OutreachPilot workspace to automate outreach, research leads, manage campaigns, and much more.
OutreachPilot replaces your entire sales stack (Apollo, Instantly, Expandi) with one AI-powered platform. It combines AI SDR automation, multi-channel outreach (email, LinkedIn, SMS, phone), live prospect research, and autonomous AI reply handling that books meetings 24/7.
๐ API & MCP Documentation ยท ๐ Sales Outreach Blog ยท ๐งฎ ROI Calculator
Requirements
Node.js โฅ 18
An active OutreachPilot Pro or Scale workspace
An API key (generate one in Settings โ Workspace โ API Keys)
Related MCP server: sales-intelligence
Quick Start
Option A: npx (recommended โ zero install)
No download needed. Just configure your MCP client:
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"outreachpilot": {
"command": "npx",
"args": ["-y", "outreachpilot-mcp"],
"env": {
"OUTREACHPILOT_API_KEY": "op_live_your_key_here",
"OUTREACHPILOT_API_URL": "https://useoutreachpilot.com"
}
}
}
}Restart Claude Desktop โ done. โ
Option B: Manual install (for development)
git clone https://github.com/emielmadonna/OutreachPilotMCP.git
cd OutreachPilotMCP
npm installCreate a .env file:
OUTREACHPILOT_API_KEY=op_live_your_key_here
OUTREACHPILOT_API_URL=https://useoutreachpilot.comBuild the server:
npm run buildCLI mode
The same binary can run a few quick command-line checks without starting an MCP client:
outreachpilot-mcp list-tools
outreachpilot-mcp doctor
outreachpilot-mcp pilot "Check my workspace setup and tell me what is missing"doctor verifies API connectivity. pilot sends a natural-language command to /api/v1/chat.
Write safety
Tools that can send, delete, archive, pause, or otherwise make irreversible changes now return a confirmation payload first. Re-run the same tool with confirmed: true to execute. The server also sends stable Idempotency-Key headers for writes so retries are less likely to duplicate work.
Connecting to Claude Desktop
Add this to your claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"outreachpilot": {
"command": "node",
"args": ["/absolute/path/to/OutreachPilotMCP/build/index.js"],
"env": {
"OUTREACHPILOT_API_KEY": "op_live_your_key_here",
"OUTREACHPILOT_API_URL": "https://useoutreachpilot.com"
}
}
}
}Restart Claude Desktop โ you'll see OutreachPilot tools available in the toolbar.
Connecting to Cursor
Open Cursor Settings โ Features โ MCP
Click
+ Add New MCP ServerSet Name to
OutreachPilot, Type tocommandSet Command to:
npx -y outreachpilot-mcpAdd env vars:
OUTREACHPILOT_API_KEYandOUTREACHPILOT_API_URL
Getting Started After Install
Once connected, start with these two commands:
Check your workspace status:
Use the setup_workspace toolThis runs a health check and tells you what's configured and what needs setup.
Get the full setup guide:
Use the onboarding_guide toolReturns step-by-step instructions for email, ICP, knowledge base, contacts, and campaigns.
Available Tools (31)
๐ง Setup & Onboarding
Tool | Description |
| Full workspace health check โ email, ICP, knowledge base, contacts, campaigns, credits. Returns readiness % and action items. |
| Step-by-step setup guide. Pass |
๐ฌ pilot โ AI Engine Bridge (recommended for complex tasks)
Send any natural language instruction to the OutreachPilot AI engine. This is the most powerful tool โ it has access to all 35+ internal tools including calendar booking, LinkedIn outreach, deep research, email drafting, campaign building, voice dialing, and more.
"Find 20 VP of Sales at Series B SaaS companies in Austin"
"Draft a follow-up email to John Doe at Acme Corp"
"Build a 3-step email campaign for the Austin SaaS folder"
"Research Stripe โ find buying signals and key decision makers"
"Book a meeting with Jane Smith on Friday at 2pm"
"Check if my email accounts and integrations are working"๐ฅ Contact Tools
Tool | Description |
| Search CRM contacts by name, email, or company |
| List contacts with filters (status, folder, pagination) |
| Create one or more contacts, optionally auto-enroll in a campaign |
| Update a contact's fields (name, email, status, tags, etc.) |
| Get full details of a single contact by ID |
| Delete a contact from the CRM |
๐ฃ Campaign Tools
Tool | Description |
| List campaigns with optional status/type filters |
| Create a new draft campaign |
| Pause, resume, activate, or archive a campaign |
| Enroll a specific contact into a campaign |
| Get campaign audience stats (enrolled, completed, replied) |
| Get full campaign details including config, steps, and audience |
| Update campaign name, config, steps, or type |
๐ข Company Tools
Tool | Description |
| List company accounts in the CRM |
| Create one or more company accounts |
| Get full details of a single company by ID |
| Update company fields |
| Delete a company from the CRM |
๐ง Email
Tool | Description |
| Send a one-off email through your connected account. Costs 1 credit. |
๐ Folders
Tool | Description |
| List contact folders with contact counts |
| Create a new folder (idempotent โ returns existing if name matches) |
๐ณ Credits
Tool | Description |
| Check credits remaining, plan tier, and reset date |
๐ฌ Research
Tool | Description |
| Canonical B2B people/account prospecting tool. If |
| Google Maps/local-business prospecting tools: estimate cost, start a run, list/recover runs, poll status, list ranked business candidates, or stop a run. Use for place-based searches like "dentists in Austin"; use |
| Start agentic research to find companies or people |
| Poll a research job's progress |
| Import research results as contacts into the CRM |
๐ Webhook Tools
Tool | Description |
| List active webhook subscriptions |
| Register a new webhook endpoint for real-time events |
| Remove a webhook subscription |
Example Workflows
Full Prospecting Pipeline
User: Find 10 fintech founders in New York with verified emails, research each one, and add them to a campaign.
Claude: [setup_workspace] โ checks workspace is ready
[find_prospects] โ channels=["email","linkedin"], target_count=10
[check_research_status] โ waits for results
โ only count verified, person-specific emails
โ if only 7 verify, report 7/10 and do not pretend the target is met
[pilot] โ "Build a 3-step email campaign for the NYC Fintech folder"Email prospecting is strict: target_count=10 means 10 sendable email contacts, not 10 LinkedIn profiles. Generic inboxes (hello@, info@), guessed local parts, catch-all/likely results, and unverified emails do not count.
Quick Health Check
User: Is everything set up correctly?
Claude: [setup_workspace] โ returns readiness %, flags missing items
โ "Your workspace is 75% ready. You're missing a knowledge base โ this is critical for campaign quality. Go to Settings โ Pilot and add your product info."Guided Onboarding
User: I'm new, how do I get started?
Claude: [onboarding_guide] โ returns full setup walkthrough
โ walks through email setup, ICP config, knowledge base, first campaignAuthentication
All API calls use Bearer token authentication:
Authorization: Bearer op_live_your_key_hereAPI keys are scoped to endpoints. Default scopes:
contactsโ contact operationscampaignsโ campaign, webhook operationscreditsโ credit balancechatโ pilot bridge (required for agentic tasks)emailโ direct email sending
Development
Run in development mode (no build step needed):
npm run devThe server communicates over stdio (JSON-RPC 2.0), which is required by the MCP protocol.
Architecture
MCP Client (Claude, Cursor, etc.)
โ JSON-RPC over stdio
OutreachPilot MCP Server (31 tools)
โ HTTPS REST + Bearer auth
OutreachPilot API (/api/v1/*)
โ Internal
OutreachPilot AI Pilot (35+ tools)
โ
Supabase ยท OpenAI ยท LinkedIn ยท Twilio ยท Google CalendarThe pilot tool routes through POST /api/v1/chat, which gives your AI agent full access to the internal OutreachPilot engine โ the same AI that powers the in-app Pilot Buddy chat.
Available Tools
31 toolscheck_research_statusA
Poll the status of a running research job. Returns status (pending/running/complete/error), result count, and full results when complete. Keep calling this until status is 'complete', then call import_research_results.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Research job ID from run_research. |
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 the return statuses, result count, full results on completion, and the polling behavior. This is transparent for a simple poller, though it omits edge cases like invalid job IDs or error handling details.
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 an action verb and concise details on returns and workflow. No filler 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?
Since there is no output schema, the description explains what the tool returns (status, result count, full results) and delineates the polling loop and subsequent tool to call. This is complete for a single-parameter 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 coverage is 100% (job_id described as 'Research job ID from run_research'). The description adds context about the polling loop but does not add new parameter details beyond what the schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool polls the status of a running research job, listing specific statuses and return values. It distinguishes itself from sibling tools like import_research_results by framing the polling action and what to do after.
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 explicit guidance: 'Keep calling this until status is complete, then call import_research_results.' This tells when and how to use it in the workflow, though it does not mention when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_campaignA
Create a new campaign. Creates it as a draft โ use update_campaign_status to activate it. For a fully AI-built campaign with email steps already written, use the pilot tool with a message like 'create a 3-step email campaign for the Austin folder'.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Campaign name. | |
| type | No | Campaign type: email, sms, voice, linkedin, multi_channel. Default: email. | |
| config | No | Optional configuration object (stop_on_reply, target_folder_id, etc.). | |
| idempotency_key | No | Optional stable key to prevent duplicate campaign creation on retries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the key behavioral trait that campaigns are created as drafts and require a separate activation step. It does not mention permissions, idempotency behavior, or response format, but the draft state is the most important side effect and is clearly stated.
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 action, and every sentence earns its place by adding context on draft status and alternatives. 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?
Given no output schema and no annotations, the description covers the essential context: creation, draft state, activation step, and pilot alternative. It lacks details on return values or config specifics, but the schema covers config, and the core workflow is clear. Slightly more detail could make it 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% with all parameters already described in the input schema. The description adds no additional parameter-level detail, which is acceptable given the 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 creates a new campaign, distinguishes it from update_campaign_status (which activates) and pilot (which builds AI-generated campaigns), and specifies it creates as a draft. This is a specific verb+resource with clear sibling differentiation.
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?
Explicitly instructs to use update_campaign_status to activate after creation and offers pilot as an alternative for fully AI-built campaigns. This gives direct when-to-use and 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.
create_companyC
Create a company account in the CRM.
| Name | Required | Description | Default |
|---|---|---|---|
| upsert | No | Update matching companies instead of erroring. Default false. | |
| companies | Yes | Array of companies to create. Each requires name or domain. | |
| idempotency_key | No | Optional stable key to prevent duplicate company creation on retries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It only states the action 'create' and provides no information about side effects, permissions, or special behaviors like upsert or idempotency, which are defined in the schema but never surfaced. This is a complete lack of 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?
The description is extremely concise at one sentence with no wasted words, but it is so brief that it misses opportunities to convey useful context without bloat. It earns a 4 rather than a 5 due to the lack of value-added 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 has 3 parameters including an upsert flag and idempotency key, which are behaviorally significant. The description makes no mention of these features, nor does it describe return values or error conditions. With no output schema and no annotations, the description is incomplete for a tool with this 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 has 100% description coverage, so all parameters are already well-documented. The description adds no additional meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a company account in the CRM' uses a specific verb and resource, making the primary purpose clear. However, it does not differentiate from sibling tools like create_contact or create_webhook, which share the same 'create' pattern.
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 is provided on when to use this tool versus alternatives, nor are any prerequisites, exclusions, or typical use cases mentioned. The description is purely declarative and leaves the agent without selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_contactA
Create one or more contacts in the CRM. Automatically creates the company account if a company is specified. Optionally enroll in a campaign immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| upsert | No | If true, update existing contacts instead of returning a duplicate error. Default false. | |
| contacts | Yes | Array of contacts to create. Each contact requires email or linkedin_url. | |
| campaign_id | No | Optional campaign ID to automatically enroll the created contacts. | |
| idempotency_key | No | Optional stable key to prevent duplicate contact creation on retries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing side effects. It discloses auto-creation of companies and optional campaign enrollment, but does not mention the upsert behavior (updating vs duplicate error) or idempotency semantics, which are significant behavioral traits.
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 main action, and every sentence adds meaningful context. 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?
The description covers the main purpose and two side effects, but omits important context like duplicate handling, upsert behavior, and return values. Given the tool's complexity (4 params, nested array) and lack of annotations/output schema, more detail would improve completeness.
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 baseline is 3. The description adds minimal value beyond the schema: it restates campaign enrollment and company creation, but these are already described in the property descriptions. No additional parameter meaning 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 action (create), the resource (contacts), and the scope (one or more). It also distinguishes itself from sibling tools by mentioning automatic company creation and campaign enrollment, which are unique behaviors.
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 (creating contacts) and gives context that company creation is handled automatically, but it does not explicitly compare with alternatives like create_company or update_contact. No direct 'use this instead of X' guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_folderA
Create a new contact folder. If a folder with the same name already exists, returns the existing one.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the new folder. | |
| idempotency_key | No | Optional stable key to prevent duplicate folder creation on retries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden for behavioral transparency. It explicitly discloses the idempotent behavior of returning an existing folder on name collision, which is valuable beyond the schema. It does not mention permissions or side effects, but for a simple create operation 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 sentence that is clear, front-loaded, and contains zero filler. Every phrase adds value, including the idempotency note.
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 creation tool with two well-described parameters and no output schema, the description provides enough context: it names the resource, the idempotent behavior, and the return behavior on conflicts. It lacks an explicit statement of what a successful creation returns, but the description's mention of 'returns the existing one' implies the return of a folder object.
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%, and both parameters have clear descriptions. The description adds meaning by linking the 'name' parameter to the idempotent duplicate-handling behavior, which is not present in the schema. This elevates it above 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 clearly states the verb 'Create' and the specific resource 'contact folder', distinguishing it from sibling tools like create_contact. It also adds the unique idempotent behavior of returning the existing folder, which fully clarifies its 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 (to create a folder) and clarifies behavior on duplicate names, which is useful for agents deciding whether to call this or list_folders first. It does not explicitly name alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_webhookB
Register a webhook to receive real-time event notifications from OutreachPilot. The webhook URL must use HTTPS.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTPS URL to POST event payloads to. | |
| events | Yes | Events to subscribe to: email.sent, email.opened, email.replied, email.bounced, campaign.started, campaign.completed, campaign.paused, contact.created, contact.updated, sms.sent, sms.replied. | |
| secret | No | Optional signing secret for HMAC verification of payloads. | |
| idempotency_key | No | Optional stable key to prevent duplicate webhook registration on retries. |
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 of disclosing behavioral traits. It adds useful context (HTTPS requirement, real-time notifications) but omits important details such as what the function returns, permission prerequisites, or any rate limits, limiting its 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?
The description is highly concise and front-loaded. Two sentences convey the registration purpose and the HTTPS requirement without any 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?
With no output schema and no annotations, the description lacks essential context about what the tool returns (e.g., webhook ID) and what happens after successful registration. For a tool with four parameters and no structured output details, this is a significant 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?
The input schema already contains complete descriptions for all four parameters, achieving 100% schema description coverage. The description introduces no additional parameter meanings, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Register a webhook') and its purpose ('receive real-time event notifications'), making it distinct from sibling tools such as list_webhooks and delete_webhook. The verb and resource are specific and 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 no guidance on when to use this tool compared to alternatives like list_webhooks or delete_webhook. It only states a technical constraint (HTTPS URL) but lacks any contextual direction about when registration is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_companyA
Permanently delete a company account from the CRM. Contacts linked to this company will be unlinked but not deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | No | Must be true to permanently delete the company. | |
| company_id | Yes | ID of the company to delete. | |
| idempotency_key | No | Optional stable key to prevent duplicate delete attempts on retries. |
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 explicitly states the action is 'Permanently' destructive and describes the side-effect that linked contacts are 'unlinked but not deleted.' This is valuable behavioral context, though it could also mention the confirmed flag requirement, which 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 two sentences with no redundancy. The first sentence delivers the core purpose, and the second adds a critical side-effect in a clear, front-loaded manner.
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, combined with the schema's detailed parameter documentation, provides sufficient context for safe usage. It covers irreversibility and side-effects, making the tool adequately understandable. The confirmation flag is documented in the schema, so the description does not need to repeat 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 schema has 100% description coverage for all three parameters, so the description does not need to add parameter-level details. It does not discuss parameters, but the schema already provides full meanings. 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 'Permanently delete a company account from the CRM' with a specific verb and resource, distinguishing it from sibling tools like delete_contact by focusing on company accounts. It also explains the effect on linked contacts, further clarifying its unique 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 provides clear context that this tool is for deleting a company, with no ambiguity about its use case. It mentions the unlink side-effect, but does not explicitly name alternatives or when-not-to-use scenarios. The context is apparent given the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_contactA
Permanently delete a contact from the CRM by its ID. This cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | No | Must be true to permanently delete the contact. | |
| contact_id | Yes | ID of the contact to delete. | |
| idempotency_key | No | Optional stable key to prevent duplicate delete attempts on retries. |
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 permanent, irreversible nature of the deletion, which is critical behavioral information. It does not mention the required confirmation parameter, but that is covered 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?
Two short sentences, directly to the point, with no filler. The description earns every word.
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 paired with the schema provides sufficient information for a destructive operation, including permanence and the confirmation flag. It lacks explicit alternatives or consequence handling, but for a simple delete tool this is adequate.
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 described. The description adds no parameter-specific details beyond mentioning the ID, so the baseline of 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 states 'Permanently delete a contact from the CRM by its ID', using a specific verb and resource, and clearly distinguishes from sibling tools like update_contact or create_contact.
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 use when a contact must be permanently removed, and the warning 'This cannot be undone' signals caution. However, it does not explicitly compare with alternatives or state conditions 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.
delete_webhookB
Remove a webhook subscription by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | No | Must be true to delete the webhook. | |
| webhook_id | Yes | ID of the webhook to delete (from list_webhooks). | |
| idempotency_key | No | Optional stable key to prevent duplicate delete attempts on retries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for disclosing behavioral traits. It does not mention that the action is destructive, irreversible, or that the 'confirmed' parameter must be true to succeed. The description only states the action without any safety or side-effect 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, complete sentence with no filler words. It front-loads the action and resource, effectively serving its purpose without any 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 destructive operation with no annotations and no output schema, the description is too sparse. It fails to convey the irreversible nature of the deletion, the confirmation requirement, or any other behavioral context that a safer delete tool should communicate. The schema offers some detail, but the description itself leaves significant gaps.
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 baseline is 3. The description itself adds no parameter information beyond what the schema already provides, but the schema fully documents each parameter's purpose, including the need for 'confirmed' and the optional 'idempotency_key'.
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 the specific verb 'Remove' and identifies the resource as 'webhook subscription' with the method 'by its ID'. This clearly distinguishes it from sibling tools like list_webhooks and create_webhook, leaving no ambiguity about its function.
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, nor does it mention prerequisites or exclusion conditions. It simply states the action, leaving the agent to infer usage entirely from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaignA
Get full details of a single campaign including its config, steps, and audience statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ID of the campaign to retrieve. |
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 disclosing behavioral traits. It only lists returned data and does not state whether the operation is read-only, requires special permissions, or has other side effects, leaving safety assumptions unconfirmed.
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 front-loads the verb and resource, with no unnecessary words or repetition. It is appropriately sized for the tool's simplicity.
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 one-parameter get tool with no output schema, the description provides a reasonable overview of return contents (config, steps, audience statistics). It could be more complete by describing the return format, but it sufficiently covers the tool's purpose and 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?
The schema provides a complete description (100% coverage) for the single parameter campaign_id, so the baseline is 3. The description does not add additional semantic detail beyond what the schema already specifies.
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 a single campaign's full details, including config, steps, and audience statistics. This distinguishes it from siblings like get_campaign_status, but does not 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?
The description implies usage when full campaign details are needed, contrasting with list_campaigns or get_campaign_status. However, it lacks explicit when-not-to-use guidance or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaign_statusA
Get the status and audience statistics of a campaign. Returns total contacts enrolled, active, completed, paused, bounced, and failed counts.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ID of the campaign to check. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey the tool's safety and side effects. The verb 'Get' and the wording 'Returns...' clearly indicate a read-only operation, and the specific metrics listed foreshadow the output. It does not disclose potential errors or rate limits, but for a simple read tool, this level 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 consists of two concise sentences, front-loaded with the verb and resource, and zero wasted words. Every word 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?
This is a simple one-parameter read tool with no output schema. The description clearly explains what is returned and enumerates the specific counts. No additional context is necessary 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?
The input schema has 100% coverage for the only parameter (campaign_id) with a clear description. The tool description does not add extra meaning beyond the schema, but the baseline of 3 is appropriate when schema coverage is complete.
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 ('Get') and resource ('status and audience statistics of a campaign'), and enumerates the exact metrics returned (enrolled, active, completed, paused, bounced, failed). This clearly distinguishes it from siblings like get_campaign (broader details) and list_campaigns (listing campaigns).
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 indicates the tool's purposeโretrieving status and audience statistics for a campaignโwhich implies when to use it. However, it does not explicitly mention alternative tools or exclusion criteria, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_companyA
Get a single company account by its ID. Returns all fields including name, domain, industry, size, and custom context.
| Name | Required | Description | Default |
|---|---|---|---|
| company_id | Yes | ID of the company to retrieve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It adds that the tool returns 'all fields' and lists examples, which is useful, but it does not disclose whether this is a safe read-only operation, error behavior, or authorization requirements. The 'Get' verb implies read-only, but this is not explicit.
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 short sentences, no redundant words. Every phrase adds value: the first sentence defines the action and scoping, the second clarifies the return payload.
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 single-parameter GET operation with no output schema, the description covers the essential aspects: what it does, the input, and the return shape (field list). It could mention not-found handling, but given the simplicity, it's largely 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 input schema already provides 100% coverage for the single parameter company_id with a clear description. The description's 'by its ID' adds no additional semantic 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 uses the specific verb 'Get' with the resource 'a single company account by its ID', clearly distinguishing it from sibling tools like list_companies, create_company, and update_company. It also specifies the returned fields, reinforcing its 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 the use case (fetching a specific company by ID) but does not explicitly state when to prefer this over alternatives like list_companies or search_contacts. No exclusions or alternative tool references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactA
Get a single contact by its ID. Returns all fields including email, phone, LinkedIn URL, company, status, tags, and custom context.
| Name | Required | Description | Default |
|---|---|---|---|
| contact_id | Yes | ID of the contact to retrieve. |
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 return behavior by listing the fields returned (email, phone, LinkedIn URL, etc.), which is useful. It does not mention error handling or existence checks, but for a read operation this is acceptable.
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 states the action first and then clarifies the return content. Every word earns its place with no 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?
With only one required parameter and no output schema, the description provides sufficient context: it specifies what is returned (all fields) and gives concrete examples. This is complete for a simple get-by-ID 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% for the single parameter, describing it as 'ID of the contact to retrieve.' The description adds no additional meaning beyond 'by its ID,' so it matches the baseline of 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 specific verb 'Get' with a clear resource 'a single contact' and method 'by its ID'. It distinguishes itself from siblings like list_contacts and search_contacts by emphasizing single-contact retrieval.
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 you have a contact ID, but it does not explicitly state when to use this tool instead of siblings like search_contacts or list_contacts. No exclusion or alternative is mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_credit_balanceA
Check your current credit balance, monthly limit, plan tier, and when credits reset. Use this to verify you have enough credits before launching research or campaigns.
| 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 full burden. It clearly implies a read-only status check and lists the information returned, but it does not explicitly state that checking does not consume credits or note any authentication requirements. Still, for a simple balance lookup, it provides adequate 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 two sentences and immediately states the purpose. The second sentence adds actionable guidance without any filler or repetition. It is front-loaded and every word 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?
Despite lacking an output schema, the description thoroughly explains the return values (balance, limit, tier, reset time) and the practical use case. For a zero-parameter read-only tool, this is complete and leaves no major ambiguity.
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%. The description adds value by explaining what kind of information the tool returns, which compensates for the absence of parameters. Per rubric, zero-parameter tools receive a baseline of 4.
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 ('Check') with a clear resource (credit balance) and lists the exact data points returned: current balance, monthly limit, plan tier, and reset time. It is clearly distinct from sibling tools, none of which deal with credits or billing.
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 the tool: to verify sufficient credits before launching research or campaigns. It does not mention alternatives or exclusions, but since no sibling tool appears to cover credit info, this is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_research_resultsA
Import completed research results into the CRM as contacts. Only call after check_research_status returns 'complete'. Can auto-assign to a folder and/or enroll in a campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The completed research job ID. | |
| confirmed | No | Must be true to import research results into the CRM. | |
| campaign_id | No | Auto-enroll imported contacts into this campaign. | |
| folder_name | No | Create/use this folder for imported contacts. | |
| idempotency_key | No | Optional stable key to prevent duplicate imports on retries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing side effects. It mentions the precondition and optional effects (folder/campaign assignment), but does not mention the confirmation requirement, idempotency behavior, or potential for duplicates. This provides some transparency but leaves important behavioral aspects unstated.
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 purpose and immediately followed by a critical precondition. Every word earns its place; no redundant or vague phrasing.
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 5 parameters and no output schema, the description covers the essential context: what it does, when to call it, and optional behaviors. However, it omits mention of the 'confirmed' parameter and idempotency, which are important for safe usage, so it is 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 of parameter descriptions, so the baseline is 3. The description references folder_name and campaign_id via 'auto-assign to a folder and/or enroll in a campaign', but this only restates what the schema already explains. No additional semantic value is added.
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 ('Import completed research results into the CRM as contacts') with a specific verb and resource. It distinguishes itself from siblings like create_contact (manual single contact) and run_research (produces the results), making its role unique.
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 a precondition: 'Only call after check_research_status returns complete', which provides clear when-to-use guidance. It also hints at optional features (auto-assign folder/enroll campaign) but does not explicitly mention alternatives like create_contact for individual import, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_campaignsA
List your outreach campaigns. Filter by status or type to find active, draft, or paused campaigns.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by type: email, sms, voice, linkedin, multi_channel. | |
| limit | No | Max campaigns to return. Default 50. | |
| offset | No | Pagination offset. Default 0. | |
| status | No | Filter by status: draft, active, paused, completed, archived. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavioral traits. It indicates a read-only listing operation, but does not mention pagination behavior, default limits, ordering, or whether all campaigns or only those owned by the user are returned. This leaves gaps in what the agent can expect, so a mid-range score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with the main action front-loaded. 'List your outreach campaigns' immediately answers what it does, and the second sentence adds useful filtering context. Every word earns its place 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?
For a list tool with 4 parameters and no output schema, the description covers the core purpose and filtering capability. It does not mention pagination details or response format, but these are partially inferred from the schema and the verb 'list'. Slightly more detail on scope or return shape would make it fully complete, but it is adequately informative as is.
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 covers all 4 parameters with descriptions (100% coverage), so the baseline is 3. The description repeats 'status' and 'type' but adds no extra semantic meaning beyond what the schema already provides, and does not mention limit/offset at all. It neither enhances nor detracts from 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 'List your outreach campaigns' with a specific verb and resource, distinguishing it from sibling list tools like list_contacts or list_companies. It also clarifies the scope ('your') and mentions filtering, which differentiates it from get_campaign for single retrieval.
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 phrase 'Filter by status or type to find active, draft, or paused campaigns' provides clear context on when to use this tool (to search/filter campaigns). However, it does not explicitly state when not to use it or mention alternatives like get_campaign for single-campaign retrieval, so it falls short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_companiesB
List company accounts in your CRM. Companies are automatically linked to contacts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max companies to return. Default 50. | |
| domain | No | Filter by exact domain (e.g. 'stripe.com'). | |
| offset | No | Pagination offset. Default 0. | |
| search | No | Search company name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It only states the listing action and a data model fact about linking to contacts, but does not disclose return format, pagination behavior, or any limitations. This is insufficient for a tool with no annotations.
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 short sentences with the main purpose front-loaded. It is appropriately sized and free of redundant content, though the second sentence adds marginal 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?
The description is minimal and does not explain what the response looks like, given there is no output schema. It does not mention ordering, field selection, or how parameters combine, making it incomplete for an agent relying solely on the 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 input schema has 100% coverage with descriptions for all four parameters, so the description adds no additional parameter meaning. Baseline is 3 because the schema already documents limit, domain, offset, and search.
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 company accounts in the CRM with a specific verb and resource. It is distinct from sibling tools like get_company (single company) and create_company/delete_company.
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 like get_company or search_contacts. It lacks any exclusions or alternative recommendations, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsA
List all contacts in your CRM with optional filters. Use search_contacts for keyword search. This is for paginated browsing.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max contacts to return. Default 50, max 200. | |
| offset | No | Offset for pagination. Default 0. | |
| status | No | Filter by status: new, contacted, replied, interested, meeting_booked, not_interested, unsubscribed. | |
| folder_id | No | Filter by folder ID to only return contacts in that folder. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It states 'List all contacts' and 'paginated browsing,' which implies a read-only operation with pagination. However, it does not explicitly mention that it has no side effects, nor does it describe the return format or any rate limits. Since 'list' is inherently non-destructive, it gains some credit, but the description could be more transparent about behavior beyond what is obvious from the 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?
The description is two short sentences, front-loaded with the purpose, followed by a clear alternative and use case. No filler or redundancy. Every sentence earns its place, making it appropriately sized 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 tool has 4 optional parameters and no output schema or annotations. The description covers the main purpose, alternative, and use case, but does not mention return value or pagination specifics (beyond 'paginated browsing'), which are common expectations. Still, for a simple list tool with well-described parameters, the description is reasonably complete. A small gap is the lack of any note about ordering or default 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 has 100% coverage with descriptions for all parameters (limit, offset, status, folder_id). The description merely says 'optional filters' without adding any meaning beyond what the schema already provides. This matches the baseline of 3, as the schema does the heavy lifting and the description adds no extra parameter semantics.
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 all contacts in your CRM with optional filters.' It specifies the resource (contacts) and the action (list), and distinguishes itself from the sibling tool search_contacts by noting that search_contacts is for keyword search. This is a specific verb+resource with clear 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 provides explicit usage guidance by naming an alternative: 'Use search_contacts for keyword search.' It also states the intended use case: 'This is for paginated browsing,' which tells the agent when this tool is appropriate. This is an explicit when/alternative distinction, matching the highest level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_foldersA
List all contact folders in the workspace. Folders organize contacts into groups for campaigns. Returns folder names, IDs, and contact counts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max folders to return. Default 100. | |
| search | No | Filter folders by name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states the return fields (names, IDs, contact counts) but does not disclose behaviors like default ordering, pagination limits, or error conditions. The description is not misleading, but it is minimal for a tool without annotation support.
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, with no filler. The first sentence is front-loaded with the verb and resource, and the second sentence adds relevant context about folder purpose and return values. Every word 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?
For a simple list tool with no output schema, the description explains the tool's purpose, the organizational role of folders, and the return fields. It is sufficient for an agent to understand the tool's function. It lacks explicit details about pagination behavior or sorting, but given the simplicity, it reaches a 4.
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 both parameters (limit and search) with clear descriptions and defaults. The description does not add additional meaning about parameter usage or syntax beyond what the schema already provides. With 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb and resource: 'List all contact folders in the workspace.' It distinguishes from siblings like list_contacts and search_contacts by specifying the resource (folders). The additional context about folders organizing contacts for campaigns clarifies the 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 the tool by mentioning that folders organize contacts for campaigns, but it does not explicitly state when to prefer this over alternatives like list_contacts or search_contacts. No exclusions or alternative tools are named, so the guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhooksA
List all active webhook subscriptions. Webhooks deliver real-time notifications when events occur (email.sent, email.replied, contact.created, etc.).
| 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 full burden. It discloses the read-only nature ('List') and the 'active' filter, but lacks details on pagination, response format, or authentication. The second sentence educates about webhooks but does not reveal additional behavioral traits beyond the core listing action.
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 action, followed by a succinct explanatory note. Every word earns its place with 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?
For a simple zero-parameter read-only tool, the description is adequate. It explains what it lists and provides background on webhooks. However, it does not describe the return structure (e.g., arrays of webhook objects) or the meaning of 'active' in more detail, and there is no output schema to compensate.
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 description does not need to explain parameter meanings. The schema coverage is trivially 100% with an empty object. The description adds no parameter info, but none is required, warranting the baseline 4.
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') and the resource ('active webhook subscriptions'), distinguishing it from sibling tools like create_webhook and delete_webhook. The addition of example event types adds context without obscuring the 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 usage is implied: to see existing webhook subscriptions. However, it does not explicitly contrast with create_webhook or delete_webhook, nor does it state when to use this tool in favor of others. The context is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onboarding_guideA
Get the step-by-step onboarding guide for setting up OutreachPilot from scratch. Returns a detailed walkthrough covering: account setup, email connection, ICP configuration, knowledge base, contact import, folder organization, campaign creation, and launch. Use this when a user is new or asks how to get started.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | Optional: Focus on a specific area. Options: email, icp, knowledge_base, contacts, campaigns, integrations, all. Default: all. | all |
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 discloses that the tool 'Returns a detailed walkthrough' and enumerates covered topics, but it doesn't explicitly state that it has no side effects or mutations. Adequate for a read-only guide.
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 a useful enumerated list of content areas. 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 simple informational tool with one optional parameter and no output schema, the description covers the purpose, content areas, and usage context. 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 sole optional parameter 'focus' is fully documented in the schema with options and default (100% coverage). The description doesn't add extra parameter 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 'Get the step-by-step onboarding guide for setting up OutreachPilot from scratch' with a specific verb and resource. It distinguishes from sibling tools by being the only onboarding/setup guide among data operations.
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 explicitly says 'Use this when a user is new or asks how to get started,' providing clear context. It doesn't mention exclusions, but none are necessary given the tool's informational nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pilotA
The OutreachPilot AI engine. Send any natural language instruction and Pilot will execute it using its full toolkit.
Use this for complex or multi-step tasks that go beyond simple CRUD:
MESSAGING & OUTREACH
"Draft a follow-up email to John Doe at Acme Corp"
"Send a LinkedIn connection request to Jane Smith"
"Write a cold email to my CEO contacts at fintech companies"
RESEARCH & LEAD GENERATION
"Research Stripe โ find buying signals and key decision makers"
"Find 20 VP of Sales at Series B SaaS companies in Austin"
"Enrich all contacts at Salesforce with LinkedIn profiles"
"Find emails for all contacts at HubSpot"
CAMPAIGN BUILDING
"Build a 3-step email campaign for the Austin SaaS folder"
"Add a wait step of 5 days to campaign abc123"
"Pause my cold email campaign"
CALENDAR & MEETINGS
"What's my calendar availability for this week?"
"Book a meeting with Jane Smith on Friday at 2pm"
ANALYTICS & REPORTING
"Show me email stats for the last 30 days"
"How many contacts replied to my campaigns?"
"What's the open rate on my outbound emails?"
SYSTEM & ADMIN
"Check if my email accounts are connected properly"
"How many credits do I have left?"
"What does our auto-responder prompt say?"
"Update our knowledge base with: [text]"
VOICE DIALING
"Start a dialing session for the Startup Founders folder"
"What are my call stats?"
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Natural language instruction for the OutreachPilot AI engine. | |
| thread_id | No | Optional conversation thread ID for context continuity across messages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the transparency burden. It says 'execute it using its full toolkit' and includes examples of mutating actions (e.g., 'Send a LinkedIn connection request', 'Book a meeting', 'Pause my cold email campaign'). However, it does not explicitly disclose potential side effects, reversibility, or that actions will have real-world consequences. This is a moderate disclosure 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 long but well-structured with an opening summary, a clear usage directive, and categorized bullet examples. Every section adds practical value for an agent. It is not bloated with unrelated content, and the organization makes it easy to scan.
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 tool with no output schema and no annotations, the description thoroughly covers use cases and scope, which is critical. However, it omits any information about return values/response format, error handling, or potential limitations. Since there is no output schema, the description should have provided some indication of what the agent can expect in response.
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 describes 'message' as 'Natural language instruction' and 'thread_id' as optional context. The description adds substantial value by providing a large set of concrete example instructions across domains, enriching the semantics of the message parameter beyond the schema. It does not discuss thread_id, but the coverage is already high and the examples more than compensate.
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 'The OutreachPilot AI engine. Send any natural language instruction and Pilot will execute it using its full toolkit.' This clearly states a specific verb (execute), resource (full toolkit), and differentiates from simple CRUD siblings by stating 'beyond simple CRUD.'
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 explicitly says 'Use this for complex or multi-step tasks that go beyond simple CRUD.' This provides clear guidance on when to use the tool versus the specific sibling CRUD tools. The extensive categorized examples further illustrate the appropriate contexts without ever being vague.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_researchA
Start an agentic research job to find companies or people matching your criteria. Returns a job_id to poll with check_research_status. Send with confirmed=false first to get a cost estimate, then confirmed=true to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Research depth: 'standard' (2 credits/result), 'thorough' (3), or 'deep' (5). Default: standard. | standard |
| limit | No | Max results to find. Default 10, max 50. | |
| query | Yes | Natural language search criteria (e.g. 'fintech founders in NY', 'SaaS companies with 50-200 employees'). | |
| confirmed | No | Set to false for cost estimate, true to execute. Always get estimate first. | |
| target_type | No | What to search for: 'companies' or 'people'. Default: companies. | companies |
| idempotency_key | No | Optional stable key to prevent duplicate research job creation on retries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral disclosure. It reveals the async job nature, the required two-step confirmation, and the polling requirement via check_research_status. This is substantial context beyond what the schema provides.
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 action, and every sentence earns its place. No redundant phrases.
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?
Covers the async job execution, job_id return, polling, and the confirmation workflow. However, it doesn't describe what the results will look like (though that may be delegated to check_research_status) or cost estimate details, leaving minor ambiguity given there is no 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 coverage is 100% for all 6 parameters, so the baseline is 3. The description reinforces the confirmed=false-first workflow, but this is already clearly documented in the schema, so it adds little new parameter-level 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 clearly states the tool starts an agentic research job to find companies or people. It distinguishes itself from the sibling check_research_status by noting it returns a job_id to poll, making its role in the workflow explicit.
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 two-step usage sequence: send with confirmed=false for a cost estimate, then confirmed=true to execute. While it doesn't explicitly name alternatives or when not to use, the workflow is very specific and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contactsA
Search your OutreachPilot CRM for contacts by name, email, or company. Returns matching contacts with their status, email, LinkedIn URL, and creation date.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max contacts to return. Default 20, max 200. | |
| query | Yes | Search query: name, email address, or company name. | |
| status | No | Filter by contact status: new, contacted, replied, interested, meeting_booked, not_interested, unsubscribed. | |
| folder_id | No | Filter by folder 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 that it returns matching contacts with specific fields, which is useful. However, it does not describe potential side effects (none expected), pagination behavior, or any limitations beyond the schema. This is a minimal viable disclosure but lacks depth.
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, front-loaded with the core purpose and followed by the return value summary. Every word earns its place; 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?
The tool has no output schema, so the description correctly and sufficiently explains the return fields. It covers the main parameters (query, limit, filters are in schema) and the core functionality. Minor gaps include no mention of default ordering or behavior on no matches, but these are not critical for a straightforward search 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?
The schema description coverage is 100%, so the baseline is 3. The description adds no additional parameter context beyond what the schema already providesโquery, limit, status, and folder_id are already clearly described. The description's mention of searchable fields (name, email, company) mirrors the schema text.
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 searches the OutreachPilot CRM for contacts by name, email, or company, and specifies the return fields (status, email, LinkedIn URL, creation date). This is a specific verb+resource+scope that distinguishes it from sibling tools like list_contacts or get_contact.
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 use case: when you need to search contacts by a query. It does not explicitly mention alternatives or exclusions, but the context is clear enough that an agent would know when to use this tool. No explicit 'use list_contacts instead' guidance, but the search intent is obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailA
Send a one-off email through your connected email account. Costs 1 credit per send. For bulk sending, use campaigns instead.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient email address. | |
| body | No | Email body (plain text โ will be auto-converted to HTML). | |
| subject | Yes | Email subject line. | |
| confirmed | No | Must be true to send the email. | |
| html_body | No | Email body as raw HTML. Use this instead of 'body' for rich formatting. | |
| from_email | No | Optional. Which connected email account to send from. If not specified, uses the default connected account. | |
| idempotency_key | No | Optional stable key to prevent duplicate email sends on retries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden of behavioral disclosure. It mentions the cost of 1 credit per send and that it uses the connected email account, but it does not disclose the confirmation flag required to actually send, potential irreversibility, or error behaviors. It adds some value but lacks depth for a mutation with side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with purpose, and includes critical cost and alternative information in a compact form. Every word earns its place with 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?
For a send operation with 100% schema coverage, the description provides essential context (cost, one-off scope, alternate tool for bulk). It does not describe the return value, but no output schema exists, and the core behavior is adequately covered. Missing a direct mention of the confirmation requirement, but that is fully documented in the schema, so not a critical 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 100%, so the baseline is 3. The description does not add any parameter-specific meaning beyond what the schema already provides, and it does not compensate for any gaps since there are none. Thus a 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 'Send a one-off email through your connected email account', specifying the verb and resource. It also distinguishes itself from bulk sending by explicitly naming campaigns as the alternative, making sibling differentiation strong.
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 by stating 'For bulk sending, use campaigns instead', naming the alternative tool and defining the boundary between one-off and bulk scenarios. Context is clear and exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_workspaceA
Run a full health check on the OutreachPilot workspace. Returns setup completeness for: email accounts, ICP config, knowledge base, folders, contacts, campaigns, and credits. Use this FIRST when starting a new conversation to understand what's configured and what needs setup. Returns a readiness percentage and actionable recommendations.
| 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 full burden. It discloses that the tool 'returns setup completeness' and a 'readiness percentage and actionable recommendations,' which is helpful. However, it does not explicitly state that it is read-only or non-destructive, though 'health check' implies this. The description could add a note about no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the primary purpose, and every sentence adds value. The list of checked items is compact, and the usage guidance is integrated seamlessly.
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 tool with no output schema, the description is complete. It explains what the tool does, what it returns (readiness percentage and recommendations), and when to use it. No critical missing context is apparent.
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 covers them trivially. Per the rubric, a baseline of 4 is appropriate. The description does not need to add parameter details since there are none.
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 a full health check on the OutreachPilot workspace.' It lists the specific resources checked (email accounts, ICP config, knowledge base, folders, contacts, campaigns, credits) and the output (readiness percentage, recommendations). This distinguishes it from sibling CRUD tools like list_contacts or get_campaign.
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 explicitly says 'Use this FIRST when starting a new conversation to understand what's configured and what needs setup.' This provides clear context for when to use the tool. It does not name specific alternatives or when-not-to-use conditions, but the 'first' guidance is sufficient for a health check tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_campaignA
Enroll a contact into an active campaign. Can provide a contact_id for an existing contact, or provide contact fields (email, first_name, last_name, company) to auto-create and enroll. The campaign must be active.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Email of the contact. Used to find or auto-create the contact if contact_id is not provided. | ||
| company | No | ||
| confirmed | No | Must be true to enroll a contact into the campaign. | |
| last_name | No | ||
| contact_id | No | ID of an existing contact (use search_contacts to find it). If not provided, supply email/linkedin_url to auto-create. | |
| first_name | No | ||
| campaign_id | Yes | ID of the active campaign to enroll the contact into. | |
| linkedin_url | No | ||
| idempotency_key | No | Optional stable key to prevent duplicate enrollment attempts on retries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral details. It mentions auto-creating contacts and requiring an active campaign, but it omits the critical `confirmed` flag requirement, the idempotency behavior, and any side effects or error conditions. This is a significant transparency gap for a mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loaded with the primary action, and contains no redundant filler. Every phrase 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?
For a tool with 9 parameters, no output schema, and no annotations, the description is incomplete. It fails to mention the `confirmed` flag requirement, the `idempotency_key` duplicate-prevention feature, and the optional `linkedin_url` auto-create path. These are important for an agent to invoke the tool safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to the parameters by explaining that `contact_id` and the contact fields are alternative ways to identify or create a contact, and that `campaign_id` must reference an active campaign. This adds value beyond the schema's field-level descriptions, though it does not cover every parameter (e.g., `confirmed`, `idempotency_key`).
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 starts with a specific verb-resource pair ('Enroll a contact into an active campaign') and clearly distinguishes the tool's purpose from siblings like list_campaigns or get_campaign_status. It also explains the two enrollment modes (existing contact vs auto-create), leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (enrolling a contact into an active campaign) and explains the two input modes, but it does not explicitly name alternative tools or state when not to use it. The 'campaign must be active' condition adds usage constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_campaignA
Update a campaign's name, config, steps, or type. For status changes (pause/resume/activate), use update_campaign_status instead.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New campaign name. | |
| type | No | Campaign type: email, sms, voice, linkedin, multi_channel. | |
| steps | No | Campaign steps/sequence. Each step has a type (email, wait, linkedin, etc.) and content. | |
| config | No | Updated campaign configuration (stop_on_reply, target_folder_id, etc.). | |
| confirmed | No | Must be true to update the campaign. | |
| campaign_id | Yes | ID of the campaign to update. | |
| idempotency_key | No | Optional stable key to prevent duplicate campaign updates on retries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits, but it only restates the purpose and fields. It does not mention any side effects, whether confirmation is required, or how the update interacts with existing campaigns. The 'confirmed' parameter is in the schema, but the description itself lacks 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?
The description is a single, front-loaded sentence with no wasted words. It communicates the core action and the key exclusion in an efficient manner.
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 (7 params, nested objects, no annotations, no output schema), the description provides the necessary pointer to the alternative tool but omits broader context such as whether the update is reversible, the need for confirmation, or idempotency implications. However, the rich schema descriptions cover parameter details, keeping the description minimally viable 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 the baseline is 3. The description adds no extra meaning beyond listing field names; it does not elaborate on parameter nuances, dependencies, or the significance of confirmed/idempotency_key beyond what the schema already states.
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 'update' and the resource 'campaign', and lists the specific fields that can be modified (name, config, steps, type). It also explicitly differentiates from the sibling tool update_campaign_status by redirecting status changes to that alternative.
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 an explicit alternative for status changes: 'For status changes (pause/resume/activate), use update_campaign_status instead.' This clearly indicates when not to use this tool and directs to the appropriate sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_campaign_statusB
Pause, resume, activate, or archive a campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | New status: active, paused, draft, completed, archived. | |
| confirmed | No | Must be true for active, paused, and archived status changes. | |
| campaign_id | Yes | ID of the campaign to update. | |
| idempotency_key | No | Optional stable key to prevent duplicate status updates on retries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It lists state transitions but omits critical behavioral details: the 'confirmed' flag required for certain statuses, the idempotency key for retries, and any side effects or reversibility. This leaves the agent unaware of constraints.
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, terse sentence with zero wasted words. It is front-loaded with the key actions.
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 four parameters, no output schema, and no annotations, this description is under-specified. It fails to mention the confirmation requirement or idempotency behavior, which are essential for correct invocation and safe retries. The agent is left guessing about side effects.
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 baseline is 3. The description adds no additional parameter meaning beyond the schema. It does not clarify how status values map to actions or the confirmed requirement.
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 specifies the tool's action ('Pause, resume, activate, or archive') on a specific resource ('a campaign'). This distinguishes it from sibling tools like update_campaign, which likely handles other campaign 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 description implies this tool is for changing campaign status, but it does not explicitly contrast it with alternative tools (e.g., update_campaign) or state when not to use it. No exclusion or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_companyB
Update an existing company's fields. You must provide the company_id.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Updated company name. | |
| size | No | Updated company size (e.g. '10-50', '500+'). | |
| domain | No | Updated company domain (e.g. 'stripe.com'). | |
| context | No | Custom metadata to merge into the company's context. | |
| industry | No | Updated industry. | |
| confirmed | No | Must be true to update the company. | |
| company_id | Yes | ID of the company to update. | |
| idempotency_key | No | Optional stable key to prevent duplicate company updates on retries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the operation is an update (mutation), but it omits critical behavioral details such as the requirement for 'confirmed' to be true for the update to succeed, and it doesn't mention idempotency behavior or what happens if 'confirmed' is false. This is a significant transparency gap for a write 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 extremely concise, using only two short sentences with no fluff. However, the second sentence about company_id is somewhat redundant given the schema, and the space could have been used to add the crucial 'confirmed' gate, making it efficient but not optimal in content utilization.
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?
With 8 parameters, no output schema, and no annotations, the description is a bare minimum. It fails to mention essential contextual details like the confirmation flag requirement, the merge behavior for 'context', or any side effects. This leaves the agent without critical information needed for correct invocation, especially for a mutation 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 coverage is 100%, so all 8 parameters have descriptions in the schema. The description adds only 'You must provide the company_id,' which merely restates the required parameter and does not add meaning beyond the schema. It does not highlight the 'confirmed' parameter's role or the 'idempotency_key' behavior, but the schema already documents these.
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 ('Update an existing company's fields') with a specific verb and resource, and 'existing' distinguishes it from create/delete operations. However, it does not explicitly name alternative sibling tools or elaborate on scope beyond 'fields'.
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 usage is implied: use this tool when you need to update an existing company's fields. There is no explicit guidance on when to use it versus alternatives like create_company or delete_company, nor any mention of prerequisites like the 'confirmed' flag being required for the update to take effect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contactA
Update an existing contact's fields. You must provide the contact_id (use search_contacts to find it).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Replaces the contact's entire tag list. | |
| No | |||
| phone | No | ||
| title | No | ||
| status | No | New contact status: new, contacted, replied, interested, meeting_booked, not_interested, unsubscribed. | |
| company | No | ||
| confirmed | No | Required when marking a contact not_interested or unsubscribed. | |
| last_name | No | ||
| contact_id | Yes | ID of the contact to update. | |
| first_name | No | ||
| idempotency_key | No | Optional stable key to prevent duplicate write execution on retries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral side effects, but it only states the update action and prerequisite. It does not mention that updating tags replaces the entire list, the idempotency key behavior, or any mutation risks. This lacks transparency for a write 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 short sentences, front-loaded with the primary purpose and a key prerequisite. No fluff, every word 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?
For a tool with 11 parameters, no annotations, and no output schema, this description is incomplete. It does not mention partial update semantics, tag replacement, confirmation requirements, idempotency, or return values, leaving critical behavioral and usage gaps.
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 45%, so the description must compensate. It only elaborates on contact_id, telling users to provide it from search_contacts, but does not explain the other 10 parameters (e.g., tags replacement, confirmed requirement). The description adds minimal value 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 'Update an existing contact's fields' with a specific verb and resource, distinguishing it from sibling tools like create_contact, delete_contact, and get_contact. This is an exact, non-tautological 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 provides clear usage context by requiring contact_id and explicitly recommends using search_contacts to find it. This is actionable guidance, though it does not explicitly list exclusions or alternative tools, it is sufficient for the resource.
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.
31 tool updates
v2.1.0- First observed
check_research_status - First observed
create_campaign - First observed
create_company - First observed
create_contact - First observed
create_folder - First observed
create_webhook - First observed
delete_company - First observed
delete_contact - First observed
delete_webhook - First observed
get_campaign - First observed
get_campaign_status - First observed
get_company - First observed
get_contact - First observed
get_credit_balance - First observed
import_research_results - First observed
list_campaigns - First observed
list_companies - First observed
list_contacts - First observed
list_folders - First observed
list_webhooks - First observed
onboarding_guide - First observed
pilot - First observed
run_research - First observed
search_contacts - First observed
send_email - First observed
setup_workspace - First observed
trigger_campaign - First observed
update_campaign - First observed
update_campaign_status - First observed
update_company - First observed
update_contact
TDQS
Scored across 31 tools
Most tools have clearly distinct purposes, with explicit disambiguation between search_contacts and list_contacts, and update_campaign vs update_campaign_status. However, get_campaign_status overlaps with get_campaign's audience statistics, and trigger_campaign's ability to auto-create contacts could be confused with create_contact.
All tools follow a consistent verb_noun snake_case pattern with standard verbs like get, list, create, update, delete, search, trigger, and send. No mixed conventions or vague names.
31 tools is on the heavy side for an MCP server, even for a broad outreach platform. Some redundancy exists (get_campaign_status vs get_campaign, setup_workspace vs onboarding_guide) that could be consolidated, but most tools serve a distinct purpose.
The core CRM and campaign workflows are well-covered with full CRUD for contacts and companies, plus research and webhooks. However, notable gaps include no delete_folder, no delete_campaign (only archive), and no dedicated tools for calendar or knowledge base management despite pilot mentioning these capabilities.
Maintenance
Related MCP Connectors
Run B2B outreach from your AI agent: 250+ tools for campaigns, leads, LinkedIn and email workflows.
Give AI agents the LinkedIn tools to find, qualify, engage, and follow up with prospects.
Search companies, enrich contacts, and reveal emails and phones from your AI agent.
Run cold email outbound from an AI agent: campaigns, leads, replies, sender accounts, autopilot.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to automate sales prospecting by finding contacts by role and industry, enriching data with emails and tech stacks, scoring against ideal customer profiles, and generating personalized outreach sequences. Streamlines lead generation and sales engagement workflows through integrated research and sequence generation tools.-
- AlicenseAqualityDmaintenanceEnables research on prospects, pull call transcripts, and enrich leads using Gong, ZoomInfo, Clay, and LinkedIn Sales Navigator through natural language.161MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to draft evidence-grounded cold-email openers, A/B variants, personalized LinkedIn DMs, and SEO content-gap plans for sales and marketing outreach.-
- AlicenseAqualityFmaintenanceEnables AI assistants to search leads, view profiles, manage lists, send InMails, and export data from LinkedIn Sales Navigator through browser automation.77MIT