Skip to main content
Glama

Set a sun & moon alarm

set_sun_alarm
Destructive

Sets a sun & moon alarm: it rings on the person's phone at a sun or moon moment at a place, or up to two hours before or after it: "an hour before sunrise in Yosemite", "golden hour in Lisbon every day", "moonrise on the next full moon", "sunrise on every June solstice", "the Perseid meteor shower", "when Mercury retrograde ends". The moment is computed for the place each day and rings for everyone at once, at the alarm's place. Once on a date, on repeating days, or, with neither, at the next one. A day the event does not happen there (a polar day or night) is skipped. People added to a friends alarm are notified. Returns the alarm, when it next rings, its link and a share picture.

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": {
      "event": "<event>"
    },
    "name": "set_sun_alarm"
  }
}

Input Schema

NameRequiredDescriptionDefault
onNoOnly on this kind of day at the place: fullMoon, newMoon, supermoon, marchEquinox, juneSolstice, septemberEquinox, decemberSolstice. With repeat_days it rings on every one; without, on the next one. "Moonrise on the full moon" is event moonrise with on fullMoon.
dateNoA one-off's day at the place, "2026-11-02". Not used for a repeating alarm.
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.
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.
eventYesA moment of the day: sunrise; sunset; goldenHour (evening golden hour starts); goldenHourEnd (morning golden hour ends); solarNoon (the sun at its highest); dawn (civil twilight starts); dusk (civil twilight ends); nightEnd (first light); night (night starts); moonrise; moonset; moonTransit (the moon at its peak, when it is up). Or a sky event, which comes round on its own and needs no days: mercuryRetrograde, mercuryDirect (Mercury retrograde ends), and the same for venus, mars, jupiter and saturn (each rings 9am on the day it turns); quadrantids, lyrids, etaAquariids, perseids, orionids, leonids, geminids (meteor showers, 2am the morning after the peak night); supermoon (at moonrise); marchEquinox, juneSolstice, septemberEquinox, decemberSolstice (at the exact minute). For a sky event, repeat_days with all seven days means every time it comes round.
placeNoWhere the sky is watched, only when the person named one: a city, park, beach or address, "Yosemite". Coordinates as "37.75, -119.59" work too. Left out, the person's own place is used.
reachNoWho can join: private (only the person), friends (people on its list, or with its link), public (anyone; listed in Discover).private
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).
titleNoShort name for the alarm, "Half Dome sunrise". Write one that fits what they asked, fresh each time, 2 to 6 words (never just the time). When absent, LFG names 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.
link_modeNoFor a friends alarm, what its link does: open (anyone who opens the link rides along, the default) or approve (anyone else with the link asks first and the person says yes or no). Invited people walk straight in either way.
add_groupsNoFor a friends alarm: names of the person's friend groups whose members to let in, "Family". Members get a notification.
add_peopleNoFor a friends alarm: up to 20 people to let in, as usernames of the person's LFG friends or as email addresses. Friends get a notification; an email address with no LFG account gets an invitation. Any other username is refused.
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_daysNoDays a repeating alarm rings, ["sat","sun"]; all seven for every day. Not used for a one-off.
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.
silent_snoozeNotrue to snooze without the spoken roast LFG plays by default.
offset_minutesNoMinutes from the event: -60 is an hour before, 30 is half an hour after, 0 is at it.
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.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 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"
      +}
    • changedInput schema / properties / title / description
      Previous value: -"Short name for the alarm, \"Half Dome sunrise\". When absent, LFG names it."New value: +"Short name for the alarm, \"Half Dome sunrise\". Write one that fits what they asked, fresh each time, 2 to 6 words (never just the time). When absent, LFG names it."
  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. Changed4 schema fields changed
    • changedInput schema / properties / event / description
      Previous value: -"sunrise; sunset; goldenHour (evening golden hour starts); goldenHourEnd (morning golden hour ends); solarNoon (the sun at its highest); dawn (civil twilight starts); dusk (civil twilight ends); nightEnd (first light); night (night starts); moonrise; moonset."New value: +"A moment of the day: sunrise; sunset; goldenHour (evening golden hour starts); goldenHourEnd (morning golden hour ends); solarNoon (the sun at its highest); dawn (civil twilight starts); dusk (civil twilight ends); nightEnd (first light); night (night starts); moonrise; moonset; moonTransit (the moon at its peak, when it is up). Or a sky event, which comes round on its own and needs no days: mercuryRetrograde, mercuryDirect (Mercury retrograde ends), and the same for venus, mars, jupiter and saturn (each rings 9am on the day it turns); quadrantids, lyrids, etaAquariids, perseids, orionids, leonids, geminids (meteor showers, 2am the morning after the peak night); supermoon (at moonrise); marchEquinox, juneSolstice, septemberEquinox, decemberSolstice (at the exact minute). For a sky event, repeat_days with all seven days means every time it comes round."
    • changedInput schema / properties / event / enum
      Previous value: -[
      -  "sunrise",
      -  "sunset",
      -  "goldenHour",
      -  "goldenHourEnd",
      -  "solarNoon",
      -  "dawn",
      -  "dusk",
      -  "nightEnd",
      -  "night",
      -  "moonrise",
      -  "moonset"
      -]New value: +[
      +  "sunrise",
      +  "sunset",
      +  "goldenHour",
      +  "goldenHourEnd",
      +  "solarNoon",
      +  "dawn",
      +  "dusk",
      +  "nightEnd",
      +  "night",
      +  "moonrise",
      +  "moonset",
      +  "moonTransit",
      +  "mercuryRetrograde",
      +  "mercuryDirect",
      +  "venusRetrograde",
      +  "venusDirect",
      +  "marsRetrograde",
      +  "marsDirect",
      +  "jupiterRetrograde",
      +  "jupiterDirect",
      +  "saturnRetrograde",
      +  "saturnDirect",
      +  "quadrantids",
      +  "lyrids",
      +  "etaAquariids",
      +  "perseids",
      +  "orionids",
      +  "leonids",
      +  "geminids",
      +  "supermoon",
      +  "marchEquinox",
      +  "juneSolstice",
      +  "septemberEquinox",
      +  "decemberSolstice"
      +]
    • changedInput schema / properties / on / description
      Previous value: -"Only on this kind of day at the place: fullMoon, newMoon, marchEquinox, juneSolstice, septemberEquinox, decemberSolstice. With repeat_days it rings on every one; without, on the next one. \"Moonrise on the full moon\" is event moonrise with on fullMoon."New value: +"Only on this kind of day at the place: fullMoon, newMoon, supermoon, marchEquinox, juneSolstice, septemberEquinox, decemberSolstice. With repeat_days it rings on every one; without, on the next one. \"Moonrise on the full moon\" is event moonrise with on fullMoon."
    • changedInput schema / properties / on / enum
      Previous value: -[
      -  "fullMoon",
      -  "newMoon",
      -  "marchEquinox",
      -  "juneSolstice",
      -  "septemberEquinox",
      -  "decemberSolstice"
      -]New value: +[
      +  "fullMoon",
      +  "newMoon",
      +  "supermoon",
      +  "marchEquinox",
      +  "juneSolstice",
      +  "septemberEquinox",
      +  "decemberSolstice"
      +]
  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 / 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."
  7. Changed2 schema fields changed
    • changedInput schema / properties / place / description
      Previous value: -"Where the sun is watched: a city, park, beach or address, \"Yosemite\". Coordinates as \"37.75, -119.59\" work too."New value: +"Where the sky is watched, only when the person named one: a city, park, beach or address, \"Yosemite\". Coordinates as \"37.75, -119.59\" work too. Left out, the person's own place is used."
    • changedInput schema / required
      Previous value: -[
      -  "event",
      -  "place"
      -]New value: +[
      +  "event"
      +]
  8. Changed1 schema field changed
    • addedInput schema / properties / on
      Added value: +{
      +  "description": "Only on this kind of day at the place: fullMoon, newMoon, marchEquinox, juneSolstice, septemberEquinox, decemberSolstice. With repeat_days it rings on every one; without, on the next one. \"Moonrise on the full moon\" is event moonrise with on fullMoon.",
      +  "enum": [
      +    "fullMoon",
      +    "newMoon",
      +    "marchEquinox",
      +    "juneSolstice",
      +    "septemberEquinox",
      +    "decemberSolstice"
      +  ],
      +  "type": "string"
      +}
  9. Added

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare write, destructive, open-world and non-idempotent. The description adds real behavioral context beyond them: the moment is computed for the place daily, all members ring simultaneously at the alarm's place, friends are notified when added, polar non-event days are skipped, and it returns the alarm, next ring time, link and share picture. It never explains the destructive flag's practical meaning (e.g. overwriting or replacing an existing alarm), which is the one notable gap.

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?

