セキュリティ修正、依存関係の更新、MCP プロトコルの現行世代への追随を含むメジャーリリースです。
⚠️ 破壊的変更
- Node.js 20 以上が必要になりました(従来の
>=16という記載は、依存パッケージの実際の要求と食い違っていました) - MCP プロトコルが
2026-07-28世代へ。既定で 2025 系も同時に提供するため、既存クライアントはそのまま動作します
セキュリティ
以前のバージョンをお使いの方は更新を推奨します。
- PKCE (S256) を実装しました。 これまでのバージョンは README と SECURITY.md で PKCE 対応を謳っていましたが、実際には
code_challengeを一切送っていませんでした。デスクトップ配布の MCP サーバーはclient_secretを秘密にできないパブリッククライアントであり、RFC 8252 が要求する認可コード横取り対策が欠落していました stateパラメータを 256bit の CSPRNG 値に変更しました。 従来はMath.random()由来で、比較も非タイミング安全でした。現在は定数時間比較・使い捨て・10 分で失効します- OAuth エラーページの反射型 XSS を修正しました。 エラー詳細はページに出さずログに残す方式に変更し、埋め込む値はすべてエスケープします
redirect_uriを設定値に固定しました。 従来はリクエストのHostヘッダ由来でした- ポートが使用中の場合は認証を中断するようになりました。 従来は「既に自分のサーバーが動作中」とみなして続行していたため、同一ホストの任意のプロセスが 4153 番を先に押さえるだけで、ブラウザをそのプロセスへ誘導できました
TOKEN_ENCRYPTION_KEYを検証するようになりました。 64 桁の 16 進数が必須で、不正な値や全ゼロの鍵は起動時に拒否します- OAuth スコープを最小権限にしました。 従来はフルスコープ
calendarを要求していましたが、calendar.events+calendar.readonlyに変更し、カレンダー自体の作成・削除権限を落としました - 既知の脆弱性を 0 件にしました(従来 86 件、うち high 11 件)
MCP プロトコル / 仕様準拠
@modelcontextprotocol/serverv2 へ移行(プロトコル2026-07-28)tools/listが正しいスキーマを広告するようになりました。 従来はネストしたオブジェクトの properties が失われ、createEventとupdateEventのevent引数がクライアントから不透明でしたprompts/getを実装しました。 従来は 10 個のプロンプトを広告しながら取得できませんでしたresources/readが仕様どおりの形式を返すようになりましたinitializeのcapabilitiesから内部構造が漏れないようになりました
その他
- ツールチェーンを pnpm へ移行
googleapis148 → 174、hono、zodなどを更新- 出荷コードから
anyと型アサーションを排除し、lint で強制 - npm 配布物にテストコードが混入していた問題を修正
- npm publish に provenance 署名を追加
検証
5 つのツール(authenticate / getEvents / createEvent / updateEvent / deleteEvent)と tools/list / prompts/get / resources/read を、実際の Google アカウントで動作確認しています。
詳細は #23 を参照してください。