Skip to content

OpenPhone MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi

Send and read OpenPhone messages, calls, contacts and phone numbers.

Deletes · 2

16 tools: 2 can delete or cancel things and 14 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http openphone https://openphone.usefulapi.io/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

16 tools

Deletes or cancels 2Claude Code: deny
  • openphone_create_contactCreate a new contact in the workspace.No findings

    Why it is in this group

    • The name "openphone_create_contact" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a new contact in the workspace. WRITE ACTION — this adds a persistent contact record. Emails and phoneNumbers are passed as simple string arrays and stored under default field labels. OpenPhone REST: POST /contacts.

    Annotations the server declares

    • title: Create a contact
    • destructiveHint: true
  • openphone_send_messageSend an SMS/text message from one of your OpenPhone numbers to up to 10 recipients.No findings

    Why it is in this group

    • The name "openphone_send_message" says "send": a word for sending, and what is sent cannot be taken back.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Send an SMS/text message from one of your OpenPhone numbers to up to 10 recipients. WRITE ACTION — this actually sends a real text message (which may incur carrier cost and requires approved A2P 10DLC registration). OpenPhone REST: POST /messages.

    Annotations the server declares

    • title: Send a text message
    • destructiveHint: true
Only reads 14Claude Code: allow
  • openphone_get_callGet a single call by its id (starts with 'AC') — direction, status, duration, participants and timestamps.No findings

    Why it is in this group

    • The name "openphone_get_call" says "get": a word for reading.
    Description, as the server wrote it
    Get a single call by its id (starts with 'AC') — direction, status, duration, participants and timestamps. OpenPhone REST: GET /calls/{id}.

    Annotations the server declares

    • title: Get a call
    • readOnlyHint: true
  • openphone_get_call_recordingsGet the recordings for a call by its id — each with a URL, duration, start time and status.No findings

    Why it is in this group

    • The name "openphone_get_call_recordings" says "get": a word for reading.
    Description, as the server wrote it
    Get the recordings for a call by its id — each with a URL, duration, start time and status. OpenPhone REST: GET /call-recordings/{callId}.

    Annotations the server declares

    • title: Get call recordings
    • readOnlyHint: true
  • openphone_get_call_summaryGet the AI-generated summary and next steps for a call by its id.No findings

    Why it is in this group

    • The name "openphone_get_call_summary" says "get": a word for reading.
    Description, as the server wrote it
    Get the AI-generated summary and next steps for a call by its id. Availability depends on your plan and whether the call was summarized. OpenPhone REST: GET /call-summaries/{callId}.

    Annotations the server declares

    • title: Get a call summary
    • readOnlyHint: true
  • openphone_get_call_transcriptGet the transcription for a call by its id — dialogue segments with speaker, text and timestamps, plus overall status and duration.No findings

    Why it is in this group

    • The name "openphone_get_call_transcript" says "get": a word for reading.
    Description, as the server wrote it
    Get the transcription for a call by its id — dialogue segments with speaker, text and timestamps, plus overall status and duration. OpenPhone REST: GET /call-transcripts/{id}.

    Annotations the server declares

    • title: Get a call transcript
    • readOnlyHint: true
  • openphone_get_contactGet a single contact by its id, including default fields (name, company, role, emails, phone numbers) and custom fields.No findings

    Why it is in this group

    • The name "openphone_get_contact" says "get": a word for reading.
    Description, as the server wrote it
    Get a single contact by its id, including default fields (name, company, role, emails, phone numbers) and custom fields. OpenPhone REST: GET /contacts/{id}.

    Annotations the server declares

    • title: Get a contact
    • readOnlyHint: true
  • openphone_get_contact_custom_fieldsList the workspace's contact custom-field definitions (name, key, type).No findings

    Why it is in this group

    • The name "openphone_get_contact_custom_fields" says "get": a word for reading.
    Description, as the server wrote it
    List the workspace's contact custom-field definitions (name, key, type). Use the returned keys when creating contacts with custom fields. OpenPhone REST: GET /contact-custom-fields.

    Annotations the server declares

    • title: Get contact custom fields
    • readOnlyHint: true
  • openphone_get_messageGet a single message by its id (starts with 'AC').No findings

    Why it is in this group

    • The name "openphone_get_message" says "get": a word for reading.
    Description, as the server wrote it
    Get a single message by its id (starts with 'AC'). OpenPhone REST: GET /messages/{id}.

    Annotations the server declares

    • title: Get a message
    • readOnlyHint: true
  • openphone_list_callsList calls between one of your OpenPhone numbers and a participant, newest first, optionally filtered by user and created date range.No findings

    Why it is in this group

    • The name "openphone_list_calls" says "list": a word for reading.
    Description, as the server wrote it
    List calls between one of your OpenPhone numbers and a participant, newest first, optionally filtered by user and created date range. Returns direction, status, duration and timestamps. OpenPhone REST: GET /calls.

    Annotations the server declares

    • title: List calls
    • readOnlyHint: true
  • openphone_list_contactsList contacts in the workspace, optionally filtered by external ids or sources.No findings

    Why it is in this group

    • The name "openphone_list_contacts" says "list": a word for reading.
    Description, as the server wrote it
    List contacts in the workspace, optionally filtered by external ids or sources. Returns each contact's default fields (name, company, emails, phone numbers) and custom fields. OpenPhone REST: GET /contacts.

    Annotations the server declares

    • title: List contacts
    • readOnlyHint: true
  • openphone_list_conversationsList conversations (threads), most-recent activity first, optionally filtered by phone number(s), user, and created/updated date ranges.No findings

    Why it is in this group

    • The name "openphone_list_conversations" says "list": a word for reading.
    Description, as the server wrote it
    List conversations (threads), most-recent activity first, optionally filtered by phone number(s), user, and created/updated date ranges. Each conversation has participants, assignee, and last-activity metadata. OpenPhone REST: GET /conversations.

    Annotations the server declares

    • title: List conversations
    • readOnlyHint: true
  • openphone_list_messagesList messages in a conversation between one of your OpenPhone numbers and one or more participants.No findings

    Why it is in this group

    • The name "openphone_list_messages" says "list": a word for reading.
    Description, as the server wrote it
    List messages in a conversation between one of your OpenPhone numbers and one or more participants. Returns text, direction, status and timestamps. OpenPhone REST: GET /messages.

    Annotations the server declares

    • title: List messages
    • readOnlyHint: true
  • openphone_list_phone_numbersList the OpenPhone numbers in the workspace (id, number, name, formatted number, assigned users, restrictions).No findings

    Why it is in this group

    • The name "openphone_list_phone_numbers" says "list": a word for reading.
    Description, as the server wrote it
    List the OpenPhone numbers in the workspace (id, number, name, formatted number, assigned users, restrictions). Usually the first call — most other tools need a phoneNumberId. OpenPhone REST: GET /phone-numbers.

    Annotations the server declares

    • title: List phone numbers
    • readOnlyHint: true
  • openphone_list_usersList workspace users (id, email, name, role).No findings

    Why it is in this group

    • The name "openphone_list_users" says "list": a word for reading.
    Description, as the server wrote it
    List workspace users (id, email, name, role). Use to find a userId for scoping other calls. OpenPhone REST: GET /users.

    Annotations the server declares

    • title: List users
    • readOnlyHint: true
  • openphone_list_webhooksList all webhooks configured in the workspace (id, url, events, status).No findings

    Why it is in this group

    • The name "openphone_list_webhooks" says "list": a word for reading.
    Description, as the server wrote it
    List all webhooks configured in the workspace (id, url, events, status). Read-only inventory — this tool does not create or delete webhooks. OpenPhone REST: GET /webhooks.

    Annotations the server declares

    • title: List webhooks
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.16.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http openphone https://openphone.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__openphone__openphone_list_phone_numbers",
      "mcp__openphone__openphone_list_users",
      "mcp__openphone__openphone_list_contacts",
      "mcp__openphone__openphone_get_contact",
      "mcp__openphone__openphone_get_contact_custom_fields",
      "mcp__openphone__openphone_list_conversations",
      "mcp__openphone__openphone_list_messages",
      "mcp__openphone__openphone_get_message",
      "mcp__openphone__openphone_list_calls",
      "mcp__openphone__openphone_get_call",
      "mcp__openphone__openphone_get_call_summary",
      "mcp__openphone__openphone_get_call_transcript",
      "mcp__openphone__openphone_get_call_recordings",
      "mcp__openphone__openphone_list_webhooks"
    ],
    "ask": [],
    "deny": [
      "mcp__openphone__openphone_send_message",
      "mcp__openphone__openphone_create_contact"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as openphone. Review it before you use it.