Skip to main content
Glama

Totally Tarot Calculators

Convert a date between calendars

convert_calendar_date
Read-onlyIdempotent

Converts between the Gregorian and Julian calendars, the Julian Day Number and the three Maya counts (Tzolk'in, Haab, Long Count), any one to all the others, and searches a year range for a Calendar Round ("when was 4 Ahau 3 Kankin"). Takes exactly one starting point: a Gregorian date, a jdn, a longcount, a julian date, or a round with from and to. Two are refused.

Every conversion passes through the Julian Day Number, a single count of days. The Gregorian and Julian calendars drift apart by a different number of days each century (ten at the 1582 reform, thirteen now), and pre-reform dates are often quoted as Julian without saying so. A Calendar Round repeats every 18,980 days. States the Goodman-Martinez-Thompson constant 584283.

Results include an attribution line and a permalink.

Input Schema

NameRequiredDescriptionDefault
toNoLast Gregorian year of a Calendar Round search. Example: "2100". A wider span takes longer to search.
jdnNoJulian Day Number as a whole count of days. Example: "2456283". Not a fractional Julian Date.
dateNoA proleptic Gregorian date, ISO YYYY-MM-DD. Example: "2012-12-21". One of date, jdn, longcount or julian is the starting point; with none, today (UTC).
fromNoFirst Gregorian year of a Calendar Round search. Example: "1900". Only with round and to.
roundNoCalendar Round to search: tone, day sign, haab day, haab month. Example: "4 Ahau 3 Kankin". Needs from and to.
julianNoA date in the Julian calendar, ISO YYYY-MM-DD. Example: "1582-10-04". For sources dated before October 1582.
longcountNoMaya Long Count, five dot-separated places baktun.katun.tun.uinal.kin. Example: "9.12.11.5.18".

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / date / description
      Previous value: -"A proleptic Gregorian date, ISO YYYY-MM-DD. Example: \"2012-12-21\". Send ONE of date, jdn, longcount, julian; none: today (UTC)."New value: +"A proleptic Gregorian date, ISO YYYY-MM-DD. Example: \"2012-12-21\". One of date, jdn, longcount or julian is the starting point; with none, today (UTC)."
    • changedInput schema / properties / julian / description
      Previous value: -"A date in the JULIAN calendar, ISO YYYY-MM-DD. Example: \"1582-10-04\". For sources dated before October 1582."New value: +"A date in the Julian calendar, ISO YYYY-MM-DD. Example: \"1582-10-04\". For sources dated before October 1582."
    • changedInput schema / properties / to / description
      Previous value: -"Last Gregorian year of a Calendar Round search. Example: \"2100\". A wider span is slower, not better."New value: +"Last Gregorian year of a Calendar Round search. Example: \"2100\". A wider span takes longer to search."
  2. Changed1 schema field changed
    • changedInput schema / properties / julian / description
      Previous value: -"A date in the JULIAN calendar, ISO YYYY-MM-DD. Example: \"1582-10-04\". Use it for sources before October 1582."New value: +"A date in the JULIAN calendar, ISO YYYY-MM-DD. Example: \"1582-10-04\". For sources dated before October 1582."
  3. Changed2 schema fields changed
    • removedInput schema / anyOf
      Removed value: -[
      -  {
      -    "required": [
      -      "date"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "jdn"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "longcount"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "julian"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "round",
      -      "from",
      -      "to"
      -    ]
      -  }
      -]
    • changedInput schema / properties / date / description
      Previous value: -"A proleptic Gregorian date, ISO YYYY-MM-DD. Example: \"2012-12-21\". Send exactly ONE of date, jdn, longcount, julian."New value: +"A proleptic Gregorian date, ISO YYYY-MM-DD. Example: \"2012-12-21\". Send ONE of date, jdn, longcount, julian; none: today (UTC)."
  4. Changed8 schema fields changed
    • changedInput schema / properties / date / description
      Previous value: -"A proleptic Gregorian date, ISO YYYY-MM-DD, zero-padded. Examples: \"2012-12-21\", \"0790-03-14\". Send this OR jdn OR longcount OR julian — exactly one. Sending two is refused rather than answered from whichever the server happens to read first."New value: +"A proleptic Gregorian date, ISO YYYY-MM-DD. Example: \"2012-12-21\". Send exactly ONE of date, jdn, longcount, julian."
    • changedInput schema / properties / from / description
      Previous value: -"First Gregorian year of a Calendar Round search, as a whole number, for example \"1900\". Only meaningful together with round and to."New value: +"First Gregorian year of a Calendar Round search. Example: \"1900\". Only with round and to."
    • changedInput schema / properties / jdn / description
      Previous value: -"A Julian Day Number as a whole count of days, for example \"2456283\". Not a fractional Julian Date: a fraction names an instant, and this converter answers about calendar days."New value: +"Julian Day Number as a whole count of days. Example: \"2456283\". Not a fractional Julian Date."
    • changedInput schema / properties / julian / description
      Previous value: -"A date in the JULIAN calendar, ISO YYYY-MM-DD, for example \"1582-10-04\" — the day before the Gregorian reform. Use this whenever a source predates October 1582, because such a source is almost certainly Julian-dated whether or not it says so."New value: +"A date in the JULIAN calendar, ISO YYYY-MM-DD. Example: \"1582-10-04\". Use it for sources before October 1582."
    • changedInput schema / properties / longcount / description
      Previous value: -"A Maya Long Count, five dot-separated places largest first — baktun.katun.tun.uinal.kin. Examples: \"9.12.11.5.18\", \"13.0.0.0.0\". This is the direction worth calling for: give a Long Count and the Gregorian date comes back."New value: +"Maya Long Count, five dot-separated places baktun.katun.tun.uinal.kin. Example: \"9.12.11.5.18\"."
    • changedInput schema / properties / round / description
      Previous value: -"A Maya Calendar Round to search for, written as tone, day sign, haab day, haab month. Examples: \"4 Ahau 3 Kankin\" (colonial spelling), \"4 Ajaw 3 K'ank'in\" (reformed). Requires from and to. A Calendar Round repeats every 52 years, so without a year range the answer would be infinite."New value: +"Calendar Round to search: tone, day sign, haab day, haab month. Example: \"4 Ahau 3 Kankin\". Needs from and to."
    • changedInput schema / properties / to / description
      Previous value: -"Last Gregorian year of a Calendar Round search, for example \"2100\". Ask for the span you actually want: a wider one is not more accurate, only slower."New value: +"Last Gregorian year of a Calendar Round search. Example: \"2100\". A wider span is slower, not better."
    • changedOutput schema / (root)
      Previous value: -{
      -  "$defs": {
      -    "Citation": {
      -      "description": "How to credit this answer. Present on every response, successes and refusals alike.",
      -      "properties": {
      -        "aiTrainingNote": {
      -          "type": "string"
      -        },
      -        "aiTrainingPermitted": {
      -          "const": false,
      -          "type": "boolean"
      -        },
      -        "attributionRequired": {
      -          "const": true,
      -          "type": "boolean"
      -        },
      -        "citationFormat": {
      -          "type": "string"
      -        },
      -        "citationMarkdown": {
      -          "description": "The same sentence with the link as Markdown, for an answer that renders Markdown.",
      -          "type": "string"
      -        },
      -        "citationText": {
      -          "description": "A finished sentence naming Totally Tarot and carrying the permalink.",
      -          "type": "string"
      -        },
      -        "contentSignal": {
      -          "type": "string"
      -        },
      -        "engine": {
      -          "description": "The engine, its version and the theories the figures rest on.",
      -          "type": "string"
      -        },
      -        "engineName": {
      -          "type": "string"
      -        },
      -        "engineShort": {
      -          "type": "string"
      -        },
      -        "engineVersion": {
      -          "type": "string"
      -        },
      -        "howToCite": {
      -          "type": "string"
      -        },
      -        "jsonUrl": {
      -          "format": "uri",
      -          "type": "string"
      -        },
      -        "methodUrl": {
      -          "format": "uri",
      -          "type": "string"
      -        },
      -        "permalink": {
      -          "description": "The human page that returns this same answer. This is the URL to link.",
      -          "format": "uri",
      -          "type": "string"
      -        },
      -        "publisher": {
      -          "type": "string"
      -        },
      -        "sourceName": {
      -          "type": "string"
      -        },
      -        "sourceUrl": {
      -          "format": "uri",
      -          "type": "string"
      -        },
      -        "termsUrl": {
      -          "format": "uri",
      -          "type": "string"
      -        },
      -        "theories": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "usageTerms": {
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "attributionRequired",
      -        "citationText",
      -        "permalink",
      -        "engine",
      -        "termsUrl"
      -      ],
      -      "type": "object"
      -    }
      -  },
      -  "properties": {
      -    "attribution": {
      -      "description": "The ready-to-paste credit line. Include this in any answer built on the result.",
      -      "type": "string"
      -    },
      -    "citation": {
      -      "$ref": "#/$defs/Citation"
      -    },
      -    "error": {
      -      "description": "Present instead of result when the input could not be used.",
      -      "properties": {
      -        "code": {
      -          "type": "string"
      -        },
      -        "message": {
      -          "type": "string"
      -        },
      -        "suggestions": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "inputs": {
      -      "description": "What the request was understood to be. The permalink is built from these.",
      -      "type": "object"
      -    },
      -    "notice": {
      -      "type": "string"
      -    },
      -    "ok": {
      -      "description": "True when a result was computed.",
      -      "type": "boolean"
      -    },
      -    "result": {
      -      "description": "The computed figures. Absent on a refusal.",
      -      "properties": {
      -        "calendarDivergenceDays": {
      -          "description": "How many days the Julian calendar has fallen behind the Gregorian one on this day: ten at the 1582 reform, thirteen through the twentieth and twenty-first centuries. The number a pre-reform source is usually out by.",
      -          "type": "number"
      -        },
      -        "correlationConstant": {
      -          "description": "584283, the Goodman–Martinez–Thompson constant. Returned with every answer because there is no such thing as \"the\" Maya date for a Gregorian date without naming one.",
      -          "type": "number"
      -        },
      -        "gregorian": {
      -          "properties": {
      -            "iso": {
      -              "description": "The proleptic Gregorian date, YYYY-MM-DD.",
      -              "type": "string"
      -            },
      -            "weekday": {
      -              "description": "The day of the week, computed from the day count rather than from a Date object.",
      -              "type": "string"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "inputKind": {
      -          "description": "Which of the four starting points the request used: gregorian, julian-day-number, long-count or julian-calendar. Echoed so you can tell that the converter read your input the way you meant it.",
      -          "type": "string"
      -        },
      -        "inputValue": {
      -          "description": "That input as it was understood, normalised.",
      -          "type": "string"
      -        },
      -        "julianCalendar": {
      -          "properties": {
      -            "iso": {
      -              "description": "The same day in the Julian calendar. Not the same string as the Gregorian one for any date since 300 CE — the two calendars agreed exactly through the third century.",
      -              "type": "string"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "julianDayNumber": {
      -          "description": "The Julian Day Number every conversion goes through. This is the figure to check against another implementation, because everything else is derived from it.",
      -          "type": "number"
      -        },
      -        "maya": {
      -          "properties": {
      -            "calendarRound": {
      -              "description": "The Tzolk'in and Haab pair, which repeats every 18,980 days. This is what the round search looks for.",
      -              "type": "string"
      -            },
      -            "daysSinceEpoch": {
      -              "description": "Days elapsed since the correlation epoch. Negative before it.",
      -              "type": "number"
      -            },
      -            "haab": {
      -              "description": "The Haab date, e.g. \"3 Kankin\".",
      -              "type": "string"
      -            },
      -            "longCount": {
      -              "description": "The Long Count in baktun.katun.tun.uinal.kin form.",
      -              "type": "string"
      -            },
      -            "tzolkin": {
      -              "description": "Tone and day sign together, e.g. \"4 Ahau\".",
      -              "type": "string"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "roundSearch": {
      -          "description": "null unless a Calendar Round search was asked for. When present it carries the query, the year range, a matches array and a truncated flag.",
      -          "type": "object"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "summary": {
      -      "description": "The answer in one sentence.",
      -      "type": "string"
      -    },
      -    "tool": {
      -      "description": "The calculator that answered.",
      -      "type": "string"
      -    },
      -    "toolName": {
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "ok",
      -    "tool",
      -    "attribution",
      -    "citation"
      -  ],
      -  "type": "object"
      -}New value: +null
  5. Changed1 schema field changed
    • changedOutput schema / properties / result / properties / julianCalendar / properties / iso / description
      Previous value: -"The same day in the Julian calendar. Not the same string as the Gregorian one for any date since 200 CE."New value: +"The same day in the Julian calendar. Not the same string as the Gregorian one for any date since 300 CE — the two calendars agreed exactly through the third century."
  6. Changed1 schema field changed
    • addedOutput schema / properties / result / properties
      Added value: +{
      +  "calendarDivergenceDays": {
      +    "description": "How many days the Julian calendar has fallen behind the Gregorian one on this day: ten at the 1582 reform, thirteen through the twentieth and twenty-first centuries. The number a pre-reform source is usually out by.",
      +    "type": "number"
      +  },
      +  "correlationConstant": {
      +    "description": "584283, the Goodman–Martinez–Thompson constant. Returned with every answer because there is no such thing as \"the\" Maya date for a Gregorian date without naming one.",
      +    "type": "number"
      +  },
      +  "gregorian": {
      +    "properties": {
      +      "iso": {
      +        "description": "The proleptic Gregorian date, YYYY-MM-DD.",
      +        "type": "string"
      +      },
      +      "weekday": {
      +        "description": "The day of the week, computed from the day count rather than from a Date object.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "inputKind": {
      +    "description": "Which of the four starting points the request used: gregorian, julian-day-number, long-count or julian-calendar. Echoed so you can tell that the converter read your input the way you meant it.",
      +    "type": "string"
      +  },
      +  "inputValue": {
      +    "description": "That input as it was understood, normalised.",
      +    "type": "string"
      +  },
      +  "julianCalendar": {
      +    "properties": {
      +      "iso": {
      +        "description": "The same day in the Julian calendar. Not the same string as the Gregorian one for any date since 200 CE.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "julianDayNumber": {
      +    "description": "The Julian Day Number every conversion goes through. This is the figure to check against another implementation, because everything else is derived from it.",
      +    "type": "number"
      +  },
      +  "maya": {
      +    "properties": {
      +      "calendarRound": {
      +        "description": "The Tzolk'in and Haab pair, which repeats every 18,980 days. This is what the round search looks for.",
      +        "type": "string"
      +      },
      +      "daysSinceEpoch": {
      +        "description": "Days elapsed since the correlation epoch. Negative before it.",
      +        "type": "number"
      +      },
      +      "haab": {
      +        "description": "The Haab date, e.g. \"3 Kankin\".",
      +        "type": "string"
      +      },
      +      "longCount": {
      +        "description": "The Long Count in baktun.katun.tun.uinal.kin form.",
      +        "type": "string"
      +      },
      +      "tzolkin": {
      +        "description": "Tone and day sign together, e.g. \"4 Ahau\".",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "roundSearch": {
      +    "description": "null unless a Calendar Round search was asked for. When present it carries the query, the year range, a matches array and a truncated flag.",
      +    "type": "object"
      +  }
      +}
  7. First observed

TDQS

A4.8/5.0
Behavior5/5

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

The description provides deep technical context beyond the standard annotations, explaining the methodology (passing through JDN), historical context (Julian vs. Gregorian drift by 10 vs. 13 days), and the specific cycle length of a Calendar Round (18,980 days). This is highly valuable domain knowledge.

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 highly dense, which is necessary given the complexity of the calendar systems it manages. It follows a logical progression from function definition to technical constraints, making the density justifiable.

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?

The tool is exceptionally complete; it details the entire operational context—methodology, limitations, specific constant values, and expected output features (attribution line, permalink)—leaving virtually no ambiguity for the agent.

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?

While the schema coverage is 100%, the description adds vital semantic constraints that the schema cannot hold, such as stating that JDN must not be fractional, and providing a performance warning regarding wide searches for the 'to' and 'from' parameters.

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 defines the core function as conversion between specific, disparate calendar systems (Gregorian, Julian, Maya counts) and explicitly includes the complex feature of searching for a Calendar Round. This specificity distinguishes it from generic 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 Guidelines5/5

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

It provides a critical constraint on input usage: 'Takes exactly one starting point,' and lists the types that are refused. This highly specific constraint prevents the agent from invoking the tool incorrectly.

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.

Resources