Already a Spur customer?

Log in
Changelog

Spur MCP release history

Track contract changes to tools, responses, and integration expectations.

v1.17.0

October 2026
  • Added direct_send to send one plain-text WhatsApp message to one contact through Meta Direct Send: outside the 24-hour window it goes out as a utility message on a template Meta creates or reuses for it
  • direct_send is for utility content only (replies, updates and support). Misuse gets the whole WhatsApp Business Account restricted or banned by Meta, and Spur cannot undo Meta's enforcement
  • Delivery can take a few minutes, and Meta may hold a message for quality review (held: true) or drop it (status code 135000). Don't resend just because it hasn't arrived yet
  • direct_send never falls back to a Magic Message. An error with raw.directSend.unavailable means nothing was sent, and it says why (not_enabled, blocked, rate_limited, rejected, no_prior_inbound, opted_out and more), with the WABA id, Meta's access request form, the dates and Meta's error code alongside; ambiguous or accepted errors mean the customer may already have the message, so never resend
  • message_send no longer turns a WhatsApp text outside the 24-hour window into a Magic Message silently. It now fails with an error that points to direct_send, unless options.fallback is "magic_message"
  • message_send results now carry deliveryPath: plain, direct_send, magic_message or template

v1.16.0

October 2026
  • Added conversation_note_create to leave an internal note on a chat conversation or email thread, the same as an agent adding a note in the Spur inbox
  • Pass the conversationId from conversation_search verbatim: a number for a chat conversation, "eml_<n>" for an email thread
  • The note is visible to agents only and is never sent to the contact. It shows up live in the Spur inbox
  • Note text is trimmed and must be 1 to 4096 characters
  • A note made with an API key has no author, because an API key is not tied to a user
  • A chat conversation needs at least one message before a note can be added to it

v1.15.0

September 2026
  • message_send now accepts a WhatsApp group as the recipient: set to to "group:<id>", for example "group:123", using the group id from the groups API
  • Text, image, video, audio, document and approved templates can all be sent to a group, using the same content payloads as a contact send
  • Media must be a public https URL in content.<type>.link. A group cannot resolve an uploaded media id
  • A template sent to a group is billed by Meta as one conversation per delivered participant, and Meta does not accept QUICK_REPLY, LIST, PRODUCT_LIST, CATALOG or FLOW components in groups
  • A group is always messaged from the channel that owns it. options.from is only needed when several WhatsApp channels are connected, and it must be that owning channel
  • A group send never changes who the conversation is assigned to, so an automation will not take a group away from the agent handling it
  • The per-contact marketing opt-out is not applied to groups, because a group has many participants and no single opt-out state
  • Groups are WhatsApp only. A group recipient on any other channel is rejected

v1.14.0

September 2026
  • message_send now accepts channel: 'email', so a mailbox connected to Spur can send from MCP as well as read
  • Reply into an existing thread by passing options.conversationId with the eml_<n> id from conversation_search: to and content.subject are derived from the thread
  • Start a new thread by omitting options.conversationId and passing to plus content.subject
  • For email, content is { subject, text, html } and needs at least one of text or html. options.cc and options.bcc accept up to 20 addresses each
  • options.from selects the sending mailbox by address (or mailbox channel id). With more than one mailbox connected and no options.from, the send is rejected with the list of addresses instead of being sent from a guessed mailbox
  • An email send returns the thread id as emailThreadId and conversationId, so the thread can be read straight back with conversation_messages
  • Email sends land in the inbox as a normal agent reply, not as an AI agent message, and pause AI email replies on that thread for 30 minutes exactly like a reply sent from the Spur inbox
  • to is no longer a required field on message_send: it stays required for whatsapp, instagram and facebook, and is optional only on an email reply
  • Email attachments and email broadcasts are not supported. message_send remains single-send only, for email too

v1.13.0

September 2026
  • conversation_search now returns email threads alongside chat conversations, interleaved by recency, with channelType: 'email' to narrow results to email only
  • Email threads expose subject and contactEmail, and contactId is null when a thread has no linked contact yet
  • conversation_messages accepts an email thread id (eml_<n>) from conversation_search and returns emailMessage records with subject, from/to/cc/bcc, snippet, text, internal-note flag, and attachment links
  • Added includeHtml to conversation_messages for the raw HTML email body, off by default because HTML email bodies are very large
  • Fixed channels_list, which previously failed for any workspace with a connected mailbox, and added isActive so a disconnected mailbox is visible
  • email is now a valid channel value in contact_search and contact_delete, which previously failed when an email contact was in the result
  • Reading an email thread over MCP never marks it read. message_send does not yet accept channel: 'email'
  • Breaking change: conversation_search nextCursor is now an opaque string instead of a numeric conversation id. Pass it back verbatim and do not construct or parse it

v1.12.0

April 2026
  • Added conversation_search tool for listing and searching conversations with cursor pagination, channel filtering, and unread-only mode
  • Added conversation_messages tool for fetching paginated message history within a conversation
  • Added template_update_draft tool for modifying existing draft templates without recreating them
  • Hardened workspace isolation across templates, segments, broadcasts, and channels to prevent cross-workspace access
  • Improved JSON content parsing for broadcast messages and template component payloads
  • Added cross-workspace error hints to guide API key scoping
  • Composite cursor for conversation_messages eliminates duplicate-timestamp pagination gaps

v1.4.0

February 2026
  • Added customer_import_csv_validate, customer_import_csv_start, customer_import_csv_status, and customer_import_csv_clear tools
  • Mapped MCP CSV import tools to the same validation + queue backend flow used by Spur UI imports
  • Expanded MCP docs and tool catalog with import payload examples for large contact uploads

v1.3.1

February 2026
  • Fixed template_requirements dynamic URL button samples to use real template button indices (not hard-coded index 0)
  • Improved dynamic URL guidance to include exact button-index matching for runtime payloads
  • Updated MCP-level instructions to enforce segment + broadcast flow for bulk sends

v1.3.0

February 2026
  • Expanded MCP error text/hints to surface provider details for Invalid parameter failures
  • Updated template runtime guidance for dynamic URL buttons (use URL suffix params, not full URLs)
  • Clarified bulk-send workflow to prefer segment + broadcast tools instead of looping message_send

v1.2.0

February 2026
  • Added template_requirements tool to return runtime requirements and sample contentMessage payloads
  • Added carousel preflight validation in broadcast_create and broadcast_update for safer template sends
  • Expanded MCP error hints for EC_INVALID_TEMPLATE_ARGS and missing carousel runtime payloads

v1.1.0

February 2026
  • Added segment tooling: segment_filters_catalog, segment_search, segment_create, segment_update, and segment_delete
  • Added broadcast lifecycle tooling: broadcast_create, broadcast_update, broadcast_launch, broadcast_search, broadcast_analytics, and broadcast_overview_stats
  • Expanded Swagger contracts for segment and broadcast endpoints with concrete request/response/error examples
  • Extended MCP error hints for segment and broadcast business-rule failures

v1.0.0

February 2026
  • Initial Spur MCP release with Streamable HTTP transport
  • Initial tool surface covering template draft/submit, message send, contact create/update/delete/search, channels list, and template sync/search/delete
  • Structured error normalization with providerError passthrough and actionable hints
  • Swagger contracts expanded for MCP-backed REST endpoints with concrete success and failure examples

Versioning policy

  • Patch: backward-compatible fixes and error clarity improvements
  • Minor: additive optional fields and non-breaking extensions
  • Major: breaking contract updates with migration guidance