Español
Documentación
Servidor

Servidor

Interactúa con el servidor de opencode a través de HTTP.

El comando opencode serve ejecuta un servidor HTTP headless que expone un endpoint OpenAPI que un cliente de opencode puede usar.


Uso

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

Opciones

OpciónDescripciónPor defecto
--portPuerto en el que escuchar4096
--hostnameNombre de host en el que escuchar127.0.0.1
--mdnsHabilita el descubrimiento mDNSfalse
--mdns-domainNombre de dominio personalizado para el servicio mDNSopencode.local
--corsOrígenes de navegador adicionales a permitir[]

--cors se puede pasar varias veces:

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

Autenticación

Establece OPENCODE_SERVER_PASSWORD para proteger el servidor con autenticación básica HTTP. El nombre de usuario por defecto es opencode, o establece OPENCODE_SERVER_USERNAME para anularlo. Esto se aplica tanto a opencode serve como a opencode web.

OPENCODE_SERVER_PASSWORD=your-password opencode serve

Cómo funciona

Cuando ejecutas opencode, este inicia una TUI y un servidor, donde la TUI es el cliente que se comunica con el servidor. El servidor expone un endpoint de especificación OpenAPI 3.1. Este endpoint también se usa para generar un SDK.

Consejo: Usa el servidor de opencode para interactuar con opencode de forma programática.

Esta arquitectura permite que opencode admita varios clientes y te permite interactuar con opencode de forma programática.

Puedes ejecutar opencode serve para iniciar un servidor independiente. Si tienes la TUI de opencode en ejecución, opencode serve iniciará un nuevo servidor.


Conectar a un servidor existente

Cuando inicias la TUI, esta asigna aleatoriamente un puerto y un nombre de host. En su lugar, puedes pasar las opciones --hostname y --port. Luego usa esto para conectarte a su servidor.

El endpoint /tui se puede usar para controlar la TUI a través del servidor. Por ejemplo, puedes prellenar o ejecutar un prompt. Esta configuración la usan los plugins del IDE de OpenCode.


Especificación

El servidor publica una especificación OpenAPI 3.1 que se puede ver en:

http://<hostname>:<port>/doc

Por ejemplo, http://localhost:4096/doc. Usa la especificación para generar clientes o inspeccionar los tipos de solicitud y respuesta. O visualízala en un explorador de Swagger.


APIs

El servidor de opencode expone las siguientes APIs.


Global

MétodoRutaDescripciónRespuesta
GET/global/healthObtiene el estado y la versión del servidor{ healthy: true, version: string }
GET/global/eventObtiene los eventos globales (flujo SSE)Flujo de eventos

Project

MétodoRutaDescripciónRespuesta
GET/projectLista todos los proyectosProject[] (opens in a new tab)
GET/project/currentObtiene el proyecto actualProject (opens in a new tab)

Path y VCS

MétodoRutaDescripciónRespuesta
GET/pathObtiene la ruta actualPath (opens in a new tab)
GET/vcsObtiene la información de VCS del proyecto actualVcsInfo (opens in a new tab)

Instance

MétodoRutaDescripciónRespuesta
POST/instance/disposeDesecha la instancia actualboolean

Config

MétodoRutaDescripciónRespuesta
GET/configObtiene la información de configuraciónConfig (opens in a new tab)
PATCH/configActualiza la configuraciónConfig (opens in a new tab)
GET/config/providersLista los proveedores y los modelos por defecto{ providers: Provider[] (opens in a new tab), default: { [key: string]: string } }

Provider

MétodoRutaDescripciónRespuesta
GET/providerLista todos los proveedores{ all: Provider[] (opens in a new tab), default: {...}, connected: string[] }
GET/provider/authObtiene los métodos de autenticación de los proveedores{ [providerID: string]: ProviderAuthMethod[] (opens in a new tab) }
POST/provider/{id}/oauth/authorizeAutoriza un proveedor usando OAuthProviderAuthAuthorization (opens in a new tab)
POST/provider/{id}/oauth/callbackGestiona el callback de OAuth de un proveedorboolean

Sessions

MétodoRutaDescripciónNotas
GET/sessionLista todas las sesionesDevuelve Session[] (opens in a new tab)
POST/sessionCrea una nueva sesiónbody: { parentID?, title? }, devuelve Session (opens in a new tab)
GET/session/statusObtiene el estado de todas las sesionesDevuelve { [sessionID: string]: SessionStatus (opens in a new tab) }
GET/session/:idObtiene los detalles de la sesiónDevuelve Session (opens in a new tab)
DELETE/session/:idElimina una sesión y todos sus datosDevuelve boolean
PATCH/session/:idActualiza las propiedades de la sesiónbody: { title? }, devuelve Session (opens in a new tab)
GET/session/:id/childrenObtiene las sesiones hijas de una sesiónDevuelve Session[] (opens in a new tab)
GET/session/:id/todoObtiene la lista de tareas de una sesiónDevuelve Todo[] (opens in a new tab)
POST/session/:id/initAnaliza la app y crea AGENTS.mdbody: { messageID, providerID, modelID }, devuelve boolean
POST/session/:id/forkBifurca una sesión existente en un mensajebody: { messageID? }, devuelve Session (opens in a new tab)
POST/session/:id/abortAborta una sesión en ejecuciónDevuelve boolean
POST/session/:id/shareComparte una sesiónDevuelve Session (opens in a new tab)
DELETE/session/:id/shareDeja de compartir una sesiónDevuelve Session (opens in a new tab)
GET/session/:id/diffObtiene el diff de esta sesiónquery: messageID?, devuelve FileDiff[] (opens in a new tab)
POST/session/:id/summarizeResume la sesiónbody: { providerID, modelID }, devuelve boolean
POST/session/:id/revertRevierte un mensajebody: { messageID, partID? }, devuelve boolean
POST/session/:id/unrevertRestaura todos los mensajes revertidosDevuelve boolean
POST/session/:id/permissions/:permissionIDResponde a una solicitud de permisobody: { response, remember? }, devuelve boolean

