Skip to main content
Glama
NightSquawk

@nightsquawktech/gohighlevel-mcp-server

by NightSquawk

GoHighLevel MCP Server

npm version npm downloads OpenSSF Scorecard License: AGPL-3.0 Node

An MCP (Model Context Protocol) server for GoHighLevel, connecting your CRM to AI tools. 56 curated tools over the GoHighLevel API v2, built to fill the gaps the official HighLevel MCP leaves open: full custom-field CRUD, contact delete, and a guarded duplicate-contact merge.

Quick start

Claude

Download for Claude Desktop

bash (macOS/Linux):

GHL_API_TOKEN="pit-your-private-integration-token"
GHL_LOCATION_ID="your-location-id"

claude mcp add gohighlevel \
  --env GHL_API_TOKEN="$GHL_API_TOKEN" \
  --env GHL_LOCATION_ID="$GHL_LOCATION_ID" \
  -- npx -y @nightsquawktech/gohighlevel-mcp-server

PowerShell (Windows):

$GHL_API_TOKEN = "pit-your-private-integration-token"
$GHL_LOCATION_ID = "your-location-id"

claude mcp add gohighlevel `
  --env "GHL_API_TOKEN=$GHL_API_TOKEN" `
  --env "GHL_LOCATION_ID=$GHL_LOCATION_ID" `
  -- npx -y @nightsquawktech/gohighlevel-mcp-server

Cursor

Add to Cursor

Or put the mcp.json block in .cursor/mcp.json, then verify with:

agent mcp list

(The Cursor CLI manages configured servers but has no mcp add; install is via the button or mcp.json.)

VS Code

Install in VS Code

bash (macOS/Linux):

GHL_API_TOKEN="pit-your-private-integration-token"
GHL_LOCATION_ID="your-location-id"

code --add-mcp '{"name":"gohighlevel","command":"npx","args":["-y","@nightsquawktech/gohighlevel-mcp-server"],"env":{"GHL_API_TOKEN":"'"$GHL_API_TOKEN"'","GHL_LOCATION_ID":"'"$GHL_LOCATION_ID"'"}}'

PowerShell (Windows):

$GHL_API_TOKEN = "pit-your-private-integration-token"
$GHL_LOCATION_ID = "your-location-id"

$config = @{
  name = "gohighlevel"
  command = "npx"
  args = @("-y", "@nightsquawktech/gohighlevel-mcp-server")
  env = @{
    GHL_API_TOKEN = $GHL_API_TOKEN
    GHL_LOCATION_ID = $GHL_LOCATION_ID
  }
} | ConvertTo-Json -Compress

code --add-mcp $config

Codex

bash (macOS/Linux):

GHL_API_TOKEN="pit-your-private-integration-token"
GHL_LOCATION_ID="your-location-id"

codex mcp add gohighlevel \
  --env GHL_API_TOKEN="$GHL_API_TOKEN" \
  --env GHL_LOCATION_ID="$GHL_LOCATION_ID" \
  -- npx -y @nightsquawktech/gohighlevel-mcp-server

PowerShell (Windows):

$GHL_API_TOKEN = "pit-your-private-integration-token"
$GHL_LOCATION_ID = "your-location-id"

codex mcp add gohighlevel `
  --env "GHL_API_TOKEN=$GHL_API_TOKEN" `
  --env "GHL_LOCATION_ID=$GHL_LOCATION_ID" `
  -- npx -y @nightsquawktech/gohighlevel-mcp-server

Or add it to ~/.codex/config.toml under [mcp_servers.gohighlevel].

mcp.json

Every environment variable the server reads, with recommended values:

{
  "mcpServers": {
    "gohighlevel": {
      "command": "npx",
      "args": ["-y", "@nightsquawktech/gohighlevel-mcp-server"],
      "env": {
        "GHL_API_TOKEN": "pit-your-private-integration-token",
        "GHL_LOCATION_ID": "your-location-id",
        "GHL_BASE_URL": "https://services.leadconnectorhq.com",
        "GHL_API_VERSION": "2021-07-28",
        "GHL_TIMEOUT_MS": "30000"
      }
    }
  }
}

File locations: .mcp.json in your project root (Claude Code), claude_desktop_config.json (Claude Desktop), .cursor/mcp.json (Cursor).

Related MCP server: ghl-mcp

Configuration

Variable

Required

Default

Purpose

GHL_API_TOKEN

yes

Private Integration token (pit-...) from Settings > Private Integrations, or an OAuth sub-account access token

GHL_LOCATION_ID

yes

Default GoHighLevel sub-account/location ID; individual calls can override it

GHL_BASE_URL

no

https://services.leadconnectorhq.com

GoHighLevel API v2 base URL

GHL_API_VERSION

no

2021-07-28

Version header sent on every request

GHL_TIMEOUT_MS

no

30000

HTTP timeout for API requests, minimum 1000

Security & write safety

GoHighLevel credentials: create a dedicated Private Integration in Settings > Private Integrations and grant only the scopes you need (for example contacts.readonly, contacts.write, locations/customFields.write, opportunities.readonly). Dropping a .write scope from the token makes that domain hard read-only no matter what the tools attempt.

This server is a read/write CRM surface: of its 56 tools, 22 are read-only, 22 create or update records, and 12 are destructive (deletes, tag/workflow removal, contact merge, outbound message send).

  • Every destructive tool refuses to call the API unless the request includes confirm: true; without it the tool returns an error and nothing is sent to GoHighLevel.

  • ghl_send_message (outbound SMS/email to real contacts) is confirm-gated for the same reason.

  • ghl_merge_contacts_delete_loser previews by default: it reads both contacts, checks the loser for notes, tasks, conversations, and opportunities, and refuses to delete a loser with any history even when confirmed.

  • Create and update tools execute directly (no confirm flag); their descriptions instruct the model not to run against live data without explicit approval, but the API call itself is not blocked. Scope the token accordingly.

  • All requests go directly from your machine to your GoHighLevel instance; nothing passes through third parties.

IMPORTANT

Theconfirm: true gate is a guardrail, not a security boundary. The env vars in your MCP config are real credentials, and an AI agent with shell access can bypass the MCP tools and call the GoHighLevel API directly with them. If you need hard read-only, enforce it at the source: grant the Private Integration token only .readonly scopes.

Tools

ghl_list_custom_fields             List custom fields for a location
ghl_get_custom_field               Get one custom field
ghl_create_custom_field            Create a custom field
ghl_update_custom_field            Update a custom field
ghl_delete_custom_field            Delete a custom field (confirm: true)
ghl_list_custom_fields_v2          List Custom Fields V2 fields/folders by object key
ghl_get_custom_field_v2            Get a Custom Fields V2 field or folder by ID
ghl_create_custom_field_v2         Create a Custom Fields V2 field
ghl_update_custom_field_v2         Update a Custom Fields V2 field
ghl_delete_custom_field_v2         Delete a Custom Fields V2 field (confirm: true)
ghl_create_custom_field_folder     Create a Custom Fields V2 folder
ghl_update_custom_field_folder     Rename a Custom Fields V2 folder
ghl_delete_custom_field_folder     Delete a Custom Fields V2 folder (confirm: true)

ghl_list_custom_values             List custom values for a location
ghl_get_custom_value               Get one custom value
ghl_create_custom_value            Create a custom value
ghl_update_custom_value            Update a custom value
ghl_delete_custom_value            Delete a custom value (confirm: true)

ghl_search_contacts                Search contacts with server-side filters
ghl_get_contact                    Get one contact
ghl_create_contact                 Create a contact
ghl_update_contact                 Update a contact
ghl_upsert_contact                 Create or update a contact in one call
ghl_delete_contact                 Delete a contact (confirm: true)
ghl_merge_contacts_delete_loser    Guarded duplicate merge: preview, then delete loser and copy its email to survivor (confirm: true)
ghl_add_contact_tags               Add tags to a contact
ghl_remove_contact_tags            Remove tags from a contact (confirm: true)
ghl_add_contact_to_workflow        Add a contact to a workflow
ghl_remove_contact_from_workflow   Remove a contact from a workflow (confirm: true)
ghl_get_contact_notes              List notes on a contact
ghl_create_contact_note            Create a note on a contact
ghl_get_contact_tasks              List tasks on a contact
ghl_create_contact_task            Create a task on a contact

ghl_list_tags                      List tags for a location
ghl_get_tag                        Get one tag
ghl_create_tag                     Create a location tag
ghl_update_tag                     Rename a location tag
ghl_delete_tag                     Delete a location tag (confirm: true)

ghl_search_opportunities           Search opportunities with server-side filters
ghl_get_pipelines                  List opportunity pipelines and stages
ghl_get_opportunity                Get one opportunity
ghl_create_opportunity             Create an opportunity
ghl_update_opportunity             Update an opportunity
ghl_update_opportunity_status      Set opportunity status (open/won/lost/abandoned)
ghl_delete_opportunity             Delete an opportunity (confirm: true)

ghl_search_conversations           Search conversations
ghl_get_conversation_messages      List messages in a conversation
ghl_send_message                   Send an outbound SMS/email/message (confirm: true)

ghl_list_calendars                 List calendars for a location
ghl_get_calendar_events            List calendar events
ghl_get_free_slots                 Get free booking slots for a calendar
ghl_create_appointment             Create an appointment
ghl_update_appointment             Update an appointment
ghl_delete_appointment             Delete a calendar event (confirm: true)

ghl_get_location                   Get the location/sub-account details
ghl_list_users                     List users for a location

All tools return both text and structuredContent; read tools support response_format: "markdown" | "json" plus limit/offset pagination.

API coverage

56 operations covered across the GoHighLevel API v2 (services.leadconnectorhq.com).

Category

Operations

Custom fields (v1 + V2 + folders)

13

Custom values

5

Contacts (incl. notes, tasks, tags, workflows, merge)

15

Tags

5

Opportunities & pipelines

7

Conversations & messages

3

Calendars & appointments

6

Locations & users

2

Method

Path

Tool

GET

/locations/{locationId}/customFields

ghl_list_custom_fields

GET

/locations/{locationId}/customFields/{id}

ghl_get_custom_field

POST

/locations/{locationId}/customFields

ghl_create_custom_field

PUT

/locations/{locationId}/customFields/{id}

ghl_update_custom_field

DELETE

/locations/{locationId}/customFields/{id}

ghl_delete_custom_field

GET

/custom-fields/object-key/{objectKey}

ghl_list_custom_fields_v2

GET

/custom-fields/{id}

ghl_get_custom_field_v2

POST

/custom-fields/

ghl_create_custom_field_v2

PUT

/custom-fields/{id}

