GPT Apps Are Here - Here's How to Build One in Production
Technology8 min readFebruary 19, 2026

GPT Apps Are Here - Here's How to Build One in Production

OpenAI just opened the ChatGPT App Directory. If you're building with MCP, you're closer than you think. Here's everything you need to ship a GPT App that actually scales.

LeanMCP Team
LeanMCP Team

GPT Apps Are Here - Here's How to Build One in Production

OpenAI just opened the ChatGPT App Directory to public submissions.

800+ million users. Interactive UIs embedded directly in chat conversations. A builder revenue program in progress.

If you've been building AI agents with MCP, you're closer to shipping a GPT App than you think. This post covers how GPT Apps work, how they compare to MCP Apps, and - critically - what it takes to actually run one in production.


What Are GPT Apps?

GPT Apps are interactive applications that run inside ChatGPT - not in a new tab, not alongside it. When a user asks ChatGPT to find a hotel, Booking.com's booking interface appears right there in the conversation. When a user wants to edit a slide, Canva opens inline.

Launched in October 2025 with pilot partners including Booking.com, Canva, Figma, Spotify, and Shopify. The ChatGPT App Directory opened for public submissions in December 2025.

The SDK is built on top of the Model Context Protocol. If you know MCP, you already have a head start.


How GPT Apps Work (The Technical Bit)

The architecture will feel familiar if you've worked with MCP Apps:

1. UI resources are pre-declared Widget HTML is registered upfront in your MCP server manifest - OpenAI reviews assets before publication and uses this for caching.

2. Double iframe sandboxing ChatGPT runs a sandboxed outer iframe first, which then loads your UI in an inner iframe. Third-party code is isolated from the ChatGPT application.

3. window.openai API OpenAI provides a clean host API for host-guest communication:

window.openai.toolInput          // tool's input parameters
window.openai.toolOutput         // tool's response
window.openai.sendFollowUpMessage({ prompt })  // message the model
window.openai.callTool(name, args)             // trigger a tool call
window.openai.widgetState        // persist state across tool calls
window.openai.widgetSessionId    // persist state across sessions

State persistence is a notable GPT Apps advantage - MCP Apps doesn't support this yet.


GPT Apps vs MCP Apps - You Don't Have to Choose

Both are built on MCP. Both solve the same "text wall" problem. The differences:

GPT AppsMCP AppsWith LeanMCP
PlatformChatGPT onlyClaude, ChatGPT, VS Code, GooseBoth, one server
StandardProprietary (OpenAI)Open (SEP-1865)Supports both
AuthNot includedNot included✅ Built in
ObservabilityNot includedNot included✅ Built in
State persistence✅ SupportedNot yetHandled at runtime
Auto-scalingYour problemYour problem✅ Auto-scaled
DeployManualManual✅ One CLI command

The same LeanMCP server that powers your GPT App can serve MCP Apps clients - Claude, VS Code, Goose - without additional work. One codebase, full ecosystem coverage.


Building a GPT App with LeanMCP

Here's how fast you can go from zero to a production-ready GPT App:

Step 1: Create your project

npm install -g @leanmcp/cli
npx @leanmcp/cli create my-gpt-app
cd my-gpt-app

Step 2: Define your tool with a UI resource

// mcp/hotels/index.ts
import { Tool, SchemaConstraint } from "@leanmcp/core";

class HotelSearchInput {
  @SchemaConstraint({ description: "City to search hotels in" })
  city!: string;
}

export class HotelService {
  @Tool({ description: "Search hotels with interactive UI" })
  async searchHotels(args: HotelSearchInput) {
    const hotels = await fetchHotels(args.city);

    // Return a UI resource - renders as interactive iframe in ChatGPT
    return {
      type: "ui-resource",
      html: renderHotelWidget(hotels)
    };
  }
}

Step 3: Add auth (one decorator)

import { AuthProvider, Authenticated } from "@leanmcp/auth";

const auth = new AuthProvider('cognito', {
  region: process.env.AWS_REGION,
  userPoolId: process.env.COGNITO_USER_POOL_ID,
  clientId: process.env.COGNITO_CLIENT_ID
});
await auth.init();

@Authenticated(auth)
export class HotelService {
  // Token validated automatically - no middleware needed
}

Step 4: Deploy

leanmcp deploy
# ✓ Building MCP server...
# ✓ Running type checks...
# ✓ Deploying to edge network...
# 🚀 Live at https://your-app.leanmcp.com

Auth, scaling, observability: included.


The Production Gap Nobody Talks About

The ChatGPT Apps SDK is genuinely approachable. Basic React + a working MCP server is enough to get started.

But "easy to build" and "production-ready" are different problems.

The SDK gives you the UI layer. It does not give you:

  • Multi-tenant auth - how do you authenticate each user separately?
  • Per-user cost tracking - who's consuming your API budget?
  • Secrets management - how do you inject API keys safely per-request?
  • Audit trails - what did each user's agent do, and when?
  • Auto-scaling - what happens at 10,000 concurrent users?
  • Observability - when something breaks at 2am, how do you know?

This is where most teams hit friction. LeanMCP closes that gap - it's the production runtime layer underneath your GPT App.

One line for full observability:

await createHTTPServer({
  name: "my-gpt-app",
  version: "1.0.0",
  port: 8080,
  logging: true   // dashboards: tool calls, latency, cost, user requests
});

What You Need to Submit to the App Directory

OpenAI's review checklist:

  • ✅ MCP connectivity details
  • ✅ Testing guidelines for reviewers
  • ✅ Directory metadata (name, description, category)
  • ✅ Country availability settings
  • ✅ Privacy policy (mandatory)
  • ✅ Compliance with OpenAI's usage policies

Both automated and human review are applied. Early movers get priority placement - the Directory is open now.


Real-World Use Cases from Launch

The pilot partners show the range of what's possible:

  • Booking.com - filter, compare, and book hotels without leaving ChatGPT
  • Canva - slide editing inline, no tab-switching
  • Figma - design review in conversation context
  • Spotify - music discovery as conversational UI
  • Shopify - interactive product catalogs and cart flows

Every one of these companies needed the same production layer underneath: auth, observability, scaling, secrets management.


TL;DR

  • 🚀 GPT Apps = interactive UIs inside ChatGPT, built on MCP, 800M+ users
  • 🔧 If you know MCP, you can start building today
  • ⚡ The same LeanMCP server works for both GPT Apps and MCP Apps
  • 🔒 The production gap (auth, observability, scaling) is real - LeanMCP closes it
# Get started now
npm install -g @leanmcp/cli
npx @leanmcp/cli create my-gpt-app

Links:

GPT AppsOpenAIMCPProductionAI AgentsChatGPT
LeanMCP Logo

Start building with LeanMCP today