lesgooo.fun

Free no-signup group planner: dates, RSVPs, place votes, shared checklist and split costs.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
87%
Naming quality
96%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • LOWTool 'vote_place' description lacks action verbin vote_place
  • LOWTool 'widget_select_participant' description lacks action verbin widget_select_participant

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~5,447Tokens (tool definitions)
~1.9 KBTypical response size
Significant attention impact (4.26% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "lesgooo": {
      "url": "https://lesgooo.fun/mcp"
    }
  }
}

Remote endpoints

https://lesgooo.fun/mcpstreamable-http

What it can do

Tool inventory

Tools (23)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡create_plan(title, request_id, your_name)

Creates a new saved lesgooo group plan with the user as its first participant. Use when the user wants to start planning something new. Returns the shareable plan links and the participant's private credentials (participant_id, participant_token) needed for later changes. Title and name are optional. Sends no invitations or notifications.

Input Schema

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "description": "User-supplied short plan name (max 120 chars). Omitted when unknown; temporary Event label until collected after the requested action."
    },
    "request_id": {
      "type": "string",
      "description": "Optional UUID v4 for atomic creation. An identical UUID and identical fields (including omissions) replay the same creation; a changed payload is rejected."
    },
    "your_name": {
      "type": "string",
      "description": "User-supplied participant name (max 80 chars). Omitted when unknown; temporary Organizer participant until their name is collected after the requested action."
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢get_plan(plan, include_all_dates, time_zone, since)

Reads a saved plan: title, Event details, participants with their all-day and exact-time availability and RSVP answers, best dates and shared free-time windows, suggested places with votes, and the currency. Use when the user shares a plan link or asks about a plan's current state. time_zone resolves today's date; since returns changes after an earlier server_time.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character plan ID. Links without a plan ID (e.g. https://lesgooo.fun/when) are unsaved local drafts and are not accepted."
    },
    "include_all_dates": {
      "type": "boolean",
      "description": "For calendar UI: return all dates within the existing bounded read budget, instead of the concise first 60 per person."
    },
    "time_zone": {
      "type": "string",
      "description": "The user's IANA time zone, e.g. Europe/Prague."
    },
    "since": {
      "type": "string",
      "description": "Optional ISO timestamp (server_time from an earlier get_plan)."
    }
  },
  "required": [
    "plan"
  ],
  "additionalProperties": false
}
🔴join_plan(plan, name, selection, existing_participant_id, participant_id, ...)

Adds the user to a saved plan under their name, or selects the existing participant with that name, and returns that person's private credentials. Use when the user wants to take part in an existing plan or act as a specific participant in it. With existing credentials it renames that same participant instead. It does not verify identity or grant organizer rights.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character plan ID. Links without a plan ID (e.g. https://lesgooo.fun/when) are unsaved local drafts and are not accepted."
    },
    "name": {
      "type": "string",
      "description": "The person's name as the group knows them (max 80 chars)."
    },
    "selection": {
      "type": "string",
      "enum": [
        "auto",
        "existing",
        "new"
      ],
      "description": "Without credentials: auto matches or adds; existing never adds; new never takes another person's matching name. Default auto."
    },
    "existing_participant_id": {
      "type": "string",
      "description": "Exact existing participant ID from get_plan or received user UI selection; requires selection=existing and matching name. No rename."
    },
    "participant_id": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "participant_token": {
      "type": "string",
      "description": "From create_plan or join_plan."
    }
  },
  "required": [
    "plan",
    "name"
  ],
  "additionalProperties": false
}
🔴set_availability(plan, participant_id, participant_token, dates, time_slots, ...)

Changes one participant's availability: all-day dates and/or exact free-time windows (ISO start and end with offset, plus the IANA time_zone). mode=add merges, remove subtracts, replace overwrites. Use when the user says which days or hours they are or are no longer free. It does not set the agreed Event date or an RSVP.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character plan ID. Links without a plan ID (e.g. https://lesgooo.fun/when) are unsaved local drafts and are not accepted."
    },
    "participant_id": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "participant_token": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "dates": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
      },
      "maxItems": 370
    },
    "time_slots": {
      "type": "array",
      "maxItems": 300,
      "description": "Optional exact windows. For hours-only changes pass dates=[] and mode=add/remove; replace changes the entire availability. End is exclusive.",
      "items": {
        "type": "object",
        "properties": {
          "start": {
            "type": "string",
            "description": "ISO timestamp with Z or UTC offset."
          },
          "end": {
            "type": "string",
            "description": "ISO timestamp with Z or UTC offset, after start, max 7 days."
          }
        },
        "required": [
          "start",
          "end"
        ],
        "additionalProperties": false
      }
    },
    "time_zone": {
      "type": "string",
      "description": "The user's IANA time zone, e.g. Europe/Prague."
    },
    "mode": {
      "type": "string",
      "enum": [
        "replace",
        "add",
        "remove"
      ],
      "description": "add/remove change supplied days/windows; replace is a full replacement when time_slots is supplied. Default replace (legacy all-day behavior)."
    }
  },
  "required": [
    "plan",
    "participant_id",
    "participant_token",
    "dates"
  ],
  "additionalProperties": false
}
🔴set_rsvp(plan, participant_id, participant_token, status, occurrence_date)

