Google Workspace MCP サーバー
モデル コンテキスト プロトコルを介して、MCP クライアント、AI アシスタントなどを Google Workspace サービスに接続します。
実際に動作しているところをご覧ください:
📑 目次
🌐 概要
Google Workspace MCP サーバーは、モデルコンテキスト プロトコル(MCP)を使用して、Google Workspace サービス(カレンダー、ドライブ、Gmail、ドキュメント)を AI アシスタントやその他のアプリケーションと統合します。これにより、AI システムは Google Workspace アプリケーションからユーザーデータに安全かつ効率的にアクセスし、操作できるようになります。
✨ 特徴
- 🔐 OAuth 2.0 認証: 自動トークン更新と集中認証フローにより、ユーザーが承認した認証情報を使用して Google API に安全に接続します。
- 📅 Google カレンダーの統合: 完全なカレンダー管理 - カレンダーの一覧表示、イベントの取得、終日イベントと時間指定イベントのサポートによるイベントの作成/変更/削除
- 📁 Google Drive との連携:ファイルの検索、フォルダ内容の一覧表示、ファイル内容の読み取り、新規ファイルの作成が可能です。.docx、.xlsx、その他の Microsoft Office 形式のファイルの抽出と取得をネイティブにサポートしています。
- 📧 Gmail 統合: 完全なメール管理 - メッセージの検索、コンテンツの取得、メールの送信、すべてのクエリ構文を完全にサポートした下書きの作成
- 📄 Google ドキュメントの統合: チャットから直接、ドキュメントを検索したり、ドキュメントの内容を読み取ったり、フォルダー内のドキュメントを一覧表示したり、新しいドキュメントを作成したりできます。
- 🔄 複数のトランスポート オプション: ストリーミング可能な HTTP + SSE フォールバック
- 🔌
mcpo
互換性: Open WebUI などのツールとの統合のために、サーバーを OpenAPI エンドポイントとして簡単に公開できます。 - 🧩 拡張可能な設計: より多くの Google Workspace API とツールのサポートを追加するためのシンプルな構造
- 🔄統合されたOAuthコールバック:ポート8000でサーバー内で直接OAuthリダイレクトを処理します
- ⚡ スレッドセーフなセッション管理: 信頼性を向上させるスレッドセーフなアーキテクチャによる堅牢なセッション処理
🚀 クイックスタート
前提条件
- Python 3.11以上
- **uv**パッケージインストーラー(または pip)
- 必要な API(カレンダー、ドライブ、Gmail、ドキュメント)に対して OAuth 2.0 認証情報が有効になっているGoogle Cloud プロジェクト
インストール
構成
- Google Cloud ConsoleでOAuth 2.0 認証情報(デスクトップ アプリケーション タイプ)を作成します。
- プロジェクトでGoogle カレンダー API 、 Google ドライブ API 、 Gmail API 、 Google ドキュメント API を有効にします。
- OAuth クライアント資格情報を
client_secret.json
としてダウンロードし、プロジェクトのルート ディレクトリに配置します。 - Google Cloud Console の OAuth クライアント設定に、以下のリダイレクト URI を追加してください。デフォルトのベース URI とポートは
http://localhost:8000
です。これらは環境変数(WORKSPACE_MCP_BASE_URI
とWORKSPACE_MCP_PORT
)でカスタマイズできます。これらの値を変更した場合は、Google Cloud Console のリダイレクト URI もそれに応じて更新する必要があります。 - ⚠️ 重要:
client_secret.json
が.gitignore
ファイルに追加され、バージョン管理にコミットされていないことを確認してください。
サーバー構成
サーバーのベース URL とポートは、環境変数を使用してカスタマイズできます。
WORKSPACE_MCP_BASE_URI
: サーバーのベースURIを設定します(デフォルト:http://localhost
)。これは、Geminiネイティブ関数の呼び出しに使用されるserver_url
とOAUTH_REDIRECT_URI
に影響します。WORKSPACE_MCP_PORT
: サーバーがリッスンするポートを設定します(デフォルト:8000
)。これはserver_url
、port
、およびOAUTH_REDIRECT_URI
に影響します。
使用例:
環境設定
開発中、サーバーはローカルホストのOAuthコールバックにHTTPを使用します。サーバーを実行する前に、以下の環境変数を設定してください。
これを行わないと、認証フロー中に「OAuth 2 は HTTPS を使用する必要があります」というエラーが発生する可能性があります。
サーバーを起動する
サーバーを実行するには、次のいずれかの方法を選択します。
ポート 8000 で HTTP トランスポート層を使用してサーバーを実行します。
マルチユーザーMCPは少々扱いにくいため、現状ではクライアントとサーバーを1:1でマッピングすることで最も効率的に動作します。ClaudeがOAuth 2.1フローを実行できるようになれば状況は変わります。そのため、このMCPは簡素化されたシングルユーザー環境向けのフラグを使用して構築されています。サーバーをシングルユーザーモードで実行すると、セッションとOAuthのマッピングがバイパスされ、 .credentials
ディレクトリにある利用可能な認証情報が使用されます。
シングルユーザーモードの場合:
- サーバーは、
.credentials
ディレクトリ内の有効な資格情報を自動的に検索して使用します。 - セッションマッピングは必要ありません。サーバーは最初に見つかった有効な認証情報ファイルを使用します。
- 開発、テスト、または単一ユーザーの展開に役立ちます
- 認証情報ファイルを作成するには、依然として初期OAuth認証が必要です
このモードは、マルチユーザー セッション管理を必要とせず、資格情報の処理を簡素化したい場合に特に役立ちます。
提供されているDockerfile
を使用してサーバーを構築および実行できます。
smithery.yaml
ファイルは、Docker コンテナ内でサーバーを正しく起動するように構成されています。
重要な港
デフォルトのポートは8000
ですが、 WORKSPACE_MCP_PORT
環境変数を使用して変更できます。
サービス | デフォルトポート | 説明 |
---|---|---|
OAuthコールバック | 8000 | /oauth2callback ルート経由でサーバー内部で処理される |
HTTPモードサーバー | 8000 | HTTPトランスポートを使用する場合のデフォルト |
サーバーへの接続
サーバーは複数の接続方法をサポートしています:
クロードデスクトップ:
どこでも実行でき、
mcp-remote
経由で使用することも、引数としてuv run main.py
を使用するか、localhost でmcp-remote
を使用してローカルで呼び出すこともできます。
config.json:
mcpo
をインストールします:uv pip install mcpo
またはpip install mcpo
config.json
を作成します( Open WebUI との統合を参照)- 設定を指定して
mcpo
を実行します:uvx mcpo --config config.json --port 8001
- MCP サーバー API は次の場所で利用できます:
http://localhost:8001/google_workspace
(またはconfig.json
で定義された名前) - OpenAPI ドキュメント (Swagger UI) は次の場所から入手できます:
http://localhost:8001/google_workspace/docs
起動コマンドを使用する場合 (単一 mcp mcpo の使用の場合):
mcpo
をインストールします:uv pip install mcpo
またはpip install mcpo
uvx mcpo --port 8001 --api-key "top-secret" --server-type "streamablehttp" -- http://localhost:8000/mcp
で開始します。- MCP サーバー API は次の場所で利用できます:
http://localhost:8001/openapi.json
(またはconfig.json
で定義された名前) - OpenAPI ドキュメント (Swagger UI) は次の場所から入手できます:
http://localhost:8001/docs
- HTTPモードでサーバーを起動します(サーバーの起動を参照)
- MCP JSONリクエストを
http://localhost:8000
に直接送信します。 curl
やカスタムHTTPクライアントなどのツールを使ったテストに便利- Claude Desktop やその他の MCP クライアントにサービスを提供するために使用できますが、mcp-remote 経由で新しいストリーミング可能な HTTP トランスポートを統合する必要があります。
- 必要に応じて、SSE フォールバック モードで提供することもできます。
Open WebUIとの統合
このサーバーを Open WebUI 内のツールプロバイダーとして使用するには:
mcpo
構成の作成: 次の構造を持つconfig.json
という名前のファイルを作成し、mcpo がストリーミング可能な HTTP エンドポイントを OpenAPI 仕様ツールとして使用できるようにします。mcpo
サーバーを起動します。このコマンドはmcpo
プロキシを起動し、アクティブな(ポート 8000 と想定)Google Workspace MCP をポート 8001 で提供します。- Open WebUI を設定します:
- Open WebUIの設定に移動します
- 「接続」→「ツール」へ移動します
- 「ツールを追加」をクリック
- サーバー URL を入力します:
http://localhost:8001/google_workspace
(config.json
のmcpo
ベース URL とサーバー名に一致) mcpo
で--api-key
を使用した場合は、それを API キーとして入力します。- 設定を保存する
- Open WebUI でモデルを操作するときに、Google Workspace ツールが利用できるようになります。
初回認証
Google API アクセスを必要とするツールが呼び出されると、次のようになります。
- ツールに
user_google_email
が指定されており、認証情報が欠落または無効の場合:サーバーは自動的にOAuth 2.0フローを開始します。認証URLはMCPレスポンスで返されます(またはコンソールに表示されます)。 user_google_email
が指定されておらず、認証情報が欠落または無効の場合:ツールはエラーメッセージを返します。LLMは、集中管理されたstart_google_auth
ツールを使用するように指示されますstart_google_auth
は、ユーザーのメールアドレスと適切なservice_name
(例:"Google Calendar", "Google Docs", "Gmail", "Google Drive")を指定して start_google_auth を呼び出します。これにより、認証URLも返されます。
ユーザーの手順 (認証 URL を取得した後):
- 提供された承認 URL を Web ブラウザーで開きます。
- Google アカウントにログインし、指定されたサービスに対して要求された権限を付与します。
- 承認後、Google はブラウザを
http://localhost:8000/oauth2callback
(または設定されたリダイレクト URI) にリダイレクトします。 - MCP サーバーはこのコールバックを処理し、認証コードをトークンと交換し、資格情報を安全に保存します。
- LLM は元のリクエストを再試行できます。同じユーザーとサービスに対する以降の呼び出しは、リフレッシュトークンが期限切れになるか取り消されるまで、再認証なしで動作するはずです。
🧰 利用可能なツール
注: 特定のGoogleサービス用のツールを初めて使用する場合、有効な認証情報がまだ保存されておらず、ツールに
user_google_email
が指定されていると、OAuth認証フローがトリガーされることがあります。認証が必要で、ツールにuser_google_email
指定されていない場合、LLMはユーザーのメールアドレスと適切なservice_name
を指定して、集中管理されたstart_google_auth
ツール(core/server.py
で定義)を使用する必要があります。
📅 Googleカレンダー
ソース: gcalendar/calendar_tools.py
道具 | 説明 | パラメータ |
---|---|---|
start_google_auth | ( core/server.py に集約)特定のGoogleアカウントとサービスに対してOAuth 2.0認証フローを開始します。有効な認証情報が利用できない場合、または認証情報がなくツールが失敗した場合や、メールアドレスが提供されていない場合に使用します。 | • user_google_email (必須): ユーザーのGoogleメールアドレス• service_name (必須): Googleサービス名(例:「Googleカレンダー」、「Googleドキュメント」、「Gmail」、「Googleドライブ」) |
list_calendars | 認証されたユーザーがアクセスできるすべてのカレンダーを一覧表示します。 | • user_google_email (オプション):セッションが認証されていない場合に使用されます。• mcp_session_id (自動的に挿入されます) |
get_events | 指定されたカレンダーから時間範囲内の今後のイベントを取得します。 | • calendar_id (オプション):カレンダーID(デフォルト: primary )• time_min (オプション):開始時刻(RFC3339またはYYYY-MM-DD )• time_max (オプション):終了時刻(RFC3339またはYYYY-MM-DD )• max_results (オプション):イベントの最大数(デフォルト:25)• user_google_email (オプション)• mcp_session_id (自動的に挿入されます) |
create_event | 新しいカレンダーイベントを作成します。終日イベントと時間指定イベントをサポートします。 | • summary (必須): イベントタイトル• start_time (必須): 開始時刻(RFC3339 またはYYYY-MM-DD )• end_time (必須): 終了時刻(RFC3339 またはYYYY-MM-DD )• calendar_id (オプション): カレンダーID(デフォルト: primary )• description 、 location 、 attendees 、 timezone (オプション)• user_google_email (オプション)• mcp_session_id (自動的に挿入されます) |
modify_event | 既存のイベントをIDで更新します。指定されたフィールドのみが変更されます。 | • event_id (必須): 変更するイベントのID• calendar_id (オプション): カレンダーID(デフォルト: primary )• summary 、 start_time 、 end_time 、 description 、 location 、 attendees 、 timezone (オプション)• user_google_email (オプション)• mcp_session_id (自動的に挿入されます) |
delete_event | ID でイベントを削除します。 | • event_id (必須): 削除するイベントのID• calendar_id (オプション): カレンダーID(デフォルト: primary )• user_google_email (オプション)• mcp_session_id (自動的に挿入されます) |
ℹ️ すべてのカレンダーツールは、現在のMCPセッション(
mcp_session_id
)経由の認証、またはuser_google_email
へのフォールバックをサポートしています。どちらも利用できず認証が必要な場合は、ツールはエラーを返し、LLMにユーザーのメールアドレスとservice_name="Google Calendar"
を指定して集中管理されたstart_google_auth
ツールを使用するよう促します。
🕒 日付/時刻パラメータ: ツールは、RFC3339に準拠した完全なタイムスタンプ(例:2024-05-12T10:00:00Z)と単純な日付(例:2024-05-12)の両方に対応しています。サーバーは必要に応じて自動的にフォーマットします。
📁 Googleドライブ
道具 | 説明 | パラメータ |
---|---|---|
search_drive_files | ユーザーのドライブ全体でファイルとフォルダを検索します | • query (必須): 検索クエリ文字列 (例: name contains 'report' ) • max_results (オプション): 返されるファイルの最大数 |
get_drive_file_content | 特定のファイルの内容を取得します | • file_id (必須): ファイルのID• mime_type (オプション): 希望するエクスポート形式を指定します |
list_drive_items | 特定のフォルダまたはルート内のファイルとフォルダを一覧表示します | • folder_id (オプション):一覧表示するフォルダのID(デフォルトはルート)• max_results (オプション):返されるアイテムの最大数 |
create_drive_file | Googleドライブに新しいファイルを作成します | • name (必須): 新しいファイルの名前• content (必須): ファイルに書き込むテキストコンテンツ• folder_id (オプション): 親フォルダのID• mime_type (オプション): ファイルのMIMEタイプ(デフォルトはtext/plain ) |
クエリ構文: Google ドライブの検索クエリについては、ドライブの検索クエリ構文を参照してください。
📧 Gメール
ソース: gmail/gmail_tools.py
道具 | 説明 | パラメータ |
---|---|---|
search_gmail_messages | 標準の Gmail 検索演算子 (送信元、件名など) を使用してメール メッセージを検索します。 | • query (必須): 検索文字列(例: "from:foo subject:bar is:unread" )• user_google_email (オプション)• page_size (オプション、デフォルト:10)• mcp_session_id (自動的に挿入されます) |
get_gmail_message_content | メッセージ ID で電子メールの件名、送信者、プレーンテキスト本文を取得します。 | • message_id (必須)• user_google_email (オプション)• mcp_session_id (自動的に挿入されます) |
send_gmail_message | ユーザーの Gmail アカウントを使用してプレーンテキスト メールを送信します。 | • to (必須): 受信者のメールアドレス• subject (必須)• body (必須)• user_google_email (オプション)• mcp_session_id (自動的に挿入されます) |
draft_gmail_message | ユーザーの Gmail アカウントに下書きメールを作成します。 | • subject (必須): メールの件名• body (必須): メールの本文(プレーンテキスト)• to (オプション): 受信者のメールアドレス• user_google_email (オプション)• mcp_session_id (自動的に挿入されます) |
クエリ構文: Gmail の検索クエリについては、 Gmail の検索クエリ構文を参照してください。
📝 Google ドキュメント
道具 | 説明 | パラメータ |
---|---|---|
search_docs | Google ドキュメントを名前で検索します (Drive API を使用)。 | • query (必須): ドキュメント名で検索するテキスト• user_google_email (オプション)• page_size (オプション、デフォルト:10)• mcp_session_id (自動的に挿入されます) |
get_doc_content | ドキュメント ID で Google ドキュメントのプレーンテキスト コンテンツを取得します。 | • document_id (必須)• user_google_email (オプション)• mcp_session_id (自動的に挿入されます) |
list_docs_in_folder | 指定されたドライブ フォルダ内のすべての Google ドキュメントを一覧表示します (フォルダ ID 別、デフォルト = root )。 | • folder_id (オプション、デフォルト: 'root' )• user_google_email (オプション)• page_size (オプション、デフォルト: 100)• mcp_session_id (自動的に挿入されます) |
create_doc | オプションで初期コンテンツを含む新しい Google ドキュメントを作成します。 | • title (必須):ドキュメントの名前• content (オプション、デフォルト:空)• user_google_email (オプション)• mcp_session_id (自動的に挿入されます) |
🛠️ 開発
プロジェクト構造
OAuth のポート処理
サーバーは、別の Web サーバー フレームワークを必要とせずに、OAuth 2.0 リダイレクト URI ( /oauth2callback
) を巧みに処理します。
- HTTPモードまたは
mcpo
経由で実行する場合、基盤となるMCPライブラリの組み込みHTTPサーバー機能を利用します。 - ポート
8000
の/oauth2callback
専用のカスタムMCPルートが登録されています。 - Googleが認証後にユーザーをリダイレクトすると、MCPサーバーはこのルートでリクエストを傍受します。
auth
モジュールは認証コードを抽出し、トークン交換を完了します。- コールバックは
http://localhost
使用するため、ローカルで実行する場合はOAUTHLIB_INSECURE_TRANSPORT=1
を設定する必要があります。
デバッグ
認証手順やAPI呼び出しを含む詳細なログについては、 mcp_server_debug.log
を確認してください。必要に応じてデバッグログを有効にしてください。
client_secret.json
が正しく存在することを確認する- Google Cloud Console で正しいリダイレクト URI (
http://localhost:8000/oauth2callback
) が設定されていることを確認します。 - Google Cloud プロジェクトで必要な API(カレンダー、ドライブ、Gmail)が有効になっていることを確認します
- サーバープロセスが実行される環境で
OAUTHLIB_INSECURE_TRANSPORT=1
設定されていることを確認します。 - ブラウザベースのOAuthフロー中に特定のエラーメッセージを探す
Google API から返されたトレースバックまたはエラー メッセージがないか、サーバー ログを確認します。
新しいツールの追加
- 適切なモジュールを選択または作成します(例:
gdocs/gdocs_tools.py
) - 必要なライブラリ(Google API クライアント ライブラリなど)をインポートします。
- ツールロジック用の
async
関数を定義します。パラメータには型ヒントを使用します。 - 関数を
@server.tool("your_tool_name")
で装飾します。 - 関数内で、認証された資格情報を取得します。
- Google API サービス クライアントをビルドします:
service = build('drive', 'v3', credentials=credentials)
- Google APIを呼び出すロジックを実装する
- 潜在的なエラーを適切に処理する
- 結果をJSONシリアル化可能な辞書またはリストとして返します
main.py
にツール関数をインポートして、サーバーに登録します。- ツールのモジュールで必要なサービス固有のスコープ定数を定義します
- 新しい依存関係が必要な場合は
pyproject.toml
を更新します
スコープ管理:
config/google_config.py
のグローバルSCOPES
リストは、OAuth 同意画面の初期表示に使用されます。各ツールは、get_credentials
を呼び出す際に、必要最小限のrequired_scopes
をリクエストする必要があります。
🔒 セキュリティに関する注意事項
client_secret.json
: このファイルには機密性の高い認証情報が含まれています。バージョン管理にコミットしないでください。.gitignore.gitignore
に記載されていることを確認してください。安全に保管してください。- ユーザートークン:認証されたユーザーの認証情報(リフレッシュトークン)は
credentials-<user_id_hash>.json
などのファイルにローカルに保存されます。これらのファイルはユーザーのGoogleアカウントデータへのアクセスを許可するため、保護する必要があります。また、.gitignore
にも保存されていることを確認してください。 - OAuth コールバックのセキュリティ:OAuth コールバックに
http://localhost
を使用するのは、開発中のインストール済みアプリケーションでは標準ですが、OAUTHLIB_INSECURE_TRANSPORT=1
必要です。localhost 以外の本番環境デプロイメントでは、コールバック URI に HTTPS を使用し、Google Cloud Console で適切に設定する必要があります。 mcpo
セキュリティ:mcpo
を使用してネットワーク経由でサーバーを公開する場合は、次の点を考慮してください。- 基本認証に
--api-key
オプションを使用する - HTTPS の終了、適切なログ記録、より堅牢な認証を処理するために、リバース プロキシ (Nginx や Caddy など) の背後で
mcpo
を実行します。 - ローカルホストを超えて公開する場合は、信頼できるネットワークインターフェースにのみ
mcpo
をバインドします。
- 基本認証に
- スコープ管理:サーバーは、カレンダー、ドライブ、Gmail に対して特定の OAuth スコープ(権限)を要求します。ユーザーは初期認証時にこれらのスコープに基づいてアクセスを許可します。実装されたツールに必要な範囲を超えるスコープを要求しないでください。
スクリーンショット:
📄 ライセンス
このプロジェクトは MIT ライセンスに基づいてライセンスされています - 詳細についてはLICENSE
ファイルを参照してください。
hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Tools
Google Workspace MCP サーバー
Related MCP Servers
- -securityAlicense-qualityMCP server to interact with Google produts.Last updated -270PythonMIT License
- Python
- MIT License
- AsecurityAlicenseAqualityWayback Machine MCP ServerLast updated -23TypeScriptMIT License