Salta ai contenuti

Server

Interagire con il server OpenCode via HTTP.

Il comando opencode serve esegue un server HTTP headless che espone un endpoint OpenAPI usato dai client OpenCode.


Utilizzo

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

Opzioni

FlagDescrizioneDefault
--portPorta di ascolto4096
--hostnameHostname di ascolto127.0.0.1
--mdnsAbilita il discovery mDNSfalse
--corsOrigini addizionali per CORS[]

--cors può essere specificato più volte:

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

Come funziona

Quando esegui opencode, vengono avviati sia il TUI che un server. Il TUI è il client che parla con il server. Il server espone un endpoint con specifica OpenAPI 3.1, usato anche per generare l’SDK.

Questa architettura permette di avere più client e di controllare OpenCode da script, app o integrazioni esterne.

Puoi eseguire opencode serve per avviare un server standalone. Se il TUI è già in esecuzione, opencode serve avvierà un nuovo server.


Connessione a un server esistente

All’avvio il TUI sceglie un hostname e una porta casuali. In alternativa puoi specificarli con i flag --hostname e --port (vedi CLI); altri client potranno quindi collegarsi a quel server.

L’endpoint /tui consente di pilotare il TUI attraverso il server: ad esempio pre‑compilare o inviare un prompt. Questo è il meccanismo usato dai plugin IDE.


Specifica

Il server pubblica una specifica OpenAPI 3.1 accessibile a:

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

Ad esempio: http://localhost:4096/doc. Puoi usarla per generare client, ispezionare tipi di request/response o visualizzarla con Swagger.


API

Il server OpenCode espone le API seguenti.


Global

MetodoPathDescrizioneRisposta
GET/global/healthStato e versione del server{ healthy: true, version: string }
GET/global/eventEventi globali (stream SSE)Stream di eventi

Progetto

MetodoPathDescrizioneRisposta
GET/projectElenco di tutti i progettiProject[]
GET/project/currentProgetto correnteProject

Path & VCS

MetodoPathDescrizioneRisposta
GET/pathPath correntePath
GET/vcsInfo VCS per il progetto correnteVcsInfo

Istanza

MetodoPathDescrizioneRisposta
POST/instance/disposeChiudere l’istanza correnteboolean

Config

MetodoPathDescrizioneRisposta
GET/configOttenere la configurazioneConfig
PATCH/configAggiornare la configurazioneConfig
GET/config/providersElenco provider e modelli di default{ providers: Provider[], default: { [key: string]: string } }

Provider

MetodoPathDescrizioneRisposta
GET/providerElenco di tutti i provider{ all: Provider[], default: {...}, connected: string[] }
GET/provider/authMetodi di autenticazione per provider{ [providerID: string]: ProviderAuthMethod[] }
POST/provider/{id}/oauth/authorizeAvviare OAuth per un providerProviderAuthAuthorization
POST/provider/{id}/oauth/callbackCallback OAuthboolean

Sessioni

MetodoPathDescrizioneNote
GET/sessionElenco di tutte le sessioniRestituisce Session[]
POST/sessionCreare una nuova sessionebody: { parentID?, title? }Session
GET/session/statusStato di tutte le sessioni{ [sessionID: string]: SessionStatus }
GET/session/:idDettagli di una sessioneSession
DELETE/session/:idEliminare una sessione e i suoi datiboolean
PATCH/session/:idAggiornare le proprietà di una sessionebody: { title? }Session
GET/session/:id/childrenElenco delle sotto‑sessioniSession[]
GET/session/:id/todoLista TODO per una sessioneTodo[]
POST/session/:id/initAnalizzare il repo e generare AGENTS.mdbody: { messageID, providerID, modelID }boolean
POST/session/:id/forkFork di una sessione a un certo messaggiobody: { messageID? }Session
POST/session/:id/abortAnnullare una sessione in esecuzioneboolean
POST/session/:id/shareCondividere una sessioneSession
DELETE/session/:id/shareInterrompere la condivisione di una sessioneSession
GET/session/:id/diffOttenere il diff della sessionequery: messageID?FileDiff[]
POST/session/:id/summarizeRiassumere la sessionebody: { providerID, modelID }boolean
POST/session/:id/revertRevert di un messaggiobody: { messageID, partID? }boolean
POST/session/:id/unrevertRipristinare messaggi revertitiboolean
POST/session/:id/permissions/:permissionIDRispondere a una richiesta di permessobody: { response, remember? }boolean