ghl_update_custom_field_v2

DELETE

/custom-fields/{id}

ghl_delete_custom_field_v2

POST

/custom-fields/folder

ghl_create_custom_field_folder

PUT

/custom-fields/folder/{id}

ghl_update_custom_field_folder

DELETE

/custom-fields/folder/{id}

ghl_delete_custom_field_folder

Method

Path

Tool

GET

/locations/{locationId}/customValues

ghl_list_custom_values

GET

/locations/{locationId}/customValues/{id}

ghl_get_custom_value

POST

/locations/{locationId}/customValues

ghl_create_custom_value

PUT

/locations/{locationId}/customValues/{id}

ghl_update_custom_value

DELETE

/locations/{locationId}/customValues/{id}

ghl_delete_custom_value

Method

Path

Tool

POST

/contacts/search

ghl_search_contacts

GET

/contacts/{contactId}

ghl_get_contact

POST

/contacts/

ghl_create_contact

PUT

/contacts/{contactId}

ghl_update_contact

POST

/contacts/upsert

ghl_upsert_contact

DELETE

/contacts/{contactId}

ghl_delete_contact

GET, DELETE, PUT

/contacts/{contactId} (composite)

ghl_merge_contacts_delete_loser

POST

/contacts/{contactId}/tags

ghl_add_contact_tags

DELETE

/contacts/{contactId}/tags

ghl_remove_contact_tags

POST

/contacts/{contactId}/workflow/{workflowId}

ghl_add_contact_to_workflow

DELETE

/contacts/{contactId}/workflow/{workflowId}

ghl_remove_contact_from_workflow

GET

/contacts/{contactId}/notes

ghl_get_contact_notes

POST

/contacts/{contactId}/notes

ghl_create_contact_note

GET

/contacts/{contactId}/tasks

ghl_get_contact_tasks

POST

/contacts/{contactId}/tasks

ghl_create_contact_task

The merge tool composes preflight reads (GET /contacts/{contactId} on both contacts, GET /contacts/{contactId}/notes, GET /contacts/{contactId}/tasks, GET /conversations/search, GET /opportunities/search) before DELETE /contacts/{loserId} and PUT /contacts/{survivorId}.

Method

Path

Tool

GET

/locations/{locationId}/tags

ghl_list_tags

GET

/locations/{locationId}/tags/{tagId}

ghl_get_tag

POST

/locations/{locationId}/tags

ghl_create_tag

PUT

/locations/{locationId}/tags/{tagId}

ghl_update_tag

DELETE

/locations/{locationId}/tags/{tagId}

ghl_delete_tag

Method

Path

Tool

GET

/opportunities/search

ghl_search_opportunities

GET

/opportunities/pipelines

ghl_get_pipelines

GET

/opportunities/{id}

ghl_get_opportunity

POST

/opportunities/

ghl_create_opportunity

PUT

/opportunities/{id}

ghl_update_opportunity

PUT

/opportunities/{id}/status

ghl_update_opportunity_status

DELETE

/opportunities/{id}

ghl_delete_opportunity

Method

Path

Tool

GET

/conversations/search

ghl_search_conversations

GET

/conversations/{conversationId}/messages

ghl_get_conversation_messages

POST

/conversations/messages

ghl_send_message

Method

Path

Tool

GET

/calendars/

ghl_list_calendars

GET

/calendars/events

ghl_get_calendar_events

GET

/calendars/{calendarId}/free-slots

ghl_get_free_slots

POST

/calendars/events/appointments

ghl_create_appointment

PUT

/calendars/events/appointments/{eventId}

ghl_update_appointment

DELETE

/calendars/events/{eventId}

ghl_delete_appointment

Method

Path

Tool

GET

/locations/{locationId}

ghl_get_location

GET

/users/

ghl_list_users

Contributing

Contributions and issues are welcome. Please open an issue first before submitting a PR.

License

AGPL-3.0: free for personal and open-source use. Organizations that cannot comply with the AGPL can purchase a commercial license, and hosted/managed versions are available. See COMMERCIAL.md or contact hello@nightsquawk.tech.

For copyright concerns or takedown requests, contact hello@nightsquawk.tech.

Available Tools

56 tools
ghl_add_contact_tagsAdd GoHighLevel Contact TagsB

Add tags to a contact with POST /contacts/{contactId}/tags. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYesTag names to add or remove.
contact_idYesContact ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate a write operation (readOnlyHint=false, destructiveHint=false, idempotent=false). The description adds the safety warning and HTTP method, but it does not clarify the behavior for duplicate tags or whether the operation is idempotent. Notably, the schema parameter description for 'tags' says 'add or remove', which contradicts the tool's stated purpose of adding tags, reducing transparency.

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 two sentences and front-loads the main purpose. It is concise and includes a critical safety warning. However, it could be slightly more structured by separating the endpoint from the safety note for clarity.

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?

Given the simple tool with 3 parameters, no output schema, and annotations present, the description covers the main action and safety. However, it lacks details on prerequisite conditions (e.g., contact must exist), behavior on duplicate tags, and what the response looks like. The inconsistency with the schema parameter description also detracts from 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?

Schema coverage is 100%, so all parameters have descriptions. The description does not add extra meaning beyond the schema, but the schema descriptions are adequate. The inconsistency in the 'tags' parameter description ('add or remove') is noted but does not directly affect this dimension as the description itself does not elaborate on parameters.

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 states 'Add tags to a contact' with the specific HTTP method and endpoint. It clearly indicates the action and distinguishes from sibling tools like ghl_remove_contact_tags by using 'Add' in the name. However, the schema parameter description for 'tags' says 'add or remove', which introduces slight ambiguity, preventing a perfect score.

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 includes a safety warning 'Write operation: do not run against live data without explicit approval', which provides important usage context. However, it does not specify when to use this tool versus alternatives (e.g., when to add tags vs remove them), nor does it mention prerequisites like the contact must exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_add_contact_to_workflowAdd GoHighLevel Contact To WorkflowA

Add a contact to a workflow with POST /contacts/{contactId}/workflow/{workflowId}. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
contact_idYesContact ID.
workflow_idYesWorkflow ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states it is a write operation, matching the readOnlyHint=false annotation, and adds a safety warning about live data. This provides additional behavioral context beyond the annotations.

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 two sentences, clearly stating the core function and a critical safety caveat. No extraneous 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 covers the basic action and safety warning, but lacks details on return values, error conditions, or prerequisites (e.g., contact must exist, workflow must accept new contacts). Given the simplicity of the tool, it is adequate but not thorough.

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 already fully describes all three parameters, and the tool description does not add any new semantic information beyond mentioning the endpoint path. With 100% schema coverage, the description adds minimal value.

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 explicitly states the action (add), resource (contact to workflow), and the HTTP endpoint. This clearly distinguishes it from the sibling tool ghl_remove_contact_from_workflow.

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 includes a warning about not running against live data without approval, providing clear usage context. However, it does not explicitly compare to alternatives or state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_create_appointmentCreate GoHighLevel AppointmentC

Create an appointment with POST /calendars/events/appointments. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
extraNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
titleNo
addressNo
endTimeNo
toNotifyNo
contactIdYesContact ID.
startTimeYesAppointment start time.
calendarIdYesCalendar ID.
locationIdNoOptional location ID. Defaults to GHL_LOCATION_ID when omitted.
assignedUserIdNo
ignoreDateRangeNo
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown
appointmentStatusNo

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Explicitly states it is a write operation (consistent with annotations), and adds a warning about live data usage. However, does not disclose other behaviors like side effects, required permissions, or response contents.

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?

Concise at two sentences, front-loading the core action and endpoint. However, the structure is minimal and could be expanded to include parameter hints without becoming overly long.

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?

Incomplete for a tool with 13 parameters, no output schema, and complex nested objects. Lacks explanation of required vs optional parameters, return value, or usage examples.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (46%) and the tool description provides no additional meaning about any parameters. The description fails to compensate for the schema's lack of parameter details.

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?

States the action 'Create an appointment' and specifies the endpoint 'POST /calendars/events/appointments', making the purpose clear. However, it does not differentiate this tool from sibling tools like ghl_update_appointment or ghl_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?

Only provides a caution about not running against live data without approval. No guidance on when to use this tool versus alternatives (e.g., ghl_update_appointment for modifications) or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_create_contactCreate GoHighLevel ContactA

Create a contact with POST /contacts/. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
dndNo
cityNo
nameNo
tagsNo
emailNo
extraNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
phoneNo
stateNo
sourceNo
countryNo
websiteNo
address1No
lastNameNo
firstNameNo
assignedToNo
postalCodeNo
companyNameNo
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
customFieldsNoGoHighLevel customFields array, usually objects with id/key and value.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is not read-only (readOnlyHint=false) and not idempotent. The description adds the warning about live data, which is helpful, but does not disclose other behaviors like duplicate handling or side effects. Annotations carry the burden, so description adds moderate value.

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 extremely concise with two sentences, front-loading the purpose and critical warning. No wasted words.

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?

Given 20 parameters, many undocumented, and no output schema, the description is minimally complete. It provides the core purpose and a live-data warning, but lacks guidance on required fields (though none are required) or typical usage patterns, leaving gaps in context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not mention any parameters, despite the input schema having 20 parameters with only 20% description coverage. Since coverage is low, the description should compensate but fails to do so, adding no semantic value 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 clearly states it creates a contact using 'POST /contacts/', and is distinguished from siblings by being the create operation as opposed to ghl_get_contact, ghl_update_contact, etc.

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 explicitly warns against running on live data without approval, providing a key usage guideline. It implies this should be used for write operations, but does not explicitly differentiate from ghl_upsert_contact, which could create or update.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_create_contact_noteCreate GoHighLevel Contact NoteA

Create a note for a contact with POST /contacts/{contactId}/notes. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesNote body.
extraNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
userIdNoOptional GoHighLevel user ID associated with the note.
contact_idYesContact ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds 'Write operation: do not run against live data without explicit approval' beyond annotations, which only indicate write and non-destructive. Provides endpoint context.

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?

Two concise sentences: purpose+endpoint in first, usage warning in second. No wasted words.

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?

Lacks return value description (no output schema). Otherwise adequate for a create tool with well-documented parameters.

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 descriptions for all parameters. Description does not add additional parameter meaning beyond the endpoint context.

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?

Clearly states 'Create a note for a contact' with the HTTP endpoint. Distinct from read tools like ghl_get_contact_notes.

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?

Explicitly warns against using on live data without approval. No explicit alternative named, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_create_contact_taskCreate GoHighLevel Contact TaskA

