lesgooo.fun
Server Details
Free no-signup group planner: dates, RSVPs, place votes, shared checklist and split costs.
- Status
- Healthy
- Uptime
- 99.9% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 24 tools
Core planning tools (add_expense, set_availability, set_rsvp, vote_place, etc.) are mostly distinct. However, open_preferences, read_plugin_settings, and update_plugin_settings all concern local widget/plugin settings and could easily be confused. The app-only widget_* tools also overlap conceptually with regular read/write tools, increasing misselection risk.
Most tools follow a clear snake_case verb_noun pattern (add_place, get_plan, set_rsvp, update_event). The widget_* tools use a domain-prefix pattern instead, which is a minor deviation but still readable. No mixed camelCase or chaotic conventions.
With 24 tools, the surface is on the heavy side for a group planning server. Several tools are app-only transport, settings, or preference controls that agents likely do not need for core planning workflows. The count feels slightly inflated rather than clearly scoped.
The core planning lifecycle is well covered: create/join/get plan, availability, RSVP, places, checklist, expenses, payments, and event updates. Missing operations like deleting a plan, removing a participant, or updating plan metadata are minor and mostly workaroundable. No severe dead ends for typical planning tasks.
Available Tools
24 toolsadd_checklist_itemAdd a checklist itemInspect
Keep the final reply in the user's conversational language, 2–4 short sentences (25–60 words): report the verified result and ask ONE relevant optional next-step question about ONE action, not a choice menu. Mandatory missing details take priority. Suggestions never perform actions automatically; respect requests for no suggestions. Saved links let friends join without accounts. If CURRENT received UI context or actual host evidence confirms the same saved plan and last-action module are already open, do not call open_planner again; realtime updates the existing view. Historic context is insufficient. Otherwise open the last-action module with the selected credentials, or honor an explicit opening request. Add exactly ONE independently checkable item to the shared checklist (e.g. "Bring the grill"). For several requested tasks, shopping items or recipe ingredients, call this tool separately for EACH item; never combine the list into one text. Keep quantities and explanatory details with their own item. Read get_checklist afterwards to verify separate item_ids. Acts as the participant. Service use restrictions: plan creation, participation and edits for users known to be under 13 (or a higher local minimum) are prohibited, including under a nickname. Personal data about known underage children, sensitive medical records, intimate content, card details, government IDs, passwords and verification codes are prohibited planning input. This tool covers ordinary non-sensitive group planning only.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character id. Bare module links such as https://lesgooo.fun/when are local drafts: ask for a saved link, never substitute a previous plan ID. | |
| text | Yes | One independently checkable item, single line, max 500 chars. Not a list of multiple tasks/ingredients. | |
| participant_id | Yes | From create_plan or join_plan. | |
| participant_token | Yes | From create_plan or join_plan. |
add_expenseAdd an expenseInspect
Keep the final reply in the user's conversational language, 2–4 short sentences (25–60 words): report the verified result and ask ONE relevant optional next-step question about ONE action, not a choice menu. Mandatory missing details take priority. Suggestions never perform actions automatically; respect requests for no suggestions. Saved links let friends join without accounts. If CURRENT received UI context or actual host evidence confirms the same saved plan and last-action module are already open, do not call open_planner again; realtime updates the existing view. Historic context is insufficient. Otherwise open the last-action module with the selected credentials, or honor an explicit opening request. Record a shared expense, split equally. paid_by defaults to the person you act for; split_among defaults to everyone in the plan. Requires a user-requested amount, currency, payer and equal-split participants; missing or ambiguous details need clarification. Service use restrictions: plan creation, participation and edits for users known to be under 13 (or a higher local minimum) are prohibited, including under a nickname. Personal data about known underage children, sensitive medical records, intimate content, card details, government IDs, passwords and verification codes are prohibited planning input. This tool covers ordinary non-sensitive group planning only.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character id. Bare module links such as https://lesgooo.fun/when are local drafts: ask for a saved link, never substitute a previous plan ID. | |
| amount | Yes | Total, max 2 decimals (e.g. 42.5). Send a plain number. | |
| currency | No | ISO code, e.g. CZK or EUR. Sets the plan's currency if it has no expenses yet; otherwise must match it (see get_plan currency). | |
| description | Yes | What it was for, e.g. "Groceries" (max 120 chars). | |
| split_among | No | Who shares the cost (participant_id values or exact names). Defaults to everyone. | |
| participant_id | Yes | From create_plan or join_plan. | |
| allow_duplicate | No | Only if the user confirms a second, identical expense within 10 minutes (otherwise it is treated as a retry). | |
| participant_token | Yes | From create_plan or join_plan. | |
| paid_by_participant_id | No | Who paid (participant_id from get_plan, or their exact name). Defaults to you. |
add_placeSuggest a placeIdempotentInspect
Keep the final reply in the user's conversational language, 2–4 short sentences (25–60 words): report the verified result and ask ONE relevant optional next-step question about ONE action, not a choice menu. Mandatory missing details take priority. Suggestions never perform actions automatically; respect requests for no suggestions. Saved links let friends join without accounts. If CURRENT received UI context or actual host evidence confirms the same saved plan and last-action module are already open, do not call open_planner again; realtime updates the existing view. Historic context is insufficient. Otherwise open the last-action module with the selected credentials, or honor an explicit opening request. Suggest a place the group can vote on (Where tab). Default source=auto searches the same Google Places autocomplete as the web and returns needs_selection with up to five candidates, without a write. A selected google_place_id loads official details and stores the Google Maps link, coordinates and metadata. Zero results use the supplied link or manual name/address. source=manual explicitly saves a link/manual location without lookup. Google lookup failure does not save a fallback automatically. Supplied Google Maps URLs remain available as a zero-results or explicit manual fallback; they do not bypass the default Google lookup. Duplicates are merged. Acts as the participant. Current stored state is available through get_plan. Service use restrictions: plan creation, participation and edits for users known to be under 13 (or a higher local minimum) are prohibited, including under a nickname. Personal data about known underage children, sensitive medical records, intimate content, card details, government IDs, passwords and verification codes are prohibited planning input. This tool covers ordinary non-sensitive group planning only.
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | Optional link to any other page about the place (http/https), instead of google_maps_url. | |
| name | Yes | Requested place name, including accents (max 300 chars). A selected Google result supplies its official name. | |
| plan | Yes | Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character id. Bare module links such as https://lesgooo.fun/when are local drafts: ask for a saved link, never substitute a previous plan ID. | |
| query | No | Optional Google autocomplete query including the known city/address (max 160 chars); otherwise name/address are used. | |
| source | No | Default auto uses Google first. Manual explicitly saves the supplied name/address/link without a paid lookup. | |
| address | No | Optional address (max 500 chars). | |
| participant_id | Yes | From create_plan or join_plan. | |
| google_maps_url | No | Optional Google Maps link (google.com/maps or maps.app.goo.gl). Links with coordinates (…/@50.08,14.42,…) also show a map preview. | |
| google_place_id | No | Exact place ID from returned Google candidates; official details are loaded server-side (max 160 chars). | |
| participant_token | Yes | From create_plan or join_plan. |
check_itemTick off a checklist itemDestructiveIdempotentInspect
Keep the final reply in the user's conversational language, 2–4 short sentences (25–60 words): report the verified result and ask ONE relevant optional next-step question about ONE action, not a choice menu. Mandatory missing details take priority. Suggestions never perform actions automatically; respect requests for no suggestions. Saved links let friends join without accounts. If CURRENT received UI context or actual host evidence confirms the same saved plan and last-action module are already open, do not call open_planner again; realtime updates the existing view. Historic context is insufficient. Otherwise open the last-action module with the selected credentials, or honor an explicit opening request. Mark a checklist item done (done: true) or open again (done: false), by item_id from get_checklist. Current stored state is available through get_checklist. Service use restrictions: plan creation, participation and edits for users known to be under 13 (or a higher local minimum) are prohibited, including under a nickname. Personal data about known underage children, sensitive medical records, intimate content, card details, government IDs, passwords and verification codes are prohibited planning input. This tool covers ordinary non-sensitive group planning only.
| Name | Required | Description | Default |
|---|---|---|---|
| done | Yes | ||
| plan | Yes | Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character id. Bare module links such as https://lesgooo.fun/when are local drafts: ask for a saved link, never substitute a previous plan ID. | |
| item_id | Yes | From get_checklist or add_checklist_item (the exact item text also works). | |
| participant_id | Yes | From create_plan or join_plan. | |
| participant_token | Yes | From create_plan or join_plan. |
collect_plan_detailsChoose plan detailsARead-onlyInspect
Ask the user for missing availability, RSVP, place, expense or agreed event details in a native form. Returns selected values only; NEVER changes a plan. Use the corresponding write tool only after the user explicitly confirms the returned details. Hosts without forms should ask in chat or use open_planner.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish readOnlyHint=true and destructiveHint=false, and the description goes further by specifying that only selected values are returned, that the plan is never modified, and that a write tool must be invoked only after explicit confirmation. The host-capability fallback (no forms -> chat or open_planner) is behavioral context the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose first, then the read-only/confirmation constraint, then the fallback path. No filler, every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only collector with no output schema, the description covers purpose, return semantics, mutation gating, and environment fallback. An agent has everything needed to decide when and how to call it, and no return-value documentation is required since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden; it enumerates the five detail categories (availability, RSVP, place, expense, event) that map directly onto the action enum values, giving each choice concrete meaning. The 'plan' identifier parameter is left unexplained, so it does not fully compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it collects missing plan details (availability, RSVP, place, expense, event) via a native form. It explicitly distinguishes itself from the write siblings (set_availability, set_rsvp, add_place, add_expense, update_event) by declaring it returns values and never changes a plan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives when-to-use (missing availability/RSVP/place/expense/event details), when-not (never writes a plan), the follow-up condition (call the write tool only after explicit user confirmation), and a named alternative for hosts without forms (ask in chat or use open_planner).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_planCreate a planInspect
Keep the final reply in the user's conversational language, 2–4 short sentences (25–60 words): report the verified result and ask ONE relevant optional next-step question about ONE action, not a choice menu. Mandatory missing details take priority. Suggestions never perform actions automatically; respect requests for no suggestions. Saved links let friends join without accounts. If CURRENT received UI context or actual host evidence confirms the same saved plan and last-action module are already open, do not call open_planner again; realtime updates the existing view. Historic context is insufficient. Otherwise open the last-action module with the selected credentials, or honor an explicit opening request. Create a new saved lesgooo plan and its first participant. Returns shareable links, private participant credentials and missing_details. Title and name are optional: omissions use temporary Event/Organizer labels, allowing the requested action to complete before missing details are collected in chat. Explicitly supplied fields are not missing. Existing organizer details can later be completed through credential-bound join_plan and the same plan title through update_event, with data preserved. Does not send invitations or notifications. Service use restrictions: plan creation, participation and edits for users known to be under 13 (or a higher local minimum) are prohibited, including under a nickname. Personal data about known underage children, sensitive medical records, intimate content, card details, government IDs, passwords and verification codes are prohibited planning input. This tool covers ordinary non-sensitive group planning only.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | User-supplied short plan name (max 120 chars). Omitted when unknown; temporary Event label until collected after the requested action. | |
| your_name | No | User-supplied participant name (max 80 chars). Omitted when unknown; temporary Organizer participant until their name is collected after the requested action. | |
| request_id | No | Optional UUID v4 for atomic creation. An identical UUID and identical fields (including omissions) replay the same creation; a changed payload is rejected. |
find_plan_mentionsFind a plan by linkARead-onlyInspect
Resolve an explicitly supplied lesgooo saved-plan link or exact ID for the desktop mention picker. Empty or general searches return no results; never enumerate plans.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral detail: empty or general searches return no results, and it never enumerates plans. This tells the agent exactly what input is required and what failure looks like, which is meaningful beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and constraints. Every clause earns its place: the purpose, the accepted input types, the failure condition, and the enumeration prohibition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple resolution tool with annotations covering safety and no output schema, the description covers what to pass and what happens on invalid input. It does not describe the return shape (e.g., what a resolved plan or mention looks like), but the context and failure semantics are sufficient for typical use, leaving only a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single query parameter and zero schema description coverage, the description carries the full burden. It specifies that the query must be an explicitly supplied lesgooo saved-plan link or exact ID, which is essential semantic information not present in the schema. It does not give format examples, but it compensates well for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Resolve') and resource ('lesgooo saved-plan link or exact ID') and clarifies the context ('for the desktop mention picker'). It implicitly separates itself from general search or enumeration tools by stating that empty or general searches return no results and that it never enumerates plans. However, it does not name a sibling tool (e.g., get_plan) to explicitly differentiate itself, so a 4 is appropriate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear when-to-use guidance: only with an explicitly supplied link or exact ID. It also provides an explicit when-not-to-use condition: empty or general searches return no results and it never enumerates plans. No alternative tool is named, but the context is sufficiently clear for an agent to avoid misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_checklistRead the checklistBRead-onlyInspect
Read the plan's shared checklist: open and done items, with item_id.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character id. Bare module links such as https://lesgooo.fun/when are local drafts: ask for a saved link, never substitute a previous plan ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the useful detail of what is returned (open and done items, each with item_id), but says nothing about ordering, pagination, or authorization needs beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the resource and returned payload are stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description supplies the return shape and annotations carry the safety profile, so an agent has enough to call it correctly. Usage routing to sibling checklist tools remains the only gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the plan parameter's schema text is richer than the description (saved link vs 4-character id, local draft warning). The description adds no parameter-specific meaning, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (read) and resource (the plan's shared checklist) and scopes the output to open and done items with item_id. It is clearly distinct from the broader get_plan, though it doesn't explicitly name or contrast any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this over get_plan, check_item, or add_checklist_item. The read-only nature is implied, but no condition or exclusion is stated, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_expensesRead shared costsARead-onlyInspect
Read the plan's shared costs (Splitwise tab): expenses, each person's balance, and the suggested payments to settle up. Amounts are in the plan's currency.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character id. Bare module links such as https://lesgooo.fun/when are local drafts: ask for a saved link, never substitute a previous plan ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and destructiveHint. Beyond those, the description usefully discloses the return contents and that amounts are denominated in the plan's currency, which is real behavioral context. It does not mention pagination or result size, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence plus a short currency note, with the resource and returned data front-loaded and no filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description's enumeration of returned values is genuinely valuable, and annotations carry the safety profile. Missing only secondary details such as result volume or how settlement suggestions are computed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'plan' parameter is thoroughly documented in the schema (link format, 4-char id, draft-link caveat). The description adds nothing about the parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Read the plan's shared costs') and enumerates exactly what is returned (expenses, balances, settlement payments). It implicitly separates itself from the mutating siblings add_expense and record_payment, but never names an adjacent read tool such as get_plan, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to prefer this tool over get_plan or other read siblings, no prerequisites, and no stated exclusions. Usage is only implied by the phrase 'the plan's shared costs'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_planRead a planRead-onlyInspect
For a user-requested plan opening, read get_checklist and get_expenses too. Reply in the user's conversational language, 25–60 words total, at most four short bullets plus ONE contextual question about ONE action, not a menu. Summarize dates (actual counts/ties, not an agreed date), places, open tasks and balances; omit empty modules and completed-task lists. Reading requires no identity; never guess personal debts. After a write, briefly report that result and one next-step question instead of repeating the overview. Respect requests for no suggestions. Read the saved plan explicitly requested by the user. If the user's link is a bare /when, /where, /rsvp, /checklist or /splitwise URL, do NOT call this tool: explain it is a local draft and ask for its saved share link, even when a different plan was used earlier. Never replace a supplied link with the previous plan. Returns today's date in time_zone (UTC by default), title, event details, participants and their availability/RSVP, best dates, place votes and currency. Pass since (an earlier server_time) to also read changes.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character id. Bare module links such as https://lesgooo.fun/when are local drafts: ask for a saved link, never substitute a previous plan ID. | |
| since | No | Optional ISO timestamp (server_time from an earlier get_plan). | |
| time_zone | No | User's IANA time zone, e.g. Europe/Prague. Use when resolving tomorrow or other relative days; today defaults to UTC if omitted. | |
| include_all_dates | No | For calendar UI: return all dates within the existing bounded read budget, instead of the concise first 60 per person. |
join_planJoin a planDestructiveIdempotentInspect
Keep the final reply in the user's conversational language, 2–4 short sentences (25–60 words): report the verified result and ask ONE relevant optional next-step question about ONE action, not a choice menu. Mandatory missing details take priority. Suggestions never perform actions automatically; respect requests for no suggestions. Saved links let friends join without accounts. If CURRENT received UI context or actual host evidence confirms the same saved plan and last-action module are already open, do not call open_planner again; realtime updates the existing view. Historic context is insufficient. Otherwise open the last-action module with the selected credentials, or honor an explicit opening request. Join a plan as the user-specified person. Without participant credentials, selection=existing selects an existing person only; selection=new adds a distinct name only; default selection=auto reuses a unique matching name or adds it. Duplicate names require existing_participant_id, which selects the exact matching row without renaming. No account or organizer privilege is verified. With both participant_id and participant_token, the operation instead renames that same participant to name, preserving availability/RSVP/entries. That mode adds no participant and cannot switch to another matching name; collisions and invalid credentials are rejected. Returns participant_id and participant_token. Supports completing an unnamed organizer after their requested action. Service use restrictions: plan creation, participation and edits for users known to be under 13 (or a higher local minimum) are prohibited, including under a nickname. Personal data about known underage children, sensitive medical records, intimate content, card details, government IDs, passwords and verification codes are prohibited planning input. This tool covers ordinary non-sensitive group planning only.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The person's name as the group knows them (max 80 chars). | |
| plan | Yes | Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character id. Bare module links such as https://lesgooo.fun/when are local drafts: ask for a saved link, never substitute a previous plan ID. | |
| selection | No | Without credentials: auto matches or adds; existing never adds; new never takes another person's matching name. Default auto. | |
| participant_id | No | From create_plan or join_plan. | |
| participant_token | No | From create_plan or join_plan. | |
| existing_participant_id | No | Exact existing participant ID from get_plan or received user UI selection; requires selection=existing and matching name. No rename. |
open_plannerOpen lesgooo plannerRead-onlyInspect
After completing and verifying the requested actions, keep the last requested action's module: availability=when, places/votes=where, RSVP/event details=rsvp, checklist=checklist, expenses/payments=splitwise. If CURRENT received user_planner_selection or actual host evidence confirms that SAME saved plan AND module are already open, DO NOT call open_planner again: saved changes appear through realtime subscriptions in the existing view, and opening again can create a duplicate tab/card. Report the verified result in chat. Historic UI context alone does not prove a view is still open. Call open_planner only when no matching current view is confirmed, the target plan/module differs, or the user explicitly requests another opening. When opening, pass the already selected participant_id and participant_token; never join again or guess identity merely for display. Verification reads, participant selection and completing missing new-plan name/title do not change the last requested action's module. For a user-requested plan opening, read get_checklist and get_expenses too. Reply in the user's conversational language, 25–60 words total, at most four short bullets plus ONE contextual question about ONE action, not a menu. Summarize dates (actual counts/ties, not an agreed date), places, open tasks and balances; omit empty modules and completed-task lists. Reading requires no identity; never guess personal debts. After a write, briefly report that result and one next-step question instead of repeating the overview. Respect requests for no suggestions. Open the interactive lesgooo planner. Optionally choose a saved plan link, module and previously selected participant credentials. Credentials preserve that person in the displayed view without another identity picker. Without a plan, show the same local draft as the web application; never save a shared plan automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | No | ||
| module | No | ||
| participant_id | No | Previously selected participant in this plan; requires participant_token. | |
| participant_token | No | Token returned by join_plan/create_plan for this participant and plan; requires participant_id. |
open_preferencesDevice preferencesARead-onlyInspect
Open local widget preferences. Defaults and recent history stay on this device; does not change a shared plan.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds genuine non-obvious context: data is device-local, includes defaults and recent history, and no shared plan is mutated — exactly the kind of scoping detail annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, and the core action ('Open local widget preferences') is front-loaded ahead of the scoping caveat. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool the description is nearly complete: it says what opens and that nothing shared is affected. It does not describe what the agent should expect to see afterward, but with annotations covering the read-only profile this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema coverage is 100%, so there is nothing for the description to disambiguate. Baseline 4 applies; no parameter information is missing or contradictory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Open local widget preferences') and the description clarifies scope ('on this device'), which separates it from the shared-plan siblings. It does not explicitly distinguish itself from read_plugin_settings/update_plugin_settings, and the mismatch between the title ('Device preferences') and the description ('widget preferences') leaves minor ambiguity about what is actually opened.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sentence 'does not change a shared plan' gives an implicit when-not boundary, useful against the plan-mutation siblings. However, no alternative is named and no condition for choosing this tool over read_plugin_settings is stated, so the guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_plugin_settingsBRead-onlyInspect
Read the plugin settings layout. There are no account settings; the action opens device-local preferences.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| layout | No | |
| schema | Yes | |
| values | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that preferences are device-local rather than account-scoped, which is genuinely useful context, but it does not describe the read behavior itself or what 'layout' means, and 'the action opens ... preferences' is ambiguous for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the purpose front-loaded and no filler. The second sentence earns its place only partially, since 'opens device-local preferences' muddies rather than sharpens the read semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. What is missing is clarity on the core operation: 'settings layout' and the verb 'opens' leave ambiguity about whether this reads configuration data or launches a preferences surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema takes zero parameters, so the baseline is 4. The description's note that there are no account settings adds scope meaning beyond the empty schema, though there is no parameter syntax to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Read the plugin settings') and scopes it ('no account settings; device-local preferences'), which distinguishes it from the account-level siblings. However, 'settings layout' is vague, and it never names update_plugin_settings or open_preferences, so the boundary with those siblings is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clarifies that there are no account settings, a negative scope statement, but gives no positive guidance on when to call this instead of update_plugin_settings, open_preferences, or open_planner. An agent gets no usage context or prerequisite information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_paymentRecord a paymentInspect
Keep the final reply in the user's conversational language, 2–4 short sentences (25–60 words): report the verified result and ask ONE relevant optional next-step question about ONE action, not a choice menu. Mandatory missing details take priority. Suggestions never perform actions automatically; respect requests for no suggestions. Saved links let friends join without accounts. If CURRENT received UI context or actual host evidence confirms the same saved plan and last-action module are already open, do not call open_planner again; realtime updates the existing view. Historic context is insufficient. Otherwise open the last-action module with the selected credentials, or honor an explicit opening request. Record that the person you act for paid someone back (settling up). amount defaults to what they owe that person according to get_expenses. Only after the money was actually sent. Service use restrictions: plan creation, participation and edits for users known to be under 13 (or a higher local minimum) are prohibited, including under a nickname. Personal data about known underage children, sensitive medical records, intimate content, card details, government IDs, passwords and verification codes are prohibited planning input. This tool covers ordinary non-sensitive group planning only.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character id. Bare module links such as https://lesgooo.fun/when are local drafts: ask for a saved link, never substitute a previous plan ID. | |
| amount | No | Optional; defaults to the suggested settle-up amount. | |
| participant_id | Yes | From create_plan or join_plan. | |
| allow_duplicate | No | Only if the user confirms a second, identical payment within 10 minutes (otherwise it is treated as a retry). | |
| participant_token | Yes | From create_plan or join_plan. | |
| to_participant_id | Yes | Who received the money (participant_id, or their exact name). |
remove_entryRemove something you addedDestructiveIdempotentInspect
Keep the final reply in the user's conversational language, 2–4 short sentences (25–60 words): report the verified result and ask ONE relevant optional next-step question about ONE action, not a choice menu. Mandatory missing details take priority. Suggestions never perform actions automatically; respect requests for no suggestions. Saved links let friends join without accounts. If CURRENT received UI context or actual host evidence confirms the same saved plan and last-action module are already open, do not call open_planner again; realtime updates the existing view. Historic context is insufficient. Otherwise open the last-action module with the selected credentials, or honor an explicit opening request. Delete an expense, payment, checklist item or place that the person you act for added (e.g. to fix a wrong amount: remove, then add again). Entries added by others can't be removed here. Requires an explicit request to delete this specific entry. Service use restrictions: plan creation, participation and edits for users known to be under 13 (or a higher local minimum) are prohibited, including under a nickname. Personal data about known underage children, sensitive medical records, intimate content, card details, government IDs, passwords and verification codes are prohibited planning input. This tool covers ordinary non-sensitive group planning only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | expense_id / payment_id (get_expenses), item_id (get_checklist) or place_id (get_plan). For items and places the exact text/name also works. | |
| kind | Yes | ||
| plan | Yes | Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character id. Bare module links such as https://lesgooo.fun/when are local drafts: ask for a saved link, never substitute a previous plan ID. | |
| participant_id | Yes | From create_plan or join_plan. | |
| participant_token | Yes | From create_plan or join_plan. |
set_availabilitySet available daysDestructiveIdempotentInspect
Keep the final reply in the user's conversational language, 2–4 short sentences (25–60 words): report the verified result and ask ONE relevant optional next-step question about ONE action, not a choice menu. Mandatory missing details take priority. Suggestions never perform actions automatically; respect requests for no suggestions. Saved links let friends join without accounts. If CURRENT received UI context or actual host evidence confirms the same saved plan and last-action module are already open, do not call open_planner again; realtime updates the existing view. Historic context is insufficient. Otherwise open the last-action module with the selected credentials, or honor an explicit opening request. Add, remove or replace one participant's available calendar dates (YYYY-MM-DD, today up to two years ahead). Service use restrictions: plan creation, participation and edits for users known to be under 13 (or a higher local minimum) are prohibited, including under a nickname. Personal data about known underage children, sensitive medical records, intimate content, card details, government IDs, passwords and verification codes are prohibited planning input. This tool covers ordinary non-sensitive group planning only.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | replace sets the entire list; add and remove change only the supplied dates. Default: replace. | |
| plan | Yes | Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character id. Bare module links such as https://lesgooo.fun/when are local drafts: ask for a saved link, never substitute a previous plan ID. | |
| dates | Yes | ||
| participant_id | Yes | From create_plan or join_plan. | |
| participant_token | Yes | From create_plan or join_plan. |
set_rsvpAnswer the RSVPDestructiveIdempotentInspect
Keep the final reply in the user's conversational language, 2–4 short sentences (25–60 words): report the verified result and ask ONE relevant optional next-step question about ONE action, not a choice menu. Mandatory missing details take priority. Suggestions never perform actions automatically; respect requests for no suggestions. Saved links let friends join without accounts. If CURRENT received UI context or actual host evidence confirms the same saved plan and last-action module are already open, do not call open_planner again; realtime updates the existing view. Historic context is insufficient. Otherwise open the last-action module with the selected credentials, or honor an explicit opening request. Answer whether the person is coming: "yes", "no", or "clear" to remove the answer. For a repeating event the answer is for one occurrence: the next one by default, or pass occurrence_date (see get_plan event.upcoming). Changes only the participant bound to the supplied credentials. Current stored state is available through get_plan. Service use restrictions: plan creation, participation and edits for users known to be under 13 (or a higher local minimum) are prohibited, including under a nickname. Personal data about known underage children, sensitive medical records, intimate content, card details, government IDs, passwords and verification codes are prohibited planning input. This tool covers ordinary non-sensitive group planning only.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character id. Bare module links such as https://lesgooo.fun/when are local drafts: ask for a saved link, never substitute a previous plan ID. | |
| status | Yes | ||
| participant_id | Yes | From create_plan or join_plan. | |
| occurrence_date | No | Repeating events only: the date of the occurrence to answer for. | |
| participant_token | Yes | From create_plan or join_plan. |
update_eventUpdate the eventDestructiveIdempotentInspect
Keep the final reply in the user's conversational language, 2–4 short sentences (25–60 words): report the verified result and ask ONE relevant optional next-step question about ONE action, not a choice menu. Mandatory missing details take priority. Suggestions never perform actions automatically; respect requests for no suggestions. Saved links let friends join without accounts. If CURRENT received UI context or actual host evidence confirms the same saved plan and last-action module are already open, do not call open_planner again; realtime updates the existing view. Historic context is insufficient. Otherwise open the last-action module with the selected credentials, or honor an explicit opening request. Change the shared event everyone sees on the RSVP page: title, date/time, place or description. Covers group-agreed details or the user's title for their just-created plan. Uses the existing plan and participant credentials; omitted fields are unchanged, and an empty string clears a field. Times are local (no time zone); an omitted start_time means all-day when a start_date is provided. Availability alone does not specify an agreed event date. Current stored state is available through get_plan. Service use restrictions: plan creation, participation and edits for users known to be under 13 (or a higher local minimum) are prohibited, including under a nickname. Personal data about known underage children, sensitive medical records, intimate content, card details, government IDs, passwords and verification codes are prohibited planning input. This tool covers ordinary non-sensitive group planning only.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character id. Bare module links such as https://lesgooo.fun/when are local drafts: ask for a saved link, never substitute a previous plan ID. | |
| title | No | Plan / event name (max 120 chars). | |
| end_date | No | ||
| end_time | No | ||
| location | No | Place as plain text (max 500 chars). | |
| start_date | No | ||
| start_time | No | HH:MM, local time. | |
| description | No | Details for the group (max 4000 chars). | |
| participant_id | Yes | From create_plan or join_plan. | |
| participant_token | Yes | From create_plan or join_plan. |
update_plugin_settingsCRead-onlyInspect
No primitive account settings are available. An empty update is a no-op; device preferences are changed in the widget.
| Name | Required | Description | Default |
|---|---|---|---|
| set | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| values | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description genuinely adds beyond that by disclosing that an update is a no-op and that no settings are settable, which prevents a wasted or harmful call. It stops short of explaining why the tool is exposed at all.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the constraining fact front-loaded, which is efficient. Two of the sentences restate the same point (nothing is settable / empty update does nothing) and the widget reference sits last, so there is minor redundancy rather than tight single-purpose messaging.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description does cover the no-op nature of the tool. Given a required nested parameter, 0% schema coverage, and a name implying mutation, it still leaves unclear what an agent should do if it does call this tool and whether a non-empty 'set' is ever valid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'set' parameter has 0% schema description coverage, so the description must carry the load. It only obliquely explains the parameter via 'an empty update is a no-op', without saying that 'set' must be an empty object or listing any permitted keys, leaving the agent to reverse-engineer the schema's additionalProperties: false constraint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description defines the tool almost entirely by negation: it says no primitive account settings are available and that an empty update is a no-op, but never states what update_plugin_settings actually does or why it exists. The only positive information is a routing hint ('device preferences are changed in the widget'), which is more about a sibling than this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the tool should effectively never be invoked ('an empty update is a no-op') and points to the widget for device preferences, which is a partial alternative-routing hint. However, there is no explicit 'use this when / do not use this when' statement, and the implied 'don't call me' guidance is left for the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vote_placeVote on a placeDestructiveIdempotentInspect
Keep the final reply in the user's conversational language, 2–4 short sentences (25–60 words): report the verified result and ask ONE relevant optional next-step question about ONE action, not a choice menu. Mandatory missing details take priority. Suggestions never perform actions automatically; respect requests for no suggestions. Saved links let friends join without accounts. If CURRENT received UI context or actual host evidence confirms the same saved plan and last-action module are already open, do not call open_planner again; realtime updates the existing view. Historic context is insufficient. Otherwise open the last-action module with the selected credentials, or honor an explicit opening request. Up-vote ("up"), down-vote ("down") or remove your vote ("clear") on a place, by place_id from get_plan. Changes only the participant bound to the supplied credentials. Current stored state is available through get_plan. Service use restrictions: plan creation, participation and edits for users known to be under 13 (or a higher local minimum) are prohibited, including under a nickname. Personal data about known underage children, sensitive medical records, intimate content, card details, government IDs, passwords and verification codes are prohibited planning input. This tool covers ordinary non-sensitive group planning only.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character id. Bare module links such as https://lesgooo.fun/when are local drafts: ask for a saved link, never substitute a previous plan ID. | |
| vote | Yes | ||
| place_id | Yes | From get_plan places[].place_id or add_place (the exact place name also works). | |
| participant_id | Yes | From create_plan or join_plan. | |
| participant_token | Yes | From create_plan or join_plan. |
widget_lookupPlace and link lookupCRead-onlyInspect
App-only Places search/details and link previews. The backend retains feature flags, monthly provider counters and timeouts. Never calls a paid API from the browser.
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | ||
| service | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond that: feature flags, monthly provider counters and timeouts live in the backend, implying quota/counter behavior worth knowing. It stops short of describing pagination, error behavior, or what the counters mean for the caller.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the capability statement. Every sentence carries some information, though the 'paid API from the browser' line is more about implementation posture than tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a required, undocumented nested payload, four service modes and no output schema, the description is inadequate. It omits the per-service payload contract entirely, which is the single most important thing an agent needs to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the payload is an untyped nested object with no field documentation anywhere. The description's mention of search/details/link previews loosely maps to the service enum, but says nothing about the required 'payload' shape for each service, leaving the caller to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the concrete capabilities (Places search/details and link previews) that map onto the four enum service values, so the agent knows what the tool fetches. However, it never reconciles this with the tool's own name 'widget_lookup' and offers no explicit differentiation from siblings like add_place or find_plan_mentions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus add_place, vote_place, or any other sibling. The only constraint offered ('Never calls a paid API from the browser') is an implementation note about the backend, not guidance on when an agent should select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
widget_select_participantChoose your nameCRead-onlyInspect
App-only identity picker. Bind the name explicitly selected in the shared web UI. Does not change schedule data.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | ||
| participant_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is mostly covered. The description adds the useful scoping note that it does not touch schedule data, which reconciles the read-only hint with the verb "bind", but it says nothing about permissions, the open-world behavior it triggers, or persistence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with the key qualifier ("App-only") first and the negative constraint last. No filler, though it is arguably under-specified rather than maximally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema and no parameter docs, the description leaves major gaps: what plan is, what participant_id is, and what binding produces. The annotations carry safety but there is no return or behavior detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and both required parameters (plan, participant_id) are undocumented in the schema. The description vaguely refers to "the name" but never explains what plan or participant_id are or how they relate to the selected name, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It labels itself an "App-only identity picker" and says it binds the name selected in the shared web UI, which conveys the general intent. However, the operative verb is ambiguous ("bind") and it never states what resource is being set (a session identity? a plan participant?) in a way that clearly separates it from siblings like widget_lookup or join_plan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"App-only" and "explicitly selected in the shared web UI" imply the context in which this applies, and "Does not change schedule data" rules out one class of expectations. But no alternative tool is named and there is no explicit when-to-use/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
widget_writeSave from the plannerCDestructiveInspect
App-only transport for explicit interactions with shared web components. Reuses the web write gateway, validation and budgets. Requires the selected participant token for saved-plan edits.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | No | ||
| payload | Yes | ||
| operation | Yes | ||
| participant_id | No | ||
| participant_token | No | ||
| target_participant_id | No | ||
| target_participant_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveRewrite behavior (readOnlyHint=false, destructiveHint=true, openWorldHint=true). The description adds genuine context beyond these: it reuses the 'web write gateway, validation and budgets' (signalling validation/budget enforcement) and requires a participant token for auth. That is useful, but it stops short of stating what gets destroyed or what the return shape is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no obvious padding, and the app-only/transport nature is front-loaded. However, the sentences are dense with internal jargon that reduces usable signal per sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 7-parameter mutation tool with nested objects, no output schema and only partial annotation coverage, the description is far too thin. It omits operation semantics, payload structure, the ID-vs-token distinctions, and any result/error behavior an agent would need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 7 parameters and 0% schema description coverage, the description must carry the load, but it only gestures at participant_token and 'saved-plan' (plan). It never explains operation, payload, participant_id, target_participant_id, or target_participant_token, leaving most parameters undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The name 'widget_write' and title 'Save from the planner' suggest a write/save operation, but the description calls it an 'App-only transport for explicit interactions with shared web components', which is jargon that does not clearly state a verb+resource. It never says what is being written or saved, so an agent cannot confidently distinguish it from widget_lookup or widget_select_participant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage hint is 'Requires the selected participant token for saved-plan edits', which implies a prior widget_select_participant step and a saved-plan context, but there is no explicit when-to-use/when-not-to-use guidance or named alternative among the many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
add_checklist_item1 field changed- changed
Input schema / properties / text / descriptionPrevious value: -"Item text (max 500 chars)."New value: +"One independently checkable item, single line, max 500 chars. Not a list of multiple tasks/ingredients."
1 tool update
- Changed
open_planner2 fields changed- added
Input schema / properties / participant_idAdded value: +{ + "description": "Previously selected participant in this plan; requires participant_token.", + "type": "string" +} - added
Input schema / properties / participant_tokenAdded value: +{ + "description": "Token returned by join_plan/create_plan for this participant and plan; requires participant_id.", + "type": "string" +}
3 tool updates
- Changed
add_place4 fields changed- added
Input schema / properties / google_place_idAdded value: +{ + "description": "Exact place ID from returned Google candidates; official details are loaded server-side (max 160 chars).", + "type": "string" +} - changed
Input schema / properties / name / descriptionPrevious value: -"Place name exactly as supplied, including accents (max 300 chars)."New value: +"Requested place name, including accents (max 300 chars). A selected Google result supplies its official name." - added
Input schema / properties / queryAdded value: +{ + "description": "Optional Google autocomplete query including the known city/address (max 160 chars); otherwise name/address are used.", + "type": "string" +} - added
Input schema / properties / sourceAdded value: +{ + "description": "Default auto uses Google first. Manual explicitly saves the supplied name/address/link without a paid lookup.", + "enum": [ + "auto", + "manual" + ], + "type": "string" +}
- Changed
create_plan4 fields changed- changed
Input schema / properties / request_id / descriptionPrevious value: -"Optional UUID v4 for an atomic create with your_name. Keep the same UUID and fields on retry; never reuse it for a different plan."New value: +"Optional UUID v4 for atomic creation. An identical UUID and identical fields (including omissions) replay the same creation; a changed payload is rejected." - changed
Input schema / properties / title / descriptionPrevious value: -"Short plan name, e.g. \"Weekend at the cabin\" (max 120 chars)."New value: +"User-supplied short plan name (max 120 chars). Omitted when unknown; temporary Event label until collected after the requested action." - changed
Input schema / properties / your_name / descriptionPrevious value: -"Name of the person you act for; adds them as the first participant (max 80 chars)."New value: +"User-supplied participant name (max 80 chars). Omitted when unknown; temporary Organizer participant until their name is collected after the requested action." - changed
Input schema / requiredPrevious value: -[ - "title" -]New value: +[]
- Changed
join_plan4 fields changed- added
Input schema / properties / existing_participant_idAdded value: +{ + "description": "Exact existing participant ID from get_plan or received user UI selection; requires selection=existing and matching name. No rename.", + "type": "string" +} - added
Input schema / properties / participant_idAdded value: +{ + "description": "From create_plan or join_plan.", + "type": "string" +} - added
Input schema / properties / participant_tokenAdded value: +{ + "description": "From create_plan or join_plan.", + "type": "string" +} - added
Input schema / properties / selectionAdded value: +{ + "description": "Without credentials: auto matches or adds; existing never adds; new never takes another person's matching name. Default auto.", + "enum": [ + "auto", + "existing", + "new" + ], + "type": "string" +}
Related MCP Connectors
Plan group events together: dates, itineraries, expenses, polls, and tasks.
Free no-signup group scheduling (a modern When2meet): share one link, find a time for everyone.
Free no-signup group scheduling; share a link and rank times by who's free.
Find a date with a group: polls, rosters, RSVPs and sign-ups, run by your assistant.
1
Related MCP Servers
- AlicenseNot gradedqualityAmaintenancewhen2meet-style scheduling polls — self-hostable, reverse-proxy-auth friendly, agent-first API (OpenAPI + llms.txt + MCP).MIT
- AlicenseAqualityCmaintenanceCreate scheduling polls (like Doodle) from AI agents. Find the best time for meetings, dinners, and events. 5 tools: create_poll, get_poll, vote_on_poll, get_results, finalize_poll. No authentication required.561 npm1MIT
- -
- FlicenseNot gradedqualityDmaintenanceEvent discovery based on your actual schedule, location, and who's free -- delivered inside iMessage via Poke.-
Glama MCP Gateway
Add one secure layer between your agents and this server.