A Flask-based web application for social media management, content creation, comment monitoring, and automated responses using LLM services
This server exposes 23 tools with significant definition quality gaps. The most critical issues: (1) Tool naming lacks verb-noun consistency, tools like 'monitor', 'schedule', 'dashboard_index', 'activate' are vague or confusing. 'monitor' doesn't clarify what action occurs; 'schedule' could mean list or create. (2) Descriptions are present but inconsistent in detail and often too generic (e.g., 'Logout the current authenticated user' for logout is only 45 chars; 'Display...' is passive voice). (3) Input schemas ARE present for most tools (good), but lack critical constraints: no enums for multi-choice fields (e.g., 'tone_of_voice' accepts free-form string, not constrained values), no bounds on arrays or numeric fields, no dependency documentation between params (e.g., 'auto_reply_settings' has multiple boolean toggles with no explanation of precedence). (4) Output schemas are NOT documented anywhere in the source, tools return Flask responses without declared structures. (5) Parameter descriptions lack depth: 'User email address' (for email param in login) offers no constraints or format guidance. (6) Tools like 'dashboard_index', 'api_reply', and 'quick_reply' appear redundant, no clear distinction between them. (7) Error handling is absent from the visible code; tools redirect or return flash messages, not structured error responses with recovery guidance. (8) Composition issues: 'reply', 'quick_reply', 'auto_reply', and 'api_reply' all seem to do similar things but the tool set offers no guidance on which to call when. The server uses Flask blueprints but does not export MCP-formatted tool definitions, tool metadata is inferred from function signatures and docstrings, making it impossible to verify exact schema conformance.
Activate a specific strategy and deactivate others
API endpoint for creating posts
API endpoint for replying to comments
Generate and send an automated reply to a comment using LLM context
View and configure auto-reply settings including enabled state, reply templates, and daily limits
Create a new post or schedule it for later
Create a new post
Vague tool names lack action verbs. 'monitor', 'schedule', 'dashboard_index', 'activate' do not clearly describe what action the LLM will trigger. An LLM cannot infer whether 'schedule' lists scheduled items or creates a new schedule. Names should use verb_noun pattern: 'list_scheduled_posts', 'get_dashboard_summary', 'activate_strategy'.
Output schemas are not documented. Flask views return HTML/JSON responses without declaring what fields/structure the MCP response will contain. LLMs cannot plan downstream calls or extract required IDs (e.g., post_id, comment_id) if schema is unknown.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 40 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 36 | - | v1 |
Display the main dashboard with posts, comments, suggestions, and analytics
Generate a response template using LLM for a given scenario
Display comments for a specific post
Handle user login with email and password validation
Logout the current authenticated user
Monitor page posts and comments with sentiment analysis
Display comments with negative sentiment analysis
View and update page profile settings including page name, ID, category, and target audience
Handle quick reply to comments from the dashboard
Register a new user account with email, password, and name
Reply to a specific comment
View all scheduled posts
Create a new social media strategy with business type, objectives, tone, topics, and value propositions
List all strategies for the current user
Generate content suggestion for a given topic using LLM
View and add response templates for auto-replies
No input constraints on free-form parameters. 'tone' in generate_template, 'tone_of_voice' in strategy_create, 'content_language' in profile accept arbitrary strings. Should use enums (e.g., tone: [professional, casual, friendly, technical]) to prevent hallucinated values.
Redundant tools with unclear distinctions. 'reply', 'quick_reply', 'auto_reply', and 'api_reply' all appear to send comment replies. No documentation explains when to call which. This violates single-responsibility and forces LLMs to guess.
Parameter descriptions lack depth. Many params (e.g., 'Facebook post ID', 'User email address') are under 30 chars and lack format/constraint guidance. Should specify: format (e.g., numeric, alphanumeric), allowed ranges, examples of valid/invalid values, and when to use alternative params.
No error handling guidance. Tools redirect or return flash messages. Error responses must tell the LLM what to do next: is the error retryable? User-fixable? Fatal? Flask redirect loops do not expose error details to the MCP layer.
Array parameters lack bounds. 'target_audience', 'key_objectives', 'key_topics', 'content_pillars', 'value_propositions' in strategy_create are declared as arrays with no minItems, maxItems, or item type constraints. LLMs will pass undefined structures.
Tool descriptions use passive voice and lack action clarity. E.g., 'Logout the current authenticated user' (logout), 'Display the main dashboard...' (dashboard_index), 'Display comments...' (list_comments). Should state WHAT happens, WHEN to call it, and WHAT the LLM gets back, in active voice.
Dual API/UI tool pairs. 'api_reply' vs 'reply', 'api_create_post' vs 'create_post', unclear which is the canonical tool or when to prefer one. This violates composition principle: one canonical name per concern, not two competing variants.
Missing parameter interdependencies. In auto_reply_settings, params 'reply_to_all' and 'reply_to_negative' could conflict or have a logical precedence. No documentation explains: does reply_to_all override reply_to_negative? Are they mutually exclusive?