Skip to main content
Glama

Change an alarm

update_alarm
DestructiveIdempotent

Changes an alarm the person made: its title, a time alarm's time or days, its look (a feel or kind of background to match, wallpaper words and colours, or a theme), its note, its button link, how it snoozes, who can join, whether it is a surprise, and who is let in or taken off. For an alarm that already exists and that the person made; it does not make new alarms, and on or off alone is a separate switch. Fields left out stay as they are. Riders of a friends alarm are told of a new look, and asked to keep riding or leave after a time change; people taken off lose it from their phone without being told. A public alarm cannot change once anyone has joined it. Returns the alarm and its link.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "id": "<id>"
    },
    "name": "update_alarm"
  }
}

Input Schema

NameRequiredDescriptionDefault
idYesThe alarm's id.
dateNoA time alarm's new date, making it a one-off, "2026-11-02".
noteNoA note from the person about the alarm, in their words, shown under its trigger on the alarm's page and in the Daily drop. Up to 500 characters; an empty note clears it.
timeNoA time alarm's new time, 24-hour, "07:15". Its date or days stay unless given.
vibeNoThe feel of the alarm in a few words, and the kind of background and colour if the person named them: "fun poppy anime", "calm", "a simple bell", "hype for a token launch", "ocean waves, purple", "neon and chaotic". LFG picks a sound and a look from its library to match: a live, moving wallpaper when one fits, otherwise a drawn one. Wallpaper words given here replace the look's words; a colour given here makes it a plain gradient in that colour.
briefNoAdds or changes a quiet brief on a schedule, on an alarm that rings on something else: Rocco gathers on the topic through the day and the brief arrives at this time as a notification and in the Daily Drop, never a ring. null ends it. For a clock alarm, use follow.
reachNoWho can join: private, friends or public.
soundNoThe shelf of our library closest to the sound they asked for, read for what they mean: lo-fi or study beats is music/chill, "make it a vibe" might be music/chill, music/rnb or music/beats, hype me up is voices/hype_man, yelling at me is voices/drill_sergeant. "own" for one of their own uploads ("my song"). "soundcloud" when they asked for SoundCloud, or no shelf is close: a genre we have no shelf for (k-pop, drum and bass), or an artist or a song by name; put what to look for in song_search, and they play SoundCloud songs and tap one. Leave it out when they said nothing about the sound. A song from Apple Music, or a song or voiceover made for them: leave this out, make the alarm, and say they get it in the alarm's Studio, under its sound, after Arm it. Never say you will make one. The wallpaper follows the song unless one is asked for.
themeNoA theme or holiday: the alarm gets a song in its moods, a new alarm a title written for it, and a wallpaper dealt for it for variety, one of the theme's pictures, a GIF, a live wallpaper or a gradient. A vibe given as well shapes that ("cozy", "degen"); wallpaper words or a title given are kept. One of: birthday (Birthday), love (Love), night_out (Night out), shopping (Shopping), winter (Winter), christmas (Christmas), hanukkah (Hanukkah), diwali (Diwali), halloween (Halloween), thanksgiving (Thanksgiving), friendsgiving (Friendsgiving), new_years (New Year's Eve).
titleNoNew short name for the alarm. Up to 60 characters; it reads best under about 25.
followNoA clock alarm only: a topic its ring brings a brief on, "AI news". Rocco reads on it once a day before it rings. An empty string ends it.
surpriseNoFor a friends alarm: keep it a surprise. People who join see a curtain instead of its title, picture, sound and note until it rings. Free on every plan.
add_groupsNoFor a friends alarm: names of the person's friend groups whose members to let in, "Family". Members get a notification.
add_peopleNoPeople to let in to a friends alarm, added to those already in: usernames of the person's LFG friends, or email addresses. Up to 20 at a time.
gif_searchNo2 to 5 plain words to search GIFs with, written for this alarm, "solana pump celebration", "sleepy cat monday": used if the look dealt is a GIF, which has no words of its own. Fill it whenever you make an alarm.
look_wordsNoShort words of your own for the wallpaper, written for this alarm, "SOL TO THE MOON", "EXAM DAY", "BEACH BY 6": used if the look dealt is a live wallpaper or a gradient, in place of its own words. 2 to 4 words. Unlike wallpaper_words, the look is still dealt. Fill it whenever you make an alarm.
button_linkNo
repeat_daysNoA time alarm's new repeat days, making it repeating, ["sat","sun"].
song_searchNoWith "soundcloud": what to look for there, in their words, "k-pop", "fred again".
upload_nameNoWith "own": the name they gave the upload, "my dog picture". Left out, one of theirs is used.
words_colorNoColour of the words as hex, any colour, "#D7FF00".
hide_triggerNoNeeded with surprise, true or false: whether to also keep back when and why it rings, so people who join only know that it will. A surprise is not made until it is given.
snooze_timesNoHow many times it can be snoozed: 3, 10 or unlimited.
remove_peopleNoPeople to take off a friends alarm, by username or email. Anyone among them who already joined loses the alarm from their phone, without being told.
silent_snoozeNotrue to snooze without the spoken roast LFG plays by default.
snooze_minutesNoMinutes each snooze lasts: 5, 10, 15, 30 or 60.
wallpaper_kindNoOnly when they named a kind: a gradient, a live (moving) wallpaper, a gif or meme, or "own" for one of their own uploads ("my wallpaper", "the picture I uploaded"). Left out, LFG deals one of every kind in turn.
send_beacons_toNoA webhook the person got from the other side (a Discord channel's hook, a Zapier catch hook, their own agent's address): every beacon on this alarm is POSTed there as JSON, signed with the alarm's horn token. Public https only. An empty string stops it.
wallpaper_colorNoWallpaper background colour as hex, any colour, "#5B2BFF".
wallpaper_wordsNoWords drawn on the wallpaper, "WAKE UP"; a line break starts a new line. Up to 40 characters; it looks best as 1 to 4 short words, since the words are drawn as large as the square allows.
people_confirmedNoWhether the person has confirmed the people and groups being added. Nobody is added or told without it.
follow_every_hoursNoOnly when the person asks for it ("check every 4 hours"): how often Rocco reads the brief's sources, in hours, 1 to 23, or 24 to go back to once a day. Leave it out otherwise: once a day, in the hour before the brief, is the default, free and plenty for a brief. Faster is monitoring: it takes a monitoring alarm's place and uses credits, so say so.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / gif_search
      Added value: +{
      +  "description": "2 to 5 plain words to search GIFs with, written for this alarm, \"solana pump celebration\", \"sleepy cat monday\": used if the look dealt is a GIF, which has no words of its own. Fill it whenever you make an alarm.",
      +  "maxLength": 60,
      +  "minLength": 2,
      +  "type": "string"
      +}
    • addedInput schema / properties / look_words
      Added value: +{
      +  "description": "Short words of your own for the wallpaper, written for this alarm, \"SOL TO THE MOON\", \"EXAM DAY\", \"BEACH BY 6\": used if the look dealt is a live wallpaper or a gradient, in place of its own words. 2 to 4 words. Unlike wallpaper_words, the look is still dealt. Fill it whenever you make an alarm.",
      +  "maxLength": 40,
      +  "minLength": 1,
      +  "type": "string"
      +}
  2. Changed3 schema fields changed
    • addedInput schema / properties / song_search
      Added value: +{
      +  "description": "With \"soundcloud\": what to look for there, in their words, \"k-pop\", \"fred again\".",
      +  "maxLength": 120,
      +  "type": "string"
      +}
    • changedInput schema / properties / sound / description
      Previous value: -"The shelf of our library closest to the sound they asked for: lo-fi or study beats is music/chill or music/cozy, hype me up is voices/hype_man, yelling at me is voices/drill_sergeant. \"own\" for one of their own uploads (\"my song\"). Leave it out when they said nothing about the sound. A SoundCloud song: make the alarm, then find_soundcloud_song. A song from Apple Music, or a song or voiceover made for them: leave this out, make the alarm, and say they get it in the alarm's Studio, under its sound, after Arm it. Never say you will make one. The wallpaper follows the song unless one is asked for."New value: +"The shelf of our library closest to the sound they asked for, read for what they mean: lo-fi or study beats is music/chill, \"make it a vibe\" might be music/chill, music/rnb or music/beats, hype me up is voices/hype_man, yelling at me is voices/drill_sergeant. \"own\" for one of their own uploads (\"my song\"). \"soundcloud\" when they asked for SoundCloud, or no shelf is close: a genre we have no shelf for (k-pop, drum and bass), or an artist or a song by name; put what to look for in song_search, and they play SoundCloud songs and tap one. Leave it out when they said nothing about the sound. A song from Apple Music, or a song or voiceover made for them: leave this out, make the alarm, and say they get it in the alarm's Studio, under its sound, after Arm it. Never say you will make one. The wallpaper follows the song unless one is asked for."
    • changedInput schema / properties / sound / enum
      Previous value: -[
      -  "own",
      -  "music/afrobeats",
      -  "music/anime",
      -  "music/beats",
      -  "music/broadway",
      -  "music/chill",
      -  "music/cinematic",
      -  "music/classical",
      -  "music/country_folk",
      -  "music/cozy",
      -  "music/electronic",
      -  "music/happy_birthday",
      -  "music/heavenly",
      -  "music/hiphop",
      -  "music/jazzblues",
      -  "music/latin",
      -  "music/metal",
      -  "music/pop",
      -  "music/reggae",
      -  "music/rnb",
      -  "music/roasts",
      -  "music/rock",
      -  "music/video_game",
      -  "voices/android",
      -  "voices/anime",
      -  "voices/battle_cry",
      -  "voices/boss",
      -  "voices/breaking",
      -  "voices/bro",
      -  "voices/calm",
      -  "voices/chants",
      -  "voices/chaos",
      -  "voices/doomer",
      -  "voices/drama",
      -  "voices/drill_sergeant",
      -  "voices/gamer",
      -  "voices/hype_man",
      -  "voices/narrator",
      -  "voices/party",
      -  "voices/super_positive",
      -  "voices/the_butler",
      -  "voices/toxic_coach",
      -  "voices/warning",
      -  "voices/wtf",
      -  "voices/your_bestie",
      -  "tones/beeps",
      -  "tones/buzzers",
      -  "tones/chimes",
      -  "tones/footsteps",
      -  "tones/horns_drums",
      -  "tones/nature",
      -  "tones/powerups",
      -  "tones/sirens",
      -  "tones/winning",
      -  "themes/halloween",
      -  "themes/thanksgiving"
      -]New value: +[
      +  "own",
      +  "soundcloud",
      +  "music/afrobeats",
      +  "music/anime",
      +  "music/beats",
      +  "music/broadway",
      +  "music/chill",
      +  "music/cinematic",
      +  "music/classical",
      +  "music/country_folk",
      +  "music/cozy",
      +  "music/electronic",
      +  "music/happy_birthday",
      +  "music/heavenly",
      +  "music/hiphop",
      +  "music/jazzblues",
      +  "music/latin",
      +  "music/metal",
      +  "music/pop",
      +  "music/reggae",
      +  "music/rnb",
      +  "music/roasts",
      +  "music/rock",
      +  "music/video_game",
      +  "voices/android",
      +  "voices/anime",
      +  "voices/battle_cry",
      +  "voices/boss",
      +  "voices/breaking",
      +  "voices/bro",
      +  "voices/calm",
      +  "voices/chants",
      +  "voices/chaos",
      +  "voices/doomer",
      +  "voices/drama",
      +  "voices/drill_sergeant",
      +  "voices/gamer",
      +  "voices/hype_man",
      +  "voices/narrator",
      +  "voices/party",
      +  "voices/super_positive",
      +  "voices/the_butler",
      +  "voices/toxic_coach",
      +  "voices/warning",
      +  "voices/wtf",
      +  "voices/your_bestie",
      +  "tones/beeps",
      +  "tones/buzzers",
      +  "tones/chimes",
      +  "tones/footsteps",
      +  "tones/horns_drums",
      +  "tones/nature",
      +  "tones/powerups",
      +  "tones/sirens",
      +  "tones/winning",
      +  "themes/halloween",
      +  "themes/thanksgiving"
      +]
  3. Changed3 schema fields changed
    • addedInput schema / properties / sound
      Added value: +{
      +  "description": "The shelf of our library closest to the sound they asked for: lo-fi or study beats is music/chill or music/cozy, hype me up is voices/hype_man, yelling at me is voices/drill_sergeant. \"own\" for one of their own uploads (\"my song\"). Leave it out when they said nothing about the sound. A SoundCloud song: make the alarm, then find_soundcloud_song. A song from Apple Music, or a song or voiceover made for them: leave this out, make the alarm, and say they get it in the alarm's Studio, under its sound, after Arm it. Never say you will make one. The wallpaper follows the song unless one is asked for.",
      +  "enum": [
      +    "own",
      +    "music/afrobeats",
      +    "music/anime",
      +    "music/beats",
      +    "music/broadway",
      +    "music/chill",
      +    "music/cinematic",
      +    "music/classical",
      +    "music/country_folk",
      +    "music/cozy",
      +    "music/electronic",
      +    "music/happy_birthday",
      +    "music/heavenly",
      +    "music/hiphop",
      +    "music/jazzblues",
      +    "music/latin",
      +    "music/metal",
      +    "music/pop",
      +    "music/reggae",
      +    "music/rnb",
      +    "music/roasts",
      +    "music/rock",
      +    "music/video_game",
      +    "voices/android",
      +    "voices/anime",
      +    "voices/battle_cry",
      +    "voices/boss",
      +    "voices/breaking",
      +    "voices/bro",
      +    "voices/calm",
      +    "voices/chants",
      +    "voices/chaos",
      +    "voices/doomer",
      +    "voices/drama",
      +    "voices/drill_sergeant",
      +    "voices/gamer",
      +    "voices/hype_man",
      +    "voices/narrator",
      +    "voices/party",
      +    "voices/super_positive",
      +    "voices/the_butler",
      +    "voices/toxic_coach",
      +    "voices/warning",
      +    "voices/wtf",
      +    "voices/your_bestie",
      +    "tones/beeps",
      +    "tones/buzzers",
      +    "tones/chimes",
      +    "tones/footsteps",
      +    "tones/horns_drums",
      +    "tones/nature",
      +    "tones/powerups",
      +    "tones/sirens",
      +    "tones/winning",
      +    "themes/halloween",
      +    "themes/thanksgiving"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / upload_name
      Added value: +{
      +  "description": "With \"own\": the name they gave the upload, \"my dog picture\". Left out, one of theirs is used.",
      +  "maxLength": 80,
      +  "type": "string"
      +}
    • addedInput schema / properties / wallpaper_kind
      Added value: +{
      +  "description": "Only when they named a kind: a gradient, a live (moving) wallpaper, a gif or meme, or \"own\" for one of their own uploads (\"my wallpaper\", \"the picture I uploaded\"). Left out, LFG deals one of every kind in turn.",
      +  "enum": [
      +    "gradient",
      +    "live",
      +    "gif",
      +    "own"
      +  ],
      +  "type": "string"
      +}
  4. Changed3 schema fields changed
    • changedInput schema / properties / brief / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "days": {
      -        "description": "Days it arrives, [\"sat\"]. Every day when absent.",
      -        "items": {
      -          "enum": [
      -            "sun",
      -            "mon",
      -            "tue",
      -            "wed",
      -            "thu",
      -            "fri",
      -            "sat"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 7,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "time": {
      -        "description": "When the brief arrives, 24-hour, \"08:00\".",
      -        "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      -        "type": "string"
      -      },
      -      "time_zone": {
      -        "description": "The person's IANA time zone, \"America/New_York\".",
      -        "type": "string"
      -      },
      -      "topic": {
      -        "description": "What to gather for the brief, \"solana news\", \"AI and crypto, and something funny\".",
      -        "maxLength": 160,
      -        "minLength": 2,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "topic",
      -      "time",
      -      "time_zone"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "days": {
      +        "description": "Days it arrives, [\"sat\"]. Every day when absent.",
      +        "items": {
      +          "enum": [
      +            "sun",
      +            "mon",
      +            "tue",
      +            "wed",
      +            "thu",
      +            "fri",
      +            "sat"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 7,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "every_hours": {
      +        "description": "Only when the person asks for it (\"check every 4 hours\"): how often Rocco reads the brief's sources, in hours, 1 to 23. Leave it out otherwise: once a day, in the hour before the brief, is the default, free and plenty for a brief. Faster is monitoring: it takes a monitoring alarm's place and uses credits, so say so.",
      +        "maximum": 23,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "time": {
      +        "description": "When the brief arrives, 24-hour, \"08:00\".",
      +        "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      +        "type": "string"
      +      },
      +      "time_zone": {
      +        "description": "The person's IANA time zone, \"America/New_York\".",
      +        "type": "string"
      +      },
      +      "topic": {
      +        "description": "What to gather for the brief, \"solana news\", \"AI and crypto, and something funny\".",
      +        "maxLength": 160,
      +        "minLength": 2,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "topic",
      +      "time",
      +      "time_zone"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / follow / description
      Previous value: -"A clock alarm only: a topic its ring brings a brief on, \"AI news\". Rocco reads on it through the day. An empty string ends it."New value: +"A clock alarm only: a topic its ring brings a brief on, \"AI news\". Rocco reads on it once a day before it rings. An empty string ends it."
    • addedInput schema / properties / follow_every_hours
      Added value: +{
      +  "description": "Only when the person asks for it (\"check every 4 hours\"): how often Rocco reads the brief's sources, in hours, 1 to 23, or 24 to go back to once a day. Leave it out otherwise: once a day, in the hour before the brief, is the default, free and plenty for a brief. Faster is monitoring: it takes a monitoring alarm's place and uses credits, so say so.",
      +  "maximum": 24,
      +  "minimum": 1,
      +  "type": "integer"
      +}
  5. Changed1 schema field changed
    • changedInput schema / properties / theme / description
      Previous value: -"A picture theme: the alarm gets one of the theme's pictures as its wallpaper and a song in its moods, and a new alarm a title written for it. A wallpaper, title or vibe given as well is kept instead. One of: birthday (Birthday), love (Love), night_out (Night out), shopping (Shopping), winter (Winter), christmas (Christmas), hanukkah (Hanukkah), diwali (Diwali), halloween (Halloween), thanksgiving (Thanksgiving), friendsgiving (Friendsgiving), new_years (New Year's Eve)."New value: +"A theme or holiday: the alarm gets a song in its moods, a new alarm a title written for it, and a wallpaper dealt for it for variety, one of the theme's pictures, a GIF, a live wallpaper or a gradient. A vibe given as well shapes that (\"cozy\", \"degen\"); wallpaper words or a title given are kept. One of: birthday (Birthday), love (Love), night_out (Night out), shopping (Shopping), winter (Winter), christmas (Christmas), hanukkah (Hanukkah), diwali (Diwali), halloween (Halloween), thanksgiving (Thanksgiving), friendsgiving (Friendsgiving), new_years (New Year's Eve)."
  6. Changed1 schema field changed
    • changedInput schema / properties / brief / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "days": {
      -        "description": "Days it arrives, [\"sat\"]. Every day when absent.",
      -        "items": {
      -          "enum": [
      -            "sun",
      -            "mon",
      -            "tue",
      -            "wed",
      -            "thu",
      -            "fri",
      -            "sat"
      -          ],
      -          "type": "string"
      -        },
      -        "maxItems": 7,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "time": {
      -        "description": "When the brief arrives, 24-hour, \"08:00\".",
      -        "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      -        "type": "string"
      -      },
      -      "time_zone": {
      -        "description": "The person's IANA time zone, \"America/New_York\".",
      -        "type": "string"
      -      },
      -      "topic": {
      -        "description": "What to gather for the brief, \"solana news\", \"AI and crypto, and something funny\".",
      -        "maxLength": 80,
      -        "minLength": 2,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "topic",
      -      "time",
      -      "time_zone"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "days": {
      +        "description": "Days it arrives, [\"sat\"]. Every day when absent.",
      +        "items": {
      +          "enum": [
      +            "sun",
      +            "mon",
      +            "tue",
      +            "wed",
      +            "thu",
      +            "fri",
      +            "sat"
      +          ],
      +          "type": "string"
      +        },
      +        "maxItems": 7,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "time": {
      +        "description": "When the brief arrives, 24-hour, \"08:00\".",
      +        "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      +        "type": "string"
      +      },
      +      "time_zone": {
      +        "description": "The person's IANA time zone, \"America/New_York\".",
      +        "type": "string"
      +      },
      +      "topic": {
      +        "description": "What to gather for the brief, \"solana news\", \"AI and crypto, and something funny\".",
      +        "maxLength": 160,
      +        "minLength": 2,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "topic",
      +      "time",
      +      "time_zone"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  7. Changed1 schema field changed
    • changedInput schema / properties / vibe / description
      Previous value: -"The feel of the alarm in a few words, \"fun poppy anime\", \"calm\", \"a simple bell\", \"hype for a token launch\". LFG picks a sound and a drawn look from its library to match; wallpaper words or colours given here win over the look."New value: +"The feel of the alarm in a few words, and the kind of background and colour if the person named them: \"fun poppy anime\", \"calm\", \"a simple bell\", \"hype for a token launch\", \"ocean waves, purple\", \"neon and chaotic\". LFG picks a sound and a look from its library to match: a live, moving wallpaper when one fits, otherwise a drawn one. Wallpaper words given here replace the look's words; a colour given here makes it a plain gradient in that colour."
  8. Changed2 schema fields changed
    • addedInput schema / properties / brief
      Added value: +{
      +  "anyOf": [
      +    {
      +      "properties": {
      +        "days": {
      +          "description": "Days it arrives, [\"sat\"]. Every day when absent.",
      +          "items": {
      +            "enum": [
      +              "sun",
      +              "mon",
      +              "tue",
      +              "wed",
      +              "thu",
      +              "fri",
      +              "sat"
      +            ],
      +            "type": "string"
      +          },
      +          "maxItems": 7,
      +          "minItems": 1,
      +          "type": "array"
      +        },
      +        "time": {
      +          "description": "When the brief arrives, 24-hour, \"08:00\".",
      +          "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      +          "type": "string"
      +        },
      +        "time_zone": {
      +          "description": "The person's IANA time zone, \"America/New_York\".",
      +          "type": "string"
      +        },
      +        "topic": {
      +          "description": "What to gather for the brief, \"solana news\", \"AI and crypto, and something funny\".",
      +          "maxLength": 80,
      +          "minLength": 2,
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "topic",
      +        "time",
      +        "time_zone"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Adds or changes a quiet brief on a schedule, on an alarm that rings on something else: Rocco gathers on the topic through the day and the brief arrives at this time as a notification and in the Daily Drop, never a ring. null ends it. For a clock alarm, use follow."
      +}
    • addedInput schema / properties / follow
      Added value: +{
      +  "description": "A clock alarm only: a topic its ring brings a brief on, \"AI news\". Rocco reads on it through the day. An empty string ends it.",
      +  "maxLength": 80,
      +  "type": "string"
      +}
  9. Changed1 schema field changed
    • addedInput schema / properties / send_beacons_to
      Added value: +{
      +  "description": "A webhook the person got from the other side (a Discord channel's hook, a Zapier catch hook, their own agent's address): every beacon on this alarm is POSTed there as JSON, signed with the alarm's horn token. Public https only. An empty string stops it.",
      +  "maxLength": 2048,
      +  "type": "string"
      +}
  10. Changed1 schema field changed
    • changedInput schema / properties / words_color / description
      Previous value: -"Colour of the words as hex, any colour, \"#D7FF00\". Pick one that stands out from the background."New value: +"Colour of the words as hex, any colour, \"#D7FF00\"."
  11. Changed6 schema fields changed
    • changedInput schema / properties / title / description
      Previous value: -"New short name for the alarm."New value: +"New short name for the alarm. Up to 60 characters; it reads best under about 25."
    • changedInput schema / properties / title / maxLength
      Previous value: -120New value: +60
    • changedInput schema / properties / wallpaper_color / description
      Previous value: -"Wallpaper background colour as hex, \"#5B2BFF\"."New value: +"Wallpaper background colour as hex, any colour, \"#5B2BFF\"."
    • changedInput schema / properties / wallpaper_words / description
      Previous value: -"Words drawn on the wallpaper, \"WAKE UP\"; a line break starts a new line."New value: +"Words drawn on the wallpaper, \"WAKE UP\"; a line break starts a new line. Up to 40 characters; it looks best as 1 to 4 short words, since the words are drawn as large as the square allows."
    • changedInput schema / properties / wallpaper_words / maxLength
      Previous value: -80New value: +40
    • changedInput schema / properties / words_color / description
      Previous value: -"Colour of the words as hex, \"#D7FF00\"."New value: +"Colour of the words as hex, any colour, \"#D7FF00\". Pick one that stands out from the background."
  12. First observed

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag mutation, destructiveness and openness, but the description adds genuinely new consequences: omitted fields are preserved, riders get notified of a new look and are re-asked after a time change, removed people lose the alarm silently, and a public alarm is frozen once anyone joins. It also states the return value (the alarm and its link), which the annotations cannot express. Losing a point only because several per-parameter side effects are left to the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense paragraph, but it is ordered deliberately: what it changes, what it is not, merge semantics, social side effects, the public-alarm restriction, and the return value. It is longer than strictly necessary - 'who is let in or taken off' is redundant with the later sentence about removals - but no sentence is pure filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 32-parameter mutation tool with no output schema, it covers existence precondition, partial-update semantics, notification consequences, the public-alarm hard restriction, and the return value. What remains thin is the alarm-kind distinction for the brief/follow pair, which the schema spells out at field level. Overall an agent could call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 97%, so the baseline is 3; the description still earns above that by describing cross-parameter and social effects (riders notified on a look change, public-alarm lock after joins, silent removal) that the per-field schema text does not tie together. It does not attempt to re-explain nuances like people_confirmed or follow_every_hours, which is correct given the schema carries them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Changes an alarm the person made') and enumerates the field families it can change (title, time/days, look, note, button link, snooze, reach, surprise, membership). It explicitly separates itself from two siblings: 'it does not make new alarms' and 'on or off alone is a separate switch' (turn_alarm_on_off).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition ('For an alarm that already exists and that the person made') and two explicit exclusions with the correct alternative named for each. It also routes within the tool: brief vs follow is distinguished by 'For a clock alarm, use follow'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.