OpenCode Server

OpenCode Server 是整个系统的核心大脑,负责与 LLM 通信、管理上下文、执行工具调用以及权限控制。运行 opencode serve 命令会启动一个无头 HTTP 服务器,该服务器公开 OpenAPI 端点,OpenCode 客户端可通过该端点与之交互。

使用方法 (Usage)

终端执行命令:
opencode serve [--port <数字>] [--hostname <字符串>] [--cors <源>]

选项 (Options)

标志描述默认值
--port监听端口4096
--hostname监听主机名127.0.0.1
--mdns启用 mDNS 发现false
--cors允许的额外浏览器源[]
--cors 可多次传递:
opencode serve --cors http://localhost:5173 --cors https://app.example.com

身份验证 (Authentication)

设置 OPENCODE_SERVER_PASSWORD 以通过 HTTP 基本身份验证保护服务器。用户名默认为 opencode,也可通过 OPENCODE_SERVER_USERNAME 覆盖。该设置适用于 opencode serveopencode web
OPENCODE_SERVER_PASSWORD=你的密码 opencode serve

工作原理 (How it works)

运行 opencode 时,会启动 TUI(终端用户界面)和服务器,其中 TUI 作为客户端与服务器通信。服务器公开 OpenAPI 3.1 规范端点,该端点也用于生成 SDK。
  • 可通过 opencode serve 启动独立服务器;若已运行 OpenCode TUI,opencode serve 会启动新服务器。
  • 启动 TUI 时,它会随机分配端口和主机名,也可通过 --hostname--port 标志指定,进而连接到对应的服务器。
  • /tui 端点可通过服务器控制 TUI,例如预填充或运行提示,OpenCode IDE 插件即采用此设置。

规范 (OpenAPI Specification)

服务器发布的 OpenAPI 3.1 规范可通过以下地址查看:
http://<主机名>:<端口>/doc
例如 http://localhost:4096/doc,可利用该规范生成客户端或检查请求和响应类型,也可在 Swagger 探索器中查看。

API 列表 (API Reference)

1. Global (全局)

方法路径描述响应
GET/global/health获取服务器健康状态和版本{ healthy: true, version: string }
GET/global/event获取全局事件(SSE 流)事件流

2. Project (项目)

方法路径描述响应
GET/project列出所有项目Project[]
GET/project/current获取当前项目Project

3. Path & VCS (路径与版本控制)

方法路径描述响应
GET/path获取当前路径Path
GET/vcs获取当前项目的版本控制系统信息VcsInfo

4. Instance (实例管理)

方法路径描述响应
POST/instance/dispose销毁当前实例boolean

5. Config (配置)

方法路径描述响应
GET/config获取配置信息Config
PATCH/config更新配置Config
GET/config/providers列出提供商和默认模型{ providers: Provider[], default: { [key: string]: string } }

6. 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

7. Sessions (会话管理)

方法路径描述说明
GET/session列出所有会话返回 Session[]
POST/session创建新会话请求体:{ parentID?, title? },返回 Session
GET/session/status获取所有会话的状态返回 { [sessionID: string]: SessionStatus }
GET/session/:id获取会话详情返回 Session
DELETE/session/:id删除会话及其所有数据返回 boolean
PATCH/session/:id更新会话属性请求体:{ title? },返回 Session
GET/session/:id/children获取会话的子会话返回 Session[]
GET/session/:id/todo获取会话的待办列表返回 Todo[]
POST/session/:id/init分析应用并创建 AGENTS.md请求体:{ messageID, providerID, modelID },返回 boolean
POST/session/:id/fork在某条消息处复制现有会话请求体:{ messageID? },返回 Session
POST/session/:id/abort中止运行中的会话返回 boolean
POST/session/:id/share共享会话返回 Session
DELETE/session/:id/share取消共享会话返回 Session
GET/session/:id/diff获取该会话的差异查询参数:messageID?,返回 FileDiff[]
POST/session/:id/summarize总结会话请求体:{ providerID, modelID },返回 boolean
POST/session/:id/revert撤销消息请求体:{ messageID, partID? },返回 boolean
POST/session/:id/unrevert恢复所有已撤销消息返回 boolean
POST/session/:id/permissions/:permissionID响应权限请求请求体:{ response, remember? },返回 boolean

8. Messages (消息管理)

方法路径描述说明
GET/session/:id/message列出会话中的消息查询参数:limit?,返回 { info: Message, parts: Part[] }[]
POST/session/:id/message发送消息并等待响应请求体:{ 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异步发送消息(不等待)请求体与 /session/:id/message 相同,返回 204 No Content
POST/session/:id/command执行斜杠命令请求体:{ messageID?, agent?, model?, command, arguments },返回 { info: Message, parts: Part[] }
POST/session/:id/shell运行 shell 命令请求体:{ agent, model?, command },返回 { info: Message, parts: Part[] }

9. Commands (命令)

方法路径描述响应
GET/command列出所有命令Command[]

10. Files (文件操作)

方法路径描述响应
GET/find?pattern=<模式>在文件中搜索文本匹配对象数组,包含 pathlinesline_numberabsolute_offsetsubmatches
GET/find/file?query=<查询>按名称查找文件和目录string[](路径数组)
GET/find/symbol?query=<查询>查找工作区符号Symbol[]
GET/file?path=<路径>列出文件和目录FileNode[]
GET/file/content?path=<路径>读取文件FileContent
GET/file/status获取跟踪文件的状态File[]
/find/file 查询参数:
  • query(必填):搜索字符串(模糊匹配)
  • type(可选):限制结果为 filedirectory
  • directory(可选):覆盖搜索的项目根目录
  • limit(可选):最大结果数(1–200)
  • dirs(可选):遗留标志(false 仅返回文件)

11. Tools (工具 - 实验性)

方法路径描述响应
GET/experimental/tool/ids列出所有工具 IDToolIDs
GET/experimental/tool?provider=<提供商>&model=<模型>列出带 JSON 模式的模型工具ToolList

12. LSP, Formatters & MCP (语言服务与扩展)

方法路径描述响应
GET/lsp获取 LSP 服务器状态LSPStatus[]
GET/formatter获取格式化程序状态FormatterStatus[]
GET/mcp获取 MCP 服务器状态{ [name: string]: MCPStatus }
POST/mcp动态添加 MCP 服务器请求体:{ name, config },返回 MCP 状态对象

13. Agents (智能体)

方法路径描述响应
GET/agent列出所有可用代理Agent[]

14. Logging (日志)

方法路径描述响应
POST/log写入日志条目请求体:{ service, level, message, extra? },返回 boolean

15. 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

16. Auth (身份验证)

方法路径描述响应
PUT/auth/:id设置身份验证凭据请求体必须匹配提供商架构,返回 boolean

17. Events (事件流)

方法路径描述响应
GET/event服务器发送事件流第一个事件为 server.connected,之后为总线事件

18. Docs (文档)

方法路径描述响应
GET/docOpenAPI 3.1 规范带 OpenAPI 规范的 HTML 页面