Пока ты читаешь эти строки, OpenAI только что открыл двери. Вчера, буквально вчера, они запустили App Directory для ChatGPT и открыли подачу заявок для ВСЕХ разработчиков. Не для избранных партнёров. Для всех. Для тебя в том числе.

ChatGPT Apps: полное руководство для разработчиков в 2025 году - 1

800 миллионов пользователей. Практически никаких конкурентов. Окно возможностей открыто прямо сейчас. И оно закроется через несколько месяцев, когда туда набегут все остальные.

Это не очередная статья «посмотри, что можно будет сделать когда-нибудь». Это инструкция для тех, кто хочет успеть сейчас, пока рынок пустой.


Помнишь, как в 2008 году открылся App Store, и все думали «ну кому нужны эти приложения на телефоне»? А потом Angry Birds заработал миллиард долларов, Instagram продался Facebook за миллиард, Uber вырос до 80 миллиардов. Первые разработчики, которые вошли тогда, сорвали джекпот просто потому, что были первыми.

Сейчас декабрь 2025 года. И происходит ровно то же самое. Только теперь это называется ChatGPT Apps.

ChatGPT Apps: полное руководство для разработчиков в 2025 году - 2

6 октября OpenAI открыл новую платформу — и знаешь, сколько там пользователей на старте? 800 миллионов. Не 10 миллионов, как у iPhone в 2008-м. Восемьсот миллионов. App Store было в 80 раз меньше на старте. Понимаешь?

А конкурентов там сейчас? На 18 декабря — меньше двадцати приложений. Spotify, Booking.com, Canva, Zillow, AllTrails, пара корпоративных инструментов. Всё. Буквально всё. Рынок полностью пустой. И вчера OpenAI открыл подачу заявок для всех разработчиков — включая тебя.

Я не шучу. Пишешь в ChatGPT: «Spotify, сделай плейлист для пробежки» — и прямо в чате открывается виджет Spotify. С треками, кнопками, всё работает. Без переключения вкладок, без копипасты. Магия.

ChatGPT Apps: полное руководство для разработчиков в 2025 году - 3

Или: «Booking, найди отель в Париже до €100» — бац, и карта с вариантами, фотками, можно сразу забронировать.

ChatGPT Apps: полное руководство для разработчиков в 2025 году - 4

И ты можешь создать такое же приложение.

Сейчас расскажу как.

Почему это не просто очередная «новая фича»

Слушай, я понимаю. У всех уже выработался иммунитет на новости типа «вау, новая технология изменит мир». Каждую неделю что-то новое. Crypto, NFT, метавселенные, AGI уже на следующей неделе. Устал от этого хайпа? Я тоже.

Но тут другое. Давай на цифрах.

App Store в 2008-м:

  • 10 миллионов пользователей iPhone на старте
  • Чтобы разработать приложение, нужен был Mac (минимум $1000) и девайс для тестов
  • Конкуренция началась с нуля, но через полгода там были уже тысячи приложений
  • Нужно было учить Objective-C (да-да, тот самый кошмар с квадратными скобками)

Что вышло из этого? Instagram продали за миллиард, Angry Birds скачали миллиард раз, Uber сейчас стоит $80+ миллиардов.

ChatGPT Apps: полное руководство для разработчиков в 2025 году - 5

Парни, которые вошли первыми, они просто успели. Были там, когда конкуренции не было.

ChatGPT Apps сейчас:

  • 800 миллионов активных пользователей каждую неделю
  • Разработка — обычный ноутбук, любая ОС, бесплатные инструменты
  • Конкурентов меньше двадцати (17 декабря открыли подачу для всех!)
  • Стек технологий — TypeScript или Python, которые ты и так знаешь

Математика простая: аудитория в 80 раз больше, конкурентов в сотни раз меньше, порог входа в разы ниже.

Это не хайп. Это окно возможностей, которое открылось ВЧЕРА (17 декабря) и закроется через 2-3 месяца, когда туда набегут все остальные. Первые одобренные приложения начнут появляться в каталоге уже в январе 2026. Сейчас там почти никого нет.

Что вообще такое эти ChatGPT Apps (без воды)

Хорошо, давай без технического жаргона сначала. На пальцах.

Раньше было так: ты сидишь в ChatGPT, хочешь что-то сделать — например, забронировать отель. ChatGPT тебе советует, потом ты копируешь название отеля, открываешь Booking.com в новой вкладке, ищешь, бронируешь. Куча переключений между окнами. Бесишь.

Теперь так: пишешь в ChatGPT «Booking, найди отель в Мадриде на выходные до €80», и прямо в чате — карта, список вариантов, фотографии, цены, можно кликнуть и забронировать. Всё там же. Никаких вкладок.

Кажется мелочью? Ну вот Apple тоже казалось мелочью — «зачем тачскрин, если есть кнопки?» А потом Nokia умерла.

ChatGPT Apps — это НЕ:

Сразу проясню, чтобы не было путаницы (я сам вначале путался).

Это НЕ Custom GPTs. Custom GPTs — это просто чат-боты с инструкциями. Ты им скажешь «отвечай как пират» — они отвечают как пират. Всё. Никаких виджетов, никакого интерактива.

Это НЕ ChatGPT Plugins. Plugins OpenAI вообще закрыли в апреле 2024. Они были медленные, неудобные, работали плохо. Похоронили их, правильно сделали.

