mcp server
spunto
Your notes, with room to work together. Offline Android, self-hosted web and optional AI.
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 21, 2026More than a place to put notes
Write a line, make a checklist or add a #nested/label. A short first-run guide introduces capture, labels, search and sync; replay it from Settings whenever you want. The core works on its own; plugins add capabilities in a few fixed places, so your notes remain the centre of the app. Five built-in themes include light and dark modes.
| When you want to… | Spunto helps you… |
|---|---|
| Catch the thought | Write Markdown and checklists, share into Android, use quick capture or dictate with an available on-device speech service. |
| Find the thread again | Search by words and nested labels. Add semantic search, related notes and answers with source citations when AI is configured. |
| Carry context into your work | Curate selected notes into a reusable context pack, with a brief and source snapshots that reveal when the originals have changed. |
| Remember why you decided | Record alternatives, reasoning and an expected outcome in the decision journal. Add dated reviews and outcome notes while retaining the original decision. No AI required. |
| Keep your tags useful | Suggest labels using past tagging examples. Opt in to applying confident existing tags automatically; review new labels and all curation changes yourself. |
| Work together | In the web app on a multi-account installation, share one note or a space with an existing account, with explicit view or edit access. |
| Keep a recoverable record | Use revision history, private notes, export, scheduled snapshots and explicit restore tools. |
Context-pack and decision-journal changes require a connection; synced decision notes remain readable offline. Plugin guides explain the workflows and tag curation.
One library, three ways in
| Client | What it is good at | Connection |
|---|---|---|
| Android | Capture, editing, search and a local replica that syncs later. Optional biometric or device-credential app lock. | Core note work continues offline. |
| Web | A larger workspace for notes, review, context packs and instance settings. Capture drafts stay in the browser until Save. | Requires the server; no offline note replica. |
| MCP | Let a coding agent search, read or capture notes through the same server. Separate tokens scope each client's access. | Requires the server and an authorized client. |
Use Android on its own, or pair it with your server using a QR or one-use code. The Android guide explains both paths. Open the web app on your server, or set up API and agent access.
Personal by default, shared when useful
Labels stay the main way to organize notes. Your personal space is the default; you do not need projects, a team hierarchy or a workspace setup step to start writing. Create a shared space only when a group needs the same library and permissions. Its owner manages membership, editors write notes, and viewers read them.
For a single note, use Share and enter the exact username or verified email of an existing account. The recipient finds it in Shared with me, without gaining access to the rest of your library. Grants can be changed or revoked. This is authenticated collaboration; there are no anonymous public-note links or invitation emails.
Existing and shared notes autosave, with a Save action available immediately. Independent edits can merge, and overlapping changes are preserved as conflict copies for review.
The hosted guide explains multiple accounts, shared spaces, roles and recovery. Sign in with a username and password or an optional SSO provider such as Authentik.
AI on your terms
The core needs no model service. Configure local or cloud profiles when you want semantic search, related notes, translation, summaries, tag suggestions or cited answers. Chat, vision, transcription and embeddings can use different profiles; for example, keep embeddings local while choosing a cloud chat model. Choose models from your configured providers in web Settings → AI; provider addresses, credentials and limits stay under operator control.
Proposed rewrites wait for review. Label automation is an explicit setting restricted to existing labels; new labels and taxonomy cleanup always require your approval. The decision journal and manually curated context packs work without AI.
Private notes are excluded from built-in AI processing. Agent tokens can read them only when explicitly granted private-note access. Configured cloud models and enabled external integrations can send data outside your server; choose their permissions and profiles accordingly. See the privacy policy, AI configuration and plugin contracts.
Get started
For a local, single-owner installation, you need Git and Docker with BuildKit. The image includes the web app and server. For multiple accounts with optional SSO, use the hosted setup.
git clone https://github.com/vitofico/spunto.git
cd spunto
docker build -t spunto:local -f server/Dockerfile .
docker run -d --name spunto \
-p 127.0.0.1:8080:8080 \
-v spunto-data:/data \
--read-only --tmpfs /tmp \
--cap-drop ALL --security-opt no-new-privileges \
-e SPUNTO_PUBLIC_URL=http://localhost:8080 \
spunto:local
docker logs spunto
Open http://localhost:8080, enter the one-time setup code from the logs and choose your owner password. Your data persists in the spunto-data volume. This SQLite mode has one owner: subsequent sign-ins need only that password. Add an optional private display name in Settings → Profile.
This example binds to your own machine. To use Spunto from your phone or remotely, configure your actual public URL and HTTPS. The Compose HTTPS guide and Kubernetes reference use an imported immutable image and a protected owner-password hash. Operations covers configuration, backups and recovery.
Take your notes with you: download a Markdown ZIP from web Settings → Data, or use Share and Save Markdown on an Android note. Android exports saved local text offline; attachment files are not bundled.
Downloads and updates
| What you need | Where to get it |
|---|---|
| Android | Download the latest signed Android release, with its APK and checksum. Android 8 or newer. |
| Android updates | Set up Obtainium with the import configuration. It follows signed Android releases directly from GitHub. |
| Server and web app | Build from source, or check the container guide for available prebuilt core images. |
Spunto has been submitted to F-Droid and is awaiting review. It is not listed in F-Droid yet; use GitHub Releases or Obtainium for Android downloads.
Found a bug or have an idea? Open an issue with the client, version and a reproducible example. See Contributing and report vulnerabilities through the security policy. Maintained by @vitofico.
License
GNU Affero General Public License v3.0 only. Contributions are accepted under the contributor agreement.
Support
If Spunto is useful to you and you'd like to chip in, you can buy me a coffee: