Repository navigation
Dinghy 0.24.0
Added
- An MCP client such as Claude Code connects with OAuth in the browser:
claude mcp add --transport http dinghy https://chat.example.com/v1/mcp, then an owner or admin approves it on one page and picks the workspace, the access (Chats or Full access) and the reply mode. The agent never sees a secret. A connected app shows in Settings > API & webhooks beside the keys, and can be disconnected there. OAuth is on whenPUBLIC_URLishttpsorlocalhost. API: OAuth discovery at/.well-known/oauth-protected-resourceand/.well-known/oauth-authorization-server,/oauth/authorize,/v1/oauth/token,/v1/oauth/registerand/v1/oauth/revoke, with Client ID Metadata Documents and Dynamic Client Registration. - MCP speaks protocol 2026-07-28, which is stateless, beside the older versions.
- Full access tools and routes, so a coding agent can install the chat: the install snippet for seven frameworks, allowed sites, an install check, identity code with no secret, the widget's look, webhook signature code, delivery replay, and test visitors. API:
/install/snippet,/install/check,/install/identity,/sites,/test-visitorsand.../deliveries/{deliveryId}/replay. - A key's reply mode: Send directly, or Drafts only, where each reply waits under the conversation as a pale suggested reply, for an operator to send, edit or discard. A draft becomes stale when the visitor writes or an operator replies after it, and the thread folds stale drafts into one card. API:
replyModeon keys, a 202{ draft }answer to a key's reply, and/draftsroutes. - Internal notes: choose Note above the reply box to write a message that only your team sees, never the visitor. API:
"note": trueonPOST .../conversations/{conversationId}/messages, a messagekindofnote, and the MCP tooladd_note. A note goes while bots are paused and while a person handles the conversation, and an operator's note neither takes the conversation from the bots nor makes drafts stale. - A bot hands a conversation to people with a reason, a summary and a last message to the visitor, and the team gets an alert. While a person handles it, a key that sends directly gets 409
human_handling, until an operator gives it back. The thread shows the handoff with the bot's note, the inbox row ends with a mark for who handles each conversation, and one dropdown picks the bot, the team or a member. API:POST .../handoff,POST .../give-back, which also clears the assignee,handlerandboton conversations,handoffon messages, and theconversation.handoffandconversation.given_backwebhooks. - Owners and admins pause every bot with one switch: replies, drafts and typing from keys answer 409
bots_paused, and the banner says who paused them and when, with Resume bots. API:PUT .../bots-paused, andbotsPaused,botsPausedByandbotsPausedAton workspaces. - A bot shows " is typing" in the chat. API:
POST .../typing, and a widgetnotice. GET /v1/eventsstreams the webhook events to an API key, for a bot with no public address, and the MCP toolwait_for_messageswaits for new visitor messages.- MCP tools for keys:
hand_off,list_members,get_contact,list_contacts,search_contacts,get_live_visitors,get_analytics, andformat: "markdown"andreplySecondsonget_conversation. - A failed webhook delivery shows the start of the receiver's answer. API:
responseExcerptandreplayOfon deliveries. - Install has a "Set up with an agent" prompt to copy, for Claude Code, Cursor or another MCP client.
- Docs: Use Dinghy with AI agents, with a block to paste into a repository's
AGENTS.md, and every doc in one file athttps://dinghy.chat/llms-full.txt. - Snooze: the … menu of a conversation snoozes it until the visitor replies, until tomorrow at 9:00 or until next Monday at 9:00. It stays open, shows Snoozed in the Inbox and does not count as waiting until then, and the visitor sees nothing. API:
{ "snooze": { "until" } }onPATCH .../conversations/{conversationId},snoozeon each conversation, aconversation.snoozedchange, and the MCP toolssnooze_conversationandunsnooze_conversation.
Changed
- A new API key or connected app starts in Drafts only. Existing keys keep sending directly, so no bot changes how it behaves.
- API keys can read the analytics, and Full access keys can read and change the widget's look.
- Settings names the two access levels Chats and Full access. The API keeps
conversationsandsetup. - Assigning a conversation in the operator app takes it from the bots, as a reply does. An API key's assign changes only the assignee.
- Settings > API & webhooks shows how many bots are connected, with a big switch to pause them, and lists connected apps, API keys and webhooks apart.
close_conversationis marked destructive, so an MCP client asks the person first.- A visitor who writes after their conversation was closed reopens it, with its assignee, instead of starting a new one. Only a visitor's first message starts a conversation, and the
conversation:startedevent andconversation.createdwebhook come only then.
Fixed
- Text you select in the widget stays readable. A site that styled its own selection made the selected text in the chat invisible, because Chrome passes the page's selection style into the widget.
- A visitor who left only their email shows it on one line at the top of the conversation's side panel, a little smaller when it is long, instead of split across two lines. Only a very long email wraps, after its @.
Image: ghcr.io/dinghy-chat/dinghy:0.24.0