MCP Headless Gmail Server について
MCP Headless Gmail Server は、Gmail の読み取りと送信を行う MCP サーバーです。認証情報はツールの引数として渡すため、ローカルの認証情報やトークンファイルは不要です。ブラウザのないリモート環境や Docker での運用に適しています。
主な機能
- 01本文先頭 1k 文字付きの最新メール取得
- 021k 単位での全文取得
- 03Gmail メールの送信
- 04Google アクセストークンの更新
- 05リフレッシュトークンの自動処理
活用シーン
- 01ブラウザのないリモート環境から Gmail にアクセスする
- 02Docker でメール関連の MCP サーバーを実行する
- 03マーケティング用途など Gmail のみを扱う自動化処理
MCP 対応
このプロジェクトは MCP サーバーであり、Gmail の読み取り、送信、トークン更新のツールを MCP クライアントに公開します。呼び出し側がツール引数で Google API 認証情報を指定します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Headless Gmail サーバー(NPM と Docker)
ローカルでの認証情報やトークンの設定なしで、Gmail の取得と送信を可能にする MCP(Model Context Protocol)サーバーです。
MCP Headless Gmail サーバーを選ぶ理由
主な利点
- ヘッドレスかつリモートでの動作:Docker の外部での実行やローカルファイルへのアクセスが必要な他の MCP Gmail ソリューションとは異なり、このサーバーはブラウザーもローカルファイルへのアクセスも不要で、リモート環境で完全にヘッドレスで動作します。
- 分離されたアーキテクチャ:任意のクライアントで OAuth フローを個別に完了し、その後、認証情報をコンテキストとしてこの MCP サーバーに渡せます。これにより、認証情報の保存とサーバーの実装を完全に分離できます。
あると便利な特徴
- 機能を絞った設計:特にマーケティング用途など、多くのユースケースでは Gmail へのアクセスだけが必要で、カレンダーなどの追加の Google サービスは必要ありません。そのような用途に最適な、機能を絞った実装です。
- Docker 対応:適切に分離され、環境に依存しない、ワンクリックでのセットアップを実現するため、コンテナー化を念頭に設計されています。
- 信頼性の高い依存関係:十分に保守されている google-api-python-client ライブラリを基盤としています。
機能
- Gmail の最新メールを、本文の先頭 1k 文字とともに取得
- offset パラメーターを使い、本文全体を 1k 文字ずつ取得
- Gmail 経由でメールを送信
- アクセストークンを個別に更新
- リフレッシュトークンを自動処理
前提条件
- Python 3.10 以降
- Google API の認証情報(クライアント ID、クライアントシークレット、アクセストークン、リフレッシュトークン)
インストール
# Clone the repository
git clone https://github.com/baryhuang/mcp-headless-gmail.git
cd mcp-headless-gmail
# Install dependencies
pip install -e .
Docker
Docker イメージのビルド
# Build the Docker image
docker build -t mcp-headless-gmail .
Claude Desktop での使用
Claude Desktop で Docker イメージを使用するには、Claude の設定に以下を追加します。
docker
{
"mcpServers": {
"gmail": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"buryhuang/mcp-headless-gmail:latest"
]
}
}
}
npm 版
{
"mcpServers": {
"gmail": {
"command": "npx",
"args": [
"@peakmojo/mcp-server-headless-gmail"
]
}
}
}
注:この設定では、「ツールの使用」セクションに示すように、ツールの呼び出し時に Google API の認証情報を渡す必要があります。認証情報の保存とサーバーの実装を分離するため、Gmail の認証情報は環境変数として渡しません。
クロスプラットフォーム向けの公開
Docker イメージを複数のプラットフォーム向けに公開するには、docker buildx コマンドを使用できます。以下の手順に従ってください。
-
新しいビルダーインスタンスを作成する(まだ作成していない場合):
docker buildx create --use -
複数のプラットフォーム向けにイメージをビルドしてプッシュする:
docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t buryhuang/mcp-headless-gmail:latest --push . -
指定したプラットフォームでイメージが利用可能であることを確認する:
docker buildx imagetools inspect buryhuang/mcp-headless-gmail:latest
使用方法
このサーバーは、MCP ツールを通じて Gmail の機能を提供します。専用のトークン更新ツールにより、認証処理が簡素化されています。
サーバーの起動
mcp-server-headless-gmail
ツールの使用
Claude のような MCP クライアントを使用する場合、認証を処理する方法は主に 2 つあります。
トークンの更新(初回、またはトークンの有効期限が切れた場合)
アクセストークンとリフレッシュトークンの両方がある場合:
{
"google_access_token": "your_access_token",
"google_refresh_token": "your_refresh_token",
"google_client_id": "your_client_id",
"google_client_secret": "your_client_secret"
}
アクセストークンの有効期限が切れている場合は、リフレッシュトークンだけで更新できます:
{
"google_refresh_token": "your_refresh_token",
"google_client_id": "your_client_id",
"google_client_secret": "your_client_secret"
}
これにより、新しいアクセストークンとその有効期限が返されます。以降の呼び出しで使用できます。
最近のメールの取得
各メール本文の最初の1,000文字を含む、最近のメールを取得します。
{
"google_access_token": "your_access_token",
"max_results": 5,
"unread_only": false
}
レスポンスには以下が含まれます。
- メールのメタデータ(id、threadId、from、to、subject、date など)
- メール本文の最初の1,000文字
body_size_bytes:メール本文の合計サイズ(バイト単位)contains_full_body:本文全体が含まれているか(true)、または途中で切り詰められているか(false)を示すブール値
メール本文全体の取得
本文が1,000文字を超えるメールの場合、チャンク単位で全内容を取得できます。
{
"google_access_token": "your_access_token",
"message_id": "message_id_from_get_recent_emails",
"offset": 0
}
スレッド ID を指定してメールの内容を取得することもできます。
{
"google_access_token": "your_access_token",
"thread_id": "thread_id_from_get_recent_emails",
"offset": 1000
}
レスポンスには以下が含まれます。
- 指定したオフセットから始まる、メール本文の1,000文字分のチャンク
body_size_bytes:メール本文の合計サイズchunk_size:返されたチャンクのサイズcontains_full_body:チャンクに本文の残りすべてが含まれているかを示すブール値
長いメッセージのメール本文全体を取得するには、contains_full_body が true になるまで、オフセットを毎回1,000ずつ増やして順番に呼び出します。
メールの送信
{
"google_access_token": "your_access_token",
"to": "[email protected]",
"subject": "Hello from MCP Gmail",
"body": "This is a test email sent via MCP Gmail server",
"html_body": "<p>This is a <strong>test email</strong> sent via MCP Gmail server</p>"
}
トークンの更新ワークフロー
- 次のいずれかを指定して、
gmail_refresh_tokenツールを呼び出します。- すべての認証情報(アクセストークン、リフレッシュトークン、クライアント ID、クライアントシークレット)
- アクセストークンの期限が切れている場合は、リフレッシュトークン、クライアント ID、クライアントシークレットのみ
- 返された新しいアクセストークンを、その後の API 呼び出しで使用します。
- トークンの期限切れを示すレスポンスが返された場合は、
gmail_refresh_tokenツールを再度呼び出して新しいトークンを取得します。
この方法により、ほとんどの API 呼び出しでクライアント認証情報を毎回指定する必要がなくなり、必要に応じてトークンを更新できます。
Google API 認証情報の取得
必要な Google API 認証情報を取得するには、次の手順に従います。
- Google Cloud Console にアクセスします
- 新しいプロジェクトを作成します
- Gmail API を有効にします
- OAuth 同意画面を設定します
- OAuth クライアント ID の認証情報を作成します(アプリケーションの種類として「Desktop app」を選択します)
- クライアント ID とクライアントシークレットを保存します
- 次のスコープを指定して OAuth 2.0 を使用し、アクセストークンとリフレッシュトークンを取得します。
https://www.googleapis.com/auth/gmail.readonly(メールの読み取り用)https://www.googleapis.com/auth/gmail.send(メールの送信用)
トークンの更新
このサーバーはトークンの自動更新に対応しています。アクセストークンの期限が切れると、Google API クライアントはリフレッシュトークン、クライアント ID、クライアントシークレットを使用して、新しいアクセストークンを取得します。この処理にユーザーの操作は必要ありません。
セキュリティに関する注意
このサーバーは、Google API 認証情報への直接アクセスを必要とします。トークンと認証情報は常に安全に保管し、信頼できない相手と共有しないでください。
ライセンス
詳細については、LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。