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.
14 tools: 1 do something that can't be undone, 5 change things and 8 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone1Claude Code: ask: see these tools
- Changes things5Claude Code: ask: see these tools
- Only reads8Claude Code: allow: see these tools
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.
{
"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.