mcpField
M
MCP Evernote

MCP Evernote

本地服务
verygoodplugins.com生产力335 天前更新

关于 MCP Evernote

MCP Evernote 是用于管理 Evernote 笔记、笔记本和标签的 MCP 服务,支持 OAuth 认证与 Markdown 到 ENML 的转换。面向在 Claude Code 或 Claude Desktop 中使用 Evernote 的用户。Evernote 已停止发放新的开发者 API 密钥,因此 README 提供了基于浏览器 Cookie 的认证方式。

主要功能

  1. 01创建、读取、更新和删除笔记
  2. 02Markdown 与 ENML 自动互转
  3. 03管理笔记本、堆栈与层级标签
  4. 04支持 Evernote 搜索语法
  5. 05轮询变更并发送 Webhook 通知
  6. 06提取附件文本

适用场景

  1. 01将 Claude 生成的内容保存为 Evernote 笔记
  2. 02按关键词或标签检索已有笔记
  3. 03整理笔记本与标签结构

MCP 相关

该项目是 MCP 服务,向 MCP 客户端提供 15 个工具,用于读写 Evernote 笔记、笔记本、标签和附件,并支持 get_resource 等参数化调用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"verygoodplugins-mcp-evernote": {
"command": "npx",
"args": [
"-y",
"@verygoodplugins/mcp-evernote"
]
}
}
}
启动命令npx -y @verygoodplugins/mcp-evernote

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@verygoodplugins/mcp-evernote1.2.3

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

MCP Evernote 服务器

Version License

一个 Model Context Protocol(MCP)服务,可与 Evernote 无缝集成,用于笔记管理、整理和知识捕获。兼容 Claude Code 和 Claude Desktop。

⚠️ 没有 API 密钥?使用浏览器 Cookie 身份验证

Evernote 已停止发放新的开发者 API 密钥。 如果你是新用户,无法获取 Consumer Key/Secret,请跳过标准 OAuth 设置,改用基于 Cookie 的身份验证方法,无需 API 密钥。

安装要求

Node.js

支持的 Node.js 版本:>=20.16.0 <21 或 >=22.3.0。 实际上,这意味着 Node 20.16+、22.3+、24 或更高版本;两个不支持的版本区间是 Node 21.x 和 Node 22.0–22.2。这并非随意设定的最低版本要求:它与 PDF 附件提取路径(pdf-parse 及其 传递依赖 pdfjs-dist)实际声明的 engines 范围一致,而且该范围确实是不连续的。

使用 node --version 检查版本。如果你使用的是 Node 18 或 21,或者 22.0–22.2,请在 安装前升级——Node 21 已于 2024 年 6 月结束生命周期,而 22.3+ 已取代早期的 22 补丁版本。

从 1.x 升级? 2.0.0 将 Node 最低版本要求从 18.18.0 提高,并更改了 evernote_get_resource 的默认行为:现在返回提取后的文本,而不是二进制 数据。此外,工具从 27 个整合为 15 个——已弃用的旧名称仍可用作别名,因此现有调用仍可运行。请参阅 MIGRATION.md。

Claude Desktop 用户:
  • 需要 OAuth 身份验证:是,运行一次身份验证命令(系统会提示输入 API 密钥)
  • 下载代码库:不需要,可直接通过 npm 使用 npx
  • API 凭据:身份验证脚本会提示你输入 Evernote API 密钥
  • 简单设置:只需一条命令即可完成身份验证和配置
Claude Code 用户:
  • OAuth 身份验证:通过 /mcp 命令自动处理
  • 下载代码库:不需要
  • 设置:通过一条命令安装

当前状态

✅ 可用功能
  • 🔐 OAuth 身份验证 - 为 Claude Desktop 提供交互式设置,为 Claude Code 自动处理
  • 📝 笔记操作
    • 使用纯文本或 Markdown 内容创建笔记
    • 读取和获取笔记内容
    • 更新现有笔记
    • 删除笔记
    • 自动进行 Markdown ↔ ENML 转换(GFM + 本地附件)
  • 📚 笔记本管理
    • 列出所有笔记本
    • 创建新笔记本
    • 使用笔记本组进行整理
  • 🏷️ 标签系统
    • 列出所有标签
    • 创建新标签
    • 支持层级标签
  • 🔍 高级搜索 - 支持完整的 Evernote 搜索语法
  • 👤 用户信息 - 获取账户详情和配额使用情况
  • 🤖 智能设置 - 交互式凭据提示和环境检测

