Naar de hoofdinhoud

Cryptohopper MCP-rapporten versturen naar Telegram, Discord of e-mail

Leer MCP-rapporten naar Telegram, Discord of e-mail sturen, met setup scripts, kanaalvergelijking & oplossingen.

Geschreven door Isaac

Vereisten

  • Een werkende MCP-workflow die de content produceert die je wilt leveren — zie hoe je een dagelijks top-movers rapport bouwt voor een sjabloon.

  • Een scriptingomgeving voor de leveringsstap. Python of Node.js zijn de gebruikelijke keuzes. Levering is een aparte stap nadat de MCP zijn output heeft geproduceerd — het is geen onderdeel van de MCP zelf.

  • Credentials voor je bestemmingskanaal: een bot-token voor Telegram of Discord, of SMTP / transactionele e-mailcredentials voor e-mail.


Setup — Telegram

  1. Maak een Telegram-bot aan

    Bericht @BotFather, stuur /newbot, en volg de aanwijzingen. Bewaar de bot-token.

  2. Haal je chat-ID op

    Stuur een bericht naar je Telegram-bot, haal dan de onderstaande URL op. De chat.id in de reactie is wat je nodig hebt.

    https://api.telegram.org/bot /getUpdates

  3. Test de levering

    import requests

    TOKEN = "jouw_bot_token"
    CHAT_ID = "jouw_chat_id"

    def send_telegram(text: str) -> None:
    requests.post(
    f"https://api.telegram.org/bot{TOKEN}/sendMessage",
    json={
    "chat_id": CHAT_ID,
    "text": text,
    "parse_mode": "Markdown",
    },
    ).raise_for_status()

    send_telegram("Hallo vanuit je Cryptohopper MCP-workflow")

Telegram ondersteunt Markdown, dus tabellen en vetgedrukte opmaak vanuit de MCP worden native weergegeven. Berichten van meer dan 4.096 tekens moeten worden opgesplitst — deel lange rapporten op bij paragraafgrenzen.


Setup — Discord

  1. Maak een webhook aan

    In je Discord-server, open een kanaal → tandwielicoon → Integraties → Webhooks → Nieuwe Webhook. Kopieer de webhook-URL.

  2. Test de levering

import requests

WEBHOOK = "https://discord.com/api/webhooks/..."

def send_discord(text: str) -> None:
requests.post(WEBHOOK, json={"content": text}).raise_for_status()

send_discord("Hallo vanuit je Cryptohopper MCP-workflow")

Discord's limiet voor content is 2.000 tekens per bericht — splits lange rapporten op. Discord heeft geen native tabelondersteuning; formatteer tabellen als uitgelijnde codeblokken met drie backticks. Gebruik voor rijkere output Discord-embeds (titel, beschrijving, velden) in plaats van ruwe content.


Setup — E-mail

Twee opties: SMTP via Gmail of vergelijkbaar (simpel, gratis, limieten) of een transactionele service zoals SendGrid, Mailgun, of Resend (betrouwbaar, de voorkeur voor geplande taken).

SendGrid voorbeeld

import os
import requests

API_KEY = os.environ["SENDGRID_API_KEY"]
FROM = os.environ.get("ALERT_FROM_EMAIL", "[email protected]")
TO = os.environ.get("ALERT_TO_EMAIL", "[email protected]")

def send_email(subject: str, body: str) -> None:
requests.post(
"https://api.sendgrid.com/v3/mail/send",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"personalizations": [{"to": [{"email": TO}]}],
"from": {"email": FROM},
"subject": subject,
"content": [{"type": "text/markdown", "value": body}],
},
).raise_for_status()

send_email("Dagelijkse top movers", "## Movers van vandaag\n...")


Gebruik Markdown of HTML voor e-mailrapporten — platte tekst wordt snel onleesbaar voor tabelgegevens.


Het juiste kanaal kiezen

Kanaal

Het beste voor

Beperkingen

Telegram

Realtime alerts, op je telefoon, in één oogopslag lezen

4.096 tekens limiet, Markdown-lite

Discord

Gedeeld teamkanaal, rijke opmaak, discussie rond alerts

2.000 tekens limiet, geen echte tabellen

E-mail

Langere samenvattingen, archivering, alles wat je later wilt doorzoeken

Hogere latentie, makkelijk te negeren

Ad-hoc alerts → Telegram. Team-zichtbare output → Discord. Ochtendsamenvattingen → e-mail.


Het canonieke patroon

Houd de MCP-stap en de leveringsstap gescheiden. Een storing in de levering (netwerkdip, verlopen token) mag de MCP-output niet verliezen — je kunt deze nog steeds uit logs herstellen.

# 1. MCP-workflow uitvoeren (produceert tekst-output)
report_text = run_mcp_workflow(prompt)

# 2. Leveren
try:
send_telegram(report_text)
except Exception as e:
log(f"Levering mislukt: {e}")

Probleemoplossing

Telegram getUpdates retourneert een lege lijst

Je hebt nog geen bericht naar de bot gestuurd, of je bevraagt met een andere token. Stuur eerst een willekeurig bericht vanaf je Telegram-account naar de bot, en probeer het dan opnieuw.

Discord webhook retourneert 429

Rate limit bereikt. Discord webhooks staan ongeveer 30 berichten per minuut toe — respecteer de Retry-After header. Voor alerts met hoge frequentie, bundel meerdere gebeurtenissen in één bericht in plaats van één per gebeurtenis te versturen.

E-mails belanden in spam

Gebruik een correct afzenderadres op een domein dat je bezit, met SPF/DKIM/DMARC geconfigureerd. Vermijd onderwerpregels in hoofdletters, triggerwoorden en bijlagen. Een transactionele service regelt dit meestal correct; platte SMTP van een gedeelde provider doet dat vaak niet.

Lange MCP-rapporten worden afgekapt in Telegram of Discord

Bouw een splitter die op paragraafgrenzen opdeelt. Splits niet middenin een tabelrij — snijd na de laatste volledige rij die past, en open het volgende bericht met een (vervolg)-kop.

Levering faalt stilzwijgend bij geplande runs, maar werkt handmatig

De meest voorkomende oorzaak is een ontbrekende omgevingsvariabele of een verlopen token in de geplande omgeving. Cron-runs draaien zonder de env van je shell; GitHub Actions heeft geheimen nodig die zijn geconfigureerd. Log de volledige foutmelding bij elke storing zodat deze onmiddellijk zichtbaar wordt.

Je wilt alleen alerts als er daadwerkelijk iets wordt gemeld

Maak levering voorwaardelijk — stuur geen "niets te melden"-berichten, deze worden ruis en je begint het kanaal te negeren.

Je wilt leveren aan meerdere kanalen tegelijk

Wikkel de levering in een fan-out zodat elk kanaal onafhankelijk is en een storing in één de anderen niet blokkeert: for ch in [send_telegram, send_discord, send_email]: try ch(text).

Was dit een antwoord op uw vraag?