Messaggi

MetodoPathDescrizioneNote
GET/session/:id/messageElenco messaggi di una sessionequery: limit?{ info: Message, parts: Part[]}[]
POST/session/:id/messageInviare un messaggio e attendere rispostabody: { messageID?, model?, agent?, noReply?, system?, tools?, parts }{ info, parts }
GET/session/:id/message/:messageIDDettagli di un messaggio{ info: Message, parts: Part[]}
POST/session/:id/prompt_asyncInviare un messaggio async (senza attesa)body come /session/:id/message, risposta 204 No Content
POST/session/:id/commandEseguire un comando slashbody: { messageID?, agent?, model?, command, arguments }{ info, parts }
POST/session/:id/shellEseguire un comando di shellbody: { agent, model?, command }{ info, parts }

Comandi

MetodoPathDescrizioneRisposta
GET/commandElenco di tutti i comandiCommand[]

File

MetodoPathDescrizioneRisposta
GET/find?pattern=<pat>Ricerca di testo nei fileArray di match con path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Ricerca file e directory per nomestring[] (path)
GET/find/symbol?query=<q>Ricerca simboli nel workspaceSymbol[]
GET/file?path=<path>Elenco file e directoryFileNode[]
GET/file/content?path=<p>Lettura di un fileFileContent
GET/file/statusStato dei file tracciatiFile[]

Parametri di /find/file

  • query (obbligatorio): stringa di ricerca (fuzzy)
  • type (opzionale): limitare a "file" o "directory"
  • directory (opzionale): root alternativa per la ricerca
  • limit (opzionale): numero massimo di risultati (1–200)
  • dirs (opzionale): flag legacy ("false" restituisce solo file)

Tools (Experimental)

MetodoPathDescrizioneRisposta
GET/experimental/tool/idsElenco di tutti gli ID toolToolIDs
GET/experimental/tool?provider=<p>&model=<m>Elenco tool con schema JSON per un modelloToolList

LSP, Formatter & MCP

MetodoPathDescrizioneRisposta
GET/lspStato dei server LSPLSPStatus[]
GET/formatterStato dei formatterFormatterStatus[]
GET/mcpStato dei server MCP{ [name: string]: MCPStatus }
POST/mcpAggiungere un server MCPbody: { name, config } → oggetto stato MCP

Agents

MetodoPathDescrizioneRisposta
GET/agentElenco di tutti gli agentAgent[]

Logging

MetodoPathDescrizioneRisposta
POST/logScrivere una voce di log ({ service, level, message, extra? })boolean

TUI

MetodoPathDescrizioneRisposta
POST/tui/append-promptAggiungere testo al promptboolean
POST/tui/open-helpAprire la finestra di helpboolean
POST/tui/open-sessionsAprire il selettore di sessioniboolean
POST/tui/open-themesAprire il selettore di temiboolean
POST/tui/open-modelsAprire il selettore di modelliboolean
POST/tui/submit-promptInviare il prompt correnteboolean
POST/tui/clear-promptSvuotare il promptboolean
POST/tui/execute-commandEseguire un comando ({ command })boolean
POST/tui/show-toastMostrare un toast ({ title?, message, variant })boolean
GET/tui/control/nextAttendere la prossima richiesta di controlloOggetto di controllo
POST/tui/control/responseRispondere a una richiesta di controllo ({ body })boolean

Auth

MetodoPathDescrizioneRisposta
PUT/auth/:idImpostare le credenziali per un provider (body secondo schema)boolean

Eventi

MetodoPathDescrizioneRisposta
GET/eventStream SSE; primo evento server.connected, poi eventi del message busStream eventi SSE

Docs

MetodoPathDescrizioneRisposta
GET/docSpecifica OpenAPI 3.1Pagina HTML con la specifica