The interesting part is not reading notes, it is how carefully it writes them: appending rather than replacing, swapping one Markdown section, finding-or-creating by title so a running log stays a single note. Deletion is staged behind Trash and the irreversible calls demand an explicit confirmation. Two things to know before you wire it up — it wants your Simplenote email and password rather than a token, and Simplenote holds note bodies unencrypted unless you turn Vault on.
A Python server over a Simplenote account that keeps the notes in an in-memory cache and syncs it in the background. Notes can be searched with boolean queries, appended to, section-edited, tagged, rolled back to a previous version and exported.
- search_notes takes AND, OR and NOT, quoted phrases, tag: and from:/to: filters, fuzzy matching, sorting and pagination; list_notes returns the recent ones and list_tags every tag with its note count
- Writes that do not clobber: add_text appends or prepends, replace_section swaps a single Markdown section and leaves the rest alone, get_or_create_note finds by title or creates it, append_to_daily_note stamps an entry onto today's note
- Tag housekeeping across the whole account — add_tags, remove_tags, replace_tags, bulk_tag over many notes at once, rename_tag atomically everywhere, and find_untagged_notes to see what was never filed
- get_note_versions lists a note's recent history and restore_version rolls it back
- delete_note moves a note to Trash and restore_note brings it back; permanent_delete_note requires confirm=true, and empty_trash previews by default and needs both dry_run=false and confirm=true
- find_and_merge_duplicates runs with a dry run and a similarity threshold before it merges anything, and export_notes writes Markdown or JSON
- Vault encrypts note bodies client-side before they reach Simplenote's API, and vault_status reports whether the key is available this session and how many notes are encrypted
SIMPLENOTE_EMAIL and SIMPLENOTE_PASSWORD — the account credentials themselves, not a token. Python 3.10 or newer, or the published docdyhr/simplenote-mcp-server container. It speaks stdio by default; MCP_TRANSPORT=http switches to HTTP, and on any non-loopback MCP_HTTP_HOST the server refuses to start unless MCP_HTTP_AUTH_TOKEN is set. Set CACHE_MAX_SIZE at or above your note count — the default is 10000 — and SYNC_INTERVAL_SECONDS decides how often the cache refreshes, every 120 seconds by default.
One command plus a key — pip install simplenote-mcp-server, then supply credentials
