Pular para o conteúdo

Servidor

Interaja com o servidor opencode via HTTP.

O comando opencode serve executa um servidor HTTP sem cabeça que expõe um endpoint OpenAPI que um cliente opencode pode usar.


Uso

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

Opções

FlagDescriçãoPadrão
--portPorta para escutar4096
--hostnameNome do host para escutar127.0.0.1
--mdnsHabilitar descoberta mDNSfalse
--mdns-domainNome de domínio personalizado para o serviço mDNSopencode.local
--corsOrigens adicionais de navegador a permitir[]

--cors pode ser passado várias vezes:

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

Autenticação

Defina OPENCODE_SERVER_PASSWORD para proteger o servidor com autenticação básica HTTP. O nome de usuário padrão é opencode, ou defina OPENCODE_SERVER_USERNAME para substituí-lo. Isso se aplica tanto ao opencode serve quanto ao opencode web.

Terminal window
OPENCODE_SERVER_PASSWORD=your-password opencode serve

Como funciona

Quando você executa opencode, ele inicia um TUI e um servidor. Onde o TUI é o cliente que se comunica com o servidor. O servidor expõe um endpoint de especificação OpenAPI 3.1. Este endpoint também é usado para gerar um SDK.

Essa arquitetura permite que o opencode suporte múltiplos clientes e permite que você interaja com o opencode programaticamente.

Você pode executar opencode serve para iniciar um servidor autônomo. Se você tiver o TUI do opencode em execução, opencode serve iniciará um novo servidor.


Conectar a um servidor existente

Quando você inicia o TUI, ele atribui aleatoriamente uma porta e um nome de host. Você pode passar os flags --hostname e --port. Em seguida, use isso para se conectar ao seu servidor.

O endpoint /tui pode ser usado para controlar o TUI através do servidor. Por exemplo, você pode preencher ou executar um prompt. Essa configuração é usada pelos plugins do opencode IDE.


Especificação

O servidor publica uma especificação OpenAPI 3.1 que pode ser visualizada em:

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

Por exemplo, http://localhost:4096/doc. Use a especificação para gerar clientes ou inspecionar tipos de requisição e resposta. Ou visualize em um explorador Swagger.


APIs

O servidor opencode expõe as seguintes APIs.


Global

MétodoCaminhoDescriçãoResposta
GET/global/healthObter saúde e versão do servidor{ healthy: true, version: string }
GET/global/eventObter eventos globais (fluxo SSE)Fluxo de eventos

Projeto

MétodoCaminhoDescriçãoResposta
GET/projectListar todos os projetosProject[]
GET/project/currentObter o projeto atualProject

Caminho & VCS

MétodoCaminhoDescriçãoResposta
GET/pathObter o caminho atualPath
GET/vcsObter informações do VCS para o projeto atualVcsInfo

Instância

MétodoCaminhoDescriçãoResposta
POST/instance/disposeDescartar a instância atualboolean

Configuração

MétodoCaminhoDescriçãoResposta
GET/configObter informações de configuraçãoConfig
PATCH/configAtualizar configuraçãoConfig
GET/config/providersListar provedores e modelos padrão{ providers: Provider[], default: { [key: string]: string } }

Provedor

MétodoCaminhoDescriçãoResposta
GET/providerListar todos os provedores{ all: Provider[], default: {...}, connected: string[] }
GET/provider/authObter métodos de autenticação do provedor{ [providerID: string]: ProviderAuthMethod[] }
POST/provider/{id}/oauth/authorizeAutorizar um provedor usando OAuthProviderAuthAuthorization
POST/provider/{id}/oauth/callbackLidar com o callback OAuth para um provedorboolean

Sessões

MétodoCaminhoDescriçãoNotas
GET/sessionListar todas as sessõesRetorna Session[]
POST/sessionCriar uma nova sessãocorpo: { parentID?, title? }, retorna Session
GET/session/statusObter status da sessão para todas as sessõesRetorna { [sessionID: string]: SessionStatus }
GET/session/:idObter detalhes da sessãoRetorna Session
DELETE/session/:idDeletar uma sessão e todos os seus dadosRetorna boolean
PATCH/session/:idAtualizar propriedades da sessãocorpo: { title? }, retorna Session
GET/session/:id/childrenObter as sessões filhas de uma sessãoRetorna Session[]
GET/session/:id/todoObter a lista de tarefas para uma sessãoRetorna Todo[]
POST/session/:id/initAnalisar o app e criar AGENTS.mdcorpo: { messageID, providerID, modelID }, retorna boolean
POST/session/:id/forkFazer um fork de uma sessão existente em uma mensagemcorpo: { messageID? }, retorna Session
POST/session/:id/abortAbortar uma sessão em execuçãoRetorna boolean
POST/session/:id/shareCompartilhar uma sessãoRetorna Session
DELETE/session/:id/shareDescompartilhar uma sessãoRetorna Session
GET/session/:id/diffObter a diferença para esta sessãoquery: messageID?, retorna FileDiff[]
POST/session/:id/summarizeResumir a sessãocorpo: { providerID, modelID }, retorna boolean
POST/session/:id/revertReverter uma mensagemcorpo: { messageID, partID? }, retorna boolean
POST/session/:id/unrevertRestaurar todas as mensagens revertidasRetorna boolean
POST/session/:id/permissions/:permissionIDResponder a um pedido de permissãocorpo: { response, remember? }, retorna boolean

