Cursor、Cline、VS CodeのAIエージェントにメールを設定する方法(MCP)
Cursor、Cline、VS Codeのコーディングエージェントにメールへのアクセスを与える方法。CursorはOAuth、Clineやカスタムクライアントはスコープを絞ったAPIキーをMCPで使います。設定手順をすべて解説します。
要点から説明します。エディターのコーディングエージェントに実際の受信トレイへのアクセスを与えるには、MCPエンドポイントhttps://www.mcpemails.com/api/mcpを1つ指定するだけです。CursorはOAuthに対応しているので、URLを貼り付けてログインすれば完了です。Cline、VS CodeのMCP設定の直接編集、自作スクリプトはOAuthの手順を行わないため、スコープを絞ったAPIキーをAuthorization: Bearerヘッダーで送って認証します。エンドポイントもツールも同じで、入り口が2つあるだけです。
このガイドでは両方の方法を説明し、read:emailとsend:emailだけにスコープを絞ったAPIキーの発行方法を紹介します。最後に、私が実際に使っている開発ワークフローを紹介します。エディターを離れずに、エージェントが受信トレイを仕分けして返信を送ってくれます。まず全体像を知りたい場合は、柱となるガイドAIエージェントにメールへのアクセスを与える方法から読んでください。
クライアントを設定する前に:受信トレイを接続する
MCPサーバーがメールを所有するわけではありません。すでに使っているプロバイダーとのリアルタイムの接続を仲介し、呼び出しのたびにメッセージを取得して、その後破棄します。メールに関するものは何も保存されません。そのため、最初のステップはエディターではなくダッシュボードで行います。
ダッシュボード → 受信トレイ → 受信トレイを接続に進み、プロバイダーを選びます。
- Gmail → IMAP経由のGoogleのアプリ パスワード。2 段階認証プロセスを有効にし、myaccount.google.com/apppasswordsでアプリ パスワードを作成して、Gmailのフルアドレスと一緒に16文字を貼り付けます。Google Workspaceの管理者は、ドメイン全体でアプリ パスワードを無効にできます。
- Outlook / Microsoft 365 → Microsoftでログインする方式のOAuthで、アプリ パスワードは不要です。個人用のOutlook.com、Hotmail、Live、MSNのアカウントはすぐに接続できます。職場や学校のMicrosoft 365アカウントでは、先にIT管理者が組織全体に対してアプリを一度承認する必要がある場合があります。ダッシュボードに管理者へ送るリンクが表示されます。
- iCloud、Fastmail、Yahoo、Zoho、その他の一般的なIMAPホスト → アプリ用パスワード。プロバイダーの設定で生成し(iCloudならappleid.apple.com)、貼り付けます。
FastmailはOAuthではなくアプリ パスワードのみなので、Googleのような同意画面を探す必要はありません。iCloudやFastmailを使っている場合は、iCloud、Fastmail、IMAPの設定手順にプロバイダーごとの詳細があります。Outlookの場合はOutlookとMicrosoft 365の接続をご覧ください。
受信トレイを接続すれば、エージェントはツールを通じてそこにアクセスします。エディターの設定にUUIDやパスワードを貼り付けることはありません。
Cursor:URLを貼り付けてログインするだけ
CursorはMCPサーバー向けのOAuth 2.0に対応しているので、手間のかからない方法で接続できます。APIキーも、設定ファイルで管理するシークレットもありません。
- Cursorの設定を開き、MCPサーバーのセクションを探します。
- URL
https://www.mcpemails.com/api/mcpで新しいサーバーを追加します。 - Cursorがブラウザーのウィンドウを開きます。MCPEmailsアカウントにログインし、エージェントに与えるスコープ(
read:email、send:email、またはその両方)を承認します。 - 接続が緑色になり、Cursorのツール一覧にメールのツールが表示されます。
内部ではPKCEを使ったOAuth 2.0の認可コードフローが動いており、Cursorが持つトークンのスコープは承認した範囲に限られます。read:emailだけを許可した場合、エージェントは送信できません。使い終わったら、ダッシュボード → APIキー(OAuthの許可もここにあります)からワンクリックで接続を取り消せば、Cursorのアクセスはすぐに無効になります。
Claude Desktopやclaude.aiも使っている場合は、同じように貼り付けて承認する流れで接続できます。
Cline、VS Codeの直接設定、自作スクリプト:APIキーを使う
Cline、VS Codeの素のmcp設定、JetBrains、自分で書いたスクリプトは、OAuthのハンドシェイクを実装していません。これらではAPIキーを作成し、ベアラートークンとして送ります。承認画面をクリックする人がいないCIジョブやcronで動かす自動化にも、この方法が適しています。
ステップ1:スコープを絞ったAPIキーを作成する
ダッシュボード → APIキーでキーを作成をクリックします。あとで見分けがつく名前(cline-laptop、triage-cron)を付け、スコープを選びます。
read:email:一覧表示、検索、読み取り。send:email:送信と返信。
クライアントに必要な権限だけを与えてください。読み取り専用の仕分けアシスタントにsend:emailは不要です。キーは一度しか表示されないので、表示されたらすぐにコピーしてください。あとから見ることはできません。なくした場合は復元ではなく、キーをローテーションします。
ステップ2:クライアントの設定にキーを入れる
Cline(およびほとんどのVS CodeのMCP設定)では、MCP設定のJSONにベアラーヘッダー付きでサーバーを追加します。
{
"mcpServers": {
"mcpemails": {
"url": "https://www.mcpemails.com/api/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
エディターを触る前に、cURLで直接呼び出してキーが使えるか確認できます。
curl -s https://www.mcpemails.com/api/mcp \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
ツール一覧が返ってくれば接続できています。-32001エラーはキーが無効であることを、-32004(HTTP 403)はツールに必要なスコープがキーにないことを意味します。どちらも再試行しても解決しないので、ループさせずにキーを直してください。キーはコミットしないでください。環境変数から読み込み、gitに入れないようにします。どこでどの認証方式を使うか迷っているなら、AIのメールアクセスにおけるOAuthとAPIキーの比較でトレードオフを整理しています。
エージェントが使えるツール
どちらの方法でも、使えるツールは同じです。アクションで切り替える少数の統合ツールで作業をカバーします。
inbox_list:最初に必ず呼び出し、接続済みの受信トレイとそのIDを調べます。email_read(アクションlist):新しい順に、ページ単位で一覧表示します。email_read(アクションread):解析済みのプレーンテキスト、必要に応じてサニタイズ済みのHTML、添付ファイルを返します。email_read(アクションsearch):差出人、件名、日付、未読状態などの構造化された項目で検索します。各プロバイダー独自の検索に変換されます。email_compose(アクションsend):CC/BCC、HTML、10 MBまでの添付ファイル付きでメールを作成します。email_compose(アクションreply):In-Reply-ToとReferencesのヘッダーを自動で設定するので、スレッドが崩れません。
ほかにも、フラグと移動(email_organize)、フォルダー、予約送信、連絡先のツールがありますが、実際の作業の大半は上のツールでこなせます。
元が取れる開発ワークフロー
ここからが本題です。私はエディターに読み取りと送信のキーを設定しておき、普段なら受信トレイに時間を取られる場面でエージェントに頼っています。
朝の仕分けは、チャットパネルに直接こう入力します。
inbox_listを呼び出してから、仕事用の受信トレイで過去12時間の未読メールを一覧にして。「返信が必要」「参考情報」「不要」に分けて、参考情報はそれぞれ1行でまとめて。
エージェントはinbox_listを実行し、次にunreadを指定してアクションlistでemail_readを実行し、重要なものを読んで、整理した要約を返します。返信したいものが見つかったら、続けてこう頼みます。
デザインの外注先からのメッセージに、木曜の午後2時で大丈夫だと返信して。短めに。
エージェントはアクションreplyでemail_composeを呼び出し、スレッドの処理も自動で行います。返信は私のGmailから送られるので、私のアドレスとドメインの評価のまま相手に届きます。仕分けのプロンプトについて詳しくは、AIエージェントに受信トレイを仕分け・要約させる方法をご覧ください。
制約が1つあります。Webhookはありません。サーバーは新着メールを通知しません。届いたメッセージにエージェントを反応させたい場合は、ポーリングします。つまり、スケジュールに沿ってunread: trueを指定し、アクションlistでemail_readを実行します。これは意図した設計で、MCPを使った自動返信のように反応型の仕組みを作るときの組み立て方に関わります。
スクリプトからアクセスするときのレート制限
cronジョブや短い間隔で回るエージェントのループからサーバーを使う場合は、制限に注意してください。どのプランにもワークスペース全体の1分あたりの上限があり、APIキーごとにプランに応じた1分、1時間、1日の枠があります。そのため、1つのキーでプランの1分あたりの上限をすべて使うこともでき、複数のキーはその上限を共有します。成功したtools/callのレスポンスにはRateLimit-Limit、RateLimit-Remaining、RateLimit-Resetが含まれ、429のレスポンスにはRetry-Afterが含まれます。各プランの上限は料金ページをご覧ください。
レート制限に達すると、サーバーは再試行可能なエラー(コード-32003)を返し、data.retry_afterに秒数が入ります。その値に従い、その時間だけ待ってから再試行してください。ただし、すべてが再試行できるわけではありません。プランの月間アクション数を使い切った場合、呼び出しはisError: trueと_meta["com.mcpemails/usage_limit"]ブロックを含む通常のツール結果を返し、retry_afterはありません。reset_atまでは何度再試行しても解除されません。また、一般的なエラーでemail_composeの送信をむやみに再試行しないでください。重複して送信されてしまいます。まず実際に送信されたかどうかを確認してください。
まとめ
CursorはURLとログインだけで接続できます。それ以外は、スコープを絞ったキーとベアラーヘッダーが必要です。どちらも同じエンドポイントと同じツールを使い、認証情報をリポジトリにもモデルのコンテキストにも入れません。エディター以外でChatGPTやCodexを使っていますか。ChatGPTのメール設定ガイドで両方を説明しています。