
Key Features
The App Builder provides everything you need to develop and test apps locally:- Widget Preview - Instantly view your widgets by manually invoking tools or chatting with your server using an LLM
- Full Protocol Support - Complete support for
window.openaiAPI includingwidgetState,callTool,structuredContent,sendFollowUpMessage, anddisplayMode - MCP Apps Support - Full support for MCP Apps (SEP-1865) including all JSON-RPC message types like
tools/call,ui/initialize,ui/message, andui/open-link - Device Emulation - Test your widgets across Desktop, Tablet, and Mobile viewports
- CSP Testing - Validate your Content Security Policy configurations
- Comprehensive Logging - View all JSON-RPC messages and
window.openaiAPI calls in real-time
Getting Started
To start building apps with MCPJam:- Connect your MCP server - Use the Servers tab to connect to your MCP server that returns widget-enabled tools
- Navigate to App Builder - Switch to the App Builder tab in the inspector
- Invoke a tool - Either manually invoke a tool from the Tools list, or chat with your server in the playground
openai/outputTemplate for ChatGPT apps or ui.resourceUri for MCP apps), it will render immediately in the widget emulator.
Widget Emulator Features
Device Viewports
Test your widgets across different device types to ensure responsive design:- Desktop - Standard desktop viewport for full-screen experiences
- Tablet - Medium-sized viewport for tablet devices
- Mobile - Small viewport mimicking phone screens
window.openai.userAgent.device.type property.
Theme Testing
Toggle between light and dark modes to test your widget’s appearance in both themes. The theme preference is passed to your widget through thewindow.openai API, allowing your app to adapt its styling accordingly.
Locale Configuration
Test your app’s internationalization by selecting different locales from the locale selector. Choose from common BCP 47 locales (e.g.,en-US, es-ES, ja-JP, fr-FR) to verify that your widget properly handles different languages and regions.
Device Capabilities
Configure device-specific capabilities to test different interaction patterns:- Hover - Enable/disable hover support to test mouse-based interactions vs touch-only interfaces
- Touch - Toggle touch input to simulate mobile and tablet devices
window.openai.userAgent.capabilities.hover and window.openai.userAgent.capabilities.touch.
Safe Area Insets
Simulate device notches, rounded corners, and gesture areas with configurable safe area insets:- Preset Profiles - Quick access to common device configurations:
- None (0px)
- iPhone with Notch (44px top, 34px bottom)
- iPhone with Dynamic Island (59px top, 34px bottom)
- Android gesture navigation (24px top, 16px bottom)
- Custom Values - Manually adjust top, bottom, left, and right insets
window.openai.safeArea.insets and can adjust its layout to avoid being obscured by system UI.
Display Modes
ChatGPT apps can request different display modes to optimize their presentation:- Inline (default) - Widget renders within the chat message flow
- Picture-in-Picture - Widget floats at the top of the screen, staying visible while scrolling
- Fullscreen - Widget expands to fill the entire viewport for immersive experiences
Content Security Policy (CSP)
The App Builder includes CSP enforcement controls to help you test widget security configurations. Switch between two CSP modes using the shield icon:- Permissive (default) - Allows all HTTPS resources, suitable for development
- Strict - Only allows domains declared in your widget’s
openai/widgetCSPmetadata
- Suggested fix - Copyable JSON snippet to add to your
openai/widgetCSPfield - Blocked requests - List of all CSP violations with directive and URI details
- Declared domains - The
connect_domainsandresource_domainsyour widget currently declares
Debugging Tools
The App Builder provides several debugging views to help you understand your widget’s behavior:- Data View (database icon) - Inspect tool input, output, and error details
- Widget State View (box icon) - View the current widget state and see when it was last updated
- Globals View (globe icon) - Examine global values passed to the widget (theme, display mode, locale, device capabilities)
- CSP View (shield icon) - Monitor Content Security Policy violations and get suggested fixes
JSON-RPC Logging
All communication between the inspector and your MCP server is logged in real-time. This includes:- Tool invocation requests and responses
window.openaiAPI calls from your widget- Widget state updates
- JSON-RPC message types for MCP Apps (
tools/call,ui/initialize,ui/message, etc.)

