A comprehensive MCP server for Medium article scraping with GraphQL-first architecture, ElevenLabs Creator API for premium audio, parallel processing and HTML output
Medium MCP Server has 8 tools with clear naming (verb-noun structure) and present descriptions, but suffers from significant gaps in parameter documentation, output schema specification, and error handling guidance. Only partial source code is visible (server.py snippet is truncated at line ~150), limiting ability to verify complete schema definitions and error paths. Tool names follow good conventions (medium_scrape, medium_search, medium_batch), but parameter descriptions lack specificity about constraints, formats, and dependencies. No explicit error handling strategy is documented. Output schemas are not formally specified in visible code.
Scrape multiple Medium articles in parallel.
Generate audio podcast from a Medium article using ElevenLabs TTS.
Export article to PDF or other formats.
Get trending or fresh articles by tag.
List available TTS voices for audio generation.
Scrape a Medium article with full v3.0 capabilities.
Search Medium articles by query string.
Parameter descriptions lack specificity on constraints, formats, and valid ranges. E.g., 'max_concurrency' is described as '1-10, default: 5' but no enforcement mechanism or failure mode is documented. 'voice' parameter in medium_cast accepts voice ID or name but no guidance on how to obtain valid values (though medium_list_voices suggests a discovery pattern).
Output schemas are not formally documented in visible code. The source snippet ends mid-resource definition (~line 150). Cannot verify whether tools document return types, field structures, or pagination behavior.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Generate AI-powered research report or synthesis from article content using Gemini or OpenAI.
No error handling or recovery guidance visible. Tools like medium_cast and medium_synthesize depend on external APIs (ElevenLabs, Gemini, OpenAI) but no fallback, retry, or timeout strategy is documented. The helper function handle_paywall() exists but is not connected to tool responses in visible code.
Parameter relationships are undocumented. E.g., medium_cast accepts both 'voice' (name/ID) and 'model' (elevenlabs/openai/edge), unclear how model selection affects voice validity. No guidance on which combinations are valid or what happens if incompatible parameters are passed.
Truncation and paywall handling strategies are application-level helpers (truncate_for_model, handle_paywall) but not integrated into tool contracts. Tools don't explicitly document that content may be truncated, that paywalled articles return partial data, or how to detect these conditions.
medium_list_voices description is minimal ('List available TTS voices for audio generation.') and parameter 'category' is optional with no guidance on valid category values. Cannot determine categories without calling the tool.