Public leaderboard

Public assessment

Kadenzo/kadenzo-mcp (kadenzo-mcp)

kadenzo-mcp · v1.0.0 · scanned

What changed in the harness

Selection accuracy 98→100, token cost up 10%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

25.8 / 30

25.8 out of 30
03Economics

19.5 / 20

19.5 out of 20
04Discoverability

12.1 / 20

12.1 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

9 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
schedule_post
no_return_description
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. Returns the scheduled post's id, which you can use later with get_post, update_post, or cancel_post.
list_posts
params_unexplained
Return your posts, newest first, each with its id and status. Optionally filter by status (comma-separated, e.g. "pending,posted"). limit: maximum number of posts to return (1-100). offset: number of posts to skip before returning results, for pagination.
update_post
params_unexplained no_return_description
Update a post that has not yet published and return its updated id and status. id: the post id from list_posts or get_post. content: the new post text (optional if media_urls provided). account_ids: account ids, from list_accounts, the post goes to (at least one). scheduled_for: the new ISO 8601 future datetime to publish. media_urls: public image/video URLs to attach. platform_content: per-platform text overrides, e.g. {"twitter":"shorter text"}. options: per-platform format options, e.g. {"instagram":{"as_reel":true}}. thread: multi-post threads, e.g. {"x":["1/…","2/…"]}.
cancel_post
params_unexplained no_return_description
Cancel a scheduled post before it publishes; already-published posts cannot be cancelled. id: the id of the scheduled post to cancel, from list_posts or get_post. Returns the cancelled post's id and its updated status.
get_account_analytics
params_unexplained
Return recent posts and their engagement metrics (likes, comments, views, etc.) for one connected account — the reliable analytics surface. account_id: the connected account id from list_accounts.
get_post_analytics
params_unexplained
Return per-channel engagement metrics for a specific post you scheduled (best-effort; use get_account_analytics for the full picture). id: the id of the scheduled post, from list_posts or get_post.
get_best_times
params_unexplained
Return 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 them to pick scheduled_for. account_id: the connected account id from list_accounts.
list_mentions
params_unexplained
Return your social-listening mentions — who is talking about the keywords you track (reddit/bluesky/youtube/hackernews/…), newest first. platform: filter to one platform, e.g. "reddit". since: ISO datetime; only mentions published after this. unread: if true, return only mentions not yet read. limit: maximum number of mentions to return. offset: number of mentions to skip, for pagination.
post_comment
no_return_description
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. Returns the posted comment, including its id.

Selection evidence

Confusable tool pairs.

5 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
get_post get_post_analytics medium Both take a post id and report on a single post; a vague task like 'check how my post is doing' or 'what happened with post X' could pull status/channel outcome from get_post when the user actually wants engagement metrics, or vice versa.
get_account_analytics get_post_analytics medium A task like 'get the engagement analytics' is ambiguous on scope: get_post_analytics is for one specific post while get_account_analytics covers recent posts and is explicitly billed as the 'reliable full picture', so an agent could choose the wrong one for a single-post analytics request.
schedule_post update_post medium A task like 'move my post to tomorrow' or 'reschedule my post for 3pm' could trigger schedule_post (scheduling a post at a time) instead of update_post (editing the existing post's time), since both operate on posts and time and aren't distinguished by the verb alone.
get_account_analytics get_best_times low Both describe data computed from a connected account's engagement history ('recent posts and engagement metrics' vs 'best times computed from engagement history'); a request like 'what does my account's engagement say' could misdirect to get_best_times, though each output type is fairly distinct.
list_posts list_mentions low Both are 'newest first' listing tools with nearly identical surface phrasing ('list your posts' vs 'list mentions, newest first') and start with 'your'; a generic task like 'show me the latest social activity' is ambiguous, though the post-vs-mention domain split usually disambiguates.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard