Skip to main content
Glama

Server Details

Date math and SVG rendering for fictional and custom calendars. Exact, stateless and deterministic.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Available Tools

15 tools
add_to_dateAInspect

Move a date by years, months, days and ticks. They are applied in that fixed order, which matters: a month then a day is not always the same landing as a day then a month. Adding days is always exact. policy decides what happens when the day does not exist in the target month: 'clamp' (default) moves to that month's last day, 'reject' refuses with an error, 'spill' carries the excess into the following month. Adding months to an intercalary date is refused, because those days sit between months; add days instead. 'ticks' moves within the day for a calendar that divides its day, carrying whole days as they fall. USE 'steps' FOR MORE THAN ONE MOVE: each step gives its own years, months, days and ticks, and its own date or the shared one, so a base date and a list of offsets is a single call rather than one per offset. Only the date is shared: a step states its own move in full, so a step naming no months moves by no months whatever the call around it says. Answers up to 1000 in one call, in the order given, as {count, ok, results}. Prefer this over one call per item: the spec travels once instead of once each.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
daysNo
timeNo
stepsNo
ticksNo
yearsNo
monthsNo
policyNoclamp
calendarYes
on_errorNofail

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description carries full responsibility and delivers: fixed application order, exactness of days, policy behaviors for clamp/reject/spill, refusal for intercalary months, tick carrying, step isolation semantics, a 1000-answer cap, and the return shape. It is exceptionally transparent about edge cases.

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

Conciseness5/5

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

The description is long, but every sentence adds behavioral or policy context. The critical semantics—ordering, policy, steps, batching—are front-loaded, and there is no filler or repetition.

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?

Given 10 parameters, nested objects, and no output schema, the description is unusually complete: it states batching limits, return shape, ordering semantics, and failure modes. It falls slightly short only because calendar/time/on_error are not fully specified and sibling-tool routing is absent.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It richly explains years, months, days, ticks, policy, and steps, but it never defines the required 'calendar' parameter, the 'time' parameter, or the 'on_error' parameter and its possible values. These are meaningful gaps for an agent trying to call the tool correctly.

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?

The description opens with a specific verb and resource: 'Move a date by years, months, days and ticks.' It clearly identifies what the tool does and gives enough detail to distinguish it from calendar formatting, parsing, and interval tools in the sibling list.

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?

The description gives explicit usage guidance: use 'steps' for multiple moves and prefer this over one call per item. It also advises using days instead of months for intercalary dates. It does not explicitly contrast add_to_date with sibling tools, but the within-tool routing and exclusions are strong.

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

calendar_eventsAInspect

When recurring events fall, and whether they land on each other. query 'next' gives the first occurrence after the date in 'after' (or on it when inclusive is true). query 'occurrences' gives every occurrence between start and end inclusive, capped at limit and at most 1000; 'truncated' says whether the list was cut short, so never read a truncated list as complete. query 'collisions' gives the days between start and end where two or more of the given events fall together, each naming what shares it — the question a calendar of festivals is really asking, and one to ask here rather than reason out in prose. An event is either a name the calendar defines or an event given inline: {'name':..,'type':'fixed','month':..,'day':..}, {'name':..,'type':'nth_weekday','month':..,'weekday':..,'n':..} or {'name':..,'type':'interval','anchor':{..},'every':N,'unit':'days'|'years'}. Pass one as 'event', or many as 'events' — which 'collisions' requires and which answers the other two queries for every event in a single call. A year in which an event's date does not exist produces no occurrence: a leap-day feast happens in leap years and not otherwise, and is never moved to a nearby day.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
afterNo
eventNo
limitNo
queryNonext
startNo
eventsNo
calendarYes
inclusiveNo

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries full behavioral burden and does so richly: inclusive boundary behavior, the 1000-cap and 'truncated' warning, the requirement that collisions need multiple events, and the leap-day/nonexistent-date rule. These are non-obvious behaviors that an agent needs to know to interpret results correctly.

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

Conciseness5/5

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

The description is long but densely informative, with no filler. It front-loads the core purpose, then organizes behavior by query, event specification, and edge cases, so every sentence earns its place.

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?

This is a complex 9-parameter tool with no annotations and no output schema, yet the description covers query semantics, boundary conditions, truncation, event formats, and missing-date behavior. It gives an agent enough to invoke the tool correctly and interpret the important parts of the response.

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

Parameters5/5

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

Schema coverage is 0%, so the description must compensate, and it does. It explains the meaning of 'query', 'after', 'start', 'end', 'inclusive', 'limit', 'event', 'events', and the inline event structure, giving concrete shape examples. Only the 'calendar' parameter gets light treatment, but the description still notes that calendar-defined event names are resolved through it.

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?

The description clearly states that the tool computes when recurring events fall and whether they collide, and then enumerates three specific query modes ('next', 'occurrences', 'collisions'). This is specific and immediately distinguishes calendar_events from sibling tools like calendar_periods or render_calendar_page, which serve different calendar-related purposes.

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?

The description gives explicit guidance on when to use each query and when to pass 'event' vs 'events', including the note that 'collisions' requires multiple events. It also tells users to prefer the tool over reasoning out collision answers in prose. It does not name sibling tools as alternatives, so it stops short of full when-not-to-use guidance.

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

