evernote-mcp 0.3.2
Model Context Protocol (MCP) server for Evernote operations
Requires Python: <4.0,>=3.10
Keywords: evernote, mcp, model-context-protocol, ai, claude

# Evernote MCP Server

[English](README.md) | [简体中文](README.zh-CN.md)

Model Context Protocol (MCP) server for Evernote - enables Claude Code to interact with your Evernote notes.

> **Supports both [International Evernote](https://evernote.com) and [Yinxiang Biji (印象笔记)](https://yinxiang.com)**

## Features

- **Notebook operations** (create, read, update, delete, list, get default)
- **Note operations** (create, read, update, delete, copy, move, list, versions)
- **Tag management** (create, read, update, delete, list, find by notebook)
- **Saved searches** (create, read, update, delete, list)
- **Resource/Attachment operations** (get, update, data, attributes, recognition)
- **Advanced note features** (get content, search text, tag names, note versions)
- **Sync & utilities** (sync state, note counts, find related content)
- Full-text search using Evernote's search syntax
- Multiple output formats (ENML, text, markdown, JSON)

## Installation

```bash
npm install -g @anthropic/claude-code
uvx evernote-mcp
```

## Configuration

### 1. Get Evernote Developer Token

**International Evernote**: https://evernote.com/api/DeveloperToken.action

**Yinxiang Biji (印象笔记)**: https://app.yinxiang.com/api/DeveloperToken.action

### 2. Configure Claude Code

Edit `~/.config/claude-code/config.json`:

**For International Evernote:**
```json
{
  "mcpServers": {
    "evernote": {
      "command": "uvx",
      "args": ["evernote-mcp"],
      "env": {
        "EVERNOTE_AUTH_TOKEN": "your_token_here",
        "EVERNOTE_BACKEND": "evernote"
      }
    }
  }
}
```

**For Yinxiang Biji (印象笔记):**
```json
{
  "mcpServers": {
    "evernote": {
      "command": "uvx",
      "args": ["evernote-mcp"],
      "env": {
        "EVERNOTE_AUTH_TOKEN": "your_token_here",
        "EVERNOTE_BACKEND": "china"
      }
    }
  }
}
```

## Usage Examples

```bash
claude-code
```

```
User: Create a note in my "Project Notes" notebook summarizing the current TODO items from src/todo.py

Claude: I'll read the TODO file and create a note for you.
[Creates note with extracted TODOs]
```

```
User: Search my Evernote for notes about "API design" and summarize the key points

Claude: Let me search for those notes and analyze them.
[Searches and summarizes findings]
```

```
User: Create a notebook called "Code Reviews" and add a note template

Claude: I'll set that up for you.
[Creates notebook and template note]
```

```
User: Find all notes tagged with "important" and list them by update time

Claude: I'll search for notes with that tag and sort them.
[Uses search_notes and list_tags]
```

## Environment Variables

| Variable | Default | Description |
|----------|---------|-------------|
| `EVERNOTE_AUTH_TOKEN` | - | Your developer token (required) |
| `EVERNOTE_BACKEND` | `evernote` | `evernote` (International) or `china` (印象笔记) |

## Available Tools

### Notebooks (6 tools)
- `create_notebook(name, stack)` - Create a new notebook
- `list_notebooks()` - List all notebooks
- `get_notebook(guid)` - Get notebook details by GUID
- `update_notebook(guid, name, stack)` - Update notebook name/stack
- `expunge_notebook(guid)` - Permanently delete notebook
- `get_default_notebook()` - Get the default notebook for new notes

### Notes (8 tools)
- `create_note(title, content, notebook_guid, tags, format)` - Create a new note
- `get_note(guid, output_format)` - Get note (enml/text/markdown/json)
- `update_note(guid, title, content, format)` - Update note title/content
- `delete_note(guid)` - Move note to trash
- `expunge_note(guid)` - Permanently delete note
- `copy_note(guid, target_notebook_guid)` - Copy note to another notebook
- `move_note(guid, target_notebook_guid)` - Move note to another notebook
- `list_notes(notebook_guid, limit)` - List notes in notebook

### Tags (7 tools)
- `list_tags()` - List all tags
- `get_tag(guid)` - Get tag details by GUID
- `create_tag(name, parent_guid)` - Create a new tag
- `update_tag(guid, name, parent_guid)` - Update tag name/parent
- `expunge_tag(guid)` - Permanently delete tag
- `list_tags_by_notebook(notebook_guid)` - List tags in a specific notebook
- `untag_all(guid)` - Remove tag from all notes

### Saved Searches (5 tools)
- `list_searches()` - List all saved searches
- `get_search(guid)` - Get saved search by GUID
- `create_search(name, query)` - Create a new saved search
- `update_search(guid, name, query)` - Update saved search
- `expunge_search(guid)` - Delete saved search

### Advanced Note Operations (5 tools)
- `get_note_content(guid)` - Get ENML content only
- `get_note_search_text(guid, note_only, tokenize_for_indexing)` - Get extracted plain text
- `get_note_tag_names(guid)` - Get tag names for a note
- `list_note_versions(note_guid)` - List previous versions (Premium only)
- `get_note_version(note_guid, update_sequence_num, ...)` - Get specific version (Premium)

### Resources/Attachments (13 tools)
- `get_resource(guid, with_data, with_recognition, ...)` - Get resource by GUID
- `get_resource_data(guid, encode)` - Get resource binary data (base64)
- `get_resource_alternate_data(guid, encode)` - Get alternate data (e.g., PDF preview)
- `get_resource_attributes(guid)` - Get resource metadata
- `get_resource_by_hash(note_guid, content_hash, ...)` - Find resource by MD5 hash
- `get_resource_recognition(guid, encode)` - Get OCR/recognition data
- `get_resource_search_text(guid)` - Get extracted search text from resource
- `update_resource(guid, mime, attributes)` - Update resource metadata
- `set_resource_application_data_entry(guid, key, value)` - Set app data
- `unset_resource_application_data_entry(guid, key)` - Remove app data
- `get_resource_application_data(guid)` - Get all application data
- `get_resource_application_data_entry(guid, key)` - Get specific app data entry

### Search & Utilities (4 tools)
- `search_notes(query, notebook_guid, limit)` - Search using Evernote query syntax
- `get_sync_state()` - Get sync state information
- `find_note_counts(query, with_trash)` - Get note counts per notebook/tag
- `find_related(note_guid, plain_text, max_notes, ...)` - Find related notes/tags/notebooks

## License

MIT