快速开始

安装方式
选项 1:使用 NPX(无需安装)

最简单的方式——无需全局安装任何内容:

# 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"

变更通知

轮询变更

服务可以轮询 Evernote 以检查变更,并在创建、更新或删除笔记时发送 Webhook 通知。

配置
# 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 负载

检测到变更时,会向你的 Webhook URL 发送 POST 请求:

{
  "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"
    }
  ]
}
手动控制

使用 evernote_polling 工具控制轮询:

  • polling({action:"start"}) - 手动开始轮询
  • polling({action:"stop"}) - 停止轮询
  • polling({action:"poll"}) - 立即检查变更
  • polling({action:"status"}) - 获取轮询配置和状态
Evernote Webhooks(实时)

如需实时通知,Evernote 支持 Webhooks,但需要手动注册:

  1. 发送邮件至 [email protected],并提供:

    • 您的 Consumer Key
    • Webhook URL 端点
    • 任意过滤条件(可选)
  2. 他们会配置您的 Webhook,使其在笔记创建或更新时接收 HTTP GET 请求。


选项 2:全局安装

安装一次,随处使用:

# 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"
选项 3:本地开发

用于贡献或自定义:

# Clone and install
git clone https://github.com/verygoodplugins/mcp-evernote.git
cd mcp-evernote
npm install

# Run setup wizard
npm run setup

配置

1. 获取 Evernote API 凭据

注意: Evernote 已停止向新的申请者发放开发者 API 密钥。如果您是新用户,请跳过本节,改用基于 Cookie 的身份验证方法。

  1. 访问 Evernote Developers
  2. 创建一个新应用
  3. 复制您的 Consumer Key 和 Consumer Secret
2. 身份验证选项
交互式设置(推荐)

如果未找到凭据,身份验证脚本会提示您输入:

# Run authentication - prompts for API keys if needed
npx -p @verygoodplugins/mcp-evernote mcp-evernote-auth
环境变量(可选)

如需自动化,您可以通过环境变量设置凭据:

# 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

# Rate-limit transport (optional)
EVERNOTE_MAX_CONCURRENCY=3                  # Max simultaneous NoteStore RPCs (default: 3)
EVERNOTE_RATE_LIMIT_AUTO_RETRY_SECONDS=15   # Auto-retry a rate-limited call once if the wait is <= this many seconds; 0 = off
EVERNOTE_MAX_RESPONSE_CHARS=60000           # Total note-body chars per multi-note response; bodies past this are dropped with truncated:true

# Note body cache (optional)
EVERNOTE_NOTE_CACHE_SIZE=200                 # Max notes held in the USN-keyed body cache; 0 disables
EVERNOTE_NOTE_CACHE_SYNC_TTL_MS=30000        # How long a getSyncState result is trusted before re-checking for external edits

达到每小时速率限制时,工具错误会返回包含 error: "rate_limited" 和 retryAfterSeconds(Evernote 给出的精确退避时间窗口)的 JSON。限制并发 可以平缓突发请求,但无法恢复配额——配额按每个令牌的每小时调用 次数计算,因此持久有效的解决办法是减少调用次数并遵守退避时间。

重新读取相同笔记时,会从按 USN 索引的内存正文缓存中提供,而不是再次消耗 getNote 调用次数——这是解决重复读取笔记库触发每小时限制的直接办法。通过此服务编辑的 笔记会立即从缓存中移除;在其他位置所做的编辑会在 EVERNOTE_NOTE_CACHE_SYNC_TTL_MS 时间内通过同步状态探测发现。提取的 OCR / 附件文本始终实时重新读取,不会缓存。

3. 配置您的客户端
Claude Code 配置
快速设置(使用 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 身份验证
  1. 在 Claude Code 中输入 /mcp
  2. 选择 “Evernote”
  3. 选择 “Authenticate”
  4. 按照浏览器 OAuth 流程操作
  5. Claude Code 会自动存储并刷新令牌

注意: Claude Code 会自动处理 OAuth,无需手动管理令牌!

Claude Desktop 配置
第 1 步:身份验证

使用 NPX(无需安装):

npx -y -p @verygoodplugins/mcp-evernote mcp-evernote-auth

身份验证脚本会:

  1. 提示您输入 API 凭据(如果环境变量中没有)
  2. 打开浏览器进行 OAuth 身份验证
  3. 将兼容的令牌文件保存到 .evernote-token.json
  4. 显示访问令牌,以便您改用 EVERNOTE_ACCESS_TOKEN

或者,如果已全局安装:

mcp-evernote-auth
第 2 步:添加到配置

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"
      }
    }
  }
}

