Skip to content

v2.0.0 — PKCE 実装・脆弱性解消・MCP プロトコル 2026-07-28 対応

Latest

Choose a tag to compare

@takumi0706 takumi0706 released this 18 Aug 03:51

セキュリティ修正、依存関係の更新、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/server v2 へ移行(プロトコル 2026-07-28
  • tools/list が正しいスキーマを広告するようになりました。 従来はネストしたオブジェクトの properties が失われ、createEventupdateEventevent 引数がクライアントから不透明でした
  • prompts/get を実装しました。 従来は 10 個のプロンプトを広告しながら取得できませんでした
  • resources/read が仕様どおりの形式を返すようになりました
  • initializecapabilities から内部構造が漏れないようになりました

その他

  • ツールチェーンを pnpm へ移行
  • googleapis 148 → 174、honozod などを更新
  • 出荷コードから any と型アサーションを排除し、lint で強制
  • npm 配布物にテストコードが混入していた問題を修正
  • npm publish に provenance 署名を追加

検証

5 つのツール(authenticate / getEvents / createEvent / updateEvent / deleteEvent)と tools/list / prompts/get / resources/read を、実際の Google アカウントで動作確認しています。

詳細は #23 を参照してください。