TimelinesAI MCP Server
TimelinesAI MCP Server
MCP-Server (Model Context Protocol), der die öffentliche API von TimelinesAI – den WhatsApp-Posteingang für Teams – für Claude bereitstellt. Entwickelt für die Bereitstellung auf Railway im Nur-Lese-Modus.
👉 Die Bereitstellungsschritte finden Sie in DEPLOY-RAILWAY.md.
Was es tut
Gibt Claude 12 Werkzeuge zum Lesen und Bedienen des Posteingangs: Chats, Nachrichten, Labels, Verantwortliche, verbundene Nummern und Team – plus ein generisches Werkzeug, ein Entdeckungswerkzeug und eine aggregierte Zusammenfassung des Posteingangs.
Werkzeug | Endpunkt |
| verifiziert Token, Workspace und Sperren |
| beliebiger Endpunkt, beliebige Methode |
| testet Routen und meldet, welche existieren |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| paginiert |
Umgebungsvariablen
Variable | Erforderlich | Standard | Beschreibung |
| ja | — | API-Token ( |
| bei Railway |
|
|
| wenn | — | Geheimnis, das den Endpunkt schützt. Mindestens 32 Zeichen |
| nein | siehe unten |
|
| nein |
| Separate Sperre: WhatsApp-Nachrichten senden |
| nein |
| Um auf einen anderen Host zu zeigen |
| nein |
| Kürzung von Antworten |
| nein |
| Timeout in Sekunden |
| nein |
| Railway injiziert es automatisch |
Die drei Sperren
Dieser MCP spricht mit echten Menschen. Eine über WhatsApp gesendete Nachricht erreicht in Sekunden das Telefon einer Person und kann nicht rückgängig gemacht werden. Deshalb gibt es drei unabhängige Sperren.
1. TIMELINES_READ_ONLY – der Standard hängt vom Transport ab
stdio(lokal): Schreibvorgänge erlaubt standardmäßig.http(remote): Schreibvorgänge blockiert standardmäßig.
Wenn die Variable bei einer öffentlichen Bereitstellung vergessen wird, bleibt sie im Nur-Lese-Modus.
2. TIMELINES_ALLOW_SEND – die Sendesperre
Standardmäßig in beiden Transporten deaktiviert, auch lokal. Selbst wenn Sie Schreibvorgänge aktivieren, bleibt das Senden von Nachrichten blockiert, bis Sie TIMELINES_ALLOW_SEND=1 setzen.
Der Grund ist die Asymmetrie: Ein Label ändern, einen Chat neu zuweisen oder schließen sind interne und reversible Aktionen. Ein WhatsApp an einen Kunden zu senden ist das nicht. Es macht keinen Sinn, dass sie denselben Schalter teilen.
3. confirm=true – die Sperre pro Aufruf
Jedes Senden erfordert zusätzlich zu dem oben Genannten confirm=true, ebenso wie das Löschen einer Datei, das Neukonfigurieren eines Webhooks oder das Entziehen des Zugriffs eines Kollegen. Die Anweisung des Tools ist explizit: Zeigen Sie dem Benutzer zuerst den genauen Empfänger und den genauen Text, und nur mit seiner Zustimmung wird bestätigt.
Jede Ablehnung sagt, welche der drei Sperren sie gestoppt hat.
Authentifizierung des Endpunkts
Das MCP-Protokoll bringt keine eigene Authentifizierung mit. Im http-Modus verlangt dieser Server bei jeder Anfrage Authorization: Bearer <MCP_AUTH_TOKEN> oder das in den Pfad eingebettete Geheimnis (/s/<secreto>/mcp) für die Claude-Connectors. /healthz ist der einzige öffentliche Pfad.
Der Server weigert sich zu starten, wenn MCP_AUTH_TOKEN fehlt oder weniger als 32 Zeichen hat.
Lokal ausführen
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.pyBeim Start gibt er aus, in welchem Modus er sich befindet:
[timelines-mcp] streamable-http on 0.0.0.0:8000 token=set read_only=True allow_send=False sending_enabled=FalseHinweise zur TimelinesAI-API
Verifiziert gegen die öffentliche Referenz (https://timelines.ai/docs/public-api-reference/overview):
Basis:
https://app.timelines.ai/integrations/api, AuthAuthorization: Bearer <tla_...>.Die Bodies sind JSON, nicht form-encoded.
Die Antworten sind verpackt:
{"status":"ok","data":{...}}. Und es gibt Fehler, die mit HTTP 200, aberstatus:"error"ankommen – dieser Server behandelt sie als Fehler, nicht als Erfolg, denn sonst würde ein fehlgeschlagener Versand als gesendet gelesen.Die Fehler enthalten Details pro Feld:
{"status":"error","message":..., "error_code":...,"errors":[{"fields":["phone"],"msg":"..."}]}. Sie werden im Fehlertext unverändert angezeigt.Mehrwertige Filter werden durch Kommas getrennt in einem einzigen Parameter (
label=vip,enterprise), nicht wiederholt und nicht mit eckigen Klammern. Eine Python-Liste zu übergeben erzeugt diese Form.Die Seitengröße ist fest auf 50 und kann nicht geändert werden. Verifiziert gegen die Live-API am 2026-08-25:
limit,per_page,page_size,size,count,takeundrowswerden alle ignoriert, und jede Seite kommt mit 50 Datensätzen. Der einzige Parameter, der etwas bewirkt, istpage, undhas_more_pagesin der Antwort sagt, ob es eine weitere gibt. Deshalb exponieren die Tools keinper_page: Es wäre ein Parameter, der vorgibt zu justieren und nichts justiert.Um die Größe einer Antwort zu reduzieren, bleibt also nicht, die Seite zu verkleinern: Man muss mehr filtern oder
fieldsverwenden, um nur die benötigten Schlüssel zu behalten. Nachrichten sind der Fall, der es am meisten verlangt – ein Chat mit 50 Nachrichten überschreitet das Zeichenlimit problemlos.fields=["uid","text","from_me","timestamp"]lässt das Wesentliche einer Konversation in einem Bruchteil der Größe.Achtung bei wiederholten Feldnamen: Ein Nachrichtendatensatz bringt seinen eigenen Schlüssel
data(ein Metadaten-Dict) mit, zusätzlich zumdatader Hülle. Deshalb entscheidetfields, was nach Position beschnitten wird (was in einer Liste steht, ist ein Datensatz) und nicht nach dem Namen des Schlüssels.Telefonnummern sind im internationalen Format mit
+:+5215512345678. Das Modell validiert sie, bevor es ins Netz geht, und entfernt Leerzeichen und Bindestriche.texthat ein Limit von 2000 Zeichen; Labels 64, Chatnamen 256.Wenn du
whatsapp_account_phoneweglässt, sendet TimelinesAI vom zuletzt verbundenen Konto – das selten das ist, das der Benutzer im Kopf hat. Bei mehr als einer verbundenen Nummer ist es ratsam, explizit zu sein.Die Sendungen werden ~2 Sekunden voneinander entfernt gesendet, gemäß der WhatsApp-Richtlinie, und jede Nachricht verbraucht Credits (1 Text, 2 mit Anhang; fehlgeschlagene werden erstattet).
Es gibt drei verschiedene Limits, die man nicht verwechseln sollte:
Limit
Wert
Gilt für
Anfrage-Rate
50 pro Minute pro Workspace
Alles, einschließlich Lesevorgänge
Monatliches Volumen
200,000 Aufrufe pro Monat
Alles
Nachrichten-Kontingent
je nach Plan (Credits)
Nur Sendungen
Das erste ist das, was zubeißt: Überschreiten gibt 429
rate_limit_exceededmitten in der Arbeit, nicht am Anfang.Der Server verteidigt sich auf zwei Ebenen, beide auf der Anfrageebene, damit alle Tools abgedeckt sind, nicht nur die, die paginieren:
Gemeinsames Tempo. Die Aufrufe werden im Abstand von 1,2 s zueinander gesendet (60÷50). Ein einzelner Aufruf wartet nichts; die Verzögerung erscheint nur bei Bursts, was genau der Fall ist, der das Limit trifft. Das Limit gilt pro Workspace und alle Tools teilen sich eines, also ist der Taktgeber auch einzigartig.
Wiederholung mit
Retry-After. Ein 429 bei einem Lesevorgang wird einmal wiederholt, wobei genau das gewartet wird, was der Server verlangt. Ein Senden wird nie automatisch wiederholt: Eine Nachricht, die vielleicht gesendet wurde, wird nicht aus Bauchgefühl wiederholt.
timelines_activity_summarygibt außerdem zurück, was es zählen konnte, mit einem Hinweisstopped_early, wenn es trotzdem abgeschnitten wird. Für Fragen nach Personen ist es besser zu filtern (responsible=alguien@...) statt Seiten zu scannen: eine Anfrage statt zwanzig. Höhere Limits können per E-Mail an hello@timelines.ai angefordert werden.Es gibt keinen Aggregations-Endpunkt. Deshalb paginiert
timelines_activity_summaryund zählt auf der MCP-Serverseite und meldet mitcomplete=false, wenn die Zählung nicht bis zum Ende kam.
Sicherheit
Geheimnisse kommen in Umgebungsvariablen, nie in den Code. Die
.gitignoreblockiert.env-Dateien.Ein TimelinesAI-Token gewährt Zugriff auf den gesamten Workspace: alle WhatsApp-Konversationen des Teams, mit ihren Telefonnummern und Inhalten. Es sind echte Kundendaten – behandeln Sie sie entsprechend.
Ein einzelnes geteiltes Token bedeutet null Rückverfolgbarkeit pro Person.
Um den Zugriff sofort zu unterbrechen: Widerrufen Sie das Token im TimelinesAI-Dashboard – der Server wird sofort unbrauchbar.
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