List and create Keap contacts, companies, tasks, opportunities, orders, tags and campaigns.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
APPLY a tag to one or more contacts (segments them / can trigger automation). Keap: POST /tags/{tag_id}/contacts:applyTags.
The id of the tag to apply.
Ids of the contacts to tag.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
APPLY a tag to one or more contacts (segments them / can trigger automation). Keap: POST /tags/{tag_id}/contacts:applyTags.
| Argument | Type | Description |
|---|---|---|
| tag_id* | string | The id of the tag to apply. |
| contact_ids* | array | Ids of the contacts to tag. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"tag_id",
"contact_ids"
],
"properties": {
"tag_id": {
"type": "string",
"description": "The id of the tag to apply."
},
"contact_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Ids of the contacts to tag."
}
}
}CREATE a new contact in the Keap CRM. Provide any of given_name, family_name, email_addresses, phone_numbers, company_id, plus an optional `extra` object of any other Keap fields. Keap: POST /contacts.
| Argument | Type | Description |
|---|---|---|
| extra | object | Any other Keap fields to merge into the request body verbatim. |
| company_id | string | Id of the company to associate the contact with. |
| given_name | string | The contact's first name. |
| family_name | string | The contact's last name. |
| phone_numbers | array | Phone numbers to set on the contact. |
| email_addresses | array | Email addresses to set on the contact. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"extra": {
"type": "object",
"description": "Any other Keap fields to merge into the request body verbatim.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"company_id": {
"type": "string",
"description": "Id of the company to associate the contact with."
},
"given_name": {
"type": "string",
"description": "The contact's first name."
},
"family_name": {
"type": "string",
"description": "The contact's last name."
},
"phone_numbers": {
"type": "array",
"items": {
"type": "object",
"required": [
"number"
],
"properties": {
"field": {
"type": "string",
"description": "Which phone slot, e.g. PHONE1 / PHONE2."
},
"number": {
"type": "string",
"description": "The phone number."
}
}
},
"description": "Phone numbers to set on the contact."
},
"email_addresses": {
"type": "array",
"items": {
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"description": "The email address."
},
"field": {
"type": "string",
"description": "Which email slot, e.g. EMAIL1 / EMAIL2 / EMAIL3."
}
}
},
"description": "Email addresses to set on the contact."
}
}
}CREATE a task (follow-up / to-do), optionally linked to a contact. Keap: POST /tasks.
| Argument | Type | Description |
|---|---|---|
| extra | object | Any other Keap fields to merge into the request body verbatim. |
| title* | string | The task title. |
| due_date | string | Due date/time, ISO 8601 (e.g. 2026-08-01T17:00:00Z). |
| contact_id | string | Id of a contact to link the task to. |
| description | string | A longer description / notes for the task. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title"
],
"properties": {
"extra": {
"type": "object",
"description": "Any other Keap fields to merge into the request body verbatim.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"title": {
"type": "string",
"description": "The task title."
},
"due_date": {
"type": "string",
"description": "Due date/time, ISO 8601 (e.g. 2026-08-01T17:00:00Z)."
},
"contact_id": {
"type": "string",
"description": "Id of a contact to link the task to."
},
"description": {
"type": "string",
"description": "A longer description / notes for the task."
}
}
}Get a single company by id. Keap: GET /companies/{company_id}.
| Argument | Type | Description |
|---|---|---|
| fields | string | Comma-separated list of fields to return (field selection). |
| company_id* | string | The company id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"company_id"
],
"properties": {
"fields": {
"type": "string",
"description": "Comma-separated list of fields to return (field selection)."
},
"company_id": {
"type": "string",
"description": "The company id."
}
}
}Get a single contact by id. Keap: GET /contacts/{contact_id}.
| Argument | Type | Description |
|---|---|---|
| fields | string | Comma-separated list of fields to return (field selection). |
| contact_id* | string | The contact id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"contact_id"
],
"properties": {
"fields": {
"type": "string",
"description": "Comma-separated list of fields to return (field selection)."
},
"contact_id": {
"type": "string",
"description": "The contact id."
}
}
}Get a single opportunity by id. Keap: GET /opportunities/{opportunity_id}.
| Argument | Type | Description |
|---|---|---|
| opportunity_id* | string | The opportunity id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"opportunity_id"
],
"properties": {
"opportunity_id": {
"type": "string",
"description": "The opportunity id."
}
}
}Get a single task by id. Keap: GET /tasks/{task_id}.
| Argument | Type | Description |
|---|---|---|
| task_id* | string | The task id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"task_id"
],
"properties": {
"task_id": {
"type": "string",
"description": "The task id."
}
}
}List referral-program affiliates. Supports filtering, ordering, and cursor pagination. Keap: GET /affiliates.
| Argument | Type | Description |
|---|---|---|
| filter | string | Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering). |
| order_by | string | Field to order results by, e.g. `given_name` or `-date_created`. |
| page_size | integer | Number of records per page (max 1000). |
| page_token | string | Opaque pagination cursor from a prior response's next_page_token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"filter": {
"type": "string",
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering)."
},
"order_by": {
"type": "string",
"description": "Field to order results by, e.g. `given_name` or `-date_created`."
},
"page_size": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Number of records per page (max 1000)."
},
"page_token": {
"type": "string",
"description": "Opaque pagination cursor from a prior response's next_page_token."
}
}
}List marketing campaigns (automation sequences). Supports filtering, ordering, and cursor pagination. Keap: GET /campaigns.
| Argument | Type | Description |
|---|---|---|
| filter | string | Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering). |
| order_by | string | Field to order results by, e.g. `given_name` or `-date_created`. |
| page_size | integer | Number of records per page (max 1000). |
| page_token | string | Opaque pagination cursor from a prior response's next_page_token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"filter": {
"type": "string",
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering)."
},
"order_by": {
"type": "string",
"description": "Field to order results by, e.g. `given_name` or `-date_created`."
},
"page_size": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Number of records per page (max 1000)."
},
"page_token": {
"type": "string",
"description": "Opaque pagination cursor from a prior response's next_page_token."
}
}
}List companies in the Keap CRM. Supports filtering, ordering, field selection, and cursor pagination. Keap: GET /companies.
| Argument | Type | Description |
|---|---|---|
| fields | string | Comma-separated list of fields to return (field selection). |
| filter | string | Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering). |
| order_by | string | Field to order results by, e.g. `given_name` or `-date_created`. |
| page_size | integer | Number of records per page (max 1000). |
| page_token | string | Opaque pagination cursor from a prior response's next_page_token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"fields": {
"type": "string",
"description": "Comma-separated list of fields to return (field selection)."
},
"filter": {
"type": "string",
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering)."
},
"order_by": {
"type": "string",
"description": "Field to order results by, e.g. `given_name` or `-date_created`."
},
"page_size": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Number of records per page (max 1000)."
},
"page_token": {
"type": "string",
"description": "Opaque pagination cursor from a prior response's next_page_token."
}
}
}List contacts in the Keap CRM. Supports filtering, ordering, field selection, and cursor pagination (page_size / page_token). Keap: GET /contacts.
| Argument | Type | Description |
|---|---|---|
| fields | string | Comma-separated list of fields to return (field selection). |
| filter | string | Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering). |
| order_by | string | Field to order results by, e.g. `given_name` or `-date_created`. |
| page_size | integer | Number of records per page (max 1000). |
| page_token | string | Opaque pagination cursor from a prior response's next_page_token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"fields": {
"type": "string",
"description": "Comma-separated list of fields to return (field selection)."
},
"filter": {
"type": "string",
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering)."
},
"order_by": {
"type": "string",
"description": "Field to order results by, e.g. `given_name` or `-date_created`."
},
"page_size": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Number of records per page (max 1000)."
},
"page_token": {
"type": "string",
"description": "Opaque pagination cursor from a prior response's next_page_token."
}
}
}List sales opportunities (deals) in the pipeline. Supports filtering, ordering, field selection, and cursor pagination. Keap: GET /opportunities.
| Argument | Type | Description |
|---|---|---|
| fields | string | Comma-separated list of fields to return (field selection). |
| filter | string | Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering). |
| order_by | string | Field to order results by, e.g. `given_name` or `-date_created`. |
| page_size | integer | Number of records per page (max 1000). |
| page_token | string | Opaque pagination cursor from a prior response's next_page_token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"fields": {
"type": "string",
"description": "Comma-separated list of fields to return (field selection)."
},
"filter": {
"type": "string",
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering)."
},
"order_by": {
"type": "string",
"description": "Field to order results by, e.g. `given_name` or `-date_created`."
},
"page_size": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Number of records per page (max 1000)."
},
"page_token": {
"type": "string",
"description": "Opaque pagination cursor from a prior response's next_page_token."
}
}
}List e-commerce orders. Supports filtering, ordering, and cursor pagination. Keap: GET /orders.
| Argument | Type | Description |
|---|---|---|
| filter | string | Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering). |
| order_by | string | Field to order results by, e.g. `given_name` or `-date_created`. |
| page_size | integer | Number of records per page (max 1000). |
| page_token | string | Opaque pagination cursor from a prior response's next_page_token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"filter": {
"type": "string",
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering)."
},
"order_by": {
"type": "string",
"description": "Field to order results by, e.g. `given_name` or `-date_created`."
},
"page_size": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Number of records per page (max 1000)."
},
"page_token": {
"type": "string",
"description": "Opaque pagination cursor from a prior response's next_page_token."
}
}
}List products in the catalog. Supports filtering, ordering, and cursor pagination. Keap: GET /products.
| Argument | Type | Description |
|---|---|---|
| filter | string | Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering). |
| order_by | string | Field to order results by, e.g. `given_name` or `-date_created`. |
| page_size | integer | Number of records per page (max 1000). |
| page_token | string | Opaque pagination cursor from a prior response's next_page_token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"filter": {
"type": "string",
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering)."
},
"order_by": {
"type": "string",
"description": "Field to order results by, e.g. `given_name` or `-date_created`."
},
"page_size": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Number of records per page (max 1000)."
},
"page_token": {
"type": "string",
"description": "Opaque pagination cursor from a prior response's next_page_token."
}
}
}List recurring subscriptions / payment plans. Supports filtering, ordering, and cursor pagination. Keap: GET /subscriptions.
| Argument | Type | Description |
|---|---|---|
| filter | string | Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering). |
| order_by | string | Field to order results by, e.g. `given_name` or `-date_created`. |
| page_size | integer | Number of records per page (max 1000). |
| page_token | string | Opaque pagination cursor from a prior response's next_page_token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"filter": {
"type": "string",
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering)."
},
"order_by": {
"type": "string",
"description": "Field to order results by, e.g. `given_name` or `-date_created`."
},
"page_size": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Number of records per page (max 1000)."
},
"page_token": {
"type": "string",
"description": "Opaque pagination cursor from a prior response's next_page_token."
}
}
}List tags defined in the account (used to segment contacts). Supports filtering, ordering, and cursor pagination. Keap: GET /tags.
| Argument | Type | Description |
|---|---|---|
| filter | string | Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering). |
| order_by | string | Field to order results by, e.g. `given_name` or `-date_created`. |
| page_size | integer | Number of records per page (max 1000). |
| page_token | string | Opaque pagination cursor from a prior response's next_page_token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"filter": {
"type": "string",
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering)."
},
"order_by": {
"type": "string",
"description": "Field to order results by, e.g. `given_name` or `-date_created`."
},
"page_size": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Number of records per page (max 1000)."
},
"page_token": {
"type": "string",
"description": "Opaque pagination cursor from a prior response's next_page_token."
}
}
}List tasks (follow-ups / to-dos). Supports filtering, ordering, and cursor pagination. Keap: GET /tasks.
| Argument | Type | Description |
|---|---|---|
| filter | string | Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering). |
| order_by | string | Field to order results by, e.g. `given_name` or `-date_created`. |
| page_size | integer | Number of records per page (max 1000). |
| page_token | string | Opaque pagination cursor from a prior response's next_page_token. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"filter": {
"type": "string",
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering)."
},
"order_by": {
"type": "string",
"description": "Field to order results by, e.g. `given_name` or `-date_created`."
},
"page_size": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Number of records per page (max 1000)."
},
"page_token": {
"type": "string",
"description": "Opaque pagination cursor from a prior response's next_page_token."
}
}
}UPDATE an existing contact by id. Provide any of given_name, family_name, email_addresses, phone_numbers, company_id, plus an optional `extra` object of any other Keap fields (only supplied fields are changed). Keap: PATCH /contacts/{contact_id}.
| Argument | Type | Description |
|---|---|---|
| extra | object | Any other Keap fields to merge into the request body verbatim. |
| company_id | string | Id of the company to associate the contact with. |
| contact_id* | string | The contact id to update. |
| given_name | string | The contact's first name. |
| family_name | string | The contact's last name. |
| phone_numbers | array | Phone numbers to set on the contact. |
| email_addresses | array | Email addresses to set on the contact. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"contact_id"
],
"properties": {
"extra": {
"type": "object",
"description": "Any other Keap fields to merge into the request body verbatim.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"company_id": {
"type": "string",
"description": "Id of the company to associate the contact with."
},
"contact_id": {
"type": "string",
"description": "The contact id to update."
},
"given_name": {
"type": "string",
"description": "The contact's first name."
},
"family_name": {
"type": "string",
"description": "The contact's last name."
},
"phone_numbers": {
"type": "array",
"items": {
"type": "object",
"required": [
"number"
],
"properties": {
"field": {
"type": "string",
"description": "Which phone slot, e.g. PHONE1 / PHONE2."
},
"number": {
"type": "string",
"description": "The phone number."
}
}
},
"description": "Phone numbers to set on the contact."
},
"email_addresses": {
"type": "array",
"items": {
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"description": "The email address."
},
"field": {
"type": "string",
"description": "Which email slot, e.g. EMAIL1 / EMAIL2 / EMAIL3."
}
}
},
"description": "Email addresses to set on the contact."
}
}
}