calendar_periodsAInspect

Which named periods of the year a date falls in — a season, a tide, a term. Answers with a list, not one: a calendar may declare several cycles of periods and a date sits in one of each, so seasons and festival tides come back together. Each answer says which day of the period it is and how long the period runs, which is how 'early autumn' becomes a comparison rather than a guess. An empty list is a legal answer and means the calendar's periods do not cover that day; validate_calendar_spec reports the gaps and overlaps in a whole cycle. Pass 'dates' for more than one. Answers up to 1000 in one call, in the order given, as {count, ok, results}. Prefer this over one call per item: the spec travels once instead of once each.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
datesNo
calendarYes
on_errorNofail

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the burden, and it discloses many behavioral traits: multi-cycle returns, empty-list semantics, ordering, a batching limit of 1000, and the {count, o, results} response shape. It does not cover error/on_error behavior, but otherwise is unusually transparent.

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?

The description is dense and front-loaded, with each sentence contributing either behavioral semantics or a usage tip. A couple of stylistic phrases (''early autumn' becomes a comparison rather than a guess') add color but are not essential.

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

Completeness3/5

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

Because there is no output schema, the description appropriately explains the return shape and item contents. However, the lack of coverage for the required 'calendar' parameter and the error/on_error behavior means the definition is not fully sufficient on its own.

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

Parameters2/5

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

Schema description coverage is 0%, and the description only directly addresses the 'dates' parameter ('Pass 'dates' for more than one') and implicitly mentions the calendar spec. The required 'calendar' parameter and 'on_error' parameter are not sufficiently explained, leaving real gaps for a low-coverage schema.

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?

The description immediately states the operation: identifies which named periods of the year a date falls in — seasons, tides, terms. It also distinguishes itself from likely siblings by emphasizing it returns a list rather than a single value and handles multiple period cycles.

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?

The description gives clear batching guidance ('Prefer this over one call per item') and points to validate_calendar_spec for gap/overlap analysis. It does not explicitly exclude other sibling tools, but the domain is clear.

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

calendar_weekdayAInspect

Which weekday a date falls on, as a 0-based index into the calendar's own week plus its name. Exact; never estimates. Returns weekday null when the date is an intercalary day the week does not count: those days sit outside the cycle and the week resumes after them exactly where it left off. Fails if the calendar defines no week rather than inventing a seven-day one. Pass 'dates' instead of 'date' for more than one. Answers up to 1000 in one call, in the order given, as {count, ok, results}. Prefer this over one call per item: the spec travels once instead of once each.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
datesNo
calendarYes
on_errorNofail

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so thoroughly. It discloses exactness, the intercalary-day null return and week-resumption behavior, failure when the calendar defines no week, the 1000-item limit, ordering preservation, and the response envelope {count, ok, results}.

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

Conciseness5/5

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

Every sentence earns its place: purpose, edge-case behavior, failure mode, batching, limits, ordering, and output shape are all packed in without fluff. The description is front-loaded with the core meaning and only then adds behavioral details.

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 focused weekday-lookup tool with no annotations and no output schema, the description is unusually complete. It covers return value semantics, edge cases, error behavior, batch capacity, ordering, response shape, and a usage preference. No critical gap remains for an agent to invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It adds real meaning for date vs dates and the batch limit, and hints at calendar behavior by describing week definition failure. However, it leaves the calendar parameter's structure and the on_error parameter's semantics unexplained, so compensation is only partial.

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?

The description immediately states what the tool does: determine which weekday a date falls on, returning a 0-based index and name. It adds precise behavioral distinctions such as exactness, intercalary-day null handling, and failure rather than inventing a week, making it clearly distinguishable from sibling date tools.

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?

The description gives explicit batching guidance: pass dates instead of date for multiple items, and prefer a single batched call over one call per item. It does not explicitly name sibling alternatives or exclusion cases, but the intended usage context is clear.

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

convert_dateAInspect

Convert between a calendar date, its day number, and its Gregorian date. Give exactly one of date, day_number, gregorian or one of their plurals dates, day_numbers, gregorians; all three forms come back, with whether the year is a leap year, how long it is, and any named period of the year the date falls in. USE THE PLURALS FOR MORE THAN ONE DATE: the calendar spec travels on every call, so fifteen dates in one call cost the spec once instead of fifteen times, and there is no reason to work an answer out by hand to save a round trip. Answers up to 1000 in one call, in the order given, as {count, ok, results}. Prefer this over one call per item: the spec travels once instead of once each. Exact arithmetic; never estimates. A date that does not exist in this calendar is refused with the real range, never rounded to a nearby day.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
timeNo
datesNo
calendarYes
on_errorNofail
gregorianNo
day_numberNo
gregoriansNo
day_numbersNo

TDQS

A4.5/5.0
Behavior5/5

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

No annotations are provided, so the description must fully disclose behavior, and it does: it states exact arithmetic, refusal of nonexistent dates instead of rounding, the response shape {count, ok, results}, order preservation, and the calendar-spec cost model. This is far beyond minimal and gives the agent a reliable mental model of side effects, limits, and error behavior.

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?

