Fragments of verbose memory

冗長な記憶の断片 - Web技術のメモをほぼ毎日更新

Dec 31, 2025 - 日記

fastmcp-gsuite: 決算作業で活躍したMCPサーバとこの2週間のアップデート

fastmcp-gsuite: 決算作業で活躍したMCPサーバとこの2週間のアップデート cover image

年末の決算作業、正直しんどいですよね。「あの領収書、メールで来てたはずだけどどこ行った…」「カレンダーから出張日程を洗い出さないと…」みたいな作業が延々と続くわけです。

今回、そんな地獄の作業を救ってくれたのが、自分で作ったMCPサーバ (Model Context Protocol)のfastmcp-gsuite でした。Claude Desktop から「12月の経費メール探して」って言うだけで、Google Workspace のGmail、Calendar、Driveを横断検索してくれる。これがなかったら年越しできなかったかもしれません。

fastmcp-gsuiteって何?

fastmcp-gsuite は、Gmail、Calendar、DriveをLLM経由で操作できるMCP サーバです。Python 製。

元々はMarkusPfundstein氏のmcp-gsuite というプロジェクトがあったんですが、fastmcp ライブラリを使った実装に全面書き換えしたフォーク版を作りました。フォークとはいえ、OAuth設定CLI、添付ファイルのDrive直接保存、ゴミ箱機能などの主要機能は自分で一から実装したので、ほぼ自作に近いです。

できること:

  • 複数アカウント切替: 個人用と仕事用、行ったり来たり
  • Gmail: 検索、下書き、返信、添付ファイル保存
  • Calendar: イベントの検索・作成・削除・更新
  • Drive: ファイル検索、アップロード、ダウンロード、ゴミ箱移動

2025年12月10日にGoogleがMCP公式サポートを発表 したんですが、Gmail/Calendar/Driveはまだ対象外。公式が出るまでは自分のツールを使い倒します。

実際に決算作業で使った話

今回の決算作業、Claude Desktopにこんな感じで指示してました:

1
2
3
「12月の経理メールから、交通費の領収書が添付されてるやつ全部探して」
「先月のカレンダーから、取引先との打ち合わせ一覧出して」
「ドライブの『2025決算』フォルダにある請求書PDF、全部落として」

手作業でGmail開いて検索して、一通ずつ添付ファイル保存して…みたいな作業から解放されました。これだけで3〜4時間は浮いた気がします。

この2週間でやったこと

決算作業に追われながらも、使いながら「ここ不便だな」と思ったところをガンガン直してました。せっかくなのでまとめておきます。

1. OAuth設定が面倒すぎたのでCLI作った(12月21日)

正直、OAuth2の設定って毎回忘れるんですよね。Google Cloud Consoleでクライアント作って、スコープ設定して、リダイレクトURI設定して…みたいな。

「毎回15分くらいかかるの、なんとかならないか」と思って対話型セットアップを作りました:

1
2
pip install fastmcp-gsuite
fastmcp-gsuite-setup  # あとは対話に従うだけ

これで5分くらいで終わるようになりました。自分でもよく使ってます。

2. ゴミ箱がないと怖すぎる(12月21日)

最初、Driveのファイル削除が「完全削除」しかなかったんですよ。LLMに「このファイル消して」って言ったら即消えるわけです。怖い。

というわけでゴミ箱対応を追加:

  • trash_drive_file: ゴミ箱に移動
  • trash_drive_folder: フォルダごとゴミ箱に
  • untrash_drive_file: 復元

地味だけど精神衛生上めちゃくちゃ重要な機能でした。

3. 添付ファイルをDriveに直接保存(12月22日)⭐

今回一番作ってよかった機能

最初、添付ファイルを取得しようとしたら、Base64エンコードされたファイルがそのままMCPレスポンスに入ってきたんです。5MBのPDFとか添付されてると、コンテキストウィンドウが一瞬で埋まる。Claudeが「トークン足りません」って言い始めて、決算作業どころじゃなくなりました。

「これじゃ使い物にならん」と思って作ったのがDrive直接保存機能:

  • save_gmail_attachment_to_drive: 添付ファイルをDriveに直接保存
  • bulk_save_gmail_attachments_to_drive: まとめて一括保存

レスポンスには保存先URLだけ返すので、トークン消費ほぼゼロ。これのおかげで決算資料を50件くらい一気に処理できました。

4. 添付ファイルが取れないバグ修正(12月21日)

「あれ、添付ファイルがあるはずなのに取れない…」ってことがあって調べたら、マルチパートがネストしてるメールで添付ファイルを見落としてました。

HTMLメール + 添付ファイルの組み合わせとかで起きてたっぽいです。再帰的にパーツを探索するように直して解決。

5. メール本文が長すぎてトークン爆発問題(12月29日)

添付ファイル問題を解決したと思ったら、今度はメール本文で同じ問題が起きました。メルマガとか、HTMLメールって本文めちゃくちゃ長いんですよね。

ページネーションを追加して対処:

  • max_body_chars: 本文を何文字まで取得するか制限
  • body_offset: 続きを読みたいときのオフセット

これでようやく大量メール処理が現実的になりました。

6. カレンダー予定の更新(12月29日)

「この会議、30分後ろにずらして」みたいな操作ができなかったので追加。作成・削除だけだと微妙に不便だったんですよね。

1
2
3
4
5
6
7
8
update_calendar_event(
    account_email="[email protected]",
    calendar_id="primary",
    event_id="abc123",
    summary="新しいタイトル",
    start_time="2025-01-15T10:00:00+09:00",
    end_time="2025-01-15T11:00:00+09:00"
)

7. トークン切れで止まらなくなった(12月22日)

OAuthトークンの有効期限が切れると、毎回手動で再認証するハメになってたんですが、自動リフレッシュを入れました。これがないと長時間の作業中に突然止まるので地味にストレスでした。

8. MD5チェックサム追加(12月21日)

Drive APIのレスポンスにmd5Checksumを追加。同じファイルを2回アップロードしちゃった、みたいなときの検出用です。決算資料の重複チェックで使いました。

これから

Google公式のMCPサーバが出るまでは、このツールを使い続けます。公式が出たら役目は終わりかもしれませんが、それまでは自分のかゆいところに手が届く実装を続けていく予定です。

やりたいこと:

  • エラーメッセージをもっと親切に
  • レスポンス速度の改善(今ちょっと遅い)

まとめ: 自作ツールは実務で鍛えられる

決算作業という「ガチの実務」で使ったからこそ、「添付ファイルでトークン爆発」とか「長いメール本文で詰まる」みたいな問題に気づけました。結果的にこの2週間で8つくらい機能追加・修正できたのは収穫でした。

特に添付ファイルのDrive直接保存機能は、コンテキスト消費を気にせず大量の資料を処理できるので、自分みたいに「年末に決算資料を掘り起こす」作業がある人にはおすすめです。

GoogleがGmail/Calendar/Drive向けのMCP公式サーバを出すまでは、このツールを育てていきます。

2025年が皆様にとって素晴らしい年になりますように。来年もよろしくお願いいたします。

参考リンク