GoHighLevel MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GoHighLevel MCP ServerSearch for all unread conversations"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
GoHighLevel MCP Server
A Model Context Protocol (MCP) server that provides tools for managing GoHighLevel (GHL) conversations, tasks, and calendar appointments through AI assistants like Claude.
Features
Conversations
search_conversations - Search and filter conversations with various criteria
get_conversation - Get details of a specific conversation
create_conversation - Create a new conversation with a contact
update_conversation - Update conversation (star, assign, mark as read)
delete_conversation - Delete a conversation
get_messages - Get messages in a conversation
send_message - Send SMS, Email, WhatsApp, or other message types
Tasks
get_tasks - Get all tasks for a contact
get_task - Get a specific task
create_task - Create a new task
update_task - Update an existing task
delete_task - Delete a task
complete_task - Mark a task as completed/incomplete
Calendar & Appointments
get_calendars - Get all calendars in the location
get_calendar - Get details of a specific calendar
get_free_slots - Get available time slots
get_calendar_events - Get events within a date range
get_appointment - Get appointment details
create_appointment - Create a new appointment
update_appointment - Update an appointment
delete_appointment - Delete an appointment
Related MCP server: ghl-mcp
Prerequisites
Node.js 18 or higher
A GoHighLevel account with API access
A Private Integration Token (PIT) from GoHighLevel
Getting Your GHL Credentials
Log into your GoHighLevel sub-account
Go to Settings > Integrations > Private Integrations
Click Create New Integration
Select the required scopes:
Contacts: Read, Write
Conversations: Read, Write
Conversation Messages: Read, Write
Calendars: Read, Write
Calendar Events: Read, Write
Copy the generated Private Integration Token
Note your Location ID (found in Settings > Business Profile or in the URL)
Installation
# Clone or download this repository
cd ghl-mcp-server
# Install dependencies
npm install
# Build the project
npm run buildConfiguration
Environment Variables
Set the following environment variables:
export GHL_API_KEY="pit-your-private-integration-token"
export GHL_LOCATION_ID="your-location-id"Claude Desktop Configuration
Add the server to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"ghl": {
"command": "node",
"args": ["/absolute/path/to/ghl-mcp-server/dist/index.js"],
"env": {
"GHL_API_KEY": "pit-your-private-integration-token",
"GHL_LOCATION_ID": "your-location-id"
}
}
}
}Cursor IDE Configuration
Add to your Cursor MCP settings:
{
"mcpServers": {
"ghl": {
"command": "node",
"args": ["/absolute/path/to/ghl-mcp-server/dist/index.js"],
"env": {
"GHL_API_KEY": "pit-your-private-integration-token",
"GHL_LOCATION_ID": "your-location-id"
}
}
}
}Usage Examples
Once configured, you can use natural language to interact with your GHL account:
Conversations
"Search for all unread conversations"
"Get messages from conversation ID xyz123"
"Send an SMS to contact abc456 saying 'Thank you for your inquiry!'"
"Send an email to contact abc456 with subject 'Follow Up' and body 'Hi, just following up...'"
Tasks
"Show me all tasks for contact xyz123"
"Create a task for contact abc456: Call back tomorrow at 2pm"
"Mark task xyz as completed"
"Update task abc to change the due date to next Monday"
Calendar
"List all calendars"
"Show me appointments for the next 7 days"
"Get free slots for calendar xyz between Jan 15 and Jan 20"
"Create an appointment for contact abc456 on January 15th at 10am"
"Cancel appointment xyz123"
API Reference
Conversation Tools
search_conversations
Search conversations with filters like contactId, assignedTo, query text, status, and message direction.
send_message
Send messages with support for:
SMS: Simple text messages
Email: With subject, HTML body, CC/BCC, attachments
WhatsApp: WhatsApp messages
IG/FB: Instagram and Facebook messages
Live_Chat: Live chat messages
Task Tools
create_task
Create tasks with:
Title (required)
Description/body
Due date (ISO 8601 format)
Assignment to specific user
Completion status
Calendar Tools
create_appointment
Create appointments with:
Calendar ID (required)
Contact ID (required)
Start/end time (ISO 8601 format)
Title and description
Meeting location (Zoom, Google Meet, custom, etc.)
Appointment status
Notifications/automations toggle
Development
# Run in development mode
npm run dev
# Build only
npm run build
# Start production server
npm startTroubleshooting
Common Issues
"GHL_API_KEY and GHL_LOCATION_ID environment variables are required"
Ensure both environment variables are set correctly
"401 Unauthorized" errors
Verify your Private Integration Token is valid
Check that the token has the required scopes
"400 Bad Request" errors
Verify the request parameters match the API requirements
Check that IDs (contact, calendar, etc.) are valid
Server not appearing in Claude Desktop
Verify the path to the server is correct
Check the Claude Desktop logs for errors
Restart Claude Desktop after configuration changes
Required Scopes
For full functionality, your Private Integration Token needs these scopes:
contacts.readonly- Read contact informationcontacts.write- Create and update tasksconversations.readonly- Read conversationsconversations.write- Create/update conversationsconversations/message.readonly- Read messagesconversations/message.write- Send messagescalendars.readonly- Read calendarscalendars.write- Manage calendarscalendars/events.readonly- Read eventscalendars/events.write- Create/update appointments
License
MIT
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Available Tools
21 toolscomplete_taskB
Mark a task as completed or incomplete
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The task ID to update | |
| completed | Yes | Whether to mark the task as completed | |
| contactId | Yes | The contact ID the task belongs to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It only states the action without mentioning side effects, idempotency, error handling, permissions, or return behavior. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler or redundant information. It is well-structured and front-loaded, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple and the schema coverage is complete, but the lack of usage guidelines and behavioral transparency leaves gaps. With no output schema, the agent cannot infer return values or error behavior. This is acceptable but not outstanding, so a score of 3 is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all three parameters with descriptions, so the schema provides the necessary semantic detail. The tool description adds no additional parameter context, warranting the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'mark' and the resource 'task', and specifies the binary outcome of 'completed or incomplete'. It distinguishes itself from get/delete/create, though it overlaps semantically with update_task, making it slightly less distinct but still clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided on when to use this tool versus alternatives like update_task. The usage is implied by the name and description (toggling completion state), but there are no exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_appointmentB
Create a new appointment/calendar event
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Appointment title | |
| address | No | Meeting location/address or link | |
| endTime | No | End time in ISO 8601 format | |
| toNotify | No | Whether to send notifications/run automations | |
| contactId | Yes | Contact ID for the appointment | |
| startTime | Yes | Start time in ISO 8601 format (e.g., 2024-01-15T10:00:00+00:00) | |
| calendarId | Yes | Calendar ID to create the appointment in | |
| description | No | Appointment description | |
| assignedUserId | No | User ID to assign the appointment to | |
| appointmentStatus | No | Status of the appointment | |
| meetingLocationType | No | Type of meeting location |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it merely states the action without explaining side effects, required permissions, or the impact of parameters like toNotify. It does not mention whether notifications are sent, whether the appointment is linked to a contact, or any other consequences beyond the obvious creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence and is free of fluff, but it is too minimal to be considered well-structured for a tool with 11 parameters. It essentially restates the tool name and provides no additional context, so while it is concise, it does not fully earn its place as a helpful description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description should at least mention return values, side effects, or prerequisites. It does none of these, leaving gaps around what happens after creation and what conditions must be met. The complexity (11 parameters, enums, required fields) demands more context than a single generic sentence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 11 parameters are already documented in the schema. The description adds no parameter-specific meaning, but the baseline of 3 applies since the schema does the heavy lifting. No extra credit is earned, nor is any deduction warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Create' and clarifies the resource as 'appointment/calendar event', clearly distinguishing it from sibling tools like create_task and create_conversation. It leaves no ambiguity about what action is performed on which resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention related tools like get_free_slots, update_appointment, or delete_appointment, nor does it state any prerequisites or exclusions. The agent is left without context for the appropriate invocation scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_conversationB
Create a new conversation with a contact
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | The contact ID to create a conversation with |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It only states the basic action but does not disclose side effects, required permissions, return value, or potential errors. For a mutation tool, this is insufficient transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no superfluous information. It is front-loaded and directly states the purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter, and the schema fully documents that parameter. However, the description lacks information about the return value or any creation semantics (e.g., whether it returns the created conversation), so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter is described as 'The contact ID to create a conversation with'. The description adds no additional nuance beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action and resource: 'Create a new conversation with a contact'. It uses a specific verb ('Create') and resource ('conversation'), and is distinct from sibling tools like update_conversation or get_conversation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites (e.g., contact must exist) or scenarios where another tool like send_message might be more appropriate. The description only states the action without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskB
Create a new task for a contact
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Task description/body | |
| title | Yes | Task title | |
| dueDate | Yes | Due date in ISO 8601 format (e.g., 2024-01-15T10:00:00Z) | |
| completed | No | Whether the task is completed | |
| contactId | Yes | The contact ID to create the task for | |
| assignedTo | No | User ID to assign the task to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only states the action and does not disclose behavioral traits such as side effects, permission requirements, return values, or whether the task is persisted immediately. With no annotations provided, the description carries the full burden of transparency, and it does not meet that burden. It is not misleading but is severely under-informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no redundant words, making it appropriately concise and front-loaded. However, its brevity means it omits useful operational details, though this does not violate conciseness principles.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six parameters, no annotations, and no output schema, the description is too minimal to provide complete context. It does not mention return values, error semantics, or relationships to other task operations. The schema covers parameter meanings but not the broader behavioral context an agent needs for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All six parameters are already fully described in the input schema (100% coverage), so the description adds no additional semantic meaning beyond what the schema provides. The mention of 'for a contact' aligns with contactId but does not elaborate on its format or behavior, so the description does not compensate beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new task for a contact' clearly identifies the action (create), the resource (task), and the scope (for a contact), distinguishing it from sibling tools like get_tasks, update_task, and delete_task. It is a specific verb+resource statement that leaves no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit usage guidelines are provided. The verb 'create' implies the tool is for new tasks, distinguishing it from update_task or complete_task, but no alternatives, prerequisites, or conditions are mentioned. The usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_appointmentC
Delete/cancel an appointment
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | The appointment/event ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It simply states the action without explaining whether the deletion is permanent, what cascading effects occur, or any authorization requirements. The verb 'delete' implies destructive behavior but no further context is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short and to the point, which is appropriate for a simple one-parameter deletion tool. It is concise and front-loaded without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a destructive operation with no annotations and no output schema, the description is under-specified. It lacks information about side effects, cancellation semantics, or when to use it compared to other appointment tools, leaving the agent to infer too much.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the eventId parameter with a clear description, and schema description coverage is 100%. The tool description adds no additional meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes or cancels an appointment, using a specific verb and resource. It is distinguishable from sibling tools like get_appointment or create_appointment, though it does not elaborate on any distinction between 'delete' and 'cancel'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as update_appointment or other delete tools. The context signals show sibling tools, but the description does not mention them or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_conversationC
Delete a conversation
| Name | Required | Description | Default |
|---|---|---|---|
| conversationId | Yes | The conversation ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It merely states 'Delete a conversation' without mentioning irreversibility, cascading effects on related data (e.g., messages), permissions, or any side effects. This is insufficient for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no redundancy. It effectively communicates the basic action, though it is minimal in content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations or output schema, the description is incomplete. It fails to explain what happens after deletion, whether the action is reversible, or any effect on related resources. This is a significant gap for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage with a clear description for conversationId ('The conversation ID to delete'). The tool description adds no further parameter context, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Delete') and resource ('conversation'), clearly distinguishing it from sibling tools like get_conversation and update_conversation. It lacks detail about scope or consequences, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives, nor any prerequisites or exclusions. The intended use is only implied by the tool name and basic description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_taskC
Delete a task
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The task ID to delete | |
| contactId | Yes | The contact ID the task belongs to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry the burden of behavioral transparency. It only states the action 'Delete a task' but does not disclose consequences such as irreversibility, cascading effects, permissions, or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, making it concise, but it is under-specified and repeats the tool name. It does not earn its place as it adds no new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has two required parameters and no output schema, yet the description is too sparse. It fails to explain the role of 'contactId' or what the agent should expect after deletion, leaving significant context gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for both 'taskId' and 'contactId', so the baseline is 3. The description adds no parameter-specific meaning or relationships beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Delete a task' is a near-verbatim restatement of the tool name 'delete_task' and adds no scope or distinguishing detail. While it does identify the action and resource, it is effectively a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool, prerequisites, or alternatives. It does not compare with sibling tools such as 'update_task' or 'complete_task'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_appointmentB
Get details of a specific appointment
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | The appointment/event ID to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only says 'Get details', implying a read operation, but does not disclose what happens if the appointment is not found, what fields are returned, or any other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no wasted words. It is front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter get tool, the description is minimally adequate, but it lacks mention of the return format (no output schema) and any usage context. The tool is not complex enough to require extensive detail, yet the absence of output schema info creates a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes the only parameter (eventId) with a clear description, so schema coverage is 100%. The tool description adds no param information, aligning with the baseline of 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get details of a specific appointment' clearly states a specific verb (Get) and resource (appointment details). It distinguishes the tool from siblings like get_calendar_events (which likely lists events) and create/update/delete_appointment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as get_calendar_events or get_free_slots. It does not mention any prerequisites, exclusions, or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_calendarB
Get details of a specific calendar
| Name | Required | Description | Default |
|---|---|---|---|
| calendarId | Yes | The calendar ID to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It only says 'get details' with no mention of side effects, auth requirements, return format, or error behavior. It does not exceed the basic implied read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It is appropriately concise for a simple getter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description is minimally adequate but leaves ambiguity about what 'details' includes (metadata only vs. events). Given the sibling context, mentioning that this returns calendar metadata rather than events would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameter (calendarId) with a clear description. The tool description adds no additional semantic value beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches details for one calendar, using the verb 'Get' and the resource 'calendar'. It distinguishes from siblings like get_calendars (plural) and get_calendar_events, though 'details' is slightly vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as get_calendars for listing or get_calendar_events for events. The description does not mention exclusions or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_calendar_eventsA
Get calendar events/appointments within a date range
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | Filter by user ID (owner of appointments) | |
| endTime | Yes | End time in milliseconds since epoch | |
| groupId | No | Filter by group ID | |
| startTime | Yes | Start time in milliseconds since epoch | |
| calendarId | No | Filter by calendar ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states that it retrieves events, but does not disclose behavioral details such as whether all calendars are searched when no calendarId is given, pagination, ordering, or inclusion of canceled appointments. This is a significant gap for a tool with no structured safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action and object, with zero fluff. It is concise and well-structured, though it could have included more guidance without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, no output schema, and many sibling tools, the description is too sparse. It does not clarify the return format, whether filtering is optional, or how it relates to get_appointment (singular). An agent may invoke it incorrectly without knowing the default scope (e.g., all calendars) or how to limit results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters already have descriptions. The description adds the concept of 'date range', which maps to startTime/endTime, but does not elaborate on the filter parameters (userId, groupId, calendarId) beyond schema. Baseline 3 is appropriate since the schema handles the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'calendar events/appointments', with scope restricted to a date range. This distinguishes it from sibling tools like get_appointment (singular event) and get_calendars (calendar metadata), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies use when retrieving events within a date range. However, it does not explicitly contrast with get_appointment for single events or mention when not to use it (e.g., for free-slot queries). The context is clear but lacks exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_calendarsB
Get all calendars in the location
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It states only a basic 'get' operation but does not disclose any potential side effects, permissions, pagination, error behaviors, or how results are returned. The minimal wording provides scant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that is concise and easily parsed. It does not waste words, though it could have added a bit more context without harm.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and minimal description, the tool leaves significant gaps. It does not clarify what 'the location' refers to, what a 'calendar' includes, or what the return value looks like. This is insufficiently complete for an agent to confidently invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema is trivially complete. The description adds slightly by indicating the resource type ('calendars') and scope ('all'), but for parameter meaning this is irrelevant. Baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get all calendars in the location' uses a specific verb and resource, and the word 'all' clearly distinguishes it from the sibling tool 'get_calendar' (singular). This makes the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like 'get_calendar' or 'get_calendar_events'. The only implicit hint is 'all', but there is no explicit statement of scope or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conversationA
Get details of a specific conversation by ID
| Name | Required | Description | Default |
|---|---|---|---|
| conversationId | Yes | The conversation ID to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the basic function and does not describe return format, error behavior, permissions, or what 'details' include (e.g., whether messages are included). This is minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. It is front-loaded with the action and resource, and every word earns its place. Very concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter retrieval tool, the description is somewhat sufficient, but without an output schema it does not clarify what 'details' includes. This could lead to ambiguity given sibling tools like get_messages. Overall, it covers the core action but leaves the scope of returned data unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the conversationId parameter with a description. The tool description adds no additional semantic detail beyond restating 'by ID', so it adds no value beyond the schema. Baseline 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets a specific conversation by ID, using the verb 'get', the resource 'conversation', and the scope mechanism 'by ID'. This distinguishes it from search_conversations, which is for searching, and from create/update/delete operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to use this tool versus alternatives. The phrase 'by ID' implies it is for direct retrieval when an ID is already known, but it does not mention search_conversations or state exclusions. This is implied usage rather than explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_free_slotsC
Get available time slots for a calendar
| Name | Required | Description | Default |
|---|---|---|---|
| userId | No | Filter by specific user ID | |
| endDate | Yes | End date in YYYY-MM-DD format | |
| timezone | No | Timezone for the slots (e.g., America/New_York) | |
| startDate | Yes | Start date in YYYY-MM-DD format | |
| calendarId | Yes | The calendar ID to check for free slots |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It only says 'Get available time slots,' implying a read-only operation, but does not describe return format, pagination, timezone handling, or any side effects. This is a significant gap for a tool with no structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It is appropriately concise, though it lacks additional structure that could convey more useful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has moderate complexity (5 parameters, timezone handling) and no output schema, so the description should compensate by explaining what the response looks like or what 'available' means. It does neither, leaving the tool's overall behavior partially underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes all 5 parameters with 100% coverage, so the description does not need to add much. However, the description itself adds no extra meaning about parameters beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves available time slots for a calendar, using a specific verb and resource. It is distinct from sibling tools like get_calendar_events (which likely returns events, not free slots), though it does not explicitly differentiate itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_calendar_events or get_appointment. There are no exclusions, prerequisites, or contextual usage hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messagesA
Get messages in a conversation
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of messages to return | |
| lastMessageId | No | Last message ID for pagination | |
| conversationId | Yes | The conversation ID to get messages from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It does not mention pagination, ordering, return type, or any limitations. The presence of limit and lastMessageId in the schema suggests important behaviors that the description fails to explain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that directly states the operation without unnecessary words. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with full schema coverage, the description is adequate but lacks context about return format and pagination behavior. It does not explain how limit and lastMessageId affect the result, but this is partially covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 3 parameters have descriptions in the input schema (100% coverage), so the description adds no additional meaning. It does not elaborate on limit or lastMessageId semantics, but the schema already covers these adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'get' with resource 'messages' and scope 'in a conversation', clearly distinguishing it from sibling tools like get_conversation which targets the conversation object itself. It is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied by the phrase 'in a conversation' — it is clear you need a conversation ID. However, there is no explicit mention of when to use this tool versus alternatives like search_conversations or get_conversation, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskA
Get a specific task by ID
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The task ID to retrieve | |
| contactId | Yes | The contact ID the task belongs to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action and does not mention required context (e.g., the need for contactId), potential return format, error behavior, or any side effects. For a tool with no annotations, this is insufficient disclosure of behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that is concise and to the point. It contains no redundant or filler information, earning a perfect score for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple get operation with two parameters and no output schema, but the description lacks details that would help the agent fully understand the invocation context. For example, it does not mention that `contactId` is also required, nor does it describe the expected return value. While the schema supplies parameter info, the description alone is minimally adequate for a straightforward retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both `taskId` and `contactId` have descriptions), so the baseline is 3. The description adds no extra parameter meaning beyond the schema; it only mentions 'ID' without clarifying the dual-parameter requirement. Since the schema handles parameter documentation, this score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a specific task by ID, with a specific verb ('Get') and resource ('task'). The phrase 'a specific task' distinguishes it from the sibling tool `get_tasks` which likely lists tasks. This is a clear, unambiguous purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives like `get_tasks` or `create_task`. Usage is implied by the name and purpose: it is for retrieving one task by ID. However, no explicit guidance or exclusions are provided, leaving it to the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tasksB
Get all tasks for a specific contact
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | The contact ID to get tasks for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of behavioral disclosure. It indicates a read operation and filters by contact, but does not disclose pagination, ordering, error handling, required permissions, or return format details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is efficiently front-loaded with the action and resource. Every word earns its place, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter, but with no output schema or annotations, the description should ideally clarify what is returned. It states 'all tasks' but does not describe the response structure, potential limits, or other operational details, leaving some ambiguity for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (contactId is described as 'The contact ID to get tasks for'), so the description adds no new parameter semantics beyond confirming the contact-specific scope. A baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the action (get), the resource (all tasks), and the scope (for a specific contact), clearly distinguishing it from sibling get_task which retrieves a single task. It leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit usage guidance is provided. The description does not mention when to use this versus alternatives like get_task, nor does it state any exclusions or prerequisites. The usage is implied by the name and description but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_conversationsA
Search and filter conversations in GoHighLevel. Returns a list of conversations matching the search criteria.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default: 20) | |
| query | No | Search text to filter conversations | |
| status | No | Filter by conversation status | |
| contactId | No | Filter by specific contact ID | |
| assignedTo | No | Filter by assigned user ID | |
| lastMessageDirection | No | Filter by last message direction |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the basic purpose and result, but does not mention that it is read-only, how filters combine, pagination behavior, or any side effects. This is insufficient for a tool with multiple filtering options.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that clearly states the tool's purpose and return behavior. No filler words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a basic search tool: it states the purpose and that a list is returned. However, it lacks details about default behavior when no filters are provided, pagination, and result ordering. Given the absence of an output schema and annotations, the description could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description does not need to restate parameters. The description adds no additional meaning beyond the schema, such as how filters interact or default ordering. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Search and filter') and the resource ('conversations in GoHighLevel'), and explicitly states the return type ('a list of conversations'). This distinguishes it from sibling tools like get_conversation, which presumably fetches a single conversation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for finding conversations by criteria, but does not explicitly state when to use it over alternatives such as get_conversation or create_conversation. No exclusions or alternative tool names are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageB
Send a message to a contact (SMS, Email, WhatsApp, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | HTML content for email messages | |
| type | Yes | Type of message to send | |
| emailTo | No | Recipient email address override | |
| message | No | The message content (for SMS, WhatsApp, etc.) | |
| subject | No | Email subject (required for Email type) | |
| contactId | Yes | The contact ID to send the message to | |
| emailFrom | No | Sender email address (for Email type) | |
| attachments | No | Array of attachment URLs | |
| scheduledTimestamp | No | UTC timestamp (in seconds) to schedule the message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the basic action ('send') without mentioning permissions, side effects, failure modes, delivery guarantees, or response behavior. For a mutation tool with no annotation support, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that directly states the tool's purpose. It is front-loaded and contains no filler or redundant details, earning full marks for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters, no output schema, and no annotations, the description lacks critical context. It does not explain how parameters interact per channel (e.g., subject needed for email), scheduling behavior, or expected response. The schema covers parameters, but the overall description leaves notable gaps in usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% description coverage for all 9 parameters, including types, enum values, and field-specific notes (e.g., 'subject required for Email type'). The description adds little beyond reiterating message types (SMS, Email, WhatsApp) which are already in the schema, so it does not compensate beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends a message to a contact and lists examples of channels (SMS, Email, WhatsApp, etc.), using a specific verb and resource. This distinguishes it from sibling tools that manage conversations, tasks, or calendars, none of which are message-sending tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used for sending messages but provides no explicit when-to-use or when-not-to-use guidance. It does not mention alternatives or exclusions, though there are no obvious sibling tools with overlapping functionality, so the implied usage is generally clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_appointmentC
Update an existing appointment
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | New appointment title | |
| address | No | New meeting location/address | |
| endTime | No | New end time in ISO 8601 format | |
| eventId | Yes | The appointment/event ID to update | |
| startTime | No | New start time in ISO 8601 format | |
| calendarId | No | New calendar ID (to move appointment) | |
| description | No | New appointment description | |
| assignedUserId | No | New user ID to assign the appointment to | |
| appointmentStatus | No | New status of the appointment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral details, but it only says 'Update an existing appointment'. It doesn't mention whether partial updates are allowed, what happens if the eventId doesn't exist, any permission requirements, or side effects like notifications. The term 'existing' hints at a precondition but nothing more.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is front-loaded with the verb and resource. However, it is so minimal that it borders on under-specification, though not enough to be penalized heavily.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 9 parameters, no output schema, and no annotations, the description is severely incomplete. It fails to explain how the fields interact, whether all fields are optional after specifying eventId, or what the expected outcome or response is. The schema covers parameter names but not behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 9 parameters clearly. The description adds no additional parameter semantics beyond what the schema provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (update) and the resource (appointment), and the word 'existing' distinguishes it from create/delete/get appointment tools. However, it provides no detail about what aspects can be updated, relying entirely on the schema for that context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like create_appointment or delete_appointment, nor any prerequisites such as the appointment needing to exist. The description is purely declarative with no contextual direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_conversationA
Update a conversation (star/unstar, assign to user, mark as read)
| Name | Required | Description | Default |
|---|---|---|---|
| starred | No | Star or unstar the conversation | |
| assignedTo | No | User ID to assign the conversation to | |
| unreadCount | No | Set the unread count (0 to mark as read) | |
| conversationId | Yes | The conversation ID to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It names the specific update operations, which is useful, but it does not mention side effects such as permission requirements, whether updates are partial, or what the tool returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with the verb and resource front-loaded, followed by concrete examples. There is no wasted or redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but the description omits critical context such as whether updates are partial or replace the entire conversation, auth requirements, and return values. Given the lack of output schema and annotations, this is a moderate gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions, so the description adds no new parameter-level information. The parenthetical examples simply restate the schema fields (star/unstar, assign, mark as read), earning the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates a conversation and lists specific actions (star/unstar, assign, mark as read), which distinguishes it from siblings like search_conversations, get_conversation, create_conversation, and delete_conversation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided on when to use this tool versus alternatives. The context is implied through the listed examples, but there is no mention of when not to use it or reference to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskC
Update an existing task
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | New task description/body | |
| title | No | New task title | |
| taskId | Yes | The task ID to update | |
| dueDate | No | New due date in ISO 8601 format | |
| completed | No | Whether the task is completed | |
| contactId | Yes | The contact ID the task belongs to | |
| assignedTo | No | User ID to assign the task to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It simply states 'Update an existing task' without explaining side effects, permissions, partial update behavior, or return values. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short, which is concise, but it is under-specified rather than appropriately concise. It fits the purpose of a brief label but offers no structural advantage beyond that.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no annotations and no output schema, this description is critically incomplete. It does not explain the operation's nuances, required fields, or behavioral expectations, leaving the agent with only the raw schema to rely on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for all 7 parameters, so the baseline is 3. The description adds no additional parameter semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses clear verb 'Update' with resource 'task', distinguishing it from create_task, get_task, delete_task, and complete_task. The scope is not detailed, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this tool versus alternatives like complete_task or create_task. No exclusions, prerequisites, or context are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
21 tool updates
v1.0.0- First observed
complete_task - First observed
create_appointment - First observed
create_conversation - First observed
create_task - First observed
delete_appointment - First observed
delete_conversation - First observed
delete_task - First observed
get_appointment - First observed
get_calendar - First observed
get_calendar_events - First observed
get_calendars - First observed
get_conversation - First observed
get_free_slots - First observed
get_messages - First observed
get_task - First observed
get_tasks - First observed
search_conversations - First observed
send_message - First observed
update_appointment - First observed
update_conversation - First observed
update_task
TDQS
Scored across 21 tools
Tools are clearly grouped by resource (conversations, tasks, calendars), and each has a distinct action. The only minor overlap is between get_calendar_events and get_appointment, but descriptions clarify that one lists events by date range while the other fetches a specific appointment.
Most tools follow a consistent verb_noun pattern in snake_case (e.g., create_conversation, update_task, delete_appointment). Minor deviations include pluralization differences (get_messages vs get_conversation) and the special case 'complete_task', but the overall convention is predictable.
21 tools is on the heavier side, falling into the 'feels heavy' range (16-25). However, the count is justified by covering CRUD for three distinct domains (conversations, tasks, appointments), so it is not excessive.
The server provides full CRUD for conversations, tasks, and appointments, plus message retrieval and sending. Minor gaps exist such as no update/delete for messages and no management of calendars themselves, but these are not critical to the core workflows.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Marketo MCP server for AI. 130 tools to operate Marketo from Claude, Cursor, or ChatGPT.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- AlicenseBqualityDmaintenanceA comprehensive MCP server that connects AI assistants to GoHighLevel CRM, enabling management of contacts, conversations, calendars, pipelines, payments, and more through 60+ tools.6427 npm1MIT
- AlicenseBqualityDmaintenanceMCP server for GoHighLevel API v2 that provides 50+ tools for CRM, billing, marketing, and operations workflows, enabling natural language interaction with contacts, opportunities, conversations, and more.501MIT
- AlicenseCqualityAmaintenanceA Model Context Protocol (MCP) server for GoHighLevel API v2 — giving any AI agent full access to your GHL location.10025 npm6MIT
- AlicenseAqualityCmaintenanceMCP server that lets you talk to your GoHighLevel sub-account in plain English, offering six tools to search contacts, list calendars, check free slots, and book appointments with dry-run safety and explicit error messages.6MIT