LeaderboardBack to leaderboard — loading return destination
Opening report…
Loading report overview
M
MCP server
server.example.com/mcp
Tools and resources for your MCP client, with a public quality report and detailed checks.
Protocol
MCP 2025-11-25
Server version
1.0.0
Website
server.example.com
Supports
Tools · Resources
Overall score
90 /100
How is this score calculated?
Server metadata
Loading server metadata
Reviewed90/100
Discoverability
Loading discoverability
Reviewed90/100
Protocol
Loading protocol
Reviewed90/100
Tools
Loading tools
Reviewed90/100
MCP Apps
Loading mcp apps
Reviewed90/100
Tool documentation quality
Loading tool documentation quality
Reviewed90/100
LeaderboardBack to leaderboard — loading return destination
C
Close
mcp.close.com/mcp
Close is a CRM built around communication. This server gives an agent access to a team's leads, contacts, opportunities and tasks, together with the logged history of calls, emails, SMS and meetings, including transcripts. Use it to catch up on a deal, summarize recent conversations, report on pipeline, draft follow-up emails, and create or update records and workflows.
Close is a CRM built around communication. This server gives an agent access to a team's leads, contacts, opportunities and tasks, together with the logged history of calls, emails, SMS and meetings, including transcripts. Use it to catch up on a deal, summarize recent conversations, report on pipeline, draft follow-up emails, and create or update records and workflows.
Prefer a `find_*` tool for a kind of object, and `fetch_objects` or a `fetch_*` tool for known IDs. Otherwise use `list_objects` to filter and list, and `aggregate_objects` for counts and totals. If you can't or would rather not build filters, ask `search` in plain words. Orgs can rename Lead, Contact, Opportunity and their statuses: when a user names an object you don't recognize, call `customized_builtin_labels` first, then write CustomizedLabel (DefaultLabel) without explaining the renaming.
`list_objects` and `aggregate_objects` take the same `filters`. Never page through `list_objects` to count. When a field is not in the field list below, call `describe_fields(object_type, name_contains)` for its exact name and values.
For opportunity prioritization (closing soon, needs attention, stale, most valuable, most likely to close), call `find_opportunities`: it answers in one call, without `find_pipelines_and_opportunity_statuses` or `fetch_objects`. If the user asks about "open" opportunities, determine which opportunity statuses aren't won or lost and use those. When totalling the value of leads or a pipeline (including a lead's or pipeline's "potential value" or "pipeline value"), count only those open opportunities, unless the user explicitly asks to include won or lost deals. Opportunity `value` is in cents in `filters` and in `aggregate_objects` results: divide by 100 before showing it. `list_objects` columns already show dollars.
# Field list
Available types: lead, contact, opportunity, task, email, call, note, meeting, sms, whatsapp, custom_activity, custom_object, sequence_subscription, lead_status_change, opportunity_status_change.
Available nested types: address, contact_email, contact_phone, contact_url.
include_types also takes the other search types, e.g. task.outbound_call, task.missed_call, activity.email_thread. Their fields are not listed here: call describe_fields(object_type) first.
Listed are the column fields. Filters, sorts and aggregation
Discoverability
3/6 passed3 of 6 passed50/100
Client listings and public setup information.
mcp.json or server-card.json
Either mcp.json or an MCP Server Card declaring this endpoint passes.
The manifest declares this MCP server's exact endpoint.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
List pending requests to join the current organization.
Each entry includes the requesting user's name and email, the
request id, and when the request was created.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
List the organization's members with each member's role name, whether the
role is built-in or custom, active/inactive status, and join date. Richer
than `org_users` — prefer this unless you only need a name or email.
Most recent members first.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
include_inactive
If true, also return deactivated members.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
List the roles that can be assigned in the organization.
Covers Close's built-in roles plus any custom roles the org defines.
Use this to resolve a role name to its id, or to see which roles
grant organization management access.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"is_built_in",
"is_admin",
"permission_count"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"is_admin": {
"type": "boolean",
"description": "Whether the role grants organization management access: billing, users, roles, and permissions."
},
"is_built_in": {
"type": "boolean",
"description": "Whether this is one of Close's built-in roles. Distinguishes a built-in from a custom role that shares its name."
},
"permission_count": {
"type": "integer",
"description": "Number of permissions the role grants."
}
},
"additionalProperties": false
}
}
}
}
Original tool metadata
{
"name": "list_roles",
"description": "List the roles that can be assigned in the organization.\n\nCovers Close's built-in roles plus any custom roles the org defines.\nUse this to resolve a role name to its id, or to see which roles\ngrant organization management access.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"is_built_in",
"is_admin",
"permission_count"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"is_admin": {
"type": "boolean",
"description": "Whether the role grants organization management access: billing, users, roles, and permissions."
},
"is_built_in": {
"type": "boolean",
"description": "Whether this is one of Close's built-in roles. Distinguishes a built-in from a custom role that shares its name."
},
"permission_count": {
"type": "integer",
"description": "Number of permissions the role grants."
}
},
"additionalProperties": false
}
}
}
},
"annotations": {
"title": "List Roles",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Add a comment to a commentable object (note, call, opportunity, task,
custom object, etc.).
If the object already has a comment thread, the new comment is appended
to it. Otherwise a new thread is started for the object. Use this tool
for both starting a conversation and replying to an existing one — the
object_id alone determines which.
Comments support @-mentions of users and groups. The body is HTML.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
object_id
ID of the commentable object: an activity ID (acti_..., e.g. a note, call, email, SMS, meeting, or custom activity), an opportunity ID (oppo_...), a task notification ID (task_...), or a custom object ID (custobj_...). One comment thread exists per object; this tool adds to it or creates it if none exists yet.
Clear enough to supply this argument.
body
Body of the comment as Close rich text (HTML). Must be a valid Close rich-text document: wrap the whole content in a single <body> tag and put each line/paragraph in a block-level tag. Supported tags include <p>, <h1>-<h6>, <ul>/<ol> with <li>, <blockquote>, <hr>, <a href=...>, <br>, and inline formatting <strong>/<b>, <em>/<i>, <u>, <s>, <code>, <span>. Emoji and unicode are accepted. Escape literal '&' as '&' and literal '<' as '<' in text content.
To @-mention a user, call the `org_users` tool to look up the target user and embed their `mention_html` value verbatim in the body. To @-mention a group, call the `find_groups` tool to look up the target group and embed their `mention_html` value verbatim in the body. Example: <body><p>Nice work <span data-type="mention" data-id="user_abc123" data-label="Jane Doe" class="mention">@Jane Doe</span> on closing this!</p></body>
Describe the returned fields so an agent can interpret the result.
View output schema
{
"type": "object",
"required": [
"id",
"thread_id",
"body",
"lead_id",
"mentions",
"created_by",
"created_at",
"updated_by",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"lead_id": {
"type": "string"
},
"mentions": {
"type": "array",
"items": {
"type": "string"
}
},
"thread_id": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"created_by": {
"type": "string"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"updated_by": {
"type": "string"
},
"created_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who wrote the comment."
},
"updated_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who last edited the comment."
}
}
}
Original tool metadata
{
"name": "create_comment",
"description": "Add a comment to a commentable object (note, call, opportunity, task,\ncustom object, etc.).\n\nIf the object already has a comment thread, the new comment is appended\nto it. Otherwise a new thread is started for the object. Use this tool\nfor both starting a conversation and replying to an existing one — the\nobject_id alone determines which.\n\nComments support @-mentions of users and groups. The body is HTML.",
"inputSchema": {
"type": "object",
"required": [
"object_id",
"body"
],
"properties": {
"body": {
"type": "string",
"description": "Body of the comment as Close rich text (HTML). Must be a valid Close rich-text document: wrap the whole content in a single <body> tag and put each line/paragraph in a block-level tag. Supported tags include <p>, <h1>-<h6>, <ul>/<ol> with <li>, <blockquote>, <hr>, <a href=...>, <br>, and inline formatting <strong>/<b>, <em>/<i>, <u>, <s>, <code>, <span>. Emoji and unicode are accepted. Escape literal '&' as '&' and literal '<' as '<' in text content.\nTo @-mention a user, call the `org_users` tool to look up the target user and embed their `mention_html` value verbatim in the body. To @-mention a group, call the `find_groups` tool to look up the target group and embed their `mention_html` value verbatim in the body. Example: <body><p>Nice work <span data-type=\"mention\" data-id=\"user_abc123\" data-label=\"Jane Doe\" class=\"mention\">@Jane Doe</span> on closing this!</p></body>"
},
"object_id": {
"type": "string",
"description": "ID of the commentable object: an activity ID (acti_..., e.g. a note, call, email, SMS, meeting, or custom activity), an opportunity ID (oppo_...), a task notification ID (task_...), or a custom object ID (custobj_...). One comment thread exists per object; this tool adds to it or creates it if none exists yet."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"thread_id",
"body",
"lead_id",
"mentions",
"created_by",
"created_at",
"updated_by",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"lead_id": {
"type": "string"
},
"mentions": {
"type": "array",
"items": {
"type": "string"
}
},
"thread_id": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"created_by": {
"type": "string"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"updated_by": {
"type": "string"
},
"created_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who wrote the comment."
},
"updated_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who last edited the comment."
}
}
},
"annotations": {
"title": "Create Comment",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Fetch a single comment by ID.
Returns the comment's rich-text (HTML) body, the thread and lead it
belongs to, its @-mentions, and the resolved author and last-editor
names.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
ID of the comment to fetch.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
AI credit usage for the billing account, broken down by feature.
Reports total credits used and a per-feature breakdown. Credits
are the billing unit for AI features. Usage covers the whole
billing account, not a single organization. Omit `start`/`end`
for the current billing period; the result's `start`/`end` report
the window actually measured.
Explicit ranges must be timezone-aware and span at most 366 days.
Older ranges may return empty or partial data — zero usage for an
old range does not mean no activity. On a rate-limited error,
retry after `retry_after` seconds.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
start
Start of the period. Timezone-aware; seconds are ignored. Provide both start and end, or neither; omit both for the current billing period.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
end
End of the period. Timezone-aware; seconds are ignored. Provide both start and end, or neither; omit both for the current billing period.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"required": [
"start",
"end",
"by_feature",
"total_credits_used"
],
"properties": {
"end": {
"type": "string",
"format": "date-time",
"description": "End of the measured period: the requested end, or the billing period end if the range was omitted. The queried window is minute-aligned."
},
"start": {
"type": "string",
"format": "date-time",
"description": "Start of the measured period: the requested start, or the billing period start if the range was omitted. The queried window is minute-aligned."
},
"by_feature": {
"type": "array",
"items": {
"type": "object",
"required": [
"feature",
"feature_display_name",
"credits_used"
],
"properties": {
"feature": {
"type": "string",
"description": "Feature identifier. One of: activity-autofill, ai-chat, ai-enrich, voice-agent."
},
"credits_used": {
"type": "integer"
},
"feature_display_name": {
"type": "string",
"description": "Human-readable feature name."
}
},
"additionalProperties": false
}
},
"total_credits_used": {
"type": "integer"
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "get_ai_credit_usage",
"description": "AI credit usage for the billing account, broken down by feature.\n\nReports total credits used and a per-feature breakdown. Credits\nare the billing unit for AI features. Usage covers the whole\nbilling account, not a single organization. Omit `start`/`end`\nfor the current billing period; the result's `start`/`end` report\nthe window actually measured.\nExplicit ranges must be timezone-aware and span at most 366 days.\nOlder ranges may return empty or partial data — zero usage for an\nold range does not mean no activity. On a rate-limited error,\nretry after `retry_after` seconds.",
"inputSchema": {
"type": "object",
"properties": {
"end": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "End of the period. Timezone-aware; seconds are ignored. Provide both start and end, or neither; omit both for the current billing period."
},
"start": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "Start of the period. Timezone-aware; seconds are ignored. Provide both start and end, or neither; omit both for the current billing period."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"start",
"end",
"by_feature",
"total_credits_used"
],
"properties": {
"end": {
"type": "string",
"format": "date-time",
"description": "End of the measured period: the requested end, or the billing period end if the range was omitted. The queried window is minute-aligned."
},
"start": {
"type": "string",
"format": "date-time",
"description": "Start of the measured period: the requested start, or the billing period start if the range was omitted. The queried window is minute-aligned."
},
"by_feature": {
"type": "array",
"items": {
"type": "object",
"required": [
"feature",
"feature_display_name",
"credits_used"
],
"properties": {
"feature": {
"type": "string",
"description": "Feature identifier. One of: activity-autofill, ai-chat, ai-enrich, voice-agent."
},
"credits_used": {
"type": "integer"
},
"feature_display_name": {
"type": "string",
"description": "Human-readable feature name."
}
},
"additionalProperties": false
}
},
"total_credits_used": {
"type": "integer"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get AI Credit Usage",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Billing summary for the organization's billing account.
Reports the subscription plan, billing status with the trial end
date, seat counts, and AI usage availability, tier, and credit
allowance for the current billing cycle. Whether the account is on
trial is `status`, not anything under `ai_usage`. Use
`get_ai_credit_usage` for the credits actually used.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"type": "object",
"required": [
"plan_name",
"plan_version",
"status",
"trial_ends_at",
"billable_seat_count",
"free_seat_count",
"ai_usage"
],
"properties": {
"status": {
"enum": [
"paying",
"canceled",
"trial",
"trial_expired",
"fake",
"archived"
],
"type": "string",
"description": "Billing status of the account, and the only signal for whether it is on trial: `trial` is an active trial, `trial_expired` a lapsed one, `paying` a converted account. The rest are inactive. AI usage can be blocked during a trial, so this is independent of `ai_usage.availability_status`."
},
"ai_usage": {
"anyOf": [
{
"type": "object",
"required": [
"availability_status",
"tier_credits",
"free_credits",
"total_credits"
],
"properties": {
"free_credits": {
"type": "integer",
"description": "Credit allowance included at no extra charge for the current billing cycle: the plan's per-seat allowance, or the fixed trial allowance while the account is on trial, plus any bonus credits."
},
"tier_credits": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Monthly credit allowance of the selected paid AI usage tier. 0 means the free tier is selected; null means no tier is selected, including trial and unconfigured states."
},
"total_credits": {
"type": "integer",
"description": "Total credit allowance for the current billing cycle: `free_credits` plus `tier_credits`. Check `availability_status` before describing credits as usable, and use `get_ai_credit_usage` for credits actually used."
},
"availability_status": {
"enum": [
"allowed",
"blocked"
],
"type": "string",
"description": "The state of usage for an account."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "AI usage availability, tier, and total credit allowance. Null only when the account has no AI usage status record."
},
"plan_name": {
"type": "string",
"description": "Name of the subscription plan."
},
"plan_version": {
"type": "integer",
"description": "Version of the plan lineup the plan belongs to; plans with the same name can differ across versions."
},
"trial_ends_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "When the trial ends or ended (UTC). Null if the account never had a trial."
},
"free_seat_count": {
"type": "integer",
"description": "Number of seats granted to the account for free and not charged for."
},
"billable_seat_count": {
"type": "integer",
"description": "Number of seats the account is charged for. Excludes free seats and non-billable users."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "get_billing_summary",
"description": "Billing summary for the organization's billing account.\n\nReports the subscription plan, billing status with the trial end\ndate, seat counts, and AI usage availability, tier, and credit\nallowance for the current billing cycle. Whether the account is on\ntrial is `status`, not anything under `ai_usage`. Use\n`get_ai_credit_usage` for the credits actually used.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"plan_name",
"plan_version",
"status",
"trial_ends_at",
"billable_seat_count",
"free_seat_count",
"ai_usage"
],
"properties": {
"status": {
"enum": [
"paying",
"canceled",
"trial",
"trial_expired",
"fake",
"archived"
],
"type": "string",
"description": "Billing status of the account, and the only signal for whether it is on trial: `trial` is an active trial, `trial_expired` a lapsed one, `paying` a converted account. The rest are inactive. AI usage can be blocked during a trial, so this is independent of `ai_usage.availability_status`."
},
"ai_usage": {
"anyOf": [
{
"type": "object",
"required": [
"availability_status",
"tier_credits",
"free_credits",
"total_credits"
],
"properties": {
"free_credits": {
"type": "integer",
"description": "Credit allowance included at no extra charge for the current billing cycle: the plan's per-seat allowance, or the fixed trial allowance while the account is on trial, plus any bonus credits."
},
"tier_credits": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Monthly credit allowance of the selected paid AI usage tier. 0 means the free tier is selected; null means no tier is selected, including trial and unconfigured states."
},
"total_credits": {
"type": "integer",
"description": "Total credit allowance for the current billing cycle: `free_credits` plus `tier_credits`. Check `availability_status` before describing credits as usable, and use `get_ai_credit_usage` for credits actually used."
},
"availability_status": {
"enum": [
"allowed",
"blocked"
],
"type": "string",
"description": "The state of usage for an account."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "AI usage availability, tier, and total credit allowance. Null only when the account has no AI usage status record."
},
"plan_name": {
"type": "string",
"description": "Name of the subscription plan."
},
"plan_version": {
"type": "integer",
"description": "Version of the plan lineup the plan belongs to; plans with the same name can differ across versions."
},
"trial_ends_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "When the trial ends or ended (UTC). Null if the account never had a trial."
},
"free_seat_count": {
"type": "integer",
"description": "Number of seats granted to the account for free and not charged for."
},
"billable_seat_count": {
"type": "integer",
"description": "Number of seats the account is charged for. Excludes free seats and non-billable users."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get Billing Summary",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "delete_lead_status",
"description": "Permanently delete a lead status.\n\nCannot delete if it's the last lead status in the organization or there are\nleads currently using this status.",
"inputSchema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the lead status to delete"
}
}
},
"annotations": {
"title": "Delete Lead Status",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Render an email template for a lead, including any template variables.
Body HTML already contains the user's email signature, denoted with a
`<span data-system-generated="signature">` tag. Leave this tag intact
or the signature could get duplicated later.
Describe the returned information so the agent knows whether it will answer the request.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
ID of the email template to render
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
lead_id
ID of the lead to render the template for
Clear enough to supply this argument.
contact_id
ID of the contact to render the template for. Must belong to the given lead.
Explain what happens when this optional value is omitted.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Update an existing email template.
Only fields that are provided and not None will be updated.
Handling of attachments and unsubscribe links via this tool is currently unsupported.
Email template body should be HTML formatted.
Use template tags as placeholders, for example:
{{ organization.name }} to refer to the sender's organization name.
{{ user.first_name }} {{ user.last_name }} {{ user.email }} {{ user.phone }} to refer to the user sending the email.
{{ lead.display_name }} to refer to the lead name (recipient's name/company).
{{ contact.first_name }} {{ contact.last_name }} to refer to the recipient.
Describe the returned information so the agent knows whether it will answer the request.
Inputs6/100
1 of 8 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
id
ID of the email template to update
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
name
Not provided
Missing description. Explain what this value means and how to supply it.
subject
Not provided
Missing description. Explain what this value means and how to supply it.
cc
Not provided
Missing description. Explain what this value means and how to supply it.
bcc
Not provided
Missing description. Explain what this value means and how to supply it.
body
Not provided
Missing description. Explain what this value means and how to supply it.
is_shared
Not provided
Missing description. Explain what this value means and how to supply it.
is_archived
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description73/100
Create a new email template.
Handling of attachments and unsubscribe links via this tool is currently unsupported.
Email template body should be HTML formatted.
Use template tags as placeholders, for example:
{{ organization.name }} to refer to the sender's organization name.
{{ user.first_name }} {{ user.last_name }} {{ user.email }} {{ user.phone }} to refer to the user sending the email.
{{ lead.display_name }} to refer to the lead name (recipient's name/company).
{{ contact.first_name }} {{ contact.last_name }} to refer to the recipient.
Describe the returned information so the agent knows whether it will answer the request.
Inputs17/100
1 of 6 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
name
Not provided
Missing description. Explain what this value means and how to supply it.
subject
Not provided
Missing description. Explain what this value means and how to supply it.
cc
Not provided
Missing description. Explain what this value means and how to supply it.
bcc
Not provided
Missing description. Explain what this value means and how to supply it.
body
Not provided
Missing description. Explain what this value means and how to supply it.
is_shared
Share this template with the organization (required for use in workflows)
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
Update an existing SMS template.
Only fields that are provided will be updated. Fields that are not provided will remain unchanged.
Handling of attachments via this tool is currently unsupported.
Use template tags as placeholders, for example:
{{ organization.name }} to refer to the sender's organization name.
{{ user.first_name }} {{ user.last_name }} {{ user.email }} {{ user.phone }} to refer to the user sending the message.
{{ lead.display_name }} to refer to the lead name (recipient's name/company).
{{ contact.first_name }} {{ contact.last_name }} to refer to the recipient.
Describe the returned information so the agent knows whether it will answer the request.
Inputs10/100
1 of 5 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
id
ID of the SMS template to update
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
name
Not provided
Missing description. Explain what this value means and how to supply it.
text
Not provided
Missing description. Explain what this value means and how to supply it.
is_shared
Not provided
Missing description. Explain what this value means and how to supply it.
is_archived
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description71/100
Create a new SMS template.
Handling of attachments via this tool is currently unsupported.
Use template tags as placeholders, for example:
{{ organization.name }} to refer to the sender's organization name.
{{ user.first_name }} {{ user.last_name }} {{ user.email }} {{ user.phone }} to refer to the user sending the message.
{{ lead.display_name }} to refer to the lead name (recipient's name/company).
{{ contact.first_name }} {{ contact.last_name }} to refer to the recipient.
Describe the returned information so the agent knows whether it will answer the request.
Inputs33/100
1 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
name
Not provided
Missing description. Explain what this value means and how to supply it.
text
Not provided
Missing description. Explain what this value means and how to supply it.
is_shared
Share this template with the organization (required for use in workflows)
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Permanently delete an existing lead (company) by ID including all of its
addresses, contacts, opportunities, tasks, and activities.
ONLY call this if the user specifically instructed you to delete the lead,
and you confirmed what the deletion will entail and that it cannot be
reversed.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
ID of the lead to delete
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "delete_lead",
"description": "Permanently delete an existing lead (company) by ID including all of its\naddresses, contacts, opportunities, tasks, and activities.\n\nONLY call this if the user specifically instructed you to delete the lead,\nand you confirmed what the deletion will entail and that it cannot be\nreversed.",
"inputSchema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the lead to delete"
}
}
},
"annotations": {
"title": "Delete Lead",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Merge two leads in the background.
The destination lead is kept, and the source lead is deleted when the merge
finishes. This cannot be undone.
Before merging suspected duplicates, show the leads, why they appear to
match, which lead will be kept, and any conflicting information. Ask the
user to approve the specific pair or group unless they already authorized
it.
Check `fetch_lead_merge` before reporting completion, retrying after an
error, or attempting to merge either lead again.
The description explains the capability, when to use it, and what to expect.
Inputs91/100
Input documentation gives an agent enough context to populate the arguments.
source_lead_id
Lead to merge from and delete after completion
Clear enough to supply this argument.
destination_lead_id
Lead to keep; its values generally prevail in conflicts
Clear enough to supply this argument.
match_names_only
Use more aggressive name-only matching for contacts and custom objects. Leave false unless explicitly requested.
{
"name": "merge_leads",
"description": "Merge two leads in the background.\n\nThe destination lead is kept, and the source lead is deleted when the merge\nfinishes. This cannot be undone.\n\nBefore merging suspected duplicates, show the leads, why they appear to\nmatch, which lead will be kept, and any conflicting information. Ask the\nuser to approve the specific pair or group unless they already authorized\nit.\n\nCheck `fetch_lead_merge` before reporting completion, retrying after an\nerror, or attempting to merge either lead again.",
"inputSchema": {
"type": "object",
"required": [
"source_lead_id",
"destination_lead_id"
],
"properties": {
"source_lead_id": {
"type": "string",
"minLength": 1,
"description": "Lead to merge from and delete after completion"
},
"match_names_only": {
"type": "boolean",
"default": false,
"description": "Use more aggressive name-only matching for contacts and custom objects. Leave false unless explicitly requested."
},
"destination_lead_id": {
"type": "string",
"minLength": 1,
"description": "Lead to keep; its values generally prevail in conflicts"
}
}
},
"outputSchema": {
"type": "object",
"required": [
"source_lead_id",
"destination_lead_id",
"merge_token",
"lead_merge_activity_id"
],
"properties": {
"merge_token": {
"type": "string"
},
"source_lead_id": {
"type": "string"
},
"destination_lead_id": {
"type": "string"
},
"lead_merge_activity_id": {
"type": "string",
"description": "Destination LeadMerge activity ID; use fetch_lead_merge to verify completion"
}
}
},
"annotations": {
"title": "Merge Leads",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description63/100
List lead smart views (saved searches).
Describe the concrete operation and its scope instead of restating the tool name.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filter
Filter to show only pinned smart views (those shown in the sidebar), or all available smart views. When the user asks about smart views you should filter for pinned smart views unless the user is requesting to see all views or searches by name.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
name_search
Smart view name case-insensitive contains search. When using name search you should filter by all smart views.
Clear enough to supply this argument.
cursor
Pagination cursor, give only when more results are requested.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Save a search as a smart view (saved search).
Pass the ID of a search result that lists one object type: leads,
contacts, opportunities, or one kind of activity. The smart view gets
that search's filters, sort, and columns, so it lists exactly what was
previewed. Confirm the name and criteria with the user before creating
the view.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
query_id
ID of the search to save: the `query_id` of a `list_objects`, `search`, or `aggregate_objects` result, or the `search_id` of a `search` or `lead_search` result. The search must list one object type.
Clear enough to supply this argument.
name
Name for the new smart view. Defaults to the name suggested with the search.
Clear enough to supply this argument.
description
Optional description for the smart view
Clear enough to supply this argument.
share_with_org
Share the smart view with the whole organization. By default it is only visible to the user.
{
"name": "create_smart_view",
"description": "Save a search as a smart view (saved search).\n\nPass the ID of a search result that lists one object type: leads,\ncontacts, opportunities, or one kind of activity. The smart view gets\nthat search's filters, sort, and columns, so it lists exactly what was\npreviewed. Confirm the name and criteria with the user before creating\nthe view.",
"inputSchema": {
"type": "object",
"required": [
"query_id"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name for the new smart view. Defaults to the name suggested with the search."
},
"query_id": {
"type": "string",
"description": "ID of the search to save: the `query_id` of a `list_objects`, `search`, or `aggregate_objects` result, or the `search_id` of a `search` or `lead_search` result. The search must list one object type."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional description for the smart view"
},
"share_with_org": {
"type": "boolean",
"default": false,
"description": "Share the smart view with the whole organization. By default it is only visible to the user."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"name",
"description",
"type",
"owner_id",
"url",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"type": {
"enum": [
"lead",
"contact",
"opportunity",
"call",
"email",
"sms",
"meeting",
"note",
"whatsapp_message",
"custom_activity",
"form_submission"
],
"type": "string"
},
"owner_id": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"description": {
"type": "string"
}
}
},
"annotations": {
"title": "Create Smart View",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description75/100
Replace the smart views pinned to the user's sidebar and their order.
Use this tool only when the user asks to reorder pinned smart views or to
change many of them at once. Otherwise, use `pin_smart_view` or
`unpin_smart_view`.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
ids
IDs of all smart views to pin, in sidebar order with the top first. Smart views that are not in the list are unpinned. An empty list unpins all smart views. Get the current list from find_smart_views with pinned_only and no other filters, and read every page.
{
"name": "set_pinned_smart_views",
"description": "Replace the smart views pinned to the user's sidebar and their order.\n\nUse this tool only when the user asks to reorder pinned smart views or to\nchange many of them at once. Otherwise, use `pin_smart_view` or\n`unpin_smart_view`.",
"inputSchema": {
"type": "object",
"required": [
"ids"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 600,
"description": "IDs of all smart views to pin, in sidebar order with the top first. Smart views that are not in the list are unpinned. An empty list unpins all smart views. Get the current list from find_smart_views with pinned_only and no other filters, and read every page."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"pinned_count"
],
"properties": {
"pinned_count": {
"type": "integer"
}
}
},
"annotations": {
"title": "Set Pinned Smart Views",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description76/100
Update an existing contact.
You can update a contact's name, title, email addresses, phone numbers, and URLs.
Only fields that are provided will be updated.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs77/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
custom_fields › items › id
ID of the custom field
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
custom_fields › items › value
Value to set on this object for the custom field. Pass null to clear the value.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
id
ID of the contact to update
Clear enough to supply this argument.
name
Name of the contact
Explain what happens when this optional value is omitted.
title
Job title of the contact
Explain what happens when this optional value is omitted.
emails › anyOf › 0 › items › type
Type of email
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
emails › anyOf › 0 › items › email
Email address
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
phones › anyOf › 0 › items › type
Type of phone
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
phones › anyOf › 0 › items › phone
Phone number in international format, e.g. +16505551234
Clear enough to supply this argument.
urls › anyOf › 0 › items › type
Type of URL
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
urls › anyOf › 0 › items › url
URL
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Permanently delete an existing contact.
This will remove the contact from its lead including its email addresses,
phone numbers, and URLs will be removed. Activities on the lead are not
affected.
This action cannot be undone.
ONLY call this if the user specifically instructed you to delete the contact.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
ID of the contact to delete
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "delete_contact",
"description": "Permanently delete an existing contact.\n\nThis will remove the contact from its lead including its email addresses,\nphone numbers, and URLs will be removed. Activities on the lead are not\naffected.\n\nThis action cannot be undone.\n\nONLY call this if the user specifically instructed you to delete the contact.",
"inputSchema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the contact to delete"
}
}
},
"annotations": {
"title": "Delete Contact",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description69/100
Create a new note on a lead.
A note is a text-based activity attached to a lead. At least one
of note (plaintext) or note_html (rich text) must be provided.
Describe the returned information so the agent knows whether it will answer the request.
Inputs78/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
lead_id
ID of the lead this note belongs to
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
note
Plaintext note content
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
note_html
Rich-text (HTML) note content
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
title
Title of the note
Clear enough to supply this argument.
contact_id
ID of the contact to associate with the note
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
user_id
ID of the user to attribute the note to (defaults to caller)
Clear enough to supply this argument.
pinned
Whether to pin the note to the top of the lead
Clear enough to supply this argument.
activity_at
When the note activity occurred
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description72/100
Update an existing note.
Only fields that are provided will be updated. Note content is
provided as rich text (HTML) via note_html; the plaintext note is
automatically derived.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
id
ID of the note to update
Clear enough to supply this argument.
note_html
Updated note content as Close rich text (HTML). Must be a valid Close rich-text document: wrap the whole content in a single <body> tag and put each line/paragraph in a block-level tag. Supported tags include <p>, <h1>-<h6>, <ul>/<ol> with <li>, <blockquote>, <hr>, <a href=...>, <br>, and inline formatting <strong>/<b>, <em>/<i>, <u>, <s>, <code>, <span>. Escape literal ampersands as '&'. Example: <body><p>Spoke with <strong>Jane</strong> about pricing.</p><ul><li>Wants a demo</li><li>Budget approved</li></ul></body>
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
title
Title of the note. Pass an empty string to remove the existing title.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
contact_id
ID of the contact to associate with the note. Pass 'clear' to remove the existing contact.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
pinned
Whether to pin the note to the top of the lead
Explain what happens when this optional value is omitted.
activity_at
When the note activity occurred
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Get the status of a lead merge using `lead_merge_activity_id` from
`merge_leads`.
`pending` and `in_progress` mean unfinished. `completed` means finished.
For `errored`, read `error_message`. Avoid repeated checks in quick
succession or retrying the merge without checking its status.
Describe the returned information so the agent knows whether it will answer the request.
Inputs88/100
Input documentation gives an agent enough context to populate the arguments.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Create a draft email on a lead.
The email is saved as an unsent draft for the user to review, edit, and
send from Close; it is never sent automatically. Provide the body as
Close rich text (HTML) via body_html; the sender's saved email signature
is appended automatically. To create a reply in an existing thread,
provide the ID of the email being replied to via in_reply_to_id.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
lead_id
ID of the lead this draft email belongs to
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
in_reply_to_id
ID of the email this draft replies to. The draft joins that email's thread.
Clear enough to supply this argument.
contact_id
ID of the contact this draft email is addressed to
Clear enough to supply this argument.
subject
Subject line of the email
Clear enough to supply this argument.
body_html
Draft body as Close rich text (HTML). Wrap the whole content in a single <body> tag and put each line/paragraph in a block-level tag. Supported tags include <p>, <h1>-<h6>, <ul>/<ol> with <li>, <blockquote>, <hr>, <a href=...>, <br>, and inline formatting <strong>/<b>, <em>/<i>, <u>, <s>, <code>, <span>. Escape literal ampersands as '&'. Example: <body><p>Hi <strong>Jane</strong>,</p><p>Following up on our call.</p></body>. Do not include a signature block (name, title, company, contact details); the sender's saved email signature is appended automatically. A short closing line such as 'Best,' is fine.
Clear enough to supply this argument.
body_text
Plaintext body content. Prefer body_html; if only one of body_html/body_text is provided the other is derived automatically.
Clear enough to supply this argument.
to
List of recipient email addresses
Clear enough to supply this argument.
cc
List of CC email addresses
Clear enough to supply this argument.
bcc
List of BCC email addresses
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sender
Email address of a connected sending identity, including aliases. Must match an available sender for the current user.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Update an existing draft email.
Only draft emails can be updated; sent or scheduled emails are rejected.
Only fields that are provided are changed. When the body is replaced the
sender's saved email signature is appended again. This never sends the
email.
The description explains the capability, when to use it, and what to expect.
Inputs89/100
Explain what happens when this optional value is omitted.
id
ID of the draft email to update
Clear enough to supply this argument.
contact_id
ID of the contact this draft email is addressed to
Explain what happens when this optional value is omitted.
subject
Subject line of the email
Clear enough to supply this argument.
body_html
Draft body as Close rich text (HTML). Wrap the whole content in a single <body> tag and put each line/paragraph in a block-level tag. Supported tags include <p>, <h1>-<h6>, <ul>/<ol> with <li>, <blockquote>, <hr>, <a href=...>, <br>, and inline formatting <strong>/<b>, <em>/<i>, <u>, <s>, <code>, <span>. Escape literal ampersands as '&'. Example: <body><p>Hi <strong>Jane</strong>,</p><p>Following up on our call.</p></body>. Do not include a signature block (name, title, company, contact details); the sender's saved email signature is appended automatically. A short closing line such as 'Best,' is fine.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
body_text
Plaintext body content. Prefer body_html; if only one of body_html/body_text is provided the other is derived automatically.
Clear enough to supply this argument.
to
List of recipient email addresses
Clear enough to supply this argument.
cc
List of CC email addresses
Clear enough to supply this argument.
bcc
List of BCC email addresses
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sender
Email address of a connected sending identity, including aliases. Must match an available sender for the current user.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description69/100
Fetch a single email activity by ID.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
id
The ID of the email to fetch.
Clear enough to supply this argument.
body_format
Which representation of the body to return. Request 'html' to preserve formatting, e.g. when quoting the email in a reply.
Clear enough to supply this argument.
include_quoted_chain
Whether to include the quoted chain of earlier replies if present. May be necessary if the author replied inline or if quoting the full body when generating a reply.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Fetch a single Email Thread by ID.
Returns thread metadata plus its most recent emails, newest first, with
plaintext bodies. Returns only IDs for older messages.
The description explains the capability, when to use it, and what to expect.
Inputs87/100
Clarify ID sources, units, or usage conventions not already expressed in the schema.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Fetch a meeting's Notetaker transcript(s) by meeting activity ID.
Returns the meeting's speaker breakdown, summary, and full
speaker-labeled transcript text. Only covers Notetaker (meeting)
transcripts; call transcripts are served by `fetch_call`.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Input documentation gives an agent enough context to populate the arguments.
id
The ID of the meeting activity to fetch transcripts for.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Perform a simple lead search and return the initial set of results.
Use this to retrieve all leads, most recent leads, search leads by
keyword, or filter by lead status and smart view. For more complex
searches use the `search` tool instead.
Leads will be returned by last updated first.
The description explains the capability, when to use it, and what to expect.
Inputs55/100
Explain the meaning of this value, not just its name.
name
Search lead name or contact name
Clear enough to supply this argument.
full_text
Full text search
Explain the meaning of this value, not just its name.
lead_status_id
Filter by lead status
Explain the meaning of this value, not just its name.
smart_view_id
Filter by smart view
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description69/100
Paginate a search to retrieve more results.
Provide exactly one of:
- `search_id`: a `share_*` id from a previous search or shared entry, or
- `smart_view_id`: a `save_*` Smart View (saved search) id the user is
viewing.
Describe the returned information so the agent knows whether it will answer the request.
Inputs67/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
search_id
Shared-entry/search id (share_*) to paginate
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
smart_view_id
Smart View (saved search) id (save_*) to paginate
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
Pagination cursor
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
Search for activities. Results are returned ordered by date descending.
Examples:
- To list activities on a lead, use the lead_ids filter.
- To list conversations, filter for calls and meetings.
- Filter for Email to get individual messages, or EmailThread to get one
result per conversation. An unfiltered search returns both.
Describe the returned information so the agent knows whether it will answer the request.
Inputs50/100
6 of 11 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
activity_types
Not provided
Missing description. Explain what this value means and how to supply it.
user_ids
Not provided
Missing description. Explain what this value means and how to supply it.
contact_ids
Not provided
Missing description. Explain what this value means and how to supply it.
activity_at › anyOf › 0 › start
Start of the date range (inclusive)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
activity_at › anyOf › 0 › end
End of the date range (exclusive)
Clear enough to supply this argument.
lead_ids
Not provided
Missing description. Explain what this value means and how to supply it.
lead_smart_view_ids
Not provided
Missing description. Explain what this value means and how to supply it.
agent_config_ids
Filter by voice agent config IDs. Matches Call, Email, and SMS activities that carry an agent_config_id; other activity types are filtered out implicitly because the field is not indexed for them.
Clear enough to supply this argument.
direction
Filter activities by direction (inbound = received by the user, outbound = sent by the user). Applies to Call, SMS, Email, and WhatsApp activities; activity types that have no direction (e.g. Note, Task) are excluded when this filter is set.
Clear enough to supply this argument.
call_status
Filter calls by status (e.g. completed, no-answer, busy). Only meaningful when activity_types includes Call; a no-op unless Call is searched. Other activity types use different status vocabularies, so they never match these values and are effectively excluded.
Clear enough to supply this argument.
cursor
Pagination cursor, give only when more results are requested.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Name the specific action and subject instead of using a generic label such as ‘manage’ or ‘tool’.
Description96/100
Perform a natural language search for leads or contacts.
If a more specific search tool (like lead_search or activity_search)
satisfies the request, use that tool instead.
You can reference related objects like activities (such as calls, emails,
meetings, notes, custom activities, etc.), opportunities, tasks as long as
they are part of a lead query.
Example queries:
- leads not contacted in the past week
- leads assigned to me with uncompleted tasks
- leads with an active opportunity over $500
- contacts with CTO title
Each returned result will contain a title label, preview text, object ID,
and URL.
The initial set of results, total count of all results, and a URL to open
the results in Close is returned. To retrieve more results, use the
returned cursor and call the paginate_search tool using the cursor and
search ID returned in this response.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 1 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
query
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description74/100
Search Close product documentation and knowledge base for relevant information.
Use this tool when users ask about:
- How to use specific Close features
- Close API documentation and integration
- Workflow automation and best practices
- Product capabilities and limitations
- Setup and configuration guidance
Example queries:
- "How do I set up automated lead assignment?"
- "What are Close's API rate limits?"
- "How to create custom fields in Close?"
- "Best practices for email templates in Close"
Describe the returned information so the agent knows whether it will answer the request.
Inputs89/100
Input documentation gives an agent enough context to populate the arguments.
query
Natural language query to search Close product documentation and knowledge
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"excerpt"
],
"properties": {
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "URL of the documentation section the excerpt was sourced from"
},
"excerpt": {
"type": "string",
"description": "Relevant excerpt from Close documentation or knowledge base"
}
}
},
"description": "Relevant excerpts paired with their sources"
}
}
}
Original tool metadata
{
"name": "close_product_knowledge_search",
"description": "Search Close product documentation and knowledge base for relevant information.\n\nUse this tool when users ask about:\n- How to use specific Close features\n- Close API documentation and integration\n- Workflow automation and best practices\n- Product capabilities and limitations\n- Setup and configuration guidance\n\nExample queries:\n- \"How do I set up automated lead assignment?\"\n- \"What are Close's API rate limits?\"\n- \"How to create custom fields in Close?\"\n- \"Best practices for email templates in Close\"",
"inputSchema": {
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "Natural language query to search Close product documentation and knowledge"
}
}
},
"outputSchema": {
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"excerpt"
],
"properties": {
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "URL of the documentation section the excerpt was sourced from"
},
"excerpt": {
"type": "string",
"description": "Relevant excerpt from Close documentation or knowledge base"
}
}
},
"description": "Relevant excerpts paired with their sources"
}
}
},
"annotations": {
"title": "Close Product Knowledge Search",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Search and list CRM objects (leads, contacts, opportunities, tasks, activities and more) with a structured query of filters, columns and sort.
Each preview row has the object's id and type, and `fields`: one value per requested column, in the order of `columns`. A column that doesn't apply to the row's type is an empty string. Referenced users, statuses and objects are prefixed IDs (`user:`, `status:`, `ref:`); fetch_objects returns the full objects.
For the next page, pass only the result's `next_cursor` as `cursor`; the page comes back in the same columns. To answer "how many" or "how much", use aggregate_objects instead of paging through the list. Nested object types have no IDs and can't be listed; they only filter their parents, like leads by address.
The description explains the capability, when to use it, and what to expect.
Inputs25/100
38 of 119 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
include_types
Object types to include in search. Required unless `cursor` is set. Always include a type here, even if other filters are present.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
columns
Fields to include in results (e.g., ["name", "created_at"]). Do not include "id" as a column, it is always included.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › SearchFilter › oneOf › 0 › filter_type
Not provided
Missing description. Explain what this value means and how to supply it.
$defs › SearchFilter › oneOf › 0 › field
Text field name to search in (e.g., 'name', 'description'). If not set, searches all text fields on that object.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › SearchFilter › oneOf › 0 › text
Non-empty text to search for. If you have no value to filter on, omit this filter entirely rather than passing an empty string.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › SearchFilter › oneOf › 0 › mode
How to match the text
Clear enough to supply this argument.
$defs › SearchFilter › oneOf › 1 › filter_type
Not provided
Missing description. Explain what this value means and how to supply it.
$defs › SearchFilter › oneOf › 1 › field
Field name to check (e.g., 'phone', 'primary_email', 'cf_xyz')
Clear enough to supply this argument.
$defs › SearchFilter › oneOf › 1 › is_set
True matches objects where the field has any value; False matches objects where the field is blank/unset.
Clear enough to supply this argument.
$defs › SearchFilter › oneOf › 2 › filter_type
Not provided
Missing description. Explain what this value means and how to supply it.
$defs › SearchFilter › oneOf › 2 › field
Field name to filter by (e.g., 'created_by')
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › SearchFilter › oneOf › 2 › reference_type
Type of the IDs when it differs from the field's own type and the IDs expand into it: 'pipeline' on a status field matches every status of those pipelines, 'user_or_group' on a user field matches the members of those groups, 'any_agent' / 'user_or_any_agent' on user_or_any_agent select AI agents.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › SearchFilter › oneOf › 2 › references
List of object IDs to match. On user fields, use "CURRENT_USER" for the user you are talking to ("my leads", "calls I made") instead of their ID, so saved results follow whoever opens them.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › SearchFilter › oneOf › 3 › filter_type
Not provided
Missing description. Explain what this value means and how to supply it.
$defs › SearchFilter › oneOf › 3 › field
Field name to filter by (e.g., 'is_archived')
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › SearchFilter › oneOf › 3 › value
Boolean value to match
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › SearchFilter › oneOf › 4 › filter_type
Not provided
Missing description. Explain what this value means and how to supply it.
$defs › SearchFilter › oneOf › 4 › field
Date field name to filter by (e.g., 'updated_at')
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
By default, avoid using timezones, which means user-local time: 2020-01-01T09:00:00.
Use UTC or other timezones only when explicitly requested by the user, like 2020-01-01T12:00:00Z.
You can use dates in user-local timezone without specifying time like 2020-01-01 too.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Missing description. Explain what this value means and how to supply it.
$defs › SearchFilter › oneOf › 4 › before › anyOf › 0 › oneOf › 0 › value
By default, avoid using timezones, which means user-local time: 2020-01-01T09:00:00.
Use UTC or other timezones only when explicitly requested by the user, like 2020-01-01T12:00:00Z.
You can use dates in user-local timezone without specifying time like 2020-01-01 too.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
By default, avoid using timezones, which means user-local time: 2020-01-01T09:00:00.
Use UTC or other timezones only when explicitly requested by the user, like 2020-01-01T12:00:00Z.
You can use dates in user-local timezone without specifying time like 2020-01-01 too.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Missing description. Explain what this value means and how to supply it.
$defs › SearchFilter › oneOf › 13 › before › anyOf › 0 › oneOf › 0 › value
By default, avoid using timezones, which means user-local time: 2020-01-01T09:00:00.
Use UTC or other timezones only when explicitly requested by the user, like 2020-01-01T12:00:00Z.
You can use dates in user-local timezone without specifying time like 2020-01-01 too.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
For offsets in days or longer, snap now to the start or end of today first. Use "end" for an inclusive end like "through 3 days from now".
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › AndSearchFilter › filter_type
Not provided
Missing description. Explain what this value means and how to supply it.
$defs › OrSearchFilter › filter_type
Not provided
Missing description. Explain what this value means and how to supply it.
$defs › NotSearchFilter › filter_type
Not provided
Missing description. Explain what this value means and how to supply it.
sort › anyOf › 0 › items › field
Not provided
Missing description. Explain what this value means and how to supply it.
sort › anyOf › 0 › items › direction
Not provided
Missing description. Explain what this value means and how to supply it.
limit
Optional limit on the number of results to return, 30 or less. If not specified, returned results will still be limited to 30. If you need to analyze more data, use aggregate_objects tool.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
name
Short title describing this list, e.g. "Hot leads in California". Used as the default name when the user saves the results as a Smart View.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
Continue a previous list_objects call: pass the `next_cursor` it returned, and nothing else. The next page comes back in the same columns.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description69/100
Count, sum, average or otherwise aggregate CRM objects, grouped by up to two fields and optionally by time buckets. Takes the same object types and filters as list_objects.
Describe the returned information so the agent knows whether it will answer the request.
Inputs21/100
37 of 138 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
include_types
Object types to include in aggregation
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › SearchFilter › oneOf › 0 › filter_type
Not provided
Missing description. Explain what this value means and how to supply it.
$defs › SearchFilter › oneOf › 0 › field
Text field name to search in (e.g., 'name', 'description'). If not set, searches all text fields on that object.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › SearchFilter › oneOf › 0 › text
Non-empty text to search for. If you have no value to filter on, omit this filter entirely rather than passing an empty string.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › SearchFilter › oneOf › 0 › mode
How to match the text
Clear enough to supply this argument.
$defs › SearchFilter › oneOf › 1 › filter_type
Not provided
Missing description. Explain what this value means and how to supply it.
$defs › SearchFilter › oneOf › 1 › field
Field name to check (e.g., 'phone', 'primary_email', 'cf_xyz')
Clear enough to supply this argument.
$defs › SearchFilter › oneOf › 1 › is_set
True matches objects where the field has any value; False matches objects where the field is blank/unset.
Clear enough to supply this argument.
$defs › SearchFilter › oneOf › 2 › filter_type
Not provided
Missing description. Explain what this value means and how to supply it.
$defs › SearchFilter › oneOf › 2 › field
Field name to filter by (e.g., 'created_by')
Clear enough to supply this argument.
$defs › SearchFilter › oneOf › 2 › reference_type
Type of the IDs when it differs from the field's own type and the IDs expand into it: 'pipeline' on a status field matches every status of those pipelines, 'user_or_group' on a user field matches the members of those groups, 'any_agent' / 'user_or_any_agent' on user_or_any_agent select AI agents.
Clear enough to supply this argument.
$defs › SearchFilter › oneOf › 2 › references
List of object IDs to match. On user fields, use "CURRENT_USER" for the user you are talking to ("my leads", "calls I made") instead of their ID, so saved results follow whoever opens them.
Clear enough to supply this argument.
$defs › SearchFilter › oneOf › 3 › filter_type
Not provided
Missing description. Explain what this value means and how to supply it.
$defs › SearchFilter › oneOf › 3 › field
Field name to filter by (e.g., 'is_archived')
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › SearchFilter › oneOf › 3 › value
Boolean value to match
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › SearchFilter › oneOf › 4 › filter_type
Not provided
Missing description. Explain what this value means and how to supply it.
$defs › SearchFilter › oneOf › 4 › field
Date field name to filter by (e.g., 'updated_at')
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
By default, avoid using timezones, which means user-local time: 2020-01-01T09:00:00.
Use UTC or other timezones only when explicitly requested by the user, like 2020-01-01T12:00:00Z.
You can use dates in user-local timezone without specifying time like 2020-01-01 too.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Missing description. Explain what this value means and how to supply it.
$defs › SearchFilter › oneOf › 4 › before › anyOf › 0 › oneOf › 0 › value
By default, avoid using timezones, which means user-local time: 2020-01-01T09:00:00.
Use UTC or other timezones only when explicitly requested by the user, like 2020-01-01T12:00:00Z.
You can use dates in user-local timezone without specifying time like 2020-01-01 too.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
By default, avoid using timezones, which means user-local time: 2020-01-01T09:00:00.
Use UTC or other timezones only when explicitly requested by the user, like 2020-01-01T12:00:00Z.
You can use dates in user-local timezone without specifying time like 2020-01-01 too.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Missing description. Explain what this value means and how to supply it.
$defs › SearchFilter › oneOf › 13 › before › anyOf › 0 › oneOf › 0 › value
By default, avoid using timezones, which means user-local time: 2020-01-01T09:00:00.
Use UTC or other timezones only when explicitly requested by the user, like 2020-01-01T12:00:00Z.
You can use dates in user-local timezone without specifying time like 2020-01-01 too.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Missing description. Explain what this value means and how to supply it.
display_mode
Display mode for the results. Use 'line_chart' when user asks about data by days, months, hours, or other time intervals as it's better fit for time series data. Use 'bar_chart' for charting histograms or data by category.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
List the fields of one object type for list_objects and aggregate_objects: built-in fields, smart fields (num_*, last_*, first_*, time_to_*, ...) and the organization's custom fields, with their value types, enum values and choices.
Call it when the field you need is not in the field list of your instructions, to get the exact option strings of a choices custom field, after a validation error names an unknown field, or before concluding that nothing matches a question. Narrow with name_contains: words of the field name, of its display name, or of one of its enum values or choices. When no field has every word, the closest fields are returned and `status` says so.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
object_type
Object type whose fields to describe.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
name_contains
Words to look for in the field name, its display name, or its enum values and choices, e.g. 'number of calls' or 'decision maker'. Case and punctuation do not matter; every word must occur. Omit to list every field of the type.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"required": [
"object_type",
"fields",
"total"
],
"properties": {
"total": {
"type": "integer",
"description": "Number of fields found, before the listing cap."
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"kind",
"type",
"sortable",
"column"
],
"properties": {
"kind": {
"enum": [
"builtin",
"computed",
"custom"
],
"type": "string"
},
"name": {
"type": "string",
"description": "Use this as `field` in filters, sorts, columns and aggregations."
},
"type": {
"type": "string",
"description": "Value type. `enum` fields take a term filter with one of `values`."
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Display name of the field, when it says more than the name."
},
"column": {
"type": "boolean",
"description": "Whether list_objects can show the field as a column."
},
"values": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"default": null,
"description": "Enum values, or the choices of a choices custom field."
},
"sortable": {
"type": "boolean"
},
"accepts_multiple_values": {
"type": "boolean",
"default": false
}
}
}
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"object_type": {
"type": "string"
}
}
}
Original tool metadata
{
"name": "describe_fields",
"description": "List the fields of one object type for list_objects and aggregate_objects: built-in fields, smart fields (num_*, last_*, first_*, time_to_*, ...) and the organization's custom fields, with their value types, enum values and choices.\n\nCall it when the field you need is not in the field list of your instructions, to get the exact option strings of a choices custom field, after a validation error names an unknown field, or before concluding that nothing matches a question. Narrow with name_contains: words of the field name, of its display name, or of one of its enum values or choices. When no field has every word, the closest fields are returned and `status` says so.",
"inputSchema": {
"type": "object",
"required": [
"object_type"
],
"properties": {
"object_type": {
"anyOf": [
{
"enum": [
"lead",
"contact",
"opportunity",
"task",
"email",
"call",
"note",
"meeting",
"sms",
"whatsapp",
"custom_activity",
"custom_object",
"sequence_subscription",
"lead_status_change",
"opportunity_status_change",
"activity.created",
"activity.email_thread",
"activity.form_submission",
"activity.import_update",
"activity.lead_merge",
"activity.task_completed",
"task.answered_detached_call",
"task.draft_email",
"task.draft_sms",
"task.email_followup",
"task.incoming_email",
"task.incoming_sms",
"task.incoming_whatsapp_message",
"task.lead_suggestion_incoming_email",
"task.missed_call",
"task.opportunities_awaiting_action",
"task.opportunity_due",
"task.outbound_call",
"task.voicemail",
"subscription_history",
"lead_file",
"lead_summary",
"comment_thread",
"comment",
"agent_call_grade"
],
"type": "string"
},
{
"enum": [
"address",
"contact_email",
"contact_phone",
"contact_url"
],
"type": "string"
}
],
"description": "Object type whose fields to describe."
},
"name_contains": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Words to look for in the field name, its display name, or its enum values and choices, e.g. 'number of calls' or 'decision maker'. Case and punctuation do not matter; every word must occur. Omit to list every field of the type."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"object_type",
"fields",
"total"
],
"properties": {
"total": {
"type": "integer",
"description": "Number of fields found, before the listing cap."
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"kind",
"type",
"sortable",
"column"
],
"properties": {
"kind": {
"enum": [
"builtin",
"computed",
"custom"
],
"type": "string"
},
"name": {
"type": "string",
"description": "Use this as `field` in filters, sorts, columns and aggregations."
},
"type": {
"type": "string",
"description": "Value type. `enum` fields take a term filter with one of `values`."
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Display name of the field, when it says more than the name."
},
"column": {
"type": "boolean",
"description": "Whether list_objects can show the field as a column."
},
"values": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"default": null,
"description": "Enum values, or the choices of a choices custom field."
},
"sortable": {
"type": "boolean"
},
"accepts_multiple_values": {
"type": "boolean",
"default": false
}
}
}
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
},
"object_type": {
"type": "string"
}
}
},
"annotations": {
"title": "Describe Fields",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Fetch CRM objects by their IDs, with full details: up to 30 per call.
Use it when you already have the IDs, from list_objects results or from the user. To search or filter, use list_objects. IDs that don't exist or aren't accessible come back in `not_found`.
Supported: leads (lead_*), contacts (cont_*), opportunities (oppo_*), custom objects (custobj_*), tasks (task_*), activities (acti_*: emails, email threads, calls, SMS, WhatsApp, meetings, notes, completed tasks, lead and opportunity status changes, lead merges, custom activities), lead and opportunity statuses (stat_*), pipelines with their statuses (pipe_*), email templates (tmpl_*), SMS templates (smstmpl_*), Smart Views (save_*), users (user_*) and workflows (seq_*). Activities include user and contact names, transcripts and attachments.
A lead comes with a ready-made brief in `summaries`: status and key fields, opportunities, open tasks, the last contact and about 30 days of recent activity. Use it directly to summarize or prepare for a lead. An email thread embeds its most recent emails in full and lists older ones in `remaining_email_ids`, which this tool fetches too.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
object_ids
List of object IDs to fetch (max 30)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Describe the returned fields so an agent can interpret the result.
View output schema
{
"type": "object",
"required": [
"results"
],
"properties": {
"count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"status",
"steps",
"goal_criteria"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"email_template_id",
"threading"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "email"
},
"threading": {
"enum": [
"new_thread",
"old_thread"
],
"type": "string"
},
"email_template_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"sms_template_id"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "sms"
},
"sms_template_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"optional_timeout",
"assign_to_user_id",
"assign_to_agent_config_id",
"assign_to_group_id",
"assign_to_cf_id"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "call"
},
"assign_to_cf_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"optional_timeout": {
"anyOf": [
{
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
{
"type": "string",
"const": "forever"
}
]
},
"assign_to_user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"assign_to_group_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"assign_to_agent_config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"due_in",
"required",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"due_in": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"required": {
"type": "boolean"
},
"step_type": {
"type": "string",
"const": "task"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"field_mappings",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "create-opportunity"
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"update_target",
"field_mappings",
"default_field_action",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "update-opportunity"
},
"update_target": {
"type": "string",
"description": "The opportunity the step updates, e.g. {{trigger.subject.id}}, {{trigger.lead.newest_opportunity}} or {{trigger.lead.oldest_opportunity}}."
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_field_action": {
"enum": [
"skip-if-filled",
"replace-if-filled"
],
"type": "string",
"description": "How the step treats a field that already has a value. This is the step's 'Overwrite existing values' setting in Close, which is on for 'replace-if-filled'. 'skip-if-filled' only fills empty fields, so a mapping on a field that always has a value, such as a status, never applies; a multi-choice field is the exception, and gains any new values alongside the ones it has. 'replace-if-filled' overwrites the existing value, including a multi-choice field's whole selection."
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"field_mappings",
"default_field_action",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "update-lead"
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_field_action": {
"enum": [
"skip-if-filled",
"replace-if-filled"
],
"type": "string",
"description": "How the step treats a field that already has a value. This is the step's 'Overwrite existing values' setting in Close, which is on for 'replace-if-filled'. 'skip-if-filled' only fills empty fields, so a mapping on a field that always has a value, such as a status, never applies; a multi-choice field is the exception, and gains any new values alongside the ones it has. 'replace-if-filled' overwrites the existing value, including a multi-choice field's whole selection."
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"assignment_field_id",
"action",
"user_id",
"overwrite"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"action": {
"enum": [
"assign",
"unassign"
],
"type": "string"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"overwrite": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"step_type": {
"type": "string",
"const": "lead-assignment"
},
"assignment_field_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"node_type"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"node_type": {
"type": "string"
},
"step_type": {
"type": "string",
"const": "unsupported"
}
},
"description": "A step has not been described yet. Direct the user to the Close UI to inspect it."
}
]
}
},
"status": {
"enum": [
"active",
"paused",
"draft"
],
"type": "string"
},
"goal_criteria": {
"type": "object",
"properties": {
"email_reply": {
"type": "boolean",
"default": true
},
"outcome_met": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether this goal can stop the run."
},
"outcome_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The outcomes that stop the run. Call find_call_outcomes or find_meeting_outcomes to list valid IDs. With `enabled` true and no IDs, any outcome stops the run, including ones that mean the call wasn't answered, so a voice agent call step could end the run on its first unanswered call. When `enabled` is false these IDs are ignored."
}
},
"description": "Stop the run when a call or meeting with the contact gets an outcome.\n\nThis is the only goal that reacts to outbound calls the workflow makes,\nso set it for voice agent call steps: list the outcomes that mean the\noutreach is finished, not the ones worth retrying past. Omit to leave\nthis goal off.",
"additionalProperties": false
},
"incoming_sms": {
"type": "boolean",
"default": true
},
"incoming_call": {
"type": "boolean",
"default": true
},
"meeting_booked": {
"type": "boolean",
"default": true
},
"lead_status_change": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether this goal can stop the run."
},
"status_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The lead statuses that stop the run. Call find_lead_statuses to list valid IDs. With `enabled` true and no IDs, any lead status change stops the run. When `enabled` is false these IDs are ignored."
}
},
"description": "Stop the run when the contact's lead moves into a lead status.\n\nOmit to leave this goal off.",
"additionalProperties": false
}
},
"description": "The workflow's current goal criteria, every one stated. Any one of them\nstops a run early. To change some, pass this back unchanged apart from\nthe criteria you mean to change.",
"additionalProperties": false
}
}
}
},
"next_cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
}
}
Original tool metadata
{
"name": "find_workflows",
"description": "List or find workflows",
"inputSchema": {
"type": "object",
"properties": {
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Pagination cursor, give only when more results are requested."
},
"status": {
"enum": [
"all",
"active",
"paused",
"draft"
],
"type": "string",
"default": "all"
},
"name_search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Workflow name case-insensitive contains search"
}
}
},
"outputSchema": {
"type": "object",
"required": [
"results"
],
"properties": {
"count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"status",
"steps",
"goal_criteria"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"email_template_id",
"threading"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "email"
},
"threading": {
"enum": [
"new_thread",
"old_thread"
],
"type": "string"
},
"email_template_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"sms_template_id"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "sms"
},
"sms_template_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"optional_timeout",
"assign_to_user_id",
"assign_to_agent_config_id",
"assign_to_group_id",
"assign_to_cf_id"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "call"
},
"assign_to_cf_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"optional_timeout": {
"anyOf": [
{
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
{
"type": "string",
"const": "forever"
}
]
},
"assign_to_user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"assign_to_group_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"assign_to_agent_config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"due_in",
"required",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"due_in": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"required": {
"type": "boolean"
},
"step_type": {
"type": "string",
"const": "task"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"field_mappings",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "create-opportunity"
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"update_target",
"field_mappings",
"default_field_action",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "update-opportunity"
},
"update_target": {
"type": "string",
"description": "The opportunity the step updates, e.g. {{trigger.subject.id}}, {{trigger.lead.newest_opportunity}} or {{trigger.lead.oldest_opportunity}}."
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_field_action": {
"enum": [
"skip-if-filled",
"replace-if-filled"
],
"type": "string",
"description": "How the step treats a field that already has a value. This is the step's 'Overwrite existing values' setting in Close, which is on for 'replace-if-filled'. 'skip-if-filled' only fills empty fields, so a mapping on a field that always has a value, such as a status, never applies; a multi-choice field is the exception, and gains any new values alongside the ones it has. 'replace-if-filled' overwrites the existing value, including a multi-choice field's whole selection."
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"field_mappings",
"default_field_action",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "update-lead"
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_field_action": {
"enum": [
"skip-if-filled",
"replace-if-filled"
],
"type": "string",
"description": "How the step treats a field that already has a value. This is the step's 'Overwrite existing values' setting in Close, which is on for 'replace-if-filled'. 'skip-if-filled' only fills empty fields, so a mapping on a field that always has a value, such as a status, never applies; a multi-choice field is the exception, and gains any new values alongside the ones it has. 'replace-if-filled' overwrites the existing value, including a multi-choice field's whole selection."
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"assignment_field_id",
"action",
"user_id",
"overwrite"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"action": {
"enum": [
"assign",
"unassign"
],
"type": "string"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"overwrite": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"step_type": {
"type": "string",
"const": "lead-assignment"
},
"assignment_field_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"node_type"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"node_type": {
"type": "string"
},
"step_type": {
"type": "string",
"const": "unsupported"
}
},
"description": "A step has not been described yet. Direct the user to the Close UI to inspect it."
}
]
}
},
"status": {
"enum": [
"active",
"paused",
"draft"
],
"type": "string"
},
"goal_criteria": {
"type": "object",
"properties": {
"email_reply": {
"type": "boolean",
"default": true
},
"outcome_met": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether this goal can stop the run."
},
"outcome_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The outcomes that stop the run. Call find_call_outcomes or find_meeting_outcomes to list valid IDs. With `enabled` true and no IDs, any outcome stops the run, including ones that mean the call wasn't answered, so a voice agent call step could end the run on its first unanswered call. When `enabled` is false these IDs are ignored."
}
},
"description": "Stop the run when a call or meeting with the contact gets an outcome.\n\nThis is the only goal that reacts to outbound calls the workflow makes,\nso set it for voice agent call steps: list the outcomes that mean the\noutreach is finished, not the ones worth retrying past. Omit to leave\nthis goal off.",
"additionalProperties": false
},
"incoming_sms": {
"type": "boolean",
"default": true
},
"incoming_call": {
"type": "boolean",
"default": true
},
"meeting_booked": {
"type": "boolean",
"default": true
},
"lead_status_change": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether this goal can stop the run."
},
"status_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The lead statuses that stop the run. Call find_lead_statuses to list valid IDs. With `enabled` true and no IDs, any lead status change stops the run. When `enabled` is false these IDs are ignored."
}
},
"description": "Stop the run when the contact's lead moves into a lead status.\n\nOmit to leave this goal off.",
"additionalProperties": false
}
},
"description": "The workflow's current goal criteria, every one stated. Any one of them\nstops a run early. To change some, pass this back unchanged apart from\nthe criteria you mean to change.",
"additionalProperties": false
}
}
}
},
"next_cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null
}
}
},
"annotations": {
"title": "Find Workflows",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
Describe the returned fields so an agent can interpret the result.
View output schema
{
"type": "object",
"required": [
"id",
"name",
"status",
"steps",
"goal_criteria"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"email_template_id",
"threading"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "email"
},
"threading": {
"enum": [
"new_thread",
"old_thread"
],
"type": "string"
},
"email_template_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"sms_template_id"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "sms"
},
"sms_template_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"optional_timeout",
"assign_to_user_id",
"assign_to_agent_config_id",
"assign_to_group_id",
"assign_to_cf_id"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "call"
},
"assign_to_cf_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"optional_timeout": {
"anyOf": [
{
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
{
"type": "string",
"const": "forever"
}
]
},
"assign_to_user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"assign_to_group_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"assign_to_agent_config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"due_in",
"required",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"due_in": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"required": {
"type": "boolean"
},
"step_type": {
"type": "string",
"const": "task"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"field_mappings",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "create-opportunity"
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"update_target",
"field_mappings",
"default_field_action",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "update-opportunity"
},
"update_target": {
"type": "string",
"description": "The opportunity the step updates, e.g. {{trigger.subject.id}}, {{trigger.lead.newest_opportunity}} or {{trigger.lead.oldest_opportunity}}."
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_field_action": {
"enum": [
"skip-if-filled",
"replace-if-filled"
],
"type": "string",
"description": "How the step treats a field that already has a value. This is the step's 'Overwrite existing values' setting in Close, which is on for 'replace-if-filled'. 'skip-if-filled' only fills empty fields, so a mapping on a field that always has a value, such as a status, never applies; a multi-choice field is the exception, and gains any new values alongside the ones it has. 'replace-if-filled' overwrites the existing value, including a multi-choice field's whole selection."
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"field_mappings",
"default_field_action",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "update-lead"
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_field_action": {
"enum": [
"skip-if-filled",
"replace-if-filled"
],
"type": "string",
"description": "How the step treats a field that already has a value. This is the step's 'Overwrite existing values' setting in Close, which is on for 'replace-if-filled'. 'skip-if-filled' only fills empty fields, so a mapping on a field that always has a value, such as a status, never applies; a multi-choice field is the exception, and gains any new values alongside the ones it has. 'replace-if-filled' overwrites the existing value, including a multi-choice field's whole selection."
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"assignment_field_id",
"action",
"user_id",
"overwrite"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"action": {
"enum": [
"assign",
"unassign"
],
"type": "string"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"overwrite": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"step_type": {
"type": "string",
"const": "lead-assignment"
},
"assignment_field_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"node_type"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"node_type": {
"type": "string"
},
"step_type": {
"type": "string",
"const": "unsupported"
}
},
"description": "A step has not been described yet. Direct the user to the Close UI to inspect it."
}
]
}
},
"status": {
"enum": [
"active",
"paused",
"draft"
],
"type": "string"
},
"goal_criteria": {
"type": "object",
"properties": {
"email_reply": {
"type": "boolean",
"default": true
},
"outcome_met": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether this goal can stop the run."
},
"outcome_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The outcomes that stop the run. Call find_call_outcomes or find_meeting_outcomes to list valid IDs. With `enabled` true and no IDs, any outcome stops the run, including ones that mean the call wasn't answered, so a voice agent call step could end the run on its first unanswered call. When `enabled` is false these IDs are ignored."
}
},
"description": "Stop the run when a call or meeting with the contact gets an outcome.\n\nThis is the only goal that reacts to outbound calls the workflow makes,\nso set it for voice agent call steps: list the outcomes that mean the\noutreach is finished, not the ones worth retrying past. Omit to leave\nthis goal off.",
"additionalProperties": false
},
"incoming_sms": {
"type": "boolean",
"default": true
},
"incoming_call": {
"type": "boolean",
"default": true
},
"meeting_booked": {
"type": "boolean",
"default": true
},
"lead_status_change": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether this goal can stop the run."
},
"status_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The lead statuses that stop the run. Call find_lead_statuses to list valid IDs. With `enabled` true and no IDs, any lead status change stops the run. When `enabled` is false these IDs are ignored."
}
},
"description": "Stop the run when the contact's lead moves into a lead status.\n\nOmit to leave this goal off.",
"additionalProperties": false
}
},
"description": "The workflow's current goal criteria, every one stated. Any one of them\nstops a run early. To change some, pass this back unchanged apart from\nthe criteria you mean to change.",
"additionalProperties": false
}
}
}
Original tool metadata
{
"name": "fetch_workflow",
"description": "Fetch a single workflow by ID.",
"inputSchema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the workflow to fetch"
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"name",
"status",
"steps",
"goal_criteria"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"email_template_id",
"threading"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "email"
},
"threading": {
"enum": [
"new_thread",
"old_thread"
],
"type": "string"
},
"email_template_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"sms_template_id"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "sms"
},
"sms_template_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"optional_timeout",
"assign_to_user_id",
"assign_to_agent_config_id",
"assign_to_group_id",
"assign_to_cf_id"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "call"
},
"assign_to_cf_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"optional_timeout": {
"anyOf": [
{
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
{
"type": "string",
"const": "forever"
}
]
},
"assign_to_user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"assign_to_group_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"assign_to_agent_config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"due_in",
"required",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"due_in": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"required": {
"type": "boolean"
},
"step_type": {
"type": "string",
"const": "task"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"field_mappings",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "create-opportunity"
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"update_target",
"field_mappings",
"default_field_action",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "update-opportunity"
},
"update_target": {
"type": "string",
"description": "The opportunity the step updates, e.g. {{trigger.subject.id}}, {{trigger.lead.newest_opportunity}} or {{trigger.lead.oldest_opportunity}}."
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_field_action": {
"enum": [
"skip-if-filled",
"replace-if-filled"
],
"type": "string",
"description": "How the step treats a field that already has a value. This is the step's 'Overwrite existing values' setting in Close, which is on for 'replace-if-filled'. 'skip-if-filled' only fills empty fields, so a mapping on a field that always has a value, such as a status, never applies; a multi-choice field is the exception, and gains any new values alongside the ones it has. 'replace-if-filled' overwrites the existing value, including a multi-choice field's whole selection."
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"field_mappings",
"default_field_action",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "update-lead"
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_field_action": {
"enum": [
"skip-if-filled",
"replace-if-filled"
],
"type": "string",
"description": "How the step treats a field that already has a value. This is the step's 'Overwrite existing values' setting in Close, which is on for 'replace-if-filled'. 'skip-if-filled' only fills empty fields, so a mapping on a field that always has a value, such as a status, never applies; a multi-choice field is the exception, and gains any new values alongside the ones it has. 'replace-if-filled' overwrites the existing value, including a multi-choice field's whole selection."
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"assignment_field_id",
"action",
"user_id",
"overwrite"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"action": {
"enum": [
"assign",
"unassign"
],
"type": "string"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"overwrite": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"step_type": {
"type": "string",
"const": "lead-assignment"
},
"assignment_field_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"node_type"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"node_type": {
"type": "string"
},
"step_type": {
"type": "string",
"const": "unsupported"
}
},
"description": "A step has not been described yet. Direct the user to the Close UI to inspect it."
}
]
}
},
"status": {
"enum": [
"active",
"paused",
"draft"
],
"type": "string"
},
"goal_criteria": {
"type": "object",
"properties": {
"email_reply": {
"type": "boolean",
"default": true
},
"outcome_met": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether this goal can stop the run."
},
"outcome_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The outcomes that stop the run. Call find_call_outcomes or find_meeting_outcomes to list valid IDs. With `enabled` true and no IDs, any outcome stops the run, including ones that mean the call wasn't answered, so a voice agent call step could end the run on its first unanswered call. When `enabled` is false these IDs are ignored."
}
},
"description": "Stop the run when a call or meeting with the contact gets an outcome.\n\nThis is the only goal that reacts to outbound calls the workflow makes,\nso set it for voice agent call steps: list the outcomes that mean the\noutreach is finished, not the ones worth retrying past. Omit to leave\nthis goal off.",
"additionalProperties": false
},
"incoming_sms": {
"type": "boolean",
"default": true
},
"incoming_call": {
"type": "boolean",
"default": true
},
"meeting_booked": {
"type": "boolean",
"default": true
},
"lead_status_change": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether this goal can stop the run."
},
"status_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The lead statuses that stop the run. Call find_lead_statuses to list valid IDs. With `enabled` true and no IDs, any lead status change stops the run. When `enabled` is false these IDs are ignored."
}
},
"description": "Stop the run when the contact's lead moves into a lead status.\n\nOmit to leave this goal off.",
"additionalProperties": false
}
},
"description": "The workflow's current goal criteria, every one stated. Any one of them\nstops a run early. To change some, pass this back unchanged apart from\nthe criteria you mean to change.",
"additionalProperties": false
}
}
},
"annotations": {
"title": "Fetch Workflow",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
List of Lead Status IDs to exclude. Call find_lead_statuses to list valid IDs.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger › oneOf › 2 › event_types
Which type of events fire this trigger. "created" fires only on object creation. "updated" fires only when an existing object starts matching the filters, and requires at least one filter. "created_and_updated" fires on both creation and updates (default).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger › oneOf › 3 › trigger_type
Not provided
Missing description. Explain what this value means and how to supply it.
Absolute timezone aware datetime in ISO 8601 format, e.g. '2025-01-15T00:00:00Z'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger › oneOf › 3 › event_types
Which type of events fire this trigger. "created" fires only on object creation. "updated" fires only when an existing object starts matching the filters, and requires at least one filter. "created_and_updated" fires on both creation and updates (default).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger › oneOf › 4 › trigger_type
Not provided
Missing description. Explain what this value means and how to supply it.
Missing description. Explain what this value means and how to supply it.
trigger › oneOf › 4 › event_types
Which type of events fire this trigger. "created" fires only on object creation. "updated" fires only when an existing object starts matching the filters, and requires at least one filter. "created_and_updated" fires on both creation and updates (default).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger › oneOf › 5 › trigger_type
Not provided
Missing description. Explain what this value means and how to supply it.
List of user IDs (e.g. 'user_abc123'), group IDs (e.g. 'group_abc123'), or agent config IDs (e.g. 'agentconfig_abc123') to match (OR logic). Call org_users to list valid user IDs, find_groups for group IDs and find_voice_agents for voice agent IDs.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
List of user IDs (e.g. 'user_abc123'), group IDs (e.g. 'group_abc123'), or agent config IDs (e.g. 'agentconfig_abc123') to exclude. Call org_users to list valid user IDs, find_groups for group IDs and find_voice_agents for voice agent IDs.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger › oneOf › 5 › event_types
Which type of events fire this trigger. "created" fires only on object creation. "updated" fires only when an existing object starts matching the filters, and requires at least one filter. "created_and_updated" fires on both creation and updates (default).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger › oneOf › 6 › trigger_type
Not provided
Missing description. Explain what this value means and how to supply it.
Absolute timezone aware datetime in ISO 8601 format, e.g. '2025-01-15T00:00:00Z'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger › oneOf › 6 › event_types
Which type of events fire this trigger. Use "created_and_updated" (default) or "updated". Both fire when an activity of this type is published, or when a published one starts matching the filters. Neither needs a filter. "created" is not supported for custom activities.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger › oneOf › 6 › custom_activity_type_id
ID of the Custom Activity Type that fires this trigger (e.g. 'actype_abc123'). Call find_custom_activities to list valid IDs.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger › oneOf › 7 › trigger_type
Not provided
Missing description. Explain what this value means and how to supply it.
Missing description. Explain what this value means and how to supply it.
trigger › oneOf › 7 › event_types
Which type of events fire this trigger. "created" fires only on object creation. "updated" fires only when an existing object starts matching the filters, and requires at least one filter. "created_and_updated" fires on both creation and updates (default).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger › oneOf › 8 › trigger_type
Not provided
Missing description. Explain what this value means and how to supply it.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger › oneOf › 8 › filters › items › value
Absolute timezone aware datetime in ISO 8601 format, e.g. '2025-01-15T00:00:00Z'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger › oneOf › 8 › event_types
Only 'created' events are supported for form submissions.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger › oneOf › 8 › form_id
ID of the Form that fires this trigger (e.g. 'form_abc123'). Call find_forms to list valid IDs.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 0 › step_type
Not provided
Missing description. Explain what this value means and how to supply it.
steps › items › oneOf › 0 › delay
How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 0 › email_template_id
ID of the email template to use
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 0 › threading
Whether this will start a new email thread or if it'll be sent as a response to the previous email step.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 1 › step_type
Not provided
Missing description. Explain what this value means and how to supply it.
steps › items › oneOf › 1 › delay
How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 1 › optional_timeout
How long to wait for someone to attempt a call before the workflow continues to the next step. Use "forever" to wait indefinitely until someone attempts a call.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 1 › assign_to_user_id
User ID to assign this call to (e.g. 'user_abc123'). Call `org_users` to get a list of available users and their IDs. Cannot be set together with `assign_to_agent_config_id`.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Voice agent ID to assign this call to (e.g. 'agentconfig_abc123'). Call `find_voice_agents` to get available voice agents. The user may refer to the agent as 'Chloe' or by its configured name. Cannot be set together with `assign_to_user_id`.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 2 › step_type
Not provided
Missing description. Explain what this value means and how to supply it.
steps › items › oneOf › 2 › delay
How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 2 › due_in
How long to wait before the task becomes due. Set to zero for it to be due immediately. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 2 › required
If true, task must be completed before workflow can continue. If false, workflow will continue regardless of `due_in`.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 2 › text
Description of the task
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 3 › step_type
Not provided
Missing description. Explain what this value means and how to supply it.
steps › items › oneOf › 3 › delay
How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 3 › sms_template_id
ID of the SMS template to use
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 4 › step_type
Not provided
Missing description. Explain what this value means and how to supply it.
steps › items › oneOf › 4 › delay
How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 4 › status_id
Opportunity status ID (e.g. 'stat_abc123'). Call find_pipelines_and_opportunity_statuses to list valid IDs. These are not the same status IDs applicable to leads.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 4 › value
Monetary value of the opportunity. In cents.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 4 › value_period
Recurrence of the opportunity value. One of: 'one_time', 'monthly', 'annual'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 4 › confidence
Confidence percentage (0-100) that the opportunity will close.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 4 › date_won
Estimated close date for the opportunity.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 4 › note
Optional note to attach to the opportunity.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 5 › step_type
Not provided
Missing description. Explain what this value means and how to supply it.
steps › items › oneOf › 5 › delay
How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 5 › status_id
Opportunity status ID (e.g. 'stat_abc123'). Call find_pipelines_and_opportunity_statuses to list valid IDs. These are not the same status IDs applicable to leads.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 5 › value
Monetary value of the opportunity. In cents.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 5 › value_period
Recurrence of the opportunity value. One of: 'one_time', 'monthly', 'annual'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 5 › confidence
Confidence percentage (0-100) that the opportunity will close.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 5 › date_won
Estimated close date for the opportunity.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 5 › note
Optional note to attach to the opportunity.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 5 › update_target
The opportunity to update.
One of:
{{trigger.subject.id}} when the trigger is an opportunity trigger.
{{trigger.lead.newest_opportunity}} to update the most recent opportunity on the lead, when the trigger is NOT an opportunity trigger.
{{trigger.lead.oldest_opportunity}} to update the oldest opportunity on the lead, when the trigger is NOT an opportunity trigger.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 6 › step_type
Not provided
Missing description. Explain what this value means and how to supply it.
steps › items › oneOf › 6 › delay
How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 6 › name
New name for the lead.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 6 › description
New description for the lead.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 6 › status_id
Lead status ID (e.g. 'stat_abc123'). Call find_lead_statuses to list valid IDs. These are not the same status IDs applicable to opportunities.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 6 › url
New website URL for the lead.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 7 › step_type
Not provided
Missing description. Explain what this value means and how to supply it.
steps › items › oneOf › 7 › delay
How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 7 › assignment_field_id
ID of a User-type lead custom field that stores the assignee (e.g. 'lcf_abc123'). Call `find_lead_custom_fields` and pick a field whose type is 'user'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 7 › action
'assign' to set a user on the lead, 'unassign' to clear it.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 7 › user_id
Required when action is 'assign'. User ID to assign (e.g. 'user_abc123'). Call `org_users` to get a list of available users and their IDs.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
steps › items › oneOf › 7 › overwrite
Only used when action is 'assign'. If True, replaces any existing assignee. If False (default), skips assignment when a user is already assigned.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
goal_criteria › email_reply
Not provided
Missing description. Explain what this value means and how to supply it.
goal_criteria › incoming_sms
Not provided
Missing description. Explain what this value means and how to supply it.
goal_criteria › incoming_call
Not provided
Missing description. Explain what this value means and how to supply it.
goal_criteria › meeting_booked
Not provided
Missing description. Explain what this value means and how to supply it.
goal_criteria › lead_status_change › enabled
Whether this goal can stop the run.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
goal_criteria › lead_status_change › status_ids
The lead statuses that stop the run. Call find_lead_statuses to list valid IDs. With `enabled` true and no IDs, any lead status change stops the run. When `enabled` is false these IDs are ignored.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
goal_criteria › outcome_met › enabled
Whether this goal can stop the run.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
goal_criteria › outcome_met › outcome_ids
The outcomes that stop the run. Call find_call_outcomes or find_meeting_outcomes to list valid IDs. With `enabled` true and no IDs, any outcome stops the run, including ones that mean the call wasn't answered, so a voice agent call step could end the run on its first unanswered call. When `enabled` is false these IDs are ignored.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"required": [
"id",
"name",
"status",
"steps",
"goal_criteria"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"email_template_id",
"threading"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "email"
},
"threading": {
"enum": [
"new_thread",
"old_thread"
],
"type": "string"
},
"email_template_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"sms_template_id"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "sms"
},
"sms_template_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"optional_timeout",
"assign_to_user_id",
"assign_to_agent_config_id",
"assign_to_group_id",
"assign_to_cf_id"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "call"
},
"assign_to_cf_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"optional_timeout": {
"anyOf": [
{
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
{
"type": "string",
"const": "forever"
}
]
},
"assign_to_user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"assign_to_group_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"assign_to_agent_config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"due_in",
"required",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"due_in": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"required": {
"type": "boolean"
},
"step_type": {
"type": "string",
"const": "task"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"field_mappings",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "create-opportunity"
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"update_target",
"field_mappings",
"default_field_action",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "update-opportunity"
},
"update_target": {
"type": "string",
"description": "The opportunity the step updates, e.g. {{trigger.subject.id}}, {{trigger.lead.newest_opportunity}} or {{trigger.lead.oldest_opportunity}}."
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_field_action": {
"enum": [
"skip-if-filled",
"replace-if-filled"
],
"type": "string",
"description": "How the step treats a field that already has a value. This is the step's 'Overwrite existing values' setting in Close, which is on for 'replace-if-filled'. 'skip-if-filled' only fills empty fields, so a mapping on a field that always has a value, such as a status, never applies; a multi-choice field is the exception, and gains any new values alongside the ones it has. 'replace-if-filled' overwrites the existing value, including a multi-choice field's whole selection."
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"field_mappings",
"default_field_action",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "update-lead"
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_field_action": {
"enum": [
"skip-if-filled",
"replace-if-filled"
],
"type": "string",
"description": "How the step treats a field that already has a value. This is the step's 'Overwrite existing values' setting in Close, which is on for 'replace-if-filled'. 'skip-if-filled' only fills empty fields, so a mapping on a field that always has a value, such as a status, never applies; a multi-choice field is the exception, and gains any new values alongside the ones it has. 'replace-if-filled' overwrites the existing value, including a multi-choice field's whole selection."
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"assignment_field_id",
"action",
"user_id",
"overwrite"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"action": {
"enum": [
"assign",
"unassign"
],
"type": "string"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"overwrite": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"step_type": {
"type": "string",
"const": "lead-assignment"
},
"assignment_field_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"node_type"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"node_type": {
"type": "string"
},
"step_type": {
"type": "string",
"const": "unsupported"
}
},
"description": "A step has not been described yet. Direct the user to the Close UI to inspect it."
}
]
}
},
"status": {
"enum": [
"active",
"paused",
"draft"
],
"type": "string"
},
"goal_criteria": {
"type": "object",
"properties": {
"email_reply": {
"type": "boolean",
"default": true
},
"outcome_met": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether this goal can stop the run."
},
"outcome_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The outcomes that stop the run. Call find_call_outcomes or find_meeting_outcomes to list valid IDs. With `enabled` true and no IDs, any outcome stops the run, including ones that mean the call wasn't answered, so a voice agent call step could end the run on its first unanswered call. When `enabled` is false these IDs are ignored."
}
},
"description": "Stop the run when a call or meeting with the contact gets an outcome.\n\nThis is the only goal that reacts to outbound calls the workflow makes,\nso set it for voice agent call steps: list the outcomes that mean the\noutreach is finished, not the ones worth retrying past. Omit to leave\nthis goal off.",
"additionalProperties": false
},
"incoming_sms": {
"type": "boolean",
"default": true
},
"incoming_call": {
"type": "boolean",
"default": true
},
"meeting_booked": {
"type": "boolean",
"default": true
},
"lead_status_change": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether this goal can stop the run."
},
"status_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The lead statuses that stop the run. Call find_lead_statuses to list valid IDs. With `enabled` true and no IDs, any lead status change stops the run. When `enabled` is false these IDs are ignored."
}
},
"description": "Stop the run when the contact's lead moves into a lead status.\n\nOmit to leave this goal off.",
"additionalProperties": false
}
},
"description": "The workflow's current goal criteria, every one stated. Any one of them\nstops a run early. To change some, pass this back unchanged apart from\nthe criteria you mean to change.",
"additionalProperties": false
}
}
}
Original tool metadata
{
"name": "create_workflow",
"description": "Create a new workflow (a.k.a. sequence) with Draft status.",
"inputSchema": {
"type": "object",
"required": [
"name",
"steps"
],
"properties": {
"name": {
"type": "string",
"description": "Workflow name. Must be unique."
},
"steps": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"step_type",
"delay",
"email_template_id",
"threading"
],
"properties": {
"delay": {
"type": "string",
"format": "duration",
"description": "How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "email"
},
"threading": {
"enum": [
"new_thread",
"old_thread"
],
"type": "string",
"description": "Whether this will start a new email thread or if it'll be sent as a response to the previous email step."
},
"email_template_id": {
"type": "string",
"description": "ID of the email template to use"
}
}
},
{
"type": "object",
"required": [
"step_type",
"delay",
"optional_timeout"
],
"properties": {
"delay": {
"type": "string",
"format": "duration",
"description": "How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "call"
},
"optional_timeout": {
"anyOf": [
{
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
{
"type": "string",
"const": "forever"
}
],
"description": "How long to wait for someone to attempt a call before the workflow continues to the next step. Use \"forever\" to wait indefinitely until someone attempts a call."
},
"assign_to_user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "User ID to assign this call to (e.g. 'user_abc123'). Call `org_users` to get a list of available users and their IDs. Cannot be set together with `assign_to_agent_config_id`."
},
"assign_to_agent_config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Voice agent ID to assign this call to (e.g. 'agentconfig_abc123'). Call `find_voice_agents` to get available voice agents. The user may refer to the agent as 'Chloe' or by its configured name. Cannot be set together with `assign_to_user_id`."
}
},
"description": "Add a call step to the workflow. The call can be assigned to a specific\nuser or a voice agent (also known as \"Chloe\").\n\nUse `assign_to_user_id` to assign the call to a human user.\nCall `org_users` to find available user IDs.\n\nUse `assign_to_agent_config_id` to assign the call to a voice agent.\nCall `find_voice_agents` to find available voice agent IDs. The user may\nrefer to the agent as \"Chloe\" or by the agent's configured name. When\nmultiple agents exist, pick the most appropriate one based on its name.\n\nAt most one of `assign_to_user_id` or `assign_to_agent_config_id` may be set."
},
{
"type": "object",
"required": [
"step_type",
"delay",
"due_in",
"required",
"text"
],
"properties": {
"text": {
"type": "string",
"description": "Description of the task"
},
"delay": {
"type": "string",
"format": "duration",
"description": "How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"due_in": {
"type": "string",
"format": "duration",
"description": "How long to wait before the task becomes due. Set to zero for it to be due immediately. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"required": {
"type": "boolean",
"description": "If true, task must be completed before workflow can continue. If false, workflow will continue regardless of `due_in`."
},
"step_type": {
"type": "string",
"const": "task"
}
}
},
{
"type": "object",
"required": [
"step_type",
"delay",
"sms_template_id"
],
"properties": {
"delay": {
"type": "string",
"format": "duration",
"description": "How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "sms"
},
"sms_template_id": {
"type": "string",
"description": "ID of the SMS template to use"
}
}
},
{
"type": "object",
"required": [
"step_type",
"delay",
"status_id"
],
"properties": {
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional note to attach to the opportunity."
},
"delay": {
"type": "string",
"format": "duration",
"description": "How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"value": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Monetary value of the opportunity. In cents."
},
"date_won": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "Estimated close date for the opportunity."
},
"status_id": {
"type": "string",
"description": "Opportunity status ID (e.g. 'stat_abc123'). Call find_pipelines_and_opportunity_statuses to list valid IDs. These are not the same status IDs applicable to leads."
},
"step_type": {
"type": "string",
"const": "create-opportunity"
},
"confidence": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Confidence percentage (0-100) that the opportunity will close."
},
"value_period": {
"anyOf": [
{
"enum": [
"one_time",
"monthly",
"annual"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Recurrence of the opportunity value. One of: 'one_time', 'monthly', 'annual'."
}
},
"description": "Creates a new opportunity on the lead during workflow execution."
},
{
"type": "object",
"required": [
"step_type",
"delay"
],
"properties": {
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional note to attach to the opportunity."
},
"delay": {
"type": "string",
"format": "duration",
"description": "How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"value": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Monetary value of the opportunity. In cents."
},
"date_won": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "Estimated close date for the opportunity."
},
"status_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Opportunity status ID (e.g. 'stat_abc123'). Call find_pipelines_and_opportunity_statuses to list valid IDs. These are not the same status IDs applicable to leads."
},
"step_type": {
"type": "string",
"const": "update-opportunity"
},
"confidence": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Confidence percentage (0-100) that the opportunity will close."
},
"value_period": {
"anyOf": [
{
"enum": [
"one_time",
"monthly",
"annual"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Recurrence of the opportunity value. One of: 'one_time', 'monthly', 'annual'."
},
"update_target": {
"type": "string",
"default": "{{trigger.lead.newest_opportunity}}",
"description": "The opportunity to update.\n One of:\n {{trigger.subject.id}} when the trigger is an opportunity trigger.\n {{trigger.lead.newest_opportunity}} to update the most recent opportunity on the lead, when the trigger is NOT an opportunity trigger.\n {{trigger.lead.oldest_opportunity}} to update the oldest opportunity on the lead, when the trigger is NOT an opportunity trigger.\n "
}
},
"description": "Update any selected fields on a specific Opportunity on the Lead associated with the trigger."
},
{
"type": "object",
"required": [
"step_type",
"delay"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New website URL for the lead."
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New name for the lead."
},
"delay": {
"type": "string",
"format": "duration",
"description": "How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"status_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Lead status ID (e.g. 'stat_abc123'). Call find_lead_statuses to list valid IDs. These are not the same status IDs applicable to opportunities."
},
"step_type": {
"type": "string",
"const": "update-lead"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New description for the lead."
}
},
"description": "Update fields on the Lead associated with the workflow trigger."
},
{
"type": "object",
"required": [
"step_type",
"delay",
"assignment_field_id",
"action"
],
"properties": {
"delay": {
"type": "string",
"format": "duration",
"description": "How long to wait before proceeding with the next step in the workflow. Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"action": {
"enum": [
"assign",
"unassign"
],
"type": "string",
"description": "'assign' to set a user on the lead, 'unassign' to clear it."
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Required when action is 'assign'. User ID to assign (e.g. 'user_abc123'). Call `org_users` to get a list of available users and their IDs."
},
"overwrite": {
"type": "boolean",
"default": false,
"description": "Only used when action is 'assign'. If True, replaces any existing assignee. If False (default), skips assignment when a user is already assigned."
},
"step_type": {
"type": "string",
"const": "lead-assignment"
},
"assignment_field_id": {
"type": "string",
"description": "ID of a User-type lead custom field that stores the assignee (e.g. 'lcf_abc123'). Call `find_lead_custom_fields` and pick a field whose type is 'user'."
}
},
"description": "Assign or unassign a user on the Lead associated with the workflow trigger.\n\n\"Lead\" might be implied by the user when mentioning just \"assign\" or \"unassign\",\nthis step should be used in those cases too.\n\nThe `assignment_field_id` is the ID of a User-type lead custom field\n(e.g. 'cf_abc123' or 'lcf_abc123') that holds the assignee. Call `find_lead_custom_fields`\nto discover available fields. Only fields with type 'user' are valid here.\n\nSet `action` to 'assign' to assign a user, or 'unassign' to remove the current assignee.\n\nWhen `action` is 'assign':\n- `user_id` is required (e.g. 'user_abc123'). Get the right user ID from calling `org_users`.\n- `overwrite` controls whether an existing assignee is replaced (default False, skip if already assigned)."
}
]
},
"minItems": 1,
"description": "Steps in the workflow. The `step_type` of each step has to exactly match one of the defined types in the mapping."
},
"trigger": {
"oneOf": [
{
"type": "object",
"required": [
"trigger_type"
],
"properties": {
"trigger_type": {
"type": "string",
"const": "contact-manual"
}
},
"description": "Trigger manually on contacts. The workflow is enrolled manually on a per-contact basis."
},
{
"type": "object",
"required": [
"trigger_type"
],
"properties": {
"trigger_type": {
"type": "string",
"const": "lead-manual"
}
},
"description": "Trigger manually on leads. The workflow is enrolled manually on a per-lead basis."
},
{
"type": "object",
"required": [
"trigger_type"
],
"properties": {
"filters": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Exact text to match."
},
"filter_type": {
"type": "string",
"const": "name-is",
"default": "name-is"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "name-exists",
"default": "name-exists"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "name-not_exists",
"default": "name-not_exists"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Exact text to match."
},
"filter_type": {
"type": "string",
"const": "description-is",
"default": "description-is"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "description-exists",
"default": "description-exists"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "description-not_exists",
"default": "description-not_exists"
}
}
},
{
"type": "object",
"required": [
"comparison",
"value"
],
"properties": {
"value": {
"type": "string",
"format": "date-time",
"description": "Absolute timezone aware datetime in ISO 8601 format, e.g. '2025-01-15T00:00:00Z'."
},
"comparison": {
"enum": [
">=",
"<"
],
"type": "string",
"description": "'>=' means on or after, '<' means before."
},
"filter_type": {
"type": "string",
"const": "date_created",
"default": "date_created"
}
}
},
{
"type": "object",
"required": [
"comparison",
"value"
],
"properties": {
"value": {
"type": "string",
"format": "date-time",
"description": "Absolute timezone aware datetime in ISO 8601 format, e.g. '2025-01-15T00:00:00Z'."
},
"comparison": {
"enum": [
">=",
"<"
],
"type": "string",
"description": "'>=' means on or after, '<' means before."
},
"filter_type": {
"type": "string",
"const": "date_updated",
"default": "date_updated"
}
}
},
{
"type": "object",
"required": [
"values"
],
"properties": {
"values": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "List of Lead Status IDs to match (OR logic). Call find_lead_statuses to list valid IDs."
},
"filter_type": {
"type": "string",
"const": "status_id-any_of",
"default": "status_id-any_of"
}
}
},
{
"type": "object",
"required": [
"values"
],
"properties": {
"values": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "List of Lead Status IDs to exclude. Call find_lead_statuses to list valid IDs."
},
"filter_type": {
"type": "string",
"const": "status_id-none_of",
"default": "status_id-none_of"
}
}
}
]
},
"description": "Optional filters to narrow which leads fire this trigger. All filters are AND-ed together. Available filter_type values: 'name-is', 'name-exists', 'name-not_exists', 'description-is', 'description-exists', 'description-not_exists', 'date_created', 'date_updated', 'status_id-any_of', 'status_id-none_of'."
},
"event_types": {
"enum": [
"created",
"updated",
"created_and_updated"
],
"type": "string",
"default": "created_and_updated",
"description": "Which type of events fire this trigger. \"created\" fires only on object creation. \"updated\" fires only when an existing object starts matching the filters, and requires at least one filter. \"created_and_updated\" fires on both creation and updates (default)."
},
"trigger_type": {
"type": "string",
"const": "lead-event"
}
},
"description": "Trigger the workflow automatically when a lead is created or updated (default) — or only on creation ('created'), or only on update ('updated', which needs at least one filter)."
},
{
"type": "object",
"required": [
"trigger_type"
],
"properties": {
"filters": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Exact text to match."
},
"filter_type": {
"type": "string",
"const": "name-is",
"default": "name-is"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "name-exists",
"default": "name-exists"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "name-not_exists",
"default": "name-not_exists"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Exact text to match."
},
"filter_type": {
"type": "string",
"const": "title-is",
"default": "title-is"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "title-exists",
"default": "title-exists"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "title-not_exists",
"default": "title-not_exists"
}
}
},
{
"type": "object",
"required": [
"comparison",
"value"
],
"properties": {
"value": {
"type": "integer",
"description": "Integer value to compare against."
},
"comparison": {
"enum": [
"=",
">",
">=",
"<",
"<="
],
"type": "string",
"description": "Comparison operator: '=', '>', '>=', '<', '<='."
},
"filter_type": {
"type": "string",
"const": "emails_count",
"default": "emails_count"
}
}
},
{
"type": "object",
"required": [
"comparison",
"value"
],
"properties": {
"value": {
"type": "integer",
"description": "Integer value to compare against."
},
"comparison": {
"enum": [
"=",
">",
">=",
"<",
"<="
],
"type": "string",
"description": "Comparison operator: '=', '>', '>=', '<', '<='."
},
"filter_type": {
"type": "string",
"const": "phones_count",
"default": "phones_count"
}
}
},
{
"type": "object",
"required": [
"comparison",
"value"
],
"properties": {
"value": {
"type": "integer",
"description": "Integer value to compare against."
},
"comparison": {
"enum": [
"=",
">",
">=",
"<",
"<="
],
"type": "string",
"description": "Comparison operator: '=', '>', '>=', '<', '<='."
},
"filter_type": {
"type": "string",
"const": "urls_count",
"default": "urls_count"
}
}
},
{
"type": "object",
"required": [
"comparison",
"value"
],
"properties": {
"value": {
"type": "string",
"format": "date-time",
"description": "Absolute timezone aware datetime in ISO 8601 format, e.g. '2025-01-15T00:00:00Z'."
},
"comparison": {
"enum": [
">=",
"<"
],
"type": "string",
"description": "'>=' means on or after, '<' means before."
},
"filter_type": {
"type": "string",
"const": "date_created",
"default": "date_created"
}
}
},
{
"type": "object",
"required": [
"comparison",
"value"
],
"properties": {
"value": {
"type": "string",
"format": "date-time",
"description": "Absolute timezone aware datetime in ISO 8601 format, e.g. '2025-01-15T00:00:00Z'."
},
"comparison": {
"enum": [
">=",
"<"
],
"type": "string",
"description": "'>=' means on or after, '<' means before."
},
"filter_type": {
"type": "string",
"const": "date_updated",
"default": "date_updated"
}
}
}
]
},
"description": "Optional filters to narrow which contacts fire this trigger. All filters are AND-ed together. Available filter_type values: 'name-is', 'name-exists', 'name-not_exists', 'title-is', 'title-exists', 'title-not_exists', 'emails_count', 'phones_count', 'urls_count', 'date_created', 'date_updated'."
},
"event_types": {
"enum": [
"created",
"updated",
"created_and_updated"
],
"type": "string",
"default": "created_and_updated",
"description": "Which type of events fire this trigger. \"created\" fires only on object creation. \"updated\" fires only when an existing object starts matching the filters, and requires at least one filter. \"created_and_updated\" fires on both creation and updates (default)."
},
"trigger_type": {
"type": "string",
"const": "contact-event"
}
},
"description": "Trigger the workflow automatically when a contact is created or updated (default) — or only on creation ('created'), or only on update ('updated', which needs at least one filter)."
},
{
"type": "object",
"required": [
"trigger_type"
],
"properties": {
"filters": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"comparison",
"value"
],
"properties": {
"value": {
"type": "integer",
"description": "Integer value to compare against."
},
"comparison": {
"enum": [
"=",
">",
">=",
"<",
"<="
],
"type": "string",
"description": "Comparison operator: '=', '>', '>=', '<', '<='."
},
"filter_type": {
"type": "string",
"const": "confidence",
"default": "confidence"
}
}
},
{
"type": "object",
"required": [
"comparison",
"value"
],
"properties": {
"value": {
"type": "integer",
"description": "Integer value to compare against."
},
"comparison": {
"enum": [
"=",
">",
">=",
"<",
"<="
],
"type": "string",
"description": "Comparison operator: '=', '>', '>=', '<', '<='."
},
"filter_type": {
"type": "string",
"const": "value",
"default": "value"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "boolean",
"description": "Boolean value to match."
},
"filter_type": {
"type": "string",
"const": "is_stalled-is",
"default": "is_stalled-is"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Exact text to match."
},
"filter_type": {
"type": "string",
"const": "note-is",
"default": "note-is"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "note-exists",
"default": "note-exists"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "note-not_exists",
"default": "note-not_exists"
}
}
}
]
},
"description": "Optional filters to narrow which opportunitys fire this trigger. All filters are AND-ed together. Available filter_type values: 'confidence', 'value', 'is_stalled-is', 'note-is', 'note-exists', 'note-not_exists'."
},
"event_types": {
"enum": [
"created",
"updated",
"created_and_updated"
],
"type": "string",
"default": "created_and_updated",
"description": "Which type of events fire this trigger. \"created\" fires only on object creation. \"updated\" fires only when an existing object starts matching the filters, and requires at least one filter. \"created_and_updated\" fires on both creation and updates (default)."
},
"trigger_type": {
"type": "string",
"const": "opportunity-event"
}
},
"description": "Trigger the workflow automatically when an opportunity is created or updated (default) — or only on creation ('created'), or only on update ('updated', which needs at least one filter). Opportunity value is in cents."
},
{
"type": "object",
"required": [
"trigger_type"
],
"properties": {
"filters": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Exact text to match."
},
"filter_type": {
"type": "string",
"const": "recording_transcript-is",
"default": "recording_transcript-is"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Text to search for (phrase match)."
},
"filter_type": {
"type": "string",
"const": "recording_transcript-contains",
"default": "recording_transcript-contains"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "recording_transcript-exists",
"default": "recording_transcript-exists"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "recording_transcript-not_exists",
"default": "recording_transcript-not_exists"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Exact text to match."
},
"filter_type": {
"type": "string",
"const": "note-is",
"default": "note-is"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "note-exists",
"default": "note-exists"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "note-not_exists",
"default": "note-not_exists"
}
}
},
{
"type": "object",
"required": [
"values"
],
"properties": {
"values": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "List of Outcome IDs to match (OR logic). Call find_call_outcomes to list valid IDs."
},
"filter_type": {
"type": "string",
"const": "outcome_id-any_of",
"default": "outcome_id-any_of"
}
}
},
{
"type": "object",
"required": [
"values"
],
"properties": {
"values": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "List of Outcome IDs to exclude. Call find_call_outcomes to list valid IDs."
},
"filter_type": {
"type": "string",
"const": "outcome_id-none_of",
"default": "outcome_id-none_of"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "outcome_id-exists",
"default": "outcome_id-exists"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "outcome_id-not_exists",
"default": "outcome_id-not_exists"
}
}
},
{
"type": "object",
"required": [
"values"
],
"properties": {
"values": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "List of user IDs (e.g. 'user_abc123'), group IDs (e.g. 'group_abc123'), or agent config IDs (e.g. 'agentconfig_abc123') to match (OR logic). Call org_users to list valid user IDs, find_groups for group IDs and find_voice_agents for voice agent IDs."
},
"filter_type": {
"type": "string",
"const": "user_or_agent-any_of",
"default": "user_or_agent-any_of"
}
}
},
{
"type": "object",
"required": [
"values"
],
"properties": {
"values": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "List of user IDs (e.g. 'user_abc123'), group IDs (e.g. 'group_abc123'), or agent config IDs (e.g. 'agentconfig_abc123') to exclude. Call org_users to list valid user IDs, find_groups for group IDs and find_voice_agents for voice agent IDs."
},
"filter_type": {
"type": "string",
"const": "user_or_agent-none_of",
"default": "user_or_agent-none_of"
}
}
}
]
},
"description": "Optional filters to narrow which activity.calls fire this trigger. All filters are AND-ed together. Available filter_type values: 'recording_transcript-is', 'recording_transcript-contains', 'recording_transcript-exists', 'recording_transcript-not_exists', 'note-is', 'note-exists', 'note-not_exists', 'outcome_id-any_of', 'outcome_id-none_of', 'outcome_id-exists', 'outcome_id-not_exists', 'user_or_agent-any_of', 'user_or_agent-none_of'."
},
"event_types": {
"enum": [
"created",
"updated",
"created_and_updated"
],
"type": "string",
"default": "created_and_updated",
"description": "Which type of events fire this trigger. \"created\" fires only on object creation. \"updated\" fires only when an existing object starts matching the filters, and requires at least one filter. \"created_and_updated\" fires on both creation and updates (default)."
},
"trigger_type": {
"type": "string",
"const": "call-event"
}
},
"description": "Trigger the workflow automatically when a call is created or updated (default) — or only on creation ('created'), or only on update ('updated', which needs at least one filter)."
},
{
"type": "object",
"required": [
"trigger_type",
"custom_activity_type_id"
],
"properties": {
"filters": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"comparison",
"value"
],
"properties": {
"value": {
"type": "string",
"format": "date-time",
"description": "Absolute timezone aware datetime in ISO 8601 format, e.g. '2025-01-15T00:00:00Z'."
},
"comparison": {
"enum": [
">=",
"<"
],
"type": "string",
"description": "'>=' means on or after, '<' means before."
},
"filter_type": {
"type": "string",
"const": "date_created",
"default": "date_created"
}
}
},
{
"type": "object",
"required": [
"comparison",
"value"
],
"properties": {
"value": {
"type": "string",
"format": "date-time",
"description": "Absolute timezone aware datetime in ISO 8601 format, e.g. '2025-01-15T00:00:00Z'."
},
"comparison": {
"enum": [
">=",
"<"
],
"type": "string",
"description": "'>=' means on or after, '<' means before."
},
"filter_type": {
"type": "string",
"const": "date_updated",
"default": "date_updated"
}
}
}
]
},
"description": "Optional filters to narrow which activity.custom_activitys fire this trigger. All filters are AND-ed together. Available filter_type values: 'date_created', 'date_updated'."
},
"event_types": {
"enum": [
"created",
"updated",
"created_and_updated"
],
"type": "string",
"default": "created_and_updated",
"description": "Which type of events fire this trigger. Use \"created_and_updated\" (default) or \"updated\". Both fire when an activity of this type is published, or when a published one starts matching the filters. Neither needs a filter. \"created\" is not supported for custom activities."
},
"trigger_type": {
"type": "string",
"const": "custom-activity-event"
},
"custom_activity_type_id": {
"type": "string",
"description": "ID of the Custom Activity Type that fires this trigger (e.g. 'actype_abc123'). Call find_custom_activities to list valid IDs."
}
},
"description": "Trigger the workflow automatically when a custom activity of a specific\ntype is published, or when a published one starts matching the filters.\n\nBefore using this trigger, call `find_custom_activities` to retrieve the\navailable Custom Activity Types and their IDs."
},
{
"type": "object",
"required": [
"trigger_type"
],
"properties": {
"filters": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"required": [
"comparison",
"value"
],
"properties": {
"value": {
"type": "integer",
"description": "Integer value to compare against."
},
"comparison": {
"enum": [
"=",
">",
">=",
"<",
"<="
],
"type": "string",
"description": "Comparison operator: '=', '>', '>=', '<', '<='."
},
"filter_type": {
"type": "string",
"const": "participant_count",
"default": "participant_count"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Exact text to match."
},
"filter_type": {
"type": "string",
"const": "recording_transcript-is",
"default": "recording_transcript-is"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Exact text to match."
},
"filter_type": {
"type": "string",
"const": "title-is",
"default": "title-is"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "title-exists",
"default": "title-exists"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "title-not_exists",
"default": "title-not_exists"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Exact text to match."
},
"filter_type": {
"type": "string",
"const": "location-is",
"default": "location-is"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "location-exists",
"default": "location-exists"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "location-not_exists",
"default": "location-not_exists"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "boolean",
"description": "Boolean value to match."
},
"filter_type": {
"type": "string",
"const": "has_zoom_recordings-is",
"default": "has_zoom_recordings-is"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "boolean",
"description": "Boolean value to match."
},
"filter_type": {
"type": "string",
"const": "is_recurring-is",
"default": "is_recurring-is"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "boolean",
"description": "Boolean value to match."
},
"filter_type": {
"type": "string",
"const": "has_recording-is",
"default": "has_recording-is"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Exact text to match."
},
"filter_type": {
"type": "string",
"const": "user_note-is",
"default": "user_note-is"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Text to search for (phrase match)."
},
"filter_type": {
"type": "string",
"const": "user_note-contains",
"default": "user_note-contains"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "user_note-exists",
"default": "user_note-exists"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "user_note-not_exists",
"default": "user_note-not_exists"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Exact text to match."
},
"filter_type": {
"type": "string",
"const": "note-is",
"default": "note-is"
}
}
},
{
"type": "object",
"required": [
"value"
],
"properties": {
"value": {
"type": "string",
"minLength": 1,
"description": "Text to search for (phrase match)."
},
"filter_type": {
"type": "string",
"const": "note-contains",
"default": "note-contains"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "note-exists",
"default": "note-exists"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "note-not_exists",
"default": "note-not_exists"
}
}
},
{
"type": "object",
"required": [
"values"
],
"properties": {
"values": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "List of Outcome IDs to match (OR logic). Call find_meeting_outcomes to list valid IDs."
},
"filter_type": {
"type": "string",
"const": "outcome_id-any_of",
"default": "outcome_id-any_of"
}
}
},
{
"type": "object",
"required": [
"values"
],
"properties": {
"values": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "List of Outcome IDs to exclude. Call find_meeting_outcomes to list valid IDs."
},
"filter_type": {
"type": "string",
"const": "outcome_id-none_of",
"default": "outcome_id-none_of"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "outcome_id-exists",
"default": "outcome_id-exists"
}
}
},
{
"type": "object",
"properties": {
"filter_type": {
"type": "string",
"const": "outcome_id-not_exists",
"default": "outcome_id-not_exists"
}
}
}
]
},
"description": "Optional filters to narrow which activity.meetings fire this trigger. All filters are AND-ed together. Available filter_type values: 'participant_count', 'recording_transcript-is', 'title-is', 'title-exists', 'title-not_exists', 'location-is', 'location-exists', 'location-not_exists', 'has_zoom_recordings-is', 'is_recurring-is', 'has_recording-is', 'user_note-is', 'user_note-contains', 'user_note-exists', 'user_note-not_exists', 'note-is', 'note-contains', 'note-exists', 'note-not_exists', 'outcome_id-any_of', 'outcome_id-none_of', 'outcome_id-exists', 'outcome_id-not_exists'."
},
"event_types": {
"enum": [
"created",
"updated",
"created_and_updated"
],
"type": "string",
"default": "created_and_updated",
"description": "Which type of events fire this trigger. \"created\" fires only on object creation. \"updated\" fires only when an existing object starts matching the filters, and requires at least one filter. \"created_and_updated\" fires on both creation and updates (default)."
},
"trigger_type": {
"type": "string",
"const": "meeting-event"
}
},
"description": "Trigger the workflow automatically when a meeting is created or updated (default) — or only on creation ('created'), or only on update ('updated', which needs at least one filter)."
},
{
"type": "object",
"required": [
"trigger_type",
"form_id"
],
"properties": {
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"comparison",
"value"
],
"properties": {
"value": {
"type": "string",
"format": "date-time",
"description": "Absolute timezone aware datetime in ISO 8601 format, e.g. '2025-01-15T00:00:00Z'."
},
"comparison": {
"enum": [
">=",
"<"
],
"type": "string",
"description": "'>=' means on or after, '<' means before."
},
"filter_type": {
"type": "string",
"const": "date_created",
"default": "date_created"
}
}
},
"description": "Optional filters to narrow which activity.form_submissions fire this trigger. All filters are AND-ed together. Available filter_type values: 'date_created'."
},
"form_id": {
"type": "string",
"description": "ID of the Form that fires this trigger (e.g. 'form_abc123'). Call find_forms to list valid IDs."
},
"event_types": {
"type": "string",
"const": "created",
"default": "created",
"description": "Only 'created' events are supported for form submissions."
},
"trigger_type": {
"type": "string",
"const": "form-submission-event"
}
},
"description": "Trigger the workflow automatically when a new form submission is received\nfor a specific form.\n\nBefore using this trigger, call `find_forms` to retrieve the available\nForms and their IDs."
}
],
"default": {
"trigger_type": "contact-manual"
},
"description": "The trigger that determines when and how the workflow fires. The `trigger_type` must exactly match one of the defined types. Use 'contact-manual' (the default) when the user does not specify a trigger."
},
"goal_criteria": {
"type": "object",
"properties": {
"email_reply": {
"type": "boolean",
"default": true
},
"outcome_met": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether this goal can stop the run."
},
"outcome_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The outcomes that stop the run. Call find_call_outcomes or find_meeting_outcomes to list valid IDs. With `enabled` true and no IDs, any outcome stops the run, including ones that mean the call wasn't answered, so a voice agent call step could end the run on its first unanswered call. When `enabled` is false these IDs are ignored."
}
},
"description": "Stop the run when a call or meeting with the contact gets an outcome.\n\nThis is the only goal that reacts to outbound calls the workflow makes,\nso set it for voice agent call steps: list the outcomes that mean the\noutreach is finished, not the ones worth retrying past. Omit to leave\nthis goal off.",
"additionalProperties": false
},
"incoming_sms": {
"type": "boolean",
"default": true
},
"incoming_call": {
"type": "boolean",
"default": true
},
"meeting_booked": {
"type": "boolean",
"default": true
},
"lead_status_change": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether this goal can stop the run."
},
"status_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The lead statuses that stop the run. Call find_lead_statuses to list valid IDs. With `enabled` true and no IDs, any lead status change stops the run. When `enabled` is false these IDs are ignored."
}
},
"description": "Stop the run when the contact's lead moves into a lead status.\n\nOmit to leave this goal off.",
"additionalProperties": false
}
},
"description": "Conditions that stop a workflow run early, before its remaining steps run.\n\nAny one of them stops the run; they are never AND-ed.\nUse the defaults when the user does not specify what should stop the workflow.",
"additionalProperties": false
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"name",
"status",
"steps",
"goal_criteria"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"steps": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"email_template_id",
"threading"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "email"
},
"threading": {
"enum": [
"new_thread",
"old_thread"
],
"type": "string"
},
"email_template_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"sms_template_id"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "sms"
},
"sms_template_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"optional_timeout",
"assign_to_user_id",
"assign_to_agent_config_id",
"assign_to_group_id",
"assign_to_cf_id"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "call"
},
"assign_to_cf_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"optional_timeout": {
"anyOf": [
{
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
{
"type": "string",
"const": "forever"
}
]
},
"assign_to_user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"assign_to_group_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"assign_to_agent_config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"due_in",
"required",
"text"
],
"properties": {
"id": {
"type": "string"
},
"text": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"due_in": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"required": {
"type": "boolean"
},
"step_type": {
"type": "string",
"const": "task"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"field_mappings",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "create-opportunity"
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"update_target",
"field_mappings",
"default_field_action",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "update-opportunity"
},
"update_target": {
"type": "string",
"description": "The opportunity the step updates, e.g. {{trigger.subject.id}}, {{trigger.lead.newest_opportunity}} or {{trigger.lead.oldest_opportunity}}."
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_field_action": {
"enum": [
"skip-if-filled",
"replace-if-filled"
],
"type": "string",
"description": "How the step treats a field that already has a value. This is the step's 'Overwrite existing values' setting in Close, which is on for 'replace-if-filled'. 'skip-if-filled' only fills empty fields, so a mapping on a field that always has a value, such as a status, never applies; a multi-choice field is the exception, and gains any new values alongside the ones it has. 'replace-if-filled' overwrites the existing value, including a multi-choice field's whole selection."
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"field_mappings",
"default_field_action",
"default_add_choice_if_missing"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"step_type": {
"type": "string",
"const": "update-lead"
},
"field_mappings": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
]
},
"default_field_action": {
"enum": [
"skip-if-filled",
"replace-if-filled"
],
"type": "string",
"description": "How the step treats a field that already has a value. This is the step's 'Overwrite existing values' setting in Close, which is on for 'replace-if-filled'. 'skip-if-filled' only fills empty fields, so a mapping on a field that always has a value, such as a status, never applies; a multi-choice field is the exception, and gains any new values alongside the ones it has. 'replace-if-filled' overwrites the existing value, including a multi-choice field's whole selection."
},
"default_add_choice_if_missing": {
"type": "boolean",
"description": "Whether a choice custom field mapped to a value it does not offer gains that value as a new choice. If false, such a value is invalid and the step fails when it runs."
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"assignment_field_id",
"action",
"user_id",
"overwrite"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"action": {
"enum": [
"assign",
"unassign"
],
"type": "string"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"overwrite": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"step_type": {
"type": "string",
"const": "lead-assignment"
},
"assignment_field_id": {
"type": "string"
}
}
},
{
"type": "object",
"required": [
"id",
"step_type",
"delay",
"node_type"
],
"properties": {
"id": {
"type": "string"
},
"delay": {
"type": "string",
"format": "duration",
"description": "Must be an ISO 8601 duration string, e.g. 'PT0S' for no delay, 'PT1H' for 1 hour, 'P1D' for 1 day, 'P1DT12H' for 1 day and 12 hours. Do NOT use shorthand like '0s', '1h', '1d'."
},
"node_type": {
"type": "string"
},
"step_type": {
"type": "string",
"const": "unsupported"
}
},
"description": "A step has not been described yet. Direct the user to the Close UI to inspect it."
}
]
}
},
"status": {
"enum": [
"active",
"paused",
"draft"
],
"type": "string"
},
"goal_criteria": {
"type": "object",
"properties": {
"email_reply": {
"type": "boolean",
"default": true
},
"outcome_met": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether this goal can stop the run."
},
"outcome_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The outcomes that stop the run. Call find_call_outcomes or find_meeting_outcomes to list valid IDs. With `enabled` true and no IDs, any outcome stops the run, including ones that mean the call wasn't answered, so a voice agent call step could end the run on its first unanswered call. When `enabled` is false these IDs are ignored."
}
},
"description": "Stop the run when a call or meeting with the contact gets an outcome.\n\nThis is the only goal that reacts to outbound calls the workflow makes,\nso set it for voice agent call steps: list the outcomes that mean the\noutreach is finished, not the ones worth retrying past. Omit to leave\nthis goal off.",
"additionalProperties": false
},
"incoming_sms": {
"type": "boolean",
"default": true
},
"incoming_call": {
"type": "boolean",
"default": true
},
"meeting_booked": {
"type": "boolean",
"default": true
},
"lead_status_change": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"description": "Whether this goal can stop the run."
},
"status_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The lead statuses that stop the run. Call find_lead_statuses to list valid IDs. With `enabled` true and no IDs, any lead status change stops the run. When `enabled` is false these IDs are ignored."
}
},
"description": "Stop the run when the contact's lead moves into a lead status.\n\nOmit to leave this goal off.",
"additionalProperties": false
}
},
"description": "The workflow's current goal criteria, every one stated. Any one of them\nstops a run early. To change some, pass this back unchanged apart from\nthe criteria you mean to change.",
"additionalProperties": false
}
}
},
"annotations": {
"title": "Create Workflow",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "delete_pipeline",
"description": "Permanently delete an opportunity pipeline.\n\nA pipeline can only be deleted if it has no statuses. The last pipeline\ncannot be deleted.",
"inputSchema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the pipeline to delete"
}
}
},
"annotations": {
"title": "Delete Pipeline",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Permanently delete an opportunity status.
Cannot delete if it's the last opportunity status in the organization or there are
opportunities currently using this status.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
ID of the opportunity status to delete
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "delete_opportunity_status_tool",
"description": "Permanently delete an opportunity status.\n\nCannot delete if it's the last opportunity status in the organization or there are\nopportunities currently using this status.",
"inputSchema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the opportunity status to delete"
}
}
},
"annotations": {
"title": "Delete Opportunity Status",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description81/100
Find opportunities by status (active/won/lost), owner, lead, or
close-date range, optionally only those needing attention, sorted by
soonest close, largest value, or highest confidence. Returns each
opportunity with resolved lead, contact, owner, and status names;
cursor-paginated.
The description explains the capability, when to use it, and what to expect.
Inputs54/100
9 of 14 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
lead_id
Not provided
Missing description. Explain what this value means and how to supply it.
user_ids
Not provided
Missing description. Explain what this value means and how to supply it.
status_ids
Not provided
Missing description. Explain what this value means and how to supply it.
status_type
Not provided
Missing description. Explain what this value means and how to supply it.
needs_attention
Filter by opportunities that may be stalled and need attention. To see why the an opportunity is stalled, direct the user to the opportunities pipeline page.
Clear enough to supply this argument.
lead_view_id
Not provided
Missing description. Explain what this value means and how to supply it.
close_at › anyOf › 0 › start
Start of the date range (inclusive)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
close_at › anyOf › 0 › end
End of the date range (exclusive)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
created_at › anyOf › 0 › start
Start of the date range (inclusive)
Clear enough to supply this argument.
created_at › anyOf › 0 › end
End of the date range (exclusive)
Clear enough to supply this argument.
updated_at › anyOf › 0 › start
Start of the date range (inclusive)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
updated_at › anyOf › 0 › end
End of the date range (exclusive)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sort_by
Order the results; this does not filter them. Ordering by closing_soonest still returns far-out deals, so to restrict to a time window (e.g. 'closing soon') also set close_at.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
Pagination cursor, give only when more results are requested.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description68/100
Create a new opportunity.
Requires a lead ID and status ID. Other fields are optional.
The value should be specified in cents (e.g., $100.00 = 10000).
Describe the returned information so the agent knows whether it will answer the request.
Inputs73/100
Explain the meaning of this value, not just its name.
custom_fields › items › id
ID of the custom field
Explain the meaning of this value, not just its name.
custom_fields › items › value
Value to set on this object for the custom field. Pass null to clear the value.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
lead_id
ID of the lead this opportunity belongs to
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
contact_id
ID of the primary contact for this opportunity
Explain what happens when this optional value is omitted.
user_id
ID of the user assigned to this opportunity. Defaults to the current user.
Clear enough to supply this argument.
status_id
ID of the opportunity status
Explain the meaning of this value, not just its name.
value
Value in cents
Clear enough to supply this argument.
value_period
Period for the value
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
note
Plaintext version of the note.
Explain the meaning of this value, not just its name.
note_html
Rich-text HTML version of the note, wrapped in `<body>...</body>` (e.g. `<body><p>text with <strong>bold</strong></p></body>`). When set, `note` is automatically derived from it, overriding any `note` value passed in the same request.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
confidence
Confidence percentage (0-100)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description70/100
Update an existing opportunity.
Only fields that are provided will be updated.
The value should be specified in cents (e.g., $100.00 = 10000).
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs71/100
Explain the meaning of this value, not just its name.
custom_fields › items › id
ID of the custom field
Explain the meaning of this value, not just its name.
custom_fields › items › value
Value to set on this object for the custom field. Pass null to clear the value.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
id
ID of the opportunity to update
Clear enough to supply this argument.
contact_id
ID of the primary contact for this opportunity
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
user_id
ID of the user assigned to this opportunity
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
status_id
ID of the opportunity status
Explain the meaning of this value, not just its name.
value
Value in cents. Pass clear to clear an existing value.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
value_period
Period for the value
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
note
Plaintext version of the note.
Explain the meaning of this value, not just its name.
note_html
Rich-text HTML version of the note, wrapped in `<body>...</body>` (e.g. `<body><p>text with <strong>bold</strong></p></body>`). When set, `note` is automatically derived from it, overriding any `note` value passed in the same request.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
confidence
Confidence percentage (0-100)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
close_at
Expected close date. Pass clear to clear an existing date.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
List currently configured call outcomes and their descriptions.
Omit agent_config_id for all organization call outcomes. Supply it for a
voice agent's available outcomes; agents without a conversation type use
all organization call outcomes. Requires ViewVoiceAgents when supplied.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
agent_config_id
Voice agent configuration ID from find_voice_agents, used to get that agent's available call outcomes. Omit or pass null for all organization call outcomes.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description81/100
List available scheduling links for the user and org.
User-owned personal links come with a URL. Shared links come with a special
template tag. Each can be inserted into generated templates.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
name_search
Scheduling Link name. Case-insensitive substring search.
Clear enough to supply this argument.
cursor
Pagination cursor. Give only when more results are desired.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
{
"type": "object",
"required": [
"id",
"lead_id",
"lead_name",
"assigned_to",
"assignee_name",
"text",
"due_date",
"priority",
"is_complete",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Unique task identifier"
},
"text": {
"type": "string",
"description": "Task text/instructions"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this task belongs to"
},
"due_date": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Due date: datetime if task has specific time, date if date-only, None if task has no due date"
},
"priority": {
"enum": [
"high",
"medium"
],
"type": "string",
"description": "Task priority level"
},
"lead_name": {
"type": "string",
"description": "Name of the lead this task belongs to"
},
"contact_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the associated contact, if any"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the task was created"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "When the task was last updated"
},
"assigned_to": {
"type": "string",
"description": "ID of the user assigned to task"
},
"is_complete": {
"type": "boolean",
"description": "Whether task has been completed"
},
"contact_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the associated contact, if any"
},
"assignee_name": {
"type": "string",
"description": "Full name of the assigned user"
}
},
"description": "Schema for Task."
}
Original tool metadata
{
"name": "create_task",
"description": "Create a new task for a lead.\n\nA task represents a to-do item that can be assigned to a user\nand optionally associated with a contact.",
"inputSchema": {
"type": "object",
"required": [
"lead_id",
"text"
],
"properties": {
"text": {
"type": "string",
"minLength": 1,
"description": "The task description"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this task belongs to"
},
"due_date": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"default": null,
"description": "Due date or datetime for the task. Can be a date (YYYY-MM-DD) or datetime (ISO 8601). If not provided, the task will be due immediately."
},
"priority": {
"anyOf": [
{
"enum": [
"high",
"medium"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Task priority: 'high' or 'medium'. Defaults to 'medium'. Only set to high if the user explicitly says it's a high priority task."
},
"contact_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the contact associated with this task. Must belong to the specified lead."
},
"assigned_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user to assign the task to. Defaults to the current user if not provided."
},
"send_notification": {
"type": "boolean",
"default": true,
"description": "Send an email notification to the assigned user. Assume notifications should be sent unless the user explicitly tells you not to."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"lead_id",
"lead_name",
"assigned_to",
"assignee_name",
"text",
"due_date",
"priority",
"is_complete",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Unique task identifier"
},
"text": {
"type": "string",
"description": "Task text/instructions"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this task belongs to"
},
"due_date": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"description": "Due date: datetime if task has specific time, date if date-only, None if task has no due date"
},
"priority": {
"enum": [
"high",
"medium"
],
"type": "string",
"description": "Task priority level"
},
"lead_name": {
"type": "string",
"description": "Name of the lead this task belongs to"
},
"contact_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the associated contact, if any"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the task was created"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "When the task was last updated"
},
"assigned_to": {
"type": "string",
"description": "ID of the user assigned to task"
},
"is_complete": {
"type": "boolean",
"description": "Whether task has been completed"
},
"contact_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the associated contact, if any"
},
"assignee_name": {
"type": "string",
"description": "Full name of the assigned user"
}
},
"description": "Schema for Task."
},
"annotations": {
"title": "Create Task",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description76/100
Schedule a call task on a lead, assigned to either a user or a
voice agent (Chloe).
A call task represents a scheduled outbound call that will be made
to the specified contact at the given time. The task can be assigned
to a specific user or dispatched to a voice agent.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs89/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
lead_id
ID of the lead this call task belongs to
Clear enough to supply this argument.
contact_id
ID of the contact to call. Must belong to the specified lead.
Clear enough to supply this argument.
text
The call task description/instructions.
Clear enough to supply this argument.
due_date
Due date or datetime for the call task. Can be a date (YYYY-MM-DD) or datetime (ISO 8601). If not provided, the task will be due immediately.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
assigned_to
ID of the user to assign the call task to. Mutually exclusive with agent_config_id.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
agent_config_id
ID of the voice agent (Chloe) to dispatch the call task to. Mutually exclusive with assigned_to.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Update a call task.
Only fields that are provided will be updated. Reassigning to a user or
voice agent (agent_config_id) affects only this task. Completing a call
task also completes every sibling task sharing its deduplication key.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs86/100
Explain the meaning of this value, not just its name.
id
The ID of the call task to update.
Clear enough to supply this argument.
assigned_to
Reassign the call task to this user. Mutually exclusive with agent_config_id.
Clear enough to supply this argument.
agent_config_id
Reassign (dispatch) the call task to this voice agent. Mutually exclusive with assigned_to.
Clear enough to supply this argument.
text
Updated call task text.
Explain the meaning of this value, not just its name.
due_date
Updated due date or datetime for the call task. Can be a date (YYYY-MM-DD) or datetime (ISO 8601).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
is_complete
Mark the call task as complete (true) or reopen it (false). Completing a call task also completes every sibling task sharing its deduplication key.
Clear enough to supply this argument.
resolution
Resolution to set when completing the call task, e.g. 'skipped'.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description68/100
Find call tasks based on various filters.
You can filter by lead, contact, assignee (a user or a voice agent),
completion state, and scheduled/created/updated dates.
Describe the returned information so the agent knows whether it will answer the request.
Inputs75/100
Explain the meaning of this value, not just its name.
lead_id
Filter by lead ID
Explain the meaning of this value, not just its name.
contact_id
Filter by contact ID
Explain the meaning of this value, not just its name.
assigned_to
Filter by the ID of the user the call task is assigned to
Clear enough to supply this argument.
agent_config_id
Filter by the ID of the voice agent the call task is dispatched to
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
is_complete
Filter by completion status. If not provided, both complete and incomplete call tasks are returned.
Clear enough to supply this argument.
due_date › anyOf › 0 › start
Start of the date range (inclusive)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
due_date › anyOf › 0 › end
End of the date range (exclusive)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
created_at › anyOf › 0 › start
Start of the date range (inclusive)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
created_at › anyOf › 0 › end
End of the date range (exclusive)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
updated_at › anyOf › 0 › start
Start of the date range (inclusive)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
updated_at › anyOf › 0 › end
End of the date range (exclusive)
Clear enough to supply this argument.
cursor
Pagination cursor, give only when more results are requested.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description77/100
Find items in the current user's inbox, such as incoming emails and
SMS, missed calls, voicemails, tasks, and drafts waiting for review.
By default returns the items in the inbox today.
The description explains the capability, when to use it, and what to expect.
Inputs82/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
view
Inbox section: 'inbox' is due today, 'future' is due on a later day or snoozed, 'archive' is done.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
types
Only return these types. Defaults to every type.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
primary_tab
Only return the items the user's Primary inbox tab shows, as set in Customize Primary Tab. Use when the user asks about what they see in their inbox.
Clear enough to supply this argument.
lead_id
Filter by lead ID
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
date › anyOf › 0 › start
Start of the date range (inclusive)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
date › anyOf › 0 › end
End of the date range (exclusive)
Clear enough to supply this argument.
cursor
Pagination cursor, give only when more results are requested.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description81/100
Mark items in the current user's inbox as done, which moves them to the
archive.
Marking an incoming email done can also archive its thread in the user's
mailbox. Marking a call task done links its call, or logs one on its
lead. Marking a lead suggestion done deletes it.
ONLY call this if the user asked to clear these items.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
ids
IDs of the current user's inbox items, from find_notifications. Up to 100 IDs per call.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"required": [
"count"
],
"properties": {
"count": {
"type": "integer",
"description": "Number of inbox items marked done"
},
"errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"message"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the inbox item that could not be marked done"
},
"message": {
"type": "string",
"description": "Why the item could not be marked done"
}
}
},
"default": [],
"description": "Inbox items that could not be marked done, with the reason for each. Items update independently, so some can succeed while others in the same call fail."
}
}
}
Original tool metadata
{
"name": "mark_notifications_done",
"description": "Mark items in the current user's inbox as done, which moves them to the\narchive.\n\nMarking an incoming email done can also archive its thread in the user's\nmailbox. Marking a call task done links its call, or logs one on its\nlead. Marking a lead suggestion done deletes it.\n\nONLY call this if the user asked to clear these items.",
"inputSchema": {
"type": "object",
"required": [
"ids"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"description": "IDs of the current user's inbox items, from find_notifications. Up to 100 IDs per call."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"count"
],
"properties": {
"count": {
"type": "integer",
"description": "Number of inbox items marked done"
},
"errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"message"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the inbox item that could not be marked done"
},
"message": {
"type": "string",
"description": "Why the item could not be marked done"
}
}
},
"default": [],
"description": "Inbox items that could not be marked done, with the reason for each. Items update independently, so some can succeed while others in the same call fail."
}
}
},
"annotations": {
"title": "Mark Inbox Items Done",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Snooze items in the current user's inbox until a later date or time,
when they return to the inbox.
Snoozing a task moves its due date. Snoozing a call task assigned to a
voice agent moves when the agent calls. Snoozing an opportunity-due item
moves the opportunity's expected close date.
ONLY call this if the user asked to snooze these items.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Resolve the mismatch between this description and its schema constraints.
ids
IDs of the current user's inbox items, from find_notifications. Up to 100 IDs per call.
Clear enough to supply this argument.
until
When the items return to the inbox. A date (YYYY-MM-DD) returns them at the start of that day in the user's timezone. A datetime (ISO 8601) returns them at that moment. A time in the past returns them to the inbox now.
Resolve the mismatch between this description and its schema constraints.
{
"type": "object",
"required": [
"count"
],
"properties": {
"count": {
"type": "integer",
"description": "Number of inbox items snoozed"
},
"errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"message"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the inbox item that could not be snoozed"
},
"message": {
"type": "string",
"description": "Why the item could not be snoozed"
}
}
},
"default": [],
"description": "Inbox items that could not be snoozed, with the reason for each. Items update independently, so some can succeed while others in the same call fail."
}
}
}
Original tool metadata
{
"name": "snooze_notifications",
"description": "Snooze items in the current user's inbox until a later date or time,\nwhen they return to the inbox.\n\nSnoozing a task moves its due date. Snoozing a call task assigned to a\nvoice agent moves when the agent calls. Snoozing an opportunity-due item\nmoves the opportunity's expected close date.\n\nONLY call this if the user asked to snooze these items.",
"inputSchema": {
"type": "object",
"required": [
"ids",
"until"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"description": "IDs of the current user's inbox items, from find_notifications. Up to 100 IDs per call."
},
"until": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "string",
"format": "date"
}
],
"description": "When the items return to the inbox. A date (YYYY-MM-DD) returns them at the start of that day in the user's timezone. A datetime (ISO 8601) returns them at that moment. A time in the past returns them to the inbox now."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"count"
],
"properties": {
"count": {
"type": "integer",
"description": "Number of inbox items snoozed"
},
"errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"message"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the inbox item that could not be snoozed"
},
"message": {
"type": "string",
"description": "Why the item could not be snoozed"
}
}
},
"default": [],
"description": "Inbox items that could not be snoozed, with the reason for each. Items update independently, so some can succeed while others in the same call fail."
}
}
},
"annotations": {
"title": "Snooze Inbox Items",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description73/100
Reassign or reprioritize several of the current user's tasks at once.
To move due dates, use snooze_notifications. To complete tasks, use
mark_notifications_done.
ONLY call this if the user asked to change these tasks.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
ids
IDs of the current user's tasks, from find_tasks or the 'task' items from find_notifications. Up to 100 IDs per call.
Clear enough to supply this argument.
assigned_to
ID of the user to reassign every task to. The new assignee gets an email for each open task. Reassigned tasks leave the current user's inbox, so this tool cannot change them back.
Clear enough to supply this argument.
priority
Priority for every task: 'high' or 'medium'. Only set to 'high' if the user explicitly says the tasks are high priority.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"required": [
"count"
],
"properties": {
"count": {
"type": "integer",
"description": "Number of tasks processed without an error, including tasks that already had the requested values"
},
"errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"message"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the task that could not be updated"
},
"message": {
"type": "string",
"description": "Why the task could not be updated"
}
}
},
"default": [],
"description": "Tasks that could not be updated, with the reason for each. Tasks update independently, so some can succeed while others in the same call fail."
}
}
}
Original tool metadata
{
"name": "bulk_update_tasks",
"description": "Reassign or reprioritize several of the current user's tasks at once.\n\nTo move due dates, use snooze_notifications. To complete tasks, use\nmark_notifications_done.\n\nONLY call this if the user asked to change these tasks.",
"inputSchema": {
"type": "object",
"required": [
"ids"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"description": "IDs of the current user's tasks, from find_tasks or the 'task' items from find_notifications. Up to 100 IDs per call."
},
"priority": {
"anyOf": [
{
"enum": [
"high",
"medium"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Priority for every task: 'high' or 'medium'. Only set to 'high' if the user explicitly says the tasks are high priority."
},
"assigned_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user to reassign every task to. The new assignee gets an email for each open task. Reassigned tasks leave the current user's inbox, so this tool cannot change them back."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"count"
],
"properties": {
"count": {
"type": "integer",
"description": "Number of tasks processed without an error, including tasks that already had the requested values"
},
"errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"message"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the task that could not be updated"
},
"message": {
"type": "string",
"description": "Why the task could not be updated"
}
}
},
"default": [],
"description": "Tasks that could not be updated, with the reason for each. Tasks update independently, so some can succeed while others in the same call fail."
}
}
},
"annotations": {
"title": "Bulk Update Tasks",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Fetch an existing custom activity instance by ID.
A custom activity instance is an activity of a custom activity type,
holding the custom field values defined by that type. Returns the
full instance, including its custom field values and the resolved
lead, contact, and user names.
The description explains the capability, when to use it, and what to expect.
Inputs85/100
Input documentation gives an agent enough context to populate the arguments.
{
"type": "object",
"required": [
"id",
"custom_activity_type_id",
"status",
"lead_id",
"activity_at",
"pinned",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom activity instance"
},
"pinned": {
"type": "boolean",
"description": "Whether the custom activity is pinned to the top of the lead's timeline"
},
"status": {
"enum": [
"draft",
"published"
],
"type": "string",
"description": "Whether the custom activity is published or draft; draft instances skip required custom-field validation"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this custom activity belongs to"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user the custom activity is attributed to (its owner; may differ from the creator)"
},
"lead_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the lead this custom activity belongs to"
},
"pinned_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity was pinned, or null if it is not pinned"
},
"user_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user the custom activity is attributed to"
},
"contact_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the contact on the lead this custom activity is associated with, if any"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the custom activity was created"
},
"created_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who created the custom activity"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "When the custom activity was last updated"
},
"updated_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who last updated the custom activity"
},
"activity_at": {
"type": "string",
"format": "date-time",
"description": "When the activity occurred; may be backdated and differ from the creation time"
},
"contact_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the associated contact, if any"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"name": {
"type": "string",
"description": "Name of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value set on this object"
}
}
},
"description": "Custom field values set on this object"
},
"created_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who created the custom activity"
},
"updated_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who last updated the custom activity"
},
"last_published_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity was last published, or null if it has only ever been a draft"
},
"custom_activity_type_id": {
"type": "string",
"description": "ID of the custom activity type that defines this instance's shape and custom fields"
},
"custom_activity_type_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the custom activity type that defines this instance's shape and custom fields"
}
}
}
Original tool metadata
{
"name": "fetch_custom_activity_instance",
"description": "Fetch an existing custom activity instance by ID.\n\nA custom activity instance is an activity of a custom activity type,\nholding the custom field values defined by that type. Returns the\nfull instance, including its custom field values and the resolved\nlead, contact, and user names.",
"inputSchema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom activity instance to fetch"
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"custom_activity_type_id",
"status",
"lead_id",
"activity_at",
"pinned",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom activity instance"
},
"pinned": {
"type": "boolean",
"description": "Whether the custom activity is pinned to the top of the lead's timeline"
},
"status": {
"enum": [
"draft",
"published"
],
"type": "string",
"description": "Whether the custom activity is published or draft; draft instances skip required custom-field validation"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this custom activity belongs to"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user the custom activity is attributed to (its owner; may differ from the creator)"
},
"lead_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the lead this custom activity belongs to"
},
"pinned_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity was pinned, or null if it is not pinned"
},
"user_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user the custom activity is attributed to"
},
"contact_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the contact on the lead this custom activity is associated with, if any"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the custom activity was created"
},
"created_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who created the custom activity"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "When the custom activity was last updated"
},
"updated_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who last updated the custom activity"
},
"activity_at": {
"type": "string",
"format": "date-time",
"description": "When the activity occurred; may be backdated and differ from the creation time"
},
"contact_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the associated contact, if any"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"name": {
"type": "string",
"description": "Name of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value set on this object"
}
}
},
"description": "Custom field values set on this object"
},
"created_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who created the custom activity"
},
"updated_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who last updated the custom activity"
},
"last_published_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity was last published, or null if it has only ever been a draft"
},
"custom_activity_type_id": {
"type": "string",
"description": "ID of the custom activity type that defines this instance's shape and custom fields"
},
"custom_activity_type_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the custom activity type that defines this instance's shape and custom fields"
}
}
},
"annotations": {
"title": "Fetch Custom Activity Instance",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Find a lead's custom activity instances based on various filters.
A custom activity instance is an activity of a custom activity type,
holding the custom field values defined by that type. Always scoped
to a single lead; optionally filter by attributed user, one or more
custom activity types, or activity date. Results are sorted by most
recent activity first and are cursor-paginated.
The description explains the capability, when to use it, and what to expect.
Inputs93/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
lead_id
The lead whose custom activity instances to find
Clear enough to supply this argument.
user_id
Filter custom activity instances by the user they are attributed to (their owner)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
custom_activity_type_ids
Filter by the custom activity types the instances belong to. Provide one or more type IDs to match instances of any of them.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description78/100
Create a new custom activity instance on a lead.
A custom activity instance is an activity of a custom activity type,
holding the custom field values defined by that type. Use the
find_custom_activities tool to look up the available custom activity
types.
If in an interactive session, ask the user for the relevant field values
(including custom fields) before creating, even if they are not required.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
custom_fields › items › id
ID of the custom field
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
custom_fields › items › value
Value to set on this object for the custom field. Pass null to clear the value.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
lead_id
ID of the lead this custom activity belongs to
Clear enough to supply this argument.
custom_activity_type_id
ID of the custom activity type. Use the find_custom_activities tool to look up the available custom activity types.
Clear enough to supply this argument.
status
Status of the custom activity. Published activities validate required custom fields; draft activities do not.
Clear enough to supply this argument.
contact_id
ID of the contact to associate with the custom activity
Clear enough to supply this argument.
user_id
ID of the user to attribute the custom activity to (defaults to the caller)
Clear enough to supply this argument.
activity_at
When the custom activity occurred
Explain what happens when this optional value is omitted.
pinned
Whether to pin the custom activity to the top of the lead's timeline
Clear enough to supply this argument.
date_created
When the custom activity was created. Defaults to now; set this to backfill an activity at a past time.
{
"type": "object",
"required": [
"id",
"custom_activity_type_id",
"status",
"lead_id",
"activity_at",
"pinned",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom activity instance"
},
"pinned": {
"type": "boolean",
"description": "Whether the custom activity is pinned to the top of the lead's timeline"
},
"status": {
"enum": [
"draft",
"published"
],
"type": "string",
"description": "Whether the custom activity is published or draft; draft instances skip required custom-field validation"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this custom activity belongs to"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user the custom activity is attributed to (its owner; may differ from the creator)"
},
"lead_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the lead this custom activity belongs to"
},
"pinned_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity was pinned, or null if it is not pinned"
},
"user_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user the custom activity is attributed to"
},
"contact_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the contact on the lead this custom activity is associated with, if any"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the custom activity was created"
},
"created_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who created the custom activity"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "When the custom activity was last updated"
},
"updated_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who last updated the custom activity"
},
"activity_at": {
"type": "string",
"format": "date-time",
"description": "When the activity occurred; may be backdated and differ from the creation time"
},
"contact_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the associated contact, if any"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"name": {
"type": "string",
"description": "Name of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value set on this object"
}
}
},
"description": "Custom field values set on this object"
},
"created_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who created the custom activity"
},
"updated_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who last updated the custom activity"
},
"last_published_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity was last published, or null if it has only ever been a draft"
},
"custom_activity_type_id": {
"type": "string",
"description": "ID of the custom activity type that defines this instance's shape and custom fields"
},
"custom_activity_type_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the custom activity type that defines this instance's shape and custom fields"
}
}
}
Original tool metadata
{
"name": "create_custom_activity_instance",
"description": "Create a new custom activity instance on a lead.\n\nA custom activity instance is an activity of a custom activity type,\nholding the custom field values defined by that type. Use the\nfind_custom_activities tool to look up the available custom activity\ntypes.\n\nIf in an interactive session, ask the user for the relevant field values\n(including custom fields) before creating, even if they are not required.",
"inputSchema": {
"type": "object",
"required": [
"lead_id",
"custom_activity_type_id"
],
"properties": {
"pinned": {
"type": "boolean",
"default": false,
"description": "Whether to pin the custom activity to the top of the lead's timeline"
},
"status": {
"enum": [
"draft",
"published"
],
"type": "string",
"default": "published",
"description": "Status of the custom activity. Published activities validate required custom fields; draft activities do not."
},
"lead_id": {
"type": "string",
"description": "ID of the lead this custom activity belongs to"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user to attribute the custom activity to (defaults to the caller)"
},
"contact_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the contact to associate with the custom activity"
},
"activity_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity occurred"
},
"date_created": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity was created. Defaults to now; set this to backfill an activity at a past time."
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value to set on this object for the custom field. Pass null to clear the value."
}
}
},
"description": "Custom field values to set on this object. Only the custom fields included are modified; omitted fields are left unchanged."
},
"custom_activity_type_id": {
"type": "string",
"description": "ID of the custom activity type. Use the find_custom_activities tool to look up the available custom activity types."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"custom_activity_type_id",
"status",
"lead_id",
"activity_at",
"pinned",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom activity instance"
},
"pinned": {
"type": "boolean",
"description": "Whether the custom activity is pinned to the top of the lead's timeline"
},
"status": {
"enum": [
"draft",
"published"
],
"type": "string",
"description": "Whether the custom activity is published or draft; draft instances skip required custom-field validation"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this custom activity belongs to"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user the custom activity is attributed to (its owner; may differ from the creator)"
},
"lead_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the lead this custom activity belongs to"
},
"pinned_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity was pinned, or null if it is not pinned"
},
"user_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user the custom activity is attributed to"
},
"contact_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the contact on the lead this custom activity is associated with, if any"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the custom activity was created"
},
"created_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who created the custom activity"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "When the custom activity was last updated"
},
"updated_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who last updated the custom activity"
},
"activity_at": {
"type": "string",
"format": "date-time",
"description": "When the activity occurred; may be backdated and differ from the creation time"
},
"contact_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the associated contact, if any"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"name": {
"type": "string",
"description": "Name of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value set on this object"
}
}
},
"description": "Custom field values set on this object"
},
"created_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who created the custom activity"
},
"updated_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who last updated the custom activity"
},
"last_published_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity was last published, or null if it has only ever been a draft"
},
"custom_activity_type_id": {
"type": "string",
"description": "ID of the custom activity type that defines this instance's shape and custom fields"
},
"custom_activity_type_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the custom activity type that defines this instance's shape and custom fields"
}
}
},
"annotations": {
"title": "Create Custom Activity Instance",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Update an existing custom activity instance.
A custom activity instance is an activity of a custom activity type,
holding the custom field values defined by that type.
Only fields that are provided will be updated. For custom fields, only
the custom fields included are modified; pass null to clear one. Pass
'clear' for contact_id to detach the contact.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs79/100
Explain the meaning of this value, not just its name.
custom_fields › items › id
ID of the custom field
Explain the meaning of this value, not just its name.
custom_fields › items › value
Value to set on this object for the custom field. Pass null to clear the value.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
id
ID of the custom activity instance to update
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
status
New status of the custom activity. Publishing a draft validates required custom fields; leave unset to keep the current status.
Clear enough to supply this argument.
contact_id
ID of the contact to associate with the custom activity; must belong to the same lead. Pass 'clear' to remove the existing contact.
Clear enough to supply this argument.
activity_at
When the custom activity occurred
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
pinned
Whether to pin the custom activity to the top of the lead's timeline
{
"type": "object",
"required": [
"id",
"custom_activity_type_id",
"status",
"lead_id",
"activity_at",
"pinned",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom activity instance"
},
"pinned": {
"type": "boolean",
"description": "Whether the custom activity is pinned to the top of the lead's timeline"
},
"status": {
"enum": [
"draft",
"published"
],
"type": "string",
"description": "Whether the custom activity is published or draft; draft instances skip required custom-field validation"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this custom activity belongs to"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user the custom activity is attributed to (its owner; may differ from the creator)"
},
"lead_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the lead this custom activity belongs to"
},
"pinned_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity was pinned, or null if it is not pinned"
},
"user_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user the custom activity is attributed to"
},
"contact_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the contact on the lead this custom activity is associated with, if any"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the custom activity was created"
},
"created_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who created the custom activity"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "When the custom activity was last updated"
},
"updated_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who last updated the custom activity"
},
"activity_at": {
"type": "string",
"format": "date-time",
"description": "When the activity occurred; may be backdated and differ from the creation time"
},
"contact_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the associated contact, if any"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"name": {
"type": "string",
"description": "Name of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value set on this object"
}
}
},
"description": "Custom field values set on this object"
},
"created_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who created the custom activity"
},
"updated_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who last updated the custom activity"
},
"last_published_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity was last published, or null if it has only ever been a draft"
},
"custom_activity_type_id": {
"type": "string",
"description": "ID of the custom activity type that defines this instance's shape and custom fields"
},
"custom_activity_type_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the custom activity type that defines this instance's shape and custom fields"
}
}
}
Original tool metadata
{
"name": "update_custom_activity_instance",
"description": "Update an existing custom activity instance.\n\nA custom activity instance is an activity of a custom activity type,\nholding the custom field values defined by that type.\n\nOnly fields that are provided will be updated. For custom fields, only\nthe custom fields included are modified; pass null to clear one. Pass\n'clear' for contact_id to detach the contact.",
"inputSchema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom activity instance to update"
},
"pinned": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether to pin the custom activity to the top of the lead's timeline"
},
"status": {
"anyOf": [
{
"enum": [
"draft",
"published"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New status of the custom activity. Publishing a draft validates required custom fields; leave unset to keep the current status."
},
"contact_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "clear"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the contact to associate with the custom activity; must belong to the same lead. Pass 'clear' to remove the existing contact."
},
"activity_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity occurred"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value to set on this object for the custom field. Pass null to clear the value."
}
}
},
"description": "Custom field values to set on this object. Only the custom fields included are modified; omitted fields are left unchanged."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"custom_activity_type_id",
"status",
"lead_id",
"activity_at",
"pinned",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom activity instance"
},
"pinned": {
"type": "boolean",
"description": "Whether the custom activity is pinned to the top of the lead's timeline"
},
"status": {
"enum": [
"draft",
"published"
],
"type": "string",
"description": "Whether the custom activity is published or draft; draft instances skip required custom-field validation"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this custom activity belongs to"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user the custom activity is attributed to (its owner; may differ from the creator)"
},
"lead_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the lead this custom activity belongs to"
},
"pinned_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity was pinned, or null if it is not pinned"
},
"user_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user the custom activity is attributed to"
},
"contact_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the contact on the lead this custom activity is associated with, if any"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the custom activity was created"
},
"created_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who created the custom activity"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "When the custom activity was last updated"
},
"updated_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who last updated the custom activity"
},
"activity_at": {
"type": "string",
"format": "date-time",
"description": "When the activity occurred; may be backdated and differ from the creation time"
},
"contact_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the associated contact, if any"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"name": {
"type": "string",
"description": "Name of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value set on this object"
}
}
},
"description": "Custom field values set on this object"
},
"created_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who created the custom activity"
},
"updated_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who last updated the custom activity"
},
"last_published_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the custom activity was last published, or null if it has only ever been a draft"
},
"custom_activity_type_id": {
"type": "string",
"description": "ID of the custom activity type that defines this instance's shape and custom fields"
},
"custom_activity_type_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the custom activity type that defines this instance's shape and custom fields"
}
}
},
"annotations": {
"title": "Update Custom Activity Instance",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Permanently delete an existing custom activity instance.
This action cannot be undone.
ONLY call this if the user specifically instructed you to delete the
custom activity instance.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Input documentation gives an agent enough context to populate the arguments.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
List all active (non-archived) Custom Activity Types in the organization,
along with the custom fields defined on each type.
Call this before creating a workflow with a "custom-activity-event" trigger
so you can look up the correct Custom Activity Type ID.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"fields"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"type",
"choices",
"accepts_multiple_values",
"is_shared",
"required"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the custom field (e.g. 'cf_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the custom field."
},
"type": {
"enum": [
"text",
"number",
"date",
"datetime",
"choices",
"user",
"hidden",
"textarea",
"contact",
"custom_object",
"richtextarea"
],
"type": "string",
"description": "Data type of the field (e.g. 'text', 'user', 'choices', 'date')."
},
"choices": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Valid options for 'choices' type fields. None for all other types."
},
"required": {
"type": "boolean",
"description": "Whether a value for this field is required on instances of this type."
},
"is_shared": {
"type": "boolean",
"description": "Whether this is a shared field used across multiple object types."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional description of what the field is used for."
},
"accepts_multiple_values": {
"type": "boolean",
"description": "Whether the field can hold more than one value."
}
}
},
"description": "Custom fields defined on this activity type."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
}
}
}
}
}
Original tool metadata
{
"name": "find_custom_activities",
"description": "List all active (non-archived) Custom Activity Types in the organization,\nalong with the custom fields defined on each type.\n\nCall this before creating a workflow with a \"custom-activity-event\" trigger\nso you can look up the correct Custom Activity Type ID.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"fields"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"type",
"choices",
"accepts_multiple_values",
"is_shared",
"required"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the custom field (e.g. 'cf_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the custom field."
},
"type": {
"enum": [
"text",
"number",
"date",
"datetime",
"choices",
"user",
"hidden",
"textarea",
"contact",
"custom_object",
"richtextarea"
],
"type": "string",
"description": "Data type of the field (e.g. 'text', 'user', 'choices', 'date')."
},
"choices": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Valid options for 'choices' type fields. None for all other types."
},
"required": {
"type": "boolean",
"description": "Whether a value for this field is required on instances of this type."
},
"is_shared": {
"type": "boolean",
"description": "Whether this is a shared field used across multiple object types."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional description of what the field is used for."
},
"accepts_multiple_values": {
"type": "boolean",
"description": "Whether the field can hold more than one value."
}
}
},
"description": "Custom fields defined on this activity type."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
}
}
}
}
},
"annotations": {
"title": "Find Custom Activity Types",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Fetch a single custom object type by its ID.
A custom object type defines the shape of a category of custom objects,
including the custom fields its instances hold. Returns the type with
its custom fields.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
ID of the custom object type to fetch.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
{
"type": "object",
"required": [
"id",
"name",
"name_plural",
"description",
"fields"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom object type (e.g. 'cotype_abc123')."
},
"name": {
"type": "string",
"description": "Singular display name of the custom object type."
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"type",
"choices",
"accepts_multiple_values",
"is_shared",
"required"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the custom field (e.g. 'cf_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the custom field."
},
"type": {
"enum": [
"text",
"number",
"date",
"datetime",
"choices",
"user",
"hidden",
"textarea",
"contact",
"custom_object",
"richtextarea"
],
"type": "string",
"description": "Data type of the field (e.g. 'text', 'user', 'choices', 'date')."
},
"choices": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Valid options for 'choices' type fields. None for all other types."
},
"required": {
"type": "boolean",
"description": "Whether a value for this field is required on instances of this type."
},
"is_shared": {
"type": "boolean",
"description": "Whether this is a shared field used across multiple object types."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional description of what the field is used for."
},
"accepts_multiple_values": {
"type": "boolean",
"description": "Whether the field can hold more than one value."
}
}
},
"description": "Custom fields defined on this custom object type."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What this custom object type is used for."
},
"name_plural": {
"type": "string",
"description": "Plural display name of the custom object type."
}
}
}
Original tool metadata
{
"name": "fetch_custom_object_type",
"description": "Fetch a single custom object type by its ID.\n\nA custom object type defines the shape of a category of custom objects,\nincluding the custom fields its instances hold. Returns the type with\nits custom fields.",
"inputSchema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom object type to fetch."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"name",
"name_plural",
"description",
"fields"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom object type (e.g. 'cotype_abc123')."
},
"name": {
"type": "string",
"description": "Singular display name of the custom object type."
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"type",
"choices",
"accepts_multiple_values",
"is_shared",
"required"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the custom field (e.g. 'cf_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the custom field."
},
"type": {
"enum": [
"text",
"number",
"date",
"datetime",
"choices",
"user",
"hidden",
"textarea",
"contact",
"custom_object",
"richtextarea"
],
"type": "string",
"description": "Data type of the field (e.g. 'text', 'user', 'choices', 'date')."
},
"choices": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Valid options for 'choices' type fields. None for all other types."
},
"required": {
"type": "boolean",
"description": "Whether a value for this field is required on instances of this type."
},
"is_shared": {
"type": "boolean",
"description": "Whether this is a shared field used across multiple object types."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional description of what the field is used for."
},
"accepts_multiple_values": {
"type": "boolean",
"description": "Whether the field can hold more than one value."
}
}
},
"description": "Custom fields defined on this custom object type."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What this custom object type is used for."
},
"name_plural": {
"type": "string",
"description": "Plural display name of the custom object type."
}
}
},
"annotations": {
"title": "Fetch Custom Object Type",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
{
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"name_plural",
"description",
"fields"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom object type (e.g. 'cotype_abc123')."
},
"name": {
"type": "string",
"description": "Singular display name of the custom object type."
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"type",
"choices",
"accepts_multiple_values",
"is_shared",
"required"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the custom field (e.g. 'cf_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the custom field."
},
"type": {
"enum": [
"text",
"number",
"date",
"datetime",
"choices",
"user",
"hidden",
"textarea",
"contact",
"custom_object",
"richtextarea"
],
"type": "string",
"description": "Data type of the field (e.g. 'text', 'user', 'choices', 'date')."
},
"choices": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Valid options for 'choices' type fields. None for all other types."
},
"required": {
"type": "boolean",
"description": "Whether a value for this field is required on instances of this type."
},
"is_shared": {
"type": "boolean",
"description": "Whether this is a shared field used across multiple object types."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional description of what the field is used for."
},
"accepts_multiple_values": {
"type": "boolean",
"description": "Whether the field can hold more than one value."
}
}
},
"description": "Custom fields defined on this custom object type."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What this custom object type is used for."
},
"name_plural": {
"type": "string",
"description": "Plural display name of the custom object type."
}
}
}
}
}
}
Original tool metadata
{
"name": "find_custom_object_types",
"description": "List all custom object types in the organization, along with the\ncustom fields defined on each type.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"name_plural",
"description",
"fields"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom object type (e.g. 'cotype_abc123')."
},
"name": {
"type": "string",
"description": "Singular display name of the custom object type."
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"type",
"choices",
"accepts_multiple_values",
"is_shared",
"required"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the custom field (e.g. 'cf_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the custom field."
},
"type": {
"enum": [
"text",
"number",
"date",
"datetime",
"choices",
"user",
"hidden",
"textarea",
"contact",
"custom_object",
"richtextarea"
],
"type": "string",
"description": "Data type of the field (e.g. 'text', 'user', 'choices', 'date')."
},
"choices": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Valid options for 'choices' type fields. None for all other types."
},
"required": {
"type": "boolean",
"description": "Whether a value for this field is required on instances of this type."
},
"is_shared": {
"type": "boolean",
"description": "Whether this is a shared field used across multiple object types."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional description of what the field is used for."
},
"accepts_multiple_values": {
"type": "boolean",
"description": "Whether the field can hold more than one value."
}
}
},
"description": "Custom fields defined on this custom object type."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What this custom object type is used for."
},
"name_plural": {
"type": "string",
"description": "Plural display name of the custom object type."
}
}
}
}
}
},
"annotations": {
"title": "Find Custom Object Types",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Fetch an existing custom object instance by ID.
A custom object instance is a record of a custom object type, attached
to a lead and holding the custom field values defined by that type.
Returns the full instance, including its custom field values and the
resolved lead, custom object type, and creator/updater names.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Input documentation gives an agent enough context to populate the arguments.
{
"type": "object",
"required": [
"id",
"custom_object_type_id",
"lead_id",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom object instance"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Display name of the custom object instance"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this custom object belongs to"
},
"lead_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the lead this custom object belongs to"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the custom object was created"
},
"created_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who created the custom object"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "When the custom object was last updated"
},
"updated_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who last updated the custom object"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"name": {
"type": "string",
"description": "Name of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value set on this object"
}
}
},
"description": "Custom field values set on this object"
},
"created_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who created the custom object"
},
"updated_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who last updated the custom object"
},
"custom_object_type_id": {
"type": "string",
"description": "ID of the custom object type that defines this instance's shape and custom fields"
},
"custom_object_type_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the custom object type this instance belongs to"
}
},
"description": "Represent a custom object instance, with de-normalized relations.\n\nOptimized for an LLM reader: alongside each foreign-key id it exposes a\nhuman-readable name so the caller never needs a follow-up lookup just to\nrender who/what the instance points at."
}
Original tool metadata
{
"name": "fetch_custom_object_instance",
"description": "Fetch an existing custom object instance by ID.\n\nA custom object instance is a record of a custom object type, attached\nto a lead and holding the custom field values defined by that type.\nReturns the full instance, including its custom field values and the\nresolved lead, custom object type, and creator/updater names.",
"inputSchema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom object instance to fetch"
}
},
"description": "Input for fetching a custom object instance by ID."
},
"outputSchema": {
"type": "object",
"required": [
"id",
"custom_object_type_id",
"lead_id",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom object instance"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Display name of the custom object instance"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this custom object belongs to"
},
"lead_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the lead this custom object belongs to"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the custom object was created"
},
"created_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who created the custom object"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "When the custom object was last updated"
},
"updated_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who last updated the custom object"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"name": {
"type": "string",
"description": "Name of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value set on this object"
}
}
},
"description": "Custom field values set on this object"
},
"created_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who created the custom object"
},
"updated_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who last updated the custom object"
},
"custom_object_type_id": {
"type": "string",
"description": "ID of the custom object type that defines this instance's shape and custom fields"
},
"custom_object_type_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the custom object type this instance belongs to"
}
},
"description": "Represent a custom object instance, with de-normalized relations.\n\nOptimized for an LLM reader: alongside each foreign-key id it exposes a\nhuman-readable name so the caller never needs a follow-up lookup just to\nrender who/what the instance points at."
},
"annotations": {
"title": "Fetch Custom Object Instance",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Find a lead's custom object instances.
A custom object instance is a record of a custom object type, attached
to a lead and holding the custom field values defined by that type.
Always scoped to a single lead; optionally filter to a single custom
object type. Results are ordered by creation date (oldest first) and
are cursor-paginated.
The description explains the capability, when to use it, and what to expect.
Inputs67/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
lead_id
The lead whose custom object instances to find
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
custom_object_type_id
Filter to instances of a single custom object type. Use the find_custom_object_types tool to look up the available types.
Clear enough to supply this argument.
cursor
Pagination cursor for retrieving the next page
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Create a new custom object instance on a lead.
A custom object instance is a record of a custom object type, attached
to a lead and holding the custom field values defined by that type. Use
the find_custom_object_types tool to look up the available custom object
types.
If in an interactive session, ask the user for the relevant field values
(including custom fields) before creating, even if they are not required.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
custom_fields › items › id
ID of the custom field
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
custom_fields › items › value
Value to set on this object for the custom field. Pass null to clear the value.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
lead_id
ID of the lead this custom object belongs to
Clear enough to supply this argument.
custom_object_type_id
ID of the custom object type that defines this instance's shape and custom fields. Use the find_custom_object_types tool to look up the available custom object types.
Clear enough to supply this argument.
name
Display name for the custom object instance
Explain what happens when this optional value is omitted.
{
"type": "object",
"required": [
"id",
"custom_object_type_id",
"lead_id",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom object instance"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Display name of the custom object instance"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this custom object belongs to"
},
"lead_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the lead this custom object belongs to"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the custom object was created"
},
"created_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who created the custom object"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "When the custom object was last updated"
},
"updated_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who last updated the custom object"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"name": {
"type": "string",
"description": "Name of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value set on this object"
}
}
},
"description": "Custom field values set on this object"
},
"created_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who created the custom object"
},
"updated_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who last updated the custom object"
},
"custom_object_type_id": {
"type": "string",
"description": "ID of the custom object type that defines this instance's shape and custom fields"
},
"custom_object_type_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the custom object type this instance belongs to"
}
},
"description": "Represent a custom object instance, with de-normalized relations.\n\nOptimized for an LLM reader: alongside each foreign-key id it exposes a\nhuman-readable name so the caller never needs a follow-up lookup just to\nrender who/what the instance points at."
}
Original tool metadata
{
"name": "create_custom_object_instance",
"description": "Create a new custom object instance on a lead.\n\nA custom object instance is a record of a custom object type, attached\nto a lead and holding the custom field values defined by that type. Use\nthe find_custom_object_types tool to look up the available custom object\ntypes.\n\nIf in an interactive session, ask the user for the relevant field values\n(including custom fields) before creating, even if they are not required.",
"inputSchema": {
"type": "object",
"required": [
"lead_id",
"custom_object_type_id",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Display name for the custom object instance"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this custom object belongs to"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value to set on this object for the custom field. Pass null to clear the value."
}
}
},
"description": "Custom field values to set on this object. Only the custom fields included are modified; omitted fields are left unchanged."
},
"custom_object_type_id": {
"type": "string",
"description": "ID of the custom object type that defines this instance's shape and custom fields. Use the find_custom_object_types tool to look up the available custom object types."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"custom_object_type_id",
"lead_id",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom object instance"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Display name of the custom object instance"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this custom object belongs to"
},
"lead_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the lead this custom object belongs to"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the custom object was created"
},
"created_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who created the custom object"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "When the custom object was last updated"
},
"updated_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who last updated the custom object"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"name": {
"type": "string",
"description": "Name of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value set on this object"
}
}
},
"description": "Custom field values set on this object"
},
"created_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who created the custom object"
},
"updated_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who last updated the custom object"
},
"custom_object_type_id": {
"type": "string",
"description": "ID of the custom object type that defines this instance's shape and custom fields"
},
"custom_object_type_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the custom object type this instance belongs to"
}
},
"description": "Represent a custom object instance, with de-normalized relations.\n\nOptimized for an LLM reader: alongside each foreign-key id it exposes a\nhuman-readable name so the caller never needs a follow-up lookup just to\nrender who/what the instance points at."
},
"annotations": {
"title": "Create Custom Object Instance",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
Update an existing custom object instance.
A custom object instance is a record of a custom object type, attached
to a lead and holding the custom field values defined by that type.
Only fields that are provided will be updated. For custom fields, only
the custom fields included are modified; pass null to clear one.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs81/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
custom_fields › items › id
ID of the custom field
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
custom_fields › items › value
Value to set on this object for the custom field. Pass null to clear the value.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
id
ID of the custom object instance to update
Clear enough to supply this argument.
name
New display name for the custom object instance; leave unset to keep the current name.
{
"type": "object",
"required": [
"id",
"custom_object_type_id",
"lead_id",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom object instance"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Display name of the custom object instance"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this custom object belongs to"
},
"lead_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the lead this custom object belongs to"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the custom object was created"
},
"created_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who created the custom object"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "When the custom object was last updated"
},
"updated_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who last updated the custom object"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"name": {
"type": "string",
"description": "Name of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value set on this object"
}
}
},
"description": "Custom field values set on this object"
},
"created_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who created the custom object"
},
"updated_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who last updated the custom object"
},
"custom_object_type_id": {
"type": "string",
"description": "ID of the custom object type that defines this instance's shape and custom fields"
},
"custom_object_type_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the custom object type this instance belongs to"
}
},
"description": "Represent a custom object instance, with de-normalized relations.\n\nOptimized for an LLM reader: alongside each foreign-key id it exposes a\nhuman-readable name so the caller never needs a follow-up lookup just to\nrender who/what the instance points at."
}
Original tool metadata
{
"name": "update_custom_object_instance",
"description": "Update an existing custom object instance.\n\nA custom object instance is a record of a custom object type, attached\nto a lead and holding the custom field values defined by that type.\n\nOnly fields that are provided will be updated. For custom fields, only\nthe custom fields included are modified; pass null to clear one.",
"inputSchema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom object instance to update"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New display name for the custom object instance; leave unset to keep the current name."
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value to set on this object for the custom field. Pass null to clear the value."
}
}
},
"description": "Custom field values to set on this object. Only the custom fields included are modified; omitted fields are left unchanged."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"custom_object_type_id",
"lead_id",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the custom object instance"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Display name of the custom object instance"
},
"lead_id": {
"type": "string",
"description": "ID of the lead this custom object belongs to"
},
"lead_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the lead this custom object belongs to"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "When the custom object was created"
},
"created_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who created the custom object"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "When the custom object was last updated"
},
"updated_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ID of the user who last updated the custom object"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"value"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom field"
},
"name": {
"type": "string",
"description": "Name of the custom field"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Value set on this object"
}
}
},
"description": "Custom field values set on this object"
},
"created_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who created the custom object"
},
"updated_by_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full name of the user who last updated the custom object"
},
"custom_object_type_id": {
"type": "string",
"description": "ID of the custom object type that defines this instance's shape and custom fields"
},
"custom_object_type_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Name of the custom object type this instance belongs to"
}
},
"description": "Represent a custom object instance, with de-normalized relations.\n\nOptimized for an LLM reader: alongside each foreign-key id it exposes a\nhuman-readable name so the caller never needs a follow-up lookup just to\nrender who/what the instance points at."
},
"annotations": {
"title": "Update Custom Object Instance",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Permanently delete an existing custom object instance.
A custom object instance is a record of a custom object type, attached
to a lead and holding the custom field values defined by that type. This
action cannot be undone.
ONLY call this if the user specifically instructed you to delete the
custom object instance.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
Clarify ID sources, units, or usage conventions not already expressed in the schema.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "delete_custom_object_instance",
"description": "Permanently delete an existing custom object instance.\n\nA custom object instance is a record of a custom object type, attached\nto a lead and holding the custom field values defined by that type. This\naction cannot be undone.\n\nONLY call this if the user specifically instructed you to delete the\ncustom object instance.",
"inputSchema": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the custom object instance to delete"
}
},
"description": "Input for deleting a custom object instance by ID."
},
"annotations": {
"title": "Delete Custom Object Instance",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
List all web forms in the organization.
Call this before creating a workflow with a "form-submission-event" trigger
so you can look up the correct Form ID.
Describe the returned information so the agent knows whether it will answer the request.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
List all lead custom fields defined for the organization.
Returns each field's ID, name, description, type, allowed choices
(for choice fields), whether multiple values are accepted, and whether
it is a shared field. Useful for deciding which custom field to read
or write when working with leads.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"type",
"choices",
"accepts_multiple_values",
"is_shared"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the custom field (e.g. 'cf_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the custom field."
},
"type": {
"enum": [
"text",
"number",
"date",
"datetime",
"choices",
"user",
"hidden",
"textarea",
"contact",
"custom_object",
"richtextarea"
],
"type": "string",
"description": "Data type of the field (e.g. 'text', 'user', 'choices', 'date')."
},
"choices": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Valid options for 'choices' type fields. None for all other types."
},
"is_shared": {
"type": "boolean",
"description": "Whether this is a shared field used across multiple object types."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional description of what the field is used for."
},
"accepts_multiple_values": {
"type": "boolean",
"description": "Whether the field can hold more than one value."
}
}
}
}
}
}
Original tool metadata
{
"name": "find_lead_custom_fields",
"description": "List all lead custom fields defined for the organization.\n\nReturns each field's ID, name, description, type, allowed choices\n(for choice fields), whether multiple values are accepted, and whether\nit is a shared field. Useful for deciding which custom field to read\nor write when working with leads.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"type",
"choices",
"accepts_multiple_values",
"is_shared"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the custom field (e.g. 'cf_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the custom field."
},
"type": {
"enum": [
"text",
"number",
"date",
"datetime",
"choices",
"user",
"hidden",
"textarea",
"contact",
"custom_object",
"richtextarea"
],
"type": "string",
"description": "Data type of the field (e.g. 'text', 'user', 'choices', 'date')."
},
"choices": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Valid options for 'choices' type fields. None for all other types."
},
"is_shared": {
"type": "boolean",
"description": "Whether this is a shared field used across multiple object types."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional description of what the field is used for."
},
"accepts_multiple_values": {
"type": "boolean",
"description": "Whether the field can hold more than one value."
}
}
}
}
}
},
"annotations": {
"title": "List Lead Custom Fields",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
List all contact custom fields defined for the organization.
Includes both contact-specific fields and shared fields associated
with contacts. Returns each field's ID, name, description, type,
allowed choices (for choice fields), whether multiple values are
accepted, and whether it is a shared field. Useful for deciding which
custom field to read or write when working with contacts.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"type",
"choices",
"accepts_multiple_values",
"is_shared"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the custom field (e.g. 'cf_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the custom field."
},
"type": {
"enum": [
"text",
"number",
"date",
"datetime",
"choices",
"user",
"hidden",
"textarea",
"contact",
"custom_object",
"richtextarea"
],
"type": "string",
"description": "Data type of the field (e.g. 'text', 'user', 'choices', 'date')."
},
"choices": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Valid options for 'choices' type fields. None for all other types."
},
"is_shared": {
"type": "boolean",
"description": "Whether this is a shared field used across multiple object types."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional description of what the field is used for."
},
"accepts_multiple_values": {
"type": "boolean",
"description": "Whether the field can hold more than one value."
}
}
}
}
}
}
Original tool metadata
{
"name": "find_contact_custom_fields",
"description": "List all contact custom fields defined for the organization.\n\nIncludes both contact-specific fields and shared fields associated\nwith contacts. Returns each field's ID, name, description, type,\nallowed choices (for choice fields), whether multiple values are\naccepted, and whether it is a shared field. Useful for deciding which\ncustom field to read or write when working with contacts.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"type",
"choices",
"accepts_multiple_values",
"is_shared"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the custom field (e.g. 'cf_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the custom field."
},
"type": {
"enum": [
"text",
"number",
"date",
"datetime",
"choices",
"user",
"hidden",
"textarea",
"contact",
"custom_object",
"richtextarea"
],
"type": "string",
"description": "Data type of the field (e.g. 'text', 'user', 'choices', 'date')."
},
"choices": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Valid options for 'choices' type fields. None for all other types."
},
"is_shared": {
"type": "boolean",
"description": "Whether this is a shared field used across multiple object types."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional description of what the field is used for."
},
"accepts_multiple_values": {
"type": "boolean",
"description": "Whether the field can hold more than one value."
}
}
}
}
}
},
"annotations": {
"title": "List Contact Custom Fields",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
List all opportunity custom fields defined for the organization.
Includes both opportunity-specific fields and shared fields associated
with opportunities. Returns each field's ID, name, description, type,
allowed choices (for choice fields), whether multiple values are
accepted, and whether it is a shared field. Useful for deciding which
custom field to read or write when working with opportunities.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"type",
"choices",
"accepts_multiple_values",
"is_shared"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the custom field (e.g. 'cf_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the custom field."
},
"type": {
"enum": [
"text",
"number",
"date",
"datetime",
"choices",
"user",
"hidden",
"textarea",
"contact",
"custom_object",
"richtextarea"
],
"type": "string",
"description": "Data type of the field (e.g. 'text', 'user', 'choices', 'date')."
},
"choices": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Valid options for 'choices' type fields. None for all other types."
},
"is_shared": {
"type": "boolean",
"description": "Whether this is a shared field used across multiple object types."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional description of what the field is used for."
},
"accepts_multiple_values": {
"type": "boolean",
"description": "Whether the field can hold more than one value."
}
}
}
}
}
}
Original tool metadata
{
"name": "find_opportunity_custom_fields",
"description": "List all opportunity custom fields defined for the organization.\n\nIncludes both opportunity-specific fields and shared fields associated\nwith opportunities. Returns each field's ID, name, description, type,\nallowed choices (for choice fields), whether multiple values are\naccepted, and whether it is a shared field. Useful for deciding which\ncustom field to read or write when working with opportunities.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"type",
"choices",
"accepts_multiple_values",
"is_shared"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the custom field (e.g. 'cf_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the custom field."
},
"type": {
"enum": [
"text",
"number",
"date",
"datetime",
"choices",
"user",
"hidden",
"textarea",
"contact",
"custom_object",
"richtextarea"
],
"type": "string",
"description": "Data type of the field (e.g. 'text', 'user', 'choices', 'date')."
},
"choices": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Valid options for 'choices' type fields. None for all other types."
},
"is_shared": {
"type": "boolean",
"description": "Whether this is a shared field used across multiple object types."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional description of what the field is used for."
},
"accepts_multiple_values": {
"type": "boolean",
"description": "Whether the field can hold more than one value."
}
}
}
}
}
},
"annotations": {
"title": "List Opportunity Custom Fields",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
List all voice agents configured for the organization. Voice agents are
AI callers that place outbound calls to leads' contacts on the user's
behalf.
Returns each voice agent's ID, name and whether it is active. Use this
to find the right voice agent ID when scheduling a call or assigning a
call step in a workflow.
Users may refer to voice agents as "voice agents", "Chloe", or by their
configured name. When more than one agent exists, pick the most
appropriate one based on the name.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"is_active"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the agent config (e.g. 'agentconfig_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the voice agent. Users may refer to voice agents as 'Chloe' or by their configured name."
},
"is_active": {
"type": "boolean",
"description": "False while the agent is a draft that has never been activated. A draft agent cannot be assigned to a workflow call step until it is activated."
}
}
}
}
}
}
Original tool metadata
{
"name": "find_voice_agents",
"description": "List all voice agents configured for the organization. Voice agents are\nAI callers that place outbound calls to leads' contacts on the user's\nbehalf.\n\nReturns each voice agent's ID, name and whether it is active. Use this\nto find the right voice agent ID when scheduling a call or assigning a\ncall step in a workflow.\n\nUsers may refer to voice agents as \"voice agents\", \"Chloe\", or by their\nconfigured name. When more than one agent exists, pick the most\nappropriate one based on the name.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"is_active"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the agent config (e.g. 'agentconfig_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the voice agent. Users may refer to voice agents as 'Chloe' or by their configured name."
},
"is_active": {
"type": "boolean",
"description": "False while the agent is a draft that has never been activated. A draft agent cannot be assigned to a workflow call step until it is activated."
}
}
}
}
}
},
"annotations": {
"title": "Find Voice Agents",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Return detailed configuration for one or more voice agents.
Includes each agent's objective, user instructions, and which skills are
enabled. Use this as the follow-up to `find_voice_agents` once one or
more agent IDs have been selected.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
agent_config_ids
IDs of the voice agents (AgentConfig) to fetch details for. Up to 30 IDs per call. Use `find_voice_agents` to discover available agent IDs.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"is_active",
"objective",
"user_instructions",
"skills",
"settings_url"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the agent config (e.g. 'agentconfig_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the agent."
},
"skills": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"enabled"
],
"properties": {
"name": {
"type": "string",
"description": "Skill identifier (e.g. 'CALLBACKS', 'SCHEDULING'). Matches the name the agent uses to refer to the skill in its prompt."
},
"enabled": {
"type": "boolean",
"description": "Whether this skill is currently enabled for the agent."
}
}
},
"description": "All skills configured on the agent and whether each is enabled."
},
"is_active": {
"type": "boolean",
"description": "True if the agent has been activated and is eligible to place calls."
},
"objective": {
"anyOf": [
{
"type": "object",
"required": [
"agent_goal_summary",
"call_type"
],
"properties": {
"call_type": {
"enum": [
"qualification",
"meeting_setting",
"discovery",
"confirmation",
"other"
],
"type": "string",
"description": "The primary purpose of the call (qualification, meeting_setting, discovery, confirmation, other)."
},
"agent_goal_summary": {
"type": "string",
"description": "One-sentence summary of the single successful outcome of the call."
}
}
},
{
"type": "null"
}
],
"description": "Structured objective used to grade the agent's calls. May be null while objective generation is still in flight after a recent config change."
},
"settings_url": {
"type": "string",
"description": "Link to the agent's settings."
},
"user_instructions": {
"type": "string",
"description": "User-provided instructions that drive the agent's behavior during a call."
}
}
}
}
}
}
Original tool metadata
{
"name": "get_voice_agents",
"description": "Return detailed configuration for one or more voice agents.\n\nIncludes each agent's objective, user instructions, and which skills are\nenabled. Use this as the follow-up to `find_voice_agents` once one or\nmore agent IDs have been selected.",
"inputSchema": {
"type": "object",
"required": [
"agent_config_ids"
],
"properties": {
"agent_config_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 30,
"minItems": 1,
"description": "IDs of the voice agents (AgentConfig) to fetch details for. Up to 30 IDs per call. Use `find_voice_agents` to discover available agent IDs."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"objects"
],
"properties": {
"objects": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"is_active",
"objective",
"user_instructions",
"skills",
"settings_url"
],
"properties": {
"id": {
"type": "string",
"description": "Unique ID of the agent config (e.g. 'agentconfig_abc123')."
},
"name": {
"type": "string",
"description": "Display name of the agent."
},
"skills": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"enabled"
],
"properties": {
"name": {
"type": "string",
"description": "Skill identifier (e.g. 'CALLBACKS', 'SCHEDULING'). Matches the name the agent uses to refer to the skill in its prompt."
},
"enabled": {
"type": "boolean",
"description": "Whether this skill is currently enabled for the agent."
}
}
},
"description": "All skills configured on the agent and whether each is enabled."
},
"is_active": {
"type": "boolean",
"description": "True if the agent has been activated and is eligible to place calls."
},
"objective": {
"anyOf": [
{
"type": "object",
"required": [
"agent_goal_summary",
"call_type"
],
"properties": {
"call_type": {
"enum": [
"qualification",
"meeting_setting",
"discovery",
"confirmation",
"other"
],
"type": "string",
"description": "The primary purpose of the call (qualification, meeting_setting, discovery, confirmation, other)."
},
"agent_goal_summary": {
"type": "string",
"description": "One-sentence summary of the single successful outcome of the call."
}
}
},
{
"type": "null"
}
],
"description": "Structured objective used to grade the agent's calls. May be null while objective generation is still in flight after a recent config change."
},
"settings_url": {
"type": "string",
"description": "Link to the agent's settings."
},
"user_instructions": {
"type": "string",
"description": "User-provided instructions that drive the agent's behavior during a call."
}
}
}
}
}
},
"annotations": {
"title": "Get Voice Agents",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Schedule a voice agent to call a lead's contact.
Creates a call task assigned to the voice agent. The voice agent will
place the call automatically at the scheduled time, or as soon as the
queue picks it up when no time is given.
Use `find_voice_agents` first to discover which voice agents are
available in this organization.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
lead_id
ID of the lead to call.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
agent_config_id
ID of the voice agent (AgentConfig) that should make the call. Use `find_voice_agents` to discover available agents.
Clear enough to supply this argument.
scheduled_at
When the call should be made. ISO 8601 datetime, timezone-aware. If omitted, the call is scheduled to run as soon as the voice agent queue picks it up (ASAP).
Clear enough to supply this argument.
contact_id
Optional contact to call. If omitted, the first contact on the lead that has a phone number will be selected.
{
"name": "schedule_voice_agent_call",
"description": "Schedule a voice agent to call a lead's contact.\n\nCreates a call task assigned to the voice agent. The voice agent will\nplace the call automatically at the scheduled time, or as soon as the\nqueue picks it up when no time is given.\n\nUse `find_voice_agents` first to discover which voice agents are\navailable in this organization.",
"inputSchema": {
"type": "object",
"required": [
"lead_id",
"agent_config_id"
],
"properties": {
"lead_id": {
"type": "string",
"description": "ID of the lead to call."
},
"contact_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional contact to call. If omitted, the first contact on the lead that has a phone number will be selected."
},
"scheduled_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"default": null,
"description": "When the call should be made. ISO 8601 datetime, timezone-aware. If omitted, the call is scheduled to run as soon as the voice agent queue picks it up (ASAP)."
},
"agent_config_id": {
"type": "string",
"description": "ID of the voice agent (AgentConfig) that should make the call. Use `find_voice_agents` to discover available agents."
}
}
},
"outputSchema": {
"type": "object",
"required": [
"id",
"lead_id",
"contact_id",
"agent_config_id",
"scheduled_at"
],
"properties": {
"id": {
"type": "string",
"description": "ID of the created call task."
},
"lead_id": {
"type": "string"
},
"contact_id": {
"type": "string"
},
"scheduled_at": {
"type": "string",
"format": "date-time"
},
"agent_config_id": {
"type": "string"
}
}
},
"annotations": {
"title": "Schedule Voice Agent Call",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
Propose a voice agent configuration update from natural-language feedback.
This tool does not apply changes to the voice agent. It returns a short
behavioral summary and proposal ID when the requested edit is clear. If the
feedback is ambiguous, it returns clarification questions instead of making
a proposal. Use apply_voice_agent_update with the proposal ID only after
the user approves the proposal.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
agent_config_id
ID of the voice agent to update.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
feedback
Natural-language feedback describing how the voice agent should change.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
proposal_id
Existing proposal ID to refine. Omit when creating a new proposal.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Apply a previously proposed voice agent update.
This tool persists the server-stored proposal identified by proposal_id.
It does not rerun the feedback processor, and it fails if the proposal has
expired or the voice agent changed after the proposal was created.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
proposal_id
Proposal ID returned by propose_voice_agent_update.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Performance metrics for one voice agent.
Returns the numbers shown on the Performance tab of a Voice Agent
detail page. Passing multiple `agent_config_ids` pools metrics
into a single aggregate (not a per-agent breakdown — for that,
use `get_voice_agent_overview_report`). For per-call drill-down,
search Calls filtered by `agent_config_id`.
When the user is on a Voice Agent page, pull `date_range` from
`page_context.date_range` so the numbers match the UI.
Accepts a relative range such as `last_week` or an absolute period
with `type="absolute"`, `start`, and `end`. For a stored recap, use
its inclusive `timeframe_start` and exclusive `timeframe_end`.
Outcome coverage uses `answered_by_disposition_count`; `answered_count`
is the funnel's Human Reached count.
Percentages: `*_pct` is over `total_calls`;
`engaged_over_answered_pct` and `objective_met_over_answered_pct`
are over `answered` (tier-to-tier conversion). For any other
denominator, compute from `*_count`.
`funnel_previous_period_deltas` is null when the date range has
no defined previous period (e.g. `all_time`).
The description explains the capability, when to use it, and what to expect.
Inputs38/100
2 of 4 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
agent_config_ids
Not provided
Missing description. Explain what this value means and how to supply it.
date_range › anyOf › 1 › type
Not provided
Missing description. Explain what this value means and how to supply it.
date_range › anyOf › 1 › start
Range start (inclusive). Must be a timezone-aware ISO-8601 datetime.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
date_range › anyOf › 1 › end
Range end (exclusive). Must be a timezone-aware ISO-8601 datetime.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
Cross-agent rollup for the Voice Agents list page.
Returns one row per **active** agent — agents with completed calls
in `date_range` **or** queued upcoming calls. Cumulative funnel
counts (`answered`, `engaged`, `objective_met`) plus `total_calls`.
`upcoming_calls` is the agent's queued (not yet completed) calls and
is **not** bound by `date_range` — open tasks are open regardless of
when scheduled (so an agent with only upcoming calls still appears).
Use this to compare agents;
for one agent's outcomes, sentiment, or time saved use
`get_voice_agent_performance_report`. For an inventory of all
configured voice agents regardless of activity, use
`find_agent_configs`.
The Voice Agents list (Agents tab) shows all-time stats, so leave
`date_range` at its default (`all_time`) unless the user asks for a
specific window. (The Upcoming and Recent tabs are call lists, not
this rollup — search Calls for those.)
Rows are sorted server-side per the `sort` field (default
`most_calls`); pass a different mode rather than re-sorting in
your reply. Set `reverse=True` to invert (e.g. `sort=most_calls,
reverse=True` for least active first) — necessary to surface the
bottom of the ordering, since `rows` are capped before they reach
you. `truncated` and `total_agent_count` flag in-scope active
agents; `dormant_agent_count` reports in-scope agents with
**neither** completed calls in the date range **nor** queued
upcoming calls (not included in `rows`).
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 4 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
agent_config_ids
Not provided
Missing description. Explain what this value means and how to supply it.
date_range
Not provided
Missing description. Explain what this value means and how to supply it.
sort
Not provided
Missing description. Explain what this value means and how to supply it.
reverse
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Use AI to determine and set the value of a field on a lead or contact.
The field is enriched using available data on the object and external
sources, and the enriched value is written back to the object. By default
the value is only written if the field is currently empty; set
overwrite_existing_value to True to replace an existing value.
Returns the enriched value along with the model's reasoning and confidence.
Describe the returned information so the agent knows whether it will answer the request.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
object_type
The type of object whose field should be enriched.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
object_id
The ID of the lead or contact to enrich (e.g. 'lead_xxx' or 'cont_xxx').
Clear enough to supply this argument.
field_id
The ID of the field to enrich. This may be a built-in field name or a custom field ID.
Clear enough to supply this argument.
overwrite_existing_value
Whether to overwrite an existing value. When False, the field is only written if it is currently empty.
{
"name": "enrich_field",
"description": "Use AI to determine and set the value of a field on a lead or contact.\n\nThe field is enriched using available data on the object and external\nsources, and the enriched value is written back to the object. By default\nthe value is only written if the field is currently empty; set\noverwrite_existing_value to True to replace an existing value.\n\nReturns the enriched value along with the model's reasoning and confidence.",
"inputSchema": {
"type": "object",
"required": [
"object_type",
"object_id",
"field_id"
],
"properties": {
"field_id": {
"type": "string",
"description": "The ID of the field to enrich. This may be a built-in field name or a custom field ID."
},
"object_id": {
"type": "string",
"description": "The ID of the lead or contact to enrich (e.g. 'lead_xxx' or 'cont_xxx')."
},
"object_type": {
"enum": [
"lead",
"contact"
],
"type": "string",
"description": "The type of object whose field should be enriched."
},
"overwrite_existing_value": {
"type": "boolean",
"default": false,
"description": "Whether to overwrite an existing value. When False, the field is only written if it is currently empty."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"object_type",
"object_id",
"field_id",
"value",
"reasoning",
"confidence"
],
"properties": {
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "string",
"format": "date-time"
},
{
"type": "string",
"format": "date"
},
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "The enriched value."
},
"field_id": {
"type": "string"
},
"object_id": {
"type": "string"
},
"reasoning": {
"type": "string",
"description": "Explanation of how the value was determined."
},
"confidence": {
"enum": [
"high",
"medium",
"low"
],
"type": "string",
"description": "The model's confidence in the enriched value."
},
"object_type": {
"enum": [
"lead",
"contact"
],
"type": "string"
}
}
},
"annotations": {
"title": "Enrich Field",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Close Product Knowledge SearchSearch Close product documentation and knowledge base for relevant information.
02SearchPerform a natural language search for leads or contacts.
03Find OpportunitiesFind opportunities by status (active/won/lost), owner, lead, or
04Fetch an existing contact by ID
05Fetch ObjectsFetch CRM objects by their IDs, with full details: up to 30 per call.
Want to run these tasks against your MCP server with us?
The Close MCP server is a secure, standardized interface that lets Claude directly access and interact with your Close data. Core functionality with Claude:
• Connects Close to Claude via the Model Context Protocol so Claude can use Close as a trusted system of record.
• Read data (e.g., leads, contacts, opportunities, activities) based on your Close permissions.
• Optionally write data — you can allow only safe writes (e.g., create a lead) or full writes (e.g., edit/delete) during setup.
• Enables Claude to answer questions, summarize information, and perform actions in Close.
mcp.readactivity_searchfetch_contactfetch_email_templatefetch_lead_smart_viewfetch_lead_statusfetch_leadfetch_opportunity_statusfetch_opportunityfetch_pipeline_and_opportunity_statusesfetch_sms_templatefind_email_templates+43 more
Close setup, tools, quality score, publishing readiness, and alternatives.
How do I add Close to Claude, ChatGPT, or Cursor?
Add Close to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.close.com/mcp. This server requires OAuth, so complete the login prompt after you connect.
Is Close MCP ready for ChatGPT and Claude?
As of October 28, 2026, Close scores 96/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is Close's MCP tool documentation?
As of October 28, 2026, Close scores 83/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 135 of 135 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What tools does the Close MCP server provide?
Close lists 55 MCP tools, including mcp.read, activity_search, fetch_contact, fetch_email_template, fetch_lead_smart_view, fetch_lead_status, fetch_lead, fetch_opportunity_status, fetch_opportunity, fetch_pipeline_and_opportunity_statuses, fetch_sms_template, and find_email_templates.
What are the best alternatives to Close?
As of November 10, 2026, alternatives to Close in sales-and-marketing on the Manufact MCP leaderboard include item, Flowsery Analytics, Revnu, Clera, and PumpGTM.
Does Close MCP require authentication?
Close requires authentication. Connect it in Claude, ChatGPT, or Cursor and complete the OAuth login prompt.
How can Close improve its MCP documentation?
search is the lowest-scoring reviewed tool at 61/100. 0 of 1 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Who develops Close?
Close is developed by Close. It is listed as partner on the Claude connector directory.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.