El comando opencode serve ejecuta un servidor HTTP “headless” que expone un endpoint OpenAPI para que los clientes de OpenCode lo usen.
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]
Flag Descripción Por defecto --portPuerto de escucha 4096--hostnameHost de escucha 127.0.0.1--mdnsHabilitar descubrimiento mDNS false--corsOrígenes adicionales permitidos para CORS []
--cors se puede pasar varias veces:
opencode serve --cors http://localhost:5173 --cors https://app.example.com
Cuando ejecutas opencode, se inician tanto el TUI como un servidor. El TUI actúa como cliente y habla con el servidor. Este servidor expone un endpoint con especificación OpenAPI 3.1, que también se usa para generar el SDK .
Esta arquitectura permite tener múltiples clientes y controlar OpenCode desde scripts, apps o integraciones externas.
Puedes ejecutar opencode serve para iniciar un servidor independiente. Si ya tienes el TUI abierto, opencode serve levantará otro servidor adicional.
Al iniciar el TUI, OpenCode elige por defecto un puerto y hostname aleatorios. Alternativamente, puedes fijarlos con los flags --hostname y --port (ver CLI ). A partir de ahí, otros clientes pueden conectarse a ese servidor.
El endpoint /tui permite controlar el TUI a través del servidor: por ejemplo, rellenar el prompt o enviarlo. Este mecanismo es el que usan los plugins de IDE .
El servidor publica una especificación OpenAPI 3.1 accesible en:
http://<hostname>:<port>/doc
Por ejemplo: http://localhost:4096/doc. Puedes usarla para generar clientes, inspeccionar tipos de request/response o visualizarla con Swagger.
El servidor de OpenCode expone las APIs siguientes.
Método Path Descripción Respuesta GET/global/healthObtener estado y versión del servidor { healthy: true, version: string }GET/global/eventEventos globales (SSE) Stream de eventos
Método Path Descripción Respuesta GET/projectListar todos los proyectos Project[]GET/project/currentProyecto actual Project
Método Path Descripción Respuesta GET/pathObtener la ruta actual PathGET/vcsInfo de VCS para el proyecto actual VcsInfo
Método Path Descripción Respuesta POST/instance/disposeLiberar la instancia actual boolean
Método Path Descripción Respuesta GET/configObtener información de configuración ConfigPATCH/configActualizar configuración ConfigGET/config/providersListar proveedores y modelos por defecto { providers: Provider[] , default: { [key: string]: string } }
Método Path Descripción Respuesta GET/providerListar todos los proveedores { all: Provider[] , default: {...}, connected: string[] }GET/provider/authMétodos de autenticación por proveedor { [providerID: string]: ProviderAuthMethod[] }POST/provider/{id}/oauth/authorizeIniciar OAuth para un proveedor ProviderAuthAuthorizationPOST/provider/{id}/oauth/callbackCallback OAuth boolean
Método Path Descripción Notas GET/sessionListar todas las sesiones Devuelve Session[] POST/sessionCrear una sesión nueva body: { parentID?, title? } → Session GET/session/statusEstado de todas las sesiones { [sessionID: string]: SessionStatus }GET/session/:idDetalle de una sesión SessionDELETE/session/:idBorrar una sesión y sus datos booleanPATCH/session/:idActualizar propiedades de una sesión body: { title? } → Session GET/session/:id/childrenSesiones hijas Session[]GET/session/:id/todoLista TODO de una sesión Todo[]POST/session/:id/initAnalizar repo y generar AGENTS.md body: { messageID, providerID, modelID } → boolean POST/session/:id/forkBifurcar una sesión en un mensaje body: { messageID? } → Session POST/session/:id/abortCancelar una sesión en curso booleanPOST/session/:id/shareCompartir una sesión SessionDELETE/session/:id/shareDejar de compartir una sesión SessionGET/session/:id/diffObtener diff de la sesión query: messageID? → FileDiff[] POST/session/:id/summarizeResumir la sesión body: { providerID, modelID } → boolean POST/session/:id/revertRevertir un mensaje body: { messageID, partID? } → boolean POST/session/:id/unrevertRestaurar mensajes revertidos booleanPOST/session/:id/permissions/:permissionIDResponder a una petición de permiso body: { response, remember? } → boolean
Método Path Descripción Notas GET/session/:id/messageListar mensajes de una sesión query: limit? → { info: Message , parts: Part[] }[] POST/session/:id/messageEnviar mensaje y esperar respuesta body: { messageID?, model?, agent?, noReply?, system?, tools?, parts } → { info, parts } GET/session/:id/message/:messageIDDetalle de un mensaje { info: Message , parts: Part[] }POST/session/:id/prompt_asyncEnviar mensaje asincrónico (sin esperar) body igual que /session/:id/message, respuesta 204 No Content POST/session/:id/commandEjecutar un comando slash body: { messageID?, agent?, model?, command, arguments } → { info, parts } POST/session/:id/shellEjecutar comando de shell body: { agent, model?, command } → { info, parts }
Método Path Descripción Respuesta GET/commandListar todos los comandos Command[]
Método Path Descripción Respuesta GET/find?pattern=<pat>Buscar texto en archivos Array con matches: path, lines, line_number, absolute_offset, submatches GET/find/file?query=<q>Buscar archivos y directorios por nombre string[] (rutas)GET/find/symbol?query=<q>Buscar símbolos en el workspace Symbol[]GET/file?path=<path>Listar archivos y directorios FileNode[]GET/file/content?path=<p>Leer archivo FileContentGET/file/statusEstado de archivos trackeados File[]
query (requerido): cadena de búsqueda (fuzzy)
type (opcional): limitar a "file" o "directory"
directory (opcional): raíz alternativa para la búsqueda
limit (opcional): máximo de resultados (1–200)
dirs (opcional): flag legado ("false" devuelve solo archivos)
Método Path Descripción Respuesta GET/experimental/tool/idsListar todos los IDs de herramienta ToolIDsGET/experimental/tool?provider=<p>&model=<m>Listar herramientas con esquemas JSON ToolList
Método Path Descripción Respuesta GET/lspEstado de servidores LSP LSPStatus[]GET/formatterEstado de formatters FormatterStatus[]GET/mcpEstado de servidores MCP { [name: string]: MCPStatus }POST/mcpAñadir servidor MCP dinámicamente body: { name, config } → objeto de estado MCP
Método Path Descripción Respuesta GET/agentListar todos los agentes Agent[]
Método Path Descripción Respuesta POST/logEscribir entrada de log ({ service, level, message, extra? }) boolean
Método Path Descripción Respuesta POST/tui/append-promptAñadir texto al prompt booleanPOST/tui/open-helpAbrir el panel de ayuda booleanPOST/tui/open-sessionsAbrir selector de sesiones booleanPOST/tui/open-themesAbrir selector de temas booleanPOST/tui/open-modelsAbrir selector de modelos booleanPOST/tui/submit-promptEnviar el prompt actual booleanPOST/tui/clear-promptLimpiar el prompt booleanPOST/tui/execute-commandEjecutar un comando ({ command }) booleanPOST/tui/show-toastMostrar toast ({ title?, message, variant }) booleanGET/tui/control/nextEsperar la siguiente petición de control Objeto de control POST/tui/control/responseResponder a una petición de control ({ body }) boolean
Método Path Descripción Respuesta PUT/auth/:idConfigurar credenciales para un proveedor (body según esquema) boolean
Método Path Descripción Respuesta GET/eventStream SSE. El primer evento es server.connected, luego eventos del bus Stream de eventos SSE
Método Path Descripción Respuesta GET/docEspecificación OpenAPI 3.1 Página HTML con el spec