Custify MCP Server
OfficialThe Custify MCP Server connects AI tools to Custify customer success data, enabling you to query, analyze, and act on accounts, contacts, health scores, tasks, and more.
Account Management
List and filter accounts using a powerful filter system (by churn status, health score, signup date, CSM, segments, etc.)
Get full details for a specific account by ID, or search by name/domain
Discover all available account/contact fields and their types for filtering
Contact Management
List all contacts associated with an account
Get full details for a specific contact by ID
Health & Usage Insights
Retrieve health scores (global and individual breakdowns) for an account
Get product usage/event data filtered by event name and date range
Access historical health score trends over time
Alerts & Segments
Fetch alerts/signals for a specific account
Determine which segments an account belongs to
Task Management
List and filter tasks (by assignee, account, status, priority, due date, tags, etc.)
Get full details for a specific task
Resolve tag names to IDs and discover assignee/account/creator IDs
Write Operations
Create notes on an account's timeline
Create and assign tasks to CSMs with priority and due dates
Trigger manually-started playbooks on specific accounts
Update custom attribute fields on accounts or contacts
Read-Only Resources
View all segment, playbook, and health score definitions (names, IDs, thresholds, types)
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Custify MCP ServerShow me all accounts with a health score below 50"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@custify/mcp-server
Connect AI tools to your Custify customer success data via the Model Context Protocol.
Query accounts, health scores, usage data, and more — or create notes, tasks, and trigger playbooks — all from within Claude, Cursor, VS Code, or any MCP-compatible AI tool.
Quick Start
Get up and running in under 2 minutes.
1. Get your API key
Go to Custify Settings > Developer > API Access and create or copy your API key.
2. Install
npx @custify/mcp-server3. Configure your AI tool
See the Configuration section below for your specific tool.
4. Try it out
Ask your AI assistant:
How many churned accounts do I have?Configuration
Add the following to your claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"custify": {
"command": "npx",
"args": ["-y", "@custify/mcp-server"],
"env": {
"CUSTIFY_API_KEY": "your-api-key-here"
}
}
}
}Restart Claude Desktop after saving.
Open Settings > MCP
Click Add new MCP server
Use the following configuration:
Name:
custifyCommand:
npx -y @custify/mcp-serverEnvironment Variables:
CUSTIFY_API_KEY=your-api-key-here
Add to your .vscode/mcp.json in your workspace root:
{
"servers": {
"custify": {
"command": "npx",
"args": ["-y", "@custify/mcp-server"],
"env": {
"CUSTIFY_API_KEY": "your-api-key-here"
}
}
}
}claude mcp add custify -- npx -y @custify/mcp-server \
--env CUSTIFY_API_KEY=your-api-key-hereChatGPT requires an HTTP-based MCP server. Deploy with Docker:
docker run -d \
-p 3000:3000 \
-e CUSTIFY_API_KEY=your-api-key-here \
ghcr.io/custifyofficial/custify-mcp:latestThen configure ChatGPT to connect to your server's URL:
https://your-server.example.com/mcpThe Custify MCP server supports two transports:
STDIO (default): Run
npx @custify/mcp-serverwith theCUSTIFY_API_KEYenvironment variable set.Streamable HTTP: Set
MCP_TRANSPORT=streamable-httpand the server will listen on port 3000 (configurable viaPORT). The MCP endpoint is/mcp.
Refer to your MCP client's documentation for how to configure an MCP server using either transport.
Available Tools
Account Tools
Tool | Type | Description |
| Read | List and filter accounts using tag IDs or Custify's advanced filter system |
| Read | Get full details for a specific account by ID |
| Read | Search accounts by name or domain |
| Read | Discover all available fields and their types for filtering |
list_accounts supports tag_ids for simple tag filtering and Custify's full filter system for advanced fields. Use list_tags with category: "company" to resolve account tag names to IDs. Use list_attributes with entity_type: "account" to discover available fields.
Tag filters use this backend format when passed manually through filters:
{
"fieldName": "tags",
"fieldType": "Tag",
"filterType": "is_any_of",
"filterValue": ["<company_tag_id>"]
}Supported tag filterType values are is_any_of, is_all_of, is_none_of, is_unknown, and any_value. For ID-based tag filters, filterValue must be a non-empty array of tag IDs.
Filter examples:
What you want | Filter object |
Churned accounts |
|
Name contains "acme" |
|
Has any listed account tag |
|
Has all listed account tags |
|
Has none of the listed account tags |
|
Health score > 50 |
|
Signed up after a date |
|
In a specific segment |
|
Has any CSM assigned |
|
Available filter types by field type:
Field Type | Filter Types |
Boolean |
|
Number |
|
String |
|
Date |
|
Dropdown |
|
Segment |
|
Tag |
|
User |
|
Currency |
|
Contact Tools
Tool | Type | Description |
| Read | List and filter contacts across all accounts using tag IDs or Custify filters |
| Read | List contacts/people linked to one account |
| Read | Get full contact details by ID |
list_contacts is the contact equivalent of list_accounts. Use tag_ids with people tags for simple tag filtering, or pass advanced Custify filters. Use list_tags with category: "people" to resolve contact tag names to IDs. Use list_attributes with entity_type: "contact" to discover available contact fields.
Contact filter examples:
What you want | Parameters |
Contacts tagged "champion" |
|
Contacts with no listed tags |
|
Email contains a domain |
|
Contacts linked to an account |
|
Health & Usage Tools
Tool | Type | Description |
| Read | Get all health scores for an account, with score names and values |
| Read | Get product usage and event data for an account |
| Read | Get health score values over time for trend analysis |
Alerts & Segments
Tool | Type | Description |
| Read | Get alerts/signals for an account |
| Read | Get which segments an account belongs to |
Task Tools
Tool | Type | Description |
| Read | Query tasks across all accounts with filters and pagination |
| Read | Get full details for a specific task by ID |
| Read | Discover assignee, account, and creator IDs (with names) currently used on tasks |
| Read | Resolve human-readable tag names to tag IDs. Use |
list_tasks uses flat, ergonomic parameters. Filters combine with AND. To resolve a tag name like "onboarding follow up" to an ID, call list_tags with category: "task". To resolve an assignee name, call list_task_filter_values (returns user IDs with names).
Filter examples:
What you want | Parameters |
My open tasks due today |
|
Overdue tasks for an account |
|
All tasks tagged "onboarding follow up" |
|
High-priority tasks due this week |
|
Tasks due in a custom date range |
|
Tasks assigned to a CSM, sorted by due date |
|
Available status values:
Status | Meaning |
| Status is open and not snoozed |
| Task completed |
| Marked as not relevant |
| Open and |
| Open and (no |
| Open and |
Available due shortcuts: past_due, today, this_week, this_month, later. For custom ranges, supply both due_after and due_before (ISO dates). The due shortcut and the date-range pair are mutually exclusive — passing only one bound of the range is ignored.
Objective Tools
Tool | Type | Description |
| Read | Get customer objectives for a specific account, using either the Custify account ID or your external |
get_account_objectives accepts account_id (Custify internal company ID) or external_account_id (your company_id). It supports pagination, sorting, and Custify filter objects for fields such as objectiveStatus, importance, risk, and dueAt.
Action Tools
Tool | Type | Description |
| Write | Add a note to an account's timeline |
| Write | Create a task assigned to a CSM |
| Write | Trigger a manually-started playbook on an account |
| Write | Update custom attribute values on an account or contact |
| Write | Add an existing tag to one or more accounts or contacts |
| Write | Remove an existing tag from one or more accounts or contacts |
Tag actions accept entity_type: "account" or entity_type: "contact", an array of Custify internal entity_ids, and a tag_id. Use list_tags or the custify://tags resource first to resolve tag names to IDs.
Available Resources
Resources provide read-only context that AI agents can use to understand your Custify workspace:
Resource | URI | Description |
Segments |
| All segment definitions with names and IDs |
Playbooks |
| All playbook definitions with names, types, and IDs |
Health Score Definitions |
| All health score configs with names, thresholds, and IDs |
Calculated Metrics |
| All calculated metric definitions for companies and people |
Lifecycles |
| All lifecycle definitions with goals and task templates |
Tags |
| All tags grouped by category |
Examples
Here are real-world examples of what you can ask your AI assistant once connected:
Querying accounts
"How many churned accounts do I have?" Uses
list_accountswith a churned filter to count accounts where churned = true.
"Show me all accounts with a health score below 30" Uses
list_attributesto find the health score field name, thenlist_accountswith a Number filter.
"Find all accounts managed by jane@company.com" Uses
list_accountswith a User filter on the CSM field.
"Which accounts signed up this quarter?" Uses
list_accountswith a Date filter:filterType: "this_quarter"onsigned_up_at.
"Show accounts tagged renewal risk" Uses
list_tagswithcategory: "company"to resolve the tag ID, thenlist_accountswithtag_ids.
Querying contacts
"Show contacts tagged champion" Uses
list_tagswithcategory: "people"to resolve the tag ID, thenlist_contactswithtag_ids.
"Find contacts with example.com email addresses" Uses
list_contactswith a String filter on
Account deep-dives
"Give me a full summary of Acme Corp" Uses
search_accountsto find Acme, thenget_account,get_health_scores,get_contacts,get_usage_data, andget_segment_membershipto build a comprehensive briefing.
"What segments is Acme Corp in?" Uses
search_accountsto find the account ID, thenget_segment_membership.
"Show me the health score trend for Acme Corp over the last month" Uses
get_health_scoresto find score IDs, thenget_usage_trendsfor historical values.
Querying tasks
"What's on my plate today?" Uses
list_taskswithassignee_id(your user ID) anddue: "today"to pull a daily task list.
"Show me all overdue tasks tagged 'onboarding follow up' assigned to Jane" Uses
list_tagswithcategory: "task"to resolve the tag name to an ID,list_task_filter_valuesto resolve Jane's user ID, thenlist_taskswithtag_ids,assignee_id, andstatus: "overdue".
"What's open for Acme Corp?" Uses
search_accountsto find the account ID, thenlist_taskswithaccount_idandstatus: "open".
Querying objectives
"What objectives are open for Acme Corp?" Uses
search_accountsto find the account ID, thenget_account_objectives.
Taking actions
"Create a follow-up task for Acme Corp: Review onboarding progress, due next Friday" Uses
search_accountsto find Acme, thencreate_taskwith title, due date, and account ID.
"Add a note to Acme Corp: Spoke with VP of Engineering about API latency concerns" Uses
search_accountsthencreate_notewith the note body.
"Run the renewal prep playbook for Acme Corp" Uses the
playbooksresource to find the playbook ID,search_accountsfor the account, thenrun_playbook.
"Tag Acme Corp as renewal risk" Uses
search_accountsto find the account ID,list_tagsorcustify://tagsto find the tag ID, thenadd_tag_to_entities.
Discovering your data model
"What fields can I filter accounts by?" Uses
list_attributesto return all available fields with their names and types.
"What segments do we have?" Reads the
custify://segmentsresource.
"What playbooks are available?" Reads the
custify://playbooksresource.
"What calculated metrics and lifecycle stages do we have?" Reads the
custify://calculated-metricsandcustify://lifecyclesresources.
"What tags can I use on accounts and contacts?" Reads the
custify://tagsresource.
Environment Variables
Variable | Required | Default | Description |
| Yes | - | Your Custify API key |
| No |
| Custom API base URL (for different clusters) |
| No |
| Transport mode: |
| No |
| HTTP server port (only used with |
Docker
Run the server as a Docker container for HTTP-based MCP clients:
docker run -d \
--name custify-mcp \
-p 3000:3000 \
-e CUSTIFY_API_KEY=your-api-key-here \
ghcr.io/custifyofficial/custify-mcp:latestThe MCP endpoint will be available at http://localhost:3000/mcp and a health check endpoint at http://localhost:3000/health.
Security
Data flow: Your AI tool communicates with the Custify MCP server, which then makes authenticated API calls to the Custify REST API. No data is stored by the MCP server itself.
API key handling: Your
CUSTIFY_API_KEYis read from environment variables and is never logged, cached, or exposed through MCP responses. When using STDIO transport, the key stays within your local process. When using HTTP transport, ensure your deployment is behind TLS.Permissions: The MCP server inherits the permissions of your API key. Use a key scoped to the minimum access level your workflows require. Read-only keys will work for all read tools; write tools require a key with write permissions.
No telemetry: The server does not collect analytics or send data to any third party.
Troubleshooting
"Error: CUSTIFY_API_KEY environment variable is required"
Make sure the CUSTIFY_API_KEY environment variable is set in your MCP client configuration. Double-check for typos and ensure there are no extra spaces.
Server not connecting in Claude Desktop
Verify the config file path is correct for your OS.
Ensure you have restarted Claude Desktop after editing the configuration.
Check that
npxis available in your system PATH.
Authentication errors (401) Your API key may be invalid or expired. Generate a new key from Custify Settings > Developer > API Access.
Permission errors (403) The endpoint may not be available for API key access. Check that your Custify account has the required permissions.
Timeout or connection errors
If using HTTP transport, verify the server is running and accessible. Check that the PORT environment variable matches your deployment configuration. For STDIO transport, ensure no firewall or proxy is blocking local process communication.
Different Custify cluster?
If your Custify instance is on a different cluster (e.g., EU), set CUSTIFY_API_URL to your cluster's API URL.
Docker container exits immediately
Check the container logs with docker logs custify-mcp. The most common cause is a missing CUSTIFY_API_KEY environment variable.
Contributing
Contributions are welcome! To get started:
git clone https://github.com/CustifyOfficial/custify-mcp.git
cd custify-mcp-server
npm install
npm run devFork the repository
Create a feature branch:
git checkout -b feature/my-featureMake your changes and add tests
Run the test suite:
npm testSubmit a pull request
Please open an issue first if you plan a significant change.
License
MIT - see LICENSE for details.
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/CustifyOfficial/custify-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server