The core purpose is front-loaded and the content is organized into input, batching, response, exactness, and error handling. Some redundancy exists — the calendar-spec cost point is made twice — and the all-caps plural instruction adds emphasis but also length. Overall, it is well-structured for a tool with this complexity.

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 tool with no output schema, no annotations, nested objects, and 9 parameters, the description covers the essentials: accepted input combinations, batching, limits, return envelope, exactness, and failure behavior. The main gaps are the undocumented 'time' and 'on_error' parameters and the lack of a detailed result-schema breakdown, but the description is still strong enough for correct invocation in most cases.

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 description coverage is 0%, so the description must compensate. It explains the singular/plural input constraint, which parameter groups are mutually exclusive, the role of calendar, batching semantics, and general output behavior. However, it does not clarify the 'time' or 'on_error' parameters, which remain underspecified even though they are in the schema.

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?

The description opens with a specific action, 'Convert between a calendar date, its day number, and its Gregorian date,' clearly identifying both the operation and the resource. It further distinguishes the tool by stating that all three forms are returned together, along with leap-year, year-length, and named-period information. This is enough to separate it from siblings like parse_calendar_date or format_calendar_date.

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?

The description gives concrete usage guidance: provide exactly one of date, day_number, gregorian, or their plurals, and use plurals when handling multiple dates. It also explains batching preferences and the 1000-item limit. It does not explicitly name sibling tools or state when to prefer an alternative, so it stops short of a 5.

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

date_intervalAInspect

The distance between two dates. 'days' is the exact signed count (negative when end precedes start) and is always reliable. 'calendar' breaks the same distance into whole years, then whole months, then days, using the clamp policy, so adding that breakdown back to the start date with add_to_date returns the end date exactly. Give start_time and end_time and the answer also carries 'ticks', the signed distance in the calendar's finest unit of the day, and 'time', that distance as whole days plus a count per unit. Give both or neither: one alone is refused rather than measured from the start of the other day, which would be a moment you did not give — pass 0 if that is what you mean. Exact integer arithmetic; never estimates.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYes
startYes
calendarYes
end_timeNo
start_timeNo

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations present, the description carries the full disclosure burden, and it delivers: signed distances, negative counts when end precedes start, the clamp policy, refusal when only one time parameter is supplied, a note that 0 can be passed intentionally, and a guarantee of exact integer arithmetic. Said behavior goes well beyond basic tool documentation and prevents common misinferences.

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?

The description is dense but appropriately so, since there is no output schema and no annotations to lean on. It is front-loaded with the core definition and then systematically adds edge cases, return-field semantics, and the exactness guarantee. The middle long sentence bundling 'ticks', 'time', and the pair rule is somewhat harder to parse, so it loses one point for structure.

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 tool with five parameters, zero schema coverage, and no output schema, the description covers the essential operational surface: input semantics, time-pair constraints, output fields, edge-case behavior, and the relationship to add_to_date. Its main remaining weakness is that the concrete structure of the 'calendar', 'start', and 'end' objects is not spelled out, leaving some ambiguity for an agent constructing arguments from scratch.

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?

The schema provides no textual documentation for the parameters—only empty objects and null defaults—so the description must compensate. It supplies meaning for start and end as dates, explains start_time and end_time semantics including the 'pass 0' rule, and connects the calendar parameter to the breakdown policy and clamp behavior. It does not fully specify the internal shape of the calendar or date objects, which is a gap, but the semantic guidance is strong.

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?

The description opens with a precise definition—the distance between two dates—and then explicitly separates the two meanings: exact signed 'days' versus a 'calendar' breakdown of years, months, and days. This level of specificity, plus naming add_to_date as the inverse operation, makes the tool's role unmistakable among many calendar sibling tools.

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?

The description sets clear context: use this tool when you need the exact distance between two dates, with integer arithmetic and a calendar-aware breakdown. It also gives operational rules such as 'Give both or neither: one alone is refused' and points to add_to_date for the inverse direction. It does not, however, enumerate explicit exclusion scenarios versus each alternative sibling, so it stops short of a perfect routing guide.

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

format_calendar_dateAInspect

Write a date out to a pattern. pattern is either a name from the calendar's own 'formats' (names win) or a pattern written out. Tokens: {day} {day-name} {month} {month-name} {year} {era} {era-abbr} {era-year} {intercalary} {period}, plus one named for each unit the spec's 'day' block declares ({bell}), with an optional zero-pad width on the numeric ones as {day:2}. Write a literal brace as {{ or }}. The output is exactly reversible by parse_calendar_date with the same pattern, so use these two as a pair. Pass 'dates' instead of 'date' to write many to the same pattern, with 'times' alongside when each carries its own time. Answers up to 1000 in one call, in the order given, as {count, ok, results}. Prefer this over one call per item: the spec travels once instead of once each.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
timeNo
datesNo
timesNo
patternYes
calendarYes
on_errorNofail

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and is highly transparent: it discloses the pattern language, optional zero-pad widths, literal brace escaping, the exact reversibility property, the response contract {count, ok, results}, that results preserve input order, and a maximum call of 1000 items. This is far beyond what the schema or annotations offer.

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

Conciseness5/5

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

The description is dense yet efficiently organized: purpose first, then token grammar, then batch behavior and recommendation. Every sentence adds necessary information—examples, limits, response shape, and a pairing note—without filler or redundancy.

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?

