Public leaderboard

Public assessment

timergy-app/timergy (@timergy/mcp)

timergy-mcp · v0.6.3 · scanned

What changed in the harness

Selection accuracy 92→92, token cost up 3%, 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

23.8 / 30

23.8 out of 30
03Economics

17.0 / 20

17.0 out of 20
04Discoverability

9.7 / 20

9.7 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.

12 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
create_poll
params_unexplained
Create a Timergy scheduling poll (like Doodle) where participants vote on preferred time slots. Provide a title and at least 2-5 time slot options with ISO 8601 date-times (include timezone, e.g. 2026-03-20T18:00:00+02:00 or use UTC with Z suffix). The optional description is a free-text note shown to participants to add context beyond the title. Returns a shareable URL to send to participants and a passphrase for admin access. The passphrase is automatically remembered for finalize_poll. If an API key or OAuth token is configured, the poll is created on the user's account instead (no passphrase; update_poll, invite_to_poll, list_my_polls and finalize work via the same auth). Set autoFinalize=true with a deadline to automatically pick the best option when the deadline passes. Use invitees to send email invitations with direct voting links. Workflow: create_poll -> share URL -> wait for votes -> get_results -> finalize_poll (or use auto-finalize).
vote_on_poll
no_return_description
Submit votes on a Timergy poll. First call get_poll to retrieve the available optionId values. Each vote maps an optionId to an availability: 'yes' (available), 'maybe' (might work), or 'no' (unavailable). A unique voter token is auto-generated per voter name, so provide the voter name in voterName; resubmitting with the same voter name updates previous votes. Returns confirmation that the votes were recorded, including the auto-generated voter token.
finalize_poll
no_return_description
Finalize a poll by picking the winning time slot. Call get_results first to find the best optionId. Uses the passphrase auto-saved from create_poll. If the MCP server was restarted since poll creation, provide the passphrase manually. Account-linked polls (created with API key/OAuth configured) have no passphrase; they are finalized via the same auth. This locks the poll and notifies participants who provided an email. Returns confirmation of the finalized poll and the chosen winning option.
auto_finalize
no_return_description
Automatically finalize a poll by picking the best-scored time slot. Combines suggest_best_option + finalize_poll in one step. Requires the passphrase from create_poll (or API key/OAuth auth for account-linked polls). Notifies all participants. Returns the finalized poll along with the winning time slot.
invite_to_poll
no_return_description
Invite people to an existing poll by email. Use list_contacts first to find email addresses. Requires authentication via per-call oauthToken/apiKey, or pre-configured via --oauth-token/--api-key CLI flags. The poll must be open and owned by the authenticated user (create it with auth configured). Invitees receive an email with a direct voting link. Max 50 invitees per call. Returns confirmation of the invitations, including the number of invitees emailed.
create_survey
params_unexplained
Create a Timergy survey (choice poll) where participants vote on text options instead of time slots. Provide a title and at least 2 text options (e.g. restaurant names, activity choices). The optional description is a free-text note shown to participants to add context (e.g., additional details or constraints). Returns a shareable URL and a passphrase for admin access. Use for decisions like 'Where should we eat?', 'Which logo?', 'What activity?'. Workflow: create_survey -> share URL -> wait for votes -> get_results -> finalize_poll.
unignore_event
no_return_description
Stop ignoring a previously ignored calendar event, so it will show as a conflict again. Pass the ignore rule ID (from list_ignored_events), not the calendar event ID. Requires authentication via per-call oauthToken/apiKey, or pre-configured via --oauth-token/--api-key CLI flags. Returns confirmation that the event will be reported as a conflict again.
update_poll
no_return_description
Update an existing poll's title, description, deadline, or location. Only the poll creator can update. Requires authentication. Pass only the fields you want to change (pass null to clear a field). Returns the updated poll details.
delete_poll
no_return_description
Archive a poll for the authenticated user so it disappears from their active list. Other participants are unaffected. Polls are globally deleted only by the automatic cleanup after the retention window (10 days past the event date). Requires authentication. Returns confirmation that the poll was archived.
reopen_poll
no_return_description
Reopen a finalized poll so participants can vote again. Only the poll creator can reopen. Requires authentication. This clears the finalized option and deletes calendar events created during finalization. Returns confirmation that the poll is open for voting again.
create_webhook
no_return_description
Subscribe to poll events via HTTPS webhook. Events: vote.received, poll.finalized, poll.cancelled, poll.reminder_sent, poll.deadline_approaching, booking.created, booking.cancelled. The webhook URL receives POST requests with event data. Requires authentication. Returns the new webhook subscription ID and the events it is subscribed to.
delete_webhook
no_return_description
Delete a webhook subscription. Pass the webhook ID from list_webhooks. Requires authentication. Returns confirmation that the subscription was deleted.

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
create_poll create_survey high A task like 'create a poll to pick a restaurant' or 'make a poll with text choices' is genuinely ambiguous: create_survey exists specifically for text options (restaurants, logos, activities), while create_poll is for time slots. An agent seeing 'poll' vocab but text-style options may pick the wrong one.
finalize_poll auto_finalize high A task like 'finalize the poll' with no winning slot specified maps exactly to auto_finalize (combines suggest_best_option + finalize_poll), yet an agent may pick finalize_poll and then need optionId. Both share 'finalize' semantics and take pollId/passphrase, making the wrong choice plausible.
suggest_best_option auto_finalize medium A task like 'pick the best time and finalize' could route to either: suggest_best_option only recommends (returns ranked options), auto_finalize actually commits. Natural phrasing like 'suggest the best option and finalize' or 'pick the best slot' is ambiguous about whether to act.
get_poll get_results medium A task 'get the poll details' or 'what are the poll votes' is ambiguous since get_poll returns only metadata/options while get_results returns votes. Users often say 'get the poll' when they mean its results, and both share get/poll/slot/time tokens.
ignore_event unignore_event medium A task phrased as 'stop showing that conflict' or 'don't ignore that event anymore' can confuse the verb direction; an agent may call ignore_event when the user means unignore_event. The near-identical names and shared conflict/event vocabulary make this plausible.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard