Skip to content

Add MCP client tabs to onboarding with copyable configs - #761

Merged
kody-bot merged 2 commits into
mainfrom
cursor/onboarding-mcp-client-tabs-a1b2
Jul 16, 2026
Merged

kody-bot merged 2 commits into
mainfrom
cursor/onboarding-mcp-client-tabs-a1b2

Conversation

@kentcdodds

@kentcdodds kentcdodds commented Jul 16, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Replace the generic “paste this MCP URL” onboarding step with a Remix tabs UI covering Cursor, Codex/ChatGPT, Claude Desktop, Claude Code, OpenCode, VS Code, and Other.
  • Clients that still need config edits get copyable JSON/TOML snippets (with copy buttons). Claude Desktop and ChatGPT web stay UI-first.
  • Non-coding agent tabs note that using packages works fine there, while coding agents are recommended for creating/editing packages.
  • Document the same guidance in docs/use/connect-your-agent.md.

Test plan

  • Unit tests for per-client config builders
  • npm run typecheck
  • CI green
  • Manual: open /onboarding, switch tabs, copy JSON/TOML/URL
System recap — composes existing primitives (low risk)

Mode: recap · Base: main · Head: cursor/onboarding-mcp-client-tabs-a1b2

Classification: composes — no primitives added or changed; this PR wires existing UI and onboarding surfaces together with client-specific copy and config snippets.

Primitives touched

Primitive Group Impact
app-ui surfaces composes — onboarding route gains MCP client tabs + copyable configs
mcp-server surfaces composes — documents how hosts connect to /mcp (no server changes)

System map

flowchart LR
  Onboarding["/onboarding UI"] --> Tabs["Client tabs"]
  Tabs --> Cursor["Cursor JSON / UI"]
  Tabs --> Codex["Codex TOML / ChatGPT UI"]
  Tabs --> Claude["Claude Desktop UI / Claude Code"]
  Tabs --> Others["OpenCode / VS Code / Other"]
  Cursor --> MCP["/mcp OAuth"]
  Codex --> MCP
  Claude --> MCP
  Others --> MCP
Loading

Risk notes

  • Low risk UI/docs change only; no auth, storage, or MCP protocol changes.
  • Config snippets are host-specific; wrong root keys (e.g. VS Code servers vs mcpServers) are called out explicitly.
Open in Web Open in Cursor 

Summary by CodeRabbit

  • New Features
    • Added a multi-tab MCP onboarding UI with client-specific setup for Cursor, Claude Desktop, Claude Code, Codex/ChatGPT, OpenCode, VS Code, and other agents.
    • Included ready-to-copy MCP URL and generated configuration snippets/commands directly in the onboarding step.
    • Added clearer guidance for coding vs non-coding agents when using Kody packages.
  • Documentation
    • Updated connection instructions to use MCP-capable agents and to follow the onboarding page’s client tabs and https://<this-host>/mcp URL.
  • Tests
    • Updated onboarding verification to assert the MCP client setup UI, and added coverage for generated configuration outputs.

Give host-specific setup for Cursor, Codex/ChatGPT, Claude Desktop,
Claude Code, OpenCode, VS Code, and other clients, including JSON/TOML
snippets with copy buttons and a note that non-coding agents are fine
for using packages while coding agents are better for creating them.

Co-authored-by: Kent C. Dodds <me+github@kentcdodds.com>
@coderabbitai

coderabbitai Bot commented Jul 16, 2026 •

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 38345779-f78c-49a4-837b-d57bb96921cb

📥 Commits

Reviewing files that changed from the base of the PR and between 6f9ba4c and c765be6.

📒 Files selected for processing (1)
  • e2e/invite-signup-verification.spec.ts

📝 Walkthrough

Walkthrough

Adds client-specific MCP configuration builders and a tabbed onboarding interface for Cursor, Claude, Codex, OpenCode, and VS Code. The onboarding route, documentation, and end-to-end coverage now reflect the client setup instructions.

Changes

MCP onboarding

Layer / File(s) Summary
Client metadata and configuration builders
packages/worker/client/routes/onboarding-mcp-clients.ts, packages/worker/client/routes/onboarding-mcp-clients.node.test.ts
Defines supported clients, setup hints, and JSON, TOML, and CLI configuration generators with tests for each format.
Tabbed client setup UI
packages/worker/client/routes/onboarding-mcp-client-tabs.tsx
Renders client-specific setup instructions, generated snippets, notes, and copy controls in onboarding tabs.
Onboarding integration, guidance, and validation
packages/worker/client/routes/onboarding.tsx, docs/use/connect-your-agent.md, e2e/invite-signup-verification.spec.ts
Replaces generic MCP setup content with the tabbed interface, adds client-specific connection documentation, and verifies the updated onboarding UI.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant AgentUser
  participant Onboarding
  participant ClientTabs
  participant MCPClient
  AgentUser->>Onboarding: Open Get started page
  Onboarding->>ClientTabs: Provide mcpServerUrl
  ClientTabs->>AgentUser: Show client-specific configuration
  AgentUser->>MCPClient: Add Kody MCP configuration
  MCPClient->>Onboarding: Connect using MCP URL
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: adding MCP client tabs to onboarding with copyable configuration snippets.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch cursor/onboarding-mcp-client-tabs-a1b2

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@kody-bot
kody-bot marked this pull request as ready for review July 16, 2026 16:25
@github-actions

