Skip to content
View as Markdown

MCP server & skill

Working with an AI assistant? Connect it here first — this is the fastest way to send a message, and there is no API key to paste.

On this page

The Project Blue MCP server gives Claude Desktop, Claude Code, Cursor, and any other MCP-compatible client the ability to send iMessage and SMS, place FaceTime Audio calls, manage contacts, run Workflows, and read message and call history — directly from the editor or chat surface. Authentication is OAuth 2.1 in the browser.

Writing code against the REST API instead? Start with the Quickstart.

Server URL

https://api.tryprojectblue.com/api/mcp

Two ways to connect

Add the server directly. This is the standard path and works in any MCP client — paste the URL, or run the one-liner in the rail. Nothing else is installed.

Or install the plugin (Claude Code only). It registers the same server and adds a Project Blue skill carrying the workflow rules the tool descriptions cannot: the trial verification sequence, when a retry is being deduplicated rather than failing, the FaceTime call lifecycle, and which contact endpoint merges versus replaces.

Neither path supersedes the other
Both connect to the same server with the same tools and the same OAuth flow. claude plugin install is a convenience, not a requirement — if you already added the server with claude mcp add, it keeps working and there is nothing to migrate. Installing both would simply register the server twice, so pick one.

Set up your client

Pick your client in the rail and run the snippet. Every one of them ends the same way: your client opens a browser to app.tryprojectblue.com, you approve the connection, and it is done. OAuth 2.1 with dynamic client registration — no key to paste, no tokens to rotate.

Client
Where it goes
Claude Code
claude mcp add, or install the plugin below
Codex
codex mcp add then codex mcp login, or ~/.codex/config.toml
Cursor
~/.cursor/mcp.json or .cursor/mcp.json
VS Code
.vscode/mcp.json
Claude Desktop
Settings → Connectors → Add custom connector, then paste the server URL

Any other client that speaks remote MCP over streamable HTTP works with the server URL alone. For one that only accepts stdio servers, use mcp-remote as an adapter — both are in the rail.

Available tools

Tool
Type
Description
send_message
write
Send an iMessage or SMS to a single recipient. Supports media, audio, AI voice memo, an optional lineId override, and an optional iMessage-only send effect.
send_typing_indicator
write
Show the iMessage typing indicator. iMessage-only; requires an existing conversation. Pattern: typing → brief delay → send_message. Fire-and-forget — do not retry on ERROR.
send_reaction
write
React to a message with an iMessage tapback (love, like, dislike, laugh, emphasize, question). Pass messageHandle from list_messages. remove:true retracts the same type.
send_group_message
write
Send an iMessage or SMS to a group of 2–32 recipients. Queued (status always queued, service always null). Same numbers reuse the thread. No CRM sync. Unavailable on trial accounts — see Trial Accounts.
lookup_imessage_availability
read
Check whether a phone number supports iMessage.
get_lines
read
List the user's Project Blue sending lines (lineId, devicePhoneNumber, customName).
request_line
write
Ask the Project Blue team for 1–50 new lines in a US/Canada area code. Lines are provisioned by the team, not returned immediately.
list_messages
read
List recent inbound/outbound messages with filters (service, direction, line, date ranges).
get_message
read
Fetch a single message by its opaque message_handle.
get_call_logs
read
List the user's outbound dialer call logs with filters for line and answered_at range. Includes call status, disposition, transcript, and recording URL when available.
start_facetime_call
write
Place a FaceTime Audio call from a FaceTime-enabled line. Returns call_uuid plus Agora WebRTC credentials the caller must use to join the call audio. Requires FaceTime Audio on the account.
get_facetime_call_status
read
Poll a FaceTime call's live status (initiated, ringing, answered, ended, declined, no_answer, failed) by call_uuid.
end_facetime_call
write
Hang up an in-progress FaceTime call by call_uuid.
create_external_contact
write
Create (or upsert by phone number) an external contact with name, email, and custom JSON metadata. For accounts without a connected CRM.
get_external_contacts
read
List the user's external contacts (newest first) with pagination, or look one up by phone number.
update_external_contact
write
Update an external contact's name, email, note, or customFields by contact id. customFields is replaced wholesale, not merged.
list_flows
read
List the user's published Workflows (id and name). Use the id as flowId with enroll_contact_in_flow.
enroll_contact_in_flow
write
Enroll a contact in a published Workflow. Starts the run immediately and may send real messages. Returns runId and the pinned pb_line_id.
cancel_flow_runs
write
Cancel all active Workflow runs for a contact. Safe when the contact has no active runs.
AI tools