MCP Widget Patterns

This skill should be used when the user asks to "design a widget", "what widget pattern should I use", "inline card design", "carousel widget", "fullscreen mode", "picture in picture", "widget layout", "card design for ChatGPT", or needs guidance on specific widget patterns and implementations for OpenAI Apps SDK.

16 stars

Best use case

MCP Widget Patterns is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

This skill should be used when the user asks to "design a widget", "what widget pattern should I use", "inline card design", "carousel widget", "fullscreen mode", "picture in picture", "widget layout", "card design for ChatGPT", or needs guidance on specific widget patterns and implementations for OpenAI Apps SDK.

Teams using MCP Widget Patterns should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/mcp-widget-patterns/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/design/mcp-widget-patterns/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/mcp-widget-patterns/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How MCP Widget Patterns Compares

Feature / AgentMCP Widget PatternsStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

This skill should be used when the user asks to "design a widget", "what widget pattern should I use", "inline card design", "carousel widget", "fullscreen mode", "picture in picture", "widget layout", "card design for ChatGPT", or needs guidance on specific widget patterns and implementations for OpenAI Apps SDK.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# MCP Widget Patterns for OpenAI Apps SDK

## Overview

Widgets are visual components that render inline with ChatGPT conversations. This skill catalogs proven widget patterns with implementation guidance for the OpenAI Apps SDK.

## Display Modes

The Apps SDK supports four display modes, each suited to different use cases:

| Mode | Use When | Example |
|------|----------|---------|
| **Inline** | Quick confirmations, simple data | Order confirmation card |
| **Inline Carousel** | Comparing similar items | Product search results |
| **Fullscreen** | Complex workflows, rich interaction | Document editor, maps |
| **Picture-in-Picture** | Persistent parallel activity | Video call, game |

## Inline Card Patterns

### Simple Confirmation Card

**Use for:** Action confirmations, status updates, receipts

```html
<div class="card">
    <div class="card-header">
        <span class="icon">✓</span>
        <span class="title">Booking Confirmed</span>
    </div>
    <div class="card-body">
        <div class="detail-row">
            <span class="label">Restaurant</span>
            <span class="value">Chez Pierre</span>
        </div>
        <div class="detail-row">
            <span class="label">Date</span>
            <span class="value">Tonight, 7:00 PM</span>
        </div>
        <div class="detail-row">
            <span class="label">Party Size</span>
            <span class="value">2 guests</span>
        </div>
    </div>
    <div class="card-actions">
        <button class="btn-secondary">Modify</button>
        <button class="btn-primary">Add to Calendar</button>
    </div>
</div>
```

**Design rules:**
- Maximum 2 primary actions at bottom
- 3-5 detail rows maximum
- No deep navigation within card

### Status Timeline Card

**Use for:** Order tracking, process status, delivery updates

```html
<div class="timeline-card">
    <div class="timeline-header">Order #12345</div>
    <div class="timeline">
        <div class="step completed">
            <div class="marker">✓</div>
            <div class="content">
                <div class="step-title">Confirmed</div>
                <div class="step-time">2:30 PM</div>
            </div>
        </div>
        <div class="step current">
            <div class="marker">●</div>
            <div class="content">
                <div class="step-title">Preparing</div>
                <div class="step-time">Estimated 15 min</div>
            </div>
        </div>
        <div class="step pending">
            <div class="marker">○</div>
            <div class="content">
                <div class="step-title">Out for Delivery</div>
            </div>
        </div>
    </div>
</div>
```

### Data Card with Badge

**Use for:** Account info, subscription status, quick stats

```html
<div class="data-card">
    <div class="card-header">
        <span class="title">Account Balance</span>
        <span class="badge badge-success">Active</span>
    </div>
    <div class="card-value">$1,234.56</div>
    <div class="card-subtitle">Available balance</div>
    <div class="card-actions">
        <button class="btn-primary">Transfer</button>
    </div>
</div>
```

## Carousel Patterns

### Product Carousel

**Use for:** Search results, recommendations, similar items

```html
<div class="carousel">
    <div class="carousel-item">
        <img src="product1.jpg" alt="Product" class="item-image">
        <div class="item-content">
            <div class="item-title">Wireless Headphones</div>
            <div class="item-price">$149.99</div>
            <div class="item-rating">★★★★☆ (234)</div>
        </div>
        <button class="btn-primary">View Details</button>
    </div>
    <!-- Repeat for 3-8 items -->
</div>
```

**Design rules:**
- 3-8 items maximum
- Consistent visual hierarchy across cards
- Up to 3 lines of metadata per card
- Single primary action per card

### Media Carousel

**Use for:** Image galleries, video thumbnails, portfolio items