github-actions Bot commented Jul 16, 2026 •

Copy link
Copy Markdown
Contributor

🔎 Preview deployed: https://kody-pr-761.kody-a99.workers.dev

Worker: kody-pr-761
D1: kody-pr-761-db
KV: kody-pr-761-oauth-kv

Mocks:

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🧹 Nitpick comments (1)
packages/worker/client/routes/onboarding-mcp-client-tabs.tsx (1)

73-80: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider extracting the URL snippet into a reusable helper.

The pre block and CopyTextButton for the mcpServerUrl are repeated identically across multiple tabs (Cursor, Codex/ChatGPT, Claude Desktop, and Other). Extracting this into a local helper component would reduce duplication and clean up the tab definitions.

♻️ Proposed refactor

Define a helper at the top of the file:

function UrlSnippet(handle: Handle<{ url: string }>) {
	return () => (
		<>
			<pre mix={css(codeBlockCss)}>{handle.props.url}</pre>
			<div mix={css(buttonRowCss)}>
				<CopyTextButton
					value={handle.props.url}
					idleLabel="Copy MCP URL"
					variant="primary"
				/>
			</div>
		</>
	)
}

Then replace the repeated blocks with:

<UrlSnippet url={mcpServerUrl} />
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/worker/client/routes/onboarding-mcp-client-tabs.tsx` around lines 73
- 80, Extract the repeated mcpServerUrl preformatted block and CopyTextButton
markup into a local UrlSnippet helper component near the top of the file,
accepting the URL through its props and preserving the existing styling and
button configuration. Replace the identical URL sections in the Cursor,
Codex/ChatGPT, Claude Desktop, and Other tab definitions with UrlSnippet usage.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/worker/client/routes/onboarding-mcp-client-tabs.tsx`:
- Around line 61-63: Update the mcpClientTabs.map rendering to add a stable key
prop to each Tab, using the existing tab.id identifier, while preserving the
current name and label props.

---

Nitpick comments:
In `@packages/worker/client/routes/onboarding-mcp-client-tabs.tsx`:
- Around line 73-80: Extract the repeated mcpServerUrl preformatted block and
CopyTextButton markup into a local UrlSnippet helper component near the top of
the file, accepting the URL through its props and preserving the existing
styling and button configuration. Replace the identical URL sections in the
Cursor, Codex/ChatGPT, Claude Desktop, and Other tab definitions with UrlSnippet
usage.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 53d9e6b2-4c05-465b-81ac-8a2ee6ba7759

📥 Commits

Reviewing files that changed from the base of the PR and between ed6ce6f and 6f9ba4c.

📒 Files selected for processing (5)
  • docs/use/connect-your-agent.md
  • packages/worker/client/routes/onboarding-mcp-client-tabs.tsx
  • packages/worker/client/routes/onboarding-mcp-clients.node.test.ts
  • packages/worker/client/routes/onboarding-mcp-clients.ts
  • packages/worker/client/routes/onboarding.tsx

Comment on lines +61 to +63
{mcpClientTabs.map((tab) => (
<Tab name={tab.id}>{tab.label}</Tab>
))}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a key prop to the mapped Tab components.

React requires a key prop when rendering arrays of elements to properly track them during reconciliation.

♻️ Proposed fix
 					{mcpClientTabs.map((tab) => (
-						<Tab name={tab.id}>{tab.label}</Tab>
+						<Tab key={tab.id} name={tab.id}>{tab.label}</Tab>
 					))}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{mcpClientTabs.map((tab) => (
<Tab name={tab.id}>{tab.label}</Tab>
))}
{mcpClientTabs.map((tab) => (
<Tab key={tab.id} name={tab.id}>{tab.label}</Tab>
))}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/worker/client/routes/onboarding-mcp-client-tabs.tsx` around lines 61
- 63, Update the mcpClientTabs.map rendering to add a stable key prop to each
Tab, using the existing tab.id identifier, while preserving the current name and
label props.

The invite-signup verification flow asserted a single /mcp text match;
client tabs render many config snippets, so assert the tablist and Copy
MCP URL button instead.

Co-authored-by: Kent C. Dodds <me+github@kentcdodds.com>
@kody-bot
kody-bot merged commit 196ac87 into main Jul 16, 2026
5 checks passed
@kody-bot
kody-bot deleted the cursor/onboarding-mcp-client-tabs-a1b2 branch July 16, 2026 16:38
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.

3 participants