New: MCP (Model Context Protocol) tool servers
Agents can now call tools hosted on external MCP servers. Register a server once per workspace, discover its tools, and grant them per agent — the assistant then calls them mid-conversation like any built-in tool.
Server registry. Add an MCP server with its endpoint and credentials; ConvTag performs the JSON-RPC handshake, reads the server info, and stores the connection. Credentials are encrypted at rest and resolved per request, never rendered back into the UI.
Tool discovery + per-agent grants. Discovered tools are listed with their JSON schemas. Each agent gets an explicit allow-list, so a server shared across a workspace never exposes every tool to every agent.
Safety rails, because a remote tool is untrusted input. Arguments are sanitised before dispatch, tool output is truncated before it reaches the prompt, and every server sits behind a circuit breaker that trips on repeated failures instead of stalling the visitor's turn. Timeouts, protocol errors, unauthorised responses, and transport faults are separate exception types, so the operator sees what actually broke.
Activity log. Every MCP call is recorded with its arguments, result size, duration, and outcome, viewable per agent. A scheduled prune keeps the log bounded.
New: pluggable marketing themes — Aurora and Prism
The public marketing site is now theme-driven. Two complete themes ship in the box, each with its own home, pricing, how-it-works, integrations, changelog, privacy, and terms pages plus a matching authentication shell. Switch themes from the admin without touching code.
Try Now. The marketing hero can fetch a visitor-supplied URL, extract its content, and run a live demo conversation against that page — a prospect sees the assistant answer questions about their own site before signing up.
New: model picker with a real latency probe
Choosing a model no longer means guessing. The picker lists roughly 95 models across Cloudflare Workers AI, OpenAI, and OpenRouter, with the Cloudflare catalogue fetched live from the provider so it can't go stale. Each entry can be probed for real round-trip latency from your own server before you commit to it, and embedding models carry an explicit dimension warning so a switch that would invalidate your vector index is visible up front rather than after a rebuild.
New: automatic LLM provider failover
When the primary provider errors or times out, the request now falls through a configured chain to the next provider instead of failing the visitor's turn. Cloudflare deployments additionally self-heal model-to-model: a model that has been retired upstream is swapped for a working one automatically, which previously required a manual config change to notice and fix.
New: three operator dashboards
Widget Monitor records widget-side events — including the failures that never reach the server, like a stream that closes without completing — so a broken embed on a customer site is visible in the admin instead of only in a visitor's browser.
Hot-path latency breaks each visitor turn into its stages (embed, vector search, rerank, tool loop, first token, total) and shows the prompt size per turn, so a slow deployment can be traced to the stage responsible rather than guessed at. The perf:hotpath artisan command runs the same measurement repeatably from the CLI.
Turn debugger stores a behind-the-scenes trace per conversation turn — which path answered (curated, LLM, refusal), what was retrieved and with what scores, and how long each stage took. A scheduled prune keeps trace storage bounded.
New: Translation Manager
Any user-facing string in any of the 133 shipped locales can now be overridden from the admin, with the override layered over the shipped translation file at runtime. Marketing copy and SEO metadata are covered, so an operator can retitle and re-describe the public site per language without editing files or redeploying.
New: time-limited trial plans without a card
A plan can be granted for a fixed period with no payment method. When the window closes the workspace hits an upgrade wall instead of silently continuing, and the customer keeps their data.
Improvements
Retrieval accuracy. A follow-up message that drops its subject ("and the year?") now keeps that subject for retrieval instead of embedding as a generic query. Optional LLM query rewriting condenses a conversational message into a standalone search query, and is guarded so a rewrite can never come out worse than the deterministic version it replaces. Sources marked global — contact details, company facts — can answer from any page rather than only where they were crawled.
Faster turns. Knowledge-only questions skip the tool-check completion entirely, and the reranker is skipped adaptively when the vector search already returned a confident ordering.
Crawling reach. Two new extraction tiers: Cloudflare's own page-to-markdown renderer, and a vision OCR fallback for pages whose content is locked inside images. The bot-challenge detector no longer misreads ordinary pages as challenge pages.
Indexing that repairs itself. Every indexing job retries on transient failure, and a scheduled sweep re-runs sources that failed anyway, so a provider blip no longer leaves a source permanently unindexed. Reindex now works correctly for pasted text, uploaded files, and auto-indexed pages instead of dead-ending on them, and pasted-text sources can be edited in place.
Workflow builder. The visual builder gained validation, a test-run mode that simulates a workflow without touching a live conversation, and a canvas-first creation flow.
Right-to-left support. The widget renders correctly in Arabic, Hebrew, Persian, and Urdu, mirroring layout and input direction.
Billing. Stripe automatic tax, pay-by-invoice subscriptions with bank transfer, operator-selectable default currency, yearly pricing, the Stripe-hosted invoice PDF in billing history, and an in-app Stripe health panel that verifies the webhook and tax configuration and can repair them.
Fixes
Serving without FrankenPHP. The application now runs correctly on any PHP host, not only an Octane/FrankenPHP deployment: the cron queue tick resolves the PHP binary rather than assuming the serving one, and streaming responses lift the execution-time limit that PHP-FPM would otherwise apply mid-stream.
Octane worker memory. FrankenPHP's static binary ships no php.ini, so the compiled-in 128MB memory limit applied to every worker. A php.ini now ships with the application and is read at worker start.
Empty 500 responses. A PHP deprecation raised while rendering an error could replace the response with an empty 500 and destroy the original exception — the actual failure became invisible in the logs. Deprecations are now handled without displacing the response, and a dedicated log channel means a misconfigured logging environment can't break logging itself.
Google Sheets broke Google Docs. The sheet sync kept its own copy of the OAuth token logic, reading the expiry with an integer cast and writing it back in a different format than the shared token store reads. Adding your first Google Sheet source could therefore break every Google Doc source in the same workspace. There is now a single owner for Google tokens, and a row already written in the wrong format repairs itself.
Chat broke after an hour. The widget's session token expires after 60 minutes. A tab left open past that received an authentication error on every message, and the retry button replayed the same expired token — so the conversation stayed broken until the visitor reloaded. The widget now re-authenticates once, silently, and replays the message; the existing conversation is resumed, so nothing is lost.
Slow reranker no longer times out the turn. The reranker's HTTP timeout was eight seconds, long enough to push a turn past the widget's own connection timeout and show the visitor a generic error. It now fails fast (configurable, three seconds by default) to the vector ordering.
Certificate-mismatched www hosts. A site whose TLS certificate covers only the apex domain failed every crawler tier for its www URLs and was classed a permanent failure, so those pages never indexed. The crawler now retries the apex host once, for exactly that certificate signature.
Message identity. The message id handed to the widget during streaming is now the id that persists, so per-message actions taken by a visitor resolve to a real record.
Analytics queue. Telemetry and turn persistence jobs are consumed rather than accumulating unprocessed.
Other fixes. Duplicate-content detection is scoped to the source rather than the whole agent; a Google Docs link pasted into the URL form becomes a Google Doc source instead of a failed crawl; dead OAuth tokens flag the connection and tell the owner to reconnect; provider timeouts are no longer reported as firewall or DNS faults; only one verification email is sent at signup; soft-deleted workspaces no longer appear in the platform list; encrypted secret columns were widened for longer values; the operator-joined notice in chat auto-dismisses; links in chat messages are clickable; and the marketing site gained a mobile navigation menu.