Это НЕ работа с ChatGPT API. API — это когда ты делаешь своё приложение и внутри используешь ChatGPT. Совсем другая история.

А что тогда?

ChatGPT Apps — это полноценные приложения внутри ChatGPT. С интерфейсом, кнопками, карточками, картами, видео — всё что угодно. Ты создаёшь backend (на TypeScript или Python), делаешь UI (обычный HTML/CSS/JS), и ChatGPT рендерит это прямо в чате.

Пример работы (пошагово):

ChatGPT Apps: полное руководство для разработчиков в 2025 году - 6
  1. Пользователь: «Zillow, покажи дома в Нью-Йорке дешевле $500k»
  2. ChatGPT понимает: надо вызвать приложение Zillow
  3. Отправляет запрос на твой сервер (это называется MCP server, но об этом позже)
  4. Твой сервер: ищет дома, формирует ответ + HTML для виджета
  5. ChatGPT получает данные и отображает виджет с картой, фотками, описаниями
  6. Пользователь кликает на дом → видит детали
  7. Говорит: «Убери всё дороже $400k» → список обновляется
  8. Нашёл что надо → нажимает «Open in Zillow» → открывается сайт

Вся магия в том, что это происходит без переключения контекста. Разговор с ChatGPT не прерывается. Ты просто говоришь что хочешь, и всё появляется там же.

А зачем это вообще нужно?

Вопрос справедливый. Вот реальный кейс:

Было: Хочу забронировать столик в ресторане после посещения музея.

  1. Открываешь сайт музея, смотришь время работы
  2. Гуглишь рестораны рядом
  3. Выбираешь, открываешь OpenTable
  4. Бронируешь
  5. Добавляешь напоминание в календарь

Стало: «ChatGPT, забронируй ресторан рядом с Музеем Прадо после его закрытия».

  • ChatGPT узнаёт время закрытия
  • Находит рестораны рядом
  • Предлагает варианты (с картами, меню, отзывами)
  • Бронирует столик
  • Добавляет в календарь

Одна фраза вместо пяти шагов.

Вот для чего это нужно.

Три причины, почему разработчики уже бегут туда

1. Мгновенный доступ к аудитории (это нечестно, но работает)

Обычный путь стартапа:

  • Идея → MVP → запуск
  • Поднять сайт, настроить аналитику
  • SEO (месяцы ожидания)
  • Контекстная реклама (деньги, деньги, деньги)
  • Холодные звонки, письма
  • Через год: 1000 пользователей (если повезёт)

С ChatGPT Apps:

Ты делаешь приложение. Публикуешь в Store. Пользователь пишет «Найди мне рецепт пасты карбонара» — и если у тебя приложение рецептов, ChatGPT сам предлагает твоё приложение.

Не ты ищешь пользователей. ChatGPT приводит их к тебе.

Это как иметь лучшего sales manager в мире, который работает 24/7 бесплатно и знает всех 800 миллионов пользователей лично.

А теперь представь, что конкурентов у тебя — три компании. Не три тысячи. Три. В какой-то нише может вообще никого не быть.

2. Не нужно делать UI с нуля (но гайдлайны изучить стоит)

Знаешь, сколько времени уходит на нормальный UI в приложении? Месяцы. Адаптивность, кроссбраузерность, темы (светлая/тёмная), accessibility. А ещё iOS-версия отдельно, Android отдельно. Работы по уши.

С ChatGPT Apps — ChatGPT рендерит UI за тебя. Ты даёшь HTML-шаблон, он встраивает в интерфейс. Темы? Автоматически. Адаптив? Автоматически. iOS/Android? Работает везде, это же веб.

Но есть нюанс: OpenAI предоставляет чёткие гайдлайны по дизайну. Это не «делай как хочешь». Есть рекомендации по размерам виджетов, цветовым схемам, типографике, отступам. Всё чётко и понятно задокументировано.

Хорошая новость: следовать этим гайдлайнам проще, чем создавать дизайн-систему с нуля. OpenAI уже продумал консистентность, accessibility, UX-паттерны. Ты просто применяешь их стандарты.

Ты фокусируешься на логике, на данных, на том, что делает твоё приложение полезным. А не на том, чтобы кнопка на разных устройствах выглядела одинаково.

3. First-mover advantage (окно открыто ПРЯМО СЕЙЧАС)

Слушай внимательно, потому что это самое важное в статье.

17 декабря 2025 года — вчера — OpenAI запустил App Directory и открыл подачу заявок для всех разработчиков. Не для партнёров, не для корпораций. Для всех. Ты можешь зайти на platform.openai.com прямо сейчас и подать своё приложение на ревью.

Что там прямо сейчас:

  • Spotify, Booking.com, Expedia (путешествия)
  • Canva, Figma (дизайн)
  • Zillow (недвижимость)
  • Coursera (обучение)
  • AllTrails, Coupler, Daloopa, Coveo, Egnyte, Hex (корпоративные инструменты)

Считай их. Меньше двадцати приложений на 800 миллионов пользователей. В App Directory каталог практически пустой. Featured секции пустые. Рекомендательные алгоритмы только настраиваются.

ChatGPT Apps: полное руководство для разработчиков в 2025 году - 7

Первые одобренные приложения начнут появляться в январе 2026. Это означает, что у тебя есть 2-3 недели, чтобы сделать качественное приложение и подать на ревью. И шанс попасть в первую волну.