或者,如果已全局安装:

{
  "mcpServers": {
    "evernote": {
      "command": "mcp-evernote",
      "env": {
        "EVERNOTE_CONSUMER_KEY": "your-consumer-key",
        "EVERNOTE_CONSUMER_SECRET": "your-consumer-secret"
      }
    }
  }
}

基于 Cookie 的身份验证(无需 API 密钥)

由于 Evernote 已停止向新的申请者发放开发者 API 密钥,新用户可以使用 Evernote 网页界面中的 clipper-sso 浏览器 Cookie 进行身份验证。此 Cookie 的格式与开发者签发的访问令牌相同,可直接用作 EVERNOTE_ACCESS_TOKEN——无需 Consumer Key 或 Consumer Secret。

安全警告: 请像对待密码一样保护此值。任何拥有它的人都可以访问您的 Evernote 账户。切勿将其提交到 git、粘贴到聊天记录中或公开分享。

鸣谢: 由社区成员 @tdrayson 发现。(Issue #49)

步骤 1:提取 Cookie
  1. 在浏览器中登录 www.evernote.com
  2. 打开开发者工具:F12(Windows/Linux)或 Cmd+Option+I(Mac)
  3. 前往 Application 标签页 → Cookies → www.evernote.com
  4. 找到名为 clipper-sso 的 Cookie
  5. 复制其 Value,格式如下:
    S=s101:U=XXX:XXXXX:C=XXXX:P=XXX:A=en-chrome-clipper-xauth-new:V=2:H=XXXXX
    
步骤 2:配置客户端

Claude Code:

claude mcp add evernote "npx -y -p @verygoodplugins/mcp-evernote -c mcp-evernote" \
  --env EVERNOTE_ACCESS_TOKEN="S=s101:U=XXX:..."

Claude Desktop(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_ACCESS_TOKEN": "S=s101:U=XXX:..."
      }
    }
  }
}

注意: 使用 Cookie 令牌时,无需设置 EVERNOTE_NOTESTORE_URL——服务会在启动时自动获取。

注意事项
  • 令牌过期: clipper-sso 令牌通常约一年后过期,或者在你通过浏览器主动退出 Evernote 时过期。令牌过期后,请重新登录 www.evernote.com,再次提取 Cookie,并更新 EVERNOTE_ACCESS_TOKEN。
  • 浏览器会话: Cookie 与浏览器登录会话绑定。退出 Evernote 网页应用会使令牌失效。
  • 仅限生产环境: 此方法使用你的实时 Evernote 账户。该方法没有对应的沙盒环境。

身份验证方法

新用户推荐: 基于 Cookie 的身份验证(无需 API 密钥)。

1. Claude Code(自动)

Claude Code 会通过 /mcp 命令自动处理 OAuth。令牌由 Claude Code 管理。

2. Claude Desktop(手动)

运行 npx -y -p @verygoodplugins/mcp-evernote mcp-evernote-auth,通过浏览器进行身份验证。该脚本会保存 .evernote-token.json 以确保兼容性,并输出一个可设置为 EVERNOTE_ACCESS_TOKEN 的令牌。

3. 环境变量(CI/CD)
EVERNOTE_ACCESS_TOKEN=your-token
EVERNOTE_NOTESTORE_URL=your-notestore-url
EVERNOTE_ALLOWED_FILE_ROOTS=/Users/you/Documents:/Users/you/Projects
4. 直接使用令牌(高级)
{
  "env": {
    "EVERNOTE_ACCESS_TOKEN": "your-access-token",
    "EVERNOTE_NOTESTORE_URL": "your-notestore-url"
  }
}

可用工具

该服务提供 15 个工具(由 27 个合并而来)。已弃用的工具名称仍可作为别名使用,也可以通过 EVERNOTE_LEGACY_TOOLS=true 重新列出——完整的新旧名称映射请参阅 MIGRATION.md。主要变化: get_resource({guid, as}) 可按指定格式(text/binary/recognition/metadata)呈现附件; 传入 name/guid 时,list_notebooks/list_tags 会返回单个实体; update_note 使用 replacements[] 进行补丁式编辑;polling 和 connection 工具则根据 action 分派操作。