Create a task for a contact with POST /contacts/{contactId}/tasks. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoOptional task body/description.
extraNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
titleYesTask title.
dueDateNoOptional due date/time in GoHighLevel's accepted format.
completedNo
assignedToNoOptional user ID to assign the task to.
contact_idYesContact ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses write behavior (matches annotations), adds safety warning, and mentions endpoint. No contradictions. Could detail idempotency or side effects but sufficient.

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?

Two sentences, concise and front-loaded. Slightly terse but every word adds value. Could be structured with bullet points but fine.

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?

Covers purpose and safety adequately, but with 8 parameters and no output schema, additional details on return format or typical behavior 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?

Schema coverage is high (88%), so baseline is 3. Description does not add parameter-level details beyond the endpoint. Minimal extra value for parameters.

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?

Clearly states the action ('Create a task for a contact'), identifies the resource and API endpoint, and distinguishes from sibling tools like ghl_get_contact_tasks. The safety warning adds further clarity.

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?

Provides explicit guidance that it is a write operation and should not be run on live data without approval. Implicitly distinguishes from read-only task tools via sibling context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_create_custom_fieldCreate GoHighLevel Custom FieldB

Create a custom field for a GoHighLevel location. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCustom field display name.
modelNo
optionsNo
dataTypeYesGoHighLevel custom field type. Note the documented MONETORY spelling.
positionNo
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
placeholderNo
acceptedFormatNo
isMultipleFileNo
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown
maxNumberOfFilesNo
textBoxListOptionsNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly states 'Write operation,' which aligns with readOnlyHint=false. The warning about live data adds context beyond annotations. No details on idempotence or side effects are given.

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?

Two concise sentences: the first defines the purpose, the second provides an important usage warning. No redundant information, every sentence adds value.

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 12 parameters, no output schema, and several sibling tools (including v2 and folder variants), the description is too minimal. It omits what the tool returns, the models it applies to, and how it relates to similar create tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, meaning 8 out of 12 parameters lack descriptions. The description provides no parameter details or examples, failing to compensate for the low coverage.

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 'Create a custom field for a GoHighLevel location,' providing a specific verb and resource. It distinguishes from sibling tools like ghl_create_custom_field_v2 by name, but does not explicitly differentiate between them in the text.

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?

Includes a warning 'do not run against live data without explicit approval,' which offers some guidance. However, no information is provided about when to use this tool versus alternatives (e.g., update, v2), or prerequisites like location_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_create_custom_field_folderCreate GoHighLevel Custom Field FolderA

Create a Custom Fields V2 folder with POST /custom-fields/folder. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFolder name.
extraNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
parentIdNo
objectKeyYesObject key for the folder.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false (write operation) and destructiveHint=false (not destructive). The description adds the critical warning about not running against live data, which is beyond the annotations. It does not elaborate on other behavioral traits like idempotency or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, each serving a distinct purpose: stating the action/endpoint and providing a usage warning. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create tool with no output schema, the description covers the essential: what it creates, the HTTP method, and a safety warning. It could mention the response (e.g., created folder ID) but is adequate given the parameter schema richness.

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 83% (5/6 parameters described), so the burden on the description is low. The description does not add significant meaning beyond what's in the schema; it only repeats the purpose. 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 states the action ('Create a Custom Fields V2 folder') and the HTTP method/endpoint ('POST /custom-fields/folder'). It distinguishes this tool as a write operation among siblings, which are mostly reads or other mutations.

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?

Explicitly warns 'do not run against live data without explicit approval,' which is a strong usage guideline. However, it doesn't contrast with other create tools (e.g., ghl_create_custom_field_v2) for when to use this folder-specific tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_create_custom_field_v2Create GoHighLevel Custom Field V2A

Create a Custom Fields V2 field with POST /custom-fields/. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCustom field name.
extraNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
optionsNo
dataTypeYesGoHighLevel custom field type.
parentIdNo
objectKeyYesObject key, for example custom_objects.pet or business.
locationIdNoOptional explicit location ID. Defaults to GHL_LOCATION_ID.
descriptionNo
placeholderNo
showInFormsNo
maxFileLimitNo
acceptedFormatsNo
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown
allowCustomOptionNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations indicate readOnlyHint=false, meaning it's a write operation, and the description labels it as such. The warning about live data adds behavioral context. However, the description does not disclose idempotency (false), potential side effects, or error behavior. The openWorldHint=true is not addressed.

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 extremely concise: two sentences covering the action, endpoint, and a usage warning. No redundancy or unnecessary information. It is front-loaded with the key purpose.

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 14 parameters, 3 required, no output schema, and complex options like nested objects for 'options', the description is too sparse. It does not explain the return format, the relationship between parameters (e.g., parentId vs objectKey), or how 'extra' works with openWorldHint. The agent lacks sufficient context to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 43% schema description coverage, the description should compensate for undocumented parameters, but it does not. It adds no parameter-level explanations beyond the schema. For example, 'options', 'parentId', 'placeholder' are not explained in the description, leaving gaps for the agent.

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 specifies the action (create a Custom Fields V2 field) and the API endpoint (POST /custom-fields/). It effectively distinguishes this tool from siblings like ghl_get_custom_field_v2, ghl_update_custom_field_v2, and ghl_delete_custom_field_v2 by explicitly stating the create operation.

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 provides a clear warning: 'Write operation: do not run against live data without explicit approval.' This guides the agent on when to proceed with caution. However, it does not explicitly differentiate when to use this tool over alternatives like ghl_create_custom_field (V1) or ghl_create_custom_field_folder, nor does it mention prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_create_custom_valueCreate GoHighLevel Custom ValueB

Create a custom value for a GoHighLevel location. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCustom value name.
valueYesCustom value content.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description labels the tool as a 'Write operation' and adds a caution against live data use, which supplements the annotations (readOnlyHint=false, openWorldHint=true). However, it does not detail side effects, idempotency, or potential errors, missing opportunities for deeper transparency.

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 concise with two sentences, no redundant information. The structure is front-loaded with purpose followed by a usage constraint. However, it could be slightly more informative without sacrificing brevity, earning a 4 rather than a 5.

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?

Despite 4 parameters and no output schema, the description fails to explain what a custom value is, how it relates to the GoHighLevel ecosystem, or what the return value of the operation looks like. The mandatory parameters and response format are left entirely to the schema, making the description incomplete for a tool with moderate complexity.

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?

With 100% schema coverage, the baseline is 3. The description adds no parameter details beyond what the schema provides (e.g., it does not explain the meaning of 'name' or 'value' in the context of custom values), so it neither adds nor detracts from 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 'Create a custom value for a GoHighLevel location,' using a specific verb and resource. It distinguishes itself from sibling tools like ghl_create_custom_field by explicitly naming 'custom value', making its 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?

The description provides a warning about not running against live data without approval, but lacks guidance on when to use this tool versus alternatives like ghl_update_custom_value or ghl_delete_custom_value. No context on prerequisites or typical scenarios is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_create_opportunityCreate GoHighLevel OpportunityA

Create an opportunity with POST /opportunities/. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesOpportunity name.
extraNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
sourceNo
statusNo
contactIdYesContact ID.
assignedToNo
pipelineIdYesPipeline ID.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
monetaryValueNo
pipelineStageIdYesPipeline stage ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description explicitly labels it as a 'Write operation' and warns against live use, aligning with annotations (readOnlyHint=false). Does not disclose potential side effects like workflow triggers, but sufficient for standard creation.

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?

Two sentences, no fluff. Essential information front-loaded. Every sentence adds value.

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?

Missing details on return format, default behaviors for optional fields, and clarification of 'extra' object. No output schema. For a complex tool with 11 parameters, more context would help.

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 covers 64% of parameters with descriptions. Description adds no parameter-level details beyond schema. Several parameters lack descriptions in both schema and description, so baseline at coverage >50% 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?

Clearly states verb ('create'), resource ('opportunity'), and API endpoint ('POST /opportunities/'). Distinguishes from sibling tools like search, update, delete.

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?

Provides clear warning against running on live data without approval, but lacks explicit comparison to alternatives like update or search. The warning alone is helpful guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_create_tagCreate GoHighLevel TagA

Create a location tag. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTag name.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the important behavioral warning about live data approval, which goes beyond the annotations (readOnlyHint=false). No contradictions with annotations.

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?

Two concise sentences, front-loaded with the core action, followed by a critical usage warning. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is largely complete for a create tool with full schema coverage, but omits details about the return value (e.g., does it return the created tag?), which could be useful given no output 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?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds no additional parameter-level meaning beyond the schema's field descriptions.

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 (create a location tag) and identifies it as a write operation, distinguishing it from read tools like ghl_list_tags or ghl_get_tag.

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 provides a clear warning about not running against live data without approval, but doesn't explicitly contrast with sibling tools or give when-not-to-use scenarios beyond that.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_delete_appointmentDelete GoHighLevel AppointmentA
Destructive

Delete a calendar event with DELETE /calendars/events/{id}. Requires confirm: true and owner approval before live execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesRequired for destructive tools. The API call is made only when confirm is explicitly true.
event_idYesCalendar event ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this tool as destructive (destructiveHint=true), and the description adds that a 'confirm' parameter must be true and that 'owner approval' is needed before execution. This provides additional behavioral context beyond annotations, though details on what happens after deletion (e.g., irreversible, soft delete) are omitted.

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 efficiently communicates the core action and key requirements. No extraneous words; the structure front-loads the verb and resource. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 parameters, no output schema, good annotations), the description covers the main functionality and a critical requirement (confirm). It lacks mention of the response_format parameter's impact on output, but overall it is mostly complete for a destructive tool with well-documented 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?

The input schema has 100% description coverage, so the baseline is 3. The description adds that 'confirm' must be true, reinforcing the schema note. For event_id and response_format, no extra meaning is added. The value is marginal but positive.

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 'Delete a calendar event' with the HTTP method and endpoint, making the action and resource unambiguous. However, it does not explicitly differentiate from sibling tools like ghl_update_appointment or other delete operations, but the name and context are sufficient.

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 mandates 'confirm: true' and mentions 'owner approval,' giving a precondition and dependency. It does not provide when-not-to-use scenarios or compare with alternatives like updating the appointment status instead of deleting. The guidance is adequate but lacks depth.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_delete_contactDelete GoHighLevel ContactA
Destructive