К лету 2026 там будут:

  • Тысячи разработчиков
  • Сотни стартапов
  • Куча копий
  • Жёсткая конкуренция за Featured spots
  • Рекомендательный алгоритм уже обучен на тысячах приложений

Но не пугайся. Это не значит, что летом будет поздно. ChatGPT Apps — это не хайповая фича, которая исчезнет через год. Это фундаментальная платформа, которая с нами надолго.

Аналогия: App Store появился в 2008, а новые успешные приложения выходят до сих пор. TikTok взорвал рынок в 2018 — через 10 лет после запуска магазина. Clubhouse стоил миллиарды в 2020.

ChatGPT Apps будет расти и развиваться годами. Просто те, кто зайдёт в первой волне — в ближайшие 2-3 месяца — получат максимальные выгоды: меньше конкурентов, больше внимания, первые позиции в рейтингах, репутация пионеров, шанс попасть в Featured.

Ты можешь зайти и через полгода. Но сейчас — это окно возможностей с минимальным риском и максимальной отдачей. Каталог пустой. Подача открыта. Конкуренции почти нет.

Через месяц там будут сотни заявок. Через три месяца — тысячи. А прямо сейчас ты можешь быть одним из первых двадцати.

Как это работает технически (без заумных слов)

Окей, хватит маркетинга. Давай по существу — как это устроено под капотом.

ChatGPT Apps: полное руководство для разработчиков в 2025 году - 8

Простая схема

Пользователь 
    ↓ пишет промпт
ChatGPT UI (то что видишь)
    ↓ понимает, какой инструмент нужен
Apps SDK Runtime (движок)
    ↓ отправляет запрос
Твой MCP Server (твой код)
    ↓ обрабатывает, дёргает API
Твоя база данных / внешние сервисы
    ↓ возвращает данные
Виджет (HTML/CSS/JS в iframe)
    ↓ отображается
Пользователь видит результат

В реальности один запрос выглядит так:

Пользователь: «Spotify, создай плейлист для утренней пробежки»

  1. ChatGPT: Окей, это про музыку, нужен tool create_playlist от Spotify
  2. ChatGPT → Твой сервер: POST запрос с параметрами {theme: "morning_run", duration: 30}
  3. Твой сервер:

- Получил запрос

- Дёрнул Spotify API

- Собрал список треков

- Сформировал ответ + HTML для виджета

  1. Твой сервер → ChatGPT: Вот тебе данные + UI-шаблон
  2. ChatGPT: Рендерит виджет в iframe (защищённая песочница)
  3. Виджет: Получает данные через window.openai API
  4. Пользователь: Видит плейлист, может слушать, редактировать

Весь процесс — пара секунд.

MCP Protocol — что это и зачем

MCP = Model Context Protocol. Это открытый стандарт для подключения AI к внешним инструментам и данным.

История вкратце:

  • Ноябрь 2024 → Anthropic (создатели Claude) анонсировали MCP
  • Март 2025 → OpenAI сказал «да, мы тоже так делаем»
  • Декабрь 2025 → MCP передали в Linux Foundation

Теперь это общий стандарт. Сделал MCP-сервер один раз — работает с ChatGPT, с Claude, с VS Code, с любым AI-клиентом.

Аналогия: помнишь, как раньше у каждого телефона был свой зарядник? Nokia одна, Samsung другая, iPhone третья. Бесило жёстко. Потом придумали USB-C — один порт для всех.

MCP — это USB-C для AI приложений.

Три кита MCP

MCP состоит из трёх примитивов. Звучит страшно, но на самом деле просто:

1. Tools (Инструменты)

Это функции, которые AI может вызвать. Например:

  • search_products — найти товары
  • book_hotel — забронировать отель
  • create_playlist — создать плейлист
  • get_weather — узнать погоду

Ты регистрируешь tool, описываешь параметры (что нужно передать), и ChatGPT автоматически понимает, когда его вызывать.

2. Resources (Ресурсы)

Это источники данных или UI-шаблоны. Например:

  • HTML файл с виджетом
  • JSON с данными пользователя
  • Изображения, видео

Ресурсы контролируешь ты, а не AI. Ты решаешь, что отдать и в каком виде.

3. Prompts (Промпты)

Переиспользуемые шаблоны для частых задач. Если у тебя есть стандартный сценарий, можешь описать его один раз, и пользователи будут использовать быстрее.

Честно? Промпты используют редко. Tools и Resources — вот что важно.

А что с безопасностью?

Виджеты работают в sandboxed iframe — изолированной среде. Они не могут:

  • Читать cookies других сайтов
  • Выполнять произвольный JavaScript в контексте ChatGPT
  • Получить доступ к данным других пользователей

Все запросы идут через HTTPS. Данные в transit шифруются TLS 1.2+. Хранение — AES-256. OpenAI прошли SOC 2 Type 2 audit, соответствуют GDPR/CCPA.

Короче, безопасность на уровне. Не надо изобретать велосипед.

Создаём своё первое приложение (прямо сейчас)

Хватит теории. Давай сделаем реальное приложение. Сейчас. За 20-30 минут.

Что будем делать: Todo List. Да, я знаю, это клише. Но зато просто и понятно. Сделаешь todo — поймёшь принцип — дальше хоть космические корабли моделируй.

Что нам понадобится

  • Node.js (уже стоит, наверное)
  • Любой редактор кода
  • Терминал
  • ngrok (для публичного URL)

Всё бесплатно, всё есть.

Шаг 1: Создаём проект