```html
<div class="media-carousel">
    <div class="media-item">
        <div class="media-thumbnail">
            <img src="photo1.jpg" alt="Gallery image">
            <div class="media-overlay">
                <span class="duration">2:30</span>
            </div>
        </div>
        <div class="media-title">Beach Sunset</div>
    </div>
</div>
```

### List Carousel (Ranked)

**Use for:** Top results, favorites, prioritized lists

```html
<div class="ranked-carousel">
    <div class="ranked-item">
        <div class="rank">1</div>
        <div class="item-content">
            <div class="item-title">Best Match Restaurant</div>
            <div class="item-meta">Italian • $$ • 0.3 mi</div>
            <div class="item-rating">4.8 ★</div>
        </div>
        <button class="btn-icon favorite">♡</button>
    </div>
</div>
```

## Fullscreen Patterns

### Editor Canvas

**Use for:** Document editing, code editing, design tools

```javascript
// Request fullscreen mode
await window.openai.requestDisplayMode('fullscreen');

// Widget structure
<div class="fullscreen-editor">
    <header class="editor-toolbar">
        <div class="toolbar-left">
            <button>Bold</button>
            <button>Italic</button>
        </div>
        <div class="toolbar-right">
            <button class="btn-secondary">Cancel</button>
            <button class="btn-primary">Save</button>
        </div>
    </header>
    <main class="editor-canvas">
        <!-- Editable content -->
    </main>
</div>
```

### Map View

**Use for:** Location selection, route display, area exploration

```html
<div class="fullscreen-map">
    <div class="map-container" id="map"></div>
    <div class="map-controls">
        <button class="btn-icon">🔍+</button>
        <button class="btn-icon">🔍-</button>
        <button class="btn-icon">📍</button>
    </div>
    <div class="map-info-panel">
        <div class="location-name">Selected Location</div>
        <div class="location-address">123 Main St</div>
        <button class="btn-primary">Confirm Location</button>
    </div>
</div>
```

### Multi-Step Wizard

**Use for:** Complex forms, onboarding, guided processes

```html
<div class="fullscreen-wizard">
    <header class="wizard-progress">
        <div class="step completed">1</div>
        <div class="step current">2</div>
        <div class="step">3</div>
    </header>
    <main class="wizard-content">
        <!-- Current step content -->
    </main>
    <footer class="wizard-actions">
        <button class="btn-secondary">Back</button>
        <button class="btn-primary">Continue</button>
    </footer>
</div>
```

## Picture-in-Picture Patterns

### Video Player

**Use for:** Video calls, tutorials, live streams

```javascript
// Request PiP mode
await window.openai.requestDisplayMode('pip');

<div class="pip-video">
    <video id="player" autoplay></video>
    <div class="pip-controls">
        <button class="btn-icon">⏸</button>
        <button class="btn-icon">🔊</button>
        <button class="btn-icon close">✕</button>
    </div>
</div>
```

### Live Session

**Use for:** Games, collaborative editing, real-time monitoring

```html
<div class="pip-session">
    <div class="session-status">
        <span class="live-indicator">●</span>
        <span>Live Session</span>
    </div>
    <div class="session-content">
        <!-- Live content -->
    </div>
    <button class="pip-close">End Session</button>
</div>
```

## Styling Guidelines

### Color System

Use ChatGPT's semantic colors:

```css
:root {
    /* Text */
    --text-default: #000000;
    --text-secondary: #666666;
    --text-subtle: #999999;

    /* Surfaces */
    --surface-primary: #ffffff;
    --surface-secondary: #f5f5f5;
    --surface-elevated: #ffffff;

    /* Actions */
    --action-primary: #0066cc;
    --action-secondary: #e0e0e0;

    /* Status */
    --status-success: #22c55e;
    --status-warning: #f59e0b;
    --status-error: #ef4444;

    /* Borders */
    --border-default: #e0e0e0;
    --border-subtle: #f0f0f0;
}

/* Dark mode */
.dark {
    --text-default: #ffffff;
    --text-secondary: #a0a0a0;
    --surface-primary: #1a1a1a;
    --surface-secondary: #2d2d2d;
    --border-default: #404040;
}
```

### Typography

Inherit system fonts:

```css
body {
    font-family: system-ui, -apple-system, BlinkMacSystemFont,
                 'Segoe UI', Roboto, sans-serif;
    font-size: 14px;
    line-height: 1.5;
}

.heading-lg { font-size: 18px; font-weight: 600; }
.heading-md { font-size: 16px; font-weight: 600; }
.body { font-size: 14px; }
.body-small { font-size: 12px; }
.caption { font-size: 11px; color: var(--text-secondary); }
```

### Spacing

Consistent spacing scale:

