Skip to main content
Glama

Moon state and appearance

astro_moon
Read-onlyIdempotent

The Moon at an instant or as a daily series: phase name and angle, illuminated fraction, distance, apparent size, libration, bright limb, and the next quarter phases. A location adds rise/set and altitude. For a calendar of new and full moons use astro_moon_phases; for the Moon's exact coordinates use astro_positions.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tzNoIANA timezone like "Europe/Lisbon" to render event times in local time. Optional; a resolved place supplies its own timezone.
endNoLast day of a daily series. ISO 8601 UTC date or datetime, e.g. "2026-08-06" or "2026-08-06T21:00:00Z". Or jd: followed by a Julian Day on the UT scale, e.g. "jd:2461000.5". On astro_positions, date may list up to 24 datetimes separated by commas, answered in the order sent. Omit for the current moment. Years 1700 to 2200 only; outside that range the API refuses with DATE_OUT_OF_RANGE because the ephemeris is not reliable there.
latNoLatitude in decimal degrees, north positive. Send lat and lon together.
lonNoLongitude in decimal degrees, east positive (Lisbon is about -9.14). Send lat and lon together.
dateNoISO 8601 UTC date or datetime, e.g. "2026-08-06" or "2026-08-06T21:00:00Z". Or jd: followed by a Julian Day on the UT scale, e.g. "jd:2461000.5". On astro_positions, date may list up to 24 datetimes separated by commas, answered in the order sent. Omit for the current moment. Years 1700 to 2200 only; outside that range the API refuses with DATE_OUT_OF_RANGE because the ephemeris is not reliable there.
countNoNumber of daily rows from start (alternative to end).
placeNoPlace name instead of lat/lon, as "City" or "City,CC" with an ISO country code, e.g. "Lisbon,PT". Resolved server-side; the response then carries a required GeoNames CC BY 4.0 credit in its attribution field, which must be preserved when shown.
startNoFirst day of a daily series. ISO 8601 UTC date or datetime, e.g. "2026-08-06" or "2026-08-06T21:00:00Z". Or jd: followed by a Julian Day on the UT scale, e.g. "jd:2461000.5". On astro_positions, date may list up to 24 datetimes separated by commas, answered in the order sent. Omit for the current moment. Years 1700 to 2200 only; outside that range the API refuses with DATE_OUT_OF_RANGE because the ephemeris is not reliable there.
cursorNoOpaque pagination cursor from a previous result's next_cursor. Send it with the same start/end arguments as the first page.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dataYesThe Moon's state and appearance, or a sampled series in range mode.
rightsNoEither unrestricted, or attribution_required when third-party place data was used. When attribution_required, the attribution line must be shown.
warningsNoMachine-readable notices about this answer. Present only when non-empty. Never changes whether the call succeeded.
attributionNoThe credit line to display verbatim when rights is attribution_required.
next_cursorNoPresent only when more rows exist. Send it back with the SAME start/end arguments as the first call to get the next page.
not_computedNoData this API deliberately does not serve, and why. Present only when the question touched such a field. An absence named here is information: treat it as "withheld", never as "none exists".

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / date / description
      Previous value: -"ISO 8601 UTC date or datetime, e.g. \"2026-08-06\" or \"2026-08-06T21:00:00Z\". Omit for the current moment. Years 1700 to 2200 only; outside that range the API refuses with DATE_OUT_OF_RANGE because the ephemeris is not reliable there."New value: +"ISO 8601 UTC date or datetime, e.g. \"2026-08-06\" or \"2026-08-06T21:00:00Z\". Or jd: followed by a Julian Day on the UT scale, e.g. \"jd:2461000.5\". On astro_positions, date may list up to 24 datetimes separated by commas, answered in the order sent. Omit for the current moment. Years 1700 to 2200 only; outside that range the API refuses with DATE_OUT_OF_RANGE because the ephemeris is not reliable there."
    • changedInput schema / properties / end / description
      Previous value: -"Last day of a daily series. ISO 8601 UTC date or datetime, e.g. \"2026-08-06\" or \"2026-08-06T21:00:00Z\". Omit for the current moment. Years 1700 to 2200 only; outside that range the API refuses with DATE_OUT_OF_RANGE because the ephemeris is not reliable there."New value: +"Last day of a daily series. ISO 8601 UTC date or datetime, e.g. \"2026-08-06\" or \"2026-08-06T21:00:00Z\". Or jd: followed by a Julian Day on the UT scale, e.g. \"jd:2461000.5\". On astro_positions, date may list up to 24 datetimes separated by commas, answered in the order sent. Omit for the current moment. Years 1700 to 2200 only; outside that range the API refuses with DATE_OUT_OF_RANGE because the ephemeris is not reliable there."
    • changedInput schema / properties / start / description
      Previous value: -"First day of a daily series. ISO 8601 UTC date or datetime, e.g. \"2026-08-06\" or \"2026-08-06T21:00:00Z\". Omit for the current moment. Years 1700 to 2200 only; outside that range the API refuses with DATE_OUT_OF_RANGE because the ephemeris is not reliable there."New value: +"First day of a daily series. ISO 8601 UTC date or datetime, e.g. \"2026-08-06\" or \"2026-08-06T21:00:00Z\". Or jd: followed by a Julian Day on the UT scale, e.g. \"jd:2461000.5\". On astro_positions, date may list up to 24 datetimes separated by commas, answered in the order sent. Omit for the current moment. Years 1700 to 2200 only; outside that range the API refuses with DATE_OUT_OF_RANGE because the ephemeris is not reliable there."
  2. Changed3 schema fields changed
    • changedOutput schema / properties / data / properties / angular_diameter_arcsec / description
      Previous value: -"Apparent disc size in arcseconds."New value: +"Apparent disk size in arcseconds."
    • changedOutput schema / properties / data / properties / distance_km / description
      Previous value: -"Centre-to-centre distance in kilometres."New value: +"Center-to-center distance in kilometres."
    • changedOutput schema / properties / data / properties / position_geocentric / description
      Previous value: -"Position as seen from Earth's centre."New value: +"Position as seen from Earth's center."
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "The MCP projection of a CycleCalcs v2 response: the answer, plus the provenance a caller needs to use it honestly.",
      +  "properties": {
      +    "attribution": {
      +      "description": "The credit line to display verbatim when rights is attribution_required.",
      +      "type": "string"
      +    },
      +    "data": {
      +      "additionalProperties": true,
      +      "description": "The Moon's state and appearance, or a sampled series in range mode.",
      +      "properties": {
      +        "angular_diameter_arcsec": {
      +          "description": "Apparent disc size in arcseconds.",
      +          "type": "number"
      +        },
      +        "bright_limb": {
      +          "description": "Which way the lit edge points.",
      +          "type": "object"
      +        },
      +        "constellation": {
      +          "description": "The IAU constellation the Moon currently occupies.",
      +          "type": "object"
      +        },
      +        "distance_au": {
      +          "description": "The same distance in astronomical units.",
      +          "type": "number"
      +        },
      +        "distance_basis": {
      +          "description": "Whether the distance is geocentric or topocentric.",
      +          "type": "string"
      +        },
      +        "distance_km": {
      +          "description": "Centre-to-centre distance in kilometres.",
      +          "type": "number"
      +        },
      +        "event_definition": {
      +          "description": "The altitude convention rise and set are measured against.",
      +          "type": "string"
      +        },
      +        "fraction_of_mean_distance": {
      +          "description": "Distance relative to the mean, for supermoon claims.",
      +          "type": "number"
      +        },
      +        "fraction_of_mean_distance_definition": {
      +          "description": "How that fraction is defined.",
      +          "type": "string"
      +        },
      +        "libration": {
      +          "description": "The rocking that reveals a little of the far side.",
      +          "type": "object"
      +        },
      +        "magnitude": {
      +          "description": "Apparent visual brightness.",
      +          "type": "number"
      +        },
      +        "next_phases": {
      +          "description": "Upcoming quarter phases with exact instants.",
      +          "type": "array"
      +        },
      +        "parallax_deg": {
      +          "description": "Angular shift between those two viewpoints.",
      +          "type": "number"
      +        },
      +        "phase": {
      +          "description": "Phase name, angle and illuminated fraction.",
      +          "type": "object"
      +        },
      +        "position_geocentric": {
      +          "description": "Position as seen from Earth's centre.",
      +          "type": "object"
      +        },
      +        "position_topocentric": {
      +          "description": "Position as seen from the given location.",
      +          "type": "object"
      +        },
      +        "rise_set": {
      +          "description": "Moonrise and moonset for the location.",
      +          "type": "object"
      +        },
      +        "series": {
      +          "description": "RANGE MODE ONLY: one sampled entry per step.",
      +          "type": "array"
      +        },
      +        "summary": {
      +          "description": "A one-line reading of the Moon right now.",
      +          "type": "string"
      +        },
      +        "tropical_sign": {
      +          "description": "Tropical ecliptic longitude, reported as position only.",
      +          "type": "object"
      +        },
      +        "window": {
      +          "description": "The instant or range actually evaluated.",
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "next_cursor": {
      +      "description": "Present only when more rows exist. Send it back with the SAME start/end arguments as the first call to get the next page.",
      +      "type": "string"
      +    },
      +    "not_computed": {
      +      "description": "Data this API deliberately does not serve, and why. Present only when the question touched such a field. An absence named here is information: treat it as \"withheld\", never as \"none exists\".",
      +      "type": "array"
      +    },
      +    "rights": {
      +      "description": "Either unrestricted, or attribution_required when third-party place data was used. When attribution_required, the attribution line must be shown.",
      +      "type": "string"
      +    },
      +    "warnings": {
      +      "description": "Machine-readable notices about this answer. Present only when non-empty. Never changes whether the call succeeded.",
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "data"
      +  ],
      +  "type": "object"
      +}
  4. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds real behavioral context beyond that: it discloses that supplying a location changes the returned fields (rise/set, altitude) and that output includes a daily-series mode. It does not discuss rate limits or failure modes, but the schema already documents the DATE_OUT_OF_RANGE year bounds.

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?

Two sentences, no filler, and the capability enumeration is front-loaded ahead of the sibling-routing clauses. Every clause carries information an agent needs.

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?

With an output schema present, rich annotations, and 100% schema coverage across nine parameters, the description covers the remaining gap: what the tool is for and how it differs from adjacent Moon/position tools. Nothing required 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 description coverage is 100%, so the schema already explains tz, start/end/count, lat/lon, place, and cursor in detail. The description adds nothing about parameter syntax or formats, so the baseline 3 applies.

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 resource (the Moon) with a clear enumeration of what it returns: phase name and angle, illuminated fraction, distance, apparent size, libration, bright limb, and next quarter phases. It also distinguishes itself from siblings astro_moon_phases and astro_positions by name, so an agent can route without opening any schema.

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?

Gives explicit routing: 'For a calendar of new and full moons use astro_moon_phases; for the Moon's exact coordinates use astro_positions.' It also states the conditional behavior of supplying a location (adds rise/set and altitude), which tells the agent when extra params are worth sending.

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