mkdir my-first-chatgpt-app
cd my-first-chatgpt-app
npm init -y
npm install @modelcontextprotocol/sdk

package.json должен выглядеть так:

{
  "type": "module",
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.20.2"
  }
}

> Примечание: В примере мы используем JSON Schema напрямую для валидации параметров. Если хочешь более мощную валидацию, можешь добавить zod и использовать его внутри обработчика tool.

Шаг 2: Пишем MCP сервер

Создай файл server.js:

import { createServer } from "node:http";
import { readFileSync } from "node:fs";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";

// HTML с виджетом (создадим в следующем шаге)
const widgetHtml = readFileSync("widget.html", "utf8");

// Наше "хранилище" задач (в реальности тут была бы база)
let todos = [];
let nextId = 1;

function createTodoServer() {
  const server = new McpServer({ 
    name: "my-todo-app", 
    version: "1.0.0" 
  });

  // Регистрируем UI виджет как Resource
  server.registerResource(
    "todo-widget",
    "ui://widget/todo.html",
    {},
    async () => ({
      contents: [{
        uri: "ui://widget/todo.html",
        mimeType: "text/html+skybridge",  // Важно! Без этого не заработает
        text: widgetHtml,
        _meta: { 
          "openai/widgetPrefersBorder": true  // Рамка вокруг виджета
        },
      }],
    })
  );

  // Регистрируем Tool для добавления задач
  server.registerTool(
    "add_todo",
    {
      title: "Добавить задачу",
      description: "Добавляет новую задачу в список",
      inputSchema: {
        type: "object",
        properties: {
          title: {
            type: "string",
            description: "Название задачи"
          }
        },
        required: ["title"]
      },
      _meta: {
        "openai/outputTemplate": "ui://widget/todo.html",  // Какой виджет показать
        "openai/toolInvocation/invoking": "Добавляю задачу...",  // Текст пока грузится
        "openai/toolInvocation/invoked": "Задача добавлена ✓",  // Текст когда готово
      },
    },
    async ({ title }) => {
      // Создаём задачу
      const todo = { 
        id: <code>todo-${nextId++}</code>, 
        title, 
        completed: false 
      };
      todos.push(todo);

      // Возвращаем результат
      return {
        // Текст для ChatGPT (что показать в чате)
        content: [{ 
          type: "text", 
          text: <code>✅ Добавил: "${title}"</code> 
        }],
        // Данные для виджета
        structuredContent: { 
          tasks: todos 
        },
      };
    }
  );

  return server;
}

