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

A
Description quality
100%
Schema completeness
99%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~4,131Tokens (tool definitions)
~1.6 KBTypical response size
Significant attention impact (3.23% of 128k context)

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-http

What it can do

Tool inventory

Tools (18)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded18 tools