ShappyChat
Get started

Giveyour SaaSa little ghost

ShappyChat is one AI chat for all your apps. It uses your app's own tools, never loses a turn, and runs on your server with the models that you choose.

MIT licence. Try the real chat below: no sign-in, no model, and nothing leaves this page.

Scripted preview: no model or tool is called. Your settings stay in this browser.

AI chat is a second product.

You want your app to answer and to act. Then the real work starts: a chat interface, tool wiring, model keys, and conversations that break.

You build the chat twice.

Streaming, formatting, tool cards, approvals and phone layouts. Then all of it again for your next app.

Your AI cannot use your app.

It can talk about your data. It cannot use the actions and buttons that your app already has.

One reload loses the work.

A refresh in the middle of a turn loses the reply. Worse, an action can run two times.

One chat for all your apps.

Embed it as a right panel, a corner dot or a typing island. Use the same chat on any website with the Chrome extension. Shappy Backend keeps the models, tools and history of every app in one place.

How the parts connect. The apps are examples.

Your app's tools become chat actions.

ShappyChat calls the MCP operations that your app already has. It can also find tagged buttons and fields and use them with a visible cursor. A risky action waits for your approval.

  • Your MCP operationsConnect the tools once in Shappy Backend. Every app chat can use them.
  • Your buttons and fieldsTag the controls. The chat finds them and uses them where people can see.
  • Approval firstThe chat asks before it changes anything that matters.
Tool callsThe real ShappyChat component, with a scripted conversation

It never loses a turn.

Each conversation runs on Pi Durable. Every step is a checkpoint. A reopened chat continues from its last checkpoint. A tool call that was in flight is recorded with an unknown effect and is not sent again.

One turn, with a page reload in the middle.

Your models. Your server. Your data.

App chats use the model server that you choose: LM Studio, Ollama or any OpenAI-compatible endpoint. In the Chrome extension, you can also sign in with a Claude or ChatGPT subscription. Chats stay in the browser or on your own Shappy Backend, apart from your product data.

Run it on your server

The release bundle runs two containers with Docker Compose: the backend and celld.

docker load -i shappychat-backend-<version>-linux-<arch>.tar.gz
docker load -i shappychat-celld-<version>-linux-<arch>.tar.gz
docker compose up -d
docker compose exec backend shappy login

Two stores, kept apart

ShappyChat owns the chat history. Your app owns its data. Neither one reads the other without a tool that you allow.

Everything in one MIT package.

Each part works on its own. Together they give every app the same chat, the same tools and one history.

Where it fits.

Four examples. Select the one that is most like your app.

Other tools do one part.

Chat libraries give you components to assemble. Support bots keep your chats in their cloud. Browser assistants help only the person who installs them. This is how ShappyChat compares with each group.

Feature Chat UI librariesCopilotKit, assistant-ui, Vercel AI Elements Agent frameworksOpenAI ChatKit, LangGraph, Agent-Native Support chatbotsIntercom Fin, Chatbase, Voiceflow, Botpress Browser assistantsClaude in Chrome, Gemini in Chrome, Comet ShappyChat
A ready chat for your app, with your brand YesSidebar, popup or inline components PartlyA themed component, or a separate chat app YesBubble or embedded widget, limited styling NoA side panel in the browser of each user YesRight panel, corner dot or typing island, styled in the Studio
Uses the MCP tools that your app already has YesAn MCP client in your server code PartlyAgent Builder only, or the actions of the framework PartlySome MCP connectors, often hosted servers only NoThey act on the page instead YesConnect them one time. Every app chat can use them.
Uses the buttons and fields on your page PartlyFrontend handlers that you write PartlyClient tools or actions that you write PartlyCustom actions or events that you write YesOn any page, for the user who installs it YesTagged controls, with a visible cursor
Asks before a risky action YesApproval hooks YesApproval nodes and interrupts Not documentedNot found in their public docs YesPauses before sensitive actions YesAllow, Ask or Deny for each tool
A reload or restart never runs a tool call again PartlyStreams resume. No repeat guard documented. PartlyCheckpoints, but an interrupted step can run again Not documentedChats are saved. No repeat guard found. Not documentedNot found in their public docs YesA call in flight is marked unknown, not sent again
Chat history on your own server PartlyYour database, but some sync needs their cloud PartlyHosted ChatKit keeps threads at OpenAI NoThe vendor cloud NoThe vendor account YesIn the browser or on your Shappy Backend
Your choice of model, including local models YesMany providers, including Ollama PartlyIt depends on the framework PartlyTheir list. Your own model on some plans. NoThe models of one vendor YesLM Studio, Ollama or any OpenAI-compatible server
Price Free, open sourcePaid cloud from $39 a month Free SDKsPaid hosting, for example $39 for each seat a month Per plan or per outcomeFor example, Chatbase from $40 a month or Fin at $0.99 for each outcome Mostly a paid planClaude or Google AI plans FreeMIT licence, on your own server

From public product pages and docs on 12 October 2026. Products change often. Partly means that only some products in the group, or only some plans, have the feature. Not documented means that we did not find it in their public docs.

Give your app a little ghost.

Start with the setup guide, or run Shappy Backend on your own server today.