MCP server for integrating with GoHighLevel API, exposing tools for contact management, conversations, blog management, opportunities, associations, and relations
Server provides 17 tools with mostly complete parameter schemas and good descriptions. Naming is consistent (verb_noun pattern). However, several critical issues reduce overall quality: (1) Output schemas are not documented in the provided source, we see input parameters but no return type definitions; (2) Error handling is minimal, no guidance on retryability, user-fixable vs fatal errors, or recovery steps; (3) Tool descriptions, while present, are sometimes verbose and include example values that LLMs may reuse literally; (4) Some parameter descriptions lack constraints (e.g., no min/max for numeric fields like 'limit'); (5) No evidence of idempotent operation patterns or confirmation workflows for destructive tools (delete_association, delete_relation). Association tools (1-10) and blog tools (11-17) show good structural quality but lack production-grade error responses and output documentation.
Check if a URL slug is available for use. Use this before creating or updating blog posts to ensure unique URLs.
Create a new association between two object types. Define relationship types between entities like contacts, custom objects, and opportunities. Use Cases: - Link students to teachers - Connect pets to owners (contacts) - Associate tickets to products - Map custom business relationships Examples: - Student-Teacher: key="student_teacher", firstObjectKey="custom_objects.student", secondObjectKey="contact" - Pet-Owner: key="pet_owner", firstObjectKey="custom_objects.pet", secondObjectKey="contact" Returns: Created association with ID and configuration. Related Tools: create_relation, get_all_associations
Create a new blog post in GoHighLevel. Requires blog ID, author ID, and category IDs which can be obtained from other blog tools.
Create a relation between two specific records. Link individual records together using an existing association. Use Cases: - Link a student to their teacher - Connect a pet to its owner (contact) - Associate a ticket to a product - Map custom business relationships Examples: - Link student record to teacher contact: associationId="abc123", firstRecordId="student_id", secondRecordId="contact_id" - Link pet to owner: associationId="xyz789", firstRecordId="pet_id", secondRecordId="owner_contact_id" Returns: Created relation with ID and record mappings. Related Tools: get_relations_by_record, delete_relation, create_association
Output schemas not documented in source code. Tools define inputs but provide no return type documentation, making it impossible for LLMs to predict downstream field availability or plan multi-tool chains.
Destructive tools (delete_association, delete_relation) lack confirmation or dry-run patterns. No evidence of 'confirm_before_execute' workflow or recovery guidance. Agents may inadvertently trigger permanent deletions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 61 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 48 | - | v1 |
Delete a user-defined association. ⚠️ WARNING: This is permanent and cannot be undone! ⚠️ All relations created with this association will also be deleted! Only user-defined associations can be deleted (system associations cannot be removed). Related Tools: get_all_associations, delete_relation
Delete a specific relation between two records. ⚠️ WARNING: This is permanent and cannot be undone! Unlinks two records but does not delete the records themselves. Use Cases: - Remove student-teacher link - Unlink pet from owner - Disconnect ticket from product Related Tools: create_relation, get_relations_by_record
Get all associations for a location. Returns both system-defined and user-defined associations. Use Cases: - List all available associations - Discover relationship types - View association configurations - Prepare for creating relations Returns: Array of associations with IDs, keys, and object mappings. Related Tools: create_association, get_association_by_id
Get a specific association by its ID. Retrieve association details for both system-defined and user-defined associations. Use Cases: - View association configuration - Get object mappings - Verify association setup Returns: Association with ID, key, labels, and object mappings. Related Tools: get_all_associations, update_association
Get an association by its key name. Find associations using their unique key identifier. Use Cases: - Look up association by key - Verify association exists - Get association ID from key Returns: Association matching the key. Related Tools: get_all_associations, get_association_by_id
Get associations by object key. Find all associations that involve a specific object type. Use Cases: - Find all associations for contacts - List associations for a custom object - Discover available relationships for an object Examples: - objectKey="contact" - Find all contact associations - objectKey="custom_objects.pet" - Find all pet associations Returns: Array of associations involving the specified object. Related Tools: get_all_associations, create_association
Get all available blog authors for the current location. Use this to find author IDs for creating blog posts.
Get all available blog categories for the current location. Use this to find category IDs for creating blog posts.
Get blog posts from a specific blog site. Use this to list and search existing blog posts.
Get all blog sites for the current location. Use this to find available blogs before creating or managing posts.
Get all relations for a specific record. Retrieve all relationships linked to a particular record with pagination. Use Cases: - Find all teachers for a student - List all pets owned by a contact - Get all tickets for a product - View all relationships for a record Optionally filter by specific association IDs to narrow results. Returns: Array of relations with related record IDs and association info. Related Tools: create_relation, delete_relation
Update the labels of an existing association. Only user-defined associations can be updated (system associations are read-only). Use Cases: - Rename association labels - Update relationship terminology - Refine association descriptions Returns: Updated association with new labels. Related Tools: get_association_by_id, create_association
Update an existing blog post in GoHighLevel. All fields except postId and blogId are optional.
Error handling missing actionable recovery guidance. No evidence of error classification (retryable vs user-fixable vs fatal), no constraint violation details (e.g., 'limit must be 1 - 100'), and no suggestions for alternative tools or parameters when operations fail.
Parameter constraints incomplete. Numeric parameters (limit, skip, offset) lack explicit min/max bounds in descriptions (e.g., 'limit' has 'max: 100' in JSON but no actionable text for LLM). String parameters lack regex/length constraints.
Tool descriptions include example values that LLMs may reuse literally. E.g., create_association description states 'key="student_teacher"', 'firstObjectKey="custom_objects.student"', agents often copy these examples into real API calls instead of using context-specific values.
No evidence of idempotent operation patterns. Tools like update_association and update_blog_post do not document whether repeated calls with identical input produce the same result or risk side effects. Critical for agent retry safety.
Tool descriptions verbose and lack 'when to use' guidance. Average description length exceeds 200 chars for several tools (create_association ~270, create_blog_post ~180). LLM overhead increases; clarity decreases. Should compress to 50 - 150 chars with explicit use-case guidance.