Delete one GoHighLevel contact from /contacts/{contactId}. Requires confirm: true and owner approval before live execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesRequired for destructive tools. The API call is made only when confirm is explicitly true.
contact_idYesContact ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, but the description adds value by revealing the requirement for explicit confirmation and owner approval before execution. This goes beyond the annotations and informs the agent of necessary preconditions.

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 extraneous words. It front-loads the core action ('Delete one GoHighLevel contact') and efficiently adds constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete operation with three parameters and no output schema, the description covers the essential behavioral context (endpoint, required approval). It omits return value details, but that is not critical for a deletion tool. The information provided is sufficient for an agent to use the tool correctly.

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 parameter descriptions are thorough (e.g., confirm's role in destructive tools, contact_id's purpose). The description does not add additional semantic meaning beyond what the schema provides, so a baseline score 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 explicitly states 'Delete one GoHighLevel contact from /contacts/{contactId}', specifying both the action (delete) and the resource (contact). It clearly distinguishes from read-only or creation sibling tools like ghl_get_contact or ghl_create_contact.

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 context by requiring 'confirm: true and owner approval before live execution', which guides when to use the tool (when deletion is intended and authorized). However, it lacks explicit comparison to alternatives or when-not-to-use, such as pointing to ghl_search_contacts for finding contacts first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_delete_custom_fieldDelete GoHighLevel Custom FieldA
Destructive

Delete a custom field from /locations/{locationId}/customFields/{id}. Requires confirm: true and owner approval before live execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesRequired for destructive tools. The API call is made only when confirm is explicitly true.
field_idYesCustom field ID.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint: true, so the description reinforces this. It adds behavioral context by detailing the prerequisite of confirm and owner approval. No contradiction with annotations (readOnlyHint: false, destructiveHint: true align).

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?

Single sentence that front-loads the action and endpoint. No unnecessary words, but could be slightly expanded for readability. Efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, annotations, and no output schema, the description covers the key aspects: action, resource, confirmation requirement, and owner approval. It would benefit from noting irreversibility, but destructiveHint covers that. Adequate.

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 the schema already documents all parameters. The description adds minimal extra semantics (the endpoint path implies locationId position but the schema already describes it). 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 states the action (Delete) and the resource (custom field) with the specific endpoint path. It distinguishes this destructive action from create, update, get, and list tools among siblings.

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?

It explicitly requires confirm: true and owner approval before execution, guiding the agent to only invoke when certain and with confirmation. However, it does not differentiate between the v1 and v2 delete tool (both exist as siblings).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_delete_custom_field_folderDelete GoHighLevel Custom Field FolderA
Destructive

Delete a Custom Fields V2 folder with DELETE /custom-fields/folder/{id}. Requires confirm: true and owner approval before live execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesRequired for destructive tools. The API call is made only when confirm is explicitly true.
folder_idYesCustom field folder ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it as destructive. Description adds that it requires confirm=true and owner approval, providing important safety context beyond 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?

Single sentence, front-loaded with the action. Clear and direct, though could be slightly more compact without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple delete operation with good annotations and schema. Description adds owner approval requirement, making it sufficiently complete. No output schema needed.

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 baseline 3. Description does not add new meaning to parameters beyond what the schema provides (e.g., confirm's description already states requirement).

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?

Clearly states the action (delete) and specific resource (Custom Fields V2 folder), using the HTTP endpoint. Distinguishes from sibling tools like delete_custom_field or update_custom_field_folder.

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 on when to use this tool versus alternatives (e.g., delete_custom_field_v2, update_custom_field_folder). Mentions prerequisites (confirm, owner approval) but not usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_delete_custom_field_v2Delete GoHighLevel Custom Field V2A
Destructive

Delete a Custom Fields V2 field with DELETE /custom-fields/{id}. Requires confirm: true and owner approval before live execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCustom Fields V2 field ID.
confirmYesRequired for destructive tools. The API call is made only when confirm is explicitly true.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true. The description adds value by specifying the need for confirmation (confirm=true) and owner approval before execution, and includes the HTTP endpoint. These details go beyond the annotations, though it could describe post-deletion effects.

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 efficiently conveys the core action, endpoint, and key requirements. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 parameters, no output schema), the description covers the essentials: action, prerequisites, and endpoint. It could be more explicit about the V2 specificity, but overall it is adequate for an agent to use the tool correctly.

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 baseline is 3. The description reinforces the confirm requirement but does not add new meaning beyond what the schema already provides for each parameter.

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 (delete) and resource (Custom Fields V2 field). It is specific with verb+resource. However, it does not explicitly differentiate from the V1 version (sibling tool ghl_delete_custom_field), which could cause confusion.

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 mentions the requirement for 'confirm: true' and 'owner approval', giving some usage context. But it lacks explicit guidance on when not to use this tool (e.g., for V1 fields) or alternatives like ghl_update_custom_field_v2 for disabling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_delete_custom_valueDelete GoHighLevel Custom ValueA
Destructive

Delete a custom value from /locations/{locationId}/customValues/{id}. Requires confirm: true and owner approval before live execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesRequired for destructive tools. The API call is made only when confirm is explicitly true.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
custom_value_idYesCustom value ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds important behavioral context beyond annotations: it requires confirm=true and owner approval before live execution. Annotations only indicate destructiveHint=true, so this is a valuable addition.

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 concise, consisting of two sentences that first state the action and resource, then list the safety requirements. No superfluous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description covers the action and safety requirements, it does not describe the return value or what happens after deletion. Given the absence of an output schema, a brief note on the response 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 already provides descriptions for all 4 parameters (100% coverage). The description does not add new semantic details about the parameters beyond what the schema states.

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 ('Delete') and the resource ('custom value') with the endpoint URL, distinguishing it from other delete tools like ghl_delete_custom_field or ghl_delete_contact.

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 explicitly requires confirm=true and owner approval, providing clear usage constraints. However, it does not specify when to use this tool versus alternatives (e.g., ghl_delete_custom_field).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_delete_opportunityDelete GoHighLevel OpportunityA
Destructive

Delete an opportunity with DELETE /opportunities/{id}. Requires confirm: true and owner approval before live execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesRequired for destructive tools. The API call is made only when confirm is explicitly true.
opportunity_idYesOpportunity ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as destructive. The description adds specific behavioral details: mandatory confirm parameter set to true and owner approval required before execution, which go beyond the annotation indicators.

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, efficient sentence with no wasted words. It front-loads the key action and immediately provides essential constraints.

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 delete tool with no output schema, the description covers the core action and preconditions. However, it omits details about return values, error cases, or side effects beyond deletion, leaving some gaps for an AI 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 coverage is 100%, so the description adds little beyond what the parameter descriptions already provide. It mentions confirm must be true, but that is already in the schema. No new insights for opportunity_id or response_format.

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 'Delete an opportunity' and specifies the resource 'opportunity' along with the REST endpoint, distinguishing it from sibling tools like ghl_get_opportunity or ghl_create_opportunity.

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 mentions required confirm flag and owner approval, giving some usage context, but lacks explicit guidance on when to use this tool versus alternatives such as ghl_update_opportunity_status. The context is implied but not fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_delete_tagDelete GoHighLevel TagA
Destructive

Delete a location tag. Requires confirm: true and owner approval before live execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idYesTag ID.
confirmYesRequired for destructive tools. The API call is made only when confirm is explicitly true.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations (destructiveHint: true) by noting the need for confirmation and owner approval, enhancing understanding of the tool's destructive nature.

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 concise with two sentences, front-loading the action and essential constraints, leaving no wasted words.

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 destructive tool with no output schema, the description provides key constraints but omits information about return values, side effects, or error conditions, leaving some 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 description coverage is 100%, so baseline is 3. The description does not add significant meaning beyond the schema; it reiterates 'confirm: true' but lacks elaboration on other parameters like tag_id or location_id.

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 'Delete a location tag' using a specific verb and resource, distinguishing it from sibling tools like ghl_create_tag and ghl_update_tag.

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?

It specifies requirements for use: 'Requires confirm: true and owner approval before live execution.' This provides clear context, though no explicit alternatives or when-not-to-use are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_get_calendar_eventsGet GoHighLevel Calendar EventsB
Read-onlyIdempotent

List calendar events with GET /calendars/events.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return from the local page.
offsetNoNumber of items to skip locally after receiving the API response.
endTimeNoEnd time in milliseconds, as number or string.
groupIdNo
contactIdNo
startTimeNoStart time in milliseconds, as number or string.
calendarIdNo
extra_queryNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint false, so the description aligns with them. However, it adds no extra behavioral context such as rate limits, authentication, or data freshness. The description is adequate but not enhanced beyond annotations.

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, which is concise but overly terse. It lacks any front-loading of critical information beyond the basic action. For a tool with 10 parameters and complex interactions, a slightly more descriptive sentence would improve structure.

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?

Despite annotations, the description is incomplete. It does not explain return values (no output schema) or pagination behavior from limit/offset parameters. For a tool with nested objects and many parameters, the description fails to provide sufficient context 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?

The description does not mention any parameters. Schema coverage is 70%, meaning some parameters lack descriptions. The description adds no value beyond the schema, so it meets the baseline of 3 but does not compensate for missing parameter documentation.

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 lists calendar events using GET /calendars/events. It specifies the verb 'list' and resource 'calendar events', distinguishing it from sibling tools like ghl_list_calendars or ghl_create_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, nor does it mention prerequisites or exclusions. It only states the action, leaving the agent to infer usage context from the schema and annotations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_get_contactGet GoHighLevel ContactB
Read-onlyIdempotent

Get one GoHighLevel contact from /contacts/{contactId}.

ParametersJSON Schema
NameRequiredDescriptionDefault
contact_idYesContact ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, nondestructive. The description confirms the operation type but adds no new behavioral details like error handling or rate limits. It is consistent with 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 concise (one sentence) and front-loaded with verb and resource. It lacks structure like bullet points but is not overly verbose. Every word earns its place.

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?

With no output schema, the description does not explain return values. It is adequate for a simple get-by-ID operation but could be improved by mentioning output format (already in params) or distinguishing from search_contacts.

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 descriptions for both parameters. The description adds no additional meaning beyond the schema, so baseline 3 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 clearly states the verb (Get), resource (one contact), and endpoint path. It distinguishes from sibling tools like search_contacts and create_contact by specifying retrieval by ID.

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 (e.g., search_contacts). No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_get_contact_notesGet GoHighLevel Contact NotesB
Read-onlyIdempotent

List notes for a contact from /contacts/{contactId}/notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return from the local page.
offsetNoNumber of items to skip locally after receiving the API response.
contact_idYesContact ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it's safe. The description adds no new behavioral traits beyond the endpoint path.

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?

