מאמרים

לתת ל-Claude לשלוח לכם הודעות בטלגרם, ורק לכם

משימה מתוזמנת מסתיימת בלילה. בנייה ארוכה נכשלת כשאתם בחדר אחר. מגיע זמן של תזכורת. הסוכן יודע, ואתם לא, כי אתם לא מסתכלים על המסך.

במאמר הזה אתאר מה נוטה להשתבש כשנותנים לסוכן בוט טלגרם, ואציג את telegram-notify: שרת MCP קטן בקוד פתוח שמאפשר ל-Claude לשלוח לכם הודעות וקבצים בטלגרם, ולא עושה שום דבר אחר.


למה כלי ולא hook

‏Claude Code כבר יודע להריץ פקודה כשסשן מסתיים, דרך hook. זה עובד, ובשביל "תודיע לי כשסיימת" ייתכן שזה כל מה שצריך. אבל hook רץ בתגובה לאירוע, והטקסט הוא מה שהסקריפט כותב.

כלי MCP הוא משהו שהמודל קורא לו, ולכן ההודעה יכולה לספר מה באמת קרה: איזה טסט נכשל, מה הדוח מצא, מה מחכה להחלטה שלכם. הוא גם עובד בכל מקום שבו MCP עובד: ‏Claude Desktop, ‏Claude Code, משימה מתוזמנת, לקוח MCP אחר.


מה משתבש כשבוט טלגרם נמצא בידי סוכן

קראתי את קוד המקור של שמונה שרתי MCP לטלגרם ב-7 וב-8 בנובמבר 2026, ובנוסף את תוסף הערוץ הרשמי של Claude לטלגרם. שלוש בעיות חוזרות שוב ושוב.

המודל יכול לבחור את הנמען

בארבעה מהם, כל כלי שליחה מקבל chat_id. יש צ'אט ברירת מחדל, אבל המודל יכול להעביר צ'אט אחר בכל קריאה: ‏aahl/mcp-notify, ‏mcp-telegram-bridge, ‏kstonekuan/telegram-notification-mcp ו-adeshatole/telegram-notifier-mcp. מודל שקורא הוראה לא נכון, או קורא הוראה ששתלו במייל או בדף אינטרנט, יכול לשלוח הודעה למישהו שהוא לא אתם.

השרת קורא מהבוט

בוט טלגרם מוסר את ההודעות הנכנסות שלו דרך שיטה אחת, getUpdates, ורק לקורא אחד בכל פעם. קורא שני מקבל 409 Conflict. כמה מהשרתים האלה קוראים לה בכל זאת:

  • ‏ParthJadhav/telegram-notify-mcp מחפש את ה-chat id שלכם ב-getUpdates בכל פעם שהוא עולה. טלגרם שומרת עדכונים ממתינים 24 שעות, ולכן יום אחרי שכתבתם לבוט בפעם האחרונה, הוא כבר לא מוצא אתכם.
  • ל-adeshatole/telegram-notifier-mcp ול-mcp-telegram-bridge יש כלי שקורא הודעות נכנסות, ולכן הם שרתים דו-כיווניים ולא שרתי התראות.
  • ‏anthony-potts/claude-telegram-alerts קורא לה בכלי get_chat_id שלו.
  • תוסף הערוץ מושך מהבוט כל הזמן, כי לקבל הודעות זה התפקיד שלו.

כל אחד מאלה מתנגש בכל כלי אחר שמשתמש באותו בוט.

קבצים מכל מקום בדיסק

‏ParthJadhav/telegram-notify-mcp ו-adeshatole/telegram-notifier-mcp שולחים כל נתיב מקומי שהמודל נותן להם. כלי ששולח קבצים הוא כלי שיכול לשלוח את מפתחות ה-SSH שלכם.

יש כאלה שעושים את הבסיס נכון

לשניים מהם יש נמען קבוע, והם אף פעם לא קוראים מהבוט מתוך השרת: ‏zurdi15/telegram-notify ו-telegram-notification-mcp שב-npm. לכל אחד מהם כלי אחד ששולח טקסט, בלי שליחת קבצים.

‏telegram-notify שומר על שתי התכונות האלה, ומוסיף קבצים מתיקייה אחת בלבד, Markdown, פיצול של הודעות ארוכות, שליחה שקטה, טוקן שאף פעם לא מגיע למודל, והתקנה בלחיצה אחת ל-Claude Desktop.


מה telegram-notify עושה

יש לו שני כלים.

  • notify שולח טקסט לצ'אט שלכם. טקסט פשוט כברירת מחדל, או format: "markdown" למודגש, נטוי, קוד, קישורים וכותרות, שמומרים ל-HTML של טלגרם וכל השאר מוברח. הודעה מעל 4096 תווים, המגבלה של טלגרם, מתפצלת לכמה הודעות. silent: true שולח אותה בלי צליל.
  • notify_file שולח קובץ של עד 50MB, עם כיתוב אופציונלי, מתיקייה אחת שאישרתם ומשום מקום אחר.

נמען אחד, קבוע בהגדרות

ה-chat id נקבע כשמגדירים את השרת. אף כלי לא מקבל chat id, ולכן אין למודל מה לשנות. טסט בודק שהשרת מתעלם מ-chat_id שהוכנס לקריאה לכלי.

