MCP Evernote について
MCP Evernote は、Evernote のノート、ノートブック、タグを管理する MCP サーバーで、OAuth 認証と Markdown から ENML への変換に対応しています。Claude Code と Claude Desktop で Evernote を利用する方を対象としています。Evernote は新規の開発者 API キーの発行を停止しているため、ブラウザの Cookie による認証方法も記載されています。
主な機能
- 01ノートの作成、読み取り、更新、削除
- 02Markdown と ENML の自動変換
- 03ノートブック、スタック、階層タグの管理
- 04Evernote の検索構文に対応
- 05変更のポーリングと Webhook 通知
- 06添付ファイルからテキストを抽出
活用シーン
- 01Claude で生成した内容を Evernote のノートとして保存
- 02キーワードやタグで既存のノートを検索
- 03ノートブックとタグの構成を整理
MCP 対応
このプロジェクトは MCP サーバーであり、Evernote のノート、ノートブック、タグ、添付ファイルを読み書きする 15 個のツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Evernote サーバー
Evernoteとシームレスに連携し、ノートの管理、整理、ナレッジの記録を可能にするModel Context Protocol(MCP)サーバーです。Claude CodeとClaude Desktopの両方で動作します。
⚠️ APIキーがありませんか?ブラウザーのCookie認証を使用してください
Evernoteは新しい開発者向けAPIキーの発行を停止しました。 新規ユーザーで、Consumer Key/Secretを取得できない場合は、通常のOAuthセットアップを省略して、代わりにCookieベースの認証方法(APIキー不要)を使用してください。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.xパッチが置き換えられています。
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キーの入力を求められます
- 簡単なセットアップ:認証と設定は、1つのコマンドだけで完了します
Claude Codeユーザー向け:
- OAuth認証:
/mcpコマンドで自動的に処理されます - リポジトリのダウンロード:不要です
- セットアップ:1つのコマンドでインストールできます
現在の状況
✅ 動作する機能
- 🔐 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 Webhook(リアルタイム)
リアルタイム通知には、Evernote の Webhook を利用できますが、手動での登録が必要です。
-
[email protected]に以下の情報をメールで送信します。- Consumer Key
- Webhook URL エンドポイント
- フィルター(任意)
-
ノートの作成・更新イベント時に HTTP GET リクエストを受信できるよう、Webhook を設定してもらえます。
オプション 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 ベースの認証方法を使用してください。
- Evernote Developers にアクセスします
- 新しいアプリケーションを作成します
- 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
1 時間あたりのレート制限に達すると、ツールのエラーは error: "rate_limited" と
retryAfterSeconds(Evernote が定める正確なバックオフ時間)を含む JSON を返します。同時実行数を制限するとリクエストの急増を緩和できますが、クォータは回復しません。クォータはトークンごとの 1 時間あたりの呼び出し回数であるため、継続的な対策は呼び出し回数を減らし、バックオフに従うことです。
同じノートを再読み込みする場合、getNote の呼び出しを再度消費せず、USN キーのインメモリ本文キャッシュからデータを取得します。これは、コーパスを繰り返し読み込むことで 1 時間あたりの制限に達する問題に対する直接的な対策です。このサーバー経由で編集したノートはすぐにキャッシュから削除されます。ほかの場所で行われた編集は、同期状態の確認を通じて 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 認証
- Claude Code で
/mcpと入力します - 「Evernote」を選択します
- 「Authenticate」を選択します
- ブラウザーで OAuth フローを完了します
- トークンは Claude Code によって自動的に保存・更新されます
注: Claude Code が OAuth を自動的に処理するため、手動でトークンを管理する必要はありません。
Claude Desktop の設定
ステップ 1:認証
NPX を使用する場合(インストール不要):
npx -y -p @verygoodplugins/mcp-evernote mcp-evernote-auth
認証スクリプトは以下を実行します。
- API 認証情報の入力を求めます(環境変数に設定されていない場合)
- OAuth 認証のためにブラウザーを開きます
- 互換性のあるトークンファイルを
.evernote-token.jsonに保存します 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 のウェブ UI から取得できるブラウザー Cookie clipper-sso を使って認証できます。この Cookie は開発者向けに発行されたアクセストークンと同じ形式で、そのまま EVERNOTE_ACCESS_TOKEN として使用できます。Consumer Key や Consumer Secret は不要です。
セキュリティ警告: この値はパスワードと同様に扱ってください。この値を持つ人は誰でも、あなたの Evernote アカウントにアクセスできます。git にコミットしたり、チャットログに貼り付けたり、公開したりしないでください。
クレジット: コミュニティメンバーの @tdrayson が発見しました。(Issue #49)
ステップ 1:Cookie を抽出する
- ブラウザーで www.evernote.com にログインします
- DevTools を開きます:F12(Windows/Linux)または Cmd+Option+I(Mac)
- Application タブ → Cookies →
www.evernote.comに移動します clipper-ssoという名前の Cookie を探します- 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トークンは通常、約 1 年後、またはブラウザーで 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)。
list_notebooks/list_tags は、name/guid を渡すと該当するエンティティを 1 つ返します。
update_note はパッチ形式の編集に replacements[] を使用します。また、polling と connection ツールは action に応じて処理を振り分けます。
Markdown のサポート
このサーバーは、Markdown と Evernote の ENML 形式を自動的に相互変換します。
- 作成/更新:Markdown の入力は
<en-note>内の ENML 対応 HTML に変換されます。- GFM のタスクリスト
- [ ]は Evernote のチェックボックス<en-todo/>に変換されます。 - チェック済みタスク
- [x]は<en-todo checked="true"/>に変換されます。
- GFM のタスクリスト
-
- ローカルの Markdown 画像/ファイル(
またはfile://...)は、自動的に Evernote のリソースとしてアップロードされます。
- ローカルの Markdown 画像/ファイル(
-
- 既存の添付ファイルは、Markdown で
evernote-resource:<hash>を参照することで保持されます。
- 既存の添付ファイルは、Markdown で
-
- リモートの
http(s)画像はリンクのままになります(埋め込むにはローカルにダウンロードしてください)。
- リモートの
-
- 一般的な Markdown 要素(見出し、リスト、コードブロック、表、強調、リンク)は保持されます。
- 取得:ENML のコンテンツは、タスクリストや添付ファイルを含め、Markdown(GFM)に変換されます。
- 埋め込み画像は
に、その他のファイルは[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(任意):1 ページあたりの結果数(デフォルト:20、最大:100。includeContentが true の場合は最大 25)offset(任意):ページ分け用の結果オフセット(デフォルト:0)includeContent(任意):各ノートの本文全体をcontentに含めます。ノートごとに API 呼び出しが 1 回行われます(デフォルト:false)format(任意):includeContentが true の場合の本文の形式 —markdown(デフォルト)、text、またはenmlincludePreview(任意):ノートごとに約 300 文字のプレーンテキストのプレビューを含めます(includeContentが true の場合は無視されます)
専用のツールを使わずにノートブック全体をテキストとしてエクスポートするには、query: "*" を指定し、notebookName と includeContent を設定して、hasMore が false になるまで offset を使ってページ分けします。
例:
Search for notes containing "project roadmap" in the "Work" notebook
evernote_get_note
1 件のノート(詳細全体)または最大 25 件のノート(本文を中心とした内容)を取得します。
パラメーター: guid または guids のいずれか 1 つだけを指定してください。
guid:単一のノート GUID — PDF/画像の OCR 添付テキストを含む詳細全体guids:最大 25 個の GUID の配列 — メタデータとcontentのみ(添付テキストなし。添付テキストを取得するには単一のguidを使用してください)。{ notes, failed?, aborted? }を返します。バッチ処理中にレート制限に達すると、部分的な結果と、再開のために残された GUID を返して停止します。format(任意):本文の形式 —markdown(デフォルト)、text、またはenmlincludeContent(任意):ノートの内容を含めます(デフォルト:true)includeAttachmentText(任意、単一ノートのみ):PDF/OCR の添付テキストを抽出します(デフォルト:true)
返される Markdown では、埋め込みリソースは
evernote-resource:<hash>URL で表されます。ノートを編集する際、添付ファイルへのリンクが維持されるよう、これらの参照はそのままにしてください。
evernote_update_note
既存のノートを更新します。相互に併用できない 2 つのモードがあります。
全体更新モードのパラメーター:
guid(必須):ノート GUIDtitle(任意):新しいタイトルcontent(任意):新しい内容(Markdown に対応)notebookName(任意):ノートの移動先のノートブックtags(任意):新しいタグ(既存のタグを置き換え)
パッチモードのパラメーター(以前の evernote_patch_note を置き換えます):
replacements(任意):ノート本文に適用する{find, replace, replaceAll?}形式の検索・置換編集の配列。タイトル、タグ、ノートブック、添付ファイルは維持されます。上記の全体更新フィールドとは併用できません。
evernote_delete_note
ノートを削除します。
パラメーター:
guid(必須):ノート GUID
ノートブック操作
evernote_list_notebooks
アカウント内のすべてのノートブックを一覧表示します。または、name か guid を渡すと、1 つのノートブックの詳細全体を取得します(以前の evernote_get_notebook を統合)。
evernote_create_notebook
新しいノートブックを作成します。
パラメーター:
name(必須):ノートブック名stack(任意):整理用のスタック名
evernote_update_notebook
ノートブックの名前を変更するか、別のスタックに移動します。
パラメーター:
guid(必須):ノートブック GUIDname(任意):新しいノートブック名stack(任意):スタック名 — スタックから削除するには空文字列を指定します
タグ操作
evernote_list_tags
アカウント内のすべてのタグを一覧表示します。または、タグの name か guid を渡すと、その詳細全体を取得します(以前の evernote_get_tag を統合)。
evernote_create_tag
新しいタグを作成します。
パラメーター:
name(必須):タグ名parentTagName(任意):階層化する場合の親タグ
evernote_update_tag
タグの名前を変更するか、親タグを変更します。
パラメーター:
guid(必須):タグの GUIDname(任意):新しいタグ名parentTagName(任意):親タグ名 — 親タグを解除するには空文字列を渡します
添付ファイルとリソース
evernote_get_resource
4 種類のビューのいずれかで、1 つの添付ファイルを読み取ります。
⚠️ 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(必須):対象ノートの GUIDfilePath(必須):ローカルファイルへのパス。許可されたルート配下にある必要があります —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"— 強制的に再接続します(「Not connected」エラーが発生した場合に便利です)。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 メモリーサービスとの同期を有効にするには:
- 環境内でメモリーサービスの URL を設定します:
MCP_MEMORY_SERVICE_URL=http://localhost:8765
- 同期ツールを使用して、重要なノートをメモリーに保存します:
Sync my "Important Concepts" notebook to memory for long-term retention
接続の回復性
このサーバーには、接続の問題から自動的に復旧する機能が備わっています。
自動機能
- 自動再試行:接続に失敗すると、30 秒後に自動的に再試行します
- トークンの検証:期限切れのトークンを事前に検出します
- グレースフルデグラデーション:障害発生中もサーバーは稼働を続けます
- 明確なエラーメッセージ:接続の問題に対処するためのフィードバックを提示します
「Not Connected」エラー
「Not Connected」エラーが表示された場合、通常はサーバーが自動的に復旧します。以下の方法も試せます。
-
再接続ツールを試す(最速です):
Reconnect to Evernote -
サーバーの状態を確認する:
Check Evernote connection health with verbose details -
必要に応じて再認証する:
- Claude Code:
/mcp→ Evernote → Authenticate - Claude Desktop:
npx -p @verygoodplugins/mcp-evernote mcp-evernote-auth
- Claude Code:
接続の問題と復旧について詳しくは、CONNECTION_TROUBLESHOOTING.mdを参照してください。
トラブルシューティング
認証の問題
Claude Desktopで「Authentication required」エラーが発生する
まだ認証されていないことを意味します。認証スクリプトを実行してください。
npx -p @verygoodplugins/mcp-evernote mcp-evernote-auth
グローバルにインストールしている場合は、次のコマンドを実行してください。
mcp-evernote-auth
OAuthコールバックが失敗する
OAuthコールバックが機能しない場合:
- ポート3000が使用可能であることを確認します(または
.envでOAUTH_CALLBACK_PORTを設定します) - ファイアウォールの設定を確認します
- 別のブラウザーを試します
トークンの有効期限切れ
トークンの有効期限が切れると、サーバーが自動的に検知し、再認証を促すようになりました。
- Claude Code:
/mcpコマンドを使用して再認証します - 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年です
コントリビュート
コントリビュートを歓迎します。以下の手順でお願いします。
- リポジトリをフォークします
- 機能ブランチを作成します
- 変更を加えます
- 該当する場合はテストを追加します
mainブランチに対してプルリクエストを送信します
ライセンス
GPL-3.0 - 詳細はLICENSEファイルを参照してください。
サポート
謝辞
- Model Context Protocol SDKを使用して構築されています
- Evernote APIを利用しています
- Very Good Pluginsエコシステムの一部です
ロードマップ
短期
- タグ管理 - 既存のノートにタグを追加・削除する
- ENML ↔ Markdownコンバーター - EvernoteのENML形式とMarkdownを双方向に変換する
- リアルタイム同期フック - Evernoteのデスクトップアプリ/モバイルアプリで行われた変更を検知する
- データベースの監視 - Evernote DBサービスを監視してライブ更新を確認する
今後の機能強化
- Webクリッパー機能
- リッチテキスト編集のサポート
- ファイル添付の処理
- 共有ノートブックのサポート
- ビジネスアカウント機能
- テンプレートシステム
- 一括操作
- エクスポート/インポートツール
- 高度なフィルタリングオプション
- リマインダー管理
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。