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.
Protocol
MCP 2025-11-25
Server version
latest
Supports
Tools
Overall score
A
Overall quality score: 89 out of 10089/100
Server metadata
4 of 8 fields50/1005 / 10 pts
Identity, discovery, and usage metadata advertised during the MCP handshake.
Organizations can rename the builtin objects (Lead, Contact, Opportunity, and their statuses). When a user mentions an object you don't recognize, call the `customized_builtin_labels` tool first to learn this org's customized labels. Use the following format when using the customized label: CustomizedLabel (DefaultLabel). Assume the user is already familiar with their own customizations — don't explain what the renaming means, just apply the format consistently.
Protocol
Pass100/10020 / 20 pts
Connection, authentication, and protocol compatibility.
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.
Description84/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.
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.
Inputs78/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.
Description97/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-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-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
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description77/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.
Inputs67/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
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
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.
Description64/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.
Description71/100
Fetch a single email activity by ID.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
id
The ID of the email to fetch.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
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.
Description88/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.
Inputs79/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.
Description97/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.
Inputs82/100
Clarify ID sources, units, or usage conventions not already expressed in the schema.
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.
Inputs57/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.
Description70/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.
The description explains the capability, when to use it, and what to expect.
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)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
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.
The title clearly communicates the tool’s action and subject. Keep it concise.
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.
Description67/100
Perform an aggregation to answer questions like:
- How many emails were sent this week?
- Calls by user this week (Who made the most?)
You MUST first fetch the list of available fields using the
`get_fields` tool.
Describe the returned information so the agent knows whether it will answer the request.
Inputs14/100
5 of 27 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.
group_by
Reference or enum fields to group by, max 2
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
time_buckets › anyOf › 0 › field
Not provided
Missing description. Explain what this value means and how to supply it.
time_buckets › anyOf › 0 › interval
Determined automatically from real data by default.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_fields",
"description": "Use this tool ONLY to get a list of fields for the aggregation tool.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"annotations": {
"title": "Get Fields",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description76/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.
Inputs92/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.
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.
Description77/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.
Inputs0/100
0 of 1 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
agent_config_id
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.
Description82/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.
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
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
lead_id
Filter by lead ID
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
contact_id
Filter by contact ID
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
assigned_to
Filter by the ID of the user the call task is assigned to
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
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.
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.
Description87/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.
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.
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.
Clear enough to supply this argument.
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.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/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.
Inputs79/100
Input documentation gives an agent enough context to populate the arguments.
{
"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.
Inputs88/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.
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.
Description100/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.
Description98/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 and name. 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"
],
"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."
}
}
}
}
}
}
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 and name. Use this to find the right\nvoice agent ID when scheduling a call or assigning a call step in a\nworkflow.\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"
],
"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."
}
}
}
}
}
},
"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.
Description96/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.
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.
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.
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 5, 2026, close scores 100/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 5, 2026, close scores 84/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 69 of 69 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 October 20, 2026, alternatives to close in sales-and-marketing on the Manufact MCP leaderboard include Griddo AX Docs, Rocket Sloth, Affitor, Affonso.io, and Tolt.
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 62/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.