Despite having no output schema and no annotations, the description covers the core behavior, pattern syntax, batching, response shape, and the relationship to parse_calendar_date. Minor gaps remain: the shape of the 'calendar' object and the semantics of 'on_error' are not described, but they are partially inferrable from sibling tools and the parameter defaults.

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 description coverage is 0%, so the description must compensate. It does so well for the most complex parameter, pattern, and also explains the date vs dates distinction and the times companion. However, it says nothing about the required 'calendar' parameter or the 'on_error' parameter, which remain undocumented.

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?

The description opens with a specific verb and resource: 'Write a date out to a pattern.' It then details the pattern token grammar (day, month, year, era, intercalary, period, zero-padding), the plural 'dates' form, and the response shape, distinguishing it clearly from parse_calendar_date for the reverse operation. Even without referencing other siblings, the tool's purpose is unmistakable.

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?

Explicitly tells the agent to use parse_calendar_date with the same pattern because the output is exactly reversible, and strongly recommends the batch form ('Prefer this over one call per item') with a 1000-item cap. It does not contrast with other siblings like convert_date or add_to_date, but the pairing and batch guidance provide a clear usage context.

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

moon_phasesAInspect

Every moon's phase on a date. 'fraction' is the exact position in the cycle, 0.0 at new and 0.5 at full, and is the number to compute with. 'phase' is only which named bucket that fraction falls in, and 'illumination' is the lit portion of the disc from 0.0 to 1.0. Computed in closed form from the moon's period and offset, not simulated and not astronomical: it is exactly what the spec describes. Measured at the start of the day; pass day_fraction 0.5 for midday, or 'time' to say where in the day exactly for a calendar whose spec divides its day. Give one or the other.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
timeNo
calendarYes
day_fractionNo

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden, and it delivers: it discloses the closed-form computation model, the non-astronomical nature, the start-of-day measurement assumption, and how to adjust the observation point. This is rich, non-obvious behavioral context beyond the bare schema.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: it explains the output semantics, the computation model, the timing convention, and the input choice in a compact paragraph. Nothing is filler, and the most important phrase appears first.

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

Completeness3/5

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

For a tool with no output schema, the description does a good job defining returned values, and it covers the tricky day_fraction/time behavior. But it leaves meaningful gaps: the structure and semantics of the required 'calendar' and 'date' nested objects are not explained, and it does not specify what happens if both day_fraction and time are supplied despite 'Give one or the other.'

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It explains day_fraction and time well, including default behavior and mutual exclusivity, and it defines the meaning of the returned fields. However, it gives almost no guidance on the required 'date' and 'calendar' object parameters, which are nested and opaque in the schema.

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?

The opening line, 'Every moon's phase on a date,' states a specific computation and resource, and the rest of the description defines the output fields (fraction, phase, illumination) in enough detail to distinguish it from the sun/calendar siblings. It is a clear, non-tautological statement of what the tool does.

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?

The description gives explicit conditional guidance on when to pass 'day_fraction 0.5' versus 'time', and instructs 'Give one or the other.' It also draws a boundary around the model ('not simulated and not astronomical'), which prevents misuse. However, it does not explicitly name sibling tools such as sun_daylight or state when to choose them instead.

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

nth_weekday_of_monthBInspect

The nth given weekday of a month: the 3rd Tuesday, the last Friday. n is 1-based from the start of the month, or negative from the end (-1 is the last). Only days the week counts are considered. If the month has no such day the call fails naming how many there are; it never returns the nearest one instead. Exact; never estimates.

ParametersJSON Schema
NameRequiredDescriptionDefault
nYes
yearYes
monthYes
weekdayYes
calendarYes

TDQS

B3.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states that n is 1-based or negative, that failure occurs when the month lacks such a day, that the call reports how many such days exist, and that it never returns the nearest match. The 'Exact; never estimates' statement adds further clarity about deterministic behavior.

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?

The description is appropriately short and front-loads the core concept with examples. Every sentence contributes useful information, though the phrase 'Only days the week counts are considered' is awkward and may confuse rather than clarify the counting rule.

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

Completeness3/5

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

For a pure date calculation, the core algorithm and failure behavior are well covered. However, with no output schema and a nested calendar parameter, the description does not explain the expected return value or how to construct/interpret the calendar object, leaving the tool incompletely specified for an agent.

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

Parameters2/5

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

The description thoroughly explains the n parameter (1-based from start, negative from end) and gives examples for weekday. However, schema description coverage is 0%, and the calendar, year, month, and weekday encoding are left undefined. The nested calendar object in particular receives no explanation, leaving a significant semantic gap.

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

Purpose4/5

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

The description clearly states that the tool computes the nth occurrence of a given weekday in a month, with concrete examples ('the 3rd Tuesday, the last Friday'). It differentiates itself from sibling calendar tools by specifying exact weekday-ordinal semantics, though it lacks an explicit verb like 'returns' or 'computes'.

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

Usage Guidelines2/5

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

The description explains the calculation semantics but provides no guidance on when to use this tool versus alternatives such as calendar_weekday, date_interval, or convert_date. There are no exclusions or contextual conditions, so an agent must infer usage from the tool name.

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

