Evernote MCP Server & CLI (evercli)
A Bun-native TypeScript Evernote client exposing both a CLI (evercli) and a Model Context Protocol (MCP) server. Provides full read access and limited write access (create notes, tag notes, move notes). Does not edit or delete existing note content.
Quick Start
Download the latest binary for your platform from GitHub Releases:
# macOS (Apple Silicon)
curl -Lo evercli https://github.com/SoftwareStartups/evernotecli/releases/latest/download/evercli-darwin-arm64
# macOS (Intel)
curl -Lo evercli https://github.com/SoftwareStartups/evernotecli/releases/latest/download/evercli-darwin-x64
# Linux (arm64)
curl -Lo evercli https://github.com/SoftwareStartups/evernotecli/releases/latest/download/evercli-linux-arm64
# Linux (x64)
curl -Lo evercli https://github.com/SoftwareStartups/evernotecli/releases/latest/download/evercli-linux-x64
chmod +x evercli
./evercli login
Use with Claude Code
This repo is a Claude Code plugin marketplace. Install the companion skill so Claude Code can drive evercli for you:
/plugin marketplace add SoftwareStartups/evernotecli
/plugin install evercli@softwarestartups-evercli
Once installed, just ask Claude in plain language (e.g., "Search my Evernote notes for the Q3 planning meeting") and the skill will activate automatically. The plugin tracks this repo's releases — run /plugin marketplace update softwarestartups-evercli to get the latest skill revisions.
Authentication
Run evercli login to authenticate. If no OAuth consumer credentials are configured, you'll be prompted to paste a developer token — get one at dev.evernote.com/get-token.
Alternatively, set the EVERNOTE_TOKEN environment variable directly:
export EVERNOTE_TOKEN="your-developer-token"
CLI Usage
evercli --help
evercli search "query" # search notes
evercli notebooks # list notebooks
evercli tags # list tags
evercli note <guid> # note metadata
evercli content <guid> # note content (Markdown)
evercli content <guid> --save-resources ./res/ # save images locally, rewrite refs
evercli create "Title" -c "body" # create a note
evercli create "Title" -c "$(cat note.md)" --source-note <guid> # re-attach images from original
evercli copy <guid> "New Title" # copy note including all attachments
evercli copy <guid> "New Title" -n "Notebook" # copy to a specific notebook
evercli tag <guid> tag1 tag2 # add tags
evercli untag <guid> tag1 # remove tags
evercli move <guid> "Notebook" # move to notebook
evercli drain # process queued writes
Write commands (create, tag, untag, move, copy) automatically enqueue when rate-limited and exit 0. Run evercli drain later to replay them.
Image round-trip
Evernote notes can contain embedded images. The CLI supports a lossless round-trip workflow for editing notes that contain images:
# Option A — copy the note server-side (zero data loss, fastest)
evercli copy <source-guid> "Edited Copy"
# Option B — export to local files, edit, re-create
evercli content <guid> --save-resources ./res/ > note.md
# edit note.md — images are now local paths like ./res/photo.png
evercli create "Edited Title" -c "$(cat note.md)"
# Option C — keep evernote-resource: refs, re-attach on create
evercli content <guid> > note.md
# edit note.md — images stay as evernote-resource:<hash> refs
evercli create "Edited Title" -c "$(cat note.md)" --source-note <guid>
Private Notes
Notes tagged private are protected at the service layer:
- Hidden from search results — never appear in
search output, even with tag:private queries
- Blocked from direct access —
note and content commands return an error
- Blocked from write operations —
tag, untag, and move refuse to operate on private notes
- Tag protected — the
private tag cannot be removed via untag; it is also hidden from tags listing
- Creating private notes is allowed —
create -t private works as expected
MCP Server
Using the binary
evercli serve
Add to Claude Code (~/.claude/mcp.json):
{
"mcpServers": {
"evernote": {
"command": "/path/to/evercli",
"args": ["serve"],
"env": {
"EVERNOTE_TOKEN": "your-developer-token"
}
}
}
}
From source
claude mcp add evernote -- bun run /path/to/evernote-client/src/index.ts serve
Or add manually to .claude/mcp.json:
{
"mcpServers": {
"evernote": {
"command": "bun",
"args": ["run", "/path/to/evernote-client/src/index.ts", "serve"],
"env": {
"EVERNOTE_TOKEN": "your-developer-token"
}
}
}
}
MCP Tools
Read Tools
search_notes