Skip to main content
Glama

Totally Tarot Calculators

Get every planet's position on a date

get_planetary_positions
Read-onlyIdempotent

Returns where every body is at an instant, with no birth data and no place required: Sun, Moon, the eight planets and the two lunar nodes, each with geocentric ecliptic longitude, sign and degree in both the tropical (Western) and sidereal (Vedic) zodiacs, ecliptic latitude, longitude speed in degrees per day, retrograde state and distance. It covers "what sign is Venus in", "where is Mercury right now", "what sign is the Moon in today", "when did Mars enter Gemini": any position question about the sky with no particular person's chart in it.

A geocentric longitude is identical for every observer on Earth, so a sky question needs no birthplace and no chart. An observer's lat and lon are used only for rise and set times.

A planet sits within a degree of a cusp for days, so "Venus is in Scorpio" can be true on Tuesday and false on Wednesday; the Moon moves about half a degree an hour and changes sign roughly every 2.3 days, so its row depends on the hour as well as the date. "time" is UTC and defaults to 00:00.

Both zodiacs come back in every row: result.bodies[].sign is the tropical sign and result.bodies[].siderealSign the sidereal one. They differ by result.ayanamsa, about 24 degrees, very nearly a whole sign, so the two are usually different signs. Rahu and Ketu are the mean nodes (result.nodeNote). result.retrogradeNow lists which of the eight stationing bodies are retrograde; the two nodes, which move backwards every day, are reported apart in result.alwaysRetrograde.

Results include an attribution line and a permalink.

Input Schema