parse_calendar_dateAInspect

Read a written date back into a date. Strict, with no fuzzy matching of any kind: literal characters must match character for character, month, weekday, era and period names must be names this calendar actually defines, and a weekday or period written into the string must be one that date really falls on. A string that does not fit is an error naming what did not fit; it never returns a best guess. Use the same pattern that wrote the string. A pattern that wrote a time of day gives the time back too.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
patternYes
calendarYes

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries full responsibility for behavioral disclosure. It thoroughly explains strict character-by-character matching, calendar-defined name restrictions, weekday/period consistency checks, error behavior that names what did not fit, and the absence of fuzzy guessing.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: purpose, strict mode, error behavior, pattern reuse, and time handling are all covered without redundancy. It is front-loaded with the core action and then layers constraints and usage guidance.

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 no-output-schema tool with three parameters and a nested calendar object, the description covers the essential behavior, inputs, and error outcomes well. It leaves some details implicit, such as exact pattern syntax and calendar-object structure, but these appear to be shared context with formatting tools. Overall it is sufficient for selection and mostly sufficient for correct invocation.

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 description coverage is 0%, so the description must add meaning beyond the input schema. It does: text is the written date, pattern is the pattern that created the string, and calendar provides the defined names. It does not provide concrete examples of pattern syntax, but it compensates reasonably for the missing schema documentation.

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?

The description states a specific verb and resource: it 'Read[s] a written date back into a date' and clarifies it is the inverse of formatting. The strictness and pattern-reuse language distinguish it from siblings like convert_date and format_calendar_date without needing to open their schemas.

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?

The description gives clear usage context: use the same pattern that wrote the string, and a time-of-day pattern yields the time back. It does not explicitly spell out when not to use this tool versus alternatives, but the inverse relationship to formatting is strongly implied.

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

render_calendar_pageAInspect

Draw one month of a calendar as an SVG grid, or a whole year on one sheet, and return the SVG itself. Columns come from the calendar's own week, so a ten-day week gets ten columns. Intercalary days belong to no month and never take a cell in the grid: the blocks either side of this month are drawn as a strip outside it, dashed when the week does not count them. Moons get a glyph per day, lit to that moon's phase, when the calendar defines any. Events use the same shape as render_timeline and are filtered to the days on this page, with at most 500 given and at most three shown per day before the rest become a count. Colours are assigned per color_key from the whole list before filtering, so a category keeps its colour across months. OMIT 'month' TO DRAW THE WHOLE YEAR on one sheet, every month side by side — for seeing at once whether festivals are evenly spread, which nine separate month pages do not show. A year sheet has no room for labels or moon glyphs, so each day carries its number and a dot per event, every dot holding its label in a . Fully deterministic: the same arguments always produce byte-identical SVG. The output is static SVG and never contains script or style.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
monthNo
themeNodefault
eventsNo
calendarYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so thoroughly: SVG output, variable column counts from the calendar's week, intercalary-day strip treatment, dashed strips, moon phase glyphs, event filtering, 500-event and 3-per-day limits, and color assignment before filtering are all detailed. No annotation contradiction exists.

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?

The description is dense but mostly earns its length: the core purpose is front-loaded, followed by behavioral constraints and then the whole-year mode. Some repetition exists around the year-sheet option, and the single unbroken block makes it harder to scan, but every major behavioral rule has a place.

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?

Given the output schema exists, the description does not need to explain return values, and it already covers many edge cases (intercalary days, week lengths, moons, event limits, color stability). The main gap is the undocumented 'theme' parameter and possibly the once unknown fifth parameter, which prevents a 5 for full contextual completeness.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It adds strong meaning for 'month' (omit to draw year), 'events' (filtering, limits, color behavior), and 'calendar' (week structure, intercalary days, moons). However, 'theme' is never mentioned or tied to the described color behavior, and there is a fifth parameter not covered by any described semantics.

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?

The description opens with a specific verb and resource: 'Draw one month of a calendar as an SVG grid, or a whole year on one sheet, and return the SVG itself.' This clearly distinguishes the tool from siblings like render_timeline and calendar_periods, and the month-or-year modal behavior is unique and explicit.

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?

The description gives clear usage context: it explains when to choose the whole-year mode ('for seeing at once whether festivals are evenly spread') and contrasts it with 'nine separate month pages do not show.' It also references render_timeline for event shape, though it does not fully spell out when to prefer one sibling over another.

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

render_timelineAInspect

Draw a date range as a horizontal SVG timeline and return the SVG itself. Both ends of the range are included. Axis ticks choose their own granularity from the span — days, months or years — and year labels use the calendar's eras where it defines them, so a range crossing a descending era's boundary counts down to it and up again after it, ... 3, 2, 1 | 1, 2, 3 ... Era boundaries inside the range are drawn as labelled vertical rules. Each event is {'label':.., 'date':{..}} for a marker or {'label':.., 'start':{..}, 'end':{..}} for a bar, optionally with 'lane' (a row name) and 'color_key' (a category name picking an accent colour). AT MOST 500 EVENTS: more is refused with render.timeline.too_many_events rather than drawn partially. Labels never overlap; they stagger and then truncate with an ellipsis, and the full label is always in the marker's whatever ends up drawn. theme is 'default', 'dark', or a theme object with all of font_family, background, axis, text and accents; colours must be #RGB or #RRGGBB and anything else is refused. Fully deterministic: the same arguments always produce byte-identical SVG, with no timestamps or generated ids in it. The output is static SVG and never contains script or style.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYes
startYes
themeNodefault
eventsNo
calendarYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it is exceptionally transparent. It discloses determinism, the 500-event refusal behavior, label overlap/truncation with <title> fallback, era-boundary handling, color validation, and that output is static SVG with no script or style.

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

