TimelinesAI MCP Server
TimelinesAI MCP Server
MCP-сервер (Model Context Protocol), который открывает публичный API TimelinesAI — входящие WhatsApp-сообщения для команд — для Claude. Предназначен для развёртывания в Railway в режиме только для чтения.
👉 Шаги по развёртыванию — в DEPLOY-RAILWAY.md.
Что делает
Даёт Claude 12 инструментов для чтения инбокса и работы с ним: чаты, сообщения, метки, ответственные, подключённые номера и команда — плюс универсальный инструмент, инструмент обнаружения и агрегированная сводка по инбоксу.
Инструмент | Endpoint |
| проверяет токен, workspace и заслоны |
| любой endpoint, любой метод |
| зондирует пути и сообщает, какие существуют |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| листает |
Переменные окружения
Переменная | 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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Drive your real WhatsApp inbox from Claude — send, reply, label, assign, and triage via TimelinesAI.
233 tools for Google, Microsoft, TikTok, LinkedIn Ads in Claude or ChatGPT. Writes need approval.
Connect your team's living knowledge base — docs, data, issues, CRM — to Claude and ChatGPT.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/DanFrModa/Timelines-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server