{
  "schemaVersion": "2025-06-18",
  "protocolVersion": "2025-06-18",
  "name": "bluereacher",
  "displayName": "Blue Reacher",
  "description": "Send and receive iMessage, RCS and SMS from your CRM. B2B iMessage for sales teams, with no A2P registration required.",
  "version": "1.0.0",
  "vendor": {
    "name": "Blue Reacher",
    "url": "https://bluereacher.com",
    "contact": "https://bluereacher.com/book"
  },
  "documentation": "https://docs.bluereacher.com",
  "openapi": "https://bluereacher.com/openapi.json",
  "transport": {
    "type": "streamable-http",
    "endpoint": "https://api.bluereacher.com/v1/mcp"
  },
  "authentication": {
    "type": "http",
    "scheme": "bearer",
    "description": "Per-customer API key generated in the Blue Reacher dashboard. Live keys are prefixed brk_live_, test keys brk_test_. Sent as: Authorization: Bearer brk_live_your_key",
    "documentation": "https://docs.bluereacher.com/authentication"
  },
  "capabilities": {
    "tools": {
      "listChanged": false
    },
    "resources": {
      "subscribe": false,
      "listChanged": false
    },
    "prompts": {
      "listChanged": false
    }
  },
  "tools": [
    {
      "name": "send_message",
      "description": "Sends a message over iMessage with automatic SMS fallback. Drip (default) inserts into the paced pipeline and delivers inside the org-local send window; instant dispatches immediately from an online line. Targets one recipient, an existing group thread, or 2 to 25 numbers as a new group iMessage. Attach up to 10 media URLs, and add native screen or bubble effects on instant sends."
    },
    {
      "name": "send_voice_memo",
      "description": "Fetches your audio by URL (up to 25 MB, mp3/m4a/wav/aac), converts it to Apple's native voice-bubble format when possible, and falls back to a media attachment otherwise."
    },
    {
      "name": "check_message_status",
      "description": "Returns the current delivery state of one message: pending, sent or failed, plus further lifecycle states as they occur. Covers paced text sends, voice memos and direct sends."
    },
    {
      "name": "get_conversation",
      "description": "Chronological message history with per-message delivery channel (iMessage or SMS), tapback reactions and AI attribution. Cursor-paginated."
    },
    {
      "name": "list_groups",
      "description": "Every group iMessage thread in the workspace: id, display name, participants, last activity and the owning line. Use a returned id to send into the thread or read its history."
    },
    {
      "name": "list_devices",
      "description": "Every line in the workspace with online state, today's cold-outreach usage against its effective daily cap (warm-up aware), and queue depth. Use it to pick a line or check available capacity before a batch."
    },
    {
      "name": "send_reaction",
      "description": "Queues one of the six classic tapbacks on a message; anything else is rejected rather than silently dropped."
    },
    {
      "name": "remove_reaction",
      "description": "Cancels a still-queued tapback before delivery, or genuinely removes an already-delivered one from the recipient's device."
    },
    {
      "name": "send_typing_indicator",
      "description": "Lights the typing indicator on the recipient's device from your sending line, with a configurable window and a keepalive for longer holds."
    },
    {
      "name": "mark_read",
      "description": "Clears the connected CRM conversation's unread badge for a contact, and can queue a native mark-thread-read on the line itself."
    },
    {
      "name": "list_contacts",
      "description": "Filter by exact phone, email, tag, created-after, or a free-text search across name and phone."
    },
    {
      "name": "create_contact",
      "description": "Creates the contact, or updates the existing one with the same phone number. The response says which happened."
    },
    {
      "name": "update_contact",
      "description": "Partial update; custom fields merge with the existing map, and setting opted_out suppresses future platform sends to the contact."
    },
    {
      "name": "get_opt_out_status",
      "description": "Exact E.164 match against the workspace's contacts, including whether the number is known at all."
    },
    {
      "name": "opt_out",
      "description": "Opting out runs the same enforcement path as an inbound STOP reply: the contact is suppressed everywhere and the contact.opted_out webhook fires. Re-subscribing requires explicit confirmation and is deliberately harder than opting out."
    },
    {
      "name": "get_bot_status",
      "description": "Returns the per-contact setting alongside an effective answer computed from the reply engine's own gate chain, distinguishing switched-on-and-replying from switched-on-but-nothing-will-answer."
    },
    {
      "name": "set_bot_status",
      "description": "Mute the assistant for a contact, snooze it while a human takes over, return it to its own schedule, or set it to always reply."
    },
    {
      "name": "lookup_imessage",
      "description": "Batch lookup of up to 100 numbers. Known contacts answer instantly from observed delivery state; unknown numbers can queue a live probe."
    },
    {
      "name": "list_calling_lines",
      "description": "Lists the calling lines available to the workspace with coarse readiness: ready, offline, busy, or not ready."
    },
    {
      "name": "prepare_call",
      "description": "Prepares a FaceTime call and returns a short-lived confirmation URL. Never dials autonomously: a signed-in human opens the URL and presses to start the call."
    },
    {
      "name": "get_call_status",
      "description": "Returns the lifecycle of a call prepared by this key, with stable states and failure codes."
    },
    {
      "name": "end_call",
      "description": "Cancels a prepared call, or requests that its linked active call end. Safe to repeat."
    }
  ]
}