Conciseness5/5

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

The description is dense but every sentence adds necessary behavioral or schema-related detail. The purpose is front-loaded, and the extensive constraints are presented in a logical progression from output semantics to event shapes to limits to determinism.

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?

The description covers return type, determinism, error behavior, label collision handling, theme restrictions, and event modeling. The main gap is that start, end, and calendar remain opaque objects in the schema and are only partially explained via the phrase 'date range' and references to calendar eras; an agent may still need additional context for those values.

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 description coverage is 0%, so the description must compensate, and it does substantively for events and theme: exact marker/bar shapes, optional lane and color_key, theme presets, required theme object keys, and color syntax. It leaves the exact nested shape of calendar, start, and end date objects somewhat implicit, which prevents a 5.

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?

The description opens with a specific action and deliverable: 'Draw a date range as a horizontal SVG timeline and return the SVG itself.' This clearly distinguishes it from siblings such as scatter_dates or render_calendar_page, even without naming them.

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?

The purpose statement gives clear context for when to use the tool: anytime an agent needs a horizontal SVG timeline of a date range. It does not explicitly name alternatives or state when not to use it, so it falls just short of a 5.

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

scatter_datesAInspect

Scatter a number of dates across a span, for generating events. The seed is required and the draw is fully deterministic: the same calendar, span, count, seed and unique flag always give the same dates, on any machine. unique=true (default) draws without repeats and fails if count exceeds the number of days in the span. Results come back sorted.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYes
seedYes
countYes
startYes
uniqueNo
calendarYes

TDQS

A4.1/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so well: it discloses determinism across machines, the required seed, repeat/unique behavior, the failure condition when count exceeds available days, and that results are sorted. This is substantial behavioral context beyond the bare schema.

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

Conciseness5/5

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

Three sentences deliver the core purpose, determinism guarantee, uniqueness semantics, failure mode, and sort order. Every sentence earns its place, and the most important behavioral constraints are front-loaded.

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

Completeness3/5

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

The tool has six parameters, three nested open objects, no output schema, and no annotations. The description explains determinism, uniqueness, failure, and sorted results, but it omits how 'calendar', 'start', and 'end' should be represented or constructed, and it does not describe the format of the returned dates beyond being sorted.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It adds useful meaning for 'seed' (required, deterministic) and 'unique' (default true, no repeats, failure condition), but it does not clarify the structure or semantics of 'calendar', 'start', and 'end', which are open objects with no schema documentation.

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

Purpose4/5

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

The description opens with a specific verb ('scatter'), a clear resource ('a number of dates across a span'), and an intended use ('for generating events'). It is clear about what the tool does, though it does not explicitly name or contrast sibling tools, so it stops short of full sibling differentiation.

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?

The phrase 'for generating events' provides a clear contextual trigger for when to use this tool. It does not explicitly state when not to use it or point to alternatives, but the intended use case is unambiguous enough for selection among the listed date-related siblings.

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

sun_daylightAInspect

How long each sun is up on a date, and between which times of day. THE CURVE IS DECLARED BY THE SPEC, NEVER INFERRED, and that is the point of this tool: a shortest day, a longest day and a solstice do not say what happens between them — a sinusoid and a straight line honour all three and disagree everywhere else, by nearly a whole bell at the quarter points — so the spec names the shape ('sinusoid', 'linear', or 'table' given point by point) and this evaluates it exactly. It is NOT astronomy: no latitude, no axial tilt, no orbit, and no attempt at plausibility. It is exactly what the calendar describes, the same promise moon_phases makes. 'rise' and 'set' sit either side of each sun's own noon, so several suns can be up at different hours; both are null when a sun is up all day or not at all, which 'always_up' and 'never_up' say. 'wraps' means a sun's span runs through the turn of the day. 'lit' is the UNION of every sun's span, not the sum: two suns sharing the sky make one lit stretch, and adding them would claim a day longer than it is. Each lit stretch is half-open, so its 'to' is the tick the light stops at and is never wrapped round: a sun up the whole day closes at one whole day, not at nought. A sun that does not keep to the year declares a 'period' in whole days and a dated 'epoch' instead of a solstice; its noon then drifts through the day once per cycle — on its own 'noon_period' where the spec gives one — and 'cycle' says where in its DAYLIGHT cycle the date falls (null for a sun that keeps to the year). Any number of suns. Fails rather than guessing if the calendar declares no suns, or no 'day' block to measure them in. Pass 'dates' for more than one. Answers up to 1000 in one call, in the order given, as {count, ok, results}. Prefer this over one call per item: the spec travels once instead of once each.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
datesNo
calendarYes
on_errorNofail

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and delivers extensively: curve shapes are 'DECLARED BY THE SPEC, NEVER INFERRED'; rise/set are 'null when a sun is up all day or not at all'; lit is 'the UNION of every sun's span, not the sum'; stretches are 'half-open'; non-year suns get period/epoch/noon_period/cycle semantics; return shape '{count, ok, results}' and failure mode are stated. This is exemplary disclosure for a complex tool.

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

