Notion Workers: TypeScript-sandbox для агентов и прямой ответ на MCP
Notion Workers: TypeScript-sandbox для агентов и прямой ответ на MCP
13 мая Notion наконец-то вышел из категории «красивый блокнот для команд» и стал платформой. Релиз называется Developer Platform, и главный его кусок — это Workers: хостинговый рантайм, в который ты кладёшь TypeScript-код, а Notion сам его запускает по крону, по вебхуку или по вызову от агента.
TL;DR: Workers — это маленькие TypeScript-программы, которые крутятся на инфре Notion. Деплой через
ntn workers deploy, запуск через cron, webhook или Custom Agent. После 11 августа платишь $0.0023 за run. Notion прямо позиционирует их как детерминированную альтернативу MCP — где LLM не дёргается каждый раз, чтобы решить, что делать.
Что вообще выкатили 13 мая:
- Workers (public beta) — TypeScript-программы в песочнице Notion. На Business и Enterprise.
- External Agents (alpha) — в Notion теперь можно позвать Claude Code, Cursor, Codex, Decagon и работать с ними как с членами команды. Через waitlist.
- External Agent API (private beta) — то же самое, но для агентов, которых ты сам собрал. Тоже waitlist.
- CLI
ntn— терминальный клиент. На всех планах, включая Free. - Agent SDK (alpha) — таскать Notion-агентов в свои приложения. Тоже waitlist.
Если коротко: релиз выглядит большим, но открытое — только Workers и CLI. Всё остальное в листе ожидания.

