Skip to content

Extract OpenCode tools into a standalone Node.js MCP server - #3

Merged
nmt3325 merged 1 commit into
mainfrom
standalone-toolbox
Sep 16, 2026
Merged

nmt3325 merged 1 commit into
mainfrom
standalone-toolbox

Conversation

@nmt3325

@nmt3325 nmt3325 commented Sep 8, 2026

Copy link
Copy Markdown
Owner

概要

OpenCode本体をインストールして呼び出す構成をやめ、ファイル編集・実行ツールだけを同梱する Node.js単体のMCPサーバー(0.3.0) に変更します。

  • OpenCode v1.18.29 の必要なツール実装・純粋ヘルパーを抽出。元ファイルのSHA-256、抽出後のSHA-256、変更点、MITライセンスを保存。
  • read / write / edit / apply_patch / glob / grep / bash / webfetch / todowrite を提供。
  • OpenCodeのソース一式、Bun、起動用セットアップ、アプリのDB・セッション・設定・プラグイン・モデル・LSP・チャットUIを実行依存から除去。
  • stdio / 認証付きStreamable HTTP、ジョブのポーリング・キャンセル・承認フローは維持。
  • 書き込みの承認待ち中に変更されたファイルの上書きを防止。パス検証、原子的なファイル置換、出力制限、プロセス終了処理、Web本文のサイズ・時間制限を実装。
  • README、クライアント設定例、systemd例、Node 22/24のCIを更新。

検証

Gha mcp上のLinux / Node.js v22.23.2で実施しました。

  • npm ci --ignore-scripts --no-audit --no-fund: 成功
  • npm test: 52件成功、失敗・スキップ0
  • npm run verify:vendor: 抽出した22単位のハッシュと依存境界を検証
  • 元リポジトリの固定コミットと、22単位すべての元ファイルハッシュが一致
  • npm run test:package: npm packした配布物を別ディレクトリに本番依存だけでインストールし、実際のMCPツールを実行。OpenCode・Bun・Gitコマンドが使えない環境でも成功
  • git diff --check: 成功

互換性・運用上の注意

  • 必要なのはNode.js 22+、npm依存、検索用のripgrepです。OpenCodeやBunのインストールは不要です。
  • OPENCODE_MCP_RUNTIME_DIR / OPENCODE_MCP_BUN / --runtime-dir は削除。古い設定は黙って使わずエラーにします。
  • シェルの権限パターンはコマンド全体に適用します。OpenCodeのAST解析は持ち込まず、複合コマンドのパターンによる自動許可は承認に戻します。詳細はREADMEに記載。
  • TODOはワーカーごとの小さなJSONファイルです。OpenCodeの会話DBを作成・移行しません。
  • 複数ファイルのパッチは全体でのトランザクションではありません。部分適用時の進捗を返し、勝手に再実行しません。
  • 承認されたシェルはOSアカウントの権限で動作します。OSサンドボックスではないため、信頼できない実行にはコンテナ/VMを併用してください。

このPRはコード変更のみです。マージ・既存サーバーへのデプロイ・MCP接続設定の変更は行っていません。

@nmt3325
nmt3325 merged commit 67ef97f into main Sep 16, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant