A command-line notes tool that stores markdown notes with tags and attachments. Supports SQLite and markdown file backends.
- Markdown-first: Notes are stored as markdown with full formatting support
- Tags: Organize notes with multiple tags
- Attachments: Attach files to notes (stored as blobs in SQLite)
- Full-text search: FTS5-powered search across titles and content
- Beautiful output: Rendered markdown in the terminal
- MCP Server: Built-in Model Context Protocol server for AI assistant integration
- Portable: Single SQLite database file, XDG-compliant storage
brew install harperreed/tap/memogo install github.com/harperreed/memo/cmd/memo@latestDownload from GitHub Releases.
# Open $EDITOR to write content
memo add "Meeting Notes"
# Inline content
memo add "Quick thought" --content "Remember to call mom"
# From file
memo add "Article Draft" --file draft.md
# With tags
memo add "Project Ideas" --content "..." --tags "work,brainstorm"# List recent notes
memo list
# Filter by tag
memo list --tag work
# Search
memo list --search "meeting"
# Limit results
memo list --limit 5# Use ID prefix (6+ characters)
memo show abc123memo edit abc123memo rm abc123
# Skip confirmation
memo rm abc123 --force# Add tag to note
memo tag add abc123 important
# Remove tag
memo tag rm abc123 important
# List all tags
memo tag list# Tag a note with the current directory
memo add "Project TODO" --content "..." --here
# List notes tagged with the current directory
memo list --here# Attach a file
memo attach abc123 document.pdf
# Extract attachment
memo attach get def456 --output ./downloads/# Export all notes to JSON
memo export --format json --output backup.json
# Export to markdown directory
memo export --format md --output ./notes/
# Import from JSON
memo import backup.json
# Import markdown files
memo import ./notes/Start the MCP server for AI assistant integration:
memo mcpAdd to your Claude desktop config (~/.config/claude/claude_desktop_config.json):
{
"mcpServers": {
"memo": {
"command": "memo",
"args": ["mcp"]
}
}
}| Tool | Description |
|---|---|
add_note |
Create a new note |
list_notes |
List notes with optional filtering |
get_note |
Get a note by ID |
update_note |
Update note title or content |
delete_note |
Delete a note |
search_notes |
Full-text search |
add_tag |
Add tag to note |
remove_tag |
Remove tag from note |
add_attachment |
Add attachment (base64) |
list_attachments |
List note attachments |
get_attachment |
Get attachment content |
export_note |
Export note as JSON or markdown |
memo supports two storage backends:
- Markdown (default for new users): Notes stored as markdown files in
~/.local/share/memo/ - SQLite: Notes stored in
~/.local/share/memo/memo.db
Configure the backend in ~/.config/memo/config.json:
{
"backend": "markdown",
"data_dir": "~/.local/share/memo"
}Use memo migrate --to markdown or memo migrate --to sqlite to switch backends.
# Build
make build
# Run tests
make test
# Run tests with race detector
make test-race
# Run linter
make lint
# Run all checks
make checkMIT