```css
--space-xs: 4px;
--space-sm: 8px;
--space-md: 12px;
--space-lg: 16px;
--space-xl: 24px;
--space-2xl: 32px;
```

### Border Radius

Match ChatGPT's rounded corners:

```css
--radius-sm: 4px;
--radius-md: 8px;
--radius-lg: 12px;
--radius-full: 9999px;
```

## Pattern Selection Guide

| User Need | Pattern | Display Mode |
|-----------|---------|--------------|
| Confirm an action | Confirmation Card | Inline |
| Compare 3-8 options | Carousel | Inline |
| Track progress | Timeline Card | Inline |
| View account status | Data Card | Inline |
| Edit a document | Editor Canvas | Fullscreen |
| Select a location | Map View | Fullscreen |
| Complete complex form | Wizard | Fullscreen |
| Watch video content | Video Player | PiP |
| Join live session | Live Session | PiP |

## Additional Resources

### Reference Files

For detailed implementation:
- **`references/css-variables.md`** - Complete CSS variable reference
- **`references/responsive-patterns.md`** - Mobile/desktop adaptations

### Example Files

Working examples in `examples/`:
- **`examples/inline-card.html`** - Basic inline card template
- **`examples/carousel.html`** - Product carousel template
- **`examples/fullscreen-editor.html`** - Fullscreen editor template

### Official Resources

- UI Kit: https://github.com/openai/apps-sdk-ui
- UI Guidelines: https://developers.openai.com/apps-sdk/concepts/ui-guidelines/
- Examples: https://github.com/openai/openai-apps-sdk-examples

Related Skills

microservices-patterns

16
from diegosouzapw/awesome-omni-skill

Design microservices architectures with service boundaries, event-driven communication, and resilience patterns. Use when building distributed systems, decomposing monoliths, or implementing micros...

hig-patterns

16
from diegosouzapw/awesome-omni-skill

Apple Human Interface Guidelines interaction and UX patterns.

design-patterns

16
from diegosouzapw/awesome-omni-skill

BK-CI 项目设计模式实践指南,涵盖工厂模式、策略模式、观察者模式、装饰器模式、模板方法等在项目中的实际应用。当用户学习设计模式、重构代码、设计可扩展架构或理解项目设计时使用。

architecture-patterns

16
from diegosouzapw/awesome-omni-skill

Padrões de arquitetura de software - Decisões OBJETIVAS sobre design de sistemas

ai-interaction-patterns

16
from diegosouzapw/awesome-omni-skill

AI-specific interaction design patterns covering wayfinding, prompt UX, human-in-the-loop controls, trust & transparency, AI identity, and context management. Based on Shape of AI (shapeof.ai). Use when asking about 'AI UX', 'AI interaction', 'prompt UX', 'AI trust', 'AI disclosure', 'AI avatar', 'AI personality', 'AI memory UX', 'action plan UX', 'stream of thought', 'AI citations', 'AI controls', 'AI wayfinding', 'AI suggestions', 'gallery pattern', 'follow-up pattern', 'draft mode', 'AI variations', 'AI consent', 'AI caveat', 'human-in-the-loop', 'AI transparency', 'AI state', 'prompt design', 'AI onboarding', or 'generative UI'.

refactoring-patterns

16
from diegosouzapw/awesome-omni-skill

Safe refactoring workflow and common patterns. Invoke when extracting methods, renaming, moving code, or addressing code smells.

multi-agent-patterns

16
from diegosouzapw/awesome-omni-skill

Supervisor, swarm, and hierarchical multi-agent architectures with context isolation patterns.

memory-safety-patterns

16
from diegosouzapw/awesome-omni-skill

Implement memory-safe programming with RAII, ownership, smart pointers, and resource management across Rust, C++, and C. Use when writing safe systems code, managing resources, or preventing memory...

llm-app-patterns

16
from diegosouzapw/awesome-omni-skill

Production-ready patterns for building LLM applications. Covers RAG pipelines, agent architectures, prompt IDEs, and LLMOps monitoring. Use when designing AI applications, implementing RAG, building agents, or setting up LLM observability.

dbt-transformation-patterns

16
from diegosouzapw/awesome-omni-skill

Master dbt (data build tool) for analytics engineering with model organization, testing, documentation, and incremental strategies. Use when building data transformations, creating data models, or ...

data-fetching-patterns

16
from diegosouzapw/awesome-omni-skill

Explains data fetching strategies including fetch on render, fetch then render, render as you fetch, and server-side data fetching. Use when implementing data loading, optimizing loading performance, or choosing between client and server data fetching.

airflow-dag-patterns

16
from diegosouzapw/awesome-omni-skill

Build production Apache Airflow DAGs with best practices for operators, sensors, testing, and deployment. Use when creating data pipelines, orchestrating workflows, or scheduling batch jobs.