# io.github.northrosetech/ghl-mcp-server (npm · @northrosetech/ghl-mcp-server)

GoHighLevel CRM for AI agents. 60+ tools for contacts, messaging, calendars, and payments.

- Trust score: 67/100 (medium)
- Change this week: +23
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-06

## Components

- npm · `@northrosetech/ghl-mcp-server`: 67/100 (this document), [markdown](https://verifymcp.io/servers/northrosetech-ghl-mcp-server/northrosetech-ghl-mcp-server.md), [page](https://verifymcp.io/servers/northrosetech-ghl-mcp-server/northrosetech-ghl-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@northrosetech/ghl-mcp-server`
- Version: `1.0.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-06.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Known CVEs were checked across the 122 of 124 dependencies we could resolve, so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Dependency health was assessed across the 122 of 124 dependencies we could resolve, so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 104 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 66/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 3766 tokens (~58/item across 64 items; 64 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 33/100
  - Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 84/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 51% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add northrosetech-ghl-mcp-server -- npx -y @northrosetech/ghl-mcp-server
```

### Codex

```bash
codex mcp add northrosetech-ghl-mcp-server -- npx -y @northrosetech/ghl-mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "northrosetech-ghl-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@northrosetech/ghl-mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add northrosetech-ghl-mcp-server --command npx --arg -y --arg @northrosetech/ghl-mcp-server
```

### Hermes

```yaml
mcp_servers:
  northrosetech-ghl-mcp-server:
    command: "npx"
    args: ["-y", "@northrosetech/ghl-mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "northrosetech-ghl-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@northrosetech/ghl-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-06 (score 67, +1)

- [functional regression] Security disclosure: unverified → fail

### 2026-08-05 (score 66, +1)

- [security improvement] CVE-2026-69207 no longer affects this package
- [security improvement] Known CVEs: fail → partial
- [functional regression] Security disclosure: fail → unverified

### 2026-08-04 (score 65, 0)

- [security regression] CVE-2026-69207 affects this package: medium
- [security regression] Known CVEs: partial → fail

### 2026-08-02 (score 65, +46)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Stability: unverified → 0.20
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Schema quality: unverified → good
- [functional improvement] MCP protocol: unverified → pass
- [functional] Licence: MIT

### 2026-08-01 (score 19, −7)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 26, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 44)

First indexed and scored.

## MCP tools (64)

### `ghl_search_contacts` (~187 tokens)

Search GHL Contacts

Search contacts in GoHighLevel by query, tags, filters, or custom fields. Returns paginated results.

Args:
  \- query (string): Search term (name, email, phone)
  \- locationId (string): Location ID (uses default if omitted)
  \- limit (number): Results per page (1-100, default 20)
  \- filters (object): Advanced filters like tags, date ranges, custom fields

Returns: List of contacts with pagination metadata.

Input parameters:

- `filters` (array): Advanced search filters
- `limit` (integer): Results per page
- `locationId` (string): GHL Location ID (uses default if omitted)
- `query` (string): Search term — name, email, phone
- `startAfter` (string): Pagination cursor from previous response
- `startAfterId` (string): Pagination ID cursor from previous response

### `ghl_get_contact` (~40 tokens)

Get GHL Contact

Get a single contact by ID with all details including custom fields, tags, and activity.

Input parameters:

- `contactId` (string, required): The contact ID to retrieve

### `ghl_create_contact` (~265 tokens)

Create GHL Contact

Create a new contact in GoHighLevel.

Args:
  \- firstName, lastName, email, phone (strings): Basic contact info
  \- tags (string[]): Tags to apply
  \- source (string): Lead source
  \- customFields (array): Custom field values as [{id, field_value}]
  \- locationId (string): Location ID (uses default if omitted)

Returns: Created contact object with ID.

Input parameters:

- `address1` (string)
- `city` (string)
- `companyName` (string): Company name
- `country` (string)
- `customFields` (array): Custom field values
- `dnd` (boolean): Do Not Disturb flag
- `email` (string): Email address
- `firstName` (string): First name
- `lastName` (string): Last name
- `locationId` (string)
- `name` (string): Full name (alternative to first/last)
- `phone` (string): Phone number with country code
- `postalCode` (string)
- `source` (string): Lead source
- `state` (string)
- `tags` (array): Tags to apply
- `timezone` (string)
- `website` (string)

### `ghl_update_contact` (~146 tokens)

Update GHL Contact

Update an existing contact. Only pass fields you want to change.

Input parameters:

- `address1` (string)
- `city` (string)
- `companyName` (string)
- `contactId` (string, required): Contact ID to update
- `country` (string)
- `customFields` (array)
- `dnd` (boolean)
- `email` (string)
- `firstName` (string)
- `lastName` (string)
- `phone` (string)
- `postalCode` (string)
- `source` (string)
- `state` (string)
- `tags` (array)
- `website` (string)

### `ghl_delete_contact` (~32 tokens)

Delete GHL Contact

Permanently delete a contact. This cannot be undone.

Input parameters:

- `contactId` (string, required): Contact ID to delete

### `ghl_upsert_contact` (~100 tokens)

Upsert GHL Contact

Create or update a contact by email/phone. If a match is found, updates; otherwise creates new.

Input parameters:

- `companyName` (string)
- `customFields` (array)
- `email` (string)
- `firstName` (string)
- `lastName` (string)
- `locationId` (string)
- `phone` (string)
- `source` (string)
- `tags` (array)

### `ghl_add_contact_tags` (~39 tokens)

Add Tags to Contact

Add one or more tags to a contact.

Input parameters:

- `contactId` (string, required): Contact ID
- `tags` (array, required): Tags to add

### `ghl_remove_contact_tags` (~39 tokens)

Remove Tags from Contact

Remove one or more tags from a contact.

Input parameters:

- `contactId` (string, required): Contact ID
- `tags` (array, required): Tags to remove

### `ghl_get_contact_notes` (~27 tokens)

Get Contact Notes

Get all notes for a contact.

Input parameters:

- `contactId` (string, required): Contact ID

### `ghl_create_contact_note` (~50 tokens)

Create Contact Note

Add a note to a contact.

Input parameters:

- `body` (string, required): Note content
- `contactId` (string, required): Contact ID
- `userId` (string): User ID who created the note

### `ghl_delete_contact_note` (~40 tokens)

Delete Contact Note

Delete a specific note from a contact.

Input parameters:

- `contactId` (string, required): Contact ID
- `noteId` (string, required): Note ID to delete

### `ghl_get_contact_tasks` (~27 tokens)

Get Contact Tasks

Get all tasks for a contact.

Input parameters:

- `contactId` (string, required): Contact ID

### `ghl_create_contact_task` (~81 tokens)

Create Contact Task

Create a task for a contact.

Input parameters:

- `assignedTo` (string): User ID to assign task to
- `body` (string): Task description
- `completed` (boolean)
- `contactId` (string, required): Contact ID
- `dueDate` (string): Due date (ISO 8601)
- `title` (string, required): Task title

### `ghl_update_contact_task` (~75 tokens)

Update Contact Task

Update an existing task for a contact.

Input parameters:

- `assignedTo` (string)
- `body` (string)
- `completed` (boolean)
- `contactId` (string, required): Contact ID
- `dueDate` (string)
- `taskId` (string, required): Task ID
- `title` (string)

### `ghl_add_contact_to_workflow` (~47 tokens)

Add Contact to Workflow

Add a contact to a GHL workflow/automation.

Input parameters:

- `contactId` (string, required): Contact ID
- `workflowId` (string, required): Workflow ID to add contact to

### `ghl_remove_contact_from_workflow` (~41 tokens)

Remove Contact from Workflow

Remove a contact from a GHL workflow.

Input parameters:

- `contactId` (string, required): Contact ID
- `workflowId` (string, required): Workflow ID

### `ghl_search_conversations` (~72 tokens)

Search GHL Conversations

Search conversations by contact ID, query, or status. Returns threaded conversations with latest message info.

Input parameters:

- `contactId` (string): Filter by contact ID
- `limit` (integer)
- `locationId` (string)
- `query` (string): Search term
- `status` (string)

### `ghl_get_conversation` (~29 tokens)

Get GHL Conversation

Get a single conversation by ID with metadata.

Input parameters:

- `conversationId` (string, required): Conversation ID

### `ghl_get_messages` (~59 tokens)

Get Conversation Messages

Get messages in a conversation thread. Returns SMS, email, and other message types.

Input parameters:

- `conversationId` (string, required): Conversation ID
- `limit` (integer)
- `type` (string): Message type filter: SMS, Email, etc.

### `ghl_send_message` (~277 tokens)

Send Message via GHL

Send a message (SMS, Email, WhatsApp, or other) to a contact via GoHighLevel.

Args:
  \- type: "SMS", "Email", "WhatsApp", "GMB", "IG", "FB", "Custom", "Live_Chat"
  \- contactId: The recipient contact ID
  \- message: The message body (text for SMS/WhatsApp, HTML for email)
  \- subject: Email subject (required for Email type)
  \- emailFrom: Sender email (for Email type)
  \- html: HTML body (for Email type, alternative to message)
  \- scheduledTimestamp: ISO timestamp to schedule future send

Returns: Sent message object with ID and status.

Input parameters:

- `contactId` (string, required): Recipient contact ID
- `conversationId` (string): Existing conversation ID (auto-created if omitted)
- `conversationProviderId` (string): Provider ID for the conversation
- `emailFrom` (string): Sender email address
- `emailReplyMode` (string)
- `html` (string): HTML email body
- `message` (string): Message body (text for SMS/WhatsApp)
- `scheduledTimestamp` (string): Schedule send time (ISO 8601)
- `subject` (string): Email subject line
- `type` (string, required): Message channel

### `ghl_cancel_scheduled_message` (~29 tokens)

Cancel Scheduled Message

Cancel a previously scheduled message.

Input parameters:

- `messageId` (string, required): Message ID to cancel

### `ghl_update_conversation` (~60 tokens)

Update GHL Conversation

Update conversation status (starred, unread, etc.).

Input parameters:

- `conversationId` (string, required): Conversation ID
- `starred` (boolean): Star/unstar the conversation
- `unreadCount` (integer): Set unread count (0 to mark as read)

### `ghl_list_calendars` (~26 tokens)

List GHL Calendars

Get all calendars for the location.

Input parameters:

- `locationId` (string)

### `ghl_get_calendar` (~26 tokens)

Get GHL Calendar

Get details of a specific calendar.

Input parameters:

- `calendarId` (string, required): Calendar ID

### `ghl_get_free_slots` (~94 tokens)

Get Calendar Free Slots

Get available booking slots for a calendar within a date range.

Input parameters:

- `calendarId` (string, required): Calendar ID
- `endDate` (string, required): End date (YYYY-MM-DD or ISO 8601)
- `startDate` (string, required): Start date (YYYY-MM-DD or ISO 8601)
- `timezone` (string): Timezone (e.g., 'Asia/Kolkata', 'America/New_York')

### `ghl_get_events` (~105 tokens)

Get Calendar Events

Get appointments/events for a location, optionally filtered by calendar, contact, or date range.

Input parameters:

- `calendarId` (string): Filter by calendar ID
- `contactId` (string): Filter by contact ID
- `endTime` (string): End of date range (ISO 8601)
- `locationId` (string)
- `startTime` (string): Start of date range (ISO 8601)
- `userId` (string): Filter by assigned user

### `ghl_create_event` (~134 tokens)

Create Calendar Event

Create a new appointment/event on a GHL calendar.

Input parameters:

- `address` (string): Meeting address
- `appointmentStatus` (string)
- `assignedUserId` (string): Assigned team member
- `calendarId` (string, required): Calendar ID
- `contactId` (string, required): Contact to book for
- `endTime` (string, required): Event end (ISO 8601)
- `locationId` (string)
- `notes` (string): Internal notes
- `startTime` (string, required): Event start (ISO 8601)
- `status` (string)
- `title` (string): Event title

### `ghl_update_event` (~88 tokens)

Update Calendar Event

Update an existing appointment/event.

Input parameters:

- `address` (string)
- `assignedUserId` (string)
- `calendarId` (string)
- `endTime` (string)
- `eventId` (string, required): Event/Appointment ID
- `notes` (string)
- `startTime` (string)
- `status` (string)
- `title` (string)

### `ghl_delete_event` (~27 tokens)

Delete Calendar Event

Delete/cancel an appointment.

Input parameters:

- `eventId` (string, required): Event ID to delete

### `ghl_create_calendar` (~62 tokens)

Create GHL Calendar

Create a new calendar in GoHighLevel.

Input parameters:

- `calendarType` (string)
- `description` (string)
- `locationId` (string)
- `name` (string, required): Calendar name
- `slug` (string): URL slug for booking page

### `ghl_search_opportunities` (~116 tokens)

Search GHL Opportunities

Search opportunities (deals) by pipeline, stage, status, contact, or monetary value.

Input parameters:

- `contactId` (string): Filter by contact ID
- `limit` (integer)
- `locationId` (string)
- `pipelineId` (string): Filter by pipeline ID
- `pipelineStageId` (string): Filter by stage ID
- `query` (string): Search term
- `startAfter` (string): Pagination cursor
- `startAfterId` (string)
- `status` (string)

### `ghl_get_opportunity` (~29 tokens)

Get GHL Opportunity

Get details of a specific opportunity/deal.

Input parameters:

- `opportunityId` (string, required): Opportunity ID

### `ghl_create_opportunity` (~126 tokens)

Create GHL Opportunity

Create a new opportunity/deal in a pipeline.

Input parameters:

- `assignedTo` (string): Assigned user ID
- `contactId` (string, required): Contact ID to associate
- `customFields` (array)
- `locationId` (string)
- `monetaryValue` (number): Deal value in currency
- `name` (string, required): Opportunity/deal name
- `pipelineId` (string, required): Pipeline ID to create opportunity in
- `pipelineStageId` (string, required): Stage ID within the pipeline
- `source` (string): Lead source
- `status` (string)

### `ghl_update_opportunity` (~95 tokens)

Update GHL Opportunity

Update an existing opportunity — move stages, change value, update status, etc.

Input parameters:

- `assignedTo` (string)
- `monetaryValue` (number)
- `name` (string)
- `opportunityId` (string, required): Opportunity ID
- `pipelineId` (string)
- `pipelineStageId` (string): Move to a different stage
- `source` (string)
- `status` (string)

### `ghl_delete_opportunity` (~28 tokens)

Delete GHL Opportunity

Permanently delete an opportunity.

Input parameters:

- `opportunityId` (string, required): Opportunity ID to delete

### `ghl_update_opportunity_status` (~45 tokens)

Update Opportunity Status

Change the status of an opportunity (open, won, lost, abandoned).

Input parameters:

- `opportunityId` (string, required): Opportunity ID
- `status` (string, required): New status

### `ghl_list_pipelines` (~28 tokens)

List GHL Pipelines

Get all pipelines and their stages for a location.

Input parameters:

- `locationId` (string)

### `ghl_list_orders` (~38 tokens)

List Payment Orders

Get payment orders for a location.

Input parameters:

- `limit` (integer)
- `locationId` (string)
- `offset` (integer)

### `ghl_get_order` (~27 tokens)

Get Payment Order

Get details of a specific payment order.

Input parameters:

- `orderId` (string, required): Order ID

### `ghl_list_transactions` (~38 tokens)

List Transactions

Get payment transactions for a location.

Input parameters:

- `limit` (integer)
- `locationId` (string)
- `offset` (integer)

### `ghl_list_subscriptions` (~32 tokens)

List Subscriptions

Get active subscriptions for a location.

Input parameters:

- `limit` (integer)
- `locationId` (string)

### `ghl_list_invoices` (~56 tokens)

List Invoices

Get invoices for a location. Filter by status, contact, or date range.

Input parameters:

- `contactId` (string)
- `limit` (integer)
- `locationId` (string)
- `status` (string)

### `ghl_get_invoice` (~24 tokens)

Get Invoice

Get details of a specific invoice.

Input parameters:

- `invoiceId` (string, required)

### `ghl_create_invoice` (~76 tokens)

Create Invoice

Create a new invoice for a contact.

Input parameters:

- `contactId` (string, required): Contact to invoice
- `currency` (string)
- `dueDate` (string): Due date (ISO 8601)
- `items` (array, required): Line items
- `locationId` (string)
- `name` (string, required): Invoice title

### `ghl_send_invoice` (~26 tokens)

Send Invoice

Send an invoice to the contact via email.

Input parameters:

- `invoiceId` (string, required)

### `ghl_void_invoice` (~22 tokens)

Void Invoice

Void an existing invoice.

Input parameters:

- `invoiceId` (string, required)

### `ghl_list_workflows` (~28 tokens)

List GHL Workflows

Get all workflows/automations for a location.

Input parameters:

- `locationId` (string)

### `ghl_list_custom_fields` (~28 tokens)

List Custom Fields

Get all custom fields for contacts in a location.

Input parameters:

- `locationId` (string)

### `ghl_create_custom_field` (~70 tokens)

Create Custom Field

Create a new custom field for contacts.

Input parameters:

- `dataType` (string, required): Field data type
- `locationId` (string)
- `name` (string, required): Field display name
- `options` (array): Options for SINGLE_OPTIONS or MULTIPLE_OPTIONS type
- `placeholder` (string)

### `ghl_get_location` (~41 tokens)

Get Location Details

Get details of a GHL location/sub-account including settings, address, and configuration.

Input parameters:

- `locationId` (string): Location ID (uses default if omitted)

### `ghl_get_location_tags` (~26 tokens)

Get Location Tags

Get all tags defined in a location.

Input parameters:

- `locationId` (string)

### `ghl_create_location_tag` (~35 tokens)

Create Location Tag

Create a new tag in the location.

Input parameters:

- `locationId` (string)
- `name` (string, required): Tag name

### `ghl_search_users` (~38 tokens)

Search GHL Users

Search for users/team members in a location.

Input parameters:

- `locationId` (string)
- `query` (string): Search by name or email

### `ghl_list_forms` (~24 tokens)

List Forms

Get all forms for a location.

Input parameters:

- `locationId` (string)

### `ghl_get_form_submissions` (~46 tokens)

Get Form Submissions

Get submissions for forms in a location.

Input parameters:

- `formId` (string): Filter by specific form
- `limit` (integer)
- `locationId` (string)

### `ghl_list_surveys` (~25 tokens)

List Surveys

Get all surveys for a location.

Input parameters:

- `locationId` (string)

### `ghl_list_campaigns` (~25 tokens)

List Campaigns

Get all campaigns for a location.

Input parameters:

- `locationId` (string)

### `ghl_list_social_posts` (~33 tokens)

List Social Media Posts

Get scheduled and published social media posts.

Input parameters:

- `limit` (integer)
- `locationId` (string)

### `ghl_create_social_post` (~83 tokens)

Create Social Media Post

Schedule or publish a social media post.

Input parameters:

- `accountIds` (array, required): Social account IDs to post to
- `content` (string, required): Post content/caption
- `locationId` (string)
- `mediaUrls` (array): Media file URLs
- `scheduledDate` (string): Schedule date (ISO 8601) — omit for immediate publish

### `ghl_list_social_accounts` (~33 tokens)

List Connected Social Accounts

Get all connected social media accounts (Facebook, Instagram, Google, etc.).

Input parameters:

- `locationId` (string)

### `ghl_list_funnels` (~27 tokens)

List Funnels

Get all funnels/websites for a location.

Input parameters:

- `locationId` (string)

### `ghl_list_products` (~24 tokens)

List Products

Get all products for a location.

Input parameters:

- `locationId` (string)

### `ghl_list_blogs` (~25 tokens)

List Blogs

Get all blogs for a location.

Input parameters:

- `locationId` (string)

### `ghl_list_links` (~25 tokens)

List Trigger Links

Get all trigger links for a location.

Input parameters:

- `locationId` (string)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/northrosetech-ghl-mcp-server/northrosetech-ghl-mcp-server#diagnostics

## Score history

- 2026-08-06: 67
- 2026-08-05: 66
- 2026-08-04: 65
- 2026-08-03: 65
- 2026-08-02: 65
- 2026-08-01: 19
- 2026-07-31: 26
- 2026-07-29: 44
- 2026-07-28: 44
- 2026-07-27: 44

## Links

- npm package: https://www.npmjs.com/package/@northrosetech/ghl-mcp-server
- Socket report: https://socket.dev/npm/package/@northrosetech/ghl-mcp-server
- Repository: https://github.com/northrosetech/ghl-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/northrosetech-ghl-mcp-server/northrosetech-ghl-mcp-server.xml
- Changelog JSON feed: https://verifymcp.io/servers/northrosetech-ghl-mcp-server/northrosetech-ghl-mcp-server.json
- HTML version of this page: https://verifymcp.io/servers/northrosetech-ghl-mcp-server/northrosetech-ghl-mcp-server