Что такое Worker по сути
Worker — это один TypeScript-файл. Ты импортируешь класс Worker, экспортируешь дефолт, навешиваешь на него capabilities. И всё.
// src/index.ts
import { Worker } from "@notionhq/workers";
const worker = new Worker();
export default worker;
worker.tool("sayHello", { /* ... */ });
worker.sync("customersSync", { /* ... */ });
worker.webhook("onGithubPush", { /* ... */ });
Деплой:
$ ntn workers new # скаффолдит проект $ ntn workers deploy # билдит, заливает, запускает
Внутри песочница Node.js. Доступ к fetch, к секретам (через CLI), к OAuth-флоу. Никаких нативных бинарей, никакого доступа к файловой системе хоста — обычный сервлес-рантайм, только привязанный к Notion.
Всего у Worker пять типов capabilities, но в публичную бету пустили не все:
worker.tool()— функция, которую Custom Agent дёргает по запросу. ✅ Доступно.worker.sync()— крон, который тянет данные из внешнего API в Notion-базу. ✅ Доступно.worker.oauth()— обработчик OAuth-callback для коннекта со сторонними сервисами. ✅ Доступно.worker.automation()— триггер от Notion-автоматизации (добавили страницу, поменяли свойство, нажали кнопку). 🚧 Private alpha.worker.webhook()— приём HTTP POST по URL Worker'а. 🚧 Private alpha.
На лендинге notion.com/product/dev всё это рекламируется как launch-features, но на практике webhook ловить ты сейчас не сможешь — только если попадёшь в alpha по waitlist. Лучше держать в голове, читая маркетинг.
Workers vs MCP: главное противопоставление
Зачем вообще новый рантайм, если у Notion уже есть MCP-интеграция? Ответ прямо из блога Notion:
«MCP хорош для broad connectivity, но иногда нужен predictable execution и custom logic, которые LLM-mediated tool calls не дают».
В переводе: MCP — это когда модель решает, какой tool вызвать и с какими аргументами. Это гибко, но дорого по токенам и недетерминированно — каждый вызов идёт через LLM-рассуждение. Workers — наоборот. Ты пишешь код, агент дёргает функцию по имени, код выполняется ровно как ты написал. Без токенов на reasoning, с предсказуемым результатом.
Симон Ласт, head of AI в Notion, выразился так: «Перенос работы с GPU (языковых моделей) на CPU (песочниц) увеличивает качество для пользователей. Никакого tokenmaxing'а — и результаты надёжнее».
На практике это значит вот что. Если у тебя есть чёткий вход и выход (достать клиента из CRM по email, создать тикет в Jira, отправить SMS через Twilio), это Worker. Если задача расплывчатая и требует рассуждения, это MCP-tool, который потом дёргает Worker.
Sync — это cron с базой данных в нагрузку
Синки — самая зрелая часть платформы. По сути это cron-задача, которая льёт данные из внешнего API в Notion-базу и держит схему в коде:
worker.sync("zendeskTickets", {
schedule: "5m", // от "1m" до "7d", или "continuous" / "manual"
mode: "incremental", // или "replace" — полный пересбор
database: {
properties: {
ticketId: { type: "title" },
status: { type: "select" },
priority: { type: "select" },
},
},
async run(ctx) {
const tickets = await fetchZendesk(ctx.secrets.ZENDESK_TOKEN);
for (const t of tickets) {
yield {
ticketId: t.id,
status: t.status,
priority: t.priority,
};
}
},
});
Два режима:
replace— каждый цикл возвращает весь датасет. Что не пришло — удаляется из Notion. Подходит для маленьких таблиц до 1000 строк.incremental— отдаёт только то, что изменилось с прошлого запуска. Для удалений нужно явно слать tombstones. Подходит для больших датасетов и API с change tracking.
Дефолтный интервал — 30 минут. Минимум — 1 минута, максимум — 7 дней. Есть continuous (back-to-back) и manual (только по CLI). Pacer внутри SDK rate-лимитит исходящие запросы, чтобы ты не упёрся в квоты внешних API.
Цена: считаем перед августом
До 11 августа 2026 Workers бесплатны. После — $0.0023 за один run. Один run = один запуск sync, один tool call, один webhook event. Из $10 кредитов выходит примерно 4348 runs. Custom Agent calls идут отдельно по своим тарифам.
Что это значит на практике для разных сценариев:
- Sync каждые 30 минут — 1440 runs/мес ≈ $3.30 за один синк. Жить можно.
- Sync каждую минуту — 43 200 runs/мес ≈ $99 за один синк. Уже больно.
- Tool, который дёргает агент 100 раз в день — 3000 runs/мес ≈ $7. Терпимо.
- Webhook от GitHub на каждый push в активном репо — легко 5000+ events/мес = $11+. Прибавляй за каждый сервис.
Для сравнения: Cloudflare Workers платный план — $5/мес flat за первые 10 миллионов запросов. Notion-цена при равной нагрузке проигрывает раз в 20-30. Но Cloudflare не даст тебе integration с Custom Agents и managed-базой — за это, собственно, и платишь.
Внешние агенты: красивая идея, ограниченный доступ
Вторая большая фича релиза — External Agents. Идея простая: подключаешь Claude Code, Cursor, Codex или Decagon, и они появляются в Notion как Custom Agent. Можно @mention'нуть в странице, дать таску в комментарии, отслеживать прогресс. Под капотом — три эндпоинта:
POST /sessions/{id}
POST /sessions/{id}/messages
GET /sessions/{id}/events
Но: External Agents — alpha, External Agent API — private beta, оба через waitlist. То есть прямо сейчас ни одна команда вне закрытого круга это не запустит. Notion и тут позиционирует функцию как launch, но «launch» в их терминологии означает анонс, а не доступность.
Подводные камни
Workers недоступны на Free и Plus. Только Business ($20/seat/month) и Enterprise. CLI ntn работает на всех планах, но без Workers это просто терминальный клиент к API — то же самое, что было через REST. Если ты соло-разработчик на Plus, забудь.
После 11 августа 2026 кран закрывают. Бесплатная бета закончится, и каждый run будет стоить $0.0023. Минутные синки уйдут в $99/мес за каждый. Бесплатная бета — отличный способ построить продакшен-зависимость и через три месяца получить счёт. Cloudflare Workers за $5/мес flat в этой математике выглядят честнее.
TypeScript only. Никакого Python, Go или Rust. Если твоя интеграция написана на Python и таскает pandas, переписывай. Это серьёзный фильтр для дата-команд, которые могли бы быть основной аудиторией для синков.
automation() и webhook() — в private alpha. На лендинге Workers их рекламируют как launch-фичи. На деле — waitlist. Если строишь архитектуру вокруг webhook-триггера от GitHub или Stripe, проверь доступность раньше, чем напишешь дизайн-док.
Lock-in на @notionhq/workers. Код привязан к классу Worker и его API. Перенести Worker на свой сервер или на Cloudflare без переписывания не получится. Это не Docker-контейнер, это специфический SDK. Если решишь уйти, переписывать всё.
Унаследованный rate limit Notion API: 3 req/sec, 30 search/min. Worker крутится на Notion-инфре, но при обращениях к Notion API в него упрётся. Если синкаешь 50 000 строк в replace режиме каждые 5 минут, будь готов к 429-кам и Retry-After. SDK включает Pacer для исходящих запросов наружу, но внутренние лимиты Notion никуда не делись.
История безопасности Notion. В апреле 2026 нашли четырёхлетнюю дыру в Public API, которая палила email-ы всех редакторов каждой публичной страницы. Notion отреагировал тихо. Это не дисквалифицирует Workers, но если планируешь синкать PII через них, добавь это в threat model.
Альтернативы
-
MCP (Model Context Protocol) — портабельный стандарт, работает с десятками AI-инструментов. Хорош для широкой connectivity и поиска. Плох, когда нужна детерминированность и токены жалко: каждый tool call идёт через LLM-рассуждение. Notion прямо строит Workers как «то, что MCP не закрывает».
-
Cloudflare Workers + Notion API напрямую — портабельно, $5/мес flat за 10M запросов, никакого вендор-лока. Но интеграцию с Custom Agents надо строить руками, managed database из коробки нет, и Notion API rate limit всё равно прилетит. Лучший выбор, если ты не на Business/Enterprise или планируешь уходить от Notion.
-
Vercel Edge Functions / AWS Lambda — те же serverless-TypeScript-функции, портабельность ещё лучше. Цены выше у Vercel, ниже у Lambda. Но Custom Agent integration ты собираешь сам.
-
Zapier / Make / n8n — no-code-автоматизация. Шире коннекторы, проще для не-разработчиков, дороже на масштабе. Используй, если задача — раз в неделю переложить строки из Sheets в Notion-базу, а не построить агентскую инфру.
Вердикт
Если ты уже на Business или Enterprise и строишь Custom Agents с custom-логикой, ставь ntn сегодня и трогай Workers, пока бесплатно. Sync external data и tool() — две зрелые ветки, на них реально можно опереться. К августу будешь понимать свой ценник и сможешь решить, оставаться или съезжать на Cloudflare.
Если ты на Free/Plus или нужна портабельность, пиши Cloudflare Worker + клиент к Notion API. Заняло чуть дольше, зато $5/мес и никакого «август закрывает кран». MCP-интеграция Notion при этом никуда не делась, ты её всё равно можешь использовать.
Если рассчитывал на webhook'и или automation(), проверь, есть ли тебе доступ к private alpha, и не начинай дизайн архитектуры с этих примитивов до подтверждения. Маркетинг Notion и реальность доступа сейчас расходятся.
Как попробовать
-
Поставить CLI —
npm install -g @notionhq/ntn(или установка из developers.notion.com/cli/get-started/overview). -
Аутентифицироваться —
ntn auth login. Откроет браузер, выдаст токен, сохранит локально. -
Создать первый Worker —
ntn workers new my-first-worker. Скаффолдит TypeScript-проект сsrc/index.tsи примерами. Шаблон уже содержит/syncskill для Claude Code/Cursor — попроси своего coding-агента дописать sync с GitHub-issues, он справится без открытия документации. -
Деплой —
ntn workers deploy. После апдейта в дашборде Notion появится управление синками и тулзами Worker'а. -
Подключить к Custom Agent — в настройках агента выбрать tool из деплоенного Worker'а. Дальше агент сам зовёт функцию, когда надо.
Полные доки — developers.notion.com/workers/get-started/overview. Keynote с разбором на YouTube — youtube.com/live/rpE2rzKO6L0. Cookbook с примерами синков и инструментов — github.com/makenotion/notion-cookbook.