Conciseness3/5

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

The core purpose is front-loaded, and every sentence does carry real information, but the body is one unbroken wall of text with ALL-CAPS emphasis and a long rhetorical analogy ('a sinusoid and a straight line honour all three and disagree everywhere else, by nearly a whole bell at the quarter points'). The prose is convoluted in places ('closes at one whole day, not at nought') and would be considerably clearer broken into segmented guidance.

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 tool with zero annotations, zero schema coverage, no output schema, and nested-object parameters, the description covers purpose, return format, error behavior, batching limits, and a large set of edge-case semantics (wraps, always_up/never_up, half-open lit stretches, period/epoch/cycle). Residual gaps: the concrete calendar object structure is only described conceptually, and on_error semantics are not explained. Very complete, with minor omissions an agent would have to infer.

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 description coverage is 0%, so the description must compensate, and it does for the dominant parameters: it explains what the calendar must declare (shape names, day block, suns), distinguishes date vs dates ('Pass dates for more than one'), and sets the batch ceiling ('Answers up to 1000 in one call, in the order given'). However, the on_error parameter is left entirely unexplained beyond the schema default, and the calendar's exact field names are only alluded to conceptually.

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?

The opening sentence, 'How long each sun is up on a date, and between which times of day,' states a concrete verb+resource+scope. It further differentiates the tool by declaring 'It is NOT astronomy: no latitude, no axial tilt, no orbit,' and by aligning its promise with sibling 'moon_phases' — so an agent can tell what this tool is and is not.

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?

The description gives explicit operating conditions: 'Pass dates for more than one,' 'Answers up to 1000 in one call,' 'Prefer this over one call per item,' and failure conditions ('Fails rather than guessing if the calendar declares no suns, or no day block'). It does not, however, name a specific sibling to route to under a specific alternative scenario — the moon_phases reference is an analogy, not a conditional exclusion.

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

validate_calendar_specAInspect

