MCP server для адаптации постов из Telegram в формат X с ограничением в 220 символов
This server has a single tool with critical structural and description deficiencies. The tool name is grammatically awkward ('format_telegram_post' is slightly verbose but acceptable), but the real issues are: (1) the description, while present, is 193 characters and reads like marketing copy rather than LLM-optimized guidance; (2) the input schema is minimal, only a 'text' parameter with a basic string type and description; (3) no output schema is documented anywhere in the code; (4) the tool delegates all logic to Claude API rather than implementing deterministic formatting, making it non-idempotent and unreliable; (5) error handling is minimal and provides no recovery guidance; (6) the implementation exposes API keys as implicit parameters (ANTHROPIC_API_KEY) without secret injection patterns. The codebase shows no tool annotation hints, no pagination, no structured output documentation, and no field-level descriptions for responses. The baseline for a single-tool server requires at minimum documented output schemas, proper error classification, and clear composition guidance, none of which are present.
Converts Telegram channel posts to X (Twitter) format with maximum 220 character limit, maintaining key information and adding emojis for engagement
No output schema documented. The tool returns an object with 'formatted_text' and 'character_count' fields, but this is never formally declared in code or comments. LLMs cannot plan downstream steps without knowing what fields to expect.
Single input parameter lacks type constraints or enum declaration. The 'text' parameter is free-form string with no length limits, format hints, or validation rules documented. Parameter description is 62 characters and generic.
Tool implementation is non-idempotent and unreliable. The logic delegates all formatting to Claude API with a system prompt. Claude's output is non-deterministic, calling the tool twice with identical input may produce different results. Agents cannot safely retry on ambiguous failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 36 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 19 | - | v1 |
Error handling provides no recovery guidance. The catch block returns a generic 'error: <error.message>' string. LLMs cannot determine whether to retry, ask the user, or abandon the attempt. No error categorization (retryable vs. user-fixable vs. fatal).
API key exposure. ANTHROPIC_API_KEY is loaded via dotenv and used implicitly. While not exposed as a tool parameter (good), the server does not follow secret-injection patterns (environment-isolated credential injection with no logging or echoing).
Tool description is marketing-style rather than LLM-optimized. 'Converts Telegram channel posts to X (Twitter) format with maximum 220 character limit, maintaining key information and adding emojis for engagement' (193 chars) lacks actionable guidance on when to call this tool vs. alternatives, what happens to input over 220 chars, or what output format to expect.
Tool delegates core responsibility to LLM. The MCP server should implement deterministic formatting logic (character counting, truncation rules, emoji rules) as code, not as a prompt to Claude. This makes the tool non-deterministic, expensive, and unpredictable.