Short one-sentence description is concise but lacks structure; no front-loading of key info.

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 4 parameters and no output schema, the description should explain what the tool returns (e.g., list of notes in markdown or JSON) but doesn't.

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 description adds no extra meaning to parameters beyond their schema descriptions.

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 'List' and the resource 'notes for a contact', with the API endpoint for context. It distinguishes this tool from siblings like ghl_create_contact_note.

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 on when to use this tool vs alternatives (e.g., ghl_create_contact_note). No mention of prerequisites or default behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_get_contact_tasksGet GoHighLevel Contact TasksA
Read-onlyIdempotent

List tasks for a contact from /contacts/{contactId}/tasks.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return from the local page.
offsetNoNumber of items to skip locally after receiving the API response.
contact_idYesContact ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this tool as read-only, idempotent, and non-destructive. The description merely restates the API endpoint and confirms the listing behavior, adding no additional behavioral context such as pagination handling, data freshness, or response size limits. With strong annotations, the description adds marginal value.

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 extremely concise at 9 words, front-loading the action and resource. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with full schema coverage and clear annotations, the description is adequately complete. It confirms the operation and endpoint, leaving parameter details to the schema. No output schema exists, but the return format is partially addressed via the response_format parameter in 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?

Schema description coverage is 100%, so baseline is 3. The description does not elaborate on the parameters beyond the endpoint path; all parameter details are already in the schema. No additional semantic value is provided.

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 ('List') and the resource ('tasks for a contact'), using the API endpoint pattern to specify scope. It distinguishes from siblings by focusing on listing rather than creating or modifying tasks.

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 provide explicit guidance on when to use this tool versus alternatives like ghl_get_contact_notes or ghl_create_contact_task. The usage is implied by the name and endpoint, but no direct comparison or conditional advice is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_get_conversation_messagesGet GoHighLevel Conversation MessagesA
Read-onlyIdempotent

List messages for a conversation with GET /conversations/{conversationId}/messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return from the local page.
offsetNoNumber of items to skip locally after receiving the API response.
extra_queryNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
conversation_idYesConversation ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint, idempotentHint, destructiveHint=false) already indicate safe, read-only behavior. The description adds the endpoint details but does not reveal additional traits like pagination behavior, rate limits, or response structure. With annotations, this is adequate but not outstanding.

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?

Single sentence, zero waste. Front-loads the core action and resource. Highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with good schema coverage and annotations, the description covers the essential purpose. It lacks details on ordering or the extra_query parameter, but overall complete for its complexity class.

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. The tool description does not add any extra meaning beyond the schema. Baseline score 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?

Description clearly states the action 'List messages' for a specific resource 'conversation', with the exact HTTP endpoint. This distinguishes it from siblings like ghl_search_conversations (search) and ghl_send_message (send).

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 context (after obtaining a conversation ID) but does not explicitly state when to use this versus alternatives, nor when not to use it. No guidance on prerequisites or fallback tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_get_custom_fieldGet GoHighLevel Custom FieldA
Read-onlyIdempotent

Get one custom field for a GoHighLevel location from /locations/{locationId}/customFields/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
field_idYesCustom field ID.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the agent knows it is a safe read operation. The description adds the endpoint path but does not expand beyond that. No contradiction exists, but no additional behavioral details (e.g., rate limits, authorization) are provided.

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 includes the endpoint, which aids understanding. There is no redundant information, and every word serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description does not explain the return format, but the tool name and context imply it returns the custom field data. Annotations provide safety guarantees. While it could mention output structure, the description is sufficiently complete for a simple 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%, so the schema already documents all three parameters. The description does not add any extra meaning beyond the schema; it merely restates the action. With high coverage, a score 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 ('get'), resource ('one custom field'), and context ('for a GoHighLevel location'). It includes the API endpoint, which adds specificity. This distinguishes it from sibling tools like list, create, update, delete, etc.

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 this is for retrieving a single custom field by ID, but it does not explicitly state when to use this versus alternatives like list (to get all fields) or search. No guidance on prerequisites or exclusions, relying on the tool name and sibling list for context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_get_custom_field_v2Get GoHighLevel Custom Field Or Folder V2A
Read-onlyIdempotent

Get a Custom Fields V2 field or folder by ID with GET /custom-fields/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCustom Fields V2 field or folder ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey readOnlyHint, openWorldHint, idempotentHint, and destructiveHint as false, indicating a safe read operation. The description adds no behavioral details beyond the annotations, so it neither enhances nor contradicts them.

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, but it includes the HTTP method and path, which is slightly redundant. Still, it is efficiently structured and front-loads the purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-ID tool with comprehensive annotations and schema, the description is sufficient. It clearly identifies the resource and identifier, though it could explicitly mention the return value (a field or folder object).

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?

Input schema covers both parameters with descriptions (100% coverage). The description does not add additional meaning beyond what the schema provides, meeting the baseline 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 explicitly states 'Get a Custom Fields V2 field or folder by ID', clearly identifying the verb, resource, and retrieval method. It distinguishes from sibling tools like ghl_list_custom_fields_v2 (list) and ghl_get_custom_field (older version).

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, nor does it mention prerequisites or scenarios. It simply states what it does, leaving the agent to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_get_custom_valueGet GoHighLevel Custom ValueB
Read-onlyIdempotent

Get one custom value from /locations/{locationId}/customValues/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
custom_value_idYesCustom value ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the description doesn't need to repeat safety traits. It adds no additional behavioral info beyond stating the read operation, which is consistent with annotations.

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?

Single sentence, no wasted words, front-loaded with 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?

Given annotations covering safety and full schema coverage, the description is minimally acceptable. However, it lacks explanation of what a custom value is or how it relates to siblings like custom fields, leaving some ambiguity for an agent unfamiliar with GHL.

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 schema descriptions covering 100%, so the description adds no extra meaning. The mention of the endpoint path implicitly references location_id and custom_value_id, but the schema already documents them. Baseline 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?

Description states 'Get one custom value' and provides the specific API endpoint path, which clarifies the verb and resource. It distinguishes from sibling list tools (e.g., ghl_list_custom_values) by emphasizing 'one', but could be more explicit about what a custom value is.

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 on when to use this tool vs alternatives like ghl_list_custom_values or ghl_get_custom_field. The agent must infer from context (get one vs list), but explicit usage context is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_get_free_slotsGet GoHighLevel Free SlotsB
Read-onlyIdempotent

Get free slots for a calendar with GET /calendars/{id}/free-slots.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdNo
endDateYesEnd date/time in milliseconds, as number or string.
timezoneNo
startDateYesStart date/time in milliseconds, as number or string.
calendar_idYesCalendar ID.
extra_queryNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds only the HTTP method and path, providing minimal behavioral context beyond the annotations. No contradiction.

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. However, it is so minimal that it sacrifices completeness.

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 7 parameters and no output schema, but the description does not explain return format, pagination, or behavior for date ranges. The openWorldHint suggests unknown fields, but the description lacks sufficient context for an AI agent to choose it confidently.

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 71%, with most parameters described. The tool description does not add any additional meaning beyond what is in the input schema, so it meets the baseline but does not improve it.

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 free slots for a calendar, specifying the HTTP method and path. However, it does not differentiate from sibling tools like ghl_get_calendar_events, which may also return time-related data.

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 on when to use this tool versus alternatives. There is no mention of prerequisites, such as the need for a valid calendar_id, or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_get_locationGet GoHighLevel LocationA
Read-onlyIdempotent

Get one GoHighLevel location/sub-account with GET /locations/{locationId}.

ParametersJSON Schema
NameRequiredDescriptionDefault
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false. Description adds HTTP method and path but no additional behavioral context (e.g., auth, rate limits). No contradiction.

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?

Single sentence, front-loaded with key information, no wasted words. Appropriate length for a simple get tool.

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?

No output schema; description does not mention response structure or format differences (markdown vs json). Minimal completeness for a get tool, but adequate given standard expectations.

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%; both parameters have descriptions. Description adds no extra meaning beyond what the schema provides. Baseline score 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?

Description clearly states verb 'Get', resource 'location/sub-account', and endpoint path. Distinguishes from sibling tools like ghl_get_contact by specifying a different resource.

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?

Description implies use for retrieving a single location by ID, but does not explicitly state when to use vs alternatives (e.g., no list tools exist). No guidance on prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_get_opportunityGet GoHighLevel OpportunityA
Read-onlyIdempotent

Get one opportunity with GET /opportunities/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
opportunity_idYesOpportunity ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, which is sufficient. The description adds the HTTP method and path but no further behavioral traits (e.g., rate limits, authentication needs). It does not contradict 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 extremely concise with a single sentence. While it lacks extra details, it is front-loaded and efficient. However, it could be slightly more informative without sacrificing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 parameters, no output schema), the description covers the core functionality. Annotations fill the safety profile. It is mostly complete but could benefit from mentioning the response_format parameter's impact (though schema covers that).

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 already contains full descriptions (100% coverage) for both parameters. The description does not provide additional meaning or context beyond what the schema offers, so it meets the baseline expectation.

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 'Get one opportunity' with the specific HTTP GET method and resource path, unambiguously identifying the action and resource. It distinguishes from sibling tools like ghl_search_opportunities by focusing on a single record retrieval by ID.

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 lacks any guidance on when to use this tool versus alternatives, such as searching for opportunities. It does not specify prerequisites or exclude cases. The context is merely implied by the tool's name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_get_pipelinesGet GoHighLevel PipelinesA
Read-onlyIdempotent

List opportunity pipelines with GET /opportunities/pipelines?locationId={locationId}.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return from the local page.
offsetNoNumber of items to skip locally after receiving the API response.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds no behavioral details beyond the API call. It doesn't mention pagination, rate limits, or other traits. With annotations covering safety, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no filler. Every word is necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with rich annotations and full schema coverage, the description is adequate but could mention the response format or clarify that it returns a list of pipelines. However, given the low complexity, it's nearly 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 schema already documents all parameters. The description adds minimal value by showing the endpoint with locationId placeholder, but this is already implied by schemas for location_id parameter.

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?

Description uses specific verb 'List' and resource 'opportunity pipelines', and mentions the API endpoint. It clearly distinguishes this tool from siblings, as no other sibling lists pipelines.

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 on when to use vs alternatives. However, since it's a straightforward list operation and no other sibling lists pipelines, the need is low. But still, the description does not provide any usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_get_tagGet GoHighLevel TagC
Read-onlyIdempotent