Check a calendar spec and list everything wrong with it. Returns structured errors and warnings; it never throws and never partially accepts a spec. Errors mean the spec is unusable; warnings mean it is legal but probably not what was meant (a leap rule that changes no year's length, a moon that cycles every few hours). Use this before any other tool when you have written or edited a spec yourself. It is the only tool that accepts a malformed spec. A key no block defines is one of the errors, and it names the fields that block does have, so this also answers what a block takes when you are unsure.

ParametersJSON Schema
NameRequiredDescriptionDefault
calendarYes

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It states the tool "never throws and never partially accepts a spec," defines the error/warning distinction, and discloses that missing keys are reported alongside the fields a block does have. This gives the agent a clear mental model of the tool's behavior before calling it.

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

Conciseness5/5

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

Every sentence earns its place: action, result semantics, usage timing, exclusivity, and error-based field discovery are each covered in dense but readable sentences. The core purpose is front-loaded, and the parenthetical examples are concrete without bloating the description.

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?

Given the simple one-parameter schema, no annotations, and no output schema, the description supplies all essential operational detail: what the tool checks, what it returns, how to interpret errors and warnings, when to use it, and how to extract schema knowledge from error messages. The absence of an explicit output schema is mitigated by the promise of "structured errors and warnings" and the field-naming behavior.

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?

The schema only defines a single `calendar` object with `additionalProperties: true`, so the description must compensate for the 0% schema coverage. It does this by identifying the input as the spec to validate and explaining how errors reveal the valid fields. It stops short of enumerating the block types or field names, but it explicitly tells the agent the tool itself will provide that information when needed.

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?

The description opens with a specific action and resource: "Check a calendar spec and list everything wrong with it." It clearly separates this tool from the sibling date/calendar operations by noting it is "the only tool that accepts a malformed spec," so an agent can identify its unique role as a validator.

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?

The description gives a direct rule: "Use this before any other tool when you have written or edited a spec yourself." It also explains that this is the only tool that accepts malformed specs, which tells the agent when no other tool can substitute. The distinction between errors and warnings further clarifies how to interpret results when deciding next steps.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 10 tool updates
    • Changedadd_to_date9 fields changed
      • removedInput schema / properties / date / additionalProperties
        Removed value: -true
      • addedInput schema / properties / date / anyOf
        Added value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / date / default
        Added value: +null
      • removedInput schema / properties / date / type
        Removed value: -"object"
      • addedInput schema / properties / on_error
        Added value: +{
        +  "default": "fail",
        +  "title": "On Error",
        +  "type": "string"
        +}
      • addedInput schema / properties / steps
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Steps"
        +}
      • addedInput schema / properties / ticks
        Added value: +{
        +  "default": 0,
        +  "title": "Ticks",
        +  "type": "integer"
        +}
      • addedInput schema / properties / time
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "type": "integer"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Time"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "calendar",
        -  "date"
        -]New value: +[
        +  "calendar"
        +]
    • Changedcalendar_events4 fields changed
      • changedInput schema / properties / event / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / event / default
        Added value: +null
      • addedInput schema / properties / events
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "additionalProperties": true,
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Events"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "calendar",
        -  "event"
        -]New value: +[
        +  "calendar"
        +]
    • Addedcalendar_periods
    • Changedcalendar_weekday7 fields changed
      • removedInput schema / properties / date / additionalProperties
        Removed value: -true
      • addedInput schema / properties / date / anyOf
        Added value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / date / default
        Added value: +null
      • removedInput schema / properties / date / type
        Removed value: -"object"
      • addedInput schema / properties / dates
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Dates"
        +}
      • addedInput schema / properties / on_error
        Added value: +{
        +  "default": "fail",
        +  "title": "On Error",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "calendar",
        -  "date"
        -]New value: +[
        +  "calendar"
        +]
    • Changedconvert_date5 fields changed
      • addedInput schema / properties / dates
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Dates"
        +}
      • addedInput schema / properties / day_numbers
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Day Numbers"
        +}
      • addedInput schema / properties / gregorians
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Gregorians"
        +}
      • addedInput schema / properties / on_error
        Added value: +{
        +  "default": "fail",
        +  "title": "On Error",
        +  "type": "string"
        +}
      • addedInput schema / properties / time
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "type": "integer"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Time"
        +}
    • Changeddate_interval2 fields changed
      • addedInput schema / properties / end_time
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "type": "integer"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "End Time"
        +}
      • addedInput schema / properties / start_time
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "type": "integer"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Start Time"
        +}
    • Changedformat_calendar_date9 fields changed
      • removedInput schema / properties / date / additionalProperties
        Removed value: -true
      • addedInput schema / properties / date / anyOf
        Added value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / date / default
        Added value: +null
      • removedInput schema / properties / date / type
        Removed value: -"object"
      • addedInput schema / properties / dates
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Dates"
        +}
      • addedInput schema / properties / on_error
        Added value: +{
        +  "default": "fail",
        +  "title": "On Error",
        +  "type": "string"
        +}
      • addedInput schema / properties / time
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "type": "integer"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Time"
        +}
      • addedInput schema / properties / times
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": {
        +              "type": "integer"
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "integer"
        +          }
        +        ]
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Times"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "calendar",
        -  "date",
        -  "pattern"
        -]New value: +[
        +  "calendar",
        +  "pattern"
        +]
    • Changedmoon_phases1 field changed
      • addedInput schema / properties / time
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "type": "integer"
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Time"
        +}
    • Changedrender_calendar_page4 fields changed
      • addedInput schema / properties / month / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / month / default
        Added value: +null
      • removedInput schema / properties / month / type
        Removed value: -"integer"
      • changedInput schema / required
        Previous value: -[
        -  "calendar",
        -  "year",
        -  "month"
        -]New value: +[
        +  "calendar",
        +  "year"
        +]
    • Addedsun_daylight
  2. 13 tool updates
    • First observedadd_to_date
    • First observedcalendar_events
    • First observedcalendar_weekday
    • First observedconvert_date
    • First observeddate_interval
    • First observedformat_calendar_date
    • First observedmoon_phases
    • First observednth_weekday_of_month
    • First observedparse_calendar_date
    • First observedrender_calendar_page
    • First observedrender_timeline
    • First observedscatter_dates
    • First observedvalidate_calendar_spec

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Converts between East Asian lunisolar calendars (Chinese, Japanese, Korean, Vietnamese) and Gregorian/Julian dates using Julian Day Numbers. Provides MCP tools for date conversion and era search.
    1
    -
  • A
    license
    A
    quality
    B
    maintenance
    Deterministic temporal reasoning engine for AI agents. LLMs are surprisingly bad at dates, timezones, business days, holidays, and recurring schedules. Taghvim gives agents deterministic temporal primitives they can call instead of guessing.
    12
    0
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to calculate deterministic Bazi (Four Pillars) charts with True Solar Time and Earthly Branch interactions, avoiding LLM hallucination of calendrical math.
    6
    161
    140
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct date/calendar operation: arithmetic, conversion, weekday lookup, period membership, moon phase, daylight, event queries, formatting/parsing, and two different rendering outputs. Even superficially similar tools (calendar_weekday vs nth_weekday_of_month, calendar_events vs calendar_periods) ask clearly different questions that the descriptions make unambiguous.

Naming Consistency4/5

Names are all lowercase snake_case and mostly follow a verb_first or noun_query pattern, but there is a mix: add_to_date, convert_date, and parse_calendar_date are imperative, while moon_phases, sun_daylight, and calendar_events are noun phrases describing what they return. The calendar_ prefix on three tools and consistent rendering parse/format pairs help readability, so this is a minor deviation, not chaos.

Tool Count5/5

15 tools sits at the upper bound of the ideal range for a focused domain toolkit. Every tool addresses a genuine calendar use case (define, convert, query, render, validate, generate), and none feels redundant or extraneous.

Completeness5/5

The set covers the full lifecycle of working with a custom calendar: validation before use, conversion between representations, date arithmetic and intervals, weekday and period queries, recurring events and daylight/moon data, formatting/parsing, and visual rendering. No obvious dead ends or missing operations come to mind for the stated domain.

Resources