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 キーの発行を停止しているため、ブラウザの Cookie による認証方法も記載されています。

主な機能

  1. 01ノートの作成、読み取り、更新、削除
  2. 02Markdown と ENML の自動変換
  3. 03ノートブック、スタック、階層タグの管理
  4. 04Evernote の検索構文に対応
  5. 05変更のポーリングと Webhook 通知
  6. 06添付ファイルからテキストを抽出

活用シーン

  1. 01Claude で生成した内容を Evernote のノートとして保存
  2. 02キーワードやタグで既存のノートを検索
  3. 03ノートブックとタグの構成を整理

MCP 対応

このプロジェクトは MCP サーバーであり、Evernote のノート、ノートブック、タグ、添付ファイルを読み書きする 15 個のツールを MCP クライアントに提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの 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

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 を利用できますが、手動での登録が必要です。

  1. [email protected] に以下の情報をメールで送信します。

    • Consumer Key
    • Webhook URL エンドポイント
    • フィルター(任意)
  2. ノートの作成・更新イベント時に 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 ベースの認証方法を使用してください。

  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

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 認証
  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 のウェブ UI から取得できるブラウザー Cookie clipper-sso を使って認証できます。この Cookie は開発者向けに発行されたアクセストークンと同じ形式で、そのまま EVERNOTE_ACCESS_TOKEN として使用できます。Consumer Key や Consumer Secret は不要です。

セキュリティ警告: この値はパスワードと同様に扱ってください。この値を持つ人は誰でも、あなたの Evernote アカウントにアクセスできます。git にコミットしたり、チャットログに貼り付けたり、公開したりしないでください。

クレジット: コミュニティメンバーの @tdrayson が発見しました。(Issue #49)

ステップ 1:Cookie を抽出する
  1. ブラウザーで www.evernote.com にログインします
  2. DevTools を開きます: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 トークンは通常、約 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"/> に変換されます。
    • ローカルの 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(任意):1 ページあたりの結果数(デフォルト:20、最大:100。includeContent が true の場合は最大 25)
  • offset(任意):ページ分け用の結果オフセット(デフォルト:0)
  • includeContent(任意):各ノートの本文全体を content に含めます。ノートごとに API 呼び出しが 1 回行われます(デフォルト:false)
  • format(任意):includeContent が true の場合の本文の形式 — markdown(デフォルト)、text、または enml
  • includePreview(任意):ノートごとに約 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、または enml
  • includeContent(任意):ノートの内容を含めます(デフォルト:true)
  • includeAttachmentText(任意、単一ノートのみ):PDF/OCR の添付テキストを抽出します(デフォルト:true)

返される Markdown では、埋め込みリソースは evernote-resource:<hash> URL で表されます。ノートを編集する際、添付ファイルへのリンクが維持されるよう、これらの参照はそのままにしてください。

evernote_update_note

既存のノートを更新します。相互に併用できない 2 つのモードがあります。

全体更新モードのパラメーター:

  • guid(必須):ノート GUID
  • title(任意):新しいタイトル
  • 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(必須):ノートブック 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

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(必須):対象ノートの 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" — 強制的に再接続します(「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 メモリーサービスとの同期を有効にするには:

  1. 環境内でメモリーサービスの URL を設定します:
MCP_MEMORY_SERVICE_URL=http://localhost:8765
  1. 同期ツールを使用して、重要なノートをメモリーに保存します:
Sync my "Important Concepts" notebook to memory for long-term retention

接続の回復性

このサーバーには、接続の問題から自動的に復旧する機能が備わっています。

自動機能
  • 自動再試行:接続に失敗すると、30 秒後に自動的に再試行します
  • トークンの検証:期限切れのトークンを事前に検出します
  • グレースフルデグラデーション:障害発生中もサーバーは稼働を続けます
  • 明確なエラーメッセージ:接続の問題に対処するためのフィードバックを提示します
「Not Connected」エラー

「Not Connected」エラーが表示された場合、通常はサーバーが自動的に復旧します。以下の方法も試せます。

  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で「Authentication required」エラーが発生する

まだ認証されていないことを意味します。認証スクリプトを実行してください。

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年です

コントリビュート

コントリビュートを歓迎します。以下の手順でお願いします。

  1. リポジトリをフォークします
  2. 機能ブランチを作成します
  3. 変更を加えます
  4. 該当する場合はテストを追加します
  5. mainブランチに対してプルリクエストを送信します

ライセンス

GPL-3.0 - 詳細はLICENSEファイルを参照してください。

サポート

謝辞

ロードマップ

短期
  • タグ管理 - 既存のノートにタグを追加・削除する
  • ENML ↔ Markdownコンバーター - EvernoteのENML形式とMarkdownを双方向に変換する
  • リアルタイム同期フック - Evernoteのデスクトップアプリ/モバイルアプリで行われた変更を検知する
  • データベースの監視 - Evernote DBサービスを監視してライブ更新を確認する
今後の機能強化
  • Webクリッパー機能
  • リッチテキスト編集のサポート
  • ファイル添付の処理
  • 共有ノートブックのサポート
  • ビジネスアカウント機能
  • テンプレートシステム
  • 一括操作
  • エクスポート/インポートツール
  • 高度なフィルタリングオプション
  • リマインダー管理

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。