An MCP server that provides tools to interact with DevTo articles, user profiles, and content management. Includes SSE and stdio transport implementations.
This MCP server exhibits significant quality gaps across naming, descriptions, schemas, and error handling. While 11 of 13 tools have basic schemas with typed parameters and descriptions present, most descriptions are generic, lacking context about WHEN to use each tool, WHAT it returns, and HOW it relates to similar tools. Tool naming is inconsistent, get_articles, get_articles_by_tag, and get_articles_by_tags create ambiguity without clear distinctions in descriptions. The two A2A agent tools (list_remote_agents, send_task) are underspecified, send_task lacks return type documentation and error recovery guidance. No tools document output schemas, pagination handling is inconsistent, and there is no error recovery guidance in any tool description. The post_article tool is a WRITE operation but lacks dry-run or confirmation patterns. Parameter descriptions are present but often minimal (e.g., 'The ID of the article to fetch' for article_id). Response formatting and field naming consistency are not addressed, API responses likely include verbose metadata that should be stripped.
Fetch comments for a specific article from DevTo. Args: article_id (int): The ID of the article to fetch comments for. Returns: list: A list of comments for the specified article.
Fetch the content of a specific article from DevTo. Args: article_id (int): The ID of the article to fetch. Returns: dict: The content of the specified article.
Fetch articles from DevTo. Args: page (int): The page number to fetch. per_page (int): The number of articles per page. Returns: list: A list of articles from DevTo.
Fetch articles by a specific tag from DevTo. Args: tag (str): The tag to filter articles by. Returns: list: A list of articles with the specified tag.
Fetch articles by multiple tags from DevTo. Args: tags (list): A list of tags to filter articles by. Returns: list: A list of articles with the specified tags.
Ambiguous naming: get_articles, get_articles_by_tag, and get_articles_by_tags lack clarity in descriptions. LLMs cannot easily distinguish when to use tag (singular) vs tags (plural) filtering without explicit comparison in descriptions.
Missing return type documentation for all tools. Tool descriptions state 'Returns: list' or 'Returns: dict' but do not document field names, types, or structure. LLMs cannot plan downstream calls without knowing what fields are in the response.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 48 | 1.9.1+ | v1 |
Fetch the current user's information from DevTo. Returns: dict: The current user's information.
Fetch all articles authored by the current user from DevTo. Returns: list: A list of articles authored by the current user.
Fetch the followers of the current user from DevTo. Returns: list: A list of followers of the current user.
Fetch all published articles authored by the current user from DevTo. Returns: list: A list of published articles authored by the current user.
Fetch the current user's reading list from DevTo. Returns: list: A list of articles in the user's reading list.
List the available remote agents you can use to delegate the task.
Post a new article to DevTo. Args: title (str): The title of the article. body (str): The body content of the article in Markdown format. tags (list): A list of tags for the article. Returns: dict: The response from the DevTo API after posting the article.
Sends a task either streaming (if supported) or non-streaming. This will send a message to the remote agent named agent_name. Args: agent_name: The name of the agent to send the task to. message: The message to send to the agent for the task. tool_context: The tool context this method runs in.
No pagination guidance. Tools returning lists (get_articles, get_articles_by_tag, get_articles_by_tags, get_user_articles, get_user_published_articles, get_user_followers, get_user_reading_list, get_article_comments) lack documentation on total count, next_cursor, or hard limits. Large results risk exhausting context windows.
post_article is a destructive write operation but has no dry-run, confirmation, or rollback pattern. No error recovery guidance. Agents cannot safely compose this without risk of unintended article creation.
send_task tool severely underspecified. Description is vague ('Sends a task either streaming or non-streaming'). No documentation of what success looks like, what failures are possible, or how the agent should interpret streaming responses. Missing return type schema.
No error handling or recovery guidance in any tool. Tool descriptions do not state what errors are possible, whether they are retryable, or what the agent should do next. A raw API error will leave the agent without actionable guidance.
Generic parameter descriptions. 'The ID of the article to fetch' and 'A list of tags to filter articles by' lack actionable detail. No constraints on range, format, or allowed values. LLMs may pass invalid inputs.
Tool descriptions under 100 characters lack context. 'Fetch articles from DevTo' and 'Fetch the current user's information' do not explain WHEN to use these tools or HOW they differ from related tools. LLMs struggle with tool selection.
list_remote_agents and send_task are A2A agent tools but lack documentation of required permissions, expected response format, and failure modes. No guidance on whether send_task is idempotent or how to detect duplicate sends.