agent's s3 living documents
One notebook, many agents — and their humans. An MCP server with two tools:
Edit files locally with ordinary file tools, and commit. slivingdoc merges concurrent changes with Git semantics and stores the result durably in any S3-compatible bucket.
Node 24+, an S3-compatible bucket, and an MCP host. One spec, pasted once.
AWS S3, Tigris, MinIO, or anything S3-compatible that supports conditional writes. Credentials come from the normal AWS chain.
The npm launcher downloads the right native binary for your platform, verifies its SHA-256, and runs it. No Git, no toolchain.
Two tools, plain files, OK on success. Conflicts come
back as editable text, never as a stuck state.
{
"mcpServers": {
"slivingdoc": {
"command": "npx",
"args": ["-y", "slivingdoc", "serve",
"--bucket", "my-notes",
"--workspace-root", "/srv/notes"],
"env": {
"AWS_ACCESS_KEY_ID": "<your-access-key-id>",
"AWS_SECRET_ACCESS_KEY": "<your-secret-access-key>",
"AWS_REGION": "us-east-1"
}
}
}
}
Prefer AWS_PROFILE over pasted keys when
~/.aws is configured. For a non-AWS store, add
AWS_ENDPOINT_URL_S3.
claude mcp add slivingdoc \ --env AWS_ACCESS_KEY_ID=<your-access-key-id> \ --env AWS_SECRET_ACCESS_KEY=<your-secret-access-key> \ -- npx -y slivingdoc serve --bucket my-notes --workspace-root /srv/notes
Add --scope project to write a shared
.mcp.json instead of your user config.
codex mcp add slivingdoc \ --env AWS_ACCESS_KEY_ID=<your-access-key-id> \ --env AWS_SECRET_ACCESS_KEY=<your-secret-access-key> \ -- npx -y slivingdoc serve --bucket my-notes --workspace-root /srv/notes
Stored in ~/.codex/config.toml under
[mcp_servers.slivingdoc]. Verify with
/mcp.
gemini mcp add -s user \ -e AWS_ACCESS_KEY_ID=<your-access-key-id> \ -e AWS_SECRET_ACCESS_KEY=<your-secret-access-key> \ slivingdoc -- npx -y slivingdoc serve --bucket my-notes --workspace-root /srv/notes
Written to ~/.gemini/settings.json; drop
-s user for a per-project entry.
{
"mcp": {
"slivingdoc": {
"type": "local",
"command": ["npx", "-y", "slivingdoc", "serve",
"--bucket", "my-notes",
"--workspace-root", "/srv/notes"],
"enabled": true,
"environment": {
"AWS_ACCESS_KEY_ID": "<your-access-key-id>",
"AWS_SECRET_ACCESS_KEY": "<your-secret-access-key>"
}
}
}
}
Goes in opencode.json at the project root, or
globally in ~/.config/opencode/.
pi install npm:pi-mcp-adapter
pi has no built-in MCP. The adapter reads the standard
.mcp.json — paste the spec above into your project's
.mcp.json and restart pi.
No bucket yet?
Tigris is plug-and-play: a
free tier, one global endpoint, and the conditional writes
slivingdoc's startup probe requires. Set
AWS_ENDPOINT_URL_S3 to
https://t3.storage.dev and AWS_REGION to
auto. For offline evaluation, the
MinIO example
runs a local bucket in one docker compose up.