Skip to content

CodaPhone

by codaphone.app · remote · no sign-in to list tools · v1.0.0 · published by app.codaphone

Business texting for AI agents: send texts, read threads, manage contacts and run campaigns.

Final · 1Changes · 5

14 tools: 1 do something that can't be undone, 5 change things and 8 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 codaphone https://mcp.codaphone.app --header 'Authorization: <your-authorization>'

Tools

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

14 tools

Can't be undone 1Claude Code: ask
  • send_messageSend an SMS from the account's number.No findings

    Why it is in this group

    • The name "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.
    Description, as the server wrote it
    Send an SMS from the account's number. Provide the message 'body', and either 'to' (a recipient phone number, with optional 'name' to save the contact) or an existing 'thread_id' to reply within a conversation. Opted-out contacts are blocked and free-send/plan limits apply automatically. Requires the 'send' scope.
Changes things 5Claude Code: ask
  • add_contactsAdd a contact to the account.No findings

    Why it is in this group

    • The name "add_contacts" says "add": a word for a change.
    Description, as the server wrote it
    Add a contact to the account. Provide the phone number (msisdn) and optionally a name, a list_id to file it under, and an opt_in_source note. Adds one contact per call. Requires the 'contacts' scope.
  • create_campaignCreate a new bulk-messaging campaign with a name and an optional base message.No findings

    Why it is in this group

    • The name "create_campaign" says "create": a word for a change.
    Description, as the server wrote it
    Create a new bulk-messaging campaign with a name and an optional base message. After creating, use run_campaign to generate variations, set the audience, schedule, and launch it. Requires the 'campaigns' scope.
  • mark_thread_readMark a conversation thread as read (clears its unread count) and return the account's new total inbox unread count.No findings

    Why it is in this group

    • The name "mark_thread_read" says "mark": a word for a change.
    Description, as the server wrote it
    Mark a conversation thread as read (clears its unread count) and return the account's new total inbox unread count. Requires the 'read' scope.
  • provision_numberProvision (set up) a phone number for the account from a candidate returned by search_numbers.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Provision (set up) a phone number for the account from a candidate returned by search_numbers. Provide the exact msisdn in +1XXXXXXXXXX form and the number kind; optional label and business registration details may be included. An account can hold one active number. Requires the 'numbers' scope.
  • run_campaignAdvance a campaign through its lifecycle.No findings

    Why it is in this group

    • The name "run_campaign" says "run": a word for a change.
    Description, as the server wrote it
    Advance a campaign through its lifecycle. Provide the campaign_id and an action: - generate: create message variations (optional base_message, count) - variations: save edited variations (variations: [{body, active}]) - audience: set the recipient list (list_id) - schedule: set send time/pacing (schedule_at, pace_seconds, daily_ceiling) - launch: start sending (or start at the scheduled time) - pause / resume / cancel: control a running campaign Sends honor opt-outs, sending hours, credits, and plan caps automatically. Requires the 'campaigns' scope.
Only reads 8Claude Code: allow
  • get_accountGet the current CodaPhone account: its name and mode (live/test), the active number (if any), the current plan and its monthly/daily send caps, usage so far, and remaining automati…No findings

    Why it is in this group

    • The name "get_account" says "get": a word for reading.
    Description, as the server wrote it
    Get the current CodaPhone account: its name and mode (live/test), the active number (if any), the current plan and its monthly/daily send caps, usage so far, and remaining automation credits. Requires the 'read' scope.
  • get_campaignGet one campaign by id, including its base message, audience, schedule, pacing, and send/failed/skipped counts.No findings

    Why it is in this group

    • The name "get_campaign" says "get": a word for reading.
    Description, as the server wrote it
    Get one campaign by id, including its base message, audience, schedule, pacing, and send/failed/skipped counts. Requires the 'read' scope.
  • get_message_statusGet one message by id, including its delivery status, direction, body, segment count, and timestamp.No findings

    Why it is in this group

    • The name "get_message_status" says "get": a word for reading.
    Description, as the server wrote it
    Get one message by id, including its delivery status, direction, body, segment count, and timestamp. Requires the 'read' scope.
  • get_threadGet one conversation thread by id together with its messages.No findings

    Why it is in this group

    • The name "get_thread" says "get": a word for reading.
    Description, as the server wrote it
    Get one conversation thread by id together with its messages. Requires the 'read' scope.
  • list_campaignsList the account's bulk-messaging campaigns with their status and progress counts, plus the remaining automation credit balance.No findings

    Why it is in this group

    • The name "list_campaigns" says "list": a word for reading.
    Description, as the server wrote it
    List the account's bulk-messaging campaigns with their status and progress counts, plus the remaining automation credit balance. Requires the 'read' scope.
  • list_contactsList the account's contacts with opt-in status and timezone.No findings

    Why it is in this group

    • The name "list_contacts" says "list": a word for reading.
    Description, as the server wrote it
    List the account's contacts with opt-in status and timezone. Optionally filter by a search term or a list id, choose a sort, and paginate with limit/offset. Requires the 'read' scope.
  • list_threadsList the account's conversation threads (the inbox), most recent first, with unread counts and last-message previews.No findings

    Why it is in this group

    • The name "list_threads" says "list": a word for reading.
    Description, as the server wrote it
    List the account's conversation threads (the inbox), most recent first, with unread counts and last-message previews. Supports limit/offset pagination. Requires the 'read' scope.
  • search_numbersSearch available phone numbers to provision.No findings

    Why it is in this group

    • The name "search_numbers" says "search": a word for reading.
    Description, as the server wrote it
    Search available phone numbers to provision. Optionally filter by country, number kind (local or tollfree), and a 3-digit area code. Returns candidate numbers with a formatted display, city/region, and monthly price. Does not buy anything. Requires the 'numbers' scope.

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.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http codaphone https://mcp.codaphone.app --header 'Authorization: <your-authorization>'

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__codaphone__get_account",
      "mcp__codaphone__search_numbers",
      "mcp__codaphone__get_message_status",
      "mcp__codaphone__list_threads",
      "mcp__codaphone__get_thread",
      "mcp__codaphone__list_contacts",
      "mcp__codaphone__list_campaigns",
      "mcp__codaphone__get_campaign"
    ],
    "ask": [
      "mcp__codaphone__provision_number",
      "mcp__codaphone__send_message",
      "mcp__codaphone__mark_thread_read",
      "mcp__codaphone__add_contacts",
      "mcp__codaphone__create_campaign",
      "mcp__codaphone__run_campaign"
    ],
    "deny": []
  }
}

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 codaphone. Review it before you use it.