Messages

MétodoRutaDescripciónNotas
GET/session/:id/messageLista los mensajes de una sesiónquery: limit?, devuelve { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}[]
POST/session/:id/messageEnvía un mensaje y espera la respuestabody: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, devuelve { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}
GET/session/:id/message/:messageIDObtiene los detalles del mensajeDevuelve { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}
POST/session/:id/prompt_asyncEnvía un mensaje de forma asíncrona (sin esperar)body: igual que /session/:id/message, devuelve 204 No Content
POST/session/:id/commandEjecuta un comando slashbody: { messageID?, agent?, model?, command, arguments }, devuelve { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}
POST/session/:id/shellEjecuta un comando de shellbody: { agent, model?, command }, devuelve { info: Message (opens in a new tab), parts: Part[] (opens in a new tab)}

Commands

MétodoRutaDescripciónRespuesta
GET/commandLista todos los comandosCommand[] (opens in a new tab)

Files

MétodoRutaDescripciónRespuesta
GET/find?pattern=<pat>Busca texto en los archivosArray de objetos de coincidencia con path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Encuentra archivos y directorios por nombrestring[] (rutas)
GET/find/symbol?query=<q>Encuentra símbolos del espacio de trabajoSymbol[] (opens in a new tab)
GET/file?path=<path>Lista archivos y directoriosFileNode[] (opens in a new tab)
GET/file/content?path=<p>Lee un archivoFileContent (opens in a new tab)
GET/file/statusObtiene el estado de los archivos rastreadosFile[] (opens in a new tab)

Parámetros de consulta de /find/file

  • query (obligatorio) — cadena de búsqueda (coincidencia difusa)
  • type (opcional) — limita los resultados a "file" o "directory"
  • directory (opcional) — anula la raíz del proyecto para la búsqueda
  • limit (opcional) — máximo de resultados (1-200)
  • dirs (opcional) — opción heredada ( "false" devuelve solo archivos)

Tools (Experimental)

MétodoRutaDescripciónRespuesta
GET/experimental/tool/idsLista todos los IDs de herramientasToolIDs (opens in a new tab)
GET/experimental/tool?provider=<p>&model=<m>Lista las herramientas con esquemas JSON para un modeloToolList (opens in a new tab)

LSP, Formateadores y MCP

MétodoRutaDescripciónRespuesta
GET/lspObtiene el estado de los servidores LSPLSPStatus[] (opens in a new tab)
GET/formatterObtiene el estado de los formateadoresFormatterStatus[] (opens in a new tab)
GET/mcpObtiene el estado de los servidores MCP{ [name: string]: MCPStatus (opens in a new tab) }
POST/mcpAgrega un servidor MCP dinámicamentebody: { name, config }, devuelve un objeto de estado de MCP

Agents

MétodoRutaDescripciónRespuesta
GET/agentLista todos los agentes disponiblesAgent[] (opens in a new tab)

Logging

MétodoRutaDescripciónRespuesta
POST/logEscribe una entrada de log. Body: { service, level, message, extra? }boolean

TUI

MétodoRutaDescripciónRespuesta
POST/tui/append-promptAgrega texto al promptboolean
POST/tui/open-helpAbre el diálogo de ayudaboolean
POST/tui/open-sessionsAbre el selector de sesionesboolean
POST/tui/open-themesAbre el selector de temasboolean
POST/tui/open-modelsAbre el selector de modelosboolean
POST/tui/submit-promptEnvía el prompt actualboolean
POST/tui/clear-promptLimpia el promptboolean
POST/tui/execute-commandEjecuta un comando ({ command })boolean
POST/tui/show-toastMuestra un toast ({ title?, message, variant })boolean
GET/tui/control/nextEspera la siguiente solicitud de controlObjeto de solicitud de control
POST/tui/control/responseResponde a una solicitud de control ({ body })boolean

Auth

MétodoRutaDescripciónRespuesta
PUT/auth/:idEstablece las credenciales de autenticación. El body debe coincidir con el esquema del proveedorboolean

Events

MétodoRutaDescripciónRespuesta
GET/eventFlujo de eventos enviados por el servidor (SSE). El primer evento es server.connected, luego los eventos del busFlujo de eventos enviados por el servidor

Docs

MétodoRutaDescripciónRespuesta
GET/docEspecificación OpenAPI 3.1Página HTML con la especificación OpenAPI