Purpose and scope are front-loaded in the first clause, and every later sentence carries scheduling or side-effect information. The first sentence is a long run-on packed with quoted examples, which costs some readability, but nothing is truly redundant.

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

Completeness5/5

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

For a 31-parameter creation tool with no output schema, the description supplies what matters: schedule semantics, place vs. person's own place, skip behavior on non-event days, social notification effects, and the return payload. Field-level detail is delegated to an unusually thorough schema, so no critical behavior is missing.

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, but the description adds cross-parameter meaning the schema documents only piecewise: the precedence between date, repeat_days and on, and the 'up to two hours before or after' framing of the offset range. That combination logic is the highest-risk part of a 31-parameter call and is stated plainly.

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 ("Sets a sun & moon alarm") and immediately defines the triggering domain: a sun or moon moment at a place, with or without an offset. The quoted examples ("an hour before sunrise in Yosemite", "moonrise on the next full moon", "when Mercury retrograde ends") make clear it is distinct from the time/price/post alarm siblings.

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

Usage Guidelines4/5

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

Gives clear selection logic within the tool: "Once on a date, on repeating days, or, with neither, at the next one," plus the edge case that "A day the event does not happen there (a polar day or night) is skipped." It does not explicitly name when to prefer a sibling such as set_time_alarm or set_event_alarm, so routing against alternatives is left implicit.

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.