Records whether the participant is coming to the plan's Event: yes, no, or clear to remove the answer. For a repeating event it answers one occurrence (the next one by default, or occurrence_date). Use when the user says they are or are not attending.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character plan ID. Links without a plan ID (e.g. https://lesgooo.fun/when) are unsaved local drafts and are not accepted."
    },
    "participant_id": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "participant_token": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "status": {
      "type": "string",
      "enum": [
        "yes",
        "no",
        "clear"
      ]
    },
    "occurrence_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Repeating events only: the date of the occurrence to answer for."
    }
  },
  "required": [
    "plan",
    "participant_id",
    "participant_token",
    "status"
  ],
  "additionalProperties": false
}
🟡add_place(plan, participant_id, participant_token, name, query, ...)

Suggests a place for the group to vote on (Where). By default it searches Google Places and returns up to five candidates without saving (status needs_selection); calling it again with the chosen google_place_id saves the place with its official details, map link and photo. source=manual saves a supplied name, address or link without a lookup. Duplicates are merged. Use when the user proposes a venue or destination.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character plan ID. Links without a plan ID (e.g. https://lesgooo.fun/when) are unsaved local drafts and are not accepted."
    },
    "participant_id": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "participant_token": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "name": {
      "type": "string",
      "description": "Requested place name, including accents (max 300 chars). A selected Google result supplies its official name."
    },
    "query": {
      "type": "string",
      "description": "Optional Google autocomplete query including the known city/address (max 160 chars); otherwise name/address are used."
    },
    "google_place_id": {
      "type": "string",
      "description": "Exact place ID from returned Google candidates; official details are loaded server-side (max 160 chars)."
    },
    "source": {
      "type": "string",
      "enum": [
        "auto",
        "manual"
      ],
      "description": "Default auto uses Google first. Manual explicitly saves the supplied name/address/link without a paid lookup."
    },
    "address": {
      "type": "string",
      "description": "Optional address (max 500 chars)."
    },
    "google_maps_url": {
      "type": "string",
      "description": "Optional Google Maps link (google.com/maps or maps.app.goo.gl). Links with coordinates (…/@50.08,14.42,…) also show a map preview."
    },
    "link": {
      "type": "string",
      "description": "Optional link to any other page about the place (http/https), instead of google_maps_url."
    }
  },
  "required": [
    "plan",
    "participant_id",
    "participant_token",
    "name"
  ],
  "additionalProperties": false
}
🔴vote_place(plan, participant_id, participant_token, place_id, vote)

Up-votes, down-votes or clears the participant's vote on a suggested place. Use when the user expresses a preference for or against a place in the plan.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character plan ID. Links without a plan ID (e.g. https://lesgooo.fun/when) are unsaved local drafts and are not accepted."
    },
    "participant_id": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "participant_token": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "place_id": {
      "type": "string",
      "description": "From get_plan places[].place_id or add_place (the exact place name also works)."
    },
    "vote": {
      "type": "string",
      "enum": [
        "up",
        "down",
        "clear"
      ]
    }
  },
  "required": [
    "plan",
    "participant_id",
    "participant_token",
    "place_id",
    "vote"
  ],
  "additionalProperties": false
}
🟢get_checklist(plan)

Reads the plan's shared checklist: open and done items with their item_id. Use when the user asks what still needs doing or what is on the list.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character plan ID. Links without a plan ID (e.g. https://lesgooo.fun/when) are unsaved local drafts and are not accepted."
    }
  },
  "required": [
    "plan"
  ],
  "additionalProperties": false
}
🟡add_checklist_item(plan, participant_id, participant_token, text)

