Saltearse al contenido

Servidor

Interactuar con el servidor de OpenCode vía HTTP.

El comando opencode serve ejecuta un servidor HTTP “headless” que expone un endpoint OpenAPI para que los clientes de OpenCode lo usen.


Uso

Ventana de terminal
opencode serve [--port <number>] [--hostname <string>] [--cors <origin>]

Opciones

FlagDescripciónPor defecto
--portPuerto de escucha4096
--hostnameHost de escucha127.0.0.1
--mdnsHabilitar descubrimiento mDNSfalse
--corsOrígenes adicionales permitidos para CORS[]

--cors se puede pasar varias veces:

Ventana de terminal
opencode serve --cors http://localhost:5173 --cors https://app.example.com

Cómo funciona

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.


Conectarse a un servidor existente

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.


Especificación

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.


APIs

El servidor de OpenCode expone las APIs siguientes.


Global

MétodoPathDescripciónRespuesta
GET/global/healthObtener estado y versión del servidor{ healthy: true, version: string }
GET/global/eventEventos globales (SSE)Stream de eventos

Proyecto

MétodoPathDescripciónRespuesta
GET/projectListar todos los proyectosProject[]
GET/project/currentProyecto actualProject

Ruta y VCS

MétodoPathDescripciónRespuesta
GET/pathObtener la ruta actualPath
GET/vcsInfo de VCS para el proyecto actualVcsInfo

Instancia

MétodoPathDescripciónRespuesta
POST/instance/disposeLiberar la instancia actualboolean

Config

MétodoPathDescripciónRespuesta
GET/configObtener información de configuraciónConfig
PATCH/configActualizar configuraciónConfig
GET/config/providersListar proveedores y modelos por defecto{ providers: Provider[], default: { [key: string]: string } }

Proveedor

MétodoPathDescripciónRespuesta
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 proveedorProviderAuthAuthorization
POST/provider/{id}/oauth/callbackCallback OAuthboolean

Sesiones

MétodoPathDescripciónNotas
GET/sessionListar todas las sesionesDevuelve Session[]
POST/sessionCrear una sesión nuevabody: { parentID?, title? }Session
GET/session/statusEstado de todas las sesiones{ [sessionID: string]: SessionStatus }
GET/session/:idDetalle de una sesiónSession
DELETE/session/:idBorrar una sesión y sus datosboolean
PATCH/session/:idActualizar propiedades de una sesiónbody: { title? }Session
GET/session/:id/childrenSesiones hijasSession[]
GET/session/:id/todoLista TODO de una sesiónTodo[]
POST/session/:id/initAnalizar repo y generar AGENTS.mdbody: { messageID, providerID, modelID }boolean
POST/session/:id/forkBifurcar una sesión en un mensajebody: { messageID? }Session
POST/session/:id/abortCancelar una sesión en cursoboolean
POST/session/:id/shareCompartir una sesiónSession
DELETE/session/:id/shareDejar de compartir una sesiónSession
GET/session/:id/diffObtener diff de la sesiónquery: messageID?FileDiff[]
POST/session/:id/summarizeResumir la sesiónbody: { providerID, modelID }boolean
POST/session/:id/revertRevertir un mensajebody: { messageID, partID? }boolean
POST/session/:id/unrevertRestaurar mensajes revertidosboolean
POST/session/:id/permissions/:permissionIDResponder a una petición de permisobody: { response, remember? }boolean

Mensajes

MétodoPathDescripciónNotas
GET/session/:id/messageListar mensajes de una sesiónquery: limit?{ info: Message, parts: Part[]}[]
POST/session/:id/messageEnviar mensaje y esperar respuestabody: { 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 slashbody: { messageID?, agent?, model?, command, arguments }{ info, parts }
POST/session/:id/shellEjecutar comando de shellbody: { agent, model?, command }{ info, parts }

Comandos

MétodoPathDescripciónRespuesta
GET/commandListar todos los comandosCommand[]

Archivos

MétodoPathDescripciónRespuesta
GET/find?pattern=<pat>Buscar texto en archivosArray con matches: path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Buscar archivos y directorios por nombrestring[] (rutas)
GET/find/symbol?query=<q>Buscar símbolos en el workspaceSymbol[]
GET/file?path=<path>Listar archivos y directoriosFileNode[]
GET/file/content?path=<p>Leer archivoFileContent
GET/file/statusEstado de archivos trackeadosFile[]

Parámetros de /find/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)

Tools (Experimental)

MétodoPathDescripciónRespuesta
GET/experimental/tool/idsListar todos los IDs de herramientaToolIDs
GET/experimental/tool?provider=<p>&model=<m>Listar herramientas con esquemas JSONToolList

LSP, Formatters y MCP

MétodoPathDescripciónRespuesta
GET/lspEstado de servidores LSPLSPStatus[]
GET/formatterEstado de formattersFormatterStatus[]
GET/mcpEstado de servidores MCP{ [name: string]: MCPStatus }
POST/mcpAñadir servidor MCP dinámicamentebody: { name, config } → objeto de estado MCP

Agents

MétodoPathDescripciónRespuesta
GET/agentListar todos los agentesAgent[]

Logging

MétodoPathDescripciónRespuesta
POST/logEscribir entrada de log ({ service, level, message, extra? })boolean

TUI

MétodoPathDescripciónRespuesta
POST/tui/append-promptAñadir texto al promptboolean
POST/tui/open-helpAbrir el panel de ayudaboolean
POST/tui/open-sessionsAbrir selector de sesionesboolean
POST/tui/open-themesAbrir selector de temasboolean
POST/tui/open-modelsAbrir selector de modelosboolean
POST/tui/submit-promptEnviar el prompt actualboolean
POST/tui/clear-promptLimpiar el promptboolean
POST/tui/execute-commandEjecutar un comando ({ command })boolean
POST/tui/show-toastMostrar toast ({ title?, message, variant })boolean
GET/tui/control/nextEsperar la siguiente petición de controlObjeto de control
POST/tui/control/responseResponder a una petición de control ({ body })boolean

Auth

MétodoPathDescripciónRespuesta
PUT/auth/:idConfigurar credenciales para un proveedor (body según esquema)boolean

Eventos

MétodoPathDescripciónRespuesta
GET/eventStream SSE. El primer evento es server.connected, luego eventos del busStream de eventos SSE

Docs

MétodoPathDescripciónRespuesta
GET/docEspecificación OpenAPI 3.1Página HTML con el spec