opencode mit mittwald AI Hosting
opencode ist ein CLI-Coding-Agent, der
OpenAI-kompatible Provider über den Adapter @ai-sdk/openai-compatible
unterstützt, mittwald AI Hosting braucht also keine Sonderbehandlung.
Installation
npm install -g opencode-ai
Installation prüfen:
opencode --version
opencode auf mittwald AI Hosting zeigen lassen
opencode liest die Konfiguration aus einem der beiden Orte:
- Global:
~/.config/opencode/opencode.json - Pro Projekt:
opencode.jsonim Projekt-Root
{
"$schema": "https://opencode.ai/config.json",
"model": "mittwald/Qwen3.5-122B-A10B-FP8",
"provider": {
"mittwald": {
"npm": "@ai-sdk/openai-compatible",
"name": "mittwald AI Hosting",
"options": {
"baseURL": "https://llm.aihosting.mittwald.de/v1",
"apiKey": "sk-..."
},
"models": {
"Qwen3.5-122B-A10B-FP8": {
"name": "Qwen3.5-122B-A10B-FP8",
"reasoning": true,
"tool_call": true,
"limit": { "context": 245760, "output": 32768 }
},
"Qwen3.8-27B-NVFP4": {
"name": "Qwen3.8-27B-NVFP4",
"reasoning": true,
"tool_call": true,
"limit": { "context": 256000, "output": 32768 }
},
"Qwen3.6-35B-A3B-FP8": {
"name": "Qwen3.6-35B-A3B-FP8",
"reasoning": true,
"tool_call": true,
"limit": { "context": 256000, "output": 32768 }
},
"gpt-oss-120b": {
"name": "gpt-oss-120b",
"reasoning": true,
"tool_call": true,
"limit": { "context": 131072, "output": 32768 }
},
"GLM-OCR": {
"name": "GLM-OCR",
"tool_call": false,
"limit": { "context": 131072, "output": 4096 }
}
}
}
}
}
Ersetze sk-... durch deinen AI-Hosting-API-Key. Den legst du im Bereich
AI-Hosting deines mStudio-Projekts an — siehe
API-Key einrichten. Ein
mStudio-API-Token aus den Profileinstellungen ist ein anderes Zugangsmittel und
funktioniert hier nicht.
Verbindung prüfen
opencode run --auto "Create a file called hello.txt containing the word hello, then read it back."
Erwartet: opencode schreibt die Datei, liest sie zurück und gibt den Inhalt
aus. Führe das in einem Scratch-Verzeichnis aus – der Agent schreibt Dateien
dort, wo du ihn startest. Eine reine Frage würde auch bei fehlendem
tool_call gelingen, deshalb prüft der Test über eine Dateischreibung.
Ohne --auto musst du den Dateischreibzugriff erst genehmigen, bevor er
passiert. --auto genehmigt automatisch Berechtigungen, die nicht explizit
verweigert sind. --standalone läuft gegen einen privaten Server statt gegen
den gemeinsamen Hintergrunddienst – nützlich, wenn opencode run keine
Ausgabe liefert (siehe Troubleshooting weiter unten).
Nutzung
# Explain unfamiliar code
opencode run "explain how session handling works in this project"
# Make a change
opencode run "add email validation to the registration form"
# Optimise
opencode run "optimize the database queries in user_service.py"
MCP-Server
MCP-Server werden im Top-Level-Objekt mcp deklariert. Jeder Eintrag hat
eine von zwei Formen:
"type": "local"–commandist ein Array: das ausführbare Programm gefolgt von seinen Argumenten.envist optional."type": "remote"–urlzeigt auf einen MCP-Endpoint.
{
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp",
"enabled": true
},
"fetch": {
"type": "local",
"command": ["uvx", "mcp-server-fetch"],
"enabled": true
},
"playwright": {
"type": "local",
"command": ["npx", "-y", "@playwright/mcp"],
"enabled": true
},
"sequential-thinking": {
"type": "local",
"command": [
"npx",
"-y",
"@modelcontextprotocol/server-sequential-thinking"
],
"enabled": true
},
"directus": {
"type": "local",
"command": ["npx", "-y", "@directus/content-mcp"],
"env": {
"DIRECTUS_URL": "https://your-directus-instance.com",
"DIRECTUS_TOKEN": "your-directus-token"
},
"enabled": true
},
"opensearch": {
"type": "local",
"command": ["uvx", "opensearch-mcp-server-py"],
"env": {
"OPENSEARCH_URL": "https://localhost:9200",
"OPENSEARCH_USERNAME": "your-opensearch-username",
"OPENSEARCH_PASSWORD": "your-opensearch-password"
},
"enabled": true
},
"typo3": {
"type": "local",
"command": [
"mw",
"app",
"exec",
"--quiet",
"--installation-id=a-XXXXX",
"vendor/bin/typo3",
"mcp:server"
],
"enabled": true
},
"mittwald": {
"type": "remote",
"url": "https://mcp.mittwald.de/mcp",
"enabled": true
}
}
}
Authentifizierung und Token-Lebenszyklus des mittwald-Servers stehen in der MCP-Integration. Die Server für TYPO3, Directus und OpenSearch authentifizieren sich über die oben gezeigten Umgebungsvariablen.
Plugins und Skills
Plugins stehen im Array plugin:
{
"plugin": ["opencode-scheduler"]
}
Skills liegen unter ~/.config/opencode/skills/, ein Verzeichnis pro Skill.
Agent Packs fügen vorkonfigurierte Subagenten hinzu, jeder davon kann auf ein
eigenes Modell zeigen. Subagenten auf Qwen3.6-35B-A3B-FP8 zu routen,
während der Hauptagent bei Qwen3.5-122B-A10B-FP8 bleibt, hält lange
Sessions reaktionsfähig, da Subagenten-Arbeit meist aus Suchen und
Zusammenfassen besteht.
Troubleshooting
opencode run liefert keine Ausgabe und schreibt keine Datei
opencode run ist nicht interaktiv, und je nach Build liefert es unter
Umständen gar nichts zurück – keine Ausgabe, keine Datei, keine Fehlermeldung
– statt zu melden, was schiefgelaufen ist. --standalone führt den Befehl
gegen einen privaten Server statt gegen den gemeinsamen Hintergrunddienst
aus – einen Versuch wert, wenn ein Lauf nichts liefert; das ist die
dokumentierte Funktion des Flags, keine Garantie, dass es das Problem für
jede Installation löst. Bestätigt opencode run die Verbindung weiterhin
nicht, weiche auf die interaktive TUI aus (opencode ohne Subcommand
ausführen) und schicke denselben Prompt dort ab.
Der Agent antwortet, bearbeitet aber nie eine Datei oder führt einen Befehl aus
Dem Modell fehlt "tool_call": true in seinem models-Eintrag.
Ein MCP-Server startet nie
Prüfe die Form des Eintrags. Ein local-Server braucht command als Array,
nicht als String mit separatem args-Feld – ein String-command mit args
ist das Format von Claude Desktop, und opencode ignoriert es stillschweigend
statt einen Fehler zu werfen.
npx meldet einen 404 für ein MCP-Paket
Paketname prüfen. Der context7-Server ist als @upstash/context7-mcp
veröffentlicht – das ähnlich klingende @context7/mcp-server existiert nicht
auf npm.
Nächste Schritte
- Hermes Agent – ein weiterer CLI-Agent
- Pi – ein dritter
- IDE Integration – Agenten innerhalb eines Editors
- MCP-Integration – mittwald-Infrastruktur aus dem Agenten heraus verwalten
- Agent Skills – Workflow-Anleitungen ergänzen
Disclaimer
Drittanbieter-Tools, MCP-Server und externe Links werden zur Vereinfachung bereitgestellt, ohne Gewährleistung oder Empfehlung. Nutze sie auf eigenes Risiko, prüfe Lizenzen und Datenschutzrichtlinien und vergib nur die nötigen Berechtigungen (Least Privilege). Sende keine sensiblen Daten an externe Services, sofern nicht nötig und erlaubt.