Zum Inhalt springen

Server

Nutze den opencode-Server ueber HTTP.

Der Befehl opencode serve startet einen headless HTTP-Server. Er stellt einen OpenAPI-Endpunkt bereit, den ein opencode-Client nutzen kann.


Nutzung

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

Optionen

FlagDescriptionDefault
--portPort to listen on4096
--hostnameHostname to listen on127.0.0.1
--mdnsEnable mDNS discoveryfalse
--mdns-domainCustom domain name for mDNS serviceopencode.local
--corsAdditional browser origins to allow[]

--cors kann mehrfach angegeben werden:

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

Authentifizierung

Setze OPENCODE_SERVER_PASSWORD, um den Server mit HTTP Basic Auth zu schuetzen. Der Benutzername ist standardmaessig opencode, kann aber mit OPENCODE_SERVER_USERNAME ueberschrieben werden. Das gilt fuer opencode serve und opencode web.

Terminal-Fenster
OPENCODE_SERVER_PASSWORD=your-password opencode serve

Funktionsweise

Wenn du opencode startest, werden TUI und Server gestartet. Die TUI ist dabei der Client, der mit dem Server spricht; dessen OpenAPI-3.1-Endpunkt dient auch zur Generierung des SDK.

Diese Architektur erlaubt mehrere Clients und programmatische Nutzung.

Mit opencode serve startest du einen eigenstaendigen Server. Laeuft bereits eine TUI, startet opencode serve trotzdem eine neue Serverinstanz.


Mit bestehendem Server verbinden

Beim TUI-Start werden Port und Hostname zufaellig gewaehlt. Alternativ gibst du --hostname und --port als Flags vor und verbindest dich dann gezielt damit.

Der Endpunkt /tui kann die TUI ueber den Server steuern, etwa zum Vorbelegen oder Abschicken von Prompts. Dieses Muster nutzen auch die OpenCode-IDE-Plugins.


Spec

Der Server veroeffentlicht eine OpenAPI-3.1-Spezifikation unter:

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

Zum Beispiel http://localhost:4096/doc. Nutze die Spec zum Generieren von Clients, zum Pruefen von Request/Response-Typen oder in einem Swagger-Explorer.


APIs

Der opencode-Server stellt folgende APIs bereit.


Global

MethodPathDescriptionResponse
GET/global/healthRuft Server-Status und Version ab{ healthy: true, version: string }
GET/global/eventRuft globale Events ab (SSE-Stream)Event stream

Project

MethodPathDescriptionResponse
GET/projectListet alle ProjekteProject[]
GET/project/currentRuft das aktuelle Projekt abProject

Path & VCS

MethodPathDescriptionResponse
GET/pathRuft den aktuellen Pfad abPath
GET/vcsRuft VCS-Infos fuer das aktuelle Projekt abVcsInfo

Instanz

MethodPathDescriptionResponse
POST/instance/disposeBeendet die aktuelle Instanzboolean

Konfiguration

MethodPathDescriptionResponse
GET/configRuft Konfigurationsinfos abConfig
PATCH/configAktualisiert KonfigurationConfig
GET/config/providersListet Provider und Standard-Modelle{ providers: Provider[], default: { [key: string]: string } }

Anbieter

MethodPathDescriptionResponse
GET/providerListet alle Provider{ all: Provider[], default: {...}, connected: string[] }
GET/provider/authRuft Authentifizierungsmethoden der Provider ab{ [providerID: string]: ProviderAuthMethod[] }
POST/provider/{id}/oauth/authorizeAutorisiert einen Provider per OAuthProviderAuthAuthorization
POST/provider/{id}/oauth/callbackBehandelt OAuth-Callback fuer einen Providerboolean

Sitzungen

MethodPathDescriptionNotes
GET/sessionListet alle SitzungenGibt Session[] zurueck
POST/sessionErstellt eine neue Sitzungbody: { parentID?, title? }, returns Session
GET/session/statusRuft Status aller Sitzungen abGibt { [sessionID: string]: SessionStatus } zurueck
GET/session/:idRuft Sitzungsdetails abGibt Session zurueck
DELETE/session/:idLoescht eine Sitzung und alle DatenGibt boolean zurueck
PATCH/session/:idAktualisiert Sitzungseigenschaftenbody: { title? }, returns Session
GET/session/:id/childrenRuft Kind-Sitzungen einer Sitzung abGibt Session[] zurueck
GET/session/:id/todoRuft die Todo-Liste einer Sitzung abGibt Todo[] zurueck
POST/session/:id/initAnalysiert App und erstellt AGENTS.mdbody: { messageID, providerID, modelID }, returns boolean
POST/session/:id/forkForkt eine bestehende Sitzung an einer Nachrichtbody: { messageID? }, returns Session
POST/session/:id/abortBricht eine laufende Sitzung abGibt boolean zurueck
POST/session/:id/shareTeilt eine SitzungGibt Session zurueck
DELETE/session/:id/shareHebt Teilen einer Sitzung aufGibt Session zurueck
GET/session/:id/diffRuft den Diff fuer diese Sitzung abquery: messageID?, returns FileDiff[]
POST/session/:id/summarizeFasst die Sitzung zusammenbody: { providerID, modelID }, returns boolean
POST/session/:id/revertSetzt eine Nachricht zurueckbody: { messageID, partID? }, returns boolean
POST/session/:id/unrevertStellt alle zurueckgesetzten Nachrichten wieder herGibt boolean zurueck
POST/session/:id/permissions/:permissionIDAntwortet auf eine Berechtigungsanfragebody: { response, remember? }, returns boolean

