Claude Simulator for MCP Apps: Test Claude Apps Locally with sunpeak
sunpeak Claude simulator.
TL;DR: sunpeak v0.15 adds a local Claude simulator. Run sunpeak dev, pick Claude from the Host dropdown (or ?host=claude URL Param), and test your MCP App in both Claude and ChatGPT from one dev server.
Until now, sunpeak’s local simulator only replicated the ChatGPT runtime. If you wanted to test how your MCP App looked in Claude, you had to deploy it and connect it manually. That’s fixed.
sunpeak v0.15 ships with first-class Claude support. The old ChatGPTSimulator is now just Simulator, and both Claude and ChatGPT are registered as host shells out of the box. Switch between them with a dropdown, a URL param, or a prop.
What Changed
The simulator is now multi-host. Instead of a single ChatGPT-specific component, sunpeak uses a pluggable host shell system. Each host registers its own conversation chrome, color palette, and theme behavior. The Simulator component renders whichever host you select.
Two hosts ship by default:
- ChatGPT uses the familiar gray/white palette with the ChatGPT conversation layout.
- Claude uses a warm beige/cream palette matching claude.ai, with Claude’s conversation chrome.
Both implement the core MCP App protocol, but each host adds its own extras. ChatGPT supports host-specific features like file uploads and downloads on top of the standard. Claude doesn’t have additional host APIs today, though sunpeak’s Claude host shell does handle Claude’s rendering quirks. If Claude adds host-specific capabilities in the future, they’ll be built into this shell. Your resource component renders in both, wrapped in each host’s chat UI, so you see exactly what your users will see.
How to Use It
If you already have a sunpeak project, update to v0.15 and migrate your CSS classes:
sunpeak upgrade
Then run the dev server:
sunpeak dev
Open localhost:3000. You will see a Host dropdown in the simulator sidebar. Select Claude to test your app in the Claude runtime. Select ChatGPT to switch back.
If you are starting fresh:
pnpm add -g sunpeak
sunpeak new
cd my-app && sunpeak dev
The scaffolded project uses the new Simulator component by default. Both hosts are available from the first run.
Host Selection
Three ways to pick a host:
Sidebar dropdown. The Host control appears in the sidebar when multiple hosts are registered. Click it to switch at runtime.
URL parameter. Add ?host=claude or ?host=chatgpt to the simulator URL. This is useful for bookmarking a specific host, linking teammates to a particular test configuration, or testing certain rendering states automatically.
defaultHost prop. Set the initial host in code:
import { Simulator } from 'sunpeak/simulator';
<Simulator
simulations={simulations}
defaultHost="claude"
/>
The default is chatgpt if you don’t specify one.
Migrating from ChatGPTSimulator
If your project uses the old ChatGPTSimulator from sunpeak/chatgpt, it still work as an alias to the new simulator. No migration is required, but the alias will be removed in the near future.
The change is small. In your dev entry point, replace:
// Before
import { ChatGPTSimulator } from 'sunpeak/chatgpt';
<ChatGPTSimulator simulations={simulations} />
with:
// After
import { Simulator } from 'sunpeak/simulator';
<Simulator simulations={simulations} />
Same simulations, same resource components, same test suite. The Simulator just adds the host dropdown and Claude’s rendering behavior.
What Your App Looks Like in Claude
The Claude host shell wraps your resource component in Claude’s conversation UI. The background uses Claude’s warm beige and grey instead of ChatGPT’s white and dark grey. User messages appear in Claude’s bubble style. The toolbar and display mode controls (inline, fullscreen, picture-in-picture) work the same way.
The core data flow is shared across hosts. useToolData receives the tool output. useAppState syncs state back to the host. SafeArea handles safe rendering boundaries. These work the same in both Claude and ChatGPT.
Where hosts differ is in extras. ChatGPT supports host-specific features like file uploads and downloads that go beyond the MCP App standard. Claude has its own rendering quirks that sunpeak’s host shell accounts for. If Claude adds host-specific APIs later, sunpeak will surface them through the same shell system.
The simulator lets you catch these differences locally instead of deploying to find out.
Extensible Host System
The host shell registry is open. If a new major MCP App host appears, sunpeak can add support without changing the Simulator component or your resource code. Each host registers itself with an id, a label, a conversation component, a theme function, and style variables. The simulator picks up all registered hosts automatically.
For now, Claude and ChatGPT cover the two largest MCP App hosts.
Getting Started
pnpm add -g sunpeak
sunpeak new
cd my-app && sunpeak dev
Open localhost:3000, select Claude from the Host dropdown, and start building.
- How to Build a Claude App covers architecture and code patterns for Claude.
- ChatGPT App Tutorial walks through building a resource from scratch (same steps work for Claude).
- Building One MCP App for ChatGPT and Claude covers the cross-platform story.
- Testing guide covers Vitest and Playwright setup.
- sunpeak documentation has the quickstart and full API reference.
Build once with sunpeak, test locally in both Claude and ChatGPT, and ship to every MCP App host.
Frequently Asked Questions
How do I test a Claude App locally?
Install sunpeak globally with pnpm add -g sunpeak, scaffold a project with sunpeak new, and run sunpeak dev. The local simulator starts at localhost:3000 with both Claude and ChatGPT hosts available. Select Claude from the Host dropdown in the sidebar to test your app in the Claude runtime. No Claude account is needed for local development.
Does sunpeak support both Claude and ChatGPT?
Yes. sunpeak v0.15 includes first-class support for both Claude and ChatGPT. The Simulator component automatically registers both host shells. You can switch between them using the Host dropdown in the sidebar or by adding ?host=claude or ?host=chatgpt to the URL.
What is the sunpeak Simulator?
The sunpeak Simulator is a local development tool that replicates AI host runtimes (Claude, ChatGPT) on localhost. It renders your MCP App resources in a realistic chat environment with simulated tool calls, display modes, theming, and device simulation. It replaces the previous ChatGPT-only ChatGPTSimulator component.
Can I test the same MCP App in both Claude and ChatGPT?
Yes. The Simulator renders the same resource component in both host runtimes. Switch between Claude and ChatGPT using the Host dropdown to verify your app looks and works correctly in each environment. Both hosts share the core MCP App protocol. ChatGPT adds host-specific features like file uploads and downloads. Claude has its own rendering quirks that sunpeak handles automatically.
What is the difference between the Claude and ChatGPT simulators?
The Claude simulator uses Claude conversation chrome with a warm beige color palette matching claude.ai. The ChatGPT simulator uses ChatGPT conversation chrome with a gray/white palette. Beyond visuals, each host has its own behavior. ChatGPT supports host-specific APIs like file uploads and downloads. Claude has its own rendering quirks. sunpeak handles these differences in each host shell so your core component code stays the same.
How do I switch between Claude and ChatGPT in the simulator?
Use the Host dropdown in the simulator sidebar to switch between Claude and ChatGPT at runtime. You can also set the host via URL parameter (?host=claude) or set a default in code with the defaultHost prop on the Simulator component. The default is ChatGPT if not specified.
Do I need to change my code to support Claude?
If your MCP App uses the core sunpeak API (useToolData, useAppState, SafeArea, useDisplayMode), it already works in Claude. The Simulator component automatically includes both host shells. Claude has its own rendering quirks, which sunpeak handles for you. If you use ChatGPT-specific features like file uploads, those parts won't apply in Claude, but the rest of your app works without changes. Run sunpeak dev and select Claude from the Host dropdown to verify.
What happened to ChatGPTSimulator?
ChatGPTSimulator still works for backward compatibility, but the new Simulator component replaces it. The Simulator supports multiple hosts (Claude, ChatGPT, and any future hosts) through a pluggable host shell system. New projects created with sunpeak new use the Simulator by default.