chore: CI近代化+依存更新(7日ルール)+脆弱性39→0件+/mcp本番バグ修正#4
Conversation
単一のMcpServerインスタンスにリクエスト毎のtransportをconnectしていたため、 warm isolateで2回目以降の/mcpリクエストが "Already connected to a transport" で500になっていた(本番で200/200/500を実測)。 SDKはProtocolインスタンスごとに1 transportのみ許可するため、 createMcpServer()ファクトリでリクエスト毎に生成する方式に変更。 連続initialize×3が全て200になるregressionテスト(Test 6b)を追加。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
公開から7日以上経過した最新版のみ採用(サプライチェーン対策の7日ルール): - hono 4.7.5 → 4.12.23 (4.12.25は7日未満のため見送り) - zod 3.25.76 → 4.4.3 - @modelcontextprotocol/sdk 1.17.4 → 1.29.0 - @hono/mcp 0.1.1 → 0.3.0 - @cloudflare/workers-types → 4.20260605.1 - @typescript/native-preview → 7.0.0-dev.20260604.1 - pnpm overrides: path-to-regexp 8.4.0 / qs 6.15.2 (transitive脆弱性パッチ) pnpm audit: 39件(high 8) → 0件 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- actions/checkout v4→v6, actions/setup-node v4→v6, actions/github-script v7→v9 (Node 20 deprecated警告の解消、全てNode 24対応版・公開7日以上経過を確認) - pnpm/action-setup@v6 を追加し npm install → pnpm install --frozen-lockfile に変更 (lockfile無視のインストールを廃止、7日ルールで固定したバージョンをCIでも厳守) - Node.js 22 → 24 (LTS) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
🚀 Preview deployed! https://pera1-preview.kazu-san.workers.dev This preview will be updated on every push to this PR. |
There was a problem hiding this comment.
Pull request overview
CIのNode/actionのdeprecation対応と依存関係の脆弱性解消(pnpm audit 39→0)を行いつつ、本番 /mcp の warm isolate での連続リクエスト時に 500 になる既存バグ(transport 再接続)を修正するPRです。Workers 上での MCP 提供と CI の再現性(lockfile 準拠)を同時に強化する位置づけです。
Changes:
/mcpをリクエスト毎にMcpServerを生成する実装へ変更し、連続 initialize での 500 を防止- MCP regression テスト(initialize×3 の連続成功)を integration test に追加
- CI/Deploy を pnpm +
--frozen-lockfileに統一し、actions/Node を更新(Node 24 / actions v6・github-script v9)
Reviewed changes
Copilot reviewed 7 out of 8 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
src/mcp.ts |
McpServer をファクトリ化してリクエスト毎に新規生成できるように変更 |
src/index.ts |
/mcp ルートで createMcpServer() を呼び出し、transport再接続問題を回避 |
tests/integration/http.spec.ts |
/mcp 連続 initialize の regression テスト(Test 6b)を追加 |
package.json |
hono/zod/MCP SDK/@hono/mcp 更新+pnpm overrides 追加 |
pnpm-lock.yaml |
依存更新反映+脆弱性対策 overrides を lockfile に反映 |
.github/workflows/ci.yml |
actions更新+pnpm化+Node 24 化+pnpm exec 利用へ変更 |
.github/workflows/deploy.yml |
deploy を pnpm + frozen-lockfile + Node 24 に更新 |
.artifacts/ci-deps-update/REPORT.md |
変更理由・検証結果・7日ルール根拠のレポート追加 |
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| permissions: | ||
| pull-requests: write | ||
| steps: |
There was a problem hiding this comment.
検証結果を共有します。
403になるという点は事実誤認です: PRへのコメントは issues API 経由でも pull-requests スコープで認可されます(GitHubはリソース種別で権限をマッピング)。実証として、この permissions: pull-requests: write のみの設定で、本PRのCI実行(run 27398357374, 06:16:56Z)にて github.rest.issues.listComments/createComment が実際に成功し、github-actions[bot] のプレビューコメントが投稿されています。
contents: read の点は妥当なので採用しました: permissions明示時に未指定スコープがnoneになるのはご指摘の通りで、checkoutが通っていたのはpublicリポジトリだからです。private化に備えて c9c77cf で contents: read を明示しました。
permissionsブロック明示時は未指定スコープがnoneになるため、 actions/checkout用にcontents: readを明示(現状はpublicリポジトリのため 動作していたが、private化に備えた堅牢化) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
WHY
pnpm auditで 39件の脆弱性(high 8 / moderate 28 / low 3)。hono 4.7.5 の既知脆弱性や MCP SDK 1.17.4 配下の古い express 系が原因。/mcpが warm isolate で500になる既存バグを発見(実測: 200/200/500)。単一 McpServer にリクエスト毎の transport を connect する実装が原因で、SDK 1.29 ではこのエラーが確実に発生するため修正を同梱。HOW
/mcpはcreateMcpServer()ファクトリ化でリクエスト毎に生成(SDK は 1 Protocol = 1 transport のため)。regressionテスト追加。npm installをやめ、pnpm +--frozen-lockfileで7日ルールの固定をCIでも厳守。WHAT
src/mcp.tssrc/index.ts: McpServer ファクトリ化tests/integration/http.spec.ts: Test 6b(連続initialize regression)追加.github/workflows/ci.ymldeploy.yml: actions更新・pnpm化package.jsonpnpm-lock.yaml: 依存更新+overridesEvidence
pnpm audit0件 / frozen-lockfile インストール成功🤖 Generated with Claude Code