opencode serve コマンドは、opencode クライアントが利用できる OpenAPI エンドポイントを公開するヘッドレス HTTP サーバーを実行します。
使用方法
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]
オプション
| フラグ | 説明 | デフォルト |
|---|
--port | リッスンするポート | 4096 |
--hostname | リッスンするホスト名 | 127.0.0.1 |
--mdns | mDNS 検出を有効化 | false |
--mdns-domain | mDNS サービスのカスタムドメイン名 | opencode.local |
--cors | 許可する追加のブラウザオリジン | [] |
--cors は複数回指定できます。
opencode serve --cors http://localhost:5173 --cors https://app.example.com
認証
OPENCODE_SERVER_PASSWORD を設定して、サーバーを HTTP Basic 認証で保護します。ユーザー名はデフォルトで opencode ですが、OPENCODE_SERVER_USERNAME を設定することで上書きできます。これは opencode serve と opencode web の両方に適用されます。
OPENCODE_SERVER_PASSWORD=your-password opencode serve
仕組み
opencode を実行すると、TUI とサーバーが起動します。TUI はサーバーと通信するクライアントです。サーバーは OpenAPI 3.1 仕様のエンドポイントを公開します。このエンドポイントは SDK の生成にも使用されます。
このアーキテクチャにより、opencode は複数のクライアントをサポートし、opencode をプログラム的に操作できます。
opencode serve を実行すると、スタンドアロンのサーバーが起動します。opencode TUI が実行中の場合、opencode serve は新しいサーバーを起動します。
既存のサーバーに接続する
TUI を起動すると、ランダムにポートとホスト名が割り当てられます。代わりに --hostname と --port のフラグ を指定できます。これを使用してそのサーバーに接続します。
/tui エンドポイントを使用して、サーバー経由で TUI を操作できます。たとえば、プロンプトの事前入力や実行が可能です。この設定は OpenCode IDE プラグインで使用されています。
仕様
サーバーは次の場所で確認できる OpenAPI 3.1 仕様を公開します。
http://<hostname>:<port>/doc
たとえば、http://localhost:4096/doc です。仕様を使用してクライアントを生成したり、リクエストとレスポンスの型を検査したりできます。または、Swagger エクスプローラーで表示します。
API
opencode サーバーは次の API を公開します。
Global
| メソッド | パス | 説明 | レスポンス |
|---|
GET | /global/health | サーバーの状態とバージョンを取得 | { healthy: true, version: string } |
GET | /global/event | グローバルイベントを取得 (SSE ストリーム) | イベントストリーム |
Project
| メソッド | パス | 説明 | レスポンス |
|---|
GET | /project | すべてのプロジェクトを列挙 | Project[] |
GET | /project/current | 現在のプロジェクトを取得 | Project |
Path & VCS
| メソッド | パス | 説明 | レスポンス |
|---|
GET | /path | 現在のパスを取得 | Path |
GET | /vcs | 現在のプロジェクトの VCS 情報を取得 | VcsInfo |
Instance
| メソッド | パス | 説明 | レスポンス |
|---|
POST | /instance/dispose | 現在のインスタンスを破棄 | boolean |
Config
| メソッド | パス | 説明 | レスポンス |
|---|
GET | /config | 設定情報を取得 | Config |
PATCH | /config | 設定を更新 | Config |
GET | /config/providers | プロバイダとデフォルトモデルを列挙 | { providers: Provider[], default: { [key: string]: string } } |
Provider
| メソッド | パス | 説明 | レスポンス |
|---|
GET | /provider | すべてのプロバイダを列挙 | { all: Provider[], default: {...}, connected: string[] } |
GET | /provider/auth | プロバイダの認証方法を取得 | { [providerID: string]: ProviderAuthMethod[] } |
POST | /provider/{id}/oauth/authorize | OAuth を使用してプロバイダを認可 | ProviderAuthAuthorization |
POST | /provider/{id}/oauth/callback | プロバイダの OAuth コールバックを処理 | boolean |
Sessions
| メソッド | パス | 説明 | 注記 |
|---|
GET | /session | すべてのセッションを列挙 | Session[] を返す |
POST | /session | 新しいセッションを作成 | body:{ parentID?, title? }、Session を返す |
GET | /session/status | すべてのセッションのステータスを取得 | { [sessionID: string]: SessionStatus } を返す |
GET | /session/:id | セッションの詳細を取得 | Session を返す |
DELETE | /session/:id | セッションとそのすべてのデータを削除 | boolean を返す |
PATCH | /session/:id | セッションのプロパティを更新 | body:{ title? }、Session を返す |
GET | /session/:id/children | セッションの子セッションを取得 | Session[] を返す |
GET | /session/:id/todo | セッションの TODO リストを取得 | Todo[] を返す |
POST | /session/:id/init | アプリを分析して AGENTS.md を作成 | body:{ messageID, providerID, modelID }、boolean を返す |
POST | /session/:id/fork | メッセージで既存セッションをフォーク | body:{ messageID? }、Session を返す |
POST | /session/:id/abort | 実行中のセッションを中断 | boolean を返す |
POST | /session/:id/share | セッションを共有 | Session を返す |
DELETE | /session/:id/share | セッションの共有を解除 | Session を返す |
GET | /session/:id/diff | このセッションの差分を取得 | query:messageID?、FileDiff[] を返す |
POST | /session/:id/summarize | セッションを要約 | body:{ providerID, modelID }、boolean を返す |
POST | /session/:id/revert | メッセージを取り消す | body:{ messageID, partID? }、boolean を返す |
POST | /session/:id/unrevert | 取り消したすべてのメッセージを復元 | boolean を返す |
POST | /session/:id/permissions/:permissionID | 権限リクエストへ応答 | body:{ response, remember? }、boolean を返す |
Messages
| メソッド | パス | 説明 | 注記 |
|---|
GET | /session/:id/message | セッション内のメッセージを列挙 | query:limit?、{ info: Message, parts: Part[] }[] を返す |
POST | /session/:id/message | メッセージを送信して応答を待機 | body:{ messageID?, model?, agent?, noReply?, system?, tools?, parts }、{ info: Message, parts: Part[] } を返す |
GET | /session/:id/message/:messageID | メッセージの詳細を取得 | { info: Message, parts: Part[] } を返す |
POST | /session/:id/prompt_async | メッセージを非同期で送信 (待機なし) | body:/session/:id/message と同じ、204 No Content を返す |
POST | /session/:id/command | スラッシュコマンドを実行 | body:{ messageID?, agent?, model?, command, arguments }、{ info: Message, parts: Part[] } を返す |
POST | /session/:id/shell | シェルコマンドを実行 | body:{ agent, model?, command }、{ info: Message, parts: Part[] } を返す |
Commands
| メソッド | パス | 説明 | レスポンス |
|---|
GET | /command | すべてのコマンドを列挙 | Command[] |
Files
| メソッド | パス | 説明 | レスポンス |
|---|
GET | /find?pattern=<pat> | ファイル内のテキストを検索 | path、lines、line_number、absolute_offset、submatches を含む一致オブジェクトの配列 |
GET | /find/file?query=<q> | 名前でファイルとディレクトリを検索 | string[] (パス) |
GET | /find/symbol?query=<q> | ワークスペースのシンボルを検索 | Symbol[] |
GET | /file?path=<path> | ファイルとディレクトリを列挙 | FileNode[] |
GET | /file/content?path=<p> | ファイルを読み込み | FileContent |
GET | /file/status | 追跡対象ファイルのステータスを取得 | File[] |
/find/file のクエリパラメータ
query (必須) — 検索文字列 (あいまい一致)
type (任意) — 結果を "file" または "directory" に制限
directory (任意) — 検索のプロジェクトルートを上書き
limit (任意) — 最大結果数 (1〜200)
dirs (任意) — レガシーフラグ ("false" の場合はファイルのみを返す)
| メソッド | パス | 説明 | レスポンス |
|---|
GET | /experimental/tool/ids | すべてのツール ID を列挙 | ToolIDs |
GET | /experimental/tool?provider=<p>&model=<m> | モデルのツールと JSON スキーマを列挙 | ToolList |
| メソッド | パス | 説明 | レスポンス |
|---|
GET | /lsp | LSP サーバーのステータスを取得 | LSPStatus[] |
GET | /formatter | フォーマッタのステータスを取得 | FormatterStatus[] |
GET | /mcp | MCP サーバーのステータスを取得 | { [name: string]: MCPStatus } |
POST | /mcp | MCP サーバーを動的に追加 | body:{ name, config }、MCP ステータスオブジェクトを返す |
Agents
| メソッド | パス | 説明 | レスポンス |
|---|
GET | /agent | 利用可能なエージェントを列挙 | Agent[] |
Logging
| メソッド | パス | 説明 | レスポンス |
|---|
POST | /log | ログエントリを書き込み。Body:{ service, level, message, extra? } | boolean |
TUI
| メソッド | パス | 説明 | レスポンス |
|---|
POST | /tui/append-prompt | プロンプトにテキストを追加 | boolean |
POST | /tui/open-help | ヘルプダイアログを開く | boolean |
POST | /tui/open-sessions | セッションセレクタを開く | boolean |
POST | /tui/open-themes | テーマセレクタを開く | boolean |
POST | /tui/open-models | モデルセレクタを開く | boolean |
POST | /tui/submit-prompt | 現在のリプロンプトを送信 | boolean |
POST | /tui/clear-prompt | プロンプトをクリア | boolean |
POST | /tui/execute-command | コマンドを実行 ({ command }) | boolean |
POST | /tui/show-toast | トーストを表示 ({ title?, message, variant }) | boolean |
GET | /tui/control/next | 次の制御リクエストを待機 | 制御リクエストオブジェクト |
POST | /tui/control/response | 制御リクエストへ応答 ({ body }) | boolean |
Auth
| メソッド | パス | 説明 | レスポンス |
|---|
PUT | /auth/:id | 認証資格情報を設定。Body はプロバイダのスキーマと一致する必要があります | boolean |
Events
| メソッド | パス | 説明 | レスポンス |
|---|
GET | /event | サーバー送信イベントストリーム。最初のイベントは server.connected で、その次はバスイベント | サーバー送信イベントストリーム |
Docs
| メソッド | パス | 説明 | レスポンス |
|---|
GET | /doc | OpenAPI 3.1 仕様 | OpenAPI 仕様を含む HTML ページ |