Overview
ShappyChat is one chat backend for all your apps. You run Shappy Backend on your own server and connect each app that must have a chat. Then you manage the models, tools, access and history of all these apps in one place.
Status: Version 0.1.0 is a self-hosted release for one operator. The SDK is not on npm; your backend serves it as a package file. The Chrome extension is a zip file and is not in the Chrome Web Store.
In one minute
- Put it in any app. Use it in internal tools or in a product that your customers use. You can also use it in the Chrome extension or in your own chat app. Each app gets its own look, tools and credential.
- One control plane. You manage the models, connected apps, MCP tools and history of every app in one place. When you revoke one app, the other apps continue to run.
- Your tools and your screen. The chat calls the MCP tools that your app already has, and it can use page controls that you tag.
- Durable. celld keeps the conversations. They stay after a restart.
Note: A credential is for one app. It is not for one user. In a product that your customers use, your server must decide which user can see which conversation. See Security and data.
The parts
| Part | What it does | Read |
|---|---|---|
| Shappy Backend | Serves the backend pages and API, keeps settings, checks access and serves the SDK | Shappy Backend |
| celld | Runs and stores each conversation in its own cell | Self-host |
| Embedded chat SDK | @shappychat/chat: the chat UI and the runtime clients for your web app |
Embed the chat |
| Chrome extension | The chat in the Chrome side panel, connected to your backend or to a local model | Chrome extension |
| Your MCP tools | The operations of your app that the chat can call | App tools (MCP) |
| Model server | LM Studio, Ollama or any OpenAI-compatible endpoint | Shappy Backend |
How the parts connect
The chat UI does not do the work. A runtime does the work. The runtime sends messages to a model, calls tools and keeps the conversation history. The UI shows the conversation of one runtime.
- The host app is your app. It owns its data and its operations.
- App tools are the operations of your app, available through the Model Context Protocol (MCP). The chat calls these tools. The chat does not copy your business logic.
- UI tools let the chat use controls on the page, such as buttons and fields, that you mark for the chat.
- The runtime can run behind Shappy Backend, in the browser, or in a Node process such as an Electron main process.
Which runtime to use
| Runtime | Conversation history | Use when |
|---|---|---|
| Shappy Backend (remote) | celld cells behind the backend | Several apps share models, tools and one control plane. This is the main path. |
| Durable Chat (celld) | Pi Durable in a celld host that you configure | Your own trusted server binds conversations to cells. See Durable Chat. |
| Browser-local | IndexedDB in the browser | The browser can reach your MCP server and model endpoint directly. |
| Node | SQLite in a folder that you choose | You build a desktop app, for example with Electron. |
See Runtimes for the setup of each runtime.
Next steps
- Run the backend on your server. See Self-host.
- Add the chat to your app, or let your coding agent do it. See Embed the chat and Set up with your agent.
- Connect the operations of your app. See App tools (MCP).
- To try ShappyChat without a server first, run the Notes demo. See Quickstart.