Markdown 支持

该服务会自动在 Markdown 与 Evernote 的 ENML 格式之间进行转换:

  • 创建/更新:Markdown 输入会被渲染为 <en-note> 中符合 ENML 的 HTML。
    • GFM 任务列表 - [ ] 会转换为 Evernote 复选框 <en-todo/>。
    • 已勾选的任务 - [x] 会转换为 <en-todo checked="true"/>。
    • 本地 Markdown 图片/文件(![alt](./path.png) 或 file://...)会自动上传为 Evernote 资源。
    • 通过在 Markdown 中引用 evernote-resource:<hash>,可保留现有附件。
    • 远程 http(s) 图片仍会作为链接保留(如需将其嵌入,请先下载到本地)。
    • 常见 Markdown 元素(标题、列表、代码块、表格、强调、链接)均会保留。
  • 获取:ENML 内容会转换回 Markdown(GFM),包括任务列表和附件。
    • 嵌入的图片会转换为 ![alt](evernote-resource:<hash>),其他文件会转换为 [file](evernote-resource:<hash>),以便安全地往返转换。

限制:

  • 不会自动获取远程 URL;请先将文件保存到本地,再引用该文件以将其嵌入。
  • 如果希望在编辑后保留现有附件,请在 Markdown 中保留 evernote-resource:<hash> 引用。
  • ENML 不支持的一些特殊 HTML 会被清理或移除。
笔记操作
evernote_create_note

在 Evernote 中创建新笔记。

参数:

  • title(必填):笔记标题
  • content(必填):笔记内容(纯文本或 Markdown)
  • notebookName(可选):目标笔记本名称
  • tags(可选):标签名称数组

示例:

Create a note titled "Meeting Notes" with content "Discussed Q4 planning" in notebook "Work" with tags ["meetings", "planning"]
evernote_search_notes

使用 Evernote 的搜索语法搜索笔记。返回笔记元数据以及 totalNotes;使用 offset/nextOffset 翻页。

参数:

  • query(必填):搜索查询(使用 "*" 匹配所有笔记)
  • notebookName(可选):仅搜索指定笔记本
  • maxResults(可选):每页结果数(默认值:20,最大值:100;当 includeContent 为 true 时上限为 25)
  • offset(可选):结果分页偏移量(默认值:0)
  • includeContent(可选):在 content 中包含每条笔记的完整正文,每条笔记调用一次 API(默认值:false)
  • format(可选):当 includeContent 为 true 时的正文呈现格式——markdown(默认值)、text 或 enml
  • includePreview(可选):为每条笔记包含约 300 个字符的纯文本预览(当 includeContent 为 true 时忽略)

将整个笔记本导出为文本(无需专用工具):设置 query: "*"、notebookName 和 includeContent,并使用 offset 翻页,直到 hasMore 为 false。

示例:

Search for notes containing "project roadmap" in the "Work" notebook
evernote_get_note

检索一条笔记(完整详情)或最多 25 条笔记(以正文为主)。

**参数:**必须且只能提供 guid 或 guids 之一。

  • guid:单条笔记的 GUID——完整详情,包括 PDF/图片 OCR 附件文本
  • guids:最多包含 25 个 GUID 的数组——仅返回元数据和 content(不含附件文本;需要附件文本时请使用单个 guid)。返回 { notes, failed?, aborted? };若批处理中途触发速率限制,则停止并返回部分结果以及可供恢复的剩余 GUID。
  • format(可选):正文呈现格式——markdown(默认值)、text 或 enml
  • includeContent(可选):包含笔记内容(默认值:true)
  • includeAttachmentText(可选,仅适用于单条笔记):提取 PDF/OCR 附件文本(默认值:true)

返回的 Markdown 使用 evernote-resource:<hash> URL 表示嵌入资源。编辑笔记时请保留这些引用,以便附件仍保持链接。

evernote_update_note

更新现有笔记。支持两种互斥模式:

完整更新模式参数:

  • guid(必填):笔记 GUID
  • title(可选):新标题
  • content(可选):新内容(支持 Markdown)
  • notebookName(可选):将笔记移至此笔记本
  • tags(可选):新标签(替换现有标签)

补丁模式参数(替代旧版 evernote_patch_note):

  • replacements(可选):{find, replace, replaceAll?} 数组,用于查找并替换 笔记正文中的内容,同时保留标题、标签、笔记本和附件。不能与上述完整更新字段同时使用。
evernote_delete_note

删除笔记。

参数:

  • guid(必填):笔记 GUID
笔记本操作
evernote_list_notebooks

列出账户中的所有笔记本;也可以传入某个笔记本的 name 或 guid,获取其完整详情(整合旧版 evernote_get_notebook)。

evernote_create_notebook

创建新笔记本。

参数:

  • name(必填):笔记本名称
  • stack(可选):用于整理的堆栈名称
evernote_update_notebook

重命名笔记本或将其移至其他堆栈。

参数:

  • guid(必填):笔记本 GUID
  • name(可选):新笔记本名称
  • stack(可选):堆栈名称——传入空字符串可将其从所属堆栈中移除
标签操作
evernote_list_tags

列出账户中的所有标签;也可以传入某个标签的 name 或 guid,获取其完整详情(整合旧版 evernote_get_tag)。

evernote_create_tag

创建新标签。

参数:

  • name(必填):标签名称
  • parentTagName(可选):用于构建层级结构的父标签
evernote_update_tag

重命名标签或更改其父级。

参数:

  • guid(必填):标签 GUID
  • name(可选):新标签名称
  • parentTagName(可选):父标签名称 — 传入空字符串可移除父级
附件与资源
evernote_get_resource

读取一个附件,并通过四种视图之一呈现。

⚠️ 2.0.0 中的重大变更。 此工具过去默认返回 base64 二进制数据。 现在默认返回提取的文本。传入 as: "binary" 可获取旧版行为。

参数:

  • guid(必填):资源 GUID(来自笔记的 resources[],通过 evernote_get_note 获取)
  • as(可选,默认值为 "text"):附件的呈现方式
    • "text" — 提取的文本。PDF 会先提取文本层内容;对于扫描文档,则回退到 Evernote 的 OCR 数据;图像使用 OCR。
    • "binary" — base64 编码的文件内容。
    • "recognition" — 原始 Evernote OCR 识别数据。
    • "metadata" — 文件名、MIME 类型、大小、哈希值和 hasRecognition。
  • includeData(可选,已弃用):true 会映射为 as:"binary",false 会映射为 as:"metadata"。

没有单独的工具可用于列出笔记的附件 — evernote_get_note 会在 resources[] 中返回这些附件。

示例:

Get the text of the PDF attached to that invoice note
evernote_add_resource_to_note

将本地文件附加到现有笔记。

参数:

  • noteGuid(必填):目标笔记 GUID
  • filePath(必填):本地文件路径。必须位于允许的根目录下 — 参见 EVERNOTE_ALLOWED_FILE_ROOTS(默认为你的主目录和 当前工作目录)。
  • filename(可选):覆盖附件的显示名称
连接与账户
evernote_connection

管理 Evernote 连接和账户。根据 action 分派 (替代旧版的 health_check、get_user_info、reconnect、revoke_auth):

  • action:"status" — 健康状态/诊断检查(服务端 + 身份验证状态)。传入 verbose:true 可获取详细诊断信息。
  • action:"user" — 当前用户信息和配额使用情况。
  • action:"reconnect" — 强制重新连接(适用于出现“未连接”错误时)。
  • action:"revoke" — 撤销已存储的身份验证令牌。

示例:

Check Evernote connection health with verbose details
轮询操作
evernote_polling

管理用于检测变更的后台轮询(检测到的变更会发送到 已配置的 webhook)。根据 action 分派(替代旧版的 start_polling、 stop_polling、poll_now、polling_status):

  • action:"start" — 按已配置的间隔开始轮询。
  • action:"stop" — 停止轮询。
  • action:"poll" — 立即检查变更;返回检测到的变更。
  • action:"status" — 当前轮询配置和状态(运行状态、间隔、 webhook URL、上次轮询时间、错误计数)。

示例:

Start polling for Evernote changes

搜索语法

Evernote 支持高级搜索运算符:

  • intitle:keyword - 在标题中搜索
  • notebook:name - 在指定笔记本中搜索
  • tag:tagname - 按标签搜索
  • created:20240101 - 按创建日期搜索
  • updated:day-1 - 搜索最近更新的笔记
  • resource:image/* - 搜索包含图像的笔记
  • todo:true - 搜索带复选框的笔记
  • -tag:archive - 排除已归档的笔记

与 Claude Automation Hub 集成

此 MCP 服务可与 Claude Automation Hub 无缝协作,实现工作流自动化:

// 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']
      }
    };
  }
};

内存服务集成

如需启用与 MCP 内存服务的同步:

  1. 在环境中设置内存服务 URL:
MCP_MEMORY_SERVICE_URL=http://localhost:8765
  1. 使用同步工具将重要笔记持久化到内存中:
Sync my "Important Concepts" notebook to memory for long-term retention

连接恢复能力

该服务包含连接问题的自动恢复机制:

自动功能
  • 自动重试:连接失败后会在 30 秒后自动重试
  • 令牌验证:主动检测过期的令牌
  • 平稳降级:服务在故障期间仍会保持运行
  • 清晰的错误消息:针对连接问题提供可采取行动的反馈
“未连接”错误

如果你看到“未连接”错误,服务通常会自动恢复。你也可以:

  1. 尝试使用重新连接工具(最快):

    Reconnect to Evernote
    
  2. 检查服务运行状况:

    Check Evernote connection health with verbose details
    
  3. 如有需要,重新进行身份验证:

    • Claude Code:/mcp → Evernote → Authenticate
    • Claude Desktop:npx -p @verygoodplugins/mcp-evernote mcp-evernote-auth

有关连接问题和恢复的详细信息,请参阅 CONNECTION_TROUBLESHOOTING.md。

故障排除

身份验证问题
Claude Desktop 中出现“需要身份验证”错误

这表示你尚未完成身份验证。运行身份验证脚本:

npx -p @verygoodplugins/mcp-evernote mcp-evernote-auth

或者,如果已全局安装:

mcp-evernote-auth
OAuth 回调失败

如果 OAuth 回调无法正常工作:

  1. 确保端口 3000 可用(或在 .env 中设置 OAUTH_CALLBACK_PORT)
  2. 检查防火墙设置
  3. 尝试使用其他浏览器
令牌已过期

如果令牌过期,服务现在会自动检测到并提示你重新进行身份验证:

  1. 在 Claude Code 中:使用 /mcp 命令重新进行身份验证
  2. 在 Claude Desktop 中:运行 npx -p @verygoodplugins/mcp-evernote mcp-evernote-auth

或者使用重新连接工具立即强制重试:

Reconnect to Evernote
连接错误

服务现在可以自动处理大多数连接错误:

  • 临时故障:30 秒后自动重试
  • 令牌过期:显示清晰的错误消息和重新进行身份验证的说明
  • 网络问题:服务保持运行并重试

如果问题仍然存在:

  • 检查 API 凭据是否正确
  • 确认使用了正确的环境(沙盒或生产环境)
  • 查看 CONNECTION_TROUBLESHOOTING.md 获取详细说明
速率限制

Evernote API 有速率限制。如果遇到限制:

  • 降低请求频率
  • 尽可能使用批量操作
  • 为频繁访问的数据实现缓存

开发

从源代码构建
npm install
npm run build
在开发模式下运行
npm run dev
测试
npm test
代码检查
npm run lint
npm run format

安全

  • 查找令牌时,优先使用 EVERNOTE_ACCESS_TOKEN,其次是 Claude Code OAuth 环境变量,最后是 .evernote-token.json
  • 切勿将令牌文件提交到版本控制中
  • 使用环境变量存储敏感配置
  • 本地文件附件仅限于 EVERNOTE_ALLOWED_FILE_ROOTS 指定的路径;默认情况下,该路径包括你的主目录和当前工作目录
  • 令牌默认在一年后过期

贡献

欢迎贡献!请:

  1. Fork 此仓库
  2. 创建功能分支
  3. 进行更改
  4. 如适用,添加测试
  5. 向 main 提交拉取请求

许可证

GPL-3.0 - 详情请参阅 LICENSE 文件。

支持

致谢

路线图

近期计划
  • 标签管理 - 为现有笔记添加或移除标签
  • ENML ↔ Markdown 转换器 - 在 Evernote 的 ENML 格式与 Markdown 之间进行双向转换
  • 实时同步钩子 - 检测通过 Evernote 桌面版或移动应用进行的更改
  • 数据库监控 - 监视 Evernote DB 服务以获取实时更新
未来增强
  • 网页剪藏工具功能
  • 富文本编辑支持
  • 文件附件处理
  • 共享笔记本支持
  • 商业账户功能
  • 模板系统
  • 批量操作
  • 导出/导入工具
  • 高级筛选选项
  • 提醒管理

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。