NameRequiredDescriptionDefault
tzNoIANA zone or numeric UTC offset hours for the local rise and set times. Example: "Atlantic/Reykjavik".
latNoObserver latitude in decimal degrees as a string. Example: "64.1466". Paired with lon. Rise and set only.
lonNoObserver longitude in decimal degrees as a string. Example: "-21.9426". Paired with lat. Rise and set only.
dateNoThe date, ISO YYYY-MM-DD, 1700-2200. Example: "2026-09-21". Defaults to today (UTC).
timeNoTime of day HH:MM, read as UTC. Example: "12:00". Matters for the Moon, which moves about half a degree an hour.
placeNoObserver town or city. Example: "Reykjavik, Iceland". Optional; it changes no position, only rise and set times.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedInput schema / properties / date / description
      Previous value: -"The date, ISO YYYY-MM-DD, 1700-2200. Example: \"2026-09-21\". Omit: today (UTC)."New value: +"The date, ISO YYYY-MM-DD, 1700-2200. Example: \"2026-09-21\". Defaults to today (UTC)."
    • changedInput schema / properties / lat / description
      Previous value: -"Observer latitude in decimal degrees as a string. Example: \"64.1466\". Send with lon. Rise and set only."New value: +"Observer latitude in decimal degrees as a string. Example: \"64.1466\". Paired with lon. Rise and set only."
    • changedInput schema / properties / lon / description
      Previous value: -"Observer longitude in decimal degrees as a string. Example: \"-21.9426\". Send with lat. Rise and set only."New value: +"Observer longitude in decimal degrees as a string. Example: \"-21.9426\". Paired with lat. Rise and set only."
    • changedInput schema / properties / place / description
      Previous value: -"Observer town or city. Example: \"Reykjavik, Iceland\". OPTIONAL: it changes no position, only rise and set times."New value: +"Observer town or city. Example: \"Reykjavik, Iceland\". Optional; it changes no position, only rise and set times."
    • changedInput schema / properties / time / description
      Previous value: -"Time of day HH:MM in UTC, not local and not a birth time. Example: \"12:00\". Matters for the Moon, which moves about half a degree an hour."New value: +"Time of day HH:MM, read as UTC. Example: \"12:00\". Matters for the Moon, which moves about half a degree an hour."
  2. Changed1 schema field changed
    • changedInput schema / properties / time / description
      Previous value: -"Time of day HH:MM in UTC, not local and not a birth time. Example: \"12:00\". Send it for Moon questions."New value: +"Time of day HH:MM in UTC, not local and not a birth time. Example: \"12:00\". Matters for the Moon, which moves about half a degree an hour."
  3. Changed2 schema fields changed
    • changedInput schema / properties / date / description
      Previous value: -"The date, ISO YYYY-MM-DD, 1700-2200. Example: \"2026-09-21\", or today's for \"where is Mercury right now\"."New value: +"The date, ISO YYYY-MM-DD, 1700-2200. Example: \"2026-09-21\". Omit: today (UTC)."
    • removedInput schema / required
      Removed value: -[
      -  "date"
      -]
  4. Changed7 schema fields changed
    • changedInput schema / properties / date / description
      Previous value: -"The date, ISO YYYY-MM-DD, zero-padded, between 1700 and 2200. Examples: \"2026-09-21\", today's date for \"where is Mercury right now\"."New value: +"The date, ISO YYYY-MM-DD, 1700-2200. Example: \"2026-09-21\", or today's for \"where is Mercury right now\"."
    • changedInput schema / properties / lat / description
      Previous value: -"Observer latitude in decimal degrees as a string, e.g. \"64.1466\". Must be sent together with lon. Only affects rise and set."New value: +"Observer latitude in decimal degrees as a string. Example: \"64.1466\". Send with lon. Rise and set only."
    • changedInput schema / properties / lon / description
      Previous value: -"Observer longitude in decimal degrees as a string, e.g. \"-21.9426\". Must be sent together with lat. Only affects rise and set."New value: +"Observer longitude in decimal degrees as a string. Example: \"-21.9426\". Send with lat. Rise and set only."
    • changedInput schema / properties / place / description
      Previous value: -"Town or city of an observer. OPTIONAL, and it changes NOTHING about any longitude, sign, degree or speed — those are geocentric and identical everywhere on Earth. It adds rise and set times for each body. Send it only when the user asked when something is visible; omit it for every question about what sign a planet is in."New value: +"Observer town or city. Example: \"Reykjavik, Iceland\". OPTIONAL: it changes no position, only rise and set times."
    • changedInput schema / properties / time / description
      Previous value: -"Time of day as HH:MM in UTC — not a local time and not a birth time. Example: \"12:00\". Omit it for 00:00 UTC. Send it whenever the question involves the Moon, which moves about half a degree an hour, or a body the user says is near a sign boundary; convert their local time to UTC first rather than passing a local clock reading through."New value: +"Time of day HH:MM in UTC, not local and not a birth time. Example: \"12:00\". Send it for Moon questions."
    • changedInput schema / properties / tz / description
      Previous value: -"IANA zone name or a numeric UTC offset in hours, for the local rise and set times. Examples: \"Atlantic/Reykjavik\", \"0\"."New value: +"IANA zone or numeric UTC offset hours for the local rise and set times. Example: \"Atlantic/Reykjavik\"."
    • 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": {
      -        "ayanamsa": {
      -          "properties": {
      -            "degrees": {
      -              "description": "The angle between the two zodiac columns at this instant, in degrees.",
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "bodies": {
      -          "items": {
      -            "properties": {
      -              "body": {
      -                "description": "One of twelve: the Sun, the Moon, the eight planets, and Rahu and Ketu.",
      -                "type": "string"
      -              },
      -              "distanceAU": {
      -                "description": "Distance from the Earth in astronomical units — the Moon's too, so the units never change between rows.",
      -                "type": "number"
      -              },
      -              "formattedDegree": {
      -                "description": "Degree and arcminute within the sign, the way a chart sheet prints it.",
      -                "type": "string"
      -              },
      -              "latitude": {
      -                "description": "Ecliptic latitude in degrees. Zero by construction for the two nodes.",
      -                "type": "number"
      -              },
      -              "longitude": {
      -                "description": "Apparent geocentric ecliptic longitude in the TROPICAL zodiac, degrees. Geocentric means as seen from the centre of the Earth — identical for every observer on the planet, which is why no place is required.",
      -                "type": "number"
      -              },
      -              "retrograde": {
      -                "description": "Apparent motion at this instant. For the full period a body is inside, with its bracketing stations, use /api/public/retrogrades.",
      -                "type": "boolean"
      -              },
      -              "rise": {
      -                "description": "Rise at the place given, as a UTC instant and a local stamp carrying its own date and offset. null when no place was given, and null for a body that genuinely does not rise at that latitude on that date, which is a real configuration and not a gap.",
      -                "type": "object"
      -              },
      -              "set": {
      -                "description": "The same for setting.",
      -                "type": "object"
      -              },
      -              "siderealLongitude": {
      -                "description": "The same longitude with the Lahiri (Chitrapaksha) ayanamsa subtracted. Not a second observation — the same sky measured from a different zero point.",
      -                "type": "number"
      -              },
      -              "siderealSign": {
      -                "description": "The sidereal sign, which is what a Vedic reader means by the question. It differs from the tropical sign for most bodies most of the time.",
      -                "type": "string"
      -              },
      -              "sign": {
      -                "description": "The tropical sign. This is the answer to \"what sign is Venus in\" as a Western reader means it.",
      -                "type": "string"
      -              },
      -              "speedPerDay": {
      -                "description": "Degrees of ecliptic longitude per day, as a 24-hour centred difference. Negative means retrograde; that is the definition, not a separate fact.",
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "instantUTC": {
      -          "description": "The instant every figure below was read at, UTC to the second.",
      -          "type": "string"
      -        },
      -        "nodeNote": {
      -          "description": "Rahu and Ketu here are the MEAN nodes. The true node oscillates around them by up to about 1°40', enough to sit on the other side of a sign boundary, so software configured for the true node will disagree near a cusp. Quote this rather than letting a reader assume.",
      -          "type": "string"
      -        },
      -        "place": {
      -          "description": "The observer, when one was given, with a `changes` field stating exactly what having it altered: rise and set, and nothing else. null when no place was sent.",
      -          "type": "object"
      -        },
      -        "placeNote": {
      -          "description": "Said whether or not a place was given, because the absence is the point: a geocentric longitude does not need one, and demanding a birthplace to produce one would be demanding a number that is never used.",
      -          "type": "string"
      -        },
      -        "retrogradeNow": {
      -          "description": "The names only, for a caller that wants the one-line answer. Empty when nothing is retrograde, which is itself the answer.",
      -          "type": "array"
      -        }
      -      },
      -      "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. Added

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, and the description does not contradict them. It adds genuine context beyond annotations: time defaults to 00:00 UTC and is read as UTC, date defaults to today, mean nodes vs stationing bodies are reported in separate fields, and results carry an attribution line and permalink. The cusp/precision warnings (Venus sign flipping within days, Moon ~0.5 deg/hour) are unusually useful for interpreting results.

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?

Purpose and scope are front-loaded in the opening sentence, and the example phrasings and precision caveats each do real work. There is mild redundancy, though: the Moon's motion is invoked twice (sign change every ~2.3 days and half a degree an hour) across two paragraphs, and the attribution/permalink detail is minor for a description this long.

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 no output schema, the description carries the full burden of explaining returns, and it does: result.bodies[].sign vs siderealSign, result.ayanamsa, result.nodeNote, result.retrogradeNow vs result.alwaysRetrograde, plus attribution and permalink. All six params are characterized and the zero-required-parameter default behavior (date=today, time=00:00 UTC) is spelled out.

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 coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: it explains why a sky question needs no birthplace and that lat/lon/place feed only rise/set. It also states the tropical/sidereal dual-return and the ~24 degree ayanamsa offset that makes the two signs usually differ, which affects how an agent reads results for a given date.

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 first sentence states a specific verb and resource and enumerates exactly what comes back: Sun, Moon, eight planets, two nodes, with longitude, sign, degree in both zodiacs, latitude, speed, retrograde state and distance. It explicitly contrasts itself with chart-based siblings ('no birth data and no place required'), so an agent can route between this and compute_birth_chart without opening a 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?

It names concrete triggering questions ('what sign is Venus in', 'where is Mercury right now', 'when did Mars enter Gemini') and gives an explicit exclusion boundary: 'any position question about the sky with no particular person's chart in it.' It also states that lat/lon/place affect rise-and-set times only, which tells the agent when those params are irrelevant.

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