Skip to content

fix(app,tui): hide MCP integrations from the connect menu - #60675

Merged
thdxr merged 1 commit into
devfrom
connect-no-mcp
Oct 30, 2026
Merged

thdxr merged 1 commit into
devfrom
connect-no-mcp

Conversation

@thdxr

@thdxr thdxr commented Oct 30, 2026 •

Copy link
Copy Markdown
Member

Issue for this PR

Closes #

Type of change

  • Bug fix
  • New feature
  • Refactor / code improvement
  • Documentation

What does this PR do?

The connect menu in both clients listed every integration from /api/integration, which includes MCP servers (metadata.source === "mcp") and showed them in their own "MCP" group. MCP servers already have their own place to connect and manage them, so the connect menu now leaves them out.

  • App: ProviderPicker in providers/connect/dialog.tsx drops MCP integrations. I also removed the MCP group, the MCP server sync and the MCP "needs sign-in" check that only the picker used, the MCP branch in ProviderConnection, and the unused dialog.provider.group.mcp string. The MCPs dialog and Settings › Extensions sign in through useMcpToggle and don't change.
  • TUI: DialogIntegration drops MCP integrations when it's opened as the menu (/connect, the model dialog, the prompt). It still shows them when the MCP dialog opens it with an integrationID to sign a server in. I also removed the MCP sort priority, the "MCP" category and the MCP branch in connected().

How did you verify your code works?

  • bun run check
  • TUI: new tests in test/cli/tui/dialog-integration.test.tsx check that the menu leaves out an MCP integration and that integrationID still shows it. I confirmed the first test fails without the filter.
  • App: e2e/regression/settings.spec.ts. The connect-dialog test now includes an MCP integration and checks it isn't listed; I confirmed this fails without the filter. The Extensions MCP test now tags its integration as MCP, and its sign-in still works.

Visual

<svg xmlns="http://www.w3.org/2000/svg" width="240" height="72" viewBox="0 0 240 72" fill="currentColor"><style>.m{animation:f 3s ease-in-out infinite}@keyframes f{0%,30%{opacity:.5}60%,100%{opacity:0}}@media (prefers-reduced-motion:reduce){.m{animation:none;opacity:0}}</style><rect x="60" y="6" width="120" height="60" rx="6" fill="none" stroke="currentColor" opacity=".3"/><rect x="70" y="16" width="70" height="6" rx="3" opacity=".7"/><rect x="70" y="30" width="60" height="6" rx="3" opacity=".5"/><rect class="m" x="70" y="44" width="40" height="6" rx="3"/></svg>

Screenshots / recordings

Verified locally: the app connect dialog shows only Connected › OpenAI and Popular › Anthropic, with no MCP group, and the TUI /connect menu doesn't list the MCP integration.

Checklist

  • I have tested my changes locally
  • I have not included unrelated changes in this PR

@opencodejr opencodejr Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. On the base, the TUI /connect menu lists a configured remote MCP server under an "MCP" group; with this PR it doesn't. Signing in from the MCP dialog is unaffected: it opens DialogIntegration with integrationID and no onConnected, so dropping the MCP check in connected() changes nothing there. In the app, no other caller pre-selects an MCP integration, so removing the MCP branch from ProviderConnection is safe. The TUI dialog tests pass, the new menu test fails on the base, and tsc -b passes for packages/tui and packages/app. I didn't run the app's e2e tests.

The public API is unchanged (client UI only).

Before

After

@thdxr
thdxr merged commit bf5d12c into dev Oct 30, 2026
23 checks passed
@thdxr
thdxr deleted the connect-no-mcp branch October 30, 2026 18:43
sharunkumar added a commit to sharunkumar/opencode that referenced this pull request Oct 30, 2026
Brings in 113 upstream commits (upstream tip bf5d12c "fix(app,tui):
hide MCP integrations from the connect menu (anomalyco#60675)").

Note on history: a `git pull --rebase` (gpa) flattened the previous,
unpushed upstream merge, so 6 upstream commits now also exist on dev
as rebased copies (84ac67f..cfdd05e). Merging upstream again made
git apply those changes twice. That caused the mock-server.ts and pty.ts
conflicts and a silent double-merge in mock-api.ts. All three files are
taken as upstream has them; the fork never changed them.

Conflict resolutions
====================

- .github/workflows/release.yml: kept the fork's release workflow.
- packages/app/e2e/utils/mock-server.ts, packages/client/src/solid/pty.ts:
  upstream's version (rebase duplicates, no fork changes).
- packages/app/e2e/utils/mock-api.ts: merged without conflict markers
  but declared PersistentPtyUnavailable, PersistentPtyMissing and
  PersistentPtyUpdate twice (oxlint errors). Took upstream's version.
- packages/core/src/plugin/internal.ts: kept the fork's CancelTool and
  added upstream's new ArtifactTools.
- packages/core/src/database/migration.gen.ts: the fork's session_roots
  stays m50; upstream's new 20261030054400_job migration is m59.
- packages/core/schema.json: new snapshot id with prevIds
  [fork 8aa4d526..., upstream 4f6e16c6...]. DDL has both the fork's
  `roots` column and upstream's `job` table.
  `bun script/migration.ts --check` reports no pending changes.
- packages/tui/src/component/prompt/index.tsx: kept the fork's
  provider/keyword color imports and took upstream's useCursorStyle.
- packages/tui/src/component/session-tabs.tsx: upstream's only change
  was "span vertical session tab pulse across full tab width" (anomalyco#60338),
  plus formatting. Kept the fork's vertical tab layout (project groups,
  child rows, wrapped titles, compact layout) and applied upstream's
  change: removed `indicatorWidth` and every `width={indicatorWidth}`
  on TabPulse.
- packages/protocol/openapi.json and the generated client: regenerated
  (both move and root endpoints present).

Follow-up fix
- packages/core/test/tool-cancel.test.ts (fork test): upstream moved
  background jobs from KV to a SQLite job table (anomalyco#60491), so Job now
  needs Database, and Tool now depends on Permission. The test layer
  now uses Database.node + Global.node instead of KV.node and replaces
  Permission with permissionLayer(), matching upstream's job and tool
  registry tests.

Verification
- bun install
- bun turbo typecheck: 35/35 packages
- oxlint: 0 errors
- bun script/migration.ts --check: no schema changes
- make tests: tui 187, core 456, schema 7, sdk 3 pass, 0 fail
@amrkmn amrkmn mentioned this pull request Oct 31, 2026
1 task
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant