myPhoner MCP by usefulapi
Work myPhoner calling lists and leads: search, log call outcomes, add, update and assign leads.
Should I use this
Quality & Safety
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": {
"myphoner": {
"url": "https://myphoner.usefulapi.io/mcp"
}
}
}Remote endpoints
https://myphoner.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (18)
🟢myphoner_list_lists(locked_on_defaults)
All calling lists (campaigns) in the account: id, name, creation date, number of leads and whether the list guarantees the default fields. Start here to find a list id. GET /lists.
Input Schema
{
"type": "object",
"properties": {
"locked_on_defaults": {
"description": "true = only lists that guarantee the default fields.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢myphoner_get_list(list_id)
One calling list with its lead count and its call back / winner / loser / archive / skip categories. GET /lists/{id}.
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "List id from myphoner_list_lists."
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢myphoner_list_columns(list_id)
The fields (columns) of a list. The `key` of each is the name to use when creating, updating or finding leads. GET /lists/{id}/columns.
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "List id."
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢myphoner_get_list_stats(list_id)
Lead counts of a list by state (new, call back, won, lost, archived) and by category within each state. Use it for campaign progress and conversion questions. GET /lists/{id}/stats.
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "List id."
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡myphoner_create_list(name, columns, description, call_back_categories, winner_categories, ...)
Create a new, empty calling list with its fields. Creates data in the account (nothing is sent to anyone). Field kinds: none (text), phone, email, url, boolean, integer, date, text (multi-line), options, address. POST /lists.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Name of the list."
},
"columns": {
"description": "Fields in order. Omit to let myPhoner use its defaults.",
"maxItems": 60,
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Field label, e.g. Phone."
},
"kind": {
"type": "string",
"enum": [
"none",
"phone",
"email",
"url",
"boolean",
"integer",
"date",
"text",
"options",
"address"
],
"description": "Field kind; none = single-line text."
},
"visible": {
"type": "boolean"
}
},
"required": [
"label",
"kind"
]
}
},
"description": {
"description": "Call script shown to agents while working the list.",
"type": "string",
"maxLength": 10000
},
"call_back_categories": {
"description": "Comma-separated sub-categories for call backs.",
"type": "string",
"maxLength": 1000
},
"winner_categories": {
"description": "Comma-separated sub-categories for winners.",
"type": "string",
"maxLength": 1000
},
"loser_categories": {
"description": "Comma-separated sub-categories for losers.",
"type": "string",
"maxLength": 1000
},
"archive_categories": {
"description": "Comma-separated sub-categories for archived leads.",
"type": "string",
"maxLength": 1000
},
"skip_categories": {
"description": "Comma-separated sub-categories for skips.",
"type": "string",
"maxLength": 1000
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢myphoner_list_leads(list_id, order, page, per_page)
Leads of one list, newest first by creation date (or most recently updated first with order=last_updated_first). Each lead has its state (new, call_back, won, lost, archived), category, scheduled call back, who claimed it and its lead_data fields. GET /lists/{id}/leads.
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "List id."
},
"order": {
"description": "last_updated_first = by last change, newest first; default newest created first.",
"type": "string",
"enum": [
"created_first",
"last_updated_first"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Leads per page, 1-100 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢myphoner_get_lead(lead_id)
One lead with its state, category, claim, duplicates and all lead_data fields. GET /leads/{id}.
Input Schema
{
"type": "object",
"properties": {
"lead_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Lead id."
}
},
"required": [
"lead_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢myphoner_find_leads(list_id, fields, match_all)
Exact match on one or more fields of a list, for example a phone number or an email address (to check whether a lead already exists). All fields must match unless match_all is false. GET /lists/{id}/leads/find.
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "List id."
},
"fields": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 1000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
},
"description": "Column key → non-empty value to match exactly, e.g. {\"mobile_phone\":\"15324083898652\"}. Keys from myphoner_list_columns."
},
"match_all": {
"description": "true (default) = every field must match; false = any one is enough.",
"type": "boolean"
}
},
"required": [
"list_id",
"fields"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢myphoner_search_leads(query, list_ids, page, per_page)
Free-text search across lead data and activity logs (comments, events), like the search box in myPhoner; optionally limited to some lists. Returns the total hit count and one page of leads. GET /leads/search.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "The search text, e.g. a company name, city or phone number."
},
"list_ids": {
"description": "Limit the search to these list ids.",
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Leads per page, 1-100 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"query"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡myphoner_create_lead(list_id, fields)
Add a new lead to a list. Keys of `fields` are the list's column keys (myphoner_list_columns). Creates data only; nothing is sent to the lead. Duplicate detection runs in the background a few minutes later (check detected_duplicates on the lead afterwards). POST /lists/{id}/leads.
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "List the lead is added to."
},
"fields": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 5000
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"description": "Lead data keyed by the list's column keys (see myphoner_list_columns), e.g. {\"first_name\":\"Ada\",\"mobile_phone\":\"+4512345678\"}."
}
},
"required": [
"list_id",
"fields"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴myphoner_update_lead(lead_id, fields)
Change field values of an existing lead (only the fields you pass change). Keys of `fields` are the list's column keys (myphoner_list_columns). Overwrites the old values; use null to clear one. PATCH /leads/{id}.
Input Schema
{
"type": "object",
"properties": {
"lead_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Lead id."
},
"fields": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 5000
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"description": "Lead data keyed by the list's column keys (see myphoner_list_columns), e.g. {\"first_name\":\"Ada\",\"mobile_phone\":\"+4512345678\"}."
}
},
"required": [
"lead_id",
"fields"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴myphoner_mark_lead_winner(lead_id, call_back_in, scheduled_for, comment, category)
Mark a lead as a winner (a won deal). The lead moves to that state and an event is logged on it; nothing is sent to the lead. Optionally add a comment and an existing winner category. POST /leads/{id}/winner.
Input Schema
{
"type": "object",
"properties": {
"lead_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Lead id."
},
"call_back_in": {
"description": "Minutes until a scheduled call back (max one year).",
"type": "integer",
"minimum": 0,
"maximum": 525600
},
"scheduled_for": {
"description": "When the call back is due: ISO 8601 date-time with a timezone, e.g. 2026-11-02T09:30:00Z. Takes precedence over call_back_in.",
"type": "string"
},
"comment": {
"description": "Text added as a comment on the lead's event.",
"type": "string",
"maxLength": 5000
},
"category": {
"description": "A category of the list; must match an existing one exactly, including case.",
"type": "string",
"maxLength": 200
}
},
"required": [
"lead_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴myphoner_mark_lead_loser(lead_id, call_back_in, scheduled_for, comment, category)
Mark a lead as a loser (not interested / lost). The lead moves to that state and an event is logged on it; nothing is sent to the lead. Optionally add a comment and an existing loser category. POST /leads/{id}/loser.
Input Schema
{
"type": "object",
"properties": {
"lead_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Lead id."
},
"call_back_in": {
"description": "Minutes until a scheduled call back (max one year).",
"type": "integer",
"minimum": 0,
"maximum": 525600
},
"scheduled_for": {
"description": "When the call back is due: ISO 8601 date-time with a timezone, e.g. 2026-11-02T09:30:00Z. Takes precedence over call_back_in.",
"type": "string"
},
"comment": {
"description": "Text added as a comment on the lead's event.",
"type": "string",
"maxLength": 5000
},
"category": {
"description": "A category of the list; must match an existing one exactly, including case.",
"type": "string",
"maxLength": 200
}
},
"required": [
"lead_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴myphoner_mark_lead_call_back(lead_id, call_back_in, scheduled_for, comment, category)
Schedule a lead for a call back. The lead moves to that state and an event is logged on it; nothing is sent to the lead. Set when with call_back_in (minutes) or scheduled_for; optionally a comment and an existing call back category. POST /leads/{id}/call_back.
Input Schema
{
"type": "object",
"properties": {
"lead_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Lead id."
},
"call_back_in": {
"description": "Minutes until a scheduled call back (max one year).",
"type": "integer",
"minimum": 0,
"maximum": 525600
},
"scheduled_for": {
"description": "When the call back is due: ISO 8601 date-time with a timezone, e.g. 2026-11-02T09:30:00Z. Takes precedence over call_back_in.",
"type": "string"
},
"comment": {
"description": "Text added as a comment on the lead's event.",
"type": "string",
"maxLength": 5000
},
"category": {
"description": "A category of the list; must match an existing one exactly, including case.",
"type": "string",
"maxLength": 200
}
},
"required": [
"lead_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴myphoner_archive_lead(lead_id, call_back_in, scheduled_for, comment, category)
Archive a lead (it leaves the calling queue). The lead moves to that state and an event is logged on it; nothing is sent to the lead. Optionally add a comment and an existing archive category. POST /leads/{id}/archive.
Input Schema
{
"type": "object",
"properties": {
"lead_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Lead id."
},
"call_back_in": {
"description": "Minutes until a scheduled call back (max one year).",
"type": "integer",
"minimum": 0,
"maximum": 525600
},
"scheduled_for": {
"description": "When the call back is due: ISO 8601 date-time with a timezone, e.g. 2026-11-02T09:30:00Z. Takes precedence over call_back_in.",
"type": "string"
},
"comment": {
"description": "Text added as a comment on the lead's event.",
"type": "string",
"maxLength": 5000
},
"category": {
"description": "A category of the list; must match an existing one exactly, including case.",
"type": "string",
"maxLength": 200
}
},
"required": [
"lead_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴myphoner_delegate_lead(lead_id, delegate_to)
Give the claim on a lead to a user (the lead then shows up in that agent's queue), identified by user id or email. PATCH /leads/{id}/delegate.
Input Schema
{
"type": "object",
"properties": {
"lead_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Lead id."
},
"delegate_to": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "string",
"minLength": 3,
"maxLength": 254
}
],
"description": "User id or the user's email address."
}
},
"required": [
"lead_id",
"delegate_to"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴myphoner_move_lead(lead_id, to_list_id, release_claim)
Move a lead to another list. The destination may be the lead's current list, which with release_claim=true just releases a claimed lead. PATCH /leads/{id}/migrate.
Input Schema
{
"type": "object",
"properties": {
"lead_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Lead id."
},
"to_list_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Destination list id."
},
"release_claim": {
"description": "true = also release the lead if an agent has claimed it.",
"type": "boolean"
}
},
"required": [
"lead_id",
"to_list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢myphoner_get_call(call_id)
One call made from myPhoner: who called, the number dialed, duration (0 = unanswered), direction, disposition (normal, voicemail, no_answer, busy ...), state, the lead and list it belongs to, and recording links. GET /calls/{id}.
Input Schema
{
"type": "object",
"properties": {
"call_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Call id (the number at the end of a call's location path)."
}
},
"required": [
"call_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence