← WebMCP Directory

Tool tree

localbuzz.modeless.io

Travel & EventsTools verified
Website
Local Buzz — shape and repair a live Stockholm evening with your personal agent.
Explore capabilities
    propose_event_from_urlAction

    Submit structured facts already read by the browser agent from a public HTTPS event or venue page. Local Buzz validates and creates a discovery lead immediately; it never fetches the URL, publishes canonically, or changes a night automatically.

    View tool JSON
    {
      "name": "propose_event_from_url",
      "kind": "act",
      "impl": "imperative",
      "description": "Submit structured facts already read by the browser agent from a public HTTPS event or venue page. Local Buzz validates and creates a discovery lead immediately; it never fetches the URL, publishes canonically, or changes a night automatically.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "cityId": {
            "type": "string",
            "enum": [
              "stockholm",
              "san-francisco"
            ]
          },
          "sourceUrl": {
            "type": "string",
            "format": "uri",
            "maxLength": 2048
          },
          "sourceType": {
            "type": "string",
            "enum": [
              "official_page",
              "venue_calendar",
              "ticket_page",
              "editorial_page",
              "other_public_page"
            ]
          },
          "evidence": {
            "type": "array",
            "minItems": 1,
            "maxItems": 30,
            "items": {
              "type": "object",
              "properties": {
                "field": {
                  "type": "string",
                  "maxLength": 80
                },
                "sourceUrl": {
                  "type": "string",
                  "format": "uri",
                  "maxLength": 2048
                },
                "note": {
                  "type": "string",
                  "maxLength": 500
                }
              },
              "required": [
                "field",
                "sourceUrl"
              ],
              "additionalProperties": false
            }
          },
          "fields": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "maxLength": 300
              },
              "description": {
                "type": "string",
                "maxLength": 5000
              },
              "category": {
                "type": "string",
                "enum": [
                  "live_music",
                  "club",
                  "comedy",
                  "food_drink",
                  "culture",
                  "film",
                  "talk",
                  "market",
                  "activity",
                  "other"
                ]
              },
              "venue": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 300
                  },
                  "address": {
                    "type": "string",
                    "maxLength": 500
                  },
                  "neighborhood": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "lat": {
                    "type": "number"
                  },
                  "lng": {
                    "type": "number"
                  }
                },
                "additionalProperties": false
              },
              "timing": {
                "type": "object",
                "properties": {
                  "start": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "end": {
                    "type": "string",
                    "format": "date-time"
                  }
                },
                "additionalProperties": false
              },
              "commerce": {
                "type": "object",
                "properties": {
                  "priceMin": {
                    "type": "number",
                    "minimum": 0
                  },
                  "priceMax": {
                    "type": "number",
                    "minimum": 0
                  },
                  "currency": {
                    "type": "string",
                    "enum": [
                      "SEK",
                      "USD"
                    ]
                  },
                  "bookingUrl": {
                    "type": "string",
                    "format": "uri"
                  }
                },
                "additionalProperties": false
              },
              "availability": {
                "type": "string",
                "enum": [
                  "unknown",
                  "available",
                  "limited",
                  "sold_out",
                  "cancelled",
                  "walk_in"
                ]
              },
              "performer": {
                "type": "string",
                "maxLength": 300
              },
              "organizer": {
                "type": "string",
                "maxLength": 300
              }
            },
            "additionalProperties": false
          }
        },
        "required": [
          "cityId",
          "sourceUrl",
          "sourceType",
          "fields",
          "evidence"
        ],
        "additionalProperties": false
      }
    }
    propose_place_from_urlAction

    Submit structured restaurant, bar, club or cafe facts already read from a public HTTPS page. Local Buzz creates a provisional discovery lead with missing-field and duplicate warnings; it does not fetch the URL, publish the Place, or change a night.

    View tool JSON
    {
      "name": "propose_place_from_url",
      "kind": "act",
      "impl": "imperative",
      "description": "Submit structured restaurant, bar, club or cafe facts already read from a public HTTPS page. Local Buzz creates a provisional discovery lead with missing-field and duplicate warnings; it does not fetch the URL, publish the Place, or change a night.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "cityId": {
            "type": "string",
            "enum": [
              "stockholm",
              "san-francisco"
            ]
          },
          "sourceUrl": {
            "type": "string",
            "format": "uri",
            "maxLength": 2048
          },
          "sourceType": {
            "type": "string",
            "enum": [
              "official_page",
              "venue_calendar",
              "ticket_page",
              "editorial_page",
              "other_public_page"
            ]
          },
          "evidence": {
            "type": "array",
            "minItems": 1,
            "maxItems": 30,
            "items": {
              "type": "object",
              "properties": {
                "field": {
                  "type": "string",
                  "maxLength": 80
                },
                "sourceUrl": {
                  "type": "string",
                  "format": "uri",
                  "maxLength": 2048
                },
                "note": {
                  "type": "string",
                  "maxLength": 500
                }
              },
              "required": [
                "field",
                "sourceUrl"
              ],
              "additionalProperties": false
            }
          },
          "fields": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 300
              },
              "officialWebsite": {
                "type": "string",
                "format": "uri"
              },
              "reservationUrl": {
                "type": "string",
                "format": "uri"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "restaurant",
                  "bar",
                  "pub",
                  "cocktail_lounge",
                  "wine_bar",
                  "music_bar",
                  "club",
                  "cafe"
                ]
              },
              "location": {
                "type": "object",
                "properties": {
                  "address": {
                    "type": "string",
                    "maxLength": 500
                  },
                  "neighborhood": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "lat": {
                    "type": "number"
                  },
                  "lng": {
                    "type": "number"
                  }
                },
                "additionalProperties": false
              },
              "cuisine": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "maxItems": 20
              },
              "drinkFocus": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "maxItems": 20
              },
              "moodTags": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "maxItems": 20
              },
              "bestFor": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "dinner",
                    "quick_bite",
                    "drinks",
                    "late_drinks"
                  ]
                }
              },
              "typicalVisitDurationMinutes": {
                "type": "integer",
                "minimum": 15,
                "maximum": 480
              },
              "priceRange": {
                "type": "object",
                "properties": {
                  "min": {
                    "type": "number",
                    "minimum": 0
                  },
                  "max": {
                    "type": "number",
                    "minimum": 0
                  },
                  "currency": {
                    "type": "string",
                    "enum": [
                      "SEK",
                      "USD"
                    ]
                  },
                  "basis": {
                    "type": "string",
                    "const": "per_person"
                  },
                  "band": {
                    "type": "string",
                    "enum": [
                      "budget",
                      "moderate",
                      "premium",
                      "unknown"
                    ]
                  },
                  "evidence": {
                    "type": "string",
                    "enum": [
                      "official_menu",
                      "provider_estimate",
                      "unknown"
                    ]
                  },
                  "evidenceUrl": {
                    "type": "string",
                    "format": "uri"
                  }
                },
                "required": [
                  "currency",
                  "basis",
                  "band",
                  "evidence"
                ],
                "additionalProperties": false
              },
              "weeklyHours": {
                "type": "object",
                "properties": {
                  "monday": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "opensAt": {
                          "type": "string",
                          "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        "closesAt": {
                          "type": "string",
                          "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        "closesNextDay": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "opensAt",
                        "closesAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "tuesday": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "opensAt": {
                          "type": "string",
                          "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        "closesAt": {
                          "type": "string",
                          "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        "closesNextDay": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "opensAt",
                        "closesAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "wednesday": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "opensAt": {
                          "type": "string",
                          "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        "closesAt": {
                          "type": "string",
                          "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        "closesNextDay": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "opensAt",
                        "closesAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "thursday": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "opensAt": {
                          "type": "string",
                          "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        "closesAt": {
                          "type": "string",
                          "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        "closesNextDay": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "opensAt",
                        "closesAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "friday": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "opensAt": {
                          "type": "string",
                          "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        "closesAt": {
                          "type": "string",
                          "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        "closesNextDay": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "opensAt",
                        "closesAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "saturday": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "opensAt": {
                          "type": "string",
                          "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        "closesAt": {
                          "type": "string",
                          "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        "closesNextDay": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "opensAt",
                        "closesAt"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "sunday": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "opensAt": {
                          "type": "string",
                          "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        "closesAt": {
                          "type": "string",
                          "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$"
                        },
                        "closesNextDay": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "opensAt",
                        "closesAt"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "additionalProperties": false
              },
              "openingHoursEvidence": {
                "type": "object",
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "verified",
                      "unknown"
                    ]
                  },
                  "sourceUrl": {
                    "type": "string",
                    "format": "uri"
                  },
                  "checkedAt": {
                    "type": "string",
                    "format": "date-time"
                  }
                },
                "required": [
                  "status",
                  "checkedAt"
                ],
                "additionalProperties": false
              },
              "exceptionalHours": {
                "type": "object",
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "none_known",
                      "confirmed",
                      "unknown"
                    ]
                  },
                  "note": {
                    "type": "string",
                    "maxLength": 500
                  }
                },
                "required": [
                  "status"
                ],
                "additionalProperties": false
              },
              "reservationMode": {
                "type": "string",
                "enum": [
                  "required",
                  "recommended",
                  "available",
                  "walk_in",
                  "unknown"
                ]
              }
            },
            "additionalProperties": false
          }
        },
        "required": [
          "cityId",
          "sourceUrl",
          "sourceType",
          "fields",
          "evidence"
        ],
        "additionalProperties": false
      }
    }
    search_happeningsAnswer

    Search Local Buzz's structured inventory for the city currently selected by the human, using time, budget, category, text, and distance constraints. Use this before showing candidates or building the itinerary. Search results are not added automatically.

    View tool JSON
    {
      "name": "search_happenings",
      "kind": "answer",
      "impl": "imperative",
      "description": "Search Local Buzz's structured inventory for the city currently selected by the human, using time, budget, category, text, and distance constraints. Use this before showing candidates or building the itinerary. Search results are not added automatically.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Mood, category, venue, or free-text intent."
          },
          "startAfter": {
            "type": "string",
            "format": "date-time"
          },
          "endBefore": {
            "type": "string",
            "format": "date-time"
          },
          "maxPrice": {
            "type": "number",
            "minimum": 0,
            "description": "Maximum price per person in the active city's currency."
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "live_music",
                "club",
                "comedy",
                "food_drink",
                "culture",
                "film",
                "talk",
                "market",
                "activity",
                "other"
              ]
            }
          },
          "happeningKinds": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "scheduled_event",
                "live_signal",
                "venue_activity",
                "pop_up",
                "city_condition",
                "community_report"
              ]
            },
            "description": "Optional canonical or social-pulse kinds."
          },
          "minBuzzScore": {
            "type": "number",
            "minimum": 0,
            "maximum": 100,
            "description": "Minimum deterministic Buzz Score. Events without social support score zero."
          },
          "actionableNow": {
            "type": "boolean",
            "description": "When true, return only records backed by current actionable social evidence."
          },
          "near": {
            "type": "object",
            "properties": {
              "lat": {
                "type": "number"
              },
              "lng": {
                "type": "number"
              }
            },
            "required": [
              "lat",
              "lng"
            ],
            "additionalProperties": false
          },
          "maxDistanceKm": {
            "type": "number",
            "minimum": 0
          },
          "maxResults": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20
          }
        },
        "additionalProperties": false
      }
    }
    show_candidatesAction

    Make specific happening IDs visibly prominent on the shared map and card grid. Use after search_happenings so the human can visually inspect and reject options.

    View tool JSON
    {
      "name": "show_candidates",
      "kind": "act",
      "impl": "imperative",
      "description": "Make specific happening IDs visibly prominent on the shared map and card grid. Use after search_happenings so the human can visually inspect and reject options.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "happeningIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "maxItems": 20
          },
          "reason": {
            "type": "string",
            "description": "Short explanation visible above the candidates."
          }
        },
        "required": [
          "happeningIds"
        ],
        "additionalProperties": false
      }
    }
    search_placesAnswer

    Search the canonical Local Buzz place catalog by text, kind, purpose, price, open time and distance. Results retain source evidence and checked dates.

    View tool JSON
    {
      "name": "search_places",
      "kind": "answer",
      "impl": "imperative",
      "description": "Search the canonical Local Buzz place catalog by text, kind, purpose, price, open time and distance. Results retain source evidence and checked dates.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string"
          },
          "kinds": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "restaurant",
                "bar",
                "pub",
                "cocktail_lounge",
                "wine_bar",
                "music_bar",
                "club",
                "cafe"
              ]
            }
          },
          "purposes": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "dinner",
                "quick_bite",
                "drinks",
                "late_drinks"
              ]
            }
          },
          "moods": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "neighborhoods": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "openAt": {
            "type": "string",
            "format": "date-time"
          },
          "maxPrice": {
            "type": "number",
            "minimum": 0
          },
          "near": {
            "type": "object",
            "properties": {
              "lat": {
                "type": "number"
              },
              "lng": {
                "type": "number"
              }
            },
            "required": [
              "lat",
              "lng"
            ],
            "additionalProperties": false
          },
          "maxDistanceKm": {
            "type": "number",
            "minimum": 0
          },
          "maxResults": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20
          }
        },
        "additionalProperties": false
      }
    }
    show_place_candidatesAction

    Make canonical place IDs visible on the same shared map and place-card surface used by the human.

    View tool JSON
    {
      "name": "show_place_candidates",
      "kind": "act",
      "impl": "imperative",
      "description": "Make canonical place IDs visible on the same shared map and place-card surface used by the human.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "placeIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "maxItems": 20
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "placeIds"
        ],
        "additionalProperties": false
      }
    }
    read_place_detailsAnswer

    Read one Place record including typed hours, service cutoffs, price, evidence, provenance and checked dates before adding it.

    View tool JSON
    {
      "name": "read_place_details",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read one Place record including typed hours, service cutoffs, price, evidence, provenance and checked dates before adding it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "placeId": {
            "type": "string"
          }
        },
        "required": [
          "placeId"
        ],
        "additionalProperties": false
      }
    }
    add_place_stopAction

    Add a dinner, quick-bite or drinks stop to the active itinerary. The shared domain validates purpose, hours, duration, party-size cost, currency, overlap and latest end before updating the visible plan.

    View tool JSON
    {
      "name": "add_place_stop",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a dinner, quick-bite or drinks stop to the active itinerary. The shared domain validates purpose, hours, duration, party-size cost, currency, overlap and latest end before updating the visible plan.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "placeId": {
            "type": "string"
          },
          "purpose": {
            "type": "string",
            "enum": [
              "dinner",
              "quick_bite",
              "drinks",
              "late_drinks"
            ]
          },
          "plannedStart": {
            "type": "string",
            "format": "date-time"
          },
          "budget": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "description": "Optional total party budget. Omit or use null when the user has not set a spending cap."
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "placeId",
          "purpose",
          "plannedStart"
        ],
        "additionalProperties": false
      }
    }
    add_custom_place_stopAction

    Add a custom place to the active itinerary using explicit location, duration, per-person price, currency and stated availability. Local Buzz validates the assumptions but does not add the place to the canonical catalog.

    View tool JSON
    {
      "name": "add_custom_place_stop",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a custom place to the active itinerary using explicit location, duration, per-person price, currency and stated availability. Local Buzz validates the assumptions but does not add the place to the canonical catalog.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "purpose": {
            "type": "string",
            "enum": [
              "dinner",
              "quick_bite",
              "drinks",
              "late_drinks"
            ]
          },
          "plannedStart": {
            "type": "string",
            "format": "date-time"
          },
          "location": {
            "type": "object",
            "properties": {
              "lat": {
                "type": "number"
              },
              "lng": {
                "type": "number"
              },
              "address": {
                "type": "string"
              },
              "neighborhood": {
                "type": "string"
              }
            },
            "required": [
              "lat",
              "lng",
              "address",
              "neighborhood"
            ],
            "additionalProperties": false
          },
          "typicalVisitDurationMinutes": {
            "type": "integer",
            "minimum": 15
          },
          "pricePerPerson": {
            "type": "number",
            "minimum": 0
          },
          "currency": {
            "type": "string",
            "enum": [
              "SEK",
              "USD"
            ]
          },
          "availableFrom": {
            "type": "string",
            "format": "date-time"
          },
          "availableUntil": {
            "type": "string",
            "format": "date-time"
          },
          "budget": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "description": "Optional total party budget. Omit or use null when the user has not set a spending cap."
          },
          "note": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "purpose",
          "plannedStart",
          "location",
          "typicalVisitDurationMinutes",
          "pricePerPerson",
          "currency",
          "availableFrom",
          "availableUntil"
        ],
        "additionalProperties": false
      }
    }
    add_happening_stopAction

    Add one selected event to the active itinerary. The event must be available, within its occurrence window, non-overlapping and within any explicit budget and end-time constraints.

    View tool JSON
    {
      "name": "add_happening_stop",
      "kind": "act",
      "impl": "imperative",
      "description": "Add one selected event to the active itinerary. The event must be available, within its occurrence window, non-overlapping and within any explicit budget and end-time constraints.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "happeningId": {
            "type": "string"
          },
          "plannedStart": {
            "type": "string",
            "format": "date-time"
          },
          "budget": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "description": "Optional total party budget. Omit or use null when the user has not set a spending cap."
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "happeningId",
          "plannedStart"
        ],
        "additionalProperties": false
      }
    }
    build_evening_planAction

    Build the active working itinerary from selected happening IDs and planned start times. The validated result immediately replaces the existing unlocked itinerary and remains directly editable through lock, unlock, add and remove actions.

    View tool JSON
    {
      "name": "build_evening_plan",
      "kind": "act",
      "impl": "imperative",
      "description": "Build the active working itinerary from selected happening IDs and planned start times. The validated result immediately replaces the existing unlocked itinerary and remains directly editable through lock, unlock, add and remove actions.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "stops": {
            "type": "array",
            "minItems": 1,
            "maxItems": 5,
            "items": {
              "type": "object",
              "properties": {
                "happeningId": {
                  "type": "string"
                },
                "plannedStart": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "required": [
                "happeningId",
                "plannedStart"
              ],
              "additionalProperties": false
            }
          },
          "budget": {
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "description": "Optional total party budget. Omit or use null when the user has not set a spending cap."
          },
          "rationale": {
            "type": "string"
          }
        },
        "required": [
          "stops"
        ],
        "additionalProperties": false
      }
    }
    read_current_planAnswer

    Read the one active shared itinerary, human locks, constraints, disruptions, current catalog counts, and per-source freshness state. Always use this after the human changes the UI and before attempting a repair.

    View tool JSON
    {
      "name": "read_current_plan",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the one active shared itinerary, human locks, constraints, disruptions, current catalog counts, and per-source freshness state. Always use this after the human changes the UI and before attempting a repair.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    lock_plan_stopAction

    Lock one existing plan stop as an explicit human constraint. A locked stop cannot be silently removed or replaced by repair_plan. The lock appears immediately in the shared timeline.

    View tool JSON
    {
      "name": "lock_plan_stop",
      "kind": "act",
      "impl": "imperative",
      "description": "Lock one existing plan stop as an explicit human constraint. A locked stop cannot be silently removed or replaced by repair_plan. The lock appears immediately in the shared timeline.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "stopId": {
            "type": "string"
          }
        },
        "required": [
          "stopId"
        ],
        "additionalProperties": false
      }
    }
    unlock_plan_stopAction

    Unlock one active itinerary stop so it can be changed by a later agent repair or direct edit.

    View tool JSON
    {
      "name": "unlock_plan_stop",
      "kind": "act",
      "impl": "imperative",
      "description": "Unlock one active itinerary stop so it can be changed by a later agent repair or direct edit.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "stopId": {
            "type": "string"
          }
        },
        "required": [
          "stopId"
        ],
        "additionalProperties": false
      }
    }
    remove_plan_stopAction

    Remove one unlocked stop from the active itinerary and immediately recalculate its route, total and end time. Locked stops must be unlocked before an agent can remove them.

    View tool JSON
    {
      "name": "remove_plan_stop",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove one unlocked stop from the active itinerary and immediately recalculate its route, total and end time. Locked stops must be unlocked before an agent can remove them.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "stopId": {
            "type": "string"
          }
        },
        "required": [
          "stopId"
        ],
        "additionalProperties": false
      }
    }
    repair_planAction

    Apply the smallest possible repair after a disruption. Read the current plan first. Preserve locked stops and unaffected stops; do not regenerate the full itinerary. A valid repair updates the visible itinerary immediately.

    View tool JSON
    {
      "name": "repair_plan",
      "kind": "act",
      "impl": "imperative",
      "description": "Apply the smallest possible repair after a disruption. Read the current plan first. Preserve locked stops and unaffected stops; do not regenerate the full itinerary. A valid repair updates the visible itinerary immediately.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string"
          },
          "preserveLockedStops": {
            "type": "boolean",
            "const": true
          },
          "replacementHappeningIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Ordered candidate IDs returned by search_happenings."
          }
        },
        "required": [
          "reason"
        ],
        "additionalProperties": false
      }
    }