Google Workspace について
Google Workspace は、複数の Google アカウントにまたがるメール、カレンダー、Drive ファイル、Docs、Sheets、Slides、Tasks、連絡先、Meet の記録を検索・管理する MCP サーバーです。下書きや共同作業に対応し、製品ごとにツールセットを読み込めます。
主な機能
- 01複数アカウントのメールと予定を検索
- 02Drive ファイルと添付ファイルの管理
- 03Docs、Sheets、Slides の編集
- 04Tasks、連絡先、Meet 記録の管理
- 05製品ごとのツールセット読み込み
- 06送信や共有などの書き込み操作にクライアント確認
活用シーン
- 01複数アカウントの予定確認と空き時間検索
- 02メール検索と添付ファイルの保存
- 03送信せずに返信メールを下書き
- 04スプレッドシートの請求書情報を更新
- 05会議の記録や文字起こしの検索
MCP 対応
MCP サーバーとして、Google Workspace 製品のツールセットをクライアントに提供し、GOOGLE_TOOLSETS で読み込む製品を選べます。書き込み操作の確認はクライアントが行い、MCP_MAX_ACCESS=read で読み取り専用に制限できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @foreverworks/mcp-googleGOOGLE_OAUTH_CLIENT_FILEシークレットPath of your OAuth client's JSON (a Desktop app client from the Google Cloud console).GMAIL_ADDRESSESEach account's label and address, e.g. [email protected],[email protected].GMAIL_MODIFY_ACCOUNTSWhere each mailbox's Gmail grant is kept, e.g. personal=/path/to/grants/gmail-personal.json; consent writes it there. Without it the other products work, but no mailbox does.CALENDAR_TIME_ZONEThe time zone a time without an offset is read in, e.g. Europe/Paris.GOOGLE_TOOLSETSThe products whose tools the server loads, separated by commas, e.g. gmail,calendar. Empty loads every product.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Google Workspace MCP サーバー
AI アシスタントから、複数の Google アカウントのメール、カレンダー、Drive ファイル、Docs、Sheets、Slides、Google Tasks、連絡先、Meet の文字起こしを検索、閲覧、整理できます。下書き、ラベル、フィルター、予定、タスク、ファイル、ドキュメント、コメント、共有を作成します。money に関わる操作はなく、メールやファイルを完全に削除することもありません。Gmail と Drive では、ゴミ箱の中身が30日間保持されます。
メールは、送信を指示するまで下書きのままです。 送信、ファイルの共有、改訂版の公開は、アシスタントに明示的な許可を待つよう指示する write ツールです。サーバー自体が確認することはありませんが、クライアントは各呼び出しの前に確認できます。MCP_MAX_ACCESS=read を設定すると、サーバーは読み取り専用になります。
必要なもの: 1つ以上の Google アカウント、Desktop app OAuth クライアントを設定した独自の Google Cloud プロジェクト(手順)、各アカウントで各サービスを一度ずつ承認するためのブラウザーが必要です。テスト中のまま7日間経過すると、Google はアプリの承認を失効させます。Workspace ディレクトリ、Meet の文字起こしとスマートメモ、集中時間と不在通知の予定には、Google Workspace アカウントが必要です。
できること
- 「両方のアカウントについて、今週のカレンダーの予定を教えて。重なっている予定はある?」
- 「来週、Ana Popescu と45分の時間を見つけて。午前中を優先して。」
- 「9月に仕事用メールボックスに届いた PDF を、添付ファイルとしてすべて保存して。」
- 「Ana からの最新メールへの返信案を作って。木曜日の10時で大丈夫だと伝えて。送信は自分でする。」
- 「これらの請求書を Invoices シートに追加して。請求書番号がすでにある行は更新して。」
- 「昨日の Client SRL との通話で何を決めた? 文字起こしを読み上げて。」
インストール
Claude Code の場合:
claude mcp add google -e GOOGLE_OAUTH_CLIENT_FILE="<path to OAuth client file>" -e GMAIL_ADDRESSES="<Accounts and their addresses>" -e GMAIL_MODIFY_ACCOUNTS="<Where Gmail grants are kept>" -- npx -y @foreverworks/mcp-google
Claude Desktop(Settings、Developer、Edit Config)や、ほとんどの他のクライアントは、同じコマンドを JSON として読み込みます:
{
"mcpServers": {
"google": {
"command": "npx",
"args": ["-y", "@foreverworks/mcp-google"],
"env": {
"GOOGLE_OAUTH_CLIENT_FILE": "<path to OAuth client file>",
"GMAIL_ADDRESSES": "<Accounts and their addresses>",
"GMAIL_MODIFY_ACCOUNTS": "<Where Gmail grants are kept>"
}
}
}
}
いずれも、公開済みパッケージを Node 22.19 以降で実行します。VS Code と Claude Desktop バンドルでは、サーバーの追加時に各設定を入力するよう求められます。任意の項目は空のままにしてください。Cursor では、代わりに環境変数から各項目を読み込むため(${env:GOOGLE_OAUTH_CLIENT_FILE} など)、Cursor の起動前に設定してください。上記のコマンドで設定するのは必須項目のみです。その他については、設定を参照してください。
クローンから
git clone https://github.com/foreverworks/mcps.git && cd mcps
npm ci && npm run build
claude mcp add google -e GOOGLE_OAUTH_CLIENT_FILE="<path to OAuth client file>" -e GMAIL_ADDRESSES="<Accounts and their addresses>" -e GMAIL_MODIFY_ACCOUNTS="<Where Gmail grants are kept>" -- node "$PWD/servers/google/dist/index.js"
JSON 設定では、コマンドは node、引数は servers/google/dist/index.js のフルパスです。複数のクライアントで 1 つのプロセスを HTTP 経由で共有する方法については、docs/deploying.mdを参照してください。
HTTP 経由(MCP_HTTP_PORT)では、1 つのプロセスですべてのセッションを処理し、付与ごとにトークンキャッシュを保持します。
設定
サーバーは何も設定されていない状態で起動します。まだ設定されていない製品に対するリクエストには、設定が必要な項目を示す config エラーが返されます。ほとんどの環境では、4 つの変数で設定できます。
| 変数 | 必須 | 意味 |
|---|---|---|
GOOGLE_OAUTH_CLIENT_FILE | 同意時 | Google Cloud コンソールの OAuth クライアント JSON(デスクトップアプリクライアント)です。新しい許可はこのクライアントで取得されます。これがない場合、同意手続きでは、そのアカウントがすでに持っている認証情報ファイルのクライアントを借用します。 |
GMAIL_ADDRESSES | 同意時 | label=address,...:各アカウントラベルが示す Google アドレスです。これはすべての製品で使用されます。別のユーザーとして承認された同意は拒否され、health は Gmail の許可をこの値と照合します。 |
GMAIL_MODIFY_ACCOUNTS | Gmail 使用時 | label=path,...:各メールボックス固有の gmail.modify 許可を保存する場所です。begin_consent はここに書き込みます。 |
CALENDAR_TIME_ZONE | いいえ | オフセットのない時刻の解釈と、デフォルトの勤務時間に使用する IANA タイムゾーンです。デフォルトはプロセスのタイムゾーン(TZ)です。 |
ラベルには小文字、数字、ハイフンを使用します(personal、work、
client-a)。各ラベルは、すべての製品で同一の Google アイデンティティを示します。サーバーが書き込むすべてのデータ(トークンキャッシュ、許可、保留中の同意、ダウンロード)は GOOGLE_STATE_DIR 以下に保存されます。デフォルトは systemd の STATE_DIRECTORY、それがない場合は $XDG_STATE_HOME/mcps/google(~/.local/state/mcps/google)です。ただし、以下の変数で製品ごとの保存場所を変更できます。
その他すべての変数(すべて任意)
| 変数 | 意味 | |---|---| | `GMAIL_ACCOUNTS` | `label=path,...`:メール同期プログラムなど、別の場所で作成された、メールボックスごとの読み取り専用(`gmail.readonly`)の許可情報です。`gmail.modify` の許可情報ファイルが存在しないメールボックスは、この設定で動作します。読み取りはできますが、書き込みはすべて拒否されます。 | | `GMAIL_DEFAULT_ACCOUNT` | アカウントを指定せずに1つのメールボックスを読み取る場合に使用するメールボックスです。デフォルトは最初に記載されたものです。 | | `GMAIL_STATE_DIR` | Gmail のトークンキャッシュの保存先です。`//` を指定します。デフォルトは `/gmail/state` です。 | | `GMAIL_ATTACHMENTS_DIR` | 添付ファイルの保存先です。`//` を指定します。デフォルトは各メールボックスの状態フォルダー内の `attachments/` です。 | | `GMAIL_TIME_ZONE` | 返信の「On `` ... wrote:」行と転送の Date 行に使用するタイムゾーンです。Gmail が閲覧者のタイムゾーンで表示する形式に合わせます。デフォルトは `CALENDAR_TIME_ZONE`、未設定の場合はプロセスのタイムゾーンです。 | | `CALENDAR_ROOT` | カレンダーの許可情報の保存先です。`//credentials.json` を指定します(同意時に書き込まれます)。デフォルトは `/calendar` です。 | | `CALENDAR_DEFAULT_ACCOUNT` | アカウントを指定せずに1つのカレンダーを読み取る場合に使用するアカウントです。デフォルトは名前順で最初のものです。 | | `DRIVE_CREDENTIALS` | Drive の許可情報1件の保存先です(同意時に書き込まれます)。デフォルトは `/drive/credentials.json` です。 | | `DRIVE_STATE_DIR` | Drive のトークンキャッシュの保存先です。デフォルトは `/drive/state` です。 | | `DRIVE_DOWNLOADS_DIR` | `download_file` と `download_revision` の保存先です。デフォルトは `/drive/downloads` です。 | | `DRIVE_MIRROR_ROOT` | サーバーが読み取れる My Drive のローカルコピーです。`upload_file` はここからもファイルを取得し、それぞれをミラー元のフォルダーに送信します。 | | `DRIVE_RCLONE_CONF` | 独自の許可情報を取得するまで、Drive の許可情報を借用するリモートを含む rclone の設定です。ここからは rclone 組み込みのクライアントを更新できないため、リモートには独自の `client_id` と `client_secret` が必要です。未設定の場合、rclone は使用しません。 | | `DRIVE_RCLONE_REMOTE` | そのリモートの名前です。デフォルトは `gdrive` です。 | | `GOOGLE_EDITORS_ROOT` | Docs、Sheets、Slides の許可情報の保存先です。`//credentials.json` を指定します。デフォルトは `/editors` です。 | | `GOOGLE_EDITORS_STATE_DIR` | 許可情報を読み取り専用のままにする場合の、これらのトークンキャッシュの保存先です。`//` を指定します。デフォルトは `//state` です。 | | `GOOGLE_EDITORS_DRIVE_ACCOUNT` | Docs、Sheets、Slides が Drive の許可情報を使用するアカウントのラベルです。未設定の場合、どのアカウントも使用しません。 | | `GOOGLE_EDITORS_DEFAULT_ACCOUNT` | アカウントを指定せずに Docs、Sheets、または Slides を読み取る場合に使用するアカウントです。デフォルトは Drive の許可情報を使用するアカウント、該当するものがなければ最初のアカウントです。 | | `TASKS_ROOT` | Google Tasks の許可情報の保存先です。`//credentials.json` を指定します。デフォルトは `/tasks` です。 | | `CONTACTS_ROOT` | 連絡先とディレクトリの許可情報の保存先です。デフォルトは `/contacts` です。 | | `MEET_ROOT` | Meet の記録の許可情報の保存先です。デフォルトは `/meet` です。 | | `GOOGLE_CONSENT_REDIRECT_URI` | 同意後のリダイレクト先となるループバックアドレスです。デフォルトは `http://localhost:8123/` です。 | | `GOOGLE_STATE_DIR` | 上記すべてのルートディレクトリです。 | | `GOOGLE_TOOLSETS` | サーバーが読み込むツールの対象プロダクトを、カンマ区切りで指定します。デフォルトではすべてです([ツールセット](#toolsets))。 |すべてのサーバーで共通の変数(MCP_HTTP_PORT、MCP_MAX_ACCESS、
MCP_FILE_ROOTS、MCP_FILE_SCRIPT など)は、
docs/configuration.md に記載されています。
ツールセット
サーバーがクライアントに渡すすべてのツール定義は、クライアントがリクエストを送るたびに一緒に送信されるため、メールとカレンダーだけを必要とするクライアントでも、Drive、Docs、Sheetsなどの分も同じように負担することになります。GOOGLE_TOOLSETS には読み込む製品をカンマ区切りで指定します。これはGitHubのMCPサーバーが GITHUB_TOOLSETS を受け取る方法と同じです。読み込まれていない製品のツールは、ツール一覧にもサーバーの指示にも list_accounts や health にも一切表示されません。未設定、空、または all の場合は、これまでどおりすべての製品が読み込まれます。
| ツールセット | 読み込まれる内容 |
|---|---|
gmail | メール:検索、閲覧、下書き、送信、ラベル、フィルター、添付ファイル。 |
calendar | 予定、空き時間の確認、日時の検索、招待への回答。 |
drive | Driveのファイルとフォルダー:パス、変更、アップロード、ダウンロード。 |
docs | Google Docs、簡単な編集、editors_api_reference を含む完全なAPI。 |
sheets | Google Sheets、行と範囲、editors_api_reference を含む完全なAPI。 |
slides | Google Slides、アウトラインからのデッキ作成、editors_api_reference を含む完全なAPI。 |
collaboration | Drive内のあらゆるファイルのコメント、共有、改訂履歴。 |
tasks | Google Tasks。 |
contacts | find_people:連絡先、保存済みの住所、Workspaceディレクトリ。 |
meet | Meetの会議、文字起こし、スマートノート。 |
list_accounts、health、begin_consent、complete_consent は常に読み込まれます。ほかのすべてのツールは、list_accounts が示すラベルを使用します。すべての問題解決手順は health を参照し、読み込まれた製品が依存する権限付与も含め、あらゆる権限付与には同意が必要です(MeetはCalendarの権限を通じてカレンダーの予定を読み取ります)。ツールセットに存在しない名前を指定すると、該当するツールセットの一覧を示すメッセージとともに、サーバーは起動時に停止します。2026-10-23に scripts/measure-tokens.ts(GPT-4トークナイザー)で測定したところ、すべてのツールセットを指定した場合はツールが115個で約84,800トークン(クライアントがモデルに表示しない場合がある製品アイコンを除くと39,200)、gmail,calendar では43個で35,600(16,100)、drive,docs,sheets では46個で32,400(15,200)でした。
Claude Codeでメールとカレンダーのみを読み込むには、次のようにします。
claude mcp add google -e GOOGLE_TOOLSETS=gmail,calendar -e GOOGLE_OAUTH_CLIENT_FILE="<path to OAuth client file>" -e GMAIL_ADDRESSES="<Accounts and their addresses>" -e GMAIL_MODIFY_ACCOUNTS="<Where Gmail grants are kept>" -- npx -y @foreverworks/mcp-google
または、Claude Desktopの設定で次のようにします。
{
"mcpServers": {
"google": {
"command": "npx",
"args": ["-y", "@foreverworks/mcp-google"],
"env": {
"GOOGLE_TOOLSETS": "gmail,calendar",
"GOOGLE_OAUTH_CLIENT_FILE": "/path/to/oauth-client.json",
"GMAIL_ADDRESSES": "[email protected],[email protected]",
"GMAIL_MODIFY_ACCOUNTS": "personal=/path/to/grants/gmail-personal.json,work=/path/to/grants/gmail-work.json"
}
}
}
}
ツールセットはツールを除外します。MCP_MAX_ACCESS=read はすべてのツールを一覧に残したまま、書き込みを拒否します。シェルの --health は、GOOGLE_TOOLSETS の設定にかかわらずすべての製品をチェックします。対象を絞るには製品名を指定してください。
OAuth クライアントの取得
1 つの OAuth クライアントを用意すれば、すべてのアカウントとプロダクトで使用できます。
-
Google Cloud コンソールで、このサーバー用のプロジェクトを作成します。
-
APIs & Services の Library で、使用するプロダクトの API(Gmail API、Google Calendar API、Google Drive API、Google Docs API、Google Sheets API、Google Slides API、Google Tasks API、People API(連絡先とディレクトリ)、Google Meet REST API)を有効にします。
-
Google Auth Platform を開きます。Branding でアプリ名とメールアドレスを設定します。Audience で利用できるユーザーを選び、各アカウントをテストユーザーとして追加するか、Publish app を選択します。Testing のままのアプリでは、Google により更新トークンが 7 日後に期限切れになります。公開済みアプリは、ご自身のアカウントで使用する場合、未確認のままでもかまいません。認証時には、Google の警告画面を進んでください。
-
Data Access で、使用するプロダクトのスコープを追加します(それぞれ、
https://www.googleapis.com/auth/に以下の名前を続けたものです)。プロダクト スコープ gmailgmail.modify、フィルターにはgmail.settings.basiccalendarcalendar.events、calendar.calendarlist.readonly、calendar.events.freebusydrivedriveeditors(Docs、Sheets、Slides)documents、spreadsheets、presentations、drive.filetaskstaskscontactscontacts.readonly、contacts.other.readonly、およびdirectory.readonly(任意:ディレクトリを利用できるのは Workspace アカウントのみです)meetmeetings.space.readonly承認時には毎回
userinfo.emailも求められるため、サーバーは承認したユーザーを確認できます。 -
Clients で、アプリケーションの種類に Desktop app を選んで Create client をクリックし、JSON をダウンロードします(
installedブロックにclient_idとclient_secretが含まれています)。ファイルは非公開に保ち、GOOGLE_OAUTH_CLIENT_FILEがこのファイルを指すように設定します。 -
アカウント名を設定し、Gmail の場合は各メールボックスの認証情報を保存する場所も指定します。
[email protected],[email protected] GMAIL_MODIFY_ACCOUNTS=personal=/path/to/grants/gmail-personal.json,work=/path/to/grants/gmail-work.jsonクライアント内のサーバー設定にアカウントを追加し、サーバーを再起動します。
初回実行
各プロダクトでは、アカウントごとにブラウザーで一度認証を行う必要があります。
- アシスタントに
list_accountsを依頼します。各プロダクトが認識しているラベルが表示されます(GMAIL_MODIFY_ACCOUNTSにあるメールボックス、その他のプロダクトでは認証済みのアカウント)。 - 認証を開始するよう依頼します。たとえば、「calendar、アカウント work の
begin_consentを実行して」と伝えます。プロダクトはgmail、calendar、drive、editors、tasks、contacts、meetのいずれかです。 - 返された URL を開き、指定されたアドレスでログインして、すべてのチェックボックスをオンにします。MCP URL elicitation に対応したクライアントでは、ページが表示されます。
- 予想どおり、ブラウザーは
http://localhost:8123/?state=...&code=...の読み込みに失敗します。そこでは何も待ち受けていないためです。15 分以内にアドレスバーから URL 全体をコピーし、アシスタントに渡してcomplete_consentを実行します。次回の呼び出しから、そのプロダクトで認証情報が使用されます。 - プロダクトとアカウントごとに繰り返します。Drive では認証情報は 1 つだけです。Drive ツールでアクセスする Drive のアカウントに対して、一度だけ
driveの認証を行います。そのアカウントの Docs、Sheets、Slides は認証情報を共有できます(GOOGLE_EDITORS_DRIVE_ACCOUNT=personal)。それ以外のアカウントでは、それぞれのeditorsの認証が必要です。 healthを依頼します。すべての認証情報が意図したアドレスで更新され、選択したスコープが付与されていること、また確認対象のすべての API が応答することを確認します。
シェルから node dist/index.js --health [gmail|calendar|drive|editors|tasks|contacts|meet] を実行すると、アカウントと認証情報ごとに 1 行が出力され、最も悪い行のコードで終了します。タイマー実行に使用できます。
ツール
read はアカウントに何も変更を加えません(ダウンロードツールはローカルにコピーを保存します)。write はアカウントのいずれかに変更を加えます。GOOGLE_TOOLSETS が設定されている場合、読み込まれた toolsets のテーブルのみが適用されます。アカウントと同意のツールは常に使用できます。
Drive のツール(Drive は 1 つの許可を保持します)、list_accounts、complete_consent、editors_api_reference を除くすべてのツールには、list_accounts に表示されるラベルである account が必要です。複数のアカウントを対象にするのが適切な読み取り(search_threads、agenda、free_busy、find_time、list_calendars、list_tasks、list_task_lists、find_people、health)では、アカウントを指定しないとすべてのアカウントを読み取ります。それ以外の読み取りでは、各製品のデフォルトアカウントが使われます。書き込みにはデフォルトがありません。誤った ID で作成したメールや予定は、その ID から送信されるためです。
アカウントと同意
| ツール | アクセス | 内容 |
|---|---|---|
list_accounts | read | 各製品がアクセスするアカウント、デフォルト、各製品が使用する許可を表示します。ここから始めてください。 |
health | read | 製品とアカウントごとに、許可が更新されるか、どのアドレスとして認識されるか、Google が許可したスコープ、また Docs、Sheets、Slides、Tasks、連絡先、Meet では API が有効になっているかを表示します。 |
begin_consent | write | 1 つの製品に 1 つのアカウントへのアクセスを許可する URL を返します。ブラウザーで開き、指定されたアドレスとして承認してください。 |
complete_consent | write | 承認後にリダイレクトされた URL を使って同意を完了します。許可が確認され、製品が読み取る場所に保存されます。 |
Gmail
| ツール | アクセス | 内容 |
|---|---|---|
search_threads | read | Gmail のクエリ構文で、すべてのメールボックスを一度に検索します。各結果にはアカウントが付記されます。 |
get_thread / get_message | read | スレッドまたはメッセージと、本文および添付ファイル一覧を取得します(detail:metadata、text、raw_html)。 |
get_messages | read | 1 回の呼び出しで、1 つのメールボックスから最大 25 件のメッセージを指定された順序で取得します。読み取れないメッセージがある場合は、その位置に partial とマークされた結果が返され、残りのメッセージも取得されます。 |
get_attachment | read | 添付ファイルを 1 つ添付ファイルフォルダーに保存し、サイズと sha256 を返します。 |
harvest_attachments | read | 検索に一致するすべての添付ファイルを 1 回の呼び出しで保存し、照合用の件数を返します。 |
list_history | read | historyId 以降に追加されたメッセージを取得します。再検索せずに差分同期できます。 |
list_labels | read | システムラベルとユーザーラベルを取得します。 |
sender_breakdown | read | 検索に一致するスレッドの送信者をドメイン別に表示し、件数の多い順に並べます。 |
list_filters | read | フィルターと、それぞれの条件に相当する検索内容を取得します。 |
get_draft / list_drafts | read | 各 Gmail ウェブリンク付きの下書きを取得します。 |
create_draft / update_draft / delete_draft | write | 下書きを操作します。宛先があるものにはデフォルトアカウントが使われます。 |
reply / forward | write | すべての関係者を含めたスレッド形式で返信または転送します。send が true でない限り、下書きになります。 |
send_draft / send_message | write | 送信します。そのメッセージについてユーザーが明示的に許可した場合に限ります。 |
modify_labels / modify_labels_matching | write | 指定したスレッド、または検索に一致するすべてのスレッドのラベルを操作し、アーカイブ、既読への変更、スター付け、振り分けを行います(デフォルトではドライラン)。 |
create_label / update_label / delete_label | write | ユーザーラベルを操作します。システムラベルは拒否されます。 |
create_filter / delete_filter | write | ラベルを設定するフィルターを操作します(転送はしません)。メールを TRASH または SPAM に送信するフィルターには discard が必要です。 |
trash / untrash / mark_spam / unmark_spam | write | スレッドまたはメッセージを操作します。完全に削除することはできません。 |
カレンダー
| ツール | アクセス | 機能 |
|---|---|---|
agenda | 読み取り | すべてのアカウントの予定を時系列で表示し、予定間の競合や未回答の招待も確認できます。include_tasks を指定すると、その日に期限を迎えるタスクも表示します。 |
list_calendars | 読み取り | 各アカウントが参照できるすべてのカレンダーと、agenda がそのカレンダーを読み取るかどうかを表示します。 |
get_event | 読み取り | 1件の予定の詳細(説明、ゲストとその回答、リマインダー、会議リンク)を表示します。 |
free_busy | 読み取り | すべてのアカウントの予定ありの時間帯を統合して表示し、他のユーザーの予定(attendees)も確認できます。読み取れなかった項目も一覧表示します。 |
find_time | 読み取り | 通知時間とバッファを考慮して、指定した長さの空き時間を勤務時間内(デフォルトでは月曜日から金曜日の09:00~18:00)で検索します。 |
create_event / update_event / delete_event | 書き込み | 予定を作成、更新、削除します。リクエストに応じて新しい Meet リンクを作成し、集中時間や不在時間の予定も設定できます。send_updates で指定しない限り、メールは送信されません。シリーズ全体に適用するのは scope: "series" を指定した場合のみです。 |
respond_to_invite | 書き込み | 招待に承諾、辞退、または仮回答します。変更されるのは自分の回答のみです。 |
Drive
| ツール | アクセス | 機能 |
|---|---|---|
resolve_path / path_of | 読み取り | パスから該当する ID(同じパスを共有するものが2つある場合は両方の ID)を取得し、逆方向にも変換します。 |
list_folder / find_files / describe_file | 読み取り | フォルダー内の項目、Drive 全体の検索結果、または1つのファイルのメタデータを表示します。 |
read_doc | 読み取り | ドキュメント、スプレッドシート、プレゼンテーションをテキスト、Markdown、HTML としてエクスポートします。 |
start_drive_cursor / drive_changes | 読み取り | カーソル以降の変更内容のみを返す1回の呼び出しで、変更を確認します。 |
download_file | 読み取り | Drive のチェックサムと照合したファイルをダウンロードフォルダーに保存します(Google ファイルはエクスポートされます)。 |
upload_file | 書き込み | ファイルをバイト単位で Drive にアップロードし、Drive に保存された内容と照合します。破損したアップロードは取り消されます。convert を指定すると、.docx、.xlsx、.pptx(旧形式を含む)、または .csv を Google ドキュメント、スプレッドシート、プレゼンテーションに変換します。 |
copy_file / move_file / rename_file | 書き込み | ファイルをコピー、移動(すべての競合を明示するドライランにも対応)、名前変更します。ドキュメントも対象です。 |
create_folder | 書き込み | フォルダーと、その上位にまだ存在しないすべてのフォルダーを作成します。 |
trash_file / untrash_file | 書き込み | Drive のゴミ箱に移動、またはゴミ箱から復元します。ゴミ箱内のファイルは30日間復元可能です。完全削除はできません。 |
コメント、共有、リビジョン
Docs、Sheets、Slides のアカウントとして操作し、Drive 上のあらゆるファイル(ドキュメント、スプレッドシート、プレゼンテーション、PDF)を対象にします。
| ツール | アクセス | 機能 |
|---|---|---|
list_comments | 読み取り | コメントスレッドと返信、引用テキスト、解決済みかどうかを表示します。未解決と解決済みの両方が対象です。 |
add_comment / reply_to_comment | 書き込み | 新しいスレッドを作成するか、スレッドを解決または再開できる返信を追加します。 |
edit_comment / delete_comment | 書き込み | コメントまたは返信のテキストを変更または削除します。 |
list_permissions | 読み取り | アクセス権を持つユーザーとその権限、およびリンク共有の設定を一覧表示します。 |
share_file / update_permission / remove_permission | 書き込み | ユーザー、グループ、ドメイン、またはリンクを知っている全員にアクセス権を付与、変更、取り消します。Drive からのメール送信は、指定した場合のみ行われます。ユーザーが明示的に指示した場合に限り実行します。 |
list_revisions | 読み取り | ファイルのリビジョンについて、変更者、日時、旧版を保存できる形式を表示します。 |
download_revision | 読み取り | 1つのリビジョンを MD5 と照合してダウンロードフォルダーに保存するか、Google ファイルの場合はエクスポートします。 |
update_revision | 書き込み | リビジョンを永久に保存するか、Google ファイルのリビジョンをウェブに公開します(ユーザーが明示的に指示した場合に限ります)。 |
Docs、Sheets、Slides:API リファレンス
| ツール | アクセス | 機能 |
|---|---|---|
editors_api_reference | 読み取り | API 自身のスキーマに基づき、Docs、Sheets、Slides の任意のリクエスト種別または型に必要な項目を表示します。名前を指定しない場合は、すべてのリクエスト種別を表示します。 |
ドキュメント
| ツール | アクセス | 説明 |
|---|---|---|
read_document | 読み取り | 任意のタブにあるドキュメントを、セクションのインデックスとrevisionIdを含むMarkdown形式で読み取ります。 |
edit_document_section | 書き込み | 読み取ったリビジョンに固定して、任意のタブの見出し以下をMarkdownで置き換えます。 |
append_to_document | 書き込み | 任意のタブの最後の段落の後にMarkdownを追加します。 |
create_document | 書き込み | フォルダー内に、Markdownから新しいドキュメントを作成します。 |
get_document | 読み取り | タブ、段落のスタイルとテキスト範囲、セルごとの表、オブジェクトなど、すべてのインデックスを含む構造を取得します。要求に応じてヘッダー、フッター、脚注、リスト、名前付き範囲、スタイルも取得できます。または、フィールドマスクを使って生のJSONを取得します。 |
find_in_document | 読み取り | テキストまたは正規表現が現れるすべての箇所を、リクエストで使用できる範囲として、適用可能なリビジョンとともに取得します。 |
batch_update_document | 書き込み | Docs APIリクエストを1つのアトミックなバッチで実行します。最初にスキーマを確認し、インデックスを指定するリクエストはリビジョンに固定します。ローカル画像はimagesを通じて指定します。 |
スプレッドシート
| ツール | アクセス | 説明 |
|---|---|---|
list_sheets | 読み取り | タイトル、ロケール、タイムゾーン、および各シートのID、サイズ、固定行を取得します。 |
read_rows | 読み取り | ヘッダーをキーとするオブジェクト形式で行を読み取ります。数値、ISO形式の日付、正確な小数を保持した通貨など、型付きの値が返されます。 |
read_sheet_cells | 読み取り | ヘッダーのないシートについて、数式、リンク、チップ、メモを含む疎なセルデータを読み取ります。 |
append_rows / upsert_rows | 書き込み | 最後の行の後に行を追加するか、キー列で照合して更新し、1つのアトミックなバッチで実行します。 |
write_range | 書き込み | 名前付きシートのA1範囲に値または数式を書き込み、変更前にセルに格納されていた内容を返します。 |
format_range | 書き込み | 数値形式、テキストスタイル、色、罫線、固定する行と列を設定します。 |
link_sheet_cells | 書き込み | 既存のテキストセルにハイパーリンクを設定します。最初に、想定されるテキストと一致することを確認します。 |
add_chart | 書き込み | データ範囲からグラフを作成します。 |
create_spreadsheet | 書き込み | フォルダー内に、名前付きシートと太字で固定されたヘッダー行を含む新しいスプレッドシートを作成します。 |
get_spreadsheet | 読み取り | シート、結合セル、条件付き書式、フィルター、保護範囲とバンド付き範囲、グラフ、スライサー、テーブル、グループ、名前付き範囲など、すべてのIDを含む構造をA1形式で取得します。または、範囲とフィールドマスクを指定して、グリッドデータを含む生のJSONを取得します。 |
get_values | 読み取り | 複数の範囲の値(またはデータフィルターで選択したセル)を、書式設定済み、書式なし、または数式として取得します。 |
update_values / clear_values | 書き込み | 1回の呼び出しで、複数の範囲またはデータフィルターに値を書き込むか(生データまたは型付き)、書式を保持したまま値を消去します。 |
append_values | 書き込み | 指定した範囲にあるテーブルの後に、Sheetsが検出した行を追加します。 |
batch_update_spreadsheet | 書き込み | Sheets APIリクエストを1つのアトミックなバッチで実行します。最初にスキーマを確認し、GridRange、GridCoordinate、DimensionRangeを指定する箇所ではA1形式を使用できます。 |
copy_sheet_to | 書き込み | 1つのシートを別のスプレッドシートまたは同じスプレッドシートにコピーします。 |
search_developer_metadata | 読み取り | IDまたはデータフィルターでデベロッパーメタデータを検索し、各タグの付与位置をA1形式で取得します。 |
スライド
| ツール | アクセス | 説明 |
|---|---|---|
list_layouts | 読み取り | デッキのレイアウトと、それぞれのプレースホルダーを一覧表示します。 |
read_deck | 読み取り | スライドごとに、レイアウト、タイトル、その他のテキスト、発表者ノートを表示します。 |
get_thumbnails | 読み取り | スライドごとに PNG の URL を取得します(有効期限は約30分です)。 |
create_deck_from_outline | 書き込み | テンプレートを新しいデッキにコピーし、アウトラインの項目ごとに1枚のスライドを作成します。最初にテンプレートとの整合性を確認します。 |
fill_placeholders | 書き込み | デッキ全体で {{tag}} を置き換え、それぞれの個数を表示します。 |
get_presentation | 読み取り | すべてのオブジェクト ID を含む構造を取得します。スライドごとに、各要素のサイズ、変換、正確なテキスト、ノートのシェイプを表示します。または、フィールドマスクを使って生の JSON を取得します。 |
batch_update_presentation | 書き込み | 1つのアトミックなバッチで任意の Slides API リクエストを実行します。最初にスキーマとの整合性を確認し、必要に応じてリビジョンを固定できます。ローカル画像には images を使用します。 |
create_presentation | 書き込み | フォルダー内に空のデッキを作成します。batch_update_presentation を使って作成できます。 |
タスク
| ツール | アクセス | 説明 |
|---|---|---|
list_task_lists | 読み取り | 各アカウントのすべての Google Tasks リストを表示し、デフォルトのリストに印を付けます。 |
list_tasks | 読み取り | すべてのアカウントとリストのタスクを表示します。指定がない限り未完了のタスクを表示し、必要に応じて2つの日付の間に期限があるタスクに絞り込めます。 |
create_task / create_task_list | 書き込み | タスク(タイトル、メモ、期限、サブタスクとして、または兄弟タスクの後に作成)または新しいリストを作成します。 |
update_task / complete_task | 書き込み | タスクのタイトル、メモ、期限を変更したり、完了済みにしたり、再び未完了にしたりします。変更がある項目だけを送信するため、繰り返し実行しても何も変わりません。 |
move_task | 書き込み | 別のタスクの下、兄弟タスクの後、または同じアカウントの別のリストに移動します。 |
連絡先
| ツール | アクセス | 説明 |
|---|---|---|
find_people | 読み取り | 名前から、その人の住所をすべてのアカウントで検索します。連絡先、Gmail に保存された住所、Workspace ディレクトリの情報を統合し、1人につき1つのエントリーとして表示します。 |
Meet
| ツール | アクセス | 説明 |
|---|---|---|
list_meetings | 読み取り | カレンダーの予定、Meet のリンク、または直近の日付に基づいて会議を一覧表示します。それぞれの会議の文字起こし、スマートノート、録画も表示します。 |
get_transcript | 読み取り | 会議で誰が何をいつ話したかを、行ごとに表示した文字起こしを取得します。 |
トラブルシューティング
失敗すると {"error": {"kind", "message", "remedy"}} が返され、remedy に次の手順が示されます。
config: "credentials at ... are missing or unparseable"、「Drive に grant がありません」、または「"work" の calendar grant がありません」(ほかの製品でも同様)。そのアカウントで該当製品の同意手続きを実行してください(初回実行)。メッセージには、同意済みのアカウントが一覧表示されます。
config: "no address is known for "work"" または ""work" is not a mailbox here"。 GMAIL_ADDRESSES に work=<address> を追加するか、GMAIL_MODIFY_ACCOUNTS に work=<path> を追加してください。「"no OAuth client is known"」は、GOOGLE_OAUTH_CLIENT_FILE が設定されていないことを意味します。
input: "no consent is waiting for that state"。 同意手続きの期限が15分で切れたか、すでに完了したか、別の状態ディレクトリを使用しているサーバーのコピーで開始されています。もう一度開始してください。同意URLは1回だけ使用できます。
同意時に wrong_account または insufficient_scope コードを伴う auth。 別のアドレスで承認したか、チェックボックスをオフのままにしています。何も保存されていません。指定されたアドレスで再度開始し、すべてのチェックボックスをオンにしてください。後続の呼び出しで insufficient_scope が発生する場合は、その呼び出しに必要な権限が grant にありません(フィルターには gmail.settings.basic が必要です)。該当製品の同意手続きをもう一度行ってください。
readonly_grant コードを伴う auth。 メールボックスでは GMAIL_ACCOUNTS の読み取り専用 grant が使用されているため、書き込みリクエストは送信前に拒否されます。そのアカウントに gmail の同意を付与してください。
invalid_grant コードを伴う auth。 リフレッシュトークンの有効期限が切れたか、取り消されました。該当製品の同意手続きをもう一度行ってください。アプリが Testing 中の場合は、毎週の期限切れを防ぐために公開してください。GMAIL_ACCOUNTS の読み取り専用 grant は、それを作成した仕組みが更新します。deleted_client は、Cloud コンソールから OAuth クライアント自体が削除されたことを意味します。
SERVICE_DISABLED または accessNotConfigured の理由を伴う api。 grant の OAuth クライアントが属する Cloud プロジェクトで、remedy に示された API を有効にしてください。
ファイルに対するステータス 403 を伴う api。 アカウントにそのファイルを開く権限または変更する権限がありません。そのアカウントと共有されていることを確認してください。editors スコープだけを使用する場合、Drive ではクライアントがコピーできるのは、自分で作成または開いたファイルだけです。そのため、create_deck_from_outline では手動で作成したテンプレートをコピーできません。そのアカウントで Drive の grant を使用してください(GOOGLE_EDITORS_DRIVE_ACCOUNT)。
outcome_unknown の理由を伴う api。 Google にリクエストが届いた可能性がある段階(接続の切断、5xx)で書き込みに失敗したため、再試行されませんでした。まず(送信済みまたは下書き、agenda、list_tasks、read_document、read_rows、read_deck)を確認し、そこにない場合にのみ再試行してください。
stale_revision の理由を伴う api。 読み取り後にドキュメントが変更されています。もう一度読み取り、編集をやり直してください。
list_history からのステータス 404 を伴う api。 Gmail でその historyId の有効期限が切れています。search_threads でもう一度検索し、health から新しいアンカーを取得してください。
quota。 Google の1分あたりのクォータ制限により、すべての再試行が失敗しました。1分待ってください。
candidates を伴う ambiguous。 そのパスに該当する Drive オブジェクトが2つあります。もう一度呼び出し、一覧表示された ID のいずれかを file_id で指定してください。
仕組み
アカウントと許可
- プロダクトとアカウントごとに許可は1つで、それぞれ独自のトークンキャッシュと、そのプロダクトのスコープのみを持ちます。Tasks の許可ではメールを読めず、Calendar のトークンが Gmail に届くこともありません。
- 許可は一覧から選ぶのではなく、検索されます:Calendar、Docs、Sheets、Slides、Tasks、contacts、Meet は、呼び出しのたびに
<root>/<label>/credentials.jsonを探すため、新たに同意を取得しても再起動は不要です。 - 認証情報は google.oauth2 JSON 形式です(
refresh_token、client_id、client_secret、token_uri、scopes、account)。保存済みのアクセストークンは無視されます。サーバーはロックを取得してトークンを更新するため、同じ state ディレクトリを共有するコピーも1回だけ更新します。 - スコープを宣言するのはファイルであり、Google が許可します。
healthは各許可の実際のスコープ、クライアント、アドレスを Google の tokeninfo から読み取り、読み取り専用の Gmail 許可に書き込みスコープが追加されている場合は失敗します。 - 同意では PKCE(S256)と
prompt=consent(毎回リフレッシュトークンを取得)を使用し、login_hintにはアカウントのアドレスを設定します。別のアドレスで承認された許可、必須スコープが不足している許可、リフレッシュトークンがない許可は、何も書き込まずに拒否されます。オプションのスコープは省略できます。同意待ちの情報と許可はモード 0600 で書き込まれ、置き換えられた許可は.bakとして保持されます。また、結果にトークンが表示されることはありません。
Gmail
- 送信を根拠なく再試行することはありません:Gmail が処理しなかったことを証明する応答(429、レート制限による 403、更新前の 401)のみ再試行します。送信に必要な情報はすべて送信前に読み取るため、送信済みのメールが失敗として報告されることはありません。
- 返信は Gmail 本来の見た目になります:元のマークアップ、Gmail らしい文面の引用、インライン画像を含み、Gmail では引用が引き続き「•••」の後ろに折りたたまれます。転送にも画像が含まれます。
- 添付ファイルはバイト単位で正確に扱うか、拒否します:サーバーのファイルルート(
MCP_FILE_ROOTS)内のpath、またはスクリプトから渡す、モデルが入力したものではない、ソースのsha256付きcontent_base64を使用します。合計を 30 MiB に制限することで、Gmail の 25 MB を少し超えるメッセージは Gmail 自身に拒否させ、それを大幅に超える場合はアップロードしません。 - 添付ファイルはすべて揃っているか、存在しないかのどちらかです。 各パートの長さを Gmail が示すサイズと照合し、別のファイルを上書きすることはありません(2つ目の
invoice.pdfはinvoice (2).pdfになります)。Gmail の「添付ファイルをすべてダウンロード」する ZIP では、メッセージ ID をキーに持つパートが黙って除外されるため、harvest_attachmentsは代わりに各メッセージの MIME ツリーをたどります。 - 読み取り。 本文は 40,000 文字で切り詰められ、HTML のみの本文はテキストに変換され、その旨が
bodySourceに示されます。Gmail のリンクでは?authuser=<address>を使用します。/u/0/はサインイン順序に依存するためです。 - 速度。
search_threadsは、サマリーの読み取りに必要なヘッダーだけを使って、スレッドのメタデータを一度に16件取得します。Gmail のバッチエンドポイントはサブリクエストを1つずつ実行するため、実測では速度が低下します。
カレンダー
予定の空き状況はイベントから取得し、freebusy.query からは取得しません。 freebusy.query は calendar.events スコープを受け付けず、仮の予定ブロックや終日イベントの日付を判定できないためです。予定表の競合、free_busy、find_time には、すべて同じルール(calendar/domain/events.ts)を適用します。
| イベント | 判定 |
|---|---|
| 確定済み、または未回答の招待 | 予定あり |
| 仮の予定としてマークされている、または「たぶん」と回答されている | 予定あり、tentative としてフラグ付け。find_time がその時間に予約できるのは tentative_is_free の場合のみ |
| 辞退済み、「予定あり」以外に設定、キャンセル済み、または勤務場所のエントリ | 空き |
| 終日で、予定ありのままになっている | カレンダーのタイムゾーンで午前0時から翌日の午前0時まで予定あり |
| 予定ありだが、有効な開始時刻または終了時刻がない | 削除せず、unknown に一覧表示 |
- タイムラインは1つです。 重複するブロックや接しているブロックは結合されるため、2つのアカウントに登録されている会議も1回として数えます。他の人の予定(
attendees)は、すべてのアカウントを通じて問い合わせる freebusy.query から取得します。誰にも確認できない場合は、空きではなくunknownになります。 - 時刻。
2026-09-29は1日全体を表し、find_timeは一度にローカルの1日分を処理するため、DST の切り替えをまたいでも09:00は09:00のままです。 - 書き込み。 シリーズ ID は予定の ID に見えるため、シリーズ全体を対象にするには
scope: "series"を指定します。meet: trueの場合、この書き込み専用に作成したリクエスト ID を送信するため、再試行しても Meet の呼び出しは1回だけです。集中時間と不在設定は Google のルール(メインカレンダー、終日ではない、ゲストなし、常に予定あり)に照らして確認します。auto_declineで指定されない限り、何も辞退しません。辞退するたびに主催者にメールが送信されるためです。
Drive
- パスはアドレスではなくクエリです。 1つのフォルダーに同名のオブジェクトを2つ置けます。
resolve_pathは両方の ID を報告し、move_fileはそのような重複の作成を拒否します。名前に/が含まれる場合(Meet はWeekly sync - 2030/01/15のようなフォルダーを作成します)、ID でしかアクセスできません。macOS で作成された名前は NFD 形式で保存されることが多いため、検索のたびに両方の表記を確認します。 - 移動はメタデータの呼び出し1回で行います。 同期されたローカルコピーでは、Doc はプレースホルダーファイルです。その場所で移動すると、同期処理によって Doc がプレースホルダーに置き換えられます。
- バイトデータは送受信の両方で確認します。
upload_fileは Drive 独自のチェックサム(または読み戻したバイトデータ)をソースと比較し、差異があれば元に戻します(置き換えの場合は新しいリビジョンを削除し、新規ファイルの場合はゴミ箱に移動します)。download_fileは書き込む前に確認します。変換を伴うアップロードでは比較するバイトデータがないため、Drive が指定された Google 形式で作成したことを確認します。 - レート制限。 Drive はレート制限を理由とともに403として返します。ここでは権限エラーではなく、レート制限として扱います。クォータは分単位のため、拒否された場合は少なくとも22秒待機します(Docs、Sheets、Slides も同様です)。
Docs、Sheets、Slides
各種操作(Markdown セクション、ヘッダーをキーにした行、アウトラインから作るデッキ)では、誤りやすい計算(Docs の UTF-16 インデックス、Sheets のグリッド座標、Slides のオブジェクト ID)を、テスト済みの純粋関数で処理します。完全な API(get_*、find_in_document、batch_update_*)を使えば、ほかの機能にもアクセスできます。
- 書き込みはすべて単一のリクエストです:Docs または Slides の
batchUpdateは、計算元のリビジョンに固定されます。Sheets のbatchUpdateは、全体を適用するか、まったく適用しないかのどちらかで、Google に届いた可能性がある場合は再試行しません。ファイルは ID または URL で指定できます。 - すべてのバッチは送信前にチェックされます。API の Discovery ドキュメントを基準にチェックします。このドキュメントは
src/<product>/domain/discovery.jsonに同梱されており、npx tsx scripts/refresh-discovery.tsで更新できます。チェック対象は、種類、フィールド、型、列挙値、読み取り専用フィールド、フィールドマスクで、タイプミスには最も近い正しい名前が示されます。問題があれば、すべてまとめて一度に拒否し、何も送信しません。editors_api_referenceも同じドキュメントを参照するため、チェックで受け付けられる内容を正確に説明します。Sheets のリクエストだけを対象とする JSON Schema では、各セッションに数百キロバイトが読み込まれてしまいます。 - Docs。
get_documentは、各要素の[startIndex, endIndex)を表示します。テキスト以外の要素が占めるインデックスごとに、U+FFFC が 1 つ含まれます。インデックスを指定するバッチにはexpected_revision(ドキュメントに変更があった場合は拒否)またはtarget_revision(Docs が後続の編集をまたいで位置を引き継ぎます)が必要です。edit_document_sectionは、Markdown では保持できない内容(画像、脚注など。read_documentではnotShownとして数えられます)を含むセクションを、drop_hiddenが true でない限り拒否します。find_in_documentのregexは、1.5 秒の制限時間を設けた新しい JavaScript コンテキストで実行されるため、バックトラッキングパターンによってプロセスが停止することはありません。 - Sheets。
read_rowsは、シートのタイムゾーンで日付を読み取り、通貨セルは{value, amount, formatted}として読み取ります。amountは正確な小数文字列です。書き込みでは、数式に"=..."、日付に"YYYY-MM-DD"、数値に{"amount": "12.50"}を指定します。double で正確に保持できない値は拒否されます。 - ローカル画像。 Docs と Slides では、取得した URL からのみ画像を挿入できます。そのため、
images(名前とファイルパスの対応表)に指定された PNG、JPEG、GIF はそれぞれアカウントの Drive にアップロードされ、バッチの実行中はリンク共有されます。その後、結果にかかわらず共有を解除してゴミ箱に移動します。各コピーの処理結果は、返される結果に記載されます。 - Developer Preview のリクエスト(コメント、提案の承認など)はチェックを通過しますが、Cloud プロジェクトが Google のプレビュープログラムに参加していない限り、Google に拒否されます。
Tasks、Contacts、Meet
- Tasks。 期限は日付です。Google Tasks は午前 0 時 UTC を保持し、時刻は破棄します。
include_completedを指定すると、通常 API では非表示になる、Google のアプリで完了したタスクも表示されます。 - Contacts。 結果はアドレスで統合されます。連絡先、ディレクトリ、Gmail が保存したアドレスの順に表示されます。アカウントが読み取れないソースは、誰もいないものとして扱うのではなく、
unavailableに記載されます。 - Meet。
list_meetingsは、Meet コードを使ってカレンダーの予定に対応する会議を検索します(アカウントの Calendar 権限で読み取ります)。また、1 回限りの開催では、その予定の開始時刻から 1 時間以内に始まった会議も検索します。文字起こしとメモは Google Docs なので、read_documentで開けます。get_transcriptは[0:12:05] Ana Popescu: ...の形式で読み取り、参加者の情報をもとに各話者の名前を記載します。
scripts/ のスモークスクリプトは、ビルド済みのサーバー(または MCP_URL を指定した稼働中のサーバー)を実際のアカウントに接続して実行します。書き込みを行うスクリプトは SMOKE_ACCOUNT を受け取り、実行後に後片付けを行います。
制限事項
- メールやファイルを完全に削除することはできず、Gmail と Drive のゴミ箱に移動するのみです。ただし、ここで削除した下書き、ラベル、フィルターは完全に削除されます。
- フィルターで設定できるのはラベルのみです(転送はできません)。また、Gmail ではフィルターを更新できないため、新しいフィルターを作成して古いものを削除してください。
- Drive で保持できる認可は 1 つなので、Drive ツールがアクセスできるのは 1 つのアカウントの Drive のみです。他のアカウントのファイルには、Docs、Sheets、Slides、コメント、共有の各ツールからアクセスできます。
- 同意にはブラウザーが必要で、リダイレクト先のアドレスは手動でコピーして戻す必要があります。ループバックポートで待ち受けるものはありません。
read_docは Sheet を最初のタブの CSV として読み取ります(Drive のエクスポートにはタブを選択する機能がありません)。read_rowsでは任意のタブを読み取れます。- Docs の Markdown ツールでは、番号付きリストの下の箇条書きはサブ番号として出力されます(リストごとに定義済みの形式が 1 つあります)。水平線は削除され、画像はリンクになります。
- API ではまったく実行できないこと:Docs への水平線の挿入、リストの特定の階層の記号の設定、提案の作成、Doc 内のテキストへの API コメントの紐付け、Slides へのアニメーションの追加です。Apps Script を使えば一部は実行できますが、独自のプロジェクトと認可が必要です。
- 画像を Docs や Slides に挿入する際は、Google が URL から取得します。そのため、ローカルファイルは一括処理にかかる数秒間、Drive でリンク共有されます。Sheets の API では画像を挿入できません(
=IMAGE()数式には、公開状態を維持するリンクが必要です)。 - Sheets には条件付き書き込み機能がありません:計画の読み取り後、書き込み前に誰かが行を挿入すると、その下の行がずれます。また、API にはリビジョンを固定する機能もありません。
- スキーマチェックで認識されるのは、このサーバーの構築に使用された API リビジョンです。Google が後から追加したフィールドは、そのリビジョンを示すエラーとともに拒否されます。使用するには Discovery ドキュメントを更新してください。
- Tasksではここから削除できません。また、繰り返しタスクのリストは変更できず(Google が拒否します)、期限には時刻を指定できません。
- ディレクトリが応答するのは Workspace アカウントのみです。個人アカウントの場合は
unavailableとして報告されます。 - Meetの記録は 30 日間保持され、アカウントが参加または主催した会議のみが表示されます。文字起こしやスマートノートを利用できるのは、会議でそれらが有効にされている場合のみです(Workspace の機能です)。
- サイズ制限:メッセージの添付ファイルは合計 30 MiB まで、Drive のアップロードまたはダウンロードは 100 MiB まで、
free_busyとfind_timeは最大 62 日間です。
Google Workspace 向けのその他のサーバー
2026-10-15 に検索しました。Google は独自のサーバーを運用しており、コミュニティで保守されているサーバーも 2 つあり、幅広い機能を提供しています。
- Google のリモート MCP サーバーは、Gmail、Drive、Docs、Sheets、Slides、Calendar、Chat、People、Classroom に対応しています。Google Cloud プロジェクトでの登録が必要なデベロッパープレビュー版で、Streamable HTTP を使用し、アカウントごとに OAuth 接続を 1 つ使います。機能は限定的です。Gmail サーバーでは送信、添付ファイルのダウンロード、増分同期ができません。Drive サーバーではファイルの移動、名前の変更、ゴミ箱への移動ができません。Docs、Sheets、Slides では、生の
batchUpdateが検証なしで実行されます。 docs/google-gaps.md では、ツールごとに比較しています。 googleworkspace/cliは Google のコマンドラインツールですが、MCP モードは廃止されました。その Gemini CLI 拡張機能であるgemini-cli-extensions/workspaceは、サインイン済みの 1 アカウント向けの stdio サーバーです。- PyPI の
workspace-mcpは、stdio または OAuth 2.1 を使用した複数ユーザー向けの Streamable HTTP に対応しています。Forms、Tasks、Chat、Contacts、Apps Script を含む 12 製品にわたって 120 以上のツールを提供し、各呼び出しは 1 つのアカウントに対して実行されます。 - npm の
@aaronsb/google-workspace-mcpは、stdio に対応しています。アカウントごとの OAuth トークンをローカルディスクに保存するため、複数のアカウントを並行して利用できます。Gmail、Calendar、Drive、Docs、Sheets、Tasks、Meet、Contacts に対応していますが、Slides には対応していません。
コミュニティサーバーは、より多くの製品を利用できます。このサーバーは、他のどのサーバーにもない機能を提供するためにあります。メール検索、アカウント間の競合を考慮した予定表、全アカウントの空き時間の読み取りをそれぞれ 1 回の呼び出しで行えます。また、書き込み時に既定のアカウントはありません。Gmail は historyId から同期し、Drive は変更カーソルとリビジョンを備えています。Docs、Sheets、Slides は操作単位でも、各 API の完全な batchUpdate としても利用できます。送信前に API のスキーマに照らして検証され、Docs の編集は、その内容の計算元となったリビジョンに固定されます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。