Nachrichten

MethodPathDescriptionNotes
GET/session/:id/messageListet Nachrichten in einer Sitzungquery: limit?, returns { info: Message, parts: Part[]}[]
POST/session/:id/messageSendet eine Nachricht und wartet auf Antwortbody: { messageID?, model?, agent?, noReply?, system?, tools?, parts }, returns { info: Message, parts: Part[]}
GET/session/:id/message/:messageIDRuft Nachrichtendetails abReturns { info: Message, parts: Part[]}
POST/session/:id/prompt_asyncSendet eine Nachricht asynchron (ohne Warten)body: same as /session/:id/message, returns 204 No Content
POST/session/:id/commandFuehrt einen Slash-Befehl ausbody: { messageID?, agent?, model?, command, arguments }, returns { info: Message, parts: Part[]}
POST/session/:id/shellFuehrt einen Shell-Befehl ausbody: { agent, model?, command }, returns { info: Message, parts: Part[]}

Befehle

MethodPathDescriptionResponse
GET/commandListet alle BefehleCommand[]

Dateien

MethodPathDescriptionResponse
GET/find?pattern=<pat>Sucht Text in DateienArray of match objects with path, lines, line_number, absolute_offset, submatches
GET/find/file?query=<q>Findet Dateien und Verzeichnisse nach Namenstring[] (paths)
GET/find/symbol?query=<q>Findet Workspace-SymboleSymbol[]
GET/file?path=<path>Listet Dateien und VerzeichnisseFileNode[]
GET/file/content?path=<p>Liest eine DateiFileContent
GET/file/statusRuft Status fuer getrackte Dateien abFile[]

/find/file Abfrageparameter

  • query (erforderlich) — Suchbegriff (Fuzzy-Suche)
  • type (optional) — Ergebnisse auf "file" oder "directory" beschränken
  • directory (optional) — Projektstammverzeichnis für die Suche überschreiben
  • limit (optional) — Maximale Ergebnisse (1–200)
  • dirs (optional) — Legacy-Flag ("false" gibt nur Dateien zurück)

Werkzeuge (Experimentell)

MethodPathDescriptionResponse
GET/experimental/tool/idsListet alle Tool-IDsToolIDs
GET/experimental/tool?provider=<p>&model=<m>Listet Tools mit JSON-Schemas fuer ein ModellToolList

LSP, Formatierer & MCP

MethodPathDescriptionResponse
GET/lspRuft LSP-Server-Status abLSPStatus[]
GET/formatterRuft Formatter-Status abFormatterStatus[]
GET/mcpRuft MCP-Server-Status ab{ [name: string]: MCPStatus }
POST/mcpFuegt MCP-Server dynamisch hinzubody: { name, config }, returns MCP status object

Agenten

MethodPathDescriptionResponse
GET/agentListet alle verfuegbaren AgentenAgent[]

Logging

MethodPathDescriptionResponse
POST/logSchreibt Log-Eintrag. Body: { service, level, message, extra? }boolean

TUI

MethodPathDescriptionResponse
POST/tui/append-promptHaengt Text an den Prompt anboolean
POST/tui/open-helpOeffnet den Hilfedialogboolean
POST/tui/open-sessionsOeffnet die Session-Auswahlboolean
POST/tui/open-themesOeffnet die Theme-Auswahlboolean
POST/tui/open-modelsOeffnet die Modell-Auswahlboolean
POST/tui/submit-promptSendet den aktuellen Prompt abboolean
POST/tui/clear-promptLeert den Promptboolean
POST/tui/execute-commandFuehrt einen Befehl aus ({ command })boolean
POST/tui/show-toastZeigt Toast ({ title?, message, variant })boolean
GET/tui/control/nextWartet auf die naechste KontrollanfrageControl request object
POST/tui/control/responseAntwortet auf eine Kontrollanfrage ({ body })boolean

Authentifizierung

MethodPathDescriptionResponse
PUT/auth/:idSetzt Authentifizierungsdaten. Body muss dem Provider-Schema entsprechenboolean

Events

MethodPathDescriptionResponse
GET/eventServer-Sent Events Stream. Erstes Event ist server.connected, dann Bus-EventsServer-sent events stream

Dokumentation

MethodPathDescriptionResponse
GET/docOpenAPI 3.1 SpezifikationHTML page with OpenAPI spec