MCP server for exporting X (Twitter) articles as PDFs with optional translation support
Server has 4 well-named tools with clear verb-noun patterns (export_article, get_article_info, list_exports, check_translation). Descriptions are present and reasonably detailed (100-200 chars), meeting baseline expectations. Input schemas are visible with type definitions and parameter descriptions. However, output schemas are not formally documented, responses are text-based summaries rather than structured JSON objects. Error handling returns text messages but lacks actionable recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles. Parameter descriptions could be more precise about constraints and formats.
Check if the Ollama translation service is available and the configured model is ready.
Export an X (Twitter) article as a PDF. Fetches the article, optionally translates it, renders to PDF, and saves to disk. Returns the file path and article metadata.
Fetch metadata about an X article without rendering a PDF. Returns title, author, date, block count, image count, and word count.
List PDF files in the configured output directory.
Output schemas not formally documented. Tools return text summaries (e.g., 'PDF exported successfully...') rather than structured JSON. LLMs cannot reliably extract fields for downstream tool chaining or data extraction.
Missing tool annotations. export_article is destructive (WRITE risk) and should declare destructiveHint=true. get_article_info, list_exports, and check_translation are read-only and should declare readOnlyHint=true. Agents cannot distinguish safe from unsafe operations.
Error messages lack recovery guidance. Errors like 'Invalid article URL: ...' or 'Failed to fetch article: ...' tell the LLM what went wrong but not what to do next. Should suggest alternatives or next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Parameter 'translate' in export_article lacks enum constraint. Description says 'e.g. de, fr, ja' but does not formally restrict valid language codes. LLMs may pass invalid codes like 'english' or 'spanish'.
list_exports 'limit' parameter is numeric but lacks min/max bounds. Description does not specify valid range. LLMs could pass 0, negative, or extremely large values.