pingdotgg / pingdotgg/t3code

OpenCode provider: surface MCP servers, LSP servers, and plugins

Open
#11,398 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
23k
Forks
5.9k
Avg merge
11h 14m
Merged PRs (30d)
357

Description

Problem

When T3 Code uses the OpenCode provider, there is no way to see which MCP servers, LSP servers, or OpenCode plugins are active for the workspace.

Today the OpenCode inventory only loads:

  • upstream providers/models (client.provider.list)
  • agents (client.app.agents)
  • skills (client.app.skills / opencode debug skill)

(apps/server/src/provider/opencodeRuntime.ts loadOpenCodeInventory, apps/server/src/provider/Layers/OpenCodeProvider.ts checkOpenCodeProviderStatus.)

ServerProvider (packages/contracts/src/server.ts) carries models, slashCommands, and skills — but no MCP/LSP/plugin fields — and Settings > Providers / docs (docs/user/providers-opencode.md “Refresh models, commands, and skills”) only mention models/commands/skills.

Meanwhile OpenCode already exposes the data:

  • client.mcp.status() -> Record<name, connected|disabled|failed|needs_auth|needs_client_registration> (+ opencode mcp list)
  • client.lsp.status() -> Array<{id, name, root, status}>
  • client.config.get() -> Config.plugin: string[] + Config.mcp map (+ opencode debug config, opencode plugin)

So users debugging “why is this tool missing / why is this MCP red” have to drop to the OpenCode CLI/TUI. T3 Code never shows it on web, desktop, or mobile.

Proposal

  1. Extend OpenCodeInventory with mcps / lsps / plugins loaded alongside providers/agents/skills (SDK-first: mcp.status, lsp.status, config.get; degrade to empty on failure like agents/skills do today, and document the CLI-fallback gap: opencode mcp list is human-readable, there is no \ fast-timeout so a hung helper cannot wedge refresh).
  2. Plumb through ServerProvider (new optional arrays, forward-compatible like skills) so web/desktop/mobile can render them.
  3. Render a read-only section in Settings > Providers for OpenCode instances (name + status/error; LSP id/name/root/status; plugin spec), reused by mobile thread settings where reasonable. Per-adapter decision for non-OpenCode drivers: not supported (OpenCode-only).
  4. Update docs/user/providers-opencode.md (“Refresh models, commands, and skills” -> include MCP/LSP/plugins).

Acceptance

  • With OpenCode enabled, Settings > Providers shows MCP server names + status, LSP servers, and configured plugins for the workspace.
  • Failed/disabled/needs-auth MCP states surface their error instead of silently disappearing.
  • Works for local and external (serverUrl) OpenCode servers; refresh path reloads all three lists.
  • Mobile shows the same data where provider details are rendered (or explicitly tracks why not).

Part 1 PR (backend plumbing) to follow; this issue tracks the full user-visible feature.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with loadOpenCodeInventory in apps/server/src/provider/opencodeRuntime.ts and checkOpenCodeProviderStatus in apps/server/src/provider/Layers/OpenCodeProvider.ts, then inspect ServerProvider in packages/contracts/src/server.ts. Trace the Settings > Providers rendering and mobile provider details, plus docs/user/providers-opencode.md. Done means MCP, LSP, and plugin data refreshes for local and external OpenCode servers, including MCP error states, across the specified clients.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
backend, desktop, documentation, frontend, mobile
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.