// HTTP сервер с CORS (обязательно!)
const port = 8787;
const httpServer = createServer(async (req, res) => {
  const url = new URL(req.url, <code>http://${req.headers.host}</code>);

  // CORS preflight (ChatGPT делает OPTIONS запрос сначала)
  if (req.method === "OPTIONS" && url.pathname === "/mcp") {
    res.writeHead(204, {
      "Access-Control-Allow-Origin": "*",
      "Access-Control-Allow-Methods": "POST, GET, OPTIONS",
      "Access-Control-Allow-Headers": "content-type, mcp-session-id",
      "Access-Control-Expose-Headers": "Mcp-Session-Id",
    });
    res.end();
    return;
  }

  // Health check (чтобы проверить, что сервер живой)
  if (req.method === "GET" && url.pathname === "/") {
    res.writeHead(200).end("✅ MCP Server работает");
    return;
  }

  // MCP endpoint (сюда ChatGPT будет стучаться)
  if (url.pathname === "/mcp") {
    res.setHeader("Access-Control-Allow-Origin", "*");
    res.setHeader("Access-Control-Expose-Headers", "Mcp-Session-Id");

    const server = createTodoServer();
    const transport = new StreamableHTTPServerTransport({
      sessionIdGenerator: undefined,
      enableJsonResponse: true,
    });

    // Когда соединение закрывается, чистим за собой
    res.on("close", () => {
      transport.close();
      server.close();
    });

    await server.connect(transport);
    await transport.handleRequest(req, res);
    return;
  }

  res.writeHead(404).end("Not Found");
});

httpServer.listen(port, () => {
  console.log(<code>🚀 Сервер запущен: http://localhost:${port}/mcp</code>);
});

Выглядит сложно? На самом деле тут три части:

  1. Регистрация виджета (UI)
  2. Регистрация tool (что может делать)
  3. HTTP сервер (чтобы ChatGPT мог к нам достучаться)

Шаг 3: Делаем виджет

Создай widget.html:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="utf-8" />
  <title>Todo Widget</title>
  <style>
    * { box-sizing: border-box; }
    body { 
      margin: 0; 
      padding: 20px; 
      font-family: -apple-system, BlinkMacSystemFont, sans-serif;
      background: var(--bg, #f8f9fa);
    }
    .task-list { 
      display: flex; 
      flex-direction: column; 
      gap: 10px; 
    }
    .task { 
      padding: 15px; 
      border-radius: 8px; 
      background: white;
      box-shadow: 0 2px 4px rgba(0,0,0,0.1);
      display: flex;
      align-items: center;
      gap: 10px;
    }
    .task:hover { 
      box-shadow: 0 4px 8px rgba(0,0,0,0.15);
    }
    .task.completed { 
      opacity: 0.5; 
      text-decoration: line-through; 
    }
    .empty {
      text-align: center;
      padding: 40px;
      color: #999;
      font-style: italic;
    }
  </style>
</head>
<body>
  <div id="root"></div>
  
  <script type="module">
    // Получаем данные из ChatGPT
    const toolOutput = window.openai?.toolOutput;
    const theme = window.openai?.theme;
    
    // Если тёмная тема, меняем фон
    if (theme === 'dark') {
      document.documentElement.style.setProperty('--bg', '#1a1a1a');
    }
    
    // Рисуем список задач
    function render(tasks) {
      const root = document.getElementById('root');
      
      if (!tasks || tasks.length === 0) {
        root.innerHTML = '<div class="empty">📝 Задач пока нет. Добавь первую!</div>';
        return;
      }
      
      root.innerHTML = `
        <div class="task-list">
          ${tasks.map(task => `
            <div class="task ${task.completed ? 'completed' : ''}">
              <span>${task.title}</span>
            </div>
          `).join('')}
        </div>
      `;
    }
    
    // Первый рендер
    render(toolOutput?.tasks || []);
    
    // Слушаем обновления (когда ChatGPT обновит данные)
    window.addEventListener("openai:set_globals", (event) => {
      const newTasks = event.detail?.globals?.toolOutput?.tasks;
      if (newTasks) render(newTasks);
    });
  </script>
</body>
</html>

Это обычный HTML. Магия в window.openai — через него ChatGPT передаёт нам данные.

Шаг 4: Запускаем локально

Открой два терминала.

Терминал 1 (запуск сервера):

node server.js

Увидишь: 🚀 Сервер запущен: http://localhost:8787/mcp

Терминал 2 (публичный туннель):

ngrok http 8787

ngrok даст тебе публичный URL типа https://abc123.ngrok.app. Копируй его.

Шаг 5: Подключаем к ChatGPT

  1. Открой ChatGPT
  2. Settings → Apps & Connectors → Advanced settings
  3. Включи Developer Mode (нужен Plus или Pro)
  4. Нажми Create Connector
  5. Введи URL: https://твой-ngrok-url.ngrok.app/mcp
  6. Save

Шаг 6: Тестируем!

Открой новый чат и напиши:

Добавь задачу: Купить молоко

Если всё правильно — увидишь виджет с задачей!

Попробуй ещё:

Добавь задачу: Сходить на тренировку
Добавь задачу: Позвонить маме

Видишь список задач прямо в чате? Поздравляю, ты только что создал своё первое ChatGPT приложение! 🎉

Что дальше?

Это самый базовый пример. Дальше можно:

  • Добавить удаление задач
  • Сделать checkbox для отметки как выполненных
  • Подключить реальную базу данных (PostgreSQL, MongoDB)
  • Добавить OAuth авторизацию
  • Задеплоить на Vercel (бесплатно)

Но принцип ты понял. Остальное — детали.

Продвинутые фишки (когда базовое уже скучно)

Okay, todo list сделал. Теперь хочется чего-то посерьёзнее. Вот что ещё можно:

OAuth авторизация

Если твоё приложение работает с личными данными пользователя (типа Spotify плейлисты или Google Drive), нужна авторизация.

ChatGPT поддерживает OAuth 2.1 с PKCE. Звучит страшно, но работает просто:

  1. Пользователь первый раз вызывает твоё приложение
  2. ChatGPT показывает «Подключить аккаунт»
  3. Перебрасывает на твой authorization server
  4. Пользователь разрешает доступ
  5. Твой сервер возвращает токен
  6. ChatGPT сохраняет токен и отправляет с каждым запросом

В коде это выглядит так:

server.registerTool(
  "get_user_playlists",
  {
    title: "Получить плейлисты",
    _meta: {
      "openai/auth": [{ type: "oauth2" }]  // Требуем авторизацию
    }
  },
  async (args, context) => {
    // Проверяем токен
    const token = context.headers?.authorization?.replace('Bearer ', '');
    
    if (!token) {
      return {
        error: "Unauthorized",
        _meta: { 
          "mcp/www_authenticate": { error: "invalid_token" } 
        }
      };
    }
    
    // Получаем данные
    const playlists = await fetchSpotifyPlaylists(token);
    return { content: [{ type: "text", text: JSON.stringify(playlists) }] };
  }
);

Детали настройки auth server — отдельная тема. Если коротко: нужен /authorize endpoint, /token endpoint, и метаданные сервера. Доку почитай, там расписано.

Виджеты в fullscreen

Иногда виджет в чате мелковат. Например, карта. Тут нужен fullscreen.

// В виджете
await window.openai.requestDisplayMode({ mode: "fullscreen" });

Есть три режима:

  • inline — обычный виджет в чате (по умолчанию)
  • fullscreen — на весь экран (для карт, графиков)
  • pip (picture-in-picture) — плавающее окно (для видео, музыки)

Переключаешься через window.openai.requestDisplayMode().

Agentic Commerce Protocol (ACP) — продажи прямо в ChatGPT

Хочешь продавать товары через ChatGPT? OpenAI и Stripe сделали для этого открытый стандарт — ACP.

Как работает:

  1. У тебя есть товары (Product Feed в JSON/CSV/XML)
  2. Пользователь: «ChatGPT, закажи мне кроссовки Nike Air Max, 42 размер»
  3. ChatGPT находит товар в твоём feed'е
  4. Показывает карточку товара (фото, цена, описание)
  5. Пользователь: «Купить»
  6. Instant Checkout — оплата через твой Payment Provider (Stripe/PayPal)
  7. Тебе приходит webhook о покупке
  8. Отправляешь товар

Комиссия: OpenAI берёт небольшой процент с продаж (точные цифры не раскрыты).

Кто уже работает: Instacart (полноценный Instant Checkout), 1M+ Shopify merchants.

Это реально работает. Люди покупают прямо в чате, не переходя на сайт.


Deployment: Выводим в продакшн

Локально всё работает, но пользователям нужен стабильный сервер. ngrok отвалится через час — не вариант.

Вариант 1: Vercel (самый простой)

Vercel официально поддерживает ChatGPT Apps. Бесплатный tier есть, хватит на старте.

npm i -g vercel
vercel login
vercel

Всё. Vercel сам поднимет HTTPS, настроит CDN, даст стабильный URL.

Готовый шаблон от Vercel:

vercel.com/templates/next.js/chatgpt-app-with-next-js

Вариант 2: Railway / Fly.io / Render

Если нужно больше контроля (свой Docker, свои env variables, etc):

Railway:

railway login
railway link
railway up

Fly.io:

fly launch
fly deploy

Все три платформы бесплатны для старта, потом платишь за ресурсы. Дёшево.

Production Checklist

Перед запуском проверь:

HTTPS — обязательно, иначе ChatGPT не подключится

CORS — разреши https://chatgpt.com

Health check/ должен возвращать 200

Rate limiting — чтобы не убили DDoS'ом

Env variables — никаких секретов в коде

Логирование — чтобы понять, что сломалось

Мониторинг — uptime, latency, errors

Минимальный CORS для Express:

app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
  res.header('Access-Control-Allow-Headers', 'content-type, mcp-session-id');
  next();
});

Этого достаточно для начала.

ChatGPT App Directory: Подача заявок открыта ПРЯМО СЕЙЧАС

Самый частый вопрос был: «Когда можно будет публиковать?»

Ответ: Уже можно. 17 декабря 2025 года OpenAI открыл подачу заявок для всех разработчиков.

Статус на 18 декабря 2025:

App Directory запущенhttps://chatgpt.com/apps

Подача заявок открыта — через platform.openai.com

Apps SDK в BETA — любой разработчик может использовать

Первые одобренные приложения — начнут появляться в январе 2026

Кто уже там:

  • Spotify — плейлисты, рекомендации
  • Booking.com, Expedia — путешествия
  • Canva, Figma — дизайн и презентации
  • Zillow — недвижимость в США
  • Coursera — образовательные курсы
  • AllTrails — треки и маршруты
  • Coupler, Daloopa, Coveo, Egnyte, Hex — корпоративные инструменты

Всего меньше 20 приложений. Это ВСЁ. Каталог почти пустой.

Как подать своё приложение (пошагово)

Шаг 1: Подготовь приложение

Перед подачей убедись, что:

  • Приложение протестировано в Developer Mode
  • Сервер работает на HTTPS (обязательно!)
  • Соблюдены App Submission Guidelines
  • Есть Privacy Policy и Terms of Service
  • UI соответствует гайдлайнам OpenAI

Шаг 2: Зайди на OpenAI Developer Platform

Иди на platform.openai.com → раздел "ChatGPT Apps" → "Submit App".

Шаг 3: Заполни форму подачи

Тебе понадобится предоставить:

App Information:

  • Название приложения (уникальное, понятное)
  • Описание (что делает, кому полезно)
  • Категория (productivity, travel, education, entertainment, etc.)
  • Иконка и banner для каталога (PNG, определённые размеры)

MCP Details:

  • URL твоего MCP сервера (должен быть доступен по HTTPS)
  • Список tools, которые предоставляет сервер
  • Настройки authentication (если нужен OAuth)
  • Endpoints для виджетов

Testing Guidelines:

  • Тестовые сценарии для ревьюеров (как проверить, что всё работает)
  • Примеры промптов, которые триггерят твоё приложение
  • Ожидаемое поведение

Screenshots / UI Previews:

  • Скриншоты виджетов в ChatGPT
  • Демонстрация основных фич
  • Показать, как выглядит приложение в light/dark темах

Country Availability:

  • В каких странах будет доступно приложение
  • Ограничения по регионам (если есть)

Privacy Policy:

  • Обязательно для всех приложений
  • Какие данные собираешь, как используешь, как храните
  • Ссылка на полный текст политики

Release Notes:

  • Что нового в этой версии
  • Известные ограничения или баги
  • Планы на будущее (опционально)

Шаг 4: Отправь на ревью

Нажимаешь "Submit". OpenAI начинает проверку:

  • Технический review (работает ли сервер, есть ли баги)
  • Security review (нет ли уязвимостей, правильно ли обрабатываются данные)
  • Policy review (соответствует ли Usage Policies)
  • UX review (удобно ли пользоваться)

Timeline ревью: от нескольких дней до нескольких недель (зависит от сложности).

Шаг 5: Получи ответ

Либо Approved — поздравляю, приложение идёт в каталог!

Либо Changes Requested — нужно исправить замечания и отправить заново.

После одобрения твоё приложение появится в App Directory, и 800 миллионов пользователей смогут его найти.

Требования для одобрения

Чтобы пройти ревью, приложение должно:

✅ Соответствовать Usage Policies OpenAI

✅ Быть appropriate для всех аудиторий (no adult content, violence, hate speech)

✅ Запрашивать только необходимые данные (least privilege principle)

✅ Иметь работающий HTTPS endpoint (HTTP не подойдёт)

✅ Предоставлять чёткую Privacy Policy

✅ Следовать UI Guidelines (design consistency, accessibility)

Не нарушать Terms of Service сторонних сервисов (если интегрируешься с ними)

Автоматический реджект, если:

  • Нет HTTPS
  • Нет Privacy Policy
  • Запрашиваешь данные, которые не нужны для работы (например, location, если не используешь)
  • UI не адаптивен или сломан
  • Приложение падает с ошибками

Что делать после одобрения

Твоё приложение появится в каталоге — пользователи смогут найти его через поиск или Featured секцию.

Как пользователи будут находить тебя:

  1. Поиск в каталоге — ищут по ключевым словам
  2. @mention — пишут в чате @твоё_приложение что-то сделай
  3. Recommendations — ChatGPT сам предлагает твоё приложение, когда видит релевантный запрос
  4. Featured — лучшие приложения попадают в рекомендованные

Deep links:

Ты можешь делиться прямыми ссылками на своё приложение:

https://chatgpt.com/apps/твоё-приложение

Постишь в соцсети, на сайте, в рассылке — люди кликают и сразу попадают в твоё приложение в ChatGPT.

  • Support контакты
  • Сертификация безопасности (если работаешь с деньгами)

Монетизация — реально ли заработать?

Вопрос на миллион (буквально).

Варианты дохода:

СпособКак работаетСтатус
Instant CheckoutOpenAI берёт % с продаж✅ Работает
SubscriptionПользователи платят за приложение🔜 Скоро
FreemiumБазовая версия бесплатно, Pro платно🔜 2026
AdsРекламная модель❓ Непонятно

Instant Checkout уже работает. Instacart продаёт продукты прямо в ChatGPT, OpenAI берёт комиссию (размер не раскрыт, но говорят «reasonable»).

Subscription запустят в Q1-Q2 2026. Как в App Store — пользователи платят за приложение, OpenAI берёт ~30% (предположительно).

Сколько можно заработать?

Никто не знает. Store не открыт, статистики нет. Но можно ориентироваться на App Store:

  • Top 1% приложений: $10K-100K+/месяц
  • Top 10%: $1K-10K/месяц
  • Остальные: $0-1K/месяц

У ChatGPT Apps потенциал выше, потому что:

  1. AI сам рекомендует приложения (discovery бесплатный)
  2. Конверсия выше (всё в чате, без переключений)
  3. Instant Checkout снижает friction

Но пока — неизвестность. Первые будут экспериментировать.


Кому это подходит (честный разговор)

Не всем стоит бросаться в ChatGPT Apps. Давай по-честному.

✅ Тебе сюда, если:

  • Умеешь писать на TypeScript или Python
  • Понимаешь REST API, HTTP, JSON
  • Есть идея приложения для широкой аудитории
  • Готов учиться и экспериментировать
  • Не боишься, что что-то изменится (SDK в preview, всё эволюционирует)
  • Хочешь войти в новую индустрию на старте

❌ НЕ стоит начинать, если:

  • Ты совсем новичок в программировании (сначала базу!)
  • Ожидаешь мгновенной прибыли без работы
  • Нужен стабильный доход прямо сейчас (пока можно только link-out на свой сайт для покупок)
  • Делаешь узкий B2B продукт (ChatGPT для массового рынка)
  • Не готов к тому, что технология будет меняться

Реальные зарплаты AI-разработчиков

Если не создавать своё приложение, а работать в компании:

США (2025):

  • Junior AI Developer: $95K-$130K/год
  • Mid AI Engineer: $161K-$220K/год
  • Senior AI Engineer: $301K-$440K/год
  • AI Research Scientist: $500K-$893K/год

Удалённая работа по регионам:

  • Западная Европа: €60K-€120K/год
  • Восточная Европа: $35K-$80K/год
  • Индия: $15K-$45K/год
  • Китай: $25K-$70K/год
  • Южная Америка: $30K-$65K/год

Freelance (глобально): $35-$116/час (в среднем $65-75)

Источники: levels.fyi, Glassdoor, AngelList (декабрь 2025)

Спрос на AI-разработчиков растёт на 10-20% ежегодно. И будет расти.


В чём реальная сложность создания ChatGPT Apps

ChatGPT Apps: полное руководство для разработчиков в 2025 году - 9

Окей, я тут всю статью рассказываю, как это круто и просто. Но давай честно — не всё так гладко.

Есть реальные сложности, с которыми сталкиваются разработчики:

1. Смена парадигмы мышления

Это самое сложное. Ты привык писать обычные приложения: пользователь кликает кнопку → код выполняется → показывается результат. Всё предсказуемо.

С ChatGPT Apps по-другому:

  • AI решает, когда вызвать твой tool
  • Пользователь говорит natural language, а не кликает UI
  • Твоё приложение — это инструмент в руках AI, а не прямая логика

Нужно научиться думать как AI-инженер, а не как классический веб-разработчик. Это как переход от процедурного программирования к функциональному — техника вроде знакома, но подход другой.

2. MCP Protocol — новый стандарт

MCP только появился, документации мало, best practices ещё формируются. Ты не можешь загуглить «как сделать X в MCP» — Stack Overflow пустой.

Приходится читать официальную документацию (которая местами неполная), изучать примеры от OpenAI, экспериментировать.

3. Debugging сложнее, чем в обычном веб-приложении

В обычном приложении видишь запрос → смотришь логи → понимаешь, что сломалось.

В ChatGPT Apps:

  • AI может неправильно интерпретировать промпт
  • Tool может вызваться не тогда, когда ожидаешь
  • Виджет рендерится в sandboxed iframe — DevTools не всегда помогает
  • Ошибки могут быть на трёх уровнях: AI, MCP transport, твой код

Нужны новые навыки отладки.

4. OAuth и security — ответственность высокая

Если твоё приложение работает с личными данными, нужен OAuth. Но это не просто «поставил библиотеку и работает».

Нужно:

  • Настроить authorization server
  • Реализовать PKCE flow
  • Валидировать токены на каждый запрос
  • Обеспечить безопасное хранение секретов
  • Пройти security review от OpenAI

Один косяк — и утечка данных пользователей. Серьёзно.

5. Production deployment — не просто «загрузил на хостинг»

HTTPS обязателен. CORS нужен. SSE/Streaming HTTP должны работать. Health checks. Rate limiting. Мониторинг. Логирование без утечки sensitive data.

Для junior-разработчика это может быть overwhelming.

6. Конкуренция с крупняком

Когда Store откроется, туда зайдут не только инди-разработчики. Spotify, Booking, Canva — это крупные компании с большими командами.

Как конкурировать с ними? Нужна чёткая стратегия, нишевание, понимание рынка.

7. Быстро меняющаяся экосистема

Apps SDK в preview. Фичи добавляются каждую неделю. То, что работало месяц назад, может сломаться после обновления.

Нужно быть готовым адаптироваться быстро.


Вот почему нужен фундаментальный курс, а не просто «туториал за 30 минут».

Обучение: Курс от JavaRush

ChatGPT Apps: полное руководство для разработчиков в 2025 году - 10

Мы в JavaRush понимаем эти сложности. И именно поэтому мы создаём не просто «основы ChatGPT Apps за полчаса», а полноценный production-grade курс, который готовит к реальной разработке.

Что мы делаем по-другому

1. Меняем парадигму мышления постепенно

Курс начинается с классической веб-разработки, потом плавно переходит к AI-first подходу. Ты не прыгаешь в холодную воду, а идёшь по ступенькам.

2. Глубокое погружение в MCP

Мы не просто «вот так работает MCP». Мы разбираем:

  • Внутреннюю архитектуру протокола
  • Как AI принимает решение о вызове tool
  • Оптимизацию tool descriptions для лучшего discovery
  • Продвинутые паттерны работы с Resources
  • Debugging на всех уровнях стека

3. Real-world проекты, а не hello world

40 практических задач — это не «сделай todo list». Это:

  • E-commerce приложение с Instant Checkout
  • Travel planner с интеграцией карт
  • Content creation tool с AI-генерацией
  • Analytics dashboard с real-time данными
  • И ещё 36 других задач

4. Security first

Отдельный модуль по безопасности:

  • OAuth 2.1 с PKCE (пошагово)
  • Token validation
  • Rate limiting strategies
  • PII protection
  • GDPR/CCPA compliance

5. Production deployment в реальных условиях

Не просто «вот команда для Vercel». А:

  • Сравнение платформ (Vercel, Railway, AWS)
  • CI/CD pipelines
  • Мониторинг и алертинг
  • Error tracking
  • Performance optimization
  • Scaling strategies

6. NestJS как фундамент

Весь курс построен на NestJS — современном TypeScript фреймворке для backend-разработки.

Почему NestJS?

  • Идеален для MCP серверов (модульная архитектура)
  • Production-ready из коробки
  • Поддержка dependency injection
  • Отличная работа с TypeScript
  • Огромное комьюнити

Даже если ты раньше не работал с NestJS — мы всё объясним с нуля. А если работал — узнаешь, как применять его для AI приложений.

7. Смена мышления через практику

Каждый уровень включает:

  • Теоретический блок (10-15 минут)
  • Практическую задачу (30-60 минут)
  • Код-ревью от AI-ментора
  • Разбор типичных ошибок

К концу курса ты думаешь как AI-инженер, а не просто знаешь синтаксис.

Программа курса (кратко)

Модуль 1: Основы (Уровни 1-4)

  • Что такое ChatGPT Apps и зачем они нужны
  • MCP Protocol: архитектура и принципы
  • Настройка окружения (NestJS + MCP SDK)
  • Первое приложение: простой виджет

Модуль 2: MCP и Tools (Уровни 5-8)

  • Регистрация и описание Tools
  • Параметры и валидация (Zod)
  • Structured content и UI шаблоны
  • Tool discovery optimization

Модуль 3: Widgets и UI (Уровни 9-12)

  • HTML/CSS/JS для виджетов
  • window.openai API
  • Display modes: inline, fullscreen, PiP
  • Гайдлайны OpenAI по дизайну
  • Темизация и адаптивность

Модуль 4: OAuth и Security (Уровни 13-15)

  • OAuth 2.1 с PKCE
  • Authorization server setup
  • Token management
  • Security best practices
  • GDPR/CCPA compliance

Модуль 5: Advanced Features (Уровни 16-18)

  • Agentic Commerce Protocol (ACP)
  • Instant Checkout integration
  • Multi-step workflows
  • State management

Модуль 6: Production (Уровни 19-20)

  • Deployment strategies
  • Monitoring и logging
  • Performance optimization
  • Scaling и load balancing
  • ChatGPT Store submission

Почему это работает

Не просто теория. 80% курса — практика. Ты пишешь код каждый день.

Не прос