זה גם מה שמאפשר לוותר בבטחה על בקשת האישור. אפשר להתיר את notify ב-~/.claude/settings.json, והדבר הכי גרוע שמודל מבולבל יכול לעשות הוא לשלוח לכם הודעה.

הוא אף פעם לא מושך מהבוט

‏telegram-notify קורא לשלוש שיטות של Bot API: ‏sendMessage, ‏sendDocument ו-getMe. הוא אף פעם לא קורא ל-getUpdates, השיטה שבה בוט מקבל הודעות. גם את זה בודק טסט.

שני דברים נובעים מזה. אותו בוט יכול להמשיך לשרת כלי אחר שכן מושך ממנו, כמו תוסף ערוץ הטלגרם של Claude Code, בלי שאף אחד מהם ייתקל ב-409 Conflict. ושום דבר לא תלוי בחלון של 24 שעות של טלגרם לעדכונים ממתינים, ולכן שום דבר לא מפסיק לעבוד יום אחרי שכתבתם לבוט בפעם האחרונה.

קבצים מתיקייה אחת בלבד

‏notify_file כבוי עד שמציינים תיקייה ב-TELEGRAM_NOTIFY_FILES_DIR. כל נתיב מתורגם למיקום האמיתי שלו לפני הבדיקה, כך ש-.. וקישורים סימבוליים לא מגיעים אל מחוץ לתיקייה. בלי המשתנה, כל קריאה נדחית.

הטוקן נשאר מחוץ לטווח הראייה

הטוקן של הבוט אף פעם לא נרשם ביומן, והוא נמחק מכל הודעת שגיאה לפני שהיא מגיעה למודל או לטרמינל שלכם. ‏setup כותב אותו ל-~/.telegram-notify/config.json בהרשאות 600, כך שהוא לא צריך לשבת בהגדרות של לקוח ה-MCP.


איך זה נראה בשימוש

אלה בקשות שמקלידים ל-Claude כמו שהייתם אומרים אותן.

"תריץ את כל הטסטים, ותשלח לי הודעה בטלגרם כשזה נגמר, עם הכישלונות אם יש."
אתם יוצאים מהחדר. ההודעה אומרת לכם אם לחזור.

"כל בוקר בשבע, תעבור על הדואר מהלילה ותשלח לי סיכום קצר בטלגרם."
משימה מתוזמנת בלי אף אחד מול המסך, ולידה שרת דואר כמו multi-mail. הסיכום מגיע לטלפון לפני שפתחתם את המחשב.

"כשהייצוא נגמר, תשלח לי את ה-PDF."
אם הקובץ בתיקייה שאישרתם, הוא מגיע לטלגרם כמסמך, עם כיתוב.

"אם הפריסה נכשלת, תגיד לי. אם היא מצליחה, תשלח בשקט."
כישלון משמיע צליל. הצלחה מחכה בשקט בצ'אט עד שתסתכלו.

ההודעות מגיעות מהבוט שלכם, לצ'אט שלכם, מכל לקוח שהריץ את המשימה.


התקנה

צריך Node.js 20 ומעלה. יוצרים בוט עם @BotFather ולוחצים Start בצ'אט איתו, כי בוט יכול לשלוח הודעות רק למי שהתחיל איתו שיחה. את ה-chat id המספרי מקבלים מבוט כמו @userinfobot. גם בוט קיים עובד, אפילו כזה שכלי אחר כבר מושך ממנו.

אחר כך שומרים את הטוקן ואת ה-chat id פעם אחת:

npx -y @yybd/telegram-notify-mcp setup

הפקודה מבקשת את הטוקן בלי להציג אותו, בודקת אותו, כותבת את קובץ ההגדרות ושולחת הודעת בדיקה. מוסיפים --files-dir <folder> כדי לאפשר את notify_file. אחר כך מוסיפים את השרת ל-Claude Code, בלי שום סוד בשורת הפקודה:

claude mcp add telegram-notify -s user -- npx -y @yybd/telegram-notify-mcp

ל-Claude Desktop יש הרחבה בלחיצה אחת: מורידים את קובץ ה-.mcpb מה-release האחרון ב-GitHub ולוחצים עליו פעמיים. ‏Desktop מבקש את הטוקן, ושומר אותו כסוד, את ה-chat id, ואם רוצים, את התיקייה לקבצים.


מה הוא בכוונה לא עושה

  • לקבל הודעות. מה שאתם עונים בטלגרם לא מגיע למודל.
  • לשאול אתכם שאלה ולחכות לתשובה. בשביל זה צריך כלי שקורא מהבוט, וזה בדיוק מה שהכלי הזה נמנע ממנו.
  • לשלוח למישהו אחר. יש נמען אחד, והוא לא פרמטר של כלי.

מי שרוצה שיחה דו-כיוונית עם Claude בטלגרם, שישתמש בתוסף ערוץ או בגשר. ‏telegram-notify הוא לכיוון השני, והוא יכול לחלוק איתם את אותו בוט.


‏telegram-notify הוא קוד פתוח (MIT), ומפורסם ב-npm בשם @yybd/telegram-notify-mcp: github.com/yybd/telegram-notify-mcp. ב-README יש טבלת השוואה משלו, עם התאריך שבו נבדקה.