Skip to main content
Glama
geopopos

GoHighLevel MCP Server

by geopopos

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

  1. Log into your GoHighLevel sub-account

  2. Go to Settings > Integrations > Private Integrations

  3. Click Create New Integration

  4. Select the required scopes:

    • Contacts: Read, Write

    • Conversations: Read, Write

    • Conversation Messages: Read, Write

    • Calendars: Read, Write

    • Calendar Events: Read, Write

  5. Copy the generated Private Integration Token

  6. 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 build

Configuration

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 start

Troubleshooting

Common Issues

  1. "GHL_API_KEY and GHL_LOCATION_ID environment variables are required"

    • Ensure both environment variables are set correctly

  2. "401 Unauthorized" errors

    • Verify your Private Integration Token is valid

    • Check that the token has the required scopes

  3. "400 Bad Request" errors

    • Verify the request parameters match the API requirements

    • Check that IDs (contact, calendar, etc.) are valid

  4. 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 information

  • contacts.write - Create and update tasks

  • conversations.readonly - Read conversations

  • conversations.write - Create/update conversations

  • conversations/message.readonly - Read messages

  • conversations/message.write - Send messages

  • calendars.readonly - Read calendars

  • calendars.write - Manage calendars

  • calendars/events.readonly - Read events

  • calendars/events.write - Create/update appointments

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Available Tools

21 tools
complete_taskB

Mark a task as completed or incomplete

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe task ID to update
completedYesWhether to mark the task as completed
contactIdYesThe contact ID the task belongs to

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoAppointment title
addressNoMeeting location/address or link
endTimeNoEnd time in ISO 8601 format
toNotifyNoWhether to send notifications/run automations
contactIdYesContact ID for the appointment
startTimeYesStart time in ISO 8601 format (e.g., 2024-01-15T10:00:00+00:00)
calendarIdYesCalendar ID to create the appointment in
descriptionNoAppointment description
assignedUserIdNoUser ID to assign the appointment to
appointmentStatusNoStatus of the appointment
meetingLocationTypeNoType of meeting location

TDQS

B3/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesThe contact ID to create a conversation with

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoTask description/body
titleYesTask title
dueDateYesDue date in ISO 8601 format (e.g., 2024-01-15T10:00:00Z)
completedNoWhether the task is completed
contactIdYesThe contact ID to create the task for
assignedToNoUser ID to assign the task to

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
eventIdYesThe appointment/event ID to delete

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
conversationIdYesThe conversation ID to delete

TDQS

C2.7/5.0
Behavior1/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe task ID to delete
contactIdYesThe contact ID the task belongs to

TDQS

C2.1/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose2/5

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.

Usage Guidelines1/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
eventIdYesThe appointment/event ID to retrieve

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
calendarIdYesThe calendar ID to retrieve

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoFilter by user ID (owner of appointments)
endTimeYesEnd time in milliseconds since epoch
groupIdNoFilter by group ID
startTimeYesStart time in milliseconds since epoch
calendarIdNoFilter by calendar ID

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
conversationIdYesThe conversation ID to retrieve

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNoFilter by specific user ID
endDateYesEnd date in YYYY-MM-DD format
timezoneNoTimezone for the slots (e.g., America/New_York)
startDateYesStart date in YYYY-MM-DD format
calendarIdYesThe calendar ID to check for free slots

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of messages to return
lastMessageIdNoLast message ID for pagination
conversationIdYesThe conversation ID to get messages from

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe task ID to retrieve
contactIdYesThe contact ID the task belongs to

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesThe contact ID to get tasks for

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default: 20)
queryNoSearch text to filter conversations
statusNoFilter by conversation status
contactIdNoFilter by specific contact ID
assignedToNoFilter by assigned user ID
lastMessageDirectionNoFilter by last message direction

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.)

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlNoHTML content for email messages
typeYesType of message to send
emailToNoRecipient email address override
messageNoThe message content (for SMS, WhatsApp, etc.)
subjectNoEmail subject (required for Email type)
contactIdYesThe contact ID to send the message to
emailFromNoSender email address (for Email type)
attachmentsNoArray of attachment URLs
scheduledTimestampNoUTC timestamp (in seconds) to schedule the message

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoNew appointment title
addressNoNew meeting location/address
endTimeNoNew end time in ISO 8601 format
eventIdYesThe appointment/event ID to update
startTimeNoNew start time in ISO 8601 format
calendarIdNoNew calendar ID (to move appointment)
descriptionNoNew appointment description
assignedUserIdNoNew user ID to assign the appointment to
appointmentStatusNoNew status of the appointment

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
starredNoStar or unstar the conversation
assignedToNoUser ID to assign the conversation to
unreadCountNoSet the unread count (0 to mark as read)
conversationIdYesThe conversation ID to update

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoNew task description/body
titleNoNew task title
taskIdYesThe task ID to update
dueDateNoNew due date in ISO 8601 format
completedNoWhether the task is completed
contactIdYesThe contact ID the task belongs to
assignedToNoUser ID to assign the task to

TDQS

C2.4/5.0
Behavior1/5

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.

Conciseness3/5

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.

Completeness1/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 21 tool updatesv1.0.0
    • First observedcomplete_task
    • First observedcreate_appointment
    • First observedcreate_conversation
    • First observedcreate_task
    • First observeddelete_appointment
    • First observeddelete_conversation
    • First observeddelete_task
    • First observedget_appointment
    • First observedget_calendar
    • First observedget_calendar_events
    • First observedget_calendars
    • First observedget_conversation
    • First observedget_free_slots
    • First observedget_messages
    • First observedget_task
    • First observedget_tasks
    • First observedsearch_conversations
    • First observedsend_message
    • First observedupdate_appointment
    • First observedupdate_conversation
    • First observedupdate_task

TDQS

B3.1/5.0

Scored across 21 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A comprehensive MCP server that connects AI assistants to GoHighLevel CRM, enabling management of contacts, conversations, calendars, pipelines, payments, and more through 60+ tools.
    64
    27 npm
    1
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    MCP 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.
    50
    1
    MIT