Mensagens

MétodoCaminhoDescriçãoNotas
GET/session/:id/messageListar mensagens em uma sessãoquery: limit?, retorna { info: Message, parts: Part[]}[]
POST/session/:id/messageEnviar uma mensagem e aguardar respostacorpo: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, retorna { info: Message, parts: Part[]}
GET/session/:id/message/:messageIDObter detalhes da mensagemRetorna { info: Message, parts: Part[]}
POST/session/:id/prompt_asyncEnviar uma mensagem assíncrona (sem espera)corpo: igual a /session/:id/message, retorna 204 No Content
POST/session/:id/commandExecutar um comando de barracorpo: { messageID?, agent?, model?, command, arguments }, retorna { info: Message, parts: Part[]}
POST/session/:id/shellExecutar um comando shellcorpo: { agent, model?, command }, retorna { info: Message, parts: Part[]}

Comandos

MétodoCaminhoDescriçãoResposta
GET/commandListar todos os comandosCommand[]

Arquivos

MétodoCaminhoDescriçãoResposta
GET/find?pattern=<pat>Pesquisar texto em arquivosArray de objetos de correspondência com path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Encontrar arquivos e diretórios por nomestring[] (caminhos)
GET/find/symbol?query=<q>Encontrar símbolos do workspaceSymbol[]
GET/file?path=<path>Listar arquivos e diretóriosFileNode[]
GET/file/content?path=<p>Ler um arquivoFileContent
GET/file/statusObter status para arquivos rastreadosFile[]

Parâmetros de consulta /find/file

  • query (obrigatório) — string de pesquisa (correspondência difusa)
  • type (opcional) — limitar resultados a "file" ou "directory"
  • directory (opcional) — substituir a raiz do projeto para a pesquisa
  • limit (opcional) — resultados máximos (1–200)
  • dirs (opcional) — flag legada ("false" retorna apenas arquivos)

Ferramentas (Experimental)

MétodoCaminhoDescriçãoResposta
GET/experimental/tool/idsListar todos os IDs de ferramentasToolIDs
GET/experimental/tool?provider=<p>&model=<m>Listar ferramentas com esquemas JSON para um modeloToolList

LSP, Formatadores & MCP

MétodoCaminhoDescriçãoResposta
GET/lspObter status do servidor LSPLSPStatus[]
GET/formatterObter status do formatadorFormatterStatus[]
GET/mcpObter status do servidor MCP{ [name: string]: MCPStatus }
POST/mcpAdicionar servidor MCP dinamicamentecorpo: { name, config }, retorna objeto de status MCP

Agentes

MétodoCaminhoDescriçãoResposta
GET/agentListar todos os agentes disponíveisAgent[]

Registro

MétodoCaminhoDescriçãoResposta
POST/logEscrever entrada de log. Corpo: { service, level, message, extra? }boolean

TUI

MétodoCaminhoDescriçãoResposta
POST/tui/append-promptAnexar texto ao promptboolean
POST/tui/open-helpAbrir o diálogo de ajudaboolean
POST/tui/open-sessionsAbrir o seletor de sessõesboolean
POST/tui/open-themesAbrir o seletor de temasboolean
POST/tui/open-modelsAbrir o seletor de modelosboolean
POST/tui/submit-promptEnviar o prompt atualboolean
POST/tui/clear-promptLimpar o promptboolean
POST/tui/execute-commandExecutar um comando ({ command })boolean
POST/tui/show-toastMostrar toast ({ title?, message, variant })boolean
GET/tui/control/nextAguardar o próximo pedido de controleObjeto de pedido de controle
POST/tui/control/responseResponder a um pedido de controle ({ body })boolean

Auth

MétodoCaminhoDescriçãoResposta
PUT/auth/:idDefinir credenciais de autenticação. O corpo deve corresponder ao esquema do provedorboolean

Eventos

MétodoCaminhoDescriçãoResposta
GET/eventFluxo de eventos enviados pelo servidor. O primeiro evento é server.connected, depois eventos de busFluxo de eventos enviados pelo servidor

Docs

MétodoCaminhoDescriçãoResposta
GET/docEspecificação OpenAPI 3.1Página HTML com a especificação OpenAPI