Model Context Protocol server for the Publer social media management API
Server has 4 tools with complete schemas and descriptions. Naming follows verb_noun convention (get_, list_, schedule_). Descriptions are present and substantive (100-300 chars). However, publer_schedule_post is severely overloaded with 20+ parameters, violating single-responsibility principle. Parameter descriptions are verbose but lack actionable constraints (enums, ranges, patterns). No output schema documentation. Error handling exists but lacks recovery guidance. Missing tool annotations (readOnlyHint, destructiveHint).
Retrieve the profile and application settings of the authenticated Publer user.
List the connected social media accounts in a workspace (id, name, provider, type, picture, status).
List all workspaces the authenticated user can access, including id, name, role and picture.
Schedule a post across one or more social accounts (any content type / platform format via content_type + media + link + extra). Returns a job_id; poll publer_check_job_status until complete.
publer_schedule_post combines 20+ parameters (text, media, link, extra, networks, labels, signature, watermark, location, share, comments, delete, account_extra, scheduled_at, content_type, state, auto) into a single tool. This violates single-responsibility and forces LLMs to reason about complex interdependencies. Should split into separate tools: schedule_simple_post (text + account_ids + scheduled_at), add_media_to_post, add_link_to_post, etc.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., workspace_id from list_workspaces, account_id from list_accounts). Responses are returned as JSON strings without field-level documentation.
Parameter descriptions lack actionable constraints. 'state' enum is documented in description text but not as a formal enum constraint. 'scheduled_at' lacks ISO 8601 format specification. 'account_ids' minItems=1 is in schema but not mentioned in description. Constraints should be both formal (JSON Schema) and textual (description).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Error handling returns PublerApiError with body dump but no recovery guidance. Example: 'Invalid account_id' should suggest 'Call publer_list_accounts to discover valid IDs.' Current fail() function just stringifies the error.
Tool annotations missing. publer_schedule_post is destructive (WRITE risk) but has no destructiveHint. publer_get_current_user and publer_list_* are read-only but have no readOnlyHint. Annotations help LLMs reason about safety and retry logic.