Adds one item to the plan's shared checklist: one task, ingredient or thing to bring per call. Use when the user wants something added to the to-do or packing list.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character plan ID. Links without a plan ID (e.g. https://lesgooo.fun/when) are unsaved local drafts and are not accepted."
    },
    "participant_id": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "participant_token": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "text": {
      "type": "string",
      "description": "One independently checkable item, single line, max 500 chars. Not a list of multiple tasks/ingredients."
    }
  },
  "required": [
    "plan",
    "participant_id",
    "participant_token",
    "text"
  ],
  "additionalProperties": false
}
🔴check_item(plan, participant_id, participant_token, item_id, done)

Marks a checklist item done (done=true) or open again (done=false). Use when the user says a task is finished or needs reopening.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character plan ID. Links without a plan ID (e.g. https://lesgooo.fun/when) are unsaved local drafts and are not accepted."
    },
    "participant_id": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "participant_token": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "item_id": {
      "type": "string",
      "description": "From get_checklist or add_checklist_item (the exact item text also works)."
    },
    "done": {
      "type": "boolean"
    }
  },
  "required": [
    "plan",
    "participant_id",
    "participant_token",
    "item_id",
    "done"
  ],
  "additionalProperties": false
}
🔴update_event(plan, participant_id, participant_token, title, start_date, ...)

Updates the shared Event details everyone sees: title, date and time (local time, no time zone; no start_time means all day), location and description. Omitted fields stay unchanged; an empty string clears a field. Use when the user sets or changes the agreed event details or renames the plan.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character plan ID. Links without a plan ID (e.g. https://lesgooo.fun/when) are unsaved local drafts and are not accepted."
    },
    "participant_id": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "participant_token": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "title": {
      "type": "string",
      "description": "Plan / event name (max 120 chars)."
    },
    "start_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "start_time": {
      "type": "string",
      "pattern": "^\\d{2}:\\d{2}$",
      "description": "HH:MM, local time."
    },
    "end_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "end_time": {
      "type": "string",
      "pattern": "^\\d{2}:\\d{2}$"
    },
    "location": {
      "type": "string",
      "description": "Place as plain text (max 500 chars)."
    },
    "description": {
      "type": "string",
      "description": "Details for the group (max 4000 chars)."
    }
  },
  "required": [
    "plan",
    "participant_id",
    "participant_token"
  ],
  "additionalProperties": false
}
🟢get_expenses(plan)

Reads the plan's shared costs: recorded expenses and payments, each participant's balance and the suggested transfers to settle up, in the plan's currency. Use when the user asks who paid what or who owes whom.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character plan ID. Links without a plan ID (e.g. https://lesgooo.fun/when) are unsaved local drafts and are not accepted."
    }
  },
  "required": [
    "plan"
  ],
  "additionalProperties": false
}
🟡add_expense(plan, participant_id, participant_token, description, amount, ...)

Records a shared expense split equally: description, amount, currency, who paid (defaults to the participant) and who shares it (defaults to everyone). It records the cost only and moves no money. Use when the user reports something they or someone in the group paid for.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character plan ID. Links without a plan ID (e.g. https://lesgooo.fun/when) are unsaved local drafts and are not accepted."
    },
    "participant_id": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "participant_token": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "description": {
      "type": "string",
      "description": "What it was for, e.g. \"Groceries\" (max 120 chars)."
    },
    "amount": {
      "type": "number",
      "description": "Total, max 2 decimals (e.g. 42.5). Send a plain number."
    },
    "currency": {
      "type": "string",
      "description": "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)."
    },
    "paid_by_participant_id": {
      "type": "string",
      "description": "Who paid (participant_id from get_plan, or their exact name). Defaults to you."
    },
    "split_among": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Who shares the cost (participant_id values or exact names). Defaults to everyone."
    },
    "allow_duplicate": {
      "type": "boolean",
      "description": "Only if the user confirms a second, identical expense within 10 minutes (otherwise it is treated as a retry)."
    }
  },
  "required": [
    "plan",
    "participant_id",
    "participant_token",
    "description",
    "amount"
  ],
  "additionalProperties": false
}
⚪record_payment(plan, participant_id, participant_token, to_participant_id, amount, ...)

