Skip to main content
Glama

Astro Agents - deterministic Western + Vedic astrology

Birth time resolver

resolve_birth_time
Read-onlyIdempotent

Astrology birth time to UTC conversion: convert a local birth date, time and place into exact Universal Time, with the historical time zone and UTC offset, Delta T, Local Mean Time and true solar time. The step LLMs most often get wrong. Resolves the IANA time zone from coordinates, applies the offset in force on that date (historical DST, Local Mean Time before standard time), flags ambiguous or non-existent local times instead of guessing, and returns Julian Days (UT/TT), Delta T, Local Mean Time, true (apparent) solar time and the equation of time. Deterministic (JPL DE440, no LLM); every result carries meta.result_sha256. Price $0.01 per call via REST POST https://astro-agent.dev/v1/time/resolve (x402 or MPP); your first 3 calls are free here.

Input Schema

NameRequiredDescriptionDefault
dateNoYYYY-MM-DD (use with 'time' instead of 'datetime').
timeNoHH:MM or HH:MM:SS, 24 h. Omit if unknown (computed at 12:00 with a TIME_UNKNOWN warning).
datetimeNoLocal birth date-time, ISO 8601: '1990-05-15T14:30' (local clock time at the place) or with an explicit offset '1990-05-15T14:30:00+02:00'. Alternative: 'date' + 'time'.
latitudeNoDecimal degrees, north positive.
timezoneNoIANA zone, e.g. 'Asia/Kolkata'. Optional: resolved from the coordinates, with the historical offset (DST, Local Mean Time) of that date.
longitudeNoDecimal degrees, east positive.
time_basisNoWhat the given clock time is: civil wall-clock (default), UTC, Local Mean Time, or true (apparent) solar time.civil
ambiguous_timeNoWhich occurrence to use when a local time happens twice (DST fall-back).earlier

Output Schema

NameRequiredDescriptionDefault
metaYesProvenance of the result.
resultYesThe calculation result.
endpointYesThe REST route that computed it, e.g. 'western/natal'.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "endpoint": {
      +      "description": "The REST route that computed it, e.g. 'western/natal'.",
      +      "type": "string"
      +    },
      +    "meta": {
      +      "description": "Provenance of the result.",
      +      "properties": {
      +        "astronomy_library": {
      +          "description": "Astronomy library and version.",
      +          "type": "string"
      +        },
      +        "compute_ms": {
      +          "description": "Computation time in milliseconds.",
      +          "type": "number"
      +        },
      +        "computed_at": {
      +          "description": "When it was computed (UTC, ISO 8601).",
      +          "type": "string"
      +        },
      +        "deterministic": {
      +          "description": "Always true: same input, same result.",
      +          "type": "boolean"
      +        },
      +        "engine": {
      +          "description": "Engine name and version.",
      +          "type": "string"
      +        },
      +        "ephemeris": {
      +          "description": "Ephemeris used (NASA/JPL DE440).",
      +          "type": "string"
      +        },
      +        "frame": {
      +          "description": "Reference frame of the positions.",
      +          "type": "string"
      +        },
      +        "input_sha256": {
      +          "description": "SHA-256 of the canonical input.",
      +          "type": "string"
      +        },
      +        "llm_used": {
      +          "description": "Always false: no language model is involved.",
      +          "type": "boolean"
      +        },
      +        "payment": {
      +          "description": "How this call was paid: protocol ('free' or 'none'), price and the free calls remaining.",
      +          "type": "object"
      +        },
      +        "reproducibility": {
      +          "description": "How to reproduce and check this result.",
      +          "type": "string"
      +        },
      +        "result_sha256": {
      +          "description": "SHA-256 of the canonical 'result'; check it with verify_result_hash.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "engine",
      +        "deterministic",
      +        "llm_used",
      +        "input_sha256",
      +        "result_sha256"
      +      ],
      +      "type": "object"
      +    },
      +    "result": {
      +      "description": "The calculation result.",
      +      "properties": {
      +        "location": {
      +          "description": "The latitude and longitude used, in decimal degrees.",
      +          "type": "object"
      +        },
      +        "time": {
      +          "description": "Resolved time: local input, IANA time zone and how it was found, historical UTC offset, DST flag, UTC instant, Julian days (UT and TT), Delta T, local mean time, true solar time and the equation of time.",
      +          "type": "object"
      +        },
      +        "warnings": {
      +          "description": "Notes on the input or the calculation (for example an assumed noon for an unknown birth time). Present only when there is something to say.",
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "time",
      +        "location"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "endpoint",
      +    "result",
      +    "meta"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.3/5.0
Behavior5/5

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

Goes well past the annotations: declares determinism (JPL DE440, no LLM), a verifiable meta.result_sha256, ambiguity handling that flags rather than guesses, historical DST/LMT rules, and the pricing/auth model ($0.01 per call, x402 or MPP, first 3 free, REST endpoint). This is exactly the extra context an agent needs and annotations do not carry.

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?

Front-loads the core purpose well, but the return values are enumerated twice ('with the historical time zone and UTC offset, Delta T, Local Mean Time and true solar time' then 'returns Julian Days (UT/TT), Delta T, Local Mean Time, true (apparent) solar time and the equation of time') and an output schema already exists. The pricing/endpoint sentence is useful but tacked on.

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 an 8-parameter tool with tricky historical-timezone edge cases, the description covers input semantics, ambiguity policy, determinism, verification, and commercial access. Nothing an agent needs in order to call it correctly is missing.

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 100%, so every parameter is already documented, and the description adds no syntax or format detail beyond it. It does explain the ambiguous/non-existent time policy and coordinate-based timezone resolution, which lightly frames ambiguous_time and timezone, but the baseline 3 applies when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource up front ('Astrology birth time to UTC conversion: convert a local birth date, time and place into exact Universal Time') and enumerates the outputs. It is unmistakably distinct from siblings like natal_chart, kundli, or verify_result_hash.

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?

Positions the tool as 'The step LLMs most often get wrong', which implies it is the preprocessing step before chart work, and notes the fallback behaviour when time is unknown. It never names an alternative sibling or states when NOT to use it, so it stops short of explicit routing.

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.