GitHub Repo
OpenHands 1.24、MCP認可の継続利用を修正 トークン期限切れ後のツール失効に対処
新版ではクラウドのOAuth状態を保持し、SDKでトークン更新エンドポイントと状態の書き戻し処理を修正した。効果が行き渡るかはバックエンドのデプロイ状況にも左右されるため、既存の接続で会話をまたいで再利用できるか確認が必要だ。

OpenHandsは9月25日、MCPのクラウド認可に関する修正を含む1.24.0をリリースし、SDKを1.49.6に更新した。この変更は、エージェントが初回の接続には成功するものの、アクセストークンの期限切れ後に外部ツールを使えなくなる問題に対処するものだ。[リリースノート](https://github.com/OpenHands/OpenHands/releases/tag/v1.24.0)
MCPを使うと、エージェントは外部サーバーが提供するツールを読み込み、実行時にそのサーバーへ呼び出しを転送できる。公式ドキュメントによると、OpenHandsはまず設定を読み込み、接続を確立してツールを登録する。そのため、認可を確実に更新できるかどうかは、後続のタスクでも同じ機能を利用できるかに影響する。エンジニアリングの観点では、初回のインストールテストだけでは、時間の経過とともに起きるこの種の障害を捉えきれない。特に、翌日のスケジュール実行や、サンドボックスを繰り返し作り直すワークフローでは、認証情報のライフサイクルを検証する必要がある。[MCPドキュメント](https://docs.openhands.dev/overview/model-context-protocol)
メンテナーによると、旧版のクラウド保存処理ではOAuth認証情報を固定のBearerヘッダーに変換し、更新トークンを含む認可状態を削除していた。その結果、GitLabへの接続は約2時間後に失効する可能性があった。新版ではOAuth状態を保持し、再保存時に古いヘッダーをクリアする。また、サーバーが再同意は不要と判断した場合、フロントエンドは処理結果を照会するようになり、認可URLが返されないことをエラーとして扱わなくなった。[フロントエンドの修正](https://github.com/OpenHands/OpenHands/pull/17677)
SDKでは、別の失敗経路も修正された。新しい会話で作成されたクライアントが、更新リクエストを誤ったデフォルトのエンドポイントに送る可能性があった。新しい実装は、まず認可サーバーのメタデータを探索して正しいエンドポイントを取得する。また、サンドボックスで更新された状態をwebhook経由で書き戻し、次の会話でもローテーション後のトークンを使えるようにする。[SDKの修正](https://github.com/OpenHands/software-agent-sdk/pull/5306)
SDK 1.49.6は同日、Python 3.12以上を要件としてPyPIで公開された。メンテナーの報告では、フロントエンド関連のテスト74件と、SDKおよびエージェントサーバーのテスト67件が通過した。これらはプロジェクト内のテスト記録であり、すべてのサービスプロバイダーやホスティング環境で問題が解消したことを証明するものではない。[パッケージページ](https://pypi.org/project/openhands-sdk/1.49.6/)、[フロントエンドのテスト](https://github.com/OpenHands/OpenHands/pull/17677)、[SDKのテスト](https://github.com/OpenHands/software-agent-sdk/pull/5306)
デプロイ時には、アプリケーションサーバー側の対応バージョンも確認する必要がある。修正全体はフロントエンド、SDK、クラウドバックエンドにまたがっており、公開されたリリース記録だけでは、各ホスティング環境への更新が完了したかは分からない。書き戻しに失敗した場合、新しいトークンはその実行中には使えるものの、会話をまたいだ永続化に失敗する可能性がある。エンジニアリングチームは、トークン期限切れ後もツールを読み込めるか、サンドボックス再作成後も接続を継続利用できるかを検証し、書き戻しに関する警告を監視すべきだ。旧方式で保存した接続についても、更新トークンが残っているか確認する必要がある。すでに失われている場合は、認可状態を完全に復元するために再認可が必要になる可能性がある。[デプロイ上の制約](https://github.com/OpenHands/OpenHands/pull/17677)、[書き戻しの挙動](https://github.com/OpenHands/software-agent-sdk/pull/5306)