{"slug": "show-hn-snip-terminal-notes-app-that-claude-can-read-and-write-via-mcp", "title": "Show HN: Snip – Terminal notes app that Claude can read and write via MCP", "summary": "Developer jerichosiahaya released Snip, an MIT-licensed terminal note-taking app written in Rust with SQLite FTS5 full-text search, published on crates.io as snip-notes and installable via AUR packages snip-notes-bin and snip-notes. Snip ships an MCP server run via `snip mcp` on stdin/stdout that lets Claude read and write notes in the same database as the interactive TUI, with the release executable at roughly 1.6 MB. The early release omits trash/restore, so deletions are permanent after confirmation.", "body_md": "Lightweight terminal note-taking app. Rust + SQLite (FTS5 full-text search),\nwith an [MCP server](#use-snip-from-claude-mcp) so Claude can read and write your notes.\n\n- crates.io: [`snip-notes`](https://crates.io/crates/snip-notes)\n- mcp-name: io.github.jerichosiahaya/snip\n- License: MIT\n\n```\nyay -S snip-notes-bin   # prebuilt binary from the GitHub release\nyay -S snip-notes       # or build from source\n```\n\nEither installs the `snip` command (use `paru` or `makepkg` if you prefer).\nThe PKGBUILDs live in [`packaging/aur/`](https://github.com/jerichosiahaya/snip/blob/main/packaging/aur). Each release\nupdates them and pushes them to the AUR automatically (see\n`.github/workflows/aur-publish.yml`; it needs the `AUR_SSH_PRIVATE_KEY`\nrepository secret).\n\nRequires Rust/Cargo and a C compiler for the bundled SQLite:\n\n```\ncargo install snip-notes   # installs the `snip` command into ~/.cargo/bin\n```\n\nDownload the prebuilt executable—**no Rust or Cargo required**:\n\n```\ncurl -fLO https://github.com/jerichosiahaya/snip/releases/latest/download/snip-arch-linux-x86_64.tar.gz\ncurl -fLO https://github.com/jerichosiahaya/snip/releases/latest/download/SHA256SUMS\nsha256sum -c SHA256SUMS && \\\n  tar -xzf snip-arch-linux-x86_64.tar.gz && \\\n  install -Dm755 snip \"$HOME/.local/bin/snip\"\n```\n\nRun `~/.local/bin/snip`, or `snip` if `~/.local/bin` is on your PATH.\nRequires an up-to-date Arch Linux x86-64 system (`glibc`, `gcc-libs`) and\n`$EDITOR` or `nano` for editing. SQLite is bundled. This build is not for\nARM or guaranteed compatible with older Linux distributions.\n\nRequires Rust/Cargo and a C compiler for bundled SQLite:\n\n```\ncargo build --release --locked\ninstall -Dm755 target/release/snip \"$HOME/.local/bin/snip\"\n```\n\nRelease executable: **~1.6 MB**, below the 5 MB budget (excluding system libraries and notes).\n\nEarly release: trash/restore is not implemented; deletion is permanent after confirmation. Keep backups of important notes.\n\n```\nsnip                     # open the interactive TUI\nsnip add \"note text\" --tag work    # quick capture, first line = title\nsnip search \"meeting\"    # print matching notes\nsnip search \"\" --tag work\nsnip export ~/notes      # every note as a Markdown file (see below)\n```\n\nNotes are stored in `$XDG_DATA_HOME/snip.db` (normally `~/.local/share/snip.db`) by default. Override with `snip --db /path/to.db ...`.\n\n```\n snip  / to search                                                 17 notes\n──────────────────────────────┬────────────────────────────────────────────\n Meeting notes             2h │ Meeting notes\n Groceries                 3d │ #work · edited 2h ago\n Book list                 1w │\n                              │ Discuss the new feature with the team…\n──────────────────────────────┴────────────────────────────────────────────\n ↑↓ move  ⏎ edit  ^N new  / search  ^Q quit  ^T tag  Del delete\n```\n\nThe list shows the most recently edited notes first. Terminals 72 columns or wider also show a preview of the selected note; narrower ones show its tags in the list instead.\n\n```\n↑↓ PgUp PgDn Home End   move through notes\nEnter      edit selected note (opens $EDITOR, falls back to nano)\nCtrl-N     new note\n/          search as you type (title + body; every word must match,\n           prefixes ok: \"meet\" finds \"meeting\"); Enter keeps it, Esc clears it\nCtrl-T     cycle tag filter (all → each tag → all)\nEsc        clear search and tag filter\nDelete     delete selected note (asks y/N in the footer)\nCtrl-Q     quit\n```\n\nNote format: first line = title, the rest = body. Works in your normal editor;\n`$EDITOR` may include arguments, e.g. `EDITOR=\"code -w\"`.\n\n`snip mcp` runs a [Model Context Protocol](https://modelcontextprotocol.io)\nserver on stdin/stdout, so Claude can save, find and update your notes. It\nuses the same database as the interactive app, and both can be open at once.\n\n**Claude Code:**\n\n```\nclaude mcp add --scope user snip -- \"$(command -v snip)\" mcp\n```\n\n**Claude Desktop:** add this to `claude_desktop_config.json` (Settings →\nDeveloper → Edit Config), using the absolute path to `snip` (`command -v snip`\nprints it: `~/.cargo/bin/snip` after `cargo install`, `~/.local/bin/snip` for\nthe prebuilt download), then restart Claude Desktop:\n\n```\n{\n  \"mcpServers\": {\n    \"snip\": { \"command\": \"/home/YOU/.local/bin/snip\", \"args\": [\"mcp\"] }\n  }\n}\n```\n\nTo use a different database, put `--db /path/to.db` before `mcp` in either\ncommand.\n\nClaude gets these tools:\n\n| Tool | Does | \n|---|---|\n| `search_notes` | find notes by words (prefixes ok) and/or tag; no query lists recent notes | \n| `get_note` | read one note in full | \n| `list_tags` | all tags in use | \n| `create_note` | save a new note (title, body, tags) | \n| `append_to_note` | add text to the end of a note | \n| `update_note` | change a note's title, body or tags | \n\nThere is deliberately no delete tool: deleting notes stays something you do\nin the app. `update_note` can still replace a note's body, so keep backups\n(below) if Claude edits important notes.\n\n- Source of truth: the SQLite DB (WAL mode). Use SQLite's `.backup` command for a consistent backup, including while the app is open:\n\n```\nsqlite3 \"${XDG_DATA_HOME:-$HOME/.local/share}/snip.db\" \".backup 'snip-backup.db'\"\n```\n\n- **Markdown export:**`snip export [DIR] [--tag NAME]` writes one`.md` file per\nnote (DIR defaults to`./snip-export` ). Each file has YAML front matter that\nObsidian and other Markdown tools read, then the title as a heading and the\nbody:\nFiles are named after the title (\n\n```\n---\ntitle: \"Meeting notes\"\ntags: [\"work\", \"q4\"]\ncreated: 2026-10-02T16:49:00Z\nupdated: 2026-10-02T17:12:00Z\nsnip_id: 12\n---\n\n# Meeting notes\n\n- ship the redesign\n```\n\n `meeting-notes.md` ; the note id is added if\ntwo titles clash) and their modification time is the note's last edit.\nExporting again overwrites those files and leaves anything else in DIR alone,\nso a note that was renamed or deleted keeps its old file until you remove it.\n\n```\ncargo test   # regression: FTS stays consistent across create/update/delete\n```\n\n", "url": "https://wpnews.pro/news/show-hn-snip-terminal-notes-app-that-claude-can-read-and-write-via-mcp", "canonical_source": "https://github.com/jerichosiahaya/snip", "published_at": "2026-10-02 18:12:13+00:00", "updated_at": "2026-10-02 18:36:54.641321+00:00", "lang": "en", "topics": ["ai-tools", "agent-protocols", "developer-tools", "ai-products"], "entities": ["Snip", "Claude", "jerichosiahaya", "crates.io", "Model Context Protocol", "Claude Code", "Claude Desktop", "Arch Linux"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-snip-terminal-notes-app-that-claude-can-read-and-write-via-mcp", "markdown": "https://wpnews.pro/news/show-hn-snip-terminal-notes-app-that-claude-can-read-and-write-via-mcp.md", "text": "https://wpnews.pro/news/show-hn-snip-terminal-notes-app-that-claude-can-read-and-write-via-mcp.txt", "jsonld": "https://wpnews.pro/news/show-hn-snip-terminal-notes-app-that-claude-can-read-and-write-via-mcp.jsonld"}}