Connect any MCP server to OpenCode. One config entry. Zero guesswork.
You already have MCP servers for web search, databases, file systems, design tools — the ecosystem is growing fast. The problem is getting them all working inside OpenCode.
The adapter is the bridge. Add a server, it appears as tools. Handles schema conversion, response flattening, timeouts, and error messages automatically.
| Feature | What it does | Why it matters |
|---|---|---|
| Plug & play | Add servers to opencode.jsonc, tools appear automatically |
No manual tool definitions. No boilerplate. |
| Schema conversion | Converts JSON Schema to Zod — handles anyOf, unions, nullable, $ref, merged objects |
OpenCode needs Zod. MCP sends JSON Schema. One bridge, no crashes. |
| Response flattening | Turns images, audio, files, resource links into plain text | The LLM reads text, not base64. No silent data loss. |
| Token savings | [image: image/png] (12KB) instead of 600+ tokens of raw base64 |
Fewer tokens per response. Cheaper conversations. |
| Timeout guard | 60s timeout, resets on server progress | No frozen conversations. Long-running tools still work. |
| Clean errors | "Tool X on server Y failed: reason" instead of stack traces |
The LLM tells you what happened instead of throwing noise. |
| Smart naming | notion + notion_search → notion_search, not notion_notion_search |
Clean tool names. No repetition. |
| Auto-update | Checks npm registry on first session, invalidates stale cache, notifies you by toast | Always runs the latest version. No manual cleanup. |
npm install -g @openstellar/mcp-adapterAdd to opencode.jsonc:
Restart OpenCode. Tools appear. Done.
Local MCP servers keep stderr out of OpenCode's CLI by default while retaining a bounded startup trace for the debug log (OPENSTELLAR_MCP_DEBUG=true). Their stdout remains connected to the MCP JSON-RPC protocol. To opt into live diagnostics for a specific local server, add "stderr": "inherit".
| Field | Required | Description |
|---|---|---|
type |
✅ | "local" (stdio) or "remote" (HTTP SSE) |
command |
for local |
Child process args |
url |
for remote |
SSE endpoint |
headers |
optional | Auth tokens, etc. |
env |
optional | Environment for child process |
stderr |
optional | Set to "inherit" for live child diagnostics; omitted by default (stderr is captured off-terminal) |
timeout |
optional | Per-tool timeout in ms (default: 60000) |
MCP Server ──→ Adapter ──→ OpenCode Tool
├─ JSON Schema → Zod
├─ Response flattening
├─ Timeout guard
└─ Error wrapping
MIT © 2026 OpenStellar
{ "plugin": [ [ "@openstellar/mcp-adapter@latest", { "mcp": { "example-remote": { "type": "remote", "url": "https://mcp.example.com/mcp", "headers": { "Authorization": "Bearer YOUR_TOKEN" } }, "example-local": { "type": "local", "command": ["npx", "-y", "mcp-server-package"] } } } ] ] }