io.usefulapi/retainful · v1.0.0 · sales-and-crm
Retainful MCP by usefulapi is healthy: it completed an MCP handshake in 795 ms and exposes 7 tools.
List contacts and lists; create contacts, add them to lists and record events in Retainful.
Endpoint: https://retainful.usefulapi.io/mcp (streamable-http)
Repository · Website · JSON · Add to my inventory
| Users (last 30 days) | 0 |
| Handshake | Healthy |
| Auth needed | None |
| Tool count | 7 |
| Latency | 795 ms |
| Last checked (UTC) | 2026-11-02T20:10:28.578Z |
| Checked (UTC) | Status | Latency | Error |
|---|---|---|---|
| 2026-11-02T20:10:28.578Z | Healthy | 795 |
retainful_list_contacts | List contacts (profiles) in the Retainful organization, one page at a time, with consent status and source. Retainful API: GET /customer. |
retainful_get_contact | Get one contact (profile) by its Retainful id (contactUUID), with its attributes. Retainful API: GET /customer/{id}. |
retainful_list_lists | List the lists and segments in the organization with their ids. Use the id as list_id in retainful_add_contact_to_list. Retainful API: GET /contact-groups. |
retainful_get_list | Get one list or segment by its id. Retainful API: GET /contact-groups/{id}. |
retainful_upsert_contact | WRITE: create a contact, or update it when the email or phone already exists. Does not add anyone to a list. email_opt_in is required: it sets marketing consent, so send SUBSCRIBED only with real consent. Needs email or phone. Retainful API: POST /customer/create. |
retainful_add_contact_to_list | WRITE: create or update a contact by email and add them to a list in one call. A list can start an automation. email_opt_in is required: an existing contact is set to SUBSCRIBED when it is omitted here. Retainful API: POST /contact-groups/{listId}/contacts. |
retainful_track_event | WRITE: record one event on a contact's timeline. Automations triggered by the event can email the contact. Reuse the same unique_identifier only for a retry of the same real occurrence (a repeat does not trigger automations again); use a new one for each new occurrence. Event data must be flat: stri |