Records that the participant has already paid someone back (settling up); the amount defaults to what they owe that person. It records a completed payment only and moves no money. Use when the user says the money was actually sent.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character plan ID. Links without a plan ID (e.g. https://lesgooo.fun/when) are unsaved local drafts and are not accepted."
    },
    "participant_id": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "participant_token": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "to_participant_id": {
      "type": "string",
      "description": "Who received the money (participant_id, or their exact name)."
    },
    "amount": {
      "type": "number",
      "description": "Optional; defaults to the suggested settle-up amount."
    },
    "allow_duplicate": {
      "type": "boolean",
      "description": "Only if the user confirms a second, identical payment within 10 minutes (otherwise it is treated as a retry)."
    }
  },
  "required": [
    "plan",
    "participant_id",
    "participant_token",
    "to_participant_id"
  ],
  "additionalProperties": false
}
🔴remove_entry(plan, participant_id, participant_token, kind, id)

Deletes an expense, payment, checklist item or place that this participant added; entries added by others cannot be removed. Use when the user asks to delete a specific entry, for example to correct a mistake.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string",
      "description": "Saved plan link (e.g. https://lesgooo.fun/ab12/when) or its 4-character plan ID. Links without a plan ID (e.g. https://lesgooo.fun/when) are unsaved local drafts and are not accepted."
    },
    "participant_id": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "participant_token": {
      "type": "string",
      "description": "From create_plan or join_plan."
    },
    "kind": {
      "type": "string",
      "enum": [
        "expense",
        "payment",
        "checklist_item",
        "place"
      ]
    },
    "id": {
      "type": "string",
      "description": "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."
    }
  },
  "required": [
    "plan",
    "participant_id",
    "participant_token",
    "kind",
    "id"
  ],
  "additionalProperties": false
}
🔴widget_write(operation, payload, plan, participant_id, participant_token, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "operation": {
      "type": "string"
    },
    "payload": {
      "type": "object"
    },
    "plan": {
      "type": "string"
    },
    "participant_id": {
      "type": "string"
    },
    "participant_token": {
      "type": "string"
    },
    "target_participant_id": {
      "type": "string"
    },
    "target_participant_token": {
      "type": "string"
    }
  },
  "required": [
    "operation",
    "payload"
  ],
  "additionalProperties": false
}
🟢widget_select_participant(plan, participant_id)

App-only identity picker. Bind the name explicitly selected in the shared web UI. Does not change schedule data.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string"
    },
    "participant_id": {
      "type": "string"
    }
  },
  "required": [
    "plan",
    "participant_id"
  ],
  "additionalProperties": false
}
🟢widget_lookup(service, payload)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "service": {
      "type": "string",
      "enum": [
        "fetchPlacesAutocompleteV2",
        "fetchPlaceDetailsV2",
        "fetchLinkPreviewV2",
        "fetchPreviewImage"
      ]
    },
    "payload": {
      "type": "object"
    }
  },
  "required": [
    "service",
    "payload"
  ],
  "additionalProperties": false
}
🟢open_planner(plan, module, participant_id, participant_token)

Opens the interactive lesgooo planner (When, Where, Event, Checklist, Splitwise) in the conversation, optionally on a saved plan and module and as a previously selected participant. Without a plan it shows an unsaved local draft. Opening saves nothing. Use when the user wants to see or edit the plan visually.

Input Schema

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "string"
    },
    "module": {
      "type": "string",
      "enum": [
        "when",
        "where",
        "rsvp",
        "checklist",
        "splitwise"
      ]
    },
    "participant_id": {
      "type": "string",
      "description": "Previously selected participant in this plan; requires participant_token."
    },
    "participant_token": {
      "type": "string",
      "description": "Token returned by join_plan/create_plan for this participant and plan; requires participant_id."
    }
  },
  "additionalProperties": false
}
🟢find_plan_mentions(query)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 300
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
🟢open_preferences

Open local widget preferences. Defaults and recent history stay on this device; does not change a shared plan.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢read_plugin_settings

Read the plugin settings layout. There are no account settings; the action opens device-local preferences.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "schema": {
      "type": "object"
    },
    "values": {
      "type": "object"
    },
    "layout": {
      "type": "array",
      "items": {
        "type": "object"
      }
    }
  },
  "required": [
    "schema",
    "values"
  ]
}
🟢update_plugin_settings(set)

No primitive account settings are available. An empty update is a no-op; device preferences are changed in the widget.

Input Schema

{
  "type": "object",
  "properties": {
    "set": {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
  },
  "required": [
    "set"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "values": {
      "type": "object"
    }
  },
  "required": [
    "values"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded23 tools
verifiedversion not recorded23 tools
verifiedversion not recorded24 tools
verifiedversion not recorded24 tools
verifiedversion not recorded15 tools
verifiedversion not recorded15 tools