Communications MCP server with email, Telegram, and Signal tools for Claude Code
Server has 4 tools with basic descriptions and parameter schemas, but significant gaps limit production readiness. Tool names follow verb_noun convention (email_tool, telegram_tool, signal_tool, get_communication_status), which is good. However, descriptions lack depth on WHEN to use each tool and what distinguishes them. Parameters have types and basic descriptions, but lack constraints (enums, ranges, format specs). Output schemas are not documented, callers cannot predict response structure. Error handling is minimal; no guidance on recovery or retry logic. The email_tool description mentions a hardcoded default recipient ([email protected]), which is a security/privacy concern. Overall, definitions are functional but below production baseline (median 45-55 for community servers; this scores at lower end of that range).
Send an email notification using Resend API. Uses [email protected] as sender for all emails (perfect for notifications).
Get status of all communication services.
Send a Signal message and optionally wait for reply. This unified tool sends a message and can wait for a reply with 1-second polling if expected_reply=True. Works exactly like telegram_tool but for Signal.
Send a Telegram message and optionally wait for reply. This unified tool sends a message to the configured chat (TELEGRAM_CHAT_ID) and can wait for a reply with 1-second polling if expected_reply=True.
Output schemas not documented. Callers cannot predict response structure for any tool. email_tool returns a string; telegram_tool and signal_tool return Dict; get_communication_status returns Dict with nested structure. LLMs need explicit schema to plan downstream calls.
Hardcoded default recipient in email_tool ([email protected]) is a privacy/security risk. Exposes a real email address in tool definition. Should use a placeholder or require explicit recipient.
No parameter constraints (enums, ranges, patterns). timeout parameters accept any float; no min/max bounds. message parameters accept any string; no length limits. LLMs can pass absurd values (timeout=999999, message='') that break downstream services.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | <=2025-11-25 | v2 |
Error handling is minimal. No guidance on recovery, retry logic, or error classification. If email fails, caller gets 'Email failed: {error}' with no hint on whether to retry, ask user, or give up.
get_communication_status has empty input schema ({}). Description is vague ('Get status of all communication services'), does not explain what fields are returned or when to call it. No guidance on interpreting status values.