MCP server for Kadenzo — schedule, manage, generate, and analyze social posts across 11 networks from any AI agent (Claude, Cursor, ChatGPT).
Kadenzo MCP demonstrates solid tool design with 14 well-named, action-verb tools (list_, schedule_, get_, update_, cancel_, upload_, post_). All tools have descriptions (avg ~150 chars, within 10-1024 baseline). Input schemas use Zod with type definitions and descriptions for most parameters. However, several parameters lack descriptions (e.g., 'limit', 'offset' in list_posts), and output schemas are not documented, LLMs cannot predict response structure. Error handling returns basic fail() responses without recovery guidance. Security is sound (API key via env var, no secrets in params). Tool composition is clean: each tool has one responsibility, and outputs include IDs for chaining (e.g., account_id, post id). Naming is consistent and verb-first. Missing: output schema documentation, richer error messages, and parameter descriptions for optional fields.
Cancel a scheduled post before it publishes. Already-published posts cannot be cancelled.
Generate post copy for a platform from a topic — great for a "generate then schedule" flow. Returns a caption/post/description you can feed into schedule_post. Platform must be one of: instagram, tiktok, snapchat, facebook, youtube.
Recent posts and their engagement metrics for one connected account (likes, comments, views, etc.). The reliable analytics surface.
Personalized best posting times for one connected account, computed from its own engagement history. Requires the Professional plan or higher. Hours are UTC; shift to the poster's timezone. Use it to pick scheduled_for.
Get one post: roll-up status, per-channel outcome, and any options/thread that were set on it.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nested objects) for any tool. Forces agents to guess or make exploratory calls.
Pagination parameters (limit, offset) in list_posts and list_mentions lack descriptions. LLMs cannot infer valid ranges or defaults.
Error responses use generic fail() wrapper without recovery guidance. 'Error: 401 Unauthorized' tells agent nothing about next steps (retry? ask user? check API key?).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
Per-channel engagement metrics for a specific post you scheduled (best-effort; use get_account_analytics for the full picture).
List the social accounts connected to this Kadenzo workspace — returns each account id, platform, and username. Use the ids as account_ids when scheduling.
List the social-listening keywords this workspace tracks — id, keyword, role (brand/competitor/topic), platforms, aliases, active state. Mentions for them arrive via list_mentions.
Your social-listening mentions — who is talking about the keywords you track (reddit/bluesky/youtube/hackernews/…), newest first. Filter by platform, since (ISO), or unread.
List your posts, newest first. Optionally filter by status (comma-separated, e.g. "pending,posted") and paginate with limit (1-100) and offset.
Post a comment/reply to one of your posts. account_id from list_accounts; target_id is the platform post/media/comment id to comment on. Supported: instagram, facebook, linkedin.
Schedule a social post to one or more connected accounts for a FUTURE time (it publishes automatically). Set validate_only=true to check accounts/limits/timing without scheduling.
Edit a post that has not published yet — change content, accounts, time, media, options, or thread.
Upload a local image or video file and get a hosted URL to use in media_urls when scheduling.
schedule_post accepts optional content and media_urls but does not validate that at least one is provided. LLM could pass empty post.
No dry-run or confirmation pattern for destructive operations (cancel_post, update_post). Agents cannot preview changes before committing.