Mcp Evernote — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mcp Evernote (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A Model Context Protocol (MCP) server that provides seamless integration with Evernote for note management, organization, and knowledge capture. Works with both Claude Code and Claude Desktop.
Evernote stopped issuing new developer API keys. If you are a new user and cannot obtain a Consumer Key/Secret, skip the standard OAuth setup and use the cookie-based authentication method instead — no API key required.
/mcp command#### Option 1: Using NPX (No Installation Required)
The simplest way - no need to install anything globally:
# For Claude Desktop - Run authentication
npx -y -p @verygoodplugins/mcp-evernote mcp-evernote-auth
# For Claude Code - Just add the server
claude mcp add evernote "npx -y -p @verygoodplugins/mcp-evernote mcp-evernote"The server can poll Evernote for changes and send webhook notifications when notes are created, updated, or deleted.
#### Configuration
# Enable auto-start polling (default: false)
EVERNOTE_POLLING_ENABLED=true
# Poll interval in milliseconds (default: 3600000 = 1 hour, min: 900000 = 15 min)
EVERNOTE_POLL_INTERVAL=3600000
# Webhook URL to receive change notifications
EVERNOTE_WEBHOOK_URL=https://your-endpoint.com/webhooks/evernote#### Webhook Payload
When changes are detected, a POST request is sent to your webhook URL:
{
"source": "mcp-evernote",
"timestamp": "2025-12-15T10:30:00.000Z",
"changes": [
{
"type": "note_created",
"guid": "abc123...",
"title": "My New Note",
"notebookGuid": "def456...",
"timestamp": "2025-12-15T10:29:55.000Z"
}
]
}#### Manual Control
Use these tools to control polling:
evernote_start_polling - Start polling manuallyevernote_stop_polling - Stop pollingevernote_poll_now - Check for changes immediatelyevernote_polling_status - Get polling configuration and statusFor real-time notifications, Evernote supports webhooks but requires manual registration:
[email protected] with:#### Option 2: Global Installation
Install once, use anywhere:
# Install globally
npm install -g @verygoodplugins/mcp-evernote
# For Claude Desktop - Run authentication
mcp-evernote-auth
# For Claude Code - Add the server
claude mcp add evernote "mcp-evernote"#### Option 3: Local Development
For contributing or customization:
# Clone and install
git clone https://github.com/verygoodplugins/mcp-evernote.git
cd mcp-evernote
npm install
# Run setup wizard
npm run setupNote: Evernote has stopped issuing new developer API keys to new applicants. If you are a new user, skip this section and use the cookie-based authentication method instead.
#### Interactive Setup (Recommended)
The auth script will prompt you for credentials if not found:
# Run authentication - prompts for API keys if needed
npx -p @verygoodplugins/mcp-evernote mcp-evernote-auth#### Environment Variables (Optional)
For automation, you can set credentials via environment variables:
# Create .env file (optional)
EVERNOTE_CONSUMER_KEY=your-consumer-key
EVERNOTE_CONSUMER_SECRET=your-consumer-secret
EVERNOTE_ENVIRONMENT=production # or 'sandbox'
OAUTH_CALLBACK_PORT=3000 # Default: 3000
# Polling configuration (optional)
EVERNOTE_POLLING_ENABLED=true # Auto-start polling
EVERNOTE_POLL_INTERVAL=3600000 # 1 hour (min: 900000 = 15 min)
EVERNOTE_WEBHOOK_URL=https://your-endpoint.com/webhooks/evernote # Webhook for change notifications<details> <summary><b>Claude Code Configuration</b></summary>
#### Quick Setup (Using NPX)
claude mcp add evernote "npx -y -p @verygoodplugins/mcp-evernote -c mcp-evernote" \
--env EVERNOTE_CONSUMER_KEY=your-key \
--env EVERNOTE_CONSUMER_SECRET=your-secret#### OAuth Authentication
/mcpNote: Claude Code handles OAuth automatically - no manual token management needed!
</details>
<details> <summary><b>Claude Desktop Configuration</b></summary>
#### Step 1: Authenticate
Using NPX (no installation required):
npx -y -p @verygoodplugins/mcp-evernote mcp-evernote-authThe auth script will:
.evernote-token.jsonEVERNOTE_ACCESS_TOKEN insteadOr if installed globally:
mcp-evernote-auth#### Step 2: Add to Configuration
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"evernote": {
"command": "npx",
"args": ["-y", "-p", "@verygoodplugins/mcp-evernote", "-c", "mcp-evernote"],
"env": {
"EVERNOTE_CONSUMER_KEY": "your-consumer-key",
"EVERNOTE_CONSUMER_SECRET": "your-consumer-secret",
"EVERNOTE_ACCESS_TOKEN": "your-access-token",
"EVERNOTE_ENVIRONMENT": "production"
}
}
}
}Or if installed globally:
{
"mcpServers": {
"evernote": {
"command": "mcp-evernote",
"env": {
"EVERNOTE_CONSUMER_KEY": "your-consumer-key",
"EVERNOTE_CONSUMER_SECRET": "your-consumer-secret"
}
}
}
}</details>
Since Evernote stopped issuing developer API keys to new applicants, new users can authenticate using the clipper-sso browser cookie from the Evernote web UI. This cookie carries the same format as a developer-issued access token and works directly as EVERNOTE_ACCESS_TOKEN — no Consumer Key or Consumer Secret required.
Security warning: Treat this value like a password. Anyone with it can access your Evernote account. Never commit it to git, paste it into chat logs, or share it publicly.
Credit: Discovered by community member @tdrayson. (Issue #49)
www.evernote.com S=s101:U=XXX:XXXXX:C=XXXX:P=XXX:A=en-chrome-clipper-xauth-new:V=2:H=XXXXXClaude Code:
claude mcp add evernote "npx -y -p @verygoodplugins/mcp-evernote -c mcp-evernote" \
--env EVERNOTE_ACCESS_TOKEN="S=s101:U=XXX:..."Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"evernote": {
"command": "npx",
"args": ["-y", "-p", "@verygoodplugins/mcp-evernote", "-c", "mcp-evernote"],
"env": {
"EVERNOTE_ACCESS_TOKEN": "S=s101:U=XXX:..."
}
}
}
}Note: EVERNOTE_NOTESTORE_URL is not required when using the cookie token — the server fetches it automatically at startup.clipper-sso token typically expires after roughly one year, or when you explicitly log out of Evernote in your browser. When it expires, log back in to www.evernote.com, re-extract the cookie, and update EVERNOTE_ACCESS_TOKEN.Recommended for new users: Cookie-Based Authentication (No API Key Needed).
Claude Code handles OAuth automatically via the /mcp command. Tokens are managed by Claude Code.
Run npx -y -p @verygoodplugins/mcp-evernote mcp-evernote-auth to authenticate via browser. The script saves .evernote-token.json for compatibility and also prints a token you can set as EVERNOTE_ACCESS_TOKEN.
EVERNOTE_ACCESS_TOKEN=your-token
EVERNOTE_NOTESTORE_URL=your-notestore-url
EVERNOTE_ALLOWED_FILE_ROOTS=/Users/you/Documents:/Users/you/Projects{
"env": {
"EVERNOTE_ACCESS_TOKEN": "your-access-token",
"EVERNOTE_NOTESTORE_URL": "your-notestore-url"
}
}This server automatically converts between Markdown and Evernote's ENML format:
<en-note>.- [ ] map to Evernote checkboxes <en-todo/>.- [x] map to <en-todo checked="true"/>. or file://...) are uploaded as Evernote resources automatically.evernote-resource:<hash> in Markdown.http(s) images remain links (download locally if you want them embedded). and other files become [file](evernote-resource:<hash>) so you can round-trip them safely.Limitations:
evernote-resource:<hash> references in Markdown if you want existing attachments to survive edits.#### evernote_create_note Create a new note in Evernote.
Parameters:
title (required): Note titlecontent (required): Note content (plain text or markdown)notebookName (optional): Target notebook nametags (optional): Array of tag namesExample:
Create a note titled "Meeting Notes" with content "Discussed Q4 planning" in notebook "Work" with tags ["meetings", "planning"]#### evernote_search_notes Search for notes using Evernote's search syntax.
Parameters:
query (required): Search querynotebookName (optional): Limit to specific notebookmaxResults (optional): Maximum results (default: 20, max: 100)Example:
Search for notes containing "project roadmap" in the "Work" notebook#### evernote_get_note Retrieve a specific note by GUID.
Parameters:
guid (required): Note GUIDincludeContent (optional): Include note content (default: true)Returned Markdown represents embedded resources with evernote-resource:<hash> URLs. Leave those references intact so attachments stay linked when you edit the note.#### evernote_update_note Update an existing note.
Parameters:
guid (required): Note GUIDtitle (optional): New titlecontent (optional): New contenttags (optional): New tags (replaces existing)#### evernote_delete_note Delete a note.
Parameters:
guid (required): Note GUID#### evernote_list_notebooks List all notebooks in your account.
#### evernote_create_notebook Create a new notebook.
Parameters:
name (required): Notebook namestack (optional): Stack name for organization#### evernote_list_tags List all tags in your account.
#### evernote_create_tag Create a new tag.
Parameters:
name (required): Tag nameparentTagName (optional): Parent tag for hierarchy#### evernote_get_user_info Get current user information and quota usage.
#### evernote_revoke_auth Revoke stored authentication token.
#### evernote_health_check Check the health and status of the Evernote MCP server.
Parameters:
verbose (optional): Include detailed diagnostic information (default: false)Returns:
Example:
Check Evernote connection health with verbose details#### evernote_reconnect Force reconnection to Evernote. Useful when experiencing "Not connected" errors.
Use this when:
Example:
Reconnect to Evernote#### evernote_start_polling Start polling for Evernote changes. Checks for new/updated/deleted notes and sends notifications to the configured webhook URL.
Example:
Start polling for Evernote changes#### evernote_stop_polling Stop the polling process.
#### evernote_poll_now Check for changes immediately without waiting for the next poll interval. Returns a list of detected changes.
Example:
Check for Evernote changes now#### evernote_polling_status Get the current polling configuration and status, including:
Evernote supports advanced search operators:
intitle:keyword - Search in titlesnotebook:name - Search in specific notebooktag:tagname - Search by tagcreated:20240101 - Search by creation dateupdated:day-1 - Recently updated notesresource:image/* - Notes with imagestodo:true - Notes with checkboxes-tag:archive - Exclude archived notesThis MCP server works seamlessly with the Claude Automation Hub for workflow automation:
// Example workflow tool
export default {
name: 'capture-idea',
description: 'Capture an idea to Evernote',
handler: async ({ idea, category }) => {
// The MCP server handles the Evernote integration
return {
tool: 'evernote_create_note',
args: {
title: `Idea: ${new Date().toISOString().split('T')[0]}`,
content: idea,
notebookName: 'Ideas',
tags: [category, 'automated']
}
};
}
};To enable synchronization with MCP memory service:
MCP_MEMORY_SERVICE_URL=http://localhost:8765Sync my "Important Concepts" notebook to memory for long-term retentionThe server includes automatic recovery from connection issues:
If you see "Not connected" errors, the server will usually recover automatically. You can also:
Reconnect to Evernote Check Evernote connection health with verbose details/mcp → Evernote → Authenticatenpx -p @verygoodplugins/mcp-evernote mcp-evernote-authFor detailed information about connection issues and recovery, see CONNECTION_TROUBLESHOOTING.md.
#### "Authentication required" error in Claude Desktop This means you haven't authenticated yet. Run the authentication script:
npx -p @verygoodplugins/mcp-evernote mcp-evernote-authOr if installed globally:
mcp-evernote-auth#### OAuth callback fails If the OAuth callback doesn't work:
OAUTH_CALLBACK_PORT in .env)#### Token expired If your token expires, the server will now detect this automatically and prompt you to re-authenticate:
/mcp command to re-authenticatenpx -p @verygoodplugins/mcp-evernote mcp-evernote-authOr use the reconnect tool to force immediate retry:
Reconnect to EvernoteThe server now handles most connection errors automatically:
If issues persist:
Evernote API has rate limits. If you encounter limits:
npm install
npm run buildnpm run devnpm testnpm run lint
npm run formatEVERNOTE_ACCESS_TOKEN, then Claude Code OAuth env, then .evernote-token.jsonEVERNOTE_ALLOWED_FILE_ROOTS; by default this is your home directory and the current working directoryContributions are welcome! Please:
develop; main is kept stable for Railway template deployments)GPL-3.0 - See LICENSE file for details.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.