Skip to content

[Feat] Add on-demand connection tests for custom MCP servers - #3655

Merged
daniel-lxs merged 2 commits into
developfrom
feature/custom-mcp-connection-test-0skzokh2jrws0
Nov 3, 2026
Merged

daniel-lxs merged 2 commits into
developfrom
feature/custom-mcp-connection-test-0skzokh2jrws0

Conversation

@roomote-roomote

@roomote-roomote roomote-roomote Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

​Opened on behalf of @daniel-lxs. Follow up by mentioning @roomote-roomote, in the web UI, or in Telegram.

Related issue

Internal product improvement; no separate issue.

Why this PR exists

  • A maintainer explicitly invited this PR in the linked issue or discussion
  • I am a maintainer / this is internal Roomote work

What changed

Add Test connection inside a saved custom remote MCP server's Manage tools dialog. It explicitly fetches fresh tool metadata and reports named success/failure, including a valid empty catalog. Previously there was no successful-dialog retest action, and reopening could reuse cache.

Reuse the existing authorized, credential-aware, SSRF-guarded endpoint. Pending requests coalesce; testing does not execute tools or change enablement/approval choices. No new endpoint, persistent state or dependency. Public docs explain the remote-metadata scope and stdio limitation.

How it was tested

  • Baseline develop fb5e231d: genuine public DeepWiki catalog loads three schemas but has no Test action; the fresh-cache regression fails for that missing capability.
  • Final head 16df38eebd20e795784579e96d98f474ccb33b4c repairs the review-found observer race by awaiting the captured server-keyed fetch. Both opposite-outcome regressions fail before repair and pass after it. 37 client + 21 server command tests, web types, docs build/links/render and actual commit/pre-push gates pass. Full local suite not run.
  • Native desktop1440×1000/mobile390×844: real public metadata success; request abort → Test failure → remove cause → Test recovery; existing Retry recovery. Final-head private placement repeats Test/failure/recovery/Retry, with database enable/tool-policy values unchanged. Four synthetic fixture UUIDs removed; all transport overrides restored.
  • Final-head race: a browser fetch timing gate delays an aborted A request's original rejection until B's genuine public catalog loads. Releasing A correctly reports A failed while B stays successful. No successful response or UI state is fabricated; this is controlled scheduling/transport proof, not an upstream outage. No tool execution or external user messages.
  • Latest three images opened/inspected and independently checked; full committed patch matches the proof snapshot. Mobile diagnostic/Retry and complete catalog are unobstructed. Stills prove final appearance, not timing or freshness. No real-device, screen-reader, dark-theme or live OAuth/header-auth provider claim.
  • Implementation CI is green, exact-head automated re-review clean, and the review thread resolved. Normal human review remains required.

Screenshots

Genuine local app and public schemas, with disclosed delayed/aborted transport for negative cases. Latest final-head evidence replaces earlier captures.

A failure remains identified as A while B's successful catalog is selected

Unobstructed mobile failure diagnostic with Test and Retry

Mobile retest restores all three public tool schemas

Related PRs

  • #3651: independent pending custom-skill edit protection.
  • #3652: independent contextual automation/settings Edit names.

Checklist

  • The PR title follows the repo convention: [Fix], [Feat], [Improve], [Refactor], [Docs], or [Chore] followed by a user-facing description
  • This PR is small and scoped to one change
  • pnpm lint and pnpm check-types pass locally — normal broad fast equivalents and actual hooks passed
  • I added tests or included a clear manual validation note above
  • I removed secrets, tokens, private keys, and customer data from code, logs, and screenshots
  • If this change should appear in the changelog, I ran pnpm changeset — no changeset added

@roomote-community

roomote-community Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

No new code issues found. The prior finding is fixed: connection tests now await the server-keyed fetch, and regression coverage checks both opposite-outcome switches. An isolated TanStack Query probe confirmed that each fetch retains its original outcome after switching observers. Lint, type-check, docs, Knip and CodeQL checks passed; tests and the app build were still running when checked. See session

Reviewed 16df38e

@daniel-lxs daniel-lxs left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Reviewed head 16df38e. The connection-test race is addressed by awaiting the original server-keyed fetch, with regression coverage for both opposite outcomes. All review feedback is addressed and required checks pass.

@daniel-lxs
daniel-lxs merged commit bc5d87f into develop Nov 3, 2026
38 checks passed
@daniel-lxs
daniel-lxs deleted the feature/custom-mcp-connection-test-0skzokh2jrws0 branch November 3, 2026 14:02
@roomote-roomote roomote-roomote Bot mentioned this pull request Nov 4, 2026
8 of 12 tasks
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