Keap MCP by usefulapi
List and create Keap contacts, companies, tasks, opportunities, orders, tags and campaigns.
Should I use this
Quality & Safety
Findings (1)
- LOWin keap_apply_tag
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"keap": {
"url": "https://keap.usefulapi.io/mcp"
}
}
}Remote endpoints
https://keap.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (18)
🟢keap_list_contacts(page_size, page_token, filter, order_by, fields)
List contacts in the Keap CRM. Supports filtering, ordering, field selection, and cursor pagination (page_size / page_token). Keap: GET /contacts.
Input Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Number of records per page (max 1000).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page_token": {
"description": "Opaque pagination cursor from a prior response's next_page_token.",
"type": "string"
},
"filter": {
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering).",
"type": "string"
},
"order_by": {
"description": "Field to order results by, e.g. `given_name` or `-date_created`.",
"type": "string"
},
"fields": {
"description": "Comma-separated list of fields to return (field selection).",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢keap_get_contact(contact_id, fields)
Get a single contact by id. Keap: GET /contacts/{contact_id}.
Input Schema
{
"type": "object",
"properties": {
"contact_id": {
"type": "string",
"description": "The contact id."
},
"fields": {
"description": "Comma-separated list of fields to return (field selection).",
"type": "string"
}
},
"required": [
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢keap_list_companies(page_size, page_token, filter, order_by, fields)
List companies in the Keap CRM. Supports filtering, ordering, field selection, and cursor pagination. Keap: GET /companies.
Input Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Number of records per page (max 1000).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page_token": {
"description": "Opaque pagination cursor from a prior response's next_page_token.",
"type": "string"
},
"filter": {
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering).",
"type": "string"
},
"order_by": {
"description": "Field to order results by, e.g. `given_name` or `-date_created`.",
"type": "string"
},
"fields": {
"description": "Comma-separated list of fields to return (field selection).",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢keap_get_company(company_id, fields)
Get a single company by id. Keap: GET /companies/{company_id}.
Input Schema
{
"type": "object",
"properties": {
"company_id": {
"type": "string",
"description": "The company id."
},
"fields": {
"description": "Comma-separated list of fields to return (field selection).",
"type": "string"
}
},
"required": [
"company_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢keap_list_opportunities(page_size, page_token, filter, order_by, fields)
List sales opportunities (deals) in the pipeline. Supports filtering, ordering, field selection, and cursor pagination. Keap: GET /opportunities.
Input Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Number of records per page (max 1000).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page_token": {
"description": "Opaque pagination cursor from a prior response's next_page_token.",
"type": "string"
},
"filter": {
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering).",
"type": "string"
},
"order_by": {
"description": "Field to order results by, e.g. `given_name` or `-date_created`.",
"type": "string"
},
"fields": {
"description": "Comma-separated list of fields to return (field selection).",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢keap_get_opportunity(opportunity_id)
Get a single opportunity by id. Keap: GET /opportunities/{opportunity_id}.
Input Schema
{
"type": "object",
"properties": {
"opportunity_id": {
"type": "string",
"description": "The opportunity id."
}
},
"required": [
"opportunity_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢keap_list_tags(page_size, page_token, filter, order_by)
List tags defined in the account (used to segment contacts). Supports filtering, ordering, and cursor pagination. Keap: GET /tags.
Input Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Number of records per page (max 1000).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page_token": {
"description": "Opaque pagination cursor from a prior response's next_page_token.",
"type": "string"
},
"filter": {
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering).",
"type": "string"
},
"order_by": {
"description": "Field to order results by, e.g. `given_name` or `-date_created`.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢keap_list_tasks(page_size, page_token, filter, order_by)
List tasks (follow-ups / to-dos). Supports filtering, ordering, and cursor pagination. Keap: GET /tasks.
Input Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Number of records per page (max 1000).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page_token": {
"description": "Opaque pagination cursor from a prior response's next_page_token.",
"type": "string"
},
"filter": {
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering).",
"type": "string"
},
"order_by": {
"description": "Field to order results by, e.g. `given_name` or `-date_created`.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢keap_get_task(task_id)
Get a single task by id. Keap: GET /tasks/{task_id}.
Input Schema
{
"type": "object",
"properties": {
"task_id": {
"type": "string",
"description": "The task id."
}
},
"required": [
"task_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢keap_list_subscriptions(page_size, page_token, filter, order_by)
List recurring subscriptions / payment plans. Supports filtering, ordering, and cursor pagination. Keap: GET /subscriptions.
Input Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Number of records per page (max 1000).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page_token": {
"description": "Opaque pagination cursor from a prior response's next_page_token.",
"type": "string"
},
"filter": {
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering).",
"type": "string"
},
"order_by": {
"description": "Field to order results by, e.g. `given_name` or `-date_created`.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢keap_list_orders(page_size, page_token, filter, order_by)
List e-commerce orders. Supports filtering, ordering, and cursor pagination. Keap: GET /orders.
Input Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Number of records per page (max 1000).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page_token": {
"description": "Opaque pagination cursor from a prior response's next_page_token.",
"type": "string"
},
"filter": {
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering).",
"type": "string"
},
"order_by": {
"description": "Field to order results by, e.g. `given_name` or `-date_created`.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢keap_list_products(page_size, page_token, filter, order_by)
List products in the catalog. Supports filtering, ordering, and cursor pagination. Keap: GET /products.
Input Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Number of records per page (max 1000).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page_token": {
"description": "Opaque pagination cursor from a prior response's next_page_token.",
"type": "string"
},
"filter": {
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering).",
"type": "string"
},
"order_by": {
"description": "Field to order results by, e.g. `given_name` or `-date_created`.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢keap_list_campaigns(page_size, page_token, filter, order_by)
List marketing campaigns (automation sequences). Supports filtering, ordering, and cursor pagination. Keap: GET /campaigns.
Input Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Number of records per page (max 1000).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page_token": {
"description": "Opaque pagination cursor from a prior response's next_page_token.",
"type": "string"
},
"filter": {
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering).",
"type": "string"
},
"order_by": {
"description": "Field to order results by, e.g. `given_name` or `-date_created`.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢keap_list_affiliates(page_size, page_token, filter, order_by)
List referral-program affiliates. Supports filtering, ordering, and cursor pagination. Keap: GET /affiliates.
Input Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Number of records per page (max 1000).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"page_token": {
"description": "Opaque pagination cursor from a prior response's next_page_token.",
"type": "string"
},
"filter": {
"description": "Filter expression, e.g. `given_name==John` (see Keap REST v2 filtering).",
"type": "string"
},
"order_by": {
"description": "Field to order results by, e.g. `given_name` or `-date_created`.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴keap_create_contact(given_name, family_name, email_addresses, phone_numbers, company_id, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"given_name": {
"description": "The contact's first name.",
"type": "string"
},
"family_name": {
"description": "The contact's last name.",
"type": "string"
},
"email_addresses": {
"description": "Email addresses to set on the contact.",
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "The email address."
},
"field": {
"description": "Which email slot, e.g. EMAIL1 / EMAIL2 / EMAIL3.",
"type": "string"
}
},
"required": [
"email"
]
}
},
"phone_numbers": {
"description": "Phone numbers to set on the contact.",
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "string",
"description": "The phone number."
},
"field": {
"description": "Which phone slot, e.g. PHONE1 / PHONE2.",
"type": "string"
}
},
"required": [
"number"
]
}
},
"company_id": {
"description": "Id of the company to associate the contact with.",
"type": "string"
},
"extra": {
"description": "Any other Keap fields to merge into the request body verbatim.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴keap_update_contact(contact_id, given_name, family_name, email_addresses, phone_numbers, ...)
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}.
Input Schema
{
"type": "object",
"properties": {
"contact_id": {
"type": "string",
"description": "The contact id to update."
},
"given_name": {
"description": "The contact's first name.",
"type": "string"
},
"family_name": {
"description": "The contact's last name.",
"type": "string"
},
"email_addresses": {
"description": "Email addresses to set on the contact.",
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "The email address."
},
"field": {
"description": "Which email slot, e.g. EMAIL1 / EMAIL2 / EMAIL3.",
"type": "string"
}
},
"required": [
"email"
]
}
},
"phone_numbers": {
"description": "Phone numbers to set on the contact.",
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "string",
"description": "The phone number."
},
"field": {
"description": "Which phone slot, e.g. PHONE1 / PHONE2.",
"type": "string"
}
},
"required": [
"number"
]
}
},
"company_id": {
"description": "Id of the company to associate the contact with.",
"type": "string"
},
"extra": {
"description": "Any other Keap fields to merge into the request body verbatim.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴keap_create_task(title, description, due_date, contact_id, extra)
CREATE a task (follow-up / to-do), optionally linked to a contact. Keap: POST /tasks.
Input Schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "The task title."
},
"description": {
"description": "A longer description / notes for the task.",
"type": "string"
},
"due_date": {
"description": "Due date/time, ISO 8601 (e.g. 2026-08-01T17:00:00Z).",
"type": "string"
},
"contact_id": {
"description": "Id of a contact to link the task to.",
"type": "string"
},
"extra": {
"description": "Any other Keap fields to merge into the request body verbatim.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"title"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴keap_apply_tag(tag_id, contact_ids)
APPLY a tag to one or more contacts (segments them / can trigger automation). Keap: POST /tags/{tag_id}/contacts:applyTags.
Input Schema
{
"type": "object",
"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."
}
},
"required": [
"tag_id",
"contact_ids"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence