mcp server
salt.md
The open-source workspace for people and AI agents. Docs, databases and realtime collaboration with an MCP server in the same binary, so agents work in the same workspace on the same permissions. One
Set up
Runs on your computer. Pick your agent and operating system.
This project does not publish an install method we can turn into a config. Follow the README instead.
README
synced Oct 14, 2026Quickstart
curl -fsSL https://raw.githubusercontent.com/saltmd/salt.md/main/install.sh | sh
One command downloads the binary for your platform, installs it, starts it and
prints the address to open. On a Linux server it sets itself up as a systemd
service, and running it again upgrades it. No curl on the machine?
wget -qO- … | sh does the same.
Or with Docker:
docker run -d -p 8420:8420 -v salt-data:/data ghcr.io/saltmd/salt.md:latest
There is nothing else to install: no database server, no cache, no object store. Reverse proxies, TLS and backups are in the self-hosting guide.
People and agents in the same place
An agent is asked to organise the launch notes. A page appears, a database is created, the rows fill in. A person opens the same board a second later and carries on. Same pages, same permissions, same history.
Connect Claude, ChatGPT, Codex, Cursor, Gemini CLI or any other MCP client to
/mcp and it works on the workspace you use:
- Pages: create, edit, move, duplicate, trash and restore
- Databases: create them, change the schema, add and query rows, set up views
- Search with the same permission checks a person gets
- Bulk imports from any JSON source, without the content passing through the agent
- Comments, and an append-only note trail on every page
- Presence: the page shows which agent is working on it, before you start typing
And a list it cannot touch. No agent can create or delete accounts, issue tokens, take or restore a backup, change instance settings or decide who is in a workspace, and the server tells every agent that connects. A credential carries its person's access and never more, every workspace decides what agents may do there, and the activity log keeps their changes apart from yours.
MCP tools · Agent access · Permissions
A whole workspace
Moving in? Markdown files, CSVs and a Notion export import from the same menu.
Under the hood
flowchart LR
people(["People<br>browser · desktop · phone"]) --> salt
agents(["Agents<br>Claude · ChatGPT · Cursor"]) -- MCP --> salt
tools(["Your tools"]) -- "REST · webhooks · iCal" --> salt
salt["salt.md<br>one Go binary"] --> data[("SQLite file<br>+ uploads")]
One Go process, built with CGO_ENABLED=0: a static binary with a pure-Go
SQLite driver and the frontend embedded. No PostgreSQL, no Redis, no object
store, no separate collaboration server.
- Install: one binary,
install.sh, or the Docker image - Data: one SQLite file plus an uploads directory
- Update: swap the binary or pull the image, restart
- Backup: stop, copy two paths, start
- Platforms: Linux and macOS on amd64 and arm64, Windows on amd64
The desktop app for macOS and Linux is a window onto a server you run, not a second copy of the product.
Documentation
salt.md/wiki covers every screen, every property type,
every tool an agent can call and every setting on the server. It is written next
to this code and checked against it on every build: a tool name that no longer
exists, an API path that is not a route or a screenshot whose screen has changed
fails the build. Every page is also plain Markdown at the same address with
.md on the end, indexed for agents at
/wiki/llms.txt.
Contributing
Issues and pull requests are welcome. Pull requests need a signed CLA; CONTRIBUTING.md says what that means and why it exists. Security reports go to dev@salt.md, not to a public issue: see SECURITY.md.
License
AGPL-3.0. Use it, run it at work, change it. If you offer it to others over a network, publish your changes.
The components salt.md is built on, with their licences in full, are in
THIRD-PARTY-NOTICES.md. A running instance serves the
same list at /licenses.