Get one tag from /locations/{locationId}/tags/{id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idYesTag ID.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only repeats the endpoint path. Annotations already indicate read-only, idempotent, non-destructive behavior. No additional behavioral context (e.g., error handling, auth, rate limits) is provided.

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?

Single short sentence, front-loaded with the action and endpoint. Efficient but could afford slightly more explanation without losing 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?

No output schema exists, and the description does not hint at the return structure. The tool is placed among many tag-related siblings without clarifying its specific role (single retrieval vs. listing, etc.). Annotations are good but description lacks 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?

Schema coverage is 100% with descriptions for all parameters. The tool description adds no extra meaning beyond what the schema provides, but the baseline is 3 due to high coverage.

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 it gets a single tag from a specific endpoint, but does not differentiate from sibling tools like ghl_list_tags that also deal with tags.

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 on when to use this tool versus alternatives such as ghl_list_tags or other tag tools. No context for prerequisites or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_list_calendarsList GoHighLevel CalendarsB
Read-onlyIdempotent

List calendars with GET /calendars/?locationId={locationId}.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return from the local page.
offsetNoNumber of items to skip locally after receiving the API response.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds that it uses GET and the URL pattern, which aligns with those hints. However, it does not disclose pagination behavior or what the response contains, which would be useful beyond the annotations.

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 (one sentence), which is concise but lacks necessary details such as return value or usage hints. It front-loads the purpose but could be more informative without adding much length.

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?

With no output schema, the description should explain what the tool returns (e.g., a list of calendar objects). It doesn't, leaving the agent to infer from the name. The parameter descriptions are complete, but the overall tool behavior is not fully described.

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 each parameter already having a description. The tool description adds no additional meaning beyond what the schema provides, so a baseline score 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 action 'List calendars' and specifies the API endpoint, which adds specificity. However, it does not distinguish from sibling tools that may list other entities like events, but since the name includes 'calendars', the purpose is fairly clear.

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 on when to use this tool vs alternatives, such as ghl_get_calendar_events for events. There is no mention of prerequisites, required parameters, or context where this tool is inappropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_list_custom_fieldsList GoHighLevel Custom FieldsB
Read-onlyIdempotent

List custom fields for a GoHighLevel location from /locations/{locationId}/customFields.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return from the local page.
offsetNoNumber of items to skip locally after receiving the API response.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. Description adds no behavioral context beyond the endpoint, which is neutral. No contradiction.

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?

Single sentence, no unnecessary words. Efficiently conveys the tool's action.

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 list tool, the description is adequate. However, it lacks version differentiation from v2 sibling, which is a completeness gap given the 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% with defaults, limits, and descriptions. Description does not add additional meaning beyond the schema.

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?

Description clearly states the tool lists custom fields for a location with the endpoint. However, it does not distinguish between ghl_list_custom_fields and ghl_list_custom_fields_v2, which are sibling tools.

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 on when to use this tool versus alternatives like the v2 version. No exclusions or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_list_custom_fields_v2List GoHighLevel Custom Fields V2 By Object KeyA
Read-onlyIdempotent

List Custom Fields V2 fields/folders by object key with GET /custom-fields/object-key/{objectKey}. Supports Custom Objects and Company/Business per HighLevel docs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return from the local page.
offsetNoNumber of items to skip locally after receiving the API response.
objectKeyYesObject key, for example custom_objects.pet or business.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. Description adds the endpoint path and supported object types, but does not disclose additional behaviors like pagination behavior or output structure. Adds minimal value beyond annotations.

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?

Single concise sentence with no fluff. Efficiently conveys purpose and endpoint, earning its place.

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?

Given 5 parameters, rich annotations, but no output schema, the description could explain return format or pagination. It states 'fields/folders' but not how they are structured. Adequate but incomplete for a listing 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 coverage is 100%, so baseline is 3. Description does not add any parameter information beyond what's in the schema. It mentions objectKey in the description but that is already documented.

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 (List) and resource (Custom Fields V2 fields/folders by objectKey), and distinguishes from sibling tools like ghl_list_custom_fields by specifying V2 and object key.

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 guidance on when to use this tool versus alternatives like ghl_list_custom_fields for v1, or how to choose between different list tools. The description mentions 'Supports Custom Objects and Company/Business' but lacks context for when to use each.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_list_custom_valuesList GoHighLevel Custom ValuesB
Read-onlyIdempotent

List custom values for a GoHighLevel location from /locations/{locationId}/customValues.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return from the local page.
offsetNoNumber of items to skip locally after receiving the API response.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds the endpoint path but no further behavioral traits (e.g., pagination, rate limits, required permissions). It does not contradict annotations.

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 unnecessary words. It is efficiently 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?

Given the annotations and schema, the description provides the essential information but lacks context such as what custom values are, how they relate to custom fields, or typical response structure. The addition of response_format compensates partially, but completeness is adequate.

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 parameters have descriptions in the input schema (100% coverage). The description adds no extra meaning beyond the schema, so 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 it lists custom values for a GoHighLevel location and provides the API endpoint. However, it does not explicitly distinguish this tool from sibling tools like ghl_list_custom_fields or ghl_get_custom_value, relying on the tool name for differentiation.

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 ghl_get_custom_value (single value) or ghl_list_custom_fields (field definitions). The description lacks any context about appropriate use cases or when to avoid.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_list_tagsList GoHighLevel TagsA
Read-onlyIdempotent

List tags for a GoHighLevel location from /locations/{locationId}/tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return from the local page.
offsetNoNumber of items to skip locally after receiving the API response.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds no additional behavioral context beyond the endpoint, such as rate limits, error handling, or what happens with missing location_id. It is consistent but not additive.

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

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite good annotations and full schema coverage, the description lacks information about the response format or structure. For a listing tool with no output schema, the agent would benefit from knowing what the returned tags contain (e.g., id, name, etc.). It is incomplete for effective use.

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 each parameter has a description in the schema. The description does not add any extra meaning beyond what is already in the input schema, so baseline 3 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 clearly states the action (list tags) and the resource (GoHighLevel location) with the specific API endpoint. It effectively distinguishes from sibling tools like ghl_get_tag or ghl_create_tag.

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 provides the API endpoint but no explicit guidance on when to use this tool vs alternatives. Usage is implied but not clarified, e.g., when to use list vs get tag. No exclusions or prerequisites mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_list_usersList GoHighLevel UsersB
Read-onlyIdempotent

List users for a location with GET /users/?locationId={locationId}.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return from the local page.
offsetNoNumber of items to skip locally after receiving the API response.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering safety and idempotency. The description adds no additional behavioral details beyond the endpoint, so it does not degrade but also does not enhance 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?

Single sentence with the endpoint, no wasted words. It is front-loaded with the action 'List users'.

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 minimal. For a simple list tool with comprehensive schema and annotations, it is adequate but does not mention output format or behavior beyond listing. With 4 parameters and no output schema, it could provide more 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 parameters are fully documented in the schema. The description only mentions locationId in the endpoint, adding no new meaning beyond the schema.

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 'List users for a location' with the endpoint, indicating the action and resource. It distinguishes from sibling tools that deal with contacts, custom fields, etc., but could be more explicit about the scope.

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 on when to use this tool versus alternatives. No mention of prerequisites, filtering options, or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_merge_contacts_delete_loserMerge GoHighLevel Contacts By Deleting LoserA
Destructive

Preview or execute a guarded contact merge workaround: read both contacts, check loser history, delete loser, then update survivor with loser email. Requires confirm: true to execute.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesRequired for destructive tools. The API call is made only when confirm is explicitly true.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown
loser_contact_idYesContact ID to delete after preflight checks. Its email is copied to the survivor.
survivor_contact_idYesContact ID to keep. This record is updated with the loser email.
expected_loser_emailNoOptional safety check. If provided, the loser contact email must match this value before execution.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as destructive (destructiveHint: true). The description adds behavioral steps: reading contacts, checking loser history, deleting, and updating. This goes beyond annotations, but does not fully detail error states or side effects (e.g., what happens if preflight checks fail).

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 two sentences, front-loading the purpose and including the key confirmation requirement. Every word is necessary; no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, but the description mentions 'Preview or execute' and the response_format parameter suggests outputs vary. However, it does not describe preview contents or error handling, leaving some gaps. Still, given sibling tools and annotations, it is mostly complete.

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?

With 100% schema coverage, each parameter is already described. The description adds process-level meaning (e.g., 'check loser history' and 'update survivor with loser email') that clarifies the role of parameters beyond their individual descriptions.

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's purpose: a multi-step merge workaround that reads contacts, checks loser history, deletes loser, and updates survivor. It explicitly distinguishes from related tools like ghl_delete_contact or ghl_update_contact by framing it as a 'merge workaround'.

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 notes the confirm flag requirement for execution and implies a preview mode when false. It lacks explicit when-not-to-use or alternative tools, but the phrase 'merge workaround' provides sufficient context for the intended use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_remove_contact_from_workflowRemove GoHighLevel Contact From WorkflowA
Destructive

Remove a contact from a workflow with DELETE /contacts/{contactId}/workflow/{workflowId}. Requires confirm: true and owner approval before live execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesRequired for destructive tools. The API call is made only when confirm is explicitly true.
contact_idYesContact ID.
workflow_idYesWorkflow ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, and the description adds specific behavioral requirements (confirm parameter and owner approval) beyond what annotations provide, without contradiction.

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 concise (two sentences), front-loaded with the action and endpoint, and every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and a simple removal operation, the description is largely complete. It lacks details on error scenarios or idempotency behavior, but idempotentHint=false is available in annotations.

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 all parameters are documented in the schema. The description reinforces the confirm requirement but adds no new semantic meaning 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 clearly states the action ('Remove a contact from a workflow') and includes the HTTP method and endpoint, which distinguishes it from sibling tools like ghl_add_contact_to_workflow and ghl_delete_contact.

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 mentions the prerequisite of 'confirm: true' and 'owner approval before live execution', but does not explicitly state when to use this tool versus alternatives like ghl_remove_contact_tags or provide exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_remove_contact_tagsRemove GoHighLevel Contact TagsA
Destructive

Remove tags from a contact with DELETE /contacts/{contactId}/tags. Requires confirm: true and owner approval before live execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYesTag names to add or remove.
confirmYesRequired for destructive tools. The API call is made only when confirm is explicitly true.
contact_idYesContact ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true. Description adds requirement for confirm and owner approval, providing extra behavioral context beyond annotations.

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?

Single sentence with no waste. Immediately states action, method, and key requirement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple tool with clear annotations and schema. Description covers essential context for use, though return value not mentioned.

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 descriptions, so baseline 3. Description does not elaborate on parameters beyond what schema provides.

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?

Explicitly states action (remove tags) and resource (contact), with API endpoint. Distinguished from sibling ghl_add_contact_tags by name and description.

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?

Clearly indicates need for confirm=true and owner approval, implying destructive nature. Does not explicitly contrast with adding tags, but name and sibling context suffice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_search_contactsSearch GoHighLevel ContactsA
Read-onlyIdempotent

Search contacts with POST /contacts/search. This is the preferred read path over deprecated GET /contacts/.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return from the local page.
queryNoOptional search text.
offsetNoNumber of items to skip locally after receiving the API response.
filtersNoOptional GoHighLevel contact search filters.
pageLimitNoGoHighLevel server-side page size.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
start_after_idNoOptional GoHighLevel startAfterId cursor.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds the HTTP method and deprecation status, but no further behavioral context beyond what annotations provide.

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?

Two sentences, front-loaded with purpose and guidance. No 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?

With 8 parameters (including pagination and filters) and no output schema, the description lacks details on pagination behavior and filter format. It is minimally complete but could be improved.

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 the description adds no additional meaning to parameters. 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?

Description clearly states the verb 'Search', resource 'contacts', and specifies the HTTP method. It also distinguishes from the deprecated GET endpoint by labeling this as the preferred read path.

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?

Explicitly says this is the preferred read path over the deprecated GET endpoint, guiding the agent to use this tool. However, it does not provide when to use alternatives like ghl_get_contact for a single contact.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_search_conversationsSearch GoHighLevel ConversationsC
Read-onlyIdempotent

Search conversations with GET /conversations/search.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return from the local page.
offsetNoNumber of items to skip locally after receiving the API response.
contactIdNo
assignedToNo
extra_queryNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
lastMessageTypeNo
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate it's read-only, open-world, idempotent, and non-destructive. The description adds no behavioral context beyond the endpoint, such as rate limits, pagination behavior, or that it returns multiple conversations.

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 concise, a single sentence. While brevity is good, it omits essential context and feels too minimal to be effective for an 8-parameter tool.

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 lack of output schema and 8 parameters, the description is incomplete. It does not explain return format, filtering behavior, or how to use the search effectively. Annotations provide safety cues but not usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 63% schema coverage, the description does not explain any parameters. It does not add meaning for undocumented parameters like contactId, assignedTo, or lastMessageType. The schema provides some descriptions, but the description adds no value.

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 states it searches conversations using a specific endpoint, which is clear and distinguishes from sibling tools that manage conversations differently. However, it could be more specific about what 'search' entails (e.g., filtering by fields).

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 other conversation-related tools like ghl_get_conversation_messages. It lacks when/not-to-use and alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_search_opportunitiesSearch GoHighLevel OpportunitiesB
Read-onlyIdempotent

Search opportunities with GET /opportunities/search using GoHighLevel server-side filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNo
idNo
dateNo
pageNo
limitNoMaximum number of items to return from the local page.
orderNo
offsetNoNumber of items to skip locally after receiving the API response.
statusNo
countryNo
endDateNo
campaignIdNo
startAfterNo
assigned_toNo
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
pipeline_idNo
server_limitNoGoHighLevel server-side limit query parameter.
startAfterIdNo
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown
pipeline_stage_idNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety is clear. The description adds the endpoint and server-side filtering detail but lacks behavioral context like pagination, default limits, or response handling.

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, concise but overly brief. It front-loads the endpoint but omits important context, making it insufficiently informative relative to the tool's complexity.

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?

With 19 parameters, no output schema, and low schema coverage, the description is severely incomplete. It does not cover pagination, filter combinations, output format, or any usage context needed for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 26%, meaning most of 19 parameters lack schema descriptions. The tool description does not explain any parameters or add meaning beyond the generic 'server-side filters', failing to compensate for low 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 searches opportunities using GET /opportunities/search with server-side filters. It specifies the verb 'Search' and resource 'opportunities', differentiating from sibling tools like ghl_get_opportunity (single) and ghl_search_contacts.

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 use for searching opportunities but provides no explicit guidance on when to use versus alternatives like ghl_get_opportunity or ghl_search_contacts. No when-not-to-use or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_send_messageSend GoHighLevel MessageB
Destructive

Send an outward-facing message with POST /conversations/messages. Requires confirm: true and owner approval before live execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesMessage channel/type accepted by GoHighLevel, such as SMS or Email.
extraNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
confirmYesRequired for destructive tools. The API call is made only when confirm is explicitly true.
messageYesOutbound message body.
subjectNo
toEmailNo
contactIdNoContact ID. One of contactId or conversationId is usually required.
fromEmailNo
attachmentsNo
conversationIdNoConversation ID. One of contactId or conversationId is usually required.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds value beyond annotations by requiring confirmation and owner approval, which expands on the destructiveHint annotation and provides important safety context.

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 extremely concise with only two sentences, containing no fluff while conveying key requirements.

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 11 parameters, nested objects, and no output schema, the description is insufficient. It does not explain 'outward-facing', how to use the extra field, or return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 64%, meaning several parameters lack descriptions (subject, toEmail, fromEmail, attachments). The description does not compensate for these gaps, leaving ambiguity about parameter usage.

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 sends an outward-facing message and provides the endpoint, but does not differentiate it from sibling tools like ghl_search_conversations.

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 mentions a precondition (confirm=true and owner approval) but does not provide guidance on when to use this tool versus alternatives, such as when to use an email vs SMS.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_update_appointmentUpdate GoHighLevel AppointmentA
Idempotent

Update an appointment with PUT /calendars/events/appointments/{id}. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
extraNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
titleNo
addressNo
endTimeNo
toNotifyNo
contactIdNo
startTimeNo
calendarIdNo
locationIdNo
appointment_idYesAppointment/event ID.
assignedUserIdNo
ignoreDateRangeNo
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown
appointmentStatusNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, idempotentHint=true. The description adds a critical behavioral note: 'Write operation: do not run against live data without explicit approval,' which provides operational safety context beyond the 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 very short (two sentences), front-loading the purpose and a key warning. It is conciseness but could benefit from slight expansion to cover essential usage constraints. No waste, but borderline too terse.

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 14 parameters, nested objects, and no output schema, the description lacks detail on return values, how to use the 'extra' field, or the workflow context with siblings (create/delete). An agent would have gaps in understanding how to properly invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 21%, and the description does not add any parameter-level explanations. It merely states 'Update an appointment,' leaving 13 of 14 parameters undocumented in both schema and description. The description fails to compensate for low 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 it updates an appointment via PUT method. It distinguishes from sibling tools like create and delete by explicitly calling it a write operation and mentioning the HTTP method.

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 gives a safety warning about not running on live data without approval, but does not provide explicit guidance on when to use this tool vs alternatives like create_appointment or get_calendar_events. The usage context is partially addressed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_update_contactUpdate GoHighLevel ContactA
Idempotent

Update a contact with PUT /contacts/{contactId}. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
dndNo
cityNo
nameNo
tagsNo
emailNo
extraNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
phoneNo
stateNo
sourceNo
countryNo
websiteNo
address1No
lastNameNo
firstNameNo
assignedToNo
contact_idYesContact ID.
postalCodeNo
companyNameNo
customFieldsNoGoHighLevel customFields array, usually objects with id/key and value.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a write operation, but the description adds a critical caution about live data usage, enhancing transparency beyond the 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 short and front-loaded with the core action, followed by a necessary warning. Efficient but could be slightly more structured.

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 20 parameters and no output schema, the description omits details on update semantics, return values, validation, and optional parameters like extra fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is low (20%) and the description does not explain any parameters, failing to compensate for the deficiency.

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 explicitly states the action ('Update'), the resource ('a contact'), and the HTTP method. It clearly distinguishes from sibling tools like create, delete, and search.

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?

Provides a warning about write operations and not using on live data without approval, but lacks explicit guidance on when to use update versus alternatives like upsert, create, or merge.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_update_custom_fieldUpdate GoHighLevel Custom FieldA
Idempotent

Update a custom field through the current location-scoped API: PUT /locations/{locationId}/customFields/{id}. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoCustom field display name.
modelNo
optionsNo
dataTypeNoGoHighLevel custom field type. Note the documented MONETORY spelling.
field_idYesCustom field ID.
positionNo
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
placeholderNo
acceptedFormatNo
isMultipleFileNo
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown
maxNumberOfFilesNo
textBoxListOptionsNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-read-only and non-destructive. Description adds that it is a write operation requiring caution, which is valuable beyond annotations. However, it does not mention idempotency or 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?

Extremely concise with only two sentences, front-loading the primary action and API endpoint. Every sentence adds value with no redundancy.

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 13 parameters, low schema coverage, and no output schema, the description is insufficient. It does not explain the update scope, required parameters beyond field_id, or the effect on existing data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 38%, but the description offers no parameter-specific explanations. It does not compensate for the missing schema descriptions, leaving users to infer meaning from parameter names alone.

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?

Clearly states 'Update a custom field' with specific verb and resource, and includes the API endpoint for context. Distinguishes from sibling tools like create, delete, and list operations.

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 a caution about not running against live data but lacks explicit guidance on when to use this tool versus alternatives (e.g., ghl_create_custom_field or ghl_update_custom_field_v2). No 'when not to use' or comparison with siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_update_custom_field_folderUpdate GoHighLevel Custom Field FolderA
Idempotent

Update a Custom Fields V2 folder name with PUT /custom-fields/folder/{id}. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNew folder name.
folder_idYesCustom field folder ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds behavioral context beyond annotations by explicitly warning it is a write operation requiring approval. No contradiction with annotations.

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?

Two sentences, no extraneous information. Clear and appropriately front-loaded.

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?

Lacks explanation of return values and could clarify that only the name is updateable. Overall adequate but not comprehensive.

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 covers 100% of parameters; description adds no further details about parameters beyond schema. Baseline 3.

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?

Clearly states the tool updates a Custom Fields V2 folder name using PUT, differentiating it from create/delete folder tools. The verb and resource are explicit.

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?

Provides a warning not to run against live data without approval, but lacks explicit when-to-use or alternatives among sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_update_custom_field_v2Update GoHighLevel Custom Field V2C
Idempotent

Update a Custom Fields V2 field with PUT /custom-fields/{id}. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCustom Fields V2 field ID.
nameNo
extraNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
optionsNo
dataTypeNo
parentIdNo
objectKeyNo
locationIdNoOptional explicit location ID. Defaults to GHL_LOCATION_ID.
descriptionNo
placeholderNo
showInFormsNo
maxFileLimitNo
acceptedFormatsNo
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown
allowCustomOptionNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate write operation (readOnlyHint false) and idempotency (idempotentHint true). Description adds a safety warning about not using on live data without approval, which is beneficial, but lacks details on update behavior (full vs partial replacement) or error handling.

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?

Description is only two sentences, concise and to the point. It includes a necessary warning. However, it could be slightly more structured (e.g., bullet points) to improve readability.

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?

Given the tool's complexity (15 parameters, nested objects, no output schema), the description is far too sparse. It omits key information about what fields are updatable, how options work, and how to handle responses. Essential for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 27% (4 of 15 parameters have descriptions), and the description does not compensate by explaining any parameters. It provides no additional meaning beyond the schema, leaving many parameters (e.g., name, options, dataType) poorly documented.

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?

Description clearly states the verb 'Update', the resource 'Custom Fields V2 field', and the HTTP method 'PUT /custom-fields/{id}', effectively distinguishing it from sibling tools like create, delete, get, and list.

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?

Description provides only a warning about live data but no guidance on when to use this tool vs alternatives such as ghl_update_custom_field (non-v2) or create/delete operations. No explicit context for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_update_custom_valueUpdate GoHighLevel Custom ValueA
Idempotent

Update a custom value from /locations/{locationId}/customValues/{id}. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
valueNo
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
custom_value_idYesCustom value ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide idempotentHint and destructiveHint false. Description adds 'Write operation' warning about live data, supplementing annotations without contradiction.

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?

Two concise, front-loaded sentences covering purpose and caution. No unnecessary words.

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?

Adequate for a simple update tool given annotations and sibling context. However, no output schema and limited description of underlying business logic or side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Description adds zero parameter details beyond schema. Schema covers 60% of parameters with descriptions, but no additional context is provided for the remaining parameters or their usage.

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?

Description clearly states verb 'Update', resource 'custom value', and the endpoint path. Differentiates from sibling tools like create, delete, get, list for custom values.

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?

Explicitly says 'Write operation: do not run against live data without explicit approval', providing cautionary context. No direct comparison to alternatives but sibling list implies distinct usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_update_opportunityUpdate GoHighLevel OpportunityA
Idempotent

Update an opportunity with PUT /opportunities/{id}. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
extraNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
sourceNo
statusNo
contactIdNo
assignedToNo
pipelineIdNo
monetaryValueNo
opportunity_idYesOpportunity ID.
pipelineStageIdNo
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description correctly labels as 'Write operation,' matching annotations. Adds caution about live data, but does not elaborate on partial updates, required permissions, or side effects beyond what annotations already provide.

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?

Two precise sentences. First states the core action, second provides a critical usage warning. No 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 11 parameters and no output schema, the description is too sparse. It does not mention return values, partial update behavior, or relationship to pipelines/stages. Sibling tools include many opportunity-related actions, yet this description offers no comparison.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 27% schema description coverage, the description adds no parameter details. It does not explain which fields are updatable or how the 'extra' field behaves. The schema itself has minimal descriptions for most parameters.

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?

Clearly states updating an opportunity with the specific HTTP method and resource path. Distinguishes from siblings like ghl_create_opportunity, ghl_get_opportunity, and ghl_delete_opportunity.

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?

Provides a clear caution about not running against live data without approval. However, no explicit guidance on when to use this tool vs alternatives like ghl_update_opportunity_status or partial update considerations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_update_opportunity_statusUpdate GoHighLevel Opportunity StatusA
Idempotent

Update opportunity status with PUT /opportunities/{id}/status. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYesNew opportunity status.
opportunity_idYesOpportunity ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate idempotentHint=true and destructiveHint=false, but the description adds critical context: it's a write operation and requires caution with live data. This goes beyond what annotations provide. No contradictions with annotations.

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 of 13 words, front-loading the purpose and then adding a critical usage warning. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with three parameters and no output schema, the description covers purpose, caution, and endpoint. It could mention what happens on success/failure, but this is not critical given the straightforward nature.

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 descriptions for each parameter. The description adds no additional meaning beyond the schema, though it does provide endpoint context. 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 it updates opportunity status, specifies the HTTP method and endpoint, and distinguishes from siblings like ghl_update_opportunity by focusing on status alone. The verb 'Update' and resource 'opportunity status' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly warns against running on live data without approval, which is strong guidance. However, it does not mention alternative tools for similar operations (e.g., ghl_update_opportunity for other fields), leaving some ambiguity about when exactly to use this tool versus others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_update_tagUpdate GoHighLevel TagA
Idempotent

Update a location tag. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNew tag name.
tag_idYesTag ID.
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds 'Write operation' confirming non-read-only and provides a safety warning about live data, which is a behavioral constraint beyond the annotations. It does not address idempotency or failure behavior.

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, succinct sentence that front-loads the purpose and a critical caution. No unnecessary words or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple update tool with full schema coverage and annotations present, the description covers the essential caution. However, it lacks explicit details on success/error behavior or return format, though the schema covers parameters.

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%; each parameter is already described. The description adds no extra meaning or context for the parameters beyond what the schema provides.

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 'Update a location tag' with a specific verb and resource. It distinguishes from sibling tag tools like create, delete, list, and add/remove contact tags by specifying 'update' and warning it's a write operation.

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 provides a clear caution: 'do not run against live data without explicit approval,' indicating it is a write operation requiring care. However, it does not explicitly compare to alternatives or state when to use this vs. other tag operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ghl_upsert_contactUpsert GoHighLevel ContactC
Idempotent

Create or update a contact with POST /contacts/upsert. Write operation: do not run against live data without explicit approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
dndNo
cityNo
nameNo
tagsNo
emailNo
extraNoOptional additional GoHighLevel fields to pass through when the API supports fields not modeled by this tool.
phoneNo
stateNo
sourceNo
countryNo
websiteNo
address1No
lastNameNo
firstNameNo
assignedToNo
postalCodeNo
companyNameNo
location_idNoOptional GoHighLevel location ID override. Defaults to GHL_LOCATION_ID.
customFieldsNoGoHighLevel customFields array, usually objects with id/key and value.
response_formatNoOutput format: markdown for human-readable summaries, json for structured output.markdown

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds a caution about live data, which is useful but does not disclose details such as what happens when a contact already exists (update behavior), error conditions, or confirmation of idempotency. The description is consistent with annotations (no contradiction).

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 two sentences: the first clearly states the purpose and endpoint, the second adds an important safety warning. Every word earns its place. It is front-loaded and concise with no redundancy.

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's complexity (20 parameters, nested objects, no output schema, low schema coverage) and the presence of sibling tools (create/update/delete contact), the description is far too sparse. It does not explain upsert behavior, required fields (e.g., email or phone for matching), how custom fields work, or the response format. The agent cannot fully understand how to invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20% (only 4 out of 20 parameters have descriptions in the schema). The description itself provides no parameter information whatsoever. It fails to add meaning beyond the input schema, leaving the agent with little guidance on how to use the 20 parameters effectively.

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 'Create or update a contact with POST /contacts/upsert', specifying the verb (create/update), resource (contact), and endpoint. It implies the upsert nature, but does not explicitly differentiate from sibling tools like ghl_create_contact and ghl_update_contact, which is a minor gap.

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 only guidance is a safety warning ('Write operation: do not run against live data without explicit approval'). There is no when-to-use or when-not-to-use information compared to siblings like ghl_create_contact or ghl_update_contact, and no prerequisites or context for choosing upsert over separate create/update calls.

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. Dates show when Glama detected each change.

  1. 56 tool updatesv0.1.0
    • First observedghl_add_contact_tags
    • First observedghl_add_contact_to_workflow
    • First observedghl_create_appointment
    • First observedghl_create_contact
    • First observedghl_create_contact_note
    • First observedghl_create_contact_task
    • First observedghl_create_custom_field
    • First observedghl_create_custom_field_folder
    • First observedghl_create_custom_field_v2
    • First observedghl_create_custom_value
    • First observedghl_create_opportunity
    • First observedghl_create_tag
    • First observedghl_delete_appointment
    • First observedghl_delete_contact
    • First observedghl_delete_custom_field
    • First observedghl_delete_custom_field_folder
    • First observedghl_delete_custom_field_v2
    • First observedghl_delete_custom_value
    • First observedghl_delete_opportunity
    • First observedghl_delete_tag
    • First observedghl_get_calendar_events
    • First observedghl_get_contact
    • First observedghl_get_contact_notes
    • First observedghl_get_contact_tasks
    • First observedghl_get_conversation_messages
    • First observedghl_get_custom_field
    • First observedghl_get_custom_field_v2
    • First observedghl_get_custom_value
    • First observedghl_get_free_slots
    • First observedghl_get_location
    • First observedghl_get_opportunity
    • First observedghl_get_pipelines
    • First observedghl_get_tag
    • First observedghl_list_calendars
    • First observedghl_list_custom_fields
    • First observedghl_list_custom_fields_v2
    • First observedghl_list_custom_values
    • First observedghl_list_tags
    • First observedghl_list_users
    • First observedghl_merge_contacts_delete_loser
    • First observedghl_remove_contact_from_workflow
    • First observedghl_remove_contact_tags
    • First observedghl_search_contacts
    • First observedghl_search_conversations
    • First observedghl_search_opportunities
    • First observedghl_send_message
    • First observedghl_update_appointment
    • First observedghl_update_contact
    • First observedghl_update_custom_field
    • First observedghl_update_custom_field_folder
    • First observedghl_update_custom_field_v2
    • First observedghl_update_custom_value
    • First observedghl_update_opportunity
    • First observedghl_update_opportunity_status
    • First observedghl_update_tag
    • First observedghl_upsert_contact

TDQS

A3.5/5.0
Disambiguation4/5

Most tools have clearly distinct purposes (e.g., get vs search, v1 vs v2 custom fields). However, the high number of tools (56) introduces some potential confusion between similar operations like 'get_contact' vs 'search_contacts', and between custom field variants.

Naming Consistency5/5

All tools follow a consistent pattern: 'ghl_' + verb_noun (e.g., ghl_get_contact, ghl_create_custom_field_v2). The naming is predictable and uniform across the entire set.

Tool Count4/5

With 56 tools covering contacts, custom fields, opportunities, conversations, calendars, and more, the count is on the higher side but still reasonable for a comprehensive CRM integration. It is not excessive given the breadth of API endpoints.

Completeness4/5

The toolset covers most CRUD operations and search for key entities like contacts, opportunities, and appointments. Minor gaps exist (e.g., no pipeline stage management, no webhooks), but the core workflows are well-supported.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • 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
  • A
    license
    C
    quality
    C
    maintenance
    A comprehensive MCP server covering the full GoHighLevel API surface with 651 tools, enabling management of contacts, opportunities, calendars, invoices, and more through natural language, with multi-tenant support and read-only safety defaults.
    100
    37
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/NightSquawk/gohighlevel-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server