TimelinesAI MCP Server
TimelinesAI MCP Server
MCP-сервер (Model Context Protocol), который открывает публичный API TimelinesAI — входящие WhatsApp-сообщения для команд — для Claude. Предназначен для развёртывания в Railway в режиме только для чтения.
👉 Шаги по развёртыванию — в DEPLOY-RAILWAY.md.
Что делает
Даёт Claude 12 инструментов для чтения инбокса и работы с ним: чаты, сообщения, метки, ответственные, подключённые номера и команда — плюс универсальный инструмент, инструмент обнаружения и агрегированная сводка по инбоксу.
Инструмент | Endpoint |
| проверяет токен, workspace и заслоны |
| любой endpoint, любой метод |
| зондирует пути и сообщает, какие существуют |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| листает |
Related MCP server: TimelinesAI WhatsApp
Переменные окружения
Переменная | Requerida | По умолчанию | Описание |
| да | — | Токен API ( |
| на Railway |
|
|
| если | — | Секрет, защищающий endpoint. Минимум 32 символа |
| нет | см. ниже |
|
| нет |
| Отдельный заслон: отправка WhatsApp-сообщений |
| нет |
| Чтобы указать другой хост |
| нет |
| Обрезание ответов |
| нет |
| Timeout в секундах |
| нет |
| Railway подставляет его сам |
Три заслона
Этот MCP общается с реальными людьми. Отправленное сообщение в WhatsApp доходит до телефона собеседника за секунды и не подлежит отмене. Поэтому здесь три независимых замка.
1. TIMELINES_READ_ONLY — значение по умолчанию зависит от транспорта
stdio(локально): записывающие операции разрешены по умолчанию.http(удалённо): записывающие операции заблокированы по умолчанию.
Забыть эту переменную в публичном развёртывании — значит оставить его в режиме только для чтения.
2. TIMELINES_ALLOW_SEND — заслон отправки
Выключен по умолчанию на обоих транспортах, даже локально. Даже если вы разрешите запись, отправка сообщений останется заблокированной, пока не установите TIMELINES_ALLOW_SEND=1.
Причина — асимметрия: изменить метку переназначить чат или закрыть его — это внутренние и обратимые действия. Отправить WhatsApp клиенту — уже необратимое. Здесь и должен быть отдельный переключатель.
3. confirm=true — заслон на каждую операцию
Каждая отправка требует confirm=true и всего остального, точно так же, как удаление файла, перенастройка вебхука или отзыв доступа у коллеги. Инструкция инструмента как раз такая: сначала показать пользователю точного получателя и точный текст и только после его подтверждения — отправлять.
Каждый отказ сообщает, какой именно из трёх заслонов его остановил.
Аутентификация эндпоинта
Протокол MCP не включает собственную аутентификацию. В режиме http этот сервер требует в каждом запросе Authorization: Bearer <MCP_AUTH_TOKEN>, или секрета, встроенного в маршрут (/s/<секр>/mcp), для коннекторов Claude. /healthz — единственный публичный маршрут.
Сервер отказывается запускаться, если MCP_AUTH_TOKEN отсутствует или содержит меньше 32 символов.
Локальный запуск
pip install -r requirements.txt
# stdio (para Claude Desktop)
TIMELINES_API_TOKEN=tla_xxx python timelines_mcp.py
# http (como en Railway)
TIMELINES_MCP_TRANSPORT=http \
TIMELINES_API_TOKEN=tla_xxx \
MCP_AUTH_TOKEN=$(python3 -c "import secrets;print(secrets.token_urlsafe(48))") \
PORT=8000 python timelines_mcp.pyПри запуске печатает, в каком режиме он оказался:
[timelines-mcp] streamable-http on 0.0.0.0:8000 token=set read_only=True allow_send=False sending_enabled=FalseЗаметки об API TimelinesAI
Проверялось на публичной документации (https://timelines.ai/docs/public-api-reference/overview):
Базовый URL:
https://app.timelines.ai/integrations/api, авторизацияAuthorization: Bearer <tla_...>.Тело запросов — JSON, не form-encoded.
Ответы приходят в обёртке:
{"status":"ok","data":{...}}. Существуют сбои, которые приходят с HTTP 200 иstatus:"error"— этот сервер выкручивает их как ошибку, а не как успех, иначе неудавшаяся отправка выглядела бы как отправленная.Сообщения об ошибках содержат детализацию по полям:
{"status":"error","message":..., "error_code":...,"errors":[{"fields":["phone"],"msg":"..."}]}. Они показываются как есть в тексте ошибки.Фильтры с несколькими значениями передаются через запятую в одном параметре (
label=vip,enterprise), не повторными параметрами и не в скобках. Список из этой функции в Python как раз подходит.Размер страницы фиксированный — 50 записей, и его нельзя изменить. Проверено на живом API 2026-08-25:
limit,per_page,page_size,size,count,takeиrowsигнорируются, а каждая страница содержит 50 записей. Единственный параметр, который работает —page, иhas_another_pagesв ответе говорит, есть ли ещё страница. Поэтому инструменты не предоставляютper_page: это был бы параметр который из-за видимости меняет размер, а на деле ничего не меняет.Чтобы уменьшить размер ответа, не получится взять маленькую страницу — вместо этого нужно сильнее фильтровать или использовать
fields, чтобы оставить только нужные ключи. Сообщения — самый показательный случай: чат на 50 сообщений без труда выйдет за лимит символов.fields=["uid","text","from_me","timestamp"]оставляет психологическую суть переписки в доли от полного ответа.Внимание на повторение имён полей: в записи сообщения есть свой ключ
data, который является словарём метаданных, в дополнение кdataиз общей обёртки. Поэтомуfieldsрешает, что убрать, по позиции (внутри списка — одна запись), а не по имени ключа.Телефоны — в международном формате с
+:+5215512345678. Модель проверяет их перед отправкой в сеть и удаляет лишние пробелы и дефисы.Текст ограничен 2000 символами; метки — 64; названия чатов — 256.
Если не указать
whatsapp_account_number, TimelinesAI отправит с наиболее давно использованного номера — и это не часто тот, который пользователь имел в виду. Если подключено несколько номеров — лучше задавать имя явно.Между отправками ставится пауза ~2 секунды в соответствии с правилами WhatsApp, а каждая отправка расходует кредиты (1 текст без вложений, 2 с вложением; неотправленные возвращаются).
Вот три разных лимита, их не нужно путать:
Лимит
Значение
Распространяется на
Частота запросов
50 запросов в минуту на workspace
все, даже на чтение
Месячный объём
200,000 вызовов в месяц
все
Квота сообщений
по тарифу (кредиты)
только отправка и отправка
Первый — самый ощутимый: при превышении возвращается 429
too many requestsв середине обработки, а не в начале.Сервер защищается на двух уровнях, оба они в прикладном слое, поэтому все инструменты защищены, и не только те, которые ходят по страницам:
Общий ритм. Запросы следуют с интервалом 1,2 с (± 1,2 с); одиночный запрос не ожидает ни одной секунды, задержка возникает только при попытке приложений. А лимит общий на workspace, и все инструменты работают с одним workspace, поэтому и ограничитель первый.
Повтор с
Retry-After. Если на чтение пришёл 429, выполняется ещё одна попытка с точным интервалом, которое указал сервер. Отправка никогда не повторяется автоматически: сообщение, которое, возможно, уже было отправлено, не отправляется повторно по догадке.
timelines_activity_summaryпри этом возвращает только то, что успел посчитать, и добавляетstopped_earlyв том случае, если его прервали. Для вопросов о конкретном человеке удобнее задать фильтр (responsible=someone@...), а не перебирать страницы: один запрос вместо двух десятков. Можно попросить увеличить лимиты, написав на hello@timelines.ai.Агрегирующего endpoint нет. Поэтому
timelines_summary_summaryлистает страницы и считает суммарную статистику на стороне MCP-сервера, а чтобы конец вычисления был показан, используетcomplete=false, если счётчик был прерван.
Безопасность
Секреты хранятся в переменных окружения, никогда в коде.
.gitignoreисключает файлы.env.Токен TimelinesAI даёт доступ ко всему workspace: всем разговорам WhatsApp команды с их телефонами и их содержимым. Это данные одача реальных клиентов — относись к ним соответственно.
Единственный общий токен означает, что нет никакой прослеживаемости до действий конкретного человека.
Чтобы отозвать доступ в один момент: отзовем токен в панели TimelinesAI — сервер сразу окажется бесполезным.
This server cannot be deployed
Maintenance
Related MCP Connectors
Your own WhatsApp in Claude and ChatGPT: read chats, draft replies, send messages you approve.
1WhatsApp CRM for AI agents: search contacts, read chats, manage the sales pipeline, send messages.
Ask questions across your WhatsApp inbox from Claude, ChatGPT, Cursor or any MCP client.
Atendio is a WhatsApp AI assistant for businesses in Latin America, on the official WhatsApp Business Platform. This MCP server lets Claude (or any MCP client) list and read WhatsApp conversations, view analytics and assistant settings, and create, edit or delete the rules your AI assistant follows. Remote, OAuth 2.1; the business always reviews and publishes rule changes.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Claude to interact with WhatsApp Business for reading, searching, and sending end-to-end encrypted messages. It supports conversation management, message summarization, and action item tracking while maintaining data privacy through a local private key and a user-controlled Neon database.20 npmMIT
- AlicenseNot gradedqualityDmaintenanceConnect your TimelinesAI WhatsApp inbox to Claude. List chats, read history, send messages, react, label, assign teammates — all as you, in production.4MIT
- AlicenseBqualityCmaintenanceEnables Claude to manage WhatsApp templates, flows, and send messages through the WhatsApp Cloud API.3111 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables Claude to interact with WhatsApp: read chats, search messages, send messages with a mandatory confirmation step, and transcribe voice notes locally, all with encrypted storage and prompt-injection scrubbing.3MIT