Skip to main content
Glama

Totally Tarot Calculators

Convert a date between calendars

convert_calendar_date
Read-onlyIdempotent

Converts between the Gregorian calendar, the Julian calendar, 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 given Calendar Round. Use it for a Long Count from an inscription, a pre-1582 Julian-dated document, a Julian Day Number from a table, or "when was 4 Ahau 3 Kankin". Send EXACTLY ONE starting point — a Gregorian date, a jdn, a longcount or a julian date, or a round with from and to. Two is refused, not answered from whichever came first.

DELEGATE THIS RATHER THAN DERIVING IT, AND THERE IS A MEASUREMENT FOR HOW BADLY IT GOES: arXiv:2511.09993 put frontier models at 34.5% accuracy on calendar conversion across six calendars, against 95.3% for the same models given a tool. One off-by-one in a chain of six-digit integer steps yields a date that is real, plausible and wrong. Two traps: the calendars diverge by a different number of days each century (ten at the 1582 reform, thirteen now), and pre-reform dates are routinely quoted as Julian without saying so. This states the Goodman-Martinez-Thompson constant 584283 it used.

CITATION: required. See server instructions.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toNoLast Gregorian year of a Calendar Round search. Example: "2100". A wider span is slower, not better.
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". Send exactly ONE of date, jdn, longcount, julian.
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". Use it for sources 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. 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
  2. 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."
  3. 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"
      +  }
      +}
  4. First observed

TDQS

A4.3/5.0
Behavior5/5

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

The description goes well beyond the readOnlyHint and idempotentHint annotations. It discloses that multiple inputs are refused rather than silently answered, that calendar divergence varies by century, that off-by-one errors produce plausible but wrong dates, and that it uses the Goodman-Martinez-Thompson constant 584283. These are substantive behavioral disclosures with no contradiction against the annotations.

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 first sentence front-loads the core purpose, and the exact-one input rule is placed early. The delegation warning and arXiv statistic are genuinely useful for an AI agent, but they make the description longer than strictly necessary, so it misses a perfect score.

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 seven-parameter tool with no output schema, it covers every input category, the formatting expectations, use cases, and refusal behavior. The one gap is that it never describes the shape or structure of the returned conversions, which would be needed for fully complete guidance.

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 100%, so the baseline is 3. The description reinforces the exact-one-input rule and the round/from/to grouping, but those are already encoded in the schema fields like 'Only with round and to' and 'Needs from and to'. It adds no per-parameter information beyond what the schema already provides.

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 enumerates the full target resource set: Gregorian calendar, Julian calendar, Julian Day Number, and the three Maya counts. It also states the conversion direction explicitly ('any one to all the others'), and its use cases such as 'Long Count from an inscription' and 'when was 4 Ahau 3 Kankin' clearly separate it from 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?

It names four concrete trigger scenarios: Long Count inscriptions, pre-1582 Julian documents, Julian Day Numbers, and Calendar Round lookups. It also states the exclusivity rule ('Send EXACTLY ONE starting point... Two is refused'). It does not explicitly compare against siblings like compute_maya_day_sign, but the context is strong enough for confident selection.

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