Skip to main content
Glama

OpenEphemeris MCP Server

npm version System Status License: MIT Ephemeris: JPL DE440

OpenEphemeris in Claude — ask in plain language, get a real computed chart

Model Context Protocol server for OpenEphemeris — typed astrology tools powered by the NASA JPL DE440 ephemeris. Zero hallucination on planetary positions, dates, and degrees. Covers 1,100 years of astronomical data.

The catalog: 90 bodies and 124 fixed stars — asteroids, trans-Neptunians, Uranian points, computed in one engine

Hosted endpoint: https://mcp.openephemeris.com/mcp (Streamable HTTP, MCP 2025-11-25 spec)

Quick Start

The fastest way to connect any MCP-compatible client:

npx -y @smithery/cli install @open-ephemeris/openephemeris --client claude

Or browse the listing and copy connection snippets: smithery.ai/servers/open-ephemeris/openephemeris


Connect via AI SDK (Vercel AI SDK)

import Smithery from "@smithery/api"
import { createMCPClient } from "@ai-sdk/mcp"
import { generateText } from "ai"
import { anthropic } from "@ai-sdk/anthropic"
import { createConnection } from "@smithery/api/mcp"

const smithery = new Smithery()

const conn = await smithery.connections.create("{your-namespace}", {
  mcpUrl: "https://server.smithery.ai/open-ephemeris/openephemeris",
  headers: {
    apiKey: "your-openephemeris-api-key", // get one free at openephemeris.com/dashboard
  },
})

const { transport } = await createConnection({
  client: smithery,
  namespace: "{your-namespace}",
  connectionId: conn.connectionId,
})

const mcpClient = await createMCPClient({ transport })
const tools = await mcpClient.tools()

const { text } = await generateText({
  model: anthropic("claude-sonnet-4-20250514"),
  tools,
  prompt: "Calculate a natal chart for someone born April 15, 1990 at 2:30 PM in Chicago.",
})

await mcpClient.close()

Connect via MCP SDK (TypeScript)

import Smithery from "@smithery/api"
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { createConnection } from "@smithery/api/mcp"

const smithery = new Smithery()

const conn = await smithery.connections.create("{your-namespace}", {
  mcpUrl: "https://server.smithery.ai/open-ephemeris/openephemeris",
  headers: {
    apiKey: "your-openephemeris-api-key",
  },
})

const { transport } = await createConnection({
  client: smithery,
  namespace: "{your-namespace}",
  connectionId: conn.connectionId,
})

const mcpClient = new Client(
  { name: "my-app", version: "1.0.0" },
  { capabilities: {} }
)
await mcpClient.connect(transport)

const { tools } = await mcpClient.listTools()
const result = await mcpClient.callTool({
  name: "ephemeris_natal_chart",
  // A datetime that states a clock time must state its zone: either pass
  // `timezone` alongside the local time, or put a Z/±HH:MM offset on the value.
  arguments: {
    datetime: "1990-04-15T14:30:00",
    timezone: "America/Chicago",
    latitude: 41.8781,
    longitude: -87.6298,
    format: "llm",
  },
})

Connect directly (Streamable HTTP, no Smithery)

import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { Client } from "@modelcontextprotocol/sdk/client/index.js"

const transport = new StreamableHTTPClientTransport(
  new URL("https://mcp.openephemeris.com/mcp"),
  { requestInit: { headers: { "X-API-Key": "your-openephemeris-api-key" } } }
)

const client = new Client({ name: "my-app", version: "1.0.0" }, { capabilities: {} })
await client.connect(transport)

One-click install (Cursor)

Install in Cursor

Replace YOUR_API_KEY_HERE in Cursor MCP settings with your API key from https://openephemeris.com/dashboard.

Cursor deeplink payload:

{
  "command": "npx",
  "args": [
    "-y",
    "@openephemeris/mcp-server"
  ],
  "env": {
    "OPENEPHEMERIS_PROFILE": "dev",
    "OPENEPHEMERIS_BACKEND_URL": "https://api.openephemeris.com",
    "OPENEPHEMERIS_API_KEY": "YOUR_API_KEY_HERE"
  }
}

Manual install (stdio MCP clients)

{
  "mcpServers": {
    "openephemeris": {
      "command": "npx",
      "args": ["-y", "@openephemeris/mcp-server"],
      "env": {
        "OPENEPHEMERIS_PROFILE": "dev",
        "OPENEPHEMERIS_BACKEND_URL": "https://api.openephemeris.com",
        "OPENEPHEMERIS_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

Platform guide

Detailed setup walkthroughs for each platform are in SETUP.md.

Client

Install mode

Config location

Smithery

One-click

smithery.ai

Cursor

One-click deeplink or manual

~/.cursor/mcp.json

Claude Desktop (macOS)

Manual

~/Library/Application Support/Claude/claude_desktop_config.json

Claude Desktop (Windows)

Manual

%APPDATA%\Claude\claude_desktop_config.json

Windsurf

Manual

~/.codeium/windsurf/mcp_config.json (or legacy ~/.codeium/mcp_config.json)

Claude Web / ChatGPT / remote clients

Hosted URL

https://mcp.openephemeris.com/mcp

Client install walkthroughs

  1. Cursor

    • Click the "Install in Cursor" button above, then replace YOUR_API_KEY_HERE in Cursor MCP settings.

    • If you prefer manual setup, paste the mcpServers.openephemeris block from "Manual install" into ~/.cursor/mcp.json.

  2. Claude Desktop (macOS/Windows)

    • Open the platform config file from the table above.

    • Add the same mcpServers.openephemeris block from "Manual install".

    • Restart Claude Desktop.

  3. Windsurf

    • Open ~/.codeium/windsurf/mcp_config.json (or the legacy ~/.codeium/mcp_config.json path).

    • Add the mcpServers.openephemeris block from "Manual install".

    • Restart Windsurf.

Remote-only clients (Claude Web, ChatGPT, etc.)

The server is hosted at https://mcp.openephemeris.com/mcp with full Streamable HTTP support (MCP 2025-11-25 spec). Remote-only clients can connect directly — no bridge/proxy required:

  • Claude Web: Add https://mcp.openephemeris.com/mcp as a custom connector URL — leave OAuth Client ID and Secret blank. The server uses OAuth 2.1 + PKCE (Dynamic Client Registration), so Claude handles authentication via a browser popup automatically.

  • Via Smithery: Use the Smithery listing for managed connections with any client

  • Legacy SSE: retired in 3.20.0 — use Streamable HTTP at /mcp

Auth and upgrade behavior in MCP clients

  • Missing/invalid credentials (401): tool call fails with a message that points users to sign up/sign in at https://openephemeris.com/login?signup=true&redirect=%2Fdashboard%3Ftab%3Daccount, then create/manage keys in https://openephemeris.com/dashboard?tab=account.

  • Tier-gated endpoint (403): tool call returns an upgrade-required message with https://openephemeris.com/pay and dashboard billing/key management link.

  • Monthly quota exhausted (402): tool call returns usage quota guidance with both dashboard (/dashboard?tab=account) and upgrade (/pay) links.

  • Burst/rate limit (429): tool call returns retry guidance and links to dashboard usage monitoring.

Related MCP server: Ziwei Astrology MCP Server

What You Can Ask

"Calculate a natal chart for 1990-04-15 at 2:30 PM in Chicago."
"Find all Saturn transits to my natal Sun in the next 6 months."
"Get the current moon phase and void-of-course status."
"Find the next solar eclipse visible from Tokyo."
"Find the best time to sign a contract in March — electional window."
"Generate a Human Design chart for my birth data."
"What is my Vedic (sidereal) chart?"
"Calculate my Chinese BaZi (Four Pillars) chart."
"Show me my Astrocartography power lines — where is my Venus line on the map?"
"Find all ACG lines within 3° of Paris for my chart."
"Calculate a synastry chart between two people."
"Find the next Venus Star Point and my relationship to it."
"What are the active planetary stations in the next 3 months?"
"Calculate primary directions for the next 5 years."
"Find my Firdaria time lord period."
"What is the sidereal time and delta-T right now?"

Interactive Charts

Nine of the tools don't answer with JSON. They open a chart in the conversation — a real one, drawn from the same calculation, that you can click around in.

This matters more than it sounds. A natal chart returned as JSON is a list of numbers you have to already understand to read. The same chart rendered as a wheel is something you can point at. Click a planet and you get that placement explained; click a house and you get what's in it. The chart stays on screen while you keep talking, and it doesn't cost another credit to keep looking at it.

These need a host that supports MCP Apps — Claude Desktop is the main one today. In a client without app support the same tools still work; you get the underlying data instead of the picture, so nothing breaks, you just don't get the wheel.

Tool

What opens

What you can click

Credits

explore_natal_chart

Natal wheel — planets, houses, aspects, angles

Planets, houses, aspect lines; recalculate with new settings

1

explore_bi_wheel

Two charts on one wheel: transits, synastry, progressions

Either wheel's planets, houses, and the aspects between them

2

explore_human_design

Human Design bodygraph, with a mandala view toggle

Centers, gates, channels, planets, variables

2

explore_human_design_transit

Today's planets laid over a natal bodygraph

Transit-activated channels

3

explore_human_design_connection

Two bodygraphs combined, every shared channel classified

Connection channels by type

3

explore_vedic_chart

South Indian Rashi grid — sidereal placements and Lagna

Each rashi, for its placements and nakshatras

3

explore_bazi_chart

Four Pillars (四柱命盘) — Year, Month, Day, Hour

Each pillar

3

explore_transit_timeline

Upcoming transit hits in date order

Individual hits

6

explore_moon_phase

Moon dial — illumination, phase, sign, void-of-course

Recalculate for another moment

3

Ask for these the way you'd ask a person: "show me my chart", "put today's transits over my Human Design", "what's the moon doing right now". The model picks the app.

Two things worth knowing. The chart wheel and bi-wheel accept a click on an aspect line, not just on the two planets it joins — so "why does this line matter" is one click rather than a paragraph of setup. And the bodygraph's mandala toggle rearranges the whole chart into concentric rings without another API call, so switching views is free.

Screenshots of each are on the way.

Tools at a Glance

Category

Tool

Tier

Natal chart

ephemeris_natal_chart

Explorer

Transit forecast

ephemeris_transits

Explorer

Transit chart snapshot

ephemeris_natal_transits

Explorer

Moon phase / VOC

ephemeris_moon_phase

Explorer

Eclipse next visible

ephemeris_next_eclipse

Explorer

Electional window

ephemeris_electional

Developer

Moment analysis

electional_moment_analysis

Developer

Station tracker

electional_station_tracker

Developer

Aspect search

electional_aspect_search

Developer

Human Design chart

human_design_chart

Explorer

HD composite

human_design_composite

Developer

HD transit overlay

explore_human_design_transit

Developer

HD connection (synastry)

explore_human_design_connection

Developer

HD penta

human_design_penta

Explorer

HD return / opposition

hd_planetary_return, hd_opposition

Explorer

Vedic chart

vedic_chart

Explorer

BaZi (Chinese)

chinese_bazi

Explorer

Synastry

ephemeris_synastry

Developer

Composite chart

ephemeris_composite

Developer

Relocation chart

ephemeris_relocation

Developer

Progressed chart

ephemeris_progressed_chart

Explorer

Solar return

ephemeris_solar_return

Developer

Lunar return

ephemeris_lunar_return

Developer

Planetary return

ephemeris_planetary_return

Developer

Astrocartography lines

acg_power_lines

Developer

ACG hits at location

acg_hits

Scale

Venus Star Points

venus_star_points + 4 more

Explorer

Chart wheel image

ephemeris_chart_wheel

Developer

Bi-wheel image

ephemeris_bi_wheel

Developer

Dignities / Midpoints / Fixed stars

ephemeris_dignities, ephemeris_midpoints, ephemeris_fixed_stars

Explorer

Tooling Model

  • Typed tools are preferred for common workflows (natal, transits, moon phase, eclipse, synastry, relocation, electional, Human Design).

  • Generic tools: dev_list_allowed returns all currently allowlisted operations; dev_read_api invokes allowlisted GET (read) operations and dev_write_api invokes allowlisted POST/PUT/PATCH/DELETE (write/compute) operations, each by method + path. Read and write are kept as separate tools so a safe read surface never shares a tool with state-changing writes.

  • Security model: default-deny with explicit allowlist in config/dev-allowlist.json.

  • Deny prefixes block sensitive route families (/auth, /billing, /admin, etc.).

dev_read_api / dev_write_api input

Parameter

Type

Required

Description

method

dev_read_api: GET · dev_write_api: POST|PUT|PATCH|DELETE

No

HTTP method (defaults to the tool's natural method)

path

string

Yes

Absolute API path, e.g. /ephemeris/natal-chart

query

object

No

Query parameters

body

object

No

JSON body for non-GET requests

preset

full|simple

No

Convenience mapping to query.preset

format

json|llm|llm_v2

No

Convenience mapping to query.format (llm_v2 normalizes to llm)

output_mode

full|simple|llm|llm_v2

No

Legacy compatibility field

Environment Variables

Variable

Required

Description

OPENEPHEMERIS_API_KEY

Yes (unless service key/JWT used)

API key for OpenEphemeris

ASTROMCP_API_KEY

No

Legacy alias for OPENEPHEMERIS_API_KEY (checked as fallback)

OPENEPHEMERIS_BACKEND_URL

No

Defaults to https://api.openephemeris.com

OPENEPHEMERIS_PROFILE

No

dev by default

OPENEPHEMERIS_TOOLS

No

core (default) advertises a focused everyday tool set; full advertises every tool. See Tool surface

OPENEPHEMERIS_TELEMETRY

No

Set to 0/false/off to disable anonymous usage reporting. DO_NOT_TRACK=1 also works. See Telemetry

OPENEPHEMERIS_SERVICE_KEY

No

Internal service auth

OPENEPHEMERIS_JWT

No

Bearer token auth

OPENEPHEMERIS_DEV_ALLOWLIST_PATH

No

Override allowlist file path

MCP_USER_ID

No

Per-instance user identifier

Legacy aliases (ASTROMCP_*, MERIDIAN_*) remain supported.

Telemetry

This server reports anonymous usage so we know which tools are worth maintaining and which are broken. Three events: session start, tool call, tool error.

What is sent: the tool name, how long it took, error status, which MCP client connected (e.g. Claude Desktop, Cursor) and its version, the server version, and a one-way SHA-256 prefix of your API key used as a stable anonymous id.

What is never sent: your API key or token, birth data, dates, names, coordinates, tool arguments, or tool results. No request or response bodies, ever.

To turn it off — either works, checked before anything is sent:

OPENEPHEMERIS_TELEMETRY=0
# or the cross-tool standard
DO_NOT_TRACK=1

Tool surface

By default the server advertises a focused core set of everyday tools rather than the entire catalog. Large tool lists cost context and make model tool-selection worse, so the default is tuned for real conversations: one interactive app per tradition, the primary data tool per domain, geocoding, and the allowlist-gated generic proxy.

Nothing is removed. The surface is a filter on tools/list only — every tool stays registered and stays callable by name. If you know the tool you want, call it and it works, listed or not.

To advertise the full catalog:

OPENEPHEMERIS_TOOLS=full npx -y @openephemeris/mcp-server

On the remote HTTP server, append ?profile=full to the connector URL (or send X-OE-Tool-Surface: full):

https://mcp.openephemeris.com/mcp?profile=full

Toolsets by tradition

If you work in one tradition, ask for it by name instead of taking the general-purpose default. You get that tradition in full — including the long-tail tools the core set leaves out — for a fraction of the context.

OPENEPHEMERIS_TOOLS=hd npx -y @openephemeris/mcp-server        # Human Design
OPENEPHEMERIS_TOOLS=astrology,moon npx -y @openephemeris/mcp-server
https://mcp.openephemeris.com/mcp?profile=hd,bazi

Toolset

What it covers

Tools

Approx. tokens

astrology

Natal, transits, synastry, progressions, returns, relocation, dignities, midpoints, lots, fixed stars, composites

32

15,800

hd

Human Design charts, transits, connection charts, penta, bodygraph

14

7,800

bazi

Four Pillars, Ten Gods, element balance, luck pillars, compatibility

13

7,200

electional

Timing windows, angle crossings, stations, moment analysis

10

4,600

moon

Phases, void-of-course, eclipses

9

4,100

venus

Star points, phases, elongations, stations

11

3,700

acg

Astrocartography lines and hits

7

3,700

vedic

Jyotish Rashi chart

7

3,400

core (default)

36

19,100

full

70

34,600

Every selection also includes geocoding (location_search, timezone_resolve), account_usage, and the allowlist-gated proxy — so a birthplace is always resolvable and nothing is stranded.

Combine with commas; unknown names are ignored rather than rejected, so a typo degrades to a smaller surface instead of a dead connector. As with core/full, this only filters tools/list — every tool remains callable by name.

Why it matters: tool definitions are re-sent to the model on every pass. astrology,moon advertises the same number of tools as the default but costs ~1,700 fewer tokens per message and covers more of the tradition.

The surface is fixed when the session initializes — this server does not advertise tools.listChanged, so switching requires reconnecting. dev_list_allowed enumerates every operation reachable through the generic proxy regardless of surface.

Contributing & Support

  • Something wrong with a result? Open an issue — include the tool, your inputs, and what you expected.

  • Want to contribute? See CONTRIBUTING.md. Integration examples and new skills are the most useful things you can add.

  • Found a security problem? Please report it privately — see SECURITY.md.

  • Tools timing out? Check status.openephemeris.com first.

If this saved you from an LLM confidently inventing a Saturn position, a ⭐ helps other people find it.

This package is licensed under the MIT License. However, use of this package to access the OpenEphemeris API constitutes use of the Service and is governed by the OpenEphemeris Terms of Service. By using this package, you agree to those terms. See also the Privacy Policy and Acceptable Use Policy.

Development

npm install
npm run dev
npm run typecheck
npm test
npm run regen:dev-allowlist
npm run check:dev-allowlist
npm run sync:readme
npm run check:readme
npm run verify:release

Deploying the SSE Server to Fly.io

When you update the MCP server logic (handlers, bug fixes, hardening), you should deploy it so clients connecting via the remote https://mcp.openephemeris.com/mcp endpoint get the updates immediately.

  1. Navigate to apps/api/mcp-server

  2. Run fly deploy --remote-only

Note on NPM: Deploying to Fly.io instantly updates the web-accessible SSE tool. However, users installing your tool locally in Cursor/Desktop via npx @openephemeris/mcp-server will only receive the updates once a new version is published to NPM. If your changes are critical, you should bump the version in package.json and run npm publish (or your CI release pipeline) after deploying to Fly.

npm run verify:release is the release gate. It checks:

  • allowlist freshness against OpenAPI

  • schema pack freshness

  • README synchronization

  • type safety + tests

  • publish tarball contents (npm pack --dry-run --json)

Architecture

┌─────────────────────────────────────────────────────────┐
│                    MCP Clients                          │
│  Smithery Gateway · Claude Web · ChatGPT · Remote apps  │
└──────────────────┬──────────────────────────────────────┘
                   │ Streamable HTTP (MCP 2025-11-25)
                   │ https://mcp.openephemeris.com/mcp
                   │
┌─────────────────────────────────────────────────────────┐
│          Cursor · Claude Desktop · Windsurf             │
└──────────────────┬──────────────────────────────────────┘
                   │ stdio JSON-RPC
                   │ npx @openephemeris/mcp-server
                   │
              ┌────▼────────────────────┐
              │  openephemeris-mcp      │
              │  Node.js MCP Server     │
              │  typed tools            │
              │  auth: Key > JWT        │
              └────────────┬────────────┘
                           │ HTTPS
                           ▼
              ┌────────────────────────┐
              │  OpenEphemeris API     │
              │  api.openephemeris.com │
              │  NASA JPL DE440        │
              │  1,100 years of data   │
              └────────────────────────┘

Runtime Snapshot (Generated)

Generated by npm run sync:readme from config/dev-allowlist.json and the live tool registry.

  • Allowlisted operations: 120

  • Methods: GET=44, POST=76, PUT=0, PATCH=0, DELETE=0

  • Registered tools (OPENEPHEMERIS_PROFILE=dev): 92

  • Typed tools: account_usage, acg_hits, acg_power_lines, auth_login, auth_logout, auth_status, bazi_annual_pillar, bazi_chart, bazi_compatibility, bazi_element_balance, bazi_luck_pillars, bazi_recalculate, bazi_ten_gods, bi_wheel_on_cross_aspect_click, bi_wheel_on_house_click, bi_wheel_on_planet_click, bi_wheel_recalculate, bi_wheel_synopsis, bodygraph_recalculate, chart_wheel_on_aspect_click, chart_wheel_on_house_click, chart_wheel_on_planet_click, chart_wheel_recalculate, chinese_bazi, electional_angle_crossings, electional_aspect_search, electional_moment_analysis, electional_station_tracker, ephemeris_angles_points, ephemeris_aspect_check, ephemeris_bi_wheel, ephemeris_chart_wheel, ephemeris_composite, ephemeris_composite_midpoint, ephemeris_dignities, ephemeris_electional, ephemeris_fixed_stars, ephemeris_hermetic_lots, ephemeris_house_cusps, ephemeris_lunar_return, ephemeris_midpoints, ephemeris_moon_phase, ephemeris_natal_batch, ephemeris_natal_chart, ephemeris_natal_transits, ephemeris_next_eclipse, ephemeris_next_lunar_phase, ephemeris_overlay, ephemeris_planet_position, ephemeris_planetary_return, ephemeris_progressed_chart, ephemeris_relocation, ephemeris_retrograde_status, ephemeris_solar_return, ephemeris_synastry, ephemeris_transits, explore_bazi_chart, explore_bi_wheel, explore_human_design, explore_human_design_connection, explore_human_design_transit, explore_moon_phase, explore_natal_chart, explore_transit_timeline, explore_vedic_chart, hd_on_center_click, hd_on_channel_click, hd_on_connection_channel_click, hd_on_gate_click, hd_on_planet_click, hd_on_transit_channel_click, hd_on_variable_click, hd_opposition, hd_planetary_return, human_design_bodygraph, human_design_chart, human_design_composite, human_design_penta, location_search, moon_phase_recalculate, timezone_resolve, vedic_chart, vedic_chart_recalculate, venus_eight_year_star, venus_elongations, venus_phase, venus_star_points, venus_star_points_conjunctions, venus_stations

  • Generic tools: dev_list_allowed, dev_read_api, dev_write_api

Allowlist Families

Family

Operations

Example

acg

14

POST /acg/aspects, POST /acg/ccg

calendar

3

GET /calendar/astrology/cross-quarter, GET /calendar/astrology/lunar-standstill

catalogs

3

GET /catalogs/bodies, GET /catalogs/fixed-stars

chinese

9

POST /chinese/bazi, POST /chinese/bazi/annual-pillar

comparative

5

POST /comparative/composite, POST /comparative/composite/midpoint

eclipse

6

GET /eclipse/besselian-elements, GET /eclipse/lunar/global

electional

6

GET /electional/angle-crossings, GET /electional/aspect-search

ephemeris

36

GET /ephemeris/agro/calendar, GET /ephemeris/agro/daily

health

2

GET /health, GET /health/detailed

human-design

8

POST /human-design/chart, POST /human-design/composite

location

2

GET /location/autocomplete, GET /location/reverse

predictive

10

POST /predictive/returns, POST /predictive/returns/lunar

root

1

GET /

tidal

2

GET /tidal/forcing, GET /tidal/forcing/deep-time

time

6

GET /time/delta-t, GET /time/equation-of-time

timezone

3

GET /timezone/coverage, POST /timezone/lookup

vedic

1

POST /vedic/chart

visualization

3

POST /visualization/bi-wheel, POST /visualization/bodygraph

Why OpenEphemeris for AI Agents?

Most LLMs (like Claude and ChatGPT) struggle heavily with astronomical calculations (trigonometry, Julian date conversions, and planetary lookups). OpenEphemeris serves as a secure, remote math engine.

By pairing LLMs with the OpenEphemeris MCP server, your agents can instantly access:

  • Zero-hallucination coordinates: Direct, sub-arcsecond NASA JPL DE440 calculations spanning 1,100 years of astronomical data.

  • LLM-optimized tokens (format=llm): We compress standard 25,000 token JSON chart responses into minimal text blocks, cutting your inference costs by 50–73% depending on endpoint.

  • Ready-to-use astrology layers: Built-in support for Astrocartography geoJSON lines, Hermetic Lots, Fixed Stars, and complex Human Design matrix generation.

Available Tools

39 tools
account_usageA
Read-onlyIdempotent
Inspect

Check the user's OpenEphemeris account usage and remaining credits. Returns their plan tier, billing period, credits used / included / remaining, percent of quota used, total API calls, and subscription status with renewal date.

✅ USE THIS TOOL FOR: 'How many credits do I have left?', 'What's my usage this month?', 'Am I close to my limit?', 'What plan am I on?', 'How do I upgrade or top up?'

CREDIT COST: Free (0 credits).

EXAMPLE: Check current usage: (call with no arguments)

EXAMPLE: Check a past month: month='2026-06'

ParametersJSON Schema
NameRequiredDescriptionDefault
monthNoBilling month to query in YYYY-MM format (e.g. '2026-06'). Defaults to the current month.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds meaningful context by detailing the exact return fields (plan tier, billing period, credits, quota percent, API calls, subscription status) and noting the tool costs 0 credits. It does not mention any auth requirements or rate limits, but for a simple read-only usage query the transparency is solid.

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?

The description is well-structured with a concise opening summary, a clearly labeled use-case section, a credit-cost note, and two practical examples. Every line adds value, and the most important information is front-loaded.

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 a simple tool with one optional parameter and no output schema, the description is complete: it explains the purpose, return values, usage examples, and even the default month behavior. No additional context is needed to select or invoke it correctly.

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 documents the month parameter and its default behavior. The description only repeats the example (month='2026-06') without adding any new semantic meaning, such as format edge cases or timezone handling. Baseline 3 is appropriate.

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 resource: 'Check the user's OpenEphemeris account usage and remaining credits.' It clearly states exactly what the tool does and lists the returned data. This distinguishes it from the many ephemeris and auth sibling tools, making its purpose unmistakable.

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?

The 'USE THIS TOOL FOR' section explicitly enumerates concrete user intents and example questions, providing strong guidance on when to invoke the tool. However, it does not explicitly state when not to use it or mention alternatives (e.g., auth_status for login status), so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

acg_hitsA
Read-onlyIdempotent
Inspect

Find all Astrocartography lines (power lines + aspect lines) passing near a specific location. Returns features sorted by distance, making it easy to interpret planetary influences at a place.

✅ USE THIS TOOL FOR: 'Is [city] good for me?', 'What planets affect me in Tokyo?', 'What ACG lines run through Paris for my chart?', 'Which cities are under my Jupiter line?' ❌ NOT FOR: Full global map geometry → use acg_power_lines for that instead.

CREDIT COST: 15 credits per call.

EXAMPLE: All ACG lines within 3° of Paris for a chart born 1990-04-15 in Chicago: birth_datetime='1990-04-15T14:30:00', timezone='America/Chicago', birth_latitude=41.8781, birth_longitude=-87.6298, query_latitude=48.8566, query_longitude=2.3522, radius_deg=3

ParametersJSON Schema
NameRequiredDescriptionDefault
bodiesNoList of celestial bodies for line calculation. E.g. ['Sun', 'Moon', 'Venus', 'Mars', 'Jupiter', 'Saturn']. Aliases: 'NorthNode'/'Node'/'Rahu' → MeanNode, 'SouthNode'/'Ketu' → SouthNode. Omit to use all classical planets.
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
radius_degNoSearch radius in degrees (default 2°, max 90°).
birth_datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`. An unstated zone moves every ACG line by ~15° of longitude per hour.
birth_latitudeYesBirth latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory.
query_latitudeYesLatitude of the location to check for nearby lines.
birth_longitudeYesBirth longitude in decimal degrees.
include_aspectsNoInclude aspect lines in results (default true).
query_longitudeYesLongitude of the location to check for nearby lines.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is clear. The description adds useful behavioral context beyond annotations: it states results are 'sorted by distance' and mentions the credit cost (15 credits per call). It does not contradict annotations.

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?

The description is well-structured with a clear purpose statement, usage examples, explicit exclusion, credit cost, and a practical example. Every sentence adds value, and the formatting (bold, checkmarks) improves scannability without unnecessary verbosity.

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 read-only, read-only tool with no output schema, the description gives a general idea of the return ('Returns features sorted by distance') and provides a full usage example. It does not detail the exact output format, but given the tool's simplicity and the annotations, this is sufficient. A 4 is appropriate.

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 description coverage is 100%, so the baseline is 3. The description adds a concrete example showing how all key parameters map to real values (e.g., birth_datetime, timezone, query_latitude, radius_deg), which enhances understanding beyond the schema alone. This justifies a 4.

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 states the tool's function: 'Find all Astrocartography lines (power lines + aspect lines) passing near a specific location.' It identifies the specific resource (ACG lines), the verb (find), and the scope (near a location). It also distinguishes itself from the sibling tool acg_power_lines by explicitly noting it's NOT for full global map geometry.

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?

The description provides explicit when-to-use examples ('Is [city] good for me?', 'What planets affect me in Tokyo?') and an explicit exclusion with an alternative ('NOT FOR: Full global map geometry → use acg_power_lines for that instead.'). This fully guides the agent on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

acg_power_linesA
Read-onlyIdempotent
Inspect

Calculate Astrocartography power lines (MC, IC, AC/ASC, DC/DSC) for a natal chart. Returns GeoJSON LineStrings tracing each planetary angle line around the globe. These are the latitudinal lines where a planet was rising (AC), setting (DC), culminating (MC), or anti-culminating (IC) at birth.

❌ NOT FOR: 'Is [city] good for me?' or 'What planets affect me in Tokyo?' → For a specific city/location analysis, use acg_hits instead (faster and more relevant). ✅ USE FOR: Getting the full global GeoJSON line geometry for map rendering or bulk geographic analysis.

CREDIT COST: 10 credits per call.

EXAMPLE: Saturn and Jupiter power lines for a chart born 1990-04-15 at 2:30 PM in Chicago: birth_datetime='1990-04-15T14:30:00', timezone='America/Chicago', birth_latitude=41.8781, birth_longitude=-87.6298, bodies=['Saturn', 'Jupiter']

ParametersJSON Schema
NameRequiredDescriptionDefault
bodiesNoList of celestial bodies for line calculation. E.g. ['Sun', 'Moon', 'Venus', 'Mars', 'Jupiter', 'Saturn']. Aliases: 'NorthNode'/'Node'/'Rahu' → MeanNode, 'SouthNode'/'Ketu' → SouthNode. Omit to use all classical planets.
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
radius_degNoSearch radius in degrees for hits filtering. Default 2°.
birth_datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`. An unstated zone moves every ACG line by ~15° of longitude per hour.
birth_latitudeYesBirth latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory.
query_latitudeNoFilter lines near this latitude (optional, for hits mode).
birth_longitudeYesBirth longitude in decimal degrees.
query_longitudeNoFilter lines near this longitude (optional, for hits mode).

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds valuable context: credit cost (10 credits per call), the latitudinal nature of the lines, and the semantic meaning of AC/DC/MC/IC. It doesn't contradict annotations, and the additional details help set expectations for cost and output geometry.

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?

The description is well-structured with clear sections: purpose, NOT FOR/USE FOR, credit cost, and example. Every section serves a purpose, and the example is useful. It is front-loaded with the core function and avoids unnecessary filler.

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 a tool with 8 parameters and no output schema, the description provides sufficient context: purpose, usage boundaries, credit cost, and a complete example. It also clarifies the nature of the returned GeoJSON lines. No output schema is needed because the return type is stated.

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 description coverage is 100%, so baseline is 3. The description adds a concrete example with sample values for birth_datetime, timezone, coordinates, and bodies, which demonstrates how parameters are combined. This goes slightly beyond the schema's per-field documentation.

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 states the tool calculates Astrocartography power lines (MC, IC, AC/ASC, DC/DSC) and returns GeoJSON LineStrings. It uses a specific verb ('Calculate') and resource ('power lines') and distinguishes from the sibling acg_hits by emphasizing global geometry vs. location-specific analysis.

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?

Explicitly provides both positive ('USE FOR: Getting the full global GeoJSON line geometry...') and negative ('NOT FOR: specific city/location analysis') usage guidance, directly naming the alternative tool acg_hits. This fully clarifies when to use this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auth_loginAInspect

Start the device authorization flow to connect this MCP server to your OpenEphemeris account (free tier, no credit card needed). Returns a verification URL and code for the user to enter in their browser. The MCP server will then automatically receive credentials and all API calls will be linked to the user's account (tier, credits, rate limits). Only needed if no OPENEPHEMERIS_API_KEY env var is set and no cached credentials exist.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations are sparse (readOnlyHint=false, destructiveHint=false) and do not describe the flow, so the description carries the burden. It discloses that the tool returns a verification URL/code, that the server later receives credentials, and that API calls become linked to the user's account. It does not mention whether the tool blocks until browser completion, but the overall auth flow is reasonably transparent.

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?

The description is three sentences, front-loaded with the primary purpose, followed by return behavior and usage condition. Every sentence contributes useful information; the 'free tier, no credit card needed' aside is brief and relevant for adoption. No redundancy or fluff.

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 no-parameter tool with no output schema, the description provides the essential invocation details: what it does, when it is needed, and what it returns. A minor gap is not referencing auth_status as the follow-up to check completion, but the description sufficiently covers the immediate device-authorization flow.

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?

The tool has zero parameters, so the baseline is 4. The description adds meaning by explaining what the tool returns (verification URL and code) even though no output schema exists. There are no hidden parameters to explain, and the schema is complete with no additional properties.

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 starts with a specific verb and resource: 'Start the device authorization flow to connect this MCP server to your OpenEphemeris account.' It clearly differentiates from siblings like auth_status and auth_logout by describing the login initiation action. The free-tier note adds clarifying context without ambiguity.

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?

The description explicitly states the precondition: 'Only needed if no OPENEPHEMERIS_API_KEY env var is set and no cached credentials exist.' This provides a clear when-to-use condition. However, it does not name alternatives such as auth_status or auth_logout, so it misses the explicit exclusion that would earn a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auth_logoutA
DestructiveIdempotent
Inspect

Disconnect this MCP server from your OpenEphemeris account by clearing cached credentials. Does NOT revoke the API key if one is set via environment variable — only clears device-auth cached credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate destructive and idempotent behavior, but the description adds meaningful context: it clears cached credentials only, and explicitly states that environment-variable API keys remain untouched. This goes beyond the annotations by clarifying the exact scope of the destructive action and its irreversibility implications.

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?

The description is two sentences long, with the primary action and effect in the first sentence, and a crucial caveat in the second. Every word earns its place; no redundant phrases or vague language.

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 a zero-parameter, side-effect-only tool with no output schema, the description fully covers what it does, what it doesn't do, and the boundary of its effect. It is complete and leaves no major behavioral questions unanswered.

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?

The tool has zero parameters and the schema coverage is trivially 100%. With no parameters to document, the baseline is 4. The description appropriately focuses on behavior rather than parameters, which is sufficient.

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 uses a specific verb ('Disconnect') and resource ('this MCP server from your OpenEphemeris account'), clearly distinguishing it from sibling auth tools like auth_login and auth_status. It also states the mechanism ('clearing cached credentials'), making the tool's purpose unambiguous.

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?

The description implies usage context (disconnecting/logging out) and explicitly notes when not to rely on it: it does NOT revoke API keys set via environment variables. This exclusion helps an agent decide if this tool is appropriate given the environment configuration, though it doesn't explicitly list alternative tools for full key revocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auth_statusA
Read-onlyIdempotent
Inspect

Check the current authentication status of this MCP server. Shows whether the server is authenticated, which account it's linked to, the authentication method (API key, JWT, device auth), and token expiry.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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, and destructiveHint, so the safety profile is known. The description adds behavioral context beyond annotations by detailing what information the response contains (account, method, token expiry), which is valuable for understanding the tool's output.

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?

The description is two concise sentences with no redundant information. It front-loads the main purpose and then provides useful detail about what the status check reveals. Every word earns its place.

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 a simple zero-parameter tool, the description fully covers what the tool does and what it returns. With supportive annotations and no output schema required, the description is complete for an agent to select and invoke it correctly.

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?

The tool has zero parameters, so the description need not explain any. The baseline for 0 params is 4, and the description correctly omits parameter information since none exist.

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 states the tool's purpose: checking the current authentication status of the MCP server. It specifies the resource (MCP server) and the action (check status), and differentiates from siblings like auth_login and auth_logout by emphasizing 'current' status.

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?

The description implies when to use the tool: to check whether the server is authenticated, which account is linked, and token expiry. This provides clear context for a status-checking tool, though it does not explicitly mention when not to use it or list alternatives, which are not really needed for a status query.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bazi_annual_pillarA
Read-onlyIdempotent
Inspect

Look up the sexagenary pillar for any Gregorian year (1–9999). Returns the Heavenly Stem, Earthly Branch, Chinese characters, zodiac animal, element, polarity, and NaYin (纳音) poetic resonance image.

NaYin maps each pair in the 60-cycle sexagenary sequence to one of 30 elemental images (e.g. '海中金 Metal in the Sea', '炉中火 Fire in the Furnace'). It is traditionally applied to the Year and Day pillars to reveal deeper elemental character.

Use this to: • Identify the energetic quality of any given year • Determine a person's birth year pillar for compatibility context • Find the NaYin element for year or day interpretations

CREDIT COST: 3 credits per call.

EXAMPLE: Year pillar for 2025: year=2025

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYesGregorian year (1–9999). e.g. 2025.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safe read nature is covered. The description adds credit cost and explains the NaYin concept, which goes beyond structured data. No contradictions found.

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 well-organized with a clear first-sentence purpose, a domain explanation, bullets for use cases, and an example. The NaYin explanation is helpful but slightly verbose; overall it earns its place.

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 single-parameter lookup tool with rich annotations, the description lists all return fields, provides an example, and includes credit cost. It is complete enough for invocation, even without an output schema.

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 covers 100% of the single parameter 'year' with range and example. Description adds an example call (year=2025) but does not provide additional semantic nuance beyond the schema.

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?

Description explicitly states 'Look up the sexagenary pillar for any Gregorian year' and lists the returned attributes. This is a specific verb+resource+scope and distinguishes from sibling tools like explore_bazi_chart by focusing solely on the annual pillar.

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?

Provides a 'Use this to' bullet list with clear use cases (e.g., identify energetic quality, determine birth year pillar, find NaYin). However, it does not explicitly mention alternatives or when not to use it, only implying context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dev_list_allowedA
Read-onlyIdempotent
Inspect

List all API operations (method + path) that this MCP instance is authorized to call. Returns endpoint entries grouped by method, plus the active deny rules. Use this to discover what's available before calling dev_read_api, or to verify an endpoint path. Typed shortcut tools (ephemeris_natal_chart, ephemeris_transits, etc.) cover the most common operations — check those first before reaching for the generic proxies.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds context beyond that by specifying the return structure ('endpoint entries grouped by method') and mentioning 'active deny rules,' which gives insight into what the tool reveals. This is useful behavioral transparency without contradicting 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: three sentences that cover purpose, return content, and usage guidance. Every sentence adds value with no fluff or repetition of schema/annotations.

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?

Given the tool's simplicity (no parameters, no output schema, clear annotations), the description is complete. It explains what the tool does, what it returns, when to use it, and how it relates to sibling tools. No important context is missing.

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?

The tool has zero parameters, so the schema fully covers parameter semantics. The description correctly avoids redundant parameter info. Baseline is 4 for zero-parameter tools, and no deduction is needed.

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 states the tool's purpose: 'List all API operations (method + path) that this MCP instance is authorized to call.' It uses a specific verb ('list'), names the resource ('API operations'), and scopes it ('authorized to call'). It also distinguishes itself from siblings by mentioning dev_read_api and the typed shortcut 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?

Explicit usage guidance is provided: 'Use this to discover what's available before calling dev_read_api, or to verify an endpoint path.' It also directs users to check typed shortcut tools first, stating 'check those first before reaching for the generic proxies.' This clearly explains when to use this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dev_read_apiA
Read-onlyIdempotent
Inspect

Read from any allowlisted Open Ephemeris API endpoint via HTTP GET. This is the read-only power-user escape hatch — use the typed tools (ephemeris_natal_chart, ephemeris_transits, etc.) first for common operations. Endpoints that compute via POST (natal-chart, synastry, etc.) are covered by the typed tools; the generic POST proxy is only exposed on the full tool surface (?profile=full).

Target API: Open Ephemeris REST API (https://api.openephemeris.com). Call dev_list_allowed to see all currently available endpoint paths.

AUTH: Set OPENEPHEMERIS_API_KEY in your environment. See openephemeris.com/dashboard for active plan limits.

CREDIT COSTS: • Standard chart math (natal, progressed, bazi, vedic, iching): 1 credit • Human Design: 2 credits • Visualization rendering (chart-wheel, bi-wheel, charts/*): 2 credits • Comparative math (synastry, composite, overlay): 3 credits • Predictive ops (transits/search, returns): 5 credits • Predictive transit-chart: 1 credit • ACG / astrocartography: 10 credits (acg/hits: 15 credits) • Calendar endpoints: 10 credits • Catalog / metadata / health endpoints: 0 credits • Compute surcharge: requests > 30s add 1 credit per 30s (predictive, acg, calendar, electional) • format=llm (token-optimized output): available on all tiers

COMMON CALLS: POST /ephemeris/natal-chart — Full natal chart (body: {subject: {name: 'Name', birth_datetime: {iso: '1990-04-15T14:30:00-05:00'}, birth_location: {latitude: {decimal: 40.0}, longitude: {decimal: -70.0}, timezone: {}}}}) POST /ephemeris/natal/batch — Up to 50 natal charts in one request POST /ephemeris/relocation — Relocated chart (same natal, new location) POST /predictive/transits/search — Transit event search over a date range POST /predictive/returns/solar — Solar return chart POST /predictive/returns/lunar — Lunar return chart POST /comparative/synastry — Two-person synastry chart POST /comparative/composite — Composite (midpoint) chart POST /human-design/chart — Full HD chart (body: {birth_datetime_utc: '1990-04-15T19:30:00Z'}) — lat/lon optional POST /time/julian-day — Convert date to JD (body: {year: 1987, month: 7, day: 15, hour: 14, minute: 1}) GET /ephemeris/moon/phase — Current/queried moon phase GET /ephemeris/moon/void-of-course — Next void-of-course period GET /ephemeris/agro/daily — Biodynamic farming day quality GET /ephemeris/agro/calendar — Multi-day biodynamic calendar GET /ephemeris/agro/void-of-course — Biodynamic VoC periods GET /eclipse/next-visible — Next eclipse visible from a location (query: lat, lon, type=solar|lunar) GET /eclipse/solar/global — Next global solar eclipse (query: date=YYYY-MM-DD) GET /eclipse/solar/local — Local solar eclipse (query: lat, lon) GET /tidal/forcing — Gravitational tidal forcing index POST /acg/power-lines — Astrocartography power lines (lat/lon GeoJSON) POST /acg/hits — ACG power at a specific location GET /calendar/astrology/moon-phases — Moon phase calendar for a date range GET /location/autocomplete — Geocode a place name (query: query=City Name) POST /timezone/lookup — Resolve timezone + UTC offset for a location POST /chinese/bazi — Chinese Ba Zi (Four Pillars) chart (body: {year, month, day, hour}) GET /chinese/zodiac — Chinese zodiac year element/animal POST /vedic/chart — Vedic (Jyotish) natal chart (body: {datetime_utc, latitude, longitude}) GET /catalogs/bodies — List all supported celestial bodies

BINARY RESPONSES: • Binary/image endpoints return {content_type, content_length, encoding, data_base64} so callers can decode bytes deterministically.

ECLIPSE NOTE: Eclipse endpoints accept format=llm via the query param like other endpoints.

format=llm NOTE: Add query: {format: 'llm'} to natal/synastry/composite/HD endpoints for compact columnar output optimized for LLM token budgets (availability depends on your current plan).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON request body (optional)
pathYesAbsolute API path (e.g., /ephemeris/natal-chart)
queryNoQuery params (optional)
formatNoConvenience: if provided, set query.format (optional). 'llm' is canonical; 'llm_v2' is accepted as a legacy alias.
methodNoHTTP method (always GET)
presetNoConvenience: if provided, set query.preset (optional).
output_modeNoLegacy convenience (deprecated): if provided, set query.output_mode and also map to query.preset/query.format when possible.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavior beyond annotations: credit costs, binary response envelope shape, format=llm behavior, and auth requirements. It loses a point because it lists POST endpoints under 'COMMON CALLS' even though the tool only supports GET, creating avoidable ambiguity about what is actually callable through this proxy.

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 well-structured with clear sections (auth, credit costs, common calls, binary responses, format notes), and important guidance is front-loaded. However, it is quite long and has some redundancy (format=llm is mentioned multiple times), and the extensive endpoint example list could be trimmed without losing essential meaning.

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?

Given the tool's complexity and the absence of an output schema, the description covers most operational needs: auth, credit implications, endpoint discovery, common request bodies, binary response handling, and format options. It is not fully complete because it doesn't explicitly state that the listed POST endpoints are not callable through this GET-only proxy, and it omits error/rate-limit response behavior.

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 schema already documents path, body, query, format, method, preset, and output_mode. The description adds some useful context, such as format=llm being token-optimized and preset/output_mode conveniences, but it does not materially deepen per-parameter semantics beyond what the input schema 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 clearly identifies the tool as a read-only generic HTTP GET proxy to allowlisted Open Ephemeris endpoints, using a specific verb ('Read'), resource ('API endpoint'), and mechanism ('HTTP GET'). It also distinguishes itself from the typed sibling tools by labeling itself the 'power-user escape hatch' and says the typed tools should be preferred for common operations.

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?

The description explicitly tells the agent when to use this tool versus alternatives: use typed tools first for common operations, and only use this generic proxy for allowlisted endpoints not covered by typed tools. It also names the sibling dev_list_allowed for discovering allowed paths, which is exactly the kind of routing guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

electional_moment_analysisA
Read-onlyIdempotent
Inspect

Analyze the astrological quality of a specific moment: planet positions, aspects, void of course status, lunar phase, day ruler, and an overall electional score (0-100). Perfect for evaluating whether 'right now' or a specific date/time is good for action.

CREDIT COST: 5 credits per call.

EXAMPLE: Analyze March 21, 2026 at noon: date='2026-03-21T12:00:00Z'

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoISO 8601 datetime to analyze, with a zone (e.g., '2026-03-21T12:00:00Z' or '2026-03-21T08:00:00-04:00'). Defaults to now.
formatNoOutput format.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is clear. The description adds valuable operational context: a credit cost of 5 per call and a concrete example of the expected date format, which goes beyond the structured annotations.

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?

The description is front-loaded with the core purpose, followed by a one-line usage context, credit cost, and a single example. Every sentence contributes value, with no redundant or filler content, and it is compact enough to be read quickly.

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?

Despite having no output schema, the description sufficiently explains what the tool returns by listing the analyzed components and the overall 0-100 score. Combined with the usage context, credit cost, and example, it gives an AI agent everything needed to select and invoke the tool correctly for a simple task.

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?

The input schema already documents both parameters with descriptions and defaults (100% coverage). The description enhances this with a concrete ISO 8601 example ('2026-03-21T12:00:00Z') including a timezone, which clarifies the expected syntax beyond the schema's basic type description.

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 states a specific verb ('Analyze') and resource ('astrological quality of a specific moment'), then enumerates the exact components (planet positions, aspects, void of course status, lunar phase, day ruler, electional score). This clearly distinguishes it from sibling ephemeris tools that focus on other chart calculations or transit timelines.

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?

The description provides clear context for when to use the tool: 'Perfect for evaluating whether 'right now' or a specific date/time is good for action.' It does not explicitly mention when not to use it or name alternative tools, so it falls slightly short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

electional_station_trackerA
Read-onlyIdempotent
Inspect

Find all upcoming retrograde and direct stations for planets in a date range. Returns exact station times, longitudes, and signs.

USE THIS TOOL FOR: 'When does Mercury go retrograde?', 'Is Venus retrograde this year?', 'What planets station this month?', 'When does Mars go direct?'

❌ NOT FOR: 'Is Mercury retrograde right now?' — that is the state at a single instant, so use ephemeris_retrograde_status (1 credit for one planet, vs 5 here).

All required fields have smart defaults (searches the next 90 days from today).

CREDIT COST: 5 credits per call.

EXAMPLE: Mercury and Venus stations in the next 3 months (all defaults): (no args required, will auto-scan next 90 days for all inner planets)

EXAMPLE: Outer planet stations in 2026: start_date='2026-01-01', end_date='2026-12-31', planets='jupiter,saturn,uranus,neptune,pluto'

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format.
planetsNoComma-separated planet names to track. E.g. 'mercury,venus,mars' or 'jupiter,saturn,uranus,neptune,pluto'. Defaults to Mercury through Saturn (inner + classical planets).
end_dateNoEnd date (ISO 8601). Defaults to +90 days.
start_dateNoStart date (ISO 8601). Defaults to today.

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, and destructiveHint, so the description need not repeat them. It adds useful behavioral context: credit cost, smart defaults (90-day auto-scan), and return contents (exact station times, longitudes, signs). No contradiction exists; a minor ambiguity is the word 'upcoming' when a past start_date could be specified.

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 organized into labeled sections (use cases, not-for, defaults, credit cost, examples), which aids parsing. It is somewhat verbose but each section adds value; there is no fluff, and the structure makes it easy for an agent to extract the key information.

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 read-only tool with no required parameters and no output schema, the description covers the essentials: purpose, usage boundaries, defaults, cost, and examples. It clearly states what the tool returns (exact station times, longitudes, signs), making it complete enough for an agent to invoke correctly.

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. The description goes beyond by providing concrete examples with parameter values, explaining default planet selection (Mercury through Saturn) and default date range, and showing a full-parameter example. This meaningfully enhances schema-only definitions.

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 resource: 'Find all upcoming retrograde and direct stations for planets in a date range.' It also lists example queries and explicitly distinguishes itself from the sibling tool ephemeris_retrograde_status, making its scope unambiguous.

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?

The description includes explicit 'USE THIS TOOL FOR' and 'NOT FOR' sections, naming the alternative tool (ephemeris_retrograde_status) and explaining the credit cost difference. This provides clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_angles_pointsA
Read-onlyIdempotent
Inspect

Calculate chart angles and sensitive points (ASC, MC, DSC, IC, Vertex, East Point, etc.) for a given date/time and location.

CREDIT COST: 1 credit per call.

ParametersJSON Schema
NameRequiredDescriptionDefault
datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
latitudeYesObserver latitude.
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
longitudeYesObserver longitude.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the credit cost ('1 credit per call'), which is useful operational context. It does not contradict annotations and provides additional value beyond the structured fields.

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?

The description is concise: two sentences, with the essential purpose front-loaded and the credit cost as a separate clear line. Every word earns its place, with no fluff or redundancy.

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 simple calculation tool, the description is sufficiently complete: it names the input (date/time, location) and the output (specific angles/points). No output schema exists, but the description implies return values through the listed points. It could mention edge cases or output format, but these are not critical for a straightforward ephemeris calculator.

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 documents all parameters clearly. The description adds minimal semantics beyond stating 'given date/time and location', which aligns with the schema. Baseline 3 is appropriate since the description does not need to compensate.

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 uses a specific verb ('Calculate') and a clear resource ('chart angles and sensitive points') followed by explicit examples (ASC, MC, DSC, IC, Vertex, East Point). This distinguishes it from sibling tools like ephemeris_house_cusps or ephemeris_planet_position, which target different data.

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?

The description clearly states what the tool computes (angles and sensitive points for a given date/time and location), providing clear context. However, it does not explicitly mention when to prefer this over alternatives or list exclusions, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_aspect_checkA
Read-onlyIdempotent
Inspect

Check the aspect between two ecliptic longitudes. Returns the angular separation and any aspects within orb (conjunction, sextile, square, trine, opposition, etc.).

CREDIT COST: 1 credit per call.

EXAMPLE: Check aspect between 15° Aries and 75° Gemini: longitude_1=15, longitude_2=75

ParametersJSON Schema
NameRequiredDescriptionDefault
max_orbNoMaximum orb in degrees. Default 8°.
longitude_1YesFirst ecliptic longitude (0-360).
longitude_2YesSecond ecliptic longitude (0-360).

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds credit cost and mentions 'within orb' behavior, which is useful context, but does not disclose other behavioral traits like error handling or edge cases.

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?

The description is very concise and front-loaded. It delivers the core purpose in the first sentence, then provides essential credit cost and a helpful example, all in just a few lines without wasted words.

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 simple read-only tool with no output schema, the description sufficiently explains what is returned (angular separation and aspects), includes a usage example, and notes the credit cost. It could be more complete by specifying the exact structure of the return value, but it is adequate.

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 all parameters are already documented. The description adds a concrete example and explains 'within orb' related to max_orb, but this is marginal value since the schema already defines max_orb and the longitude ranges.

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 uses the specific verb 'Check' with a clear resource ('the aspect between two ecliptic longitudes') and explains what it returns (angular separation and aspects within orb). This distinguishes it from sibling tools that handle full charts or planet positions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The description clearly implies the tool is for checking aspects between two longitudes, but it does not explicitly state when to use it over alternatives like ephemeris_transits or ephemeris_synastry, nor does it mention exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_electionalA
Read-onlyIdempotent
Inspect

Find optimal planetary timing windows (electional astrology). Scans a date range to find the best times for an event based on essential dignity, aspect quality, sect, and void-of-course moon penalties. Evaluates every hour and clusters the best continuous windows.

CREDIT COST: 5 credits per call (heavy calculation).

EXAMPLE: Find the best time to launch a business in early March 2026. start_date='2026-03-01', end_date='2026-03-10', latitude=40.7128, longitude=-74.0060, avoid_voc=true, lunar_phase='waxing'

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format. 'llm' = compact token-efficient output (available on all tiers).
end_dateYesEnd of the search window. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC.
latitudeYesLatitude of location in decimal degrees (positive = North). Resolve from a place name with location_search; never recall coordinates from memory.
avoid_vocNoIf true, strictly ignores any moments where the Moon is Void of Course.
longitudeYesLongitude of location in decimal degrees (positive = East).
start_dateYesStart of the search window, e.g. '2026-03-01'. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC.
lunar_phaseNoFilter windows by lunar phase. Defaults to 'any'.
max_resultsNoMaximum number of top windows to return (default 5).
avoid_retrogradeNoComma-separated list of planets to avoid when retrograde (e.g., 'mercury,venus').

TDQS

A4.6/5.0
Behavior5/5

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

The description adds valuable context beyond annotations: it scans every hour, clusters windows, and includes a credit cost of 5 credits per call with 'heavy calculation'. It also details the scoring criteria. This complements the readOnlyHint and idempotentHint with meaningful operational specifics.

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?

The description is compact and well-structured: a clear definition sentence, a credit-cost note, and an example. Every sentence serves a purpose, and the example is practical without being verbose.

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?

The tool has 9 parameters and no output schema, so the description must explain the main behavior. It covers the input criteria, scanning method, clustering, and cost. It lacks explicit return structure details, but the mention of 'clusters the best continuous windows' gives a reasonable picture.

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 description coverage is 100%, giving a baseline of 3. The example in the description adds a concrete illustration of parameter usage (dates, lat/long, avoid_voc, lunar_phase), which helps clarify how parameters combine beyond the schema's individual descriptions.

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 states 'Find optimal planetary timing windows' with specific criteria (essential dignity, aspect quality, sect, void-of-course moon penalties). It distinguishes from siblings like ephemeris_transits or electional_moment_analysis by emphasizing scanning a date range and clustering windows.

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?

The description gives a concrete example ('Find the best time to launch a business in early March 2026') that illustrates when to use the tool. It implies usage for event timing over a range, though it doesn't explicitly exclude alternatives like electional_moment_analysis.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_house_cuspsA
Read-onlyIdempotent
Inspect

Calculate house cusps and angles (ASC, MC, DSC, IC) for a given date, time, and location using one or more house systems.

House system codes: P=Placidus, K=Koch, O=Porphyry, R=Regiomontanus, C=Campanus, E=Equal, W=Whole Sign.

CREDIT COST: 1 credit per call.

EXAMPLE: Placidus houses for London at 2026-03-20 noon UTC: datetime='2026-03-20T12:00:00Z', latitude=51.5074, longitude=-0.1278, house_systems=['P']

ParametersJSON Schema
NameRequiredDescriptionDefault
datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
latitudeYesObserver latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory.
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
longitudeYesObserver longitude in decimal degrees.
house_systemsNoList of house system codes. E.g. ['P', 'W']. Defaults to ['P'] (Placidus).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds meaningful context beyond annotations: 'CREDIT COST: 1 credit per call' and the full list of house system codes with their meanings, which inform invocation behavior. No contradiction with 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 description is concise and front-loaded: the first sentence states the core function, followed by a neat code list, credit cost, and a compact example. No extraneous content; every sentence contributes useful operational detail. Minor deduction for being slightly longer than strictly necessary, but structure is clean.

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?

Given there is no output schema, the description helps by naming the return concepts (ASC, MC, DSC, IC) and offering an example invocation. It also notes the required timezone handling via the schema. It does not describe the output format or edge-case constraints, but the provided details are sufficient for a qualified agent to call the tool correctly.

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?

Input schema covers all 5 parameters with detailed descriptions, so the schema does most of the heavy lifting. The description adds value by mapping house system codes to names (P=Placidus, K=Koch, etc.) and providing a concrete example that shows how datetime, latitude, longitude, and house_systems combine. This exceeds the baseline for a fully documented schema.

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?

Description opens with 'Calculate house cusps and angles (ASC, MC, DSC, IC) for a given date, time, and location using one or more house systems.' This is a specific verb+resource, and the explicit list of angles makes the scope unmistakable. It clearly distinguishes from sibling ephemeris tools that target transits, natal charts, or other astrological calculations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The description conveys when the tool is relevant (calculating house cusps) and provides an example, but it does not explicitly state when to use this over alternatives or offer any 'when not to use' guidance. Sibling tool names like ephemeris_natal_chart and ephemeris_transits imply alternatives, yet no direct comparison is made.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_moon_phaseA
Read-onlyIdempotent
Inspect

Get the Moon's current phase angle, illumination, sign and void-of-course status AT a specific point in time. Returns phase name (New, Waxing Crescent, etc.), illumination %, the zodiac sign and degree the Moon occupies, and next void-of-course period.

⚠️ THIS TOOL ANSWERS: 'What phase is the moon in right now (or at a given datetime)?' and 'What sign is the moon in?' ❌ THIS TOOL DOES NOT ANSWER: 'When is the next new moon / full moon?' → For upcoming phase DATES use ephemeris_next_lunar_phase instead.

For a user-facing interactive moon-phase dial, use explore_moon_phase instead.

CREDIT COST: 2 credits — phase and void-of-course are metered separately. For phase alone at 1 credit, use dev_read_api path='/ephemeris/moon/phase'.

If no datetime is provided, returns the current (live) moon phase.

ParametersJSON Schema
NameRequiredDescriptionDefault
datetimeNoISO 8601 datetime to query, stating its zone ('2026-03-20T12:00:00Z' or '2026-03-20T08:00:00-04:00'), or a local time together with `timezone`. If omitted, returns the current live moon phase (UTC now).
latitudeNoObserver latitude (optional, used for local void-of-course calculations).
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
longitudeNoObserver longitude (optional, used for local void-of-course calculations).

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, covering the basic safety profile. The description adds valuable behavioral context such as credit cost (2 credits), separate metering for phase and void-of-course, and the live moon phase default when no datetime is provided.

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?

The description is well-organized: a concise main statement, followed by structured sections for answers/non-answers, alternatives, credit cost, and default behavior. Every sentence earns its place, contributing critical information without unnecessary verbosity.

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 description covers the return values (phase name, illumination, sign/degree, void-of-course), usage boundaries, credit cost, and default behavior. Even without an output schema, it gives the agent enough context to understand what to expect and how to invoke the tool correctly.

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?

All parameters are fully described in the schema (100% coverage), so the baseline is 3. The description adds meaningful semantics by clarifying that omitting the datetime parameter returns the current live phase, and that latitude/longitude are optional for void-of-course calculations.

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 states the tool's purpose: getting the Moon's phase angle, illumination, sign, and void-of-course status at a specific time. It also differentiates from sibling tools by explicitly stating what it does not do (e.g., upcoming phase dates) and pointing to alternatives.

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?

The description provides clear guidance on when to use this tool versus alternatives, with explicit 'THIS TOOL ANSWERS' and 'THIS TOOL DOES NOT ANSWER' sections. It even mentions a credit-saving alternative for phase-only queries, making usage context very clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_natal_chartA
Read-onlyIdempotent
Inspect

Calculate a full natal (birth) chart for a person. Returns planetary positions, house cusps, aspects, and chart patterns. Use format='llm' for a compact, token-efficient output ideal for interpretation (available on all tiers). The result includes all major planets, Chiron and major asteroids like Ceres, angles (ASC/MC/DSC/IC), essential dignities, retrograde status, house system data, and major aspect grid. Asteroids are automatically included. Returns raw JSON. For a user-facing visual chart, use explore_natal_chart instead.

CREDIT COST: 1 credit per call.

EXAMPLE: born 15 April 1990 at 2:30 PM local time in Chicago — pass the local time and name the zone: datetime='1990-04-15T14:30:00', timezone='America/Chicago', latitude=41.8781, longitude=-87.6298 Equivalently, put the zone on the datetime: datetime='1990-04-15T14:30:00-05:00' (or the UTC instant '1990-04-15T19:30:00Z').

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format. 'llm' returns a compact array-based projection optimized for LLM token efficiency (available on all tiers). 'json' returns full verbose JSON.
datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
latitudeYesGeographic latitude of birth location in decimal degrees (positive = North). Resolve from a place name with location_search; never recall coordinates from memory.
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
longitudeYesGeographic longitude of birth location in decimal degrees (positive = East).
house_systemNoHouse system to use. Defaults to 'placidus' if omitted.
visual_configNoOptional rendering preferences (only used when include_visual=true).
include_visualNoWhen true, renders the natal chart wheel as an SVG and embeds it directly in the response. The chart image will display in the conversation alongside the data. Costs 2 additional credits on top of the base call cost.
include_fixed_starsNoInclude fixed-star positions in the natal response (routed as `configuration.fixed_star_options.include: true`). For a standalone fixed-stars payload without a full natal chart, use `/ephemeris/fixed-stars` instead.
include_arabic_partsNoInclude Hermetic Lots / Arabic Parts in the natal response (routed as `options.include_hermetic_lots: true`). For a standalone lots-only payload without a full natal chart, use `/ephemeris/hermetic-lots` instead.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark the tool as readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds substantial behavioral context beyond that: credit cost per call, extra credits for visual, automatic inclusion of asteroids, routing of flags to underlying config, and that the result is raw JSON (with SVG embedded when include_visual=true). No contradictions with 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 description is multi-paragraph but every sentence earns its place: it covers purpose, return contents, format recommendation, credit cost, an example, and sibling alternatives. It is front-loaded with the core purpose. Some minor redundancy exists (the return list is mentioned twice), but overall it is efficient and well-structured.

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?

Given 10 parameters, a nested object, and no output schema, the description is remarkably complete. It explains credit costs, how to handle timezone ambiguities, what is automatically included, how to use format='llm', and points to sibling tools for alternatives. It leaves no obvious gaps for correct invocation and interpretation.

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 baseline is 3. The description adds valuable clarification beyond the schema: it explains the purpose of format='llm', gives a concrete datetime/timezone example with Chicago, and warns that latitude should not be recalled from memory. This extra context helps correct parameter usage, warranting a slight bump.

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 ('Calculate a full natal (birth) chart') and clearly states what it returns (planetary positions, house cusps, aspects, chart patterns). It differentiates itself from the sibling explore_natal_chart by explicitly directing user-facing visual charts there, and also names standalone endpoints for fixed stars and Arabic parts.

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?

Provides explicit guidance on when to use this tool versus alternatives: 'For a user-facing visual chart, use explore_natal_chart instead', and for standalone fixed-stars/hermetic lots payloads, recommends /ephemeris/fixed-stars and /ephemeris/hermetic-lots. It also recommends format='llm' for token-efficient interpretation and tells users to resolve coordinates with location_search.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_next_eclipseA
Read-onlyIdempotent
Inspect

Find the next solar or lunar eclipse. Returns the eclipse type, date/time of maximum, magnitude, and duration of totality (if any).

📍 LOCATION OPTIONAL: • WITH latitude+longitude → returns local contact times and visibility for that specific location. • WITHOUT latitude+longitude → returns the next global eclipse of that type (no location needed).

USE THIS TOOL FOR: 'When is the next solar eclipse?', 'When is the next total lunar eclipse?', 'Will there be an eclipse visible from Tokyo?'

CREDIT COST: 1 credit per call.

EXAMPLE: Next solar eclipse globally (no location needed): eclipse_type='solar'

EXAMPLE: Next solar eclipse visible from New York: eclipse_type='solar', latitude=40.7128, longitude=-74.006

EXAMPLE: Next lunar eclipse from London: eclipse_type='lunar', latitude=51.5074, longitude=-0.1278

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeNoObserver latitude in decimal degrees (optional). When provided with longitude, returns local contact times and visibility.
longitudeNoObserver longitude in decimal degrees (optional, pair with latitude).
after_dateNoISO 8601 date to search after (e.g. '2026-01-01'). Defaults to today if omitted.
eclipse_typeYesEclipse type to search for. Use 'any' for whichever comes first (solar or lunar).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly and idempotent, so the bar is lower. The description adds valuable behavioral context: it explains that providing latitude/longitude returns local contact times, while omitting them returns the next global eclipse. It also discloses the return fields (type, date/time, magnitude, duration) and credit cost, which goes well beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear summary, location optional section, use-case examples, and credit cost. It uses bullets and short paragraphs, front-loading the core purpose. Every sentence adds value, and there is no redundancy or filler.

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?

Given the tool has no output schema, the description compensates by listing return fields (eclipse type, date/time, magnitude, duration). It covers the main parameters through examples, explains the location behavior, and gives credit cost. Although after_date is not mentioned in the description, it is well-documented in the schema, so completeness is not compromised.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, giving a baseline of 3. The description adds significant meaning beyond the schema by explaining the optionality and pairing requirement for latitude/longitude, showing examples for both global and location-based queries, and clarifying the meaning of 'any' for eclipse_type through context. This fully compensates and enriches the parameter understanding.

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 'Find the next solar or lunar eclipse,' which is a specific verb+resource statement. It clearly distinguishes from sibling tools like moon phase or transit tools by focusing on eclipses and even clarifies the optional location behavior. The examples reinforce the exact purpose.

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?

The description provides a 'USE THIS TOOL FOR' section with concrete example queries, and explains the two usage modes (global vs location-specific). It does not explicitly exclude sibling tools (e.g., ephemeris_next_lunar_phase), but the natural-language examples and focus on eclipses make it clear when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_next_lunar_phaseA
Read-onlyIdempotent
Inspect

Find the next occurrence of a specific Moon phase after a given date. Returns the exact UTC datetime of each occurrence.

✅ USE THIS TOOL FOR: 'When is the next new moon?', 'When is the next full moon?', 'What date is the next quarter moon?', or any question about UPCOMING phase dates. ❌ NOT FOR: 'What phase is the moon in right now?' or 'What sign is the moon in?' → For the phase, sign and degree AT a moment, use ephemeris_moon_phase.

CREDIT COST: 1-2 credits per occurrence returned — each occurrence takes one calendar search, plus a second search when the first window misses. So count=3 costs 3-6 credits.

EXAMPLE: Find the next new moon: phase='new_moon'

EXAMPLE: Find the next full moon after a specific date: phase='full_moon', after_date='2026-06-01'

EXAMPLE: Find the next 3 full moons: phase='full_moon', count=3

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of upcoming occurrences to return (1-12). Default 1.
phaseYesThe lunar phase to find. 'new_moon' = conjunction (0° Sun-Moon, start of cycle). 'full_moon' = opposition (180°). 'first_quarter' = 90° waxing. 'last_quarter' = 270° waning.
after_dateNoISO 8601 date to search from (e.g. '2026-06-01'). Defaults to today (UTC) if omitted.

TDQS

A4.6/5.0
Behavior5/5

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

Despite strong annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false), the description adds behavioral details beyond annotations: the exact UTC datetime return, credit cost per occurrence (1-2 credits with explanation of why), and the search logic (second search when first window misses). It also clarifies default after_date behavior (today UTC) without contradicting 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 description is somewhat long and uses emojis and sections, but it is well-structured and every element earns its place: purpose, usage rules, cost, and examples. It is front-loaded with the core function and immediately distinguishes from siblings, making it easy to scan.

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 explains the return value ('exact UTC datetime'), covers all three parameters, provides usage boundaries, and includes cost behavior. It offers examples that demonstrate realistic invocation patterns, making it complete for a tool of this complexity.

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 baseline is 3. The schema already provides detailed descriptions for phase enum values, count range, and after_date format. The description contributes concrete usage examples, but these do not add new semantic meaning beyond what the schema already states.

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 resource: 'Find the next occurrence of a specific Moon phase after a given date. Returns the exact UTC datetime of each occurrence.' It clearly distinguishes itself from the sibling ephemeris_moon_phase by explicitly stating what it is NOT for and pointing to the alternative.

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 explicit use cases with emoji-labeled sections: '✅ USE THIS TOOL FOR' and '❌ NOT FOR', and names the exact alternative tool for current phase/sign/degree questions. Multiple concrete examples (e.g., 'phase='new_moon'', 'after_date='2026-06-01'') further clarify when and how to invoke.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_planet_positionA
Read-onlyIdempotent
Inspect

Get the precise ecliptic longitude, latitude, distance, speed, and retrograde status for a single planet/body at a given date and time. Planet IDs: 0=Sun, 1=Moon, 2=Mercury, 3=Venus, 4=Mars, 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune, 9=Pluto, 10=North Node (Mean), 11=North Node (True), 12=Lilith (Mean), 15=Chiron, 17=Ceres, 18=Pallas, 19=Juno, 20=Vesta.

SOUTH NODE: there is no South Node id. The South Node is always exactly opposite the North Node — request id 10 or 11 and add 180° (mod 360).

CREDIT COST: 1 credit per call.

EXAMPLE: Where is Mars on 2026-03-20 at noon UTC? planet_id=4, datetime='2026-03-20T12:00:00Z'

ParametersJSON Schema
NameRequiredDescriptionDefault
datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
latitudeNoObserver latitude for topocentric position (optional). Omit for geocentric.
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
longitudeNoObserver longitude for topocentric position (optional). Omit for geocentric.
planet_idYesPlanet/body ID (0=Sun, 1=Moon, 2=Mercury, 3=Venus, 4=Mars, 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune, 9=Pluto, 10=North Node (Mean), 11=North Node (True), 12=Lilith (Mean), 15=Chiron, 17=Ceres, 18=Pallas, 19=Juno, 20=Vesta). There is no South Node id — take the North Node and add 180°.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful context: the credit cost (1 credit per call), the South Node workaround (no ID, opposite of North Node), and the specific output fields. It does not contradict annotations and provides extra information beyond safety flags.

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 well-organized: a clear main sentence, then structured supplementary sections (IDs, South Node, cost, example). It is front-loaded with the core purpose. Some redundancy exists because the planet ID list duplicates the schema, but the additional notes and example justify the length. It is not overly verbose for the information conveyed.

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?

Given the lack of an output schema, the description adequately lists the return fields (longitude, latitude, distance, speed, retrograde status). It also covers important edge cases (South Node) and cost. It does not explicitly state geocentric vs. topocentric behavior, but the optional observer coordinates in the schema imply this. Overall, it is sufficiently complete for a single-body ephemeris query.

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 parameters are already well-documented. The description repeats the planet_id list and adds a clarifying South Node note, but this info is also in the schema. The example maps parameters to values, but that's illustrative rather than adding new semantic meaning. The mention of output fields helps understand the purpose of parameters but does not deepen parameter-level understanding.

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 states the tool 'gets' specific data (ecliptic longitude, latitude, distance, speed, retrograde status) for a 'single planet/body at a given date and time.' It sets it apart from sibling chart tools like ephemeris_natal_chart or ephemeris_transits by emphasizing the single-body, position-only scope. The planet ID enumeration further reinforces the resource being acted on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is implied rather than explicit. The description says 'for a single planet/body,' which suggests when to use this tool, but there is no direct comparison to alternatives like ephemeris_retrograde_status (which might focus on retrograde alone) or ephemeris_house_cusps. The example provides a concrete scenario, but no 'use this instead of X' or 'not for full charts' guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_progressed_chartA
Read-onlyIdempotent
Inspect

Calculate a Secondary Progressed (or Solar Arc / Tertiary) chart. Advances the natal chart symbolically — 1 day = 1 year (secondary), or using solar arc motion. Returns progressed planet positions, house cusps, aspects, and retrograde status.

CREDIT COST: 1 credit per call.

EXAMPLE: Secondary progressions for someone born 1985-06-21 at 2:00 PM in London, progressed to 2026-01-01: birth_datetime='1985-06-21T14:00:00', timezone='Europe/London', birth_latitude=51.5, birth_longitude=-0.12, target_datetime='2026-01-01', method='secondary'

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoProgression method. Defaults to 'secondary' (1 day = 1 year).
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
visual_configNoOptional rendering preferences (only used when include_visual=true).
birth_datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
birth_latitudeYesBirth latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory.
include_visualNoWhen true, renders the progressed chart wheel as an SVG and embeds it in the response. The chart image will display in the conversation alongside the data. Costs 2 additional credits on top of the base call cost.
birth_longitudeYesBirth longitude in decimal degrees.
include_aspectsNoWhether to include aspect grid in the response. Default false.
target_datetimeYesDate to progress the chart to. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is known. The description adds meaningful behavioral context beyond annotations: it explains the symbolic advancement (1 day = 1 year), lists return contents, and mentions credit cost. No contradiction exists.

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 well-structured: opening purpose sentence, a brief explanation of methods, credit notice, and a labeled example block. It is slightly longer than minimal but every sentence earns its place, especially the example which clarifies parameter usage.

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?

Given the tool's complexity (9 params, nested visual_config, no output schema), the description provides solid context: return contents (positions, cusps, aspects, retrograde), method variants, and a complete usage example. Some details are left to the schema, but the description is sufficient for an agent to understand the tool's role and typical call shape.

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 description coverage is 100%, so params are already fully documented. The description adds extra value by showing a realistic example with concrete values for birth_datetime, timezone, coordinates, and target_datetime, which helps correct usage. It also notes the credit cost structure for include_visual in the schema.

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 begins with a specific verb and resource: 'Calculate a Secondary Progressed (or Solar Arc / Tertiary) chart.' It clearly distinguishes this tool from sibling ephemeris tools like natal or transit charts by explicitly naming the progression methods and the returned data (planet positions, house cusps, aspects, retrograde status).

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?

The description provides clear context on what the tool computes and even shows a concrete example with parameter values, making the intended usage evident. However, it does not explicitly state when to prefer this over sibling tools like ephemeris_transits or ephemeris_solar_return, so exclusions are not covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_relocationA
Read-onlyIdempotent
Inspect

Calculate a relocation chart — the same natal planetary positions re-cast for a different geographic location. Used to understand how living in a different city shifts house placements and angles, without changing the planetary longitudes in the chart.

CREDIT COST: 1 credit per call.

EXAMPLE: How does moving from Chicago to London change someone's chart? natal_datetime='1990-04-15T14:30:00', timezone='America/Chicago', natal_latitude=41.8781, natal_longitude=-87.6298, relocation_latitude=51.5074, relocation_longitude=-0.1278

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format. 'llm' = compact token-efficient output (available on all tiers).
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
house_systemNoHouse system to use. Defaults to 'placidus'.
natal_datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
natal_latitudeYesLatitude of birth location in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory.
natal_longitudeYesLongitude of birth location in decimal degrees.
relocation_latitudeYesLatitude of the relocation city in decimal degrees (positive = North).
relocation_longitudeYesLongitude of the relocation city in decimal degrees (positive = East).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds valuable context: credit cost per call and the behavioral detail that planetary longitudes remain unchanged while houses/angles shift. This exceeds the annotation baseline without contradiction.

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?

The description is lean: a one-sentence definition, credit cost, and a compact example. It is front-loaded with the core concept and avoids redundancy. The example is illustrative without being verbose.

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 an 8-parameter tool with no output schema, the description covers the concept, usage, and a full example. It doesn't explicitly describe return values, but the purpose and effect are clear. Slight gap in output structure, but overall sufficient for invocation.

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's example provides concrete values but doesn't add new semantic meaning beyond what the schema already documents for each parameter. No compensation needed.

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 states 'Calculate a relocation chart' and specifies the mechanism: same natal planetary positions re-cast for a different geographic location. It distinguishes itself from sibling tools like natal chart or transits by emphasizing that only house placements and angles shift, not longitudes.

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?

The phrase 'Used to understand how living in a different city shifts house placements and angles' provides clear usage context. It doesn't explicitly name alternatives or when-not-to-use, but the example and wording make the intended scenario evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_retrograde_statusA
Read-onlyIdempotent
Inspect

Get retrograde/direct status and speed for ONE planet — or, if you ask for it, all ten — at a given date/time. Returns is_retrograde flag, longitude speed, and station proximity.

✅ Answers 'is X retrograde?' at ONE instant. Pass planet_id for the named planet; 'is Mercury retrograde?' is planet_id=2, not a whole-sky sweep. For WHEN a planet turns retrograde or direct, or whether it stations anywhere in a date range, use electional_station_tracker.

CREDIT COST: 1 credit for a single planet (pass planet_id). Omitting planet_id runs the all-planets sweep and costs 10 credits — the backend bills one credit per body and this fans out to 10. Only omit it when the question really is about every planet.

ParametersJSON Schema
NameRequiredDescriptionDefault
datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
planet_idNoSingle planet ID (0=Sun, 1=Moon, 2=Mercury, 3=Venus, 4=Mars, 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune, 9=Pluto). Pass this whenever the question names a planet — 1 credit. Omit only to sweep all ten — 10 credits.

TDQS

A4.9/5.0
Behavior5/5

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

The description adds significant behavioral context beyond the read-only annotation: it discloses the credit cost difference (1 vs 10 credits), explains the backend fan-out behavior when planet_id is omitted, and mentions the output fields. This goes beyond the annotations and helps the agent understand side effects and costs.

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?

The description is concise and front-loaded: the first sentence states the core purpose, and subsequent sentences provide essential usage and credit details. The use of a bullet introduces the key use case, and the credit-cost paragraph is dense but informative. Every sentence earns its place; no filler or redundant content.

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?

Given the tool has no output schema, the description adequately covers the return values (is_retrograde flag, longitude speed, station proximity). It also covers the cost model, the distinction from station tracking, and the key behavioral caveat about omitting planet_id. The datetime rule is referenced to server instructions, which is acceptable. The description is complete for an agent to select and invoke this tool correctly within its context.

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 already describes each parameter with 100% coverage, the description adds crucial semantic value for planet_id: 'Pass this whenever the question names a planet — 1 credit. Omit only to sweep all ten — 10 credits.' This explains the behavioral consequence of including or omitting the parameter, which the schema alone does not convey. The datetime and timezone descriptions are already thorough in the schema, so the added value here is primarily for planet_id.

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 states the tool's specific function: 'Get retrograde/direct status and speed for ONE planet — or, if you ask for it, all ten — at a given date/time.' It specifies the output (is_retrograde flag, longitude speed, station proximity) and distinguishes itself from the sibling tool electional_station_tracker by explicitly noting that for station timing, that tool should be used.

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?

The description gives explicit usage guidance: 'Answers "is X retrograde?" at ONE instant' and directs to 'electional_station_tracker' for date-range station questions. It also provides practical cost-based guidance on when to pass planet_id versus omitting it, clarifying that omission runs an all-planets sweep at 10 credits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_solar_returnA
Read-onlyIdempotent
Inspect

Calculate the exact Solar Return date/time — when the Sun returns to its natal ecliptic longitude (happens once per year near the birthday). Returns the Solar Return chart for the year ahead.

CREDIT COST: 5 credits per call.

TARGET DATE: Provide target_datetime near the desired birthday year. If omitted, defaults to the current year's solar return.

EXAMPLE: Solar return for someone born 1985-06-21 (current year): birth_datetime='1985-06-21T14:00:00Z'

EXAMPLE: Solar return for 2027 specifically: birth_datetime='1985-06-21T14:00:00Z', target_datetime='2027-01-01T00:00:00Z'

ParametersJSON Schema
NameRequiredDescriptionDefault
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
visual_configNoOptional rendering preferences (only used when include_visual=true).
birth_datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
birth_latitudeNoBirth latitude in decimal degrees (optional, for location context).
include_visualNoWhen true, renders the solar return chart wheel as an SVG and embeds it in the response. The chart image will display in the conversation alongside the data. Costs 2 additional credits on top of the base call cost.
birth_longitudeNoBirth longitude in decimal degrees (optional, for location context).
return_latitudeNoLocation latitude for the return chart (optional, if different from birth location).
target_datetimeNoDate/time near which to find the Solar Return (ISO 8601 with offset or Z). Defaults to approximately 1 year from now if omitted.
return_longitudeNoLocation longitude for the return chart (optional).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description adds valuable operational context: credit cost per call, additional visual rendering cost, default behavior when target_datetime is omitted, and example usage. No contradiction exists.

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?

The description is front-loaded with the core function, then credit cost, target date guidance, and examples. Every sentence contributes value, and there is no filler or redundancy.

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?

With no output schema, the description does not enumerate return fields but states the high-level result: the Solar Return chart for the year ahead. Given the thorough parameter schema and annotations, this is sufficient for a complex 9-parameter tool, though a bit more return-structure detail could improve completeness.

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. The description adds meaning through target_datetime guidance and concrete examples showing how to specify current-year versus specific-year returns, which is above baseline.

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 states the tool calculates the exact Solar Return date/time and returns the Solar Return chart. It distinguishes itself from sibling ephemeris tools by specifying the unique event: the Sun returning to its natal ecliptic longitude once per year near the birthday.

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?

The description gives clear usage context: use this tool when you need an annual Solar Return chart, with target_datetime to specify the desired year. It doesn't explicitly name alternatives or exclusions, but the provided examples and target-date guidance make the intended use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_synastryA
Read-onlyIdempotent
Inspect

Calculate a synastry chart comparing two people's natal charts. Returns inter-aspects (planetary connections between the two charts), composite points, and relationship indicators. Use this for compatibility analysis, relationship timing, or partnership insights.

CREDIT COST: 3 credits per call.

EXAMPLE: Compare two people's charts (local birth times, each with its zone): person_a_datetime='1990-04-15T14:30:00', person_a_timezone='America/Chicago', person_a_latitude=41.8781, person_a_longitude=-87.6298, person_b_datetime='1988-09-22T08:15:00', person_b_timezone='America/Los_Angeles', person_b_latitude=34.0522, person_b_longitude=-118.2437

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format. 'llm' is compact and token-efficient (available on all tiers).
house_systemNoHouse system for both charts. Defaults to 'placidus'.
visual_configNoOptional rendering preferences (only used when include_visual=true).
include_visualNoWhen true, renders a bi-wheel SVG comparing both charts and embeds it in the response. The chart image will display in the conversation alongside the data. Costs 2 additional credits on top of the base call cost.
person_a_datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
person_a_latitudeYesPerson A birth latitude. Resolve from a place name with location_search; never recall coordinates from memory.
person_a_timezoneNoIANA timezone for Person A's birth location (e.g. `America/Chicago`); required when the datetime is naive.
person_b_datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
person_b_latitudeYesPerson B birth latitude.
person_b_timezoneNoIANA timezone for Person B's birth location (e.g. `America/Los_Angeles`); required when the datetime is naive.
person_a_longitudeYesPerson A birth longitude.
person_b_longitudeYesPerson B birth longitude.

TDQS

A4.4/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint, idempotentHint), the description adds credit cost (3 credits), extra cost for visuals, and the fact that visual output displays in conversation. It also gives a detailed example demonstrating timezone handling, which is a useful behavioral disclosure.

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?

The description is well-structured: purpose, output, use cases, cost, then a concrete example. Every sentence serves a purpose, and the example is compact but informative. No fluff or repetition.

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?

The tool is complex (12 parameters, nested visual_config, no output schema), but the description covers purpose, output categories, usage, cost, and an example. It does not detail every output field, but that is acceptable given the high-level summary provided.

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 baseline is 3. The description goes beyond by providing a full example with all parameters populated, clarifying how to pass datetimes with timezone info and coordinates. This adds practical context not present in the schema.

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?

Description clearly states it calculates a synastry chart comparing two people's natal charts, with specific output types (inter-aspects, composite points, relationship indicators). This distinguishes it from sibling tools like natal chart (single chart) or transits by the comparative/compatibility angle.

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?

Explicitly states use cases: 'compatibility analysis, relationship timing, or partnership insights.' It does not name alternatives or exclusions, but the context is clear enough for an agent to infer when to choose this tool over single-chart or transit tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_transitsA
Read-onlyIdempotent
Inspect

Search for astrological transit events affecting a natal chart over a date range. Returns exact transit moments — when transiting planets form specified aspects to natal planet positions.

EFFICIENCY TIP: Always specify both transiting_planets and natal_points to keep compute fast. Omitting both sends all outer planets against all core natal positions — a much heavier computation.

ASPECT ANGLES: Use aspect_angle to search for specific aspects: 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine. Example: Saturn Return → transiting_planets=['saturn'], natal_points=['saturn'], aspect_angle=0 Example: Uranus Opposition → transiting_planets=['uranus'], natal_points=['uranus'], aspect_angle=180 Example: Outer planets to natal Sun/Moon → transiting_planets=['saturn','uranus','neptune','pluto'], natal_points=['sun','moon']

DEFAULT natal_points (when omitted): sun, moon, mercury, venus, mars, jupiter, saturn. SEARCH RANGE LIMITS: Explorer/PayG tier → 1 year max; Pro → 5 years; Startup → 10 years. CREDIT COST: 6 credits per call.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYesEnd of the transit search window. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC.
start_dateYesStart of the transit search window. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC.
aspect_angleNoAspect angle in degrees to apply to each natal longitude. 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine. The effective search target becomes (natal_longitude + aspect_angle) mod 360.
natal_pointsNoNatal point IDs whose exact longitudes should be targeted. E.g. ['sun', 'moon', 'asc', 'mc', 'saturn', 'chiron']. Omit for all core points.
natal_datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
natal_latitudeYesLatitude of birth location in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory.
natal_timezoneNoIANA timezone for the natal birth location (e.g. `America/Chicago`); required when the datetime is naive.
natal_longitudeYesLongitude of birth location in decimal degrees.
transiting_planetsNoList of transiting planet IDs to search. E.g. ['saturn', 'jupiter', 'uranus', 'pluto', 'chiron']. Omit to search all outer planets.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark it as read-only and idempotent. The description adds valuable behavioral context beyond that: credit cost (6 credits), tier-based search range limits (1/5/10 years), and the heavy-computation warning when omitting both planet lists. These are exactly the kinds of behavioral traits that help an agent.

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?

The description is well-organized with clear sections (EFFICIENCY TIP, ASPECT ANGLES, DEFAULT, SEARCH RANGE LIMITS, CREDIT COST). Every sentence earns its place; it is information-dense but never redundant. The first sentence immediately states purpose, front-loading key information.

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 complex tool with 9 parameters and no output schema, the description covers essential contexts: default behavior, compute cost, range limits, and examples. The only gap is a more explicit description of the return value structure, but the core usage requirements are fully addressed.

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%, but the description enriches parameters: it lists explicit default natal_points, explains aspect_angle semantics with examples, and gives parameter-combination patterns. This adds meaning beyond the schema's field descriptions, though the schema already covers the basics.

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 resource: 'Search for astrological transit events affecting a natal chart over a date range. Returns exact transit moments — when transiting planets form specified aspects to natal planet positions.' This clearly distinguishes it from sibling tools like synastry or natal chart computations.

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?

Provides concrete usage guidance: an efficiency tip to always specify both transiting_planets and natal_points to avoid heavy computation, and examples for Saturn return, Uranus opposition, and outer-planet-to-Sun/Moon transits. It implies when to use the tool but does not explicitly name alternative tools or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_bazi_chartA
Read-onlyIdempotent
Inspect

Generate an interactive BaZi (四柱命盘 Four Pillars of Destiny) chart with clickable pillars.

Returns an embedded visual Four Pillars explorer showing the Year, Month, Day, and Hour pillars — each with its Heavenly Stem (天干) and Earthly Branch (地支), Ten God label, and element color — plus the Day Master identity and a Wu Xing (五行) element balance bar. Click any pillar for an instant interpretation of what it reveals about that life domain (Year = ancestry/early life, Month = parents/career, Day = self/spouse, Hour = children/later life).

CREDIT COST: 3 credits per call (1 base + 2 visual render).

Use this for a rich, interactive BaZi experience in MCP Apps-capable hosts (Claude Desktop). Falls back to a text summary in other hosts, so it is also the right call without a renderer. Deeper derivations (Ten Gods, element balance, luck pillars) and a plain non-visual pillars lookup have dedicated tools on the full surface (?profile=full).

ParametersJSON Schema
NameRequiredDescriptionDefault
dayNoBirth day of month (1–31).
hourNoBirth hour (0–23). Optional, defaults to 12 (noon). Chinese shí hours are 2-hour blocks — precision within a 2-hour window is sufficient.
yearNoGregorian birth year, e.g. 1987.
monthNoBirth month (1–12).
minuteNoBirth minute (0–59). Optional, defaults to 0. Only matters under true_solar_time or near a boundary.
datetimeNoAlternative to year/month/day: ISO 8601 datetime read as LOCAL wall-clock time at the birth place — BaZi pillars are local by definition, so a zone-less value is correct here and is NOT converted to UTC. If it carries a 'Z' or offset, also pass timezone.
latitudeNoBirth latitude, decimal degrees (north+).
timezoneNoIANA timezone name for the birth place, e.g. 'Asia/Shanghai'. Required to convert a zoned datetime back to local clock; also frames the year/month solar-term boundary.
longitudeNoBirth longitude, decimal degrees (east+).
day_boundaryNoDay-pillar cutover convention. Default zi_hour.
year_boundaryNoYear-pillar cutover convention. Default lichun.
true_solar_timeNoApply true solar time correction (needs latitude+longitude).

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the bar is lower, but the description adds substantial behavioral context: a credit cost of 3 credits per call, an interactive visual output with fallback to text in non-MCP hosts, and clickable pillar behavior with life-domain interpretations. No contradiction with annotations; instead, it enriches the safety profile with cost and rendering behavior.

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?

The description is front-loaded with the core action, then returns, then credit cost, then usage routing. Each sentence earns its place: the output details are concrete, the credit cost is a clearly scannable block, and the fallback/host guidance is actionable. There is no redundancy or filler despite the length.

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 12 parameters (0 required) and no output schema, the description compensates by thoroughly describing the output payload: four pillars, Heavenly Stems, Earthly Branches, Ten Gods, element colors, Day Master, Wu Xing balance bar, and click interpretations. It also addresses host-based rendering differences and credit pricing. The schema already covers edge-case parameter details, so nothing needed for correct invocation 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 baseline is 3 and the schema already documents all 12 parameters in detail. The tool description does not add parameter-level meaning beyond what the schema provides; it only references the hour default, which is already in the schema. The schema parameters carry the semantic weight here.

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 deliverable: 'Generate an interactive BaZi (四柱命盘 Four Pillars of Destiny) chart with clickable pillars.' It distinguishes this tool from siblings by emphasizing the interactive, visual nature and explicitly noting that deeper derivations and a plain non-visual lookup have separate tools. The purpose is unambiguous and clearly scoped.

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?

The description gives explicit when-to-use guidance: 'Use this for a rich, interactive BaZi experience in MCP Apps-capable hosts (Claude Desktop)' and states that it falls back to a text summary in other hosts, making it 'also the right call without a renderer.' It also names what it is not for by directing users to dedicated tools for deeper derivations and non-visual lookup on `?profile=full`. This is model-level routing clarity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_bi_wheelA
Read-onlyIdempotent
Inspect

Generate an interactive bi-wheel chart comparing two astrological chart positions.

CREDIT COST: 2 credits per call for most modes (1 per wheel computed); solar_return/lunar_return modes cost 6 (5 for the return + 1 for the natal wheel).

The inner wheel is always Person 1's natal chart. The outer ring depends on mode: • synastry — Person 2's natal chart (needs Person 2's own birthplace). • transit — Transiting planets for a given date. • progressed — Secondary progressed positions (person2_datetime = target date). • solar_return — Nearest solar return chart (person2_datetime = year to return for). • lunar_return — Nearest lunar return chart (person2_datetime = target month). • solar_arc — Solar arc directed positions (person2_datetime = target date). Cross-aspects are drawn as coloured dashed lines; click any planet, aspect line, or house cusp for interpretation. Prefer this whenever the user should SEE the comparison — it renders interactively in MCP Apps hosts and falls back to static SVG elsewhere. For raw synastry data without a visual, use ephemeris_synastry.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoChart comparison mode. Defaults to 'synastry'.
locationNoPerson 1 / Natal location. Prefer a plain place name like 'New York, NY' — resolved via the same lookup `location_search` uses; ambiguous names throw with a disambiguation hint. Supplied person1_latitude/person1_longitude win.
person1_nameNoDisplay name for Person 1 / Natal chart (e.g. 'Alice'). Used in the badge and summary.
person2_nameNoDisplay name for Person 2 (synastry mode). Used in the badge and summary.
person1_datetimeYesBirth datetime for Person 1 / Natal chart. ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
person1_latitudeNoBirth latitude for Person 1 (decimal degrees, positive = North). Optional if `location` is a place name — the resolver fills it in. Never recall coordinates from memory.
person1_timezoneNoIANA timezone for Person 1's birth location (e.g. `America/New_York`); required when the datetime is naive.
person2_datetimeYesDatetime for the outer wheel. Meaning depends on mode: synastry = Person 2 birth datetime; transit/progressed/solar_arc = target date; solar_return/lunar_return = any date within the target year/month. ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
person2_latitudeNoBirth latitude for Person 2. REQUIRED in synastry unless `person2_location` is given — never inferred from Person 1. Other modes default to Person 1's coords.
person2_locationNoPerson 2 / outer-chart place name, resolved like `location`. person2_latitude/person2_longitude win.
person2_timezoneNoIANA timezone for Person 2 / the outer chart (e.g. `America/Chicago`); required when the datetime is naive.
person1_longitudeNoBirth longitude for Person 1 (decimal degrees, positive = East). Optional if `location` is a place name.
person2_longitudeNoBirth longitude for Person 2. REQUIRED in synastry unless `person2_location` is given. Other modes default to Person 1's coords.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so no contradiction. The description adds valuable behavioral context beyond annotations: credit cost per mode, inner wheel always being Person 1's natal chart, mode-specific outer wheel meaning, cross-aspect rendering, and interactive-vs-static fallback behavior.

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?

The description is front-loaded with a one-sentence purpose, then organized into credit cost, mode list, behavioral details, and usage guidance. Every sentence adds value, and the structure makes the complex mode-dependent behavior scannable.

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 a 13-parameter, 6-mode tool with no output schema, the description is remarkably complete. It covers all modes, credit implications, coordinate defaults, rendering behavior, and the key sibling alternative. The schema handles individual parameter details, while the description provides the necessary mode-level context.

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. The description adds significant cross-parameter semantics by clarifying that person2_datetime's meaning depends on the mode (e.g., 'transit/progressed/solar_arc = target date; solar_return/lunar_return = any date within the target year/month') and which modes require Person 2's own birthplace. This goes beyond individual parameter descriptions.

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 resource: 'Generate an interactive bi-wheel chart comparing two astrological chart positions.' It clearly differentiates itself from siblings by naming the interactive/visual nature and explicitly contrasting with ephemeris_synastry for raw data without a visual.

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?

The description explicitly says 'Prefer this whenever the user should SEE the comparison' and names the alternative for raw synastry data: 'For raw synastry data without a visual, use ephemeris_synastry.' This gives clear when-to-use and when-not-to-use guidance relative to a sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_human_designA
Read-onlyIdempotent
Inspect

Generate an interactive Human Design Bodygraph with clickable centers, gates, and channels.

CREDIT COST: 4 credits where the bodygraph renders (2 for the chart + 2 for the visual), 2 in text-only hosts that skip the render. For chart data alone at 2 credits — including the activations, design, personality, strategy and variables this tool does not return — use human_design_chart.

Returns an embedded visual bodygraph explorer that lets you click any center or gate for instant Human Design interpretation. Shows defined/undefined centers, active gates, channels, Type, Profile, Authority, and Incarnation Cross. The chart is calculated using NASA JPL DE440 ephemerides for both Personality and Design positions. Use this instead of human_design_chart for a richer, interactive HD experience in MCP Apps-capable hosts (Claude Desktop). Falls back to a text summary in other hosts. Human Design was originated by Ra Uru Hu; OpenEphemeris is an independent calculation service, not affiliated with Jovian Archive.

ParametersJSON Schema
NameRequiredDescriptionDefault
datetimeYesISO 8601 birth datetime in UTC, e.g. '1990-04-15T19:30:00Z'. Human Design is time-sensitive — accuracy to the minute matters. Include 'Z' or a timezone offset.
latitudeNoBirth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in. Never recall coordinates from memory; either supply a place name or resolve with location_search first.
locationNoBirth location. Prefer a plain place name like 'New York, NY' — the server resolves it via the same lookup `location_search` uses (unambiguous names → coords + timezone; ambiguous names throw with a disambiguation hint). If neither location nor lat/lon is supplied the call is rejected — no more silent 0°N 0°E charts.
timezoneNoIANA timezone name for the birth location (e.g. 'America/New_York'). Highly recommended for accuracy if providing local birth time without a UTC offset. Enables correct UTC conversion for precise Personality and Design positions.
longitudeNoBirth longitude in decimal degrees (positive = East). Optional if `location` is a place name.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly and idempotent, and the description adds significant behavioral context: credit costs vary by host, it falls back to text in non-capable hosts, and it explicitly notes 'this tool does not return' activations, design, personality, strategy, and variables. It also discloses the calculation source and non-affiliation, going well beyond 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 description is front-loaded with purpose and then economically covers credits, alternatives, fallback behavior, and limitations. It is longer than average but every sentence carries useful information; the only slight excess is the historical attribution to Ra Uru Hu, though it adds credibility.

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 description is complete for a tool with no output schema: it explains what is returned (interactive bodygraph with clickable interpretations), what the chart shows, when it falls back to text, and how costs differ. It also clarifies what it does not return, helping the agent avoid incorrect expectations.

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% and the schema already provides rich per-parameter guidance (e.g., time-sensitivity, location resolution, coordinate rules). The tool description adds little parameter-specific meaning beyond mentioning JPL DE440 ephemerides and 'both Personality and Design positions,' which is useful but not necessary given the schema's thoroughness.

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 resource: 'Generate an interactive Human Design Bodygraph with clickable centers, gates, and channels.' It clearly distinguishes itself from sibling human_design_chart by emphasizing interactivity and richer visuals, making the tool's unique purpose unmistakable.

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?

Explicit guidance is provided: 'Use this instead of human_design_chart for a richer, interactive HD experience in MCP Apps-capable hosts' and 'Falls back to a text summary in other hosts.' It also names the alternative for chart data alone (human_design_chart), specifying exactly when each tool should be chosen.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_human_design_connectionA
Read-onlyIdempotent
Inspect

Compare two people's Human Design charts and classify every connected channel by HD connection theory.

CREDIT COST: 3 credits per call.

Classifications: electromagnetic (attraction), companionship (sameness), dominance (one defines), and compromise (friction). Returns an interactive two-person overlay bodygraph in MCP Apps-capable hosts, with a text summary fallback elsewhere. Premium (Pro tier). NASA JPL DE440 ephemerides. Human Design was originated by Ra Uru Hu; OpenEphemeris is an independent calculation service, not affiliated with Jovian Archive.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNoVisual theme for the overlay bodygraph. Set automatically by the embedded app to match the host; defaults to dark. You normally never need to pass this.
layoutNoOverlay composition. 'graph' (default) is the classic bodygraph rectangle with connected channels classified by connection type; 'mandala' nests the same overlay inside the concentric ring set the natal chart uses. Set by the in-iframe layout toggle, never by the model.
person_aYesFirst person's birth data.
person_bYesSecond person's birth data.

TDQS

A4.3/5.0
Behavior5/5

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

Discloses behaviors beyond annotations: 3-credit cost, Premium tier requirement, NASA JPL DE440 ephemerides, interactive bodygraph with text fallback, and OpenEphemeris affiliation disclaimer. These give the agent a clear picture of side effects (cost, host dependencies) and data source without contradicting the readOnly/idempotent 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?

Four focused sections: purpose, cost, classifications, return format, then additional context. Slightly verbose with ephemerides and origin details, but every sentence adds useful context and the purpose is front-loaded.

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?

This is a complex tool (nested params, enums, no output schema). The description covers return format with fallback ('interactive two-person overlay bodygraph... text summary fallback'), classification categories, cost, and data source. It stops short of describing exact text summary fields, but overall sufficiently complete.

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% and the schema itself provides rich descriptions (e.g., location resolution, theme default, layout behavior). The description adds no parameter-specific meaning beyond what the schema already contains, 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?

Description opens with 'Compare two people's Human Design charts and classify every connected channel by HD connection theory,' which is a specific verb+resource+scope. The annotation title adds 'Synastry' for further clarity. This clearly distinguishes it from single-chart tools like explore_human_design and explore_natal_chart.

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?

Provides clear usage context: comparing two charts for HD connection theory, with classifications listed and a note about premium tier. It implies this is for synastry vs single-chart tools. However, it does not explicitly name alternatives or state when not to use, leaving the distinction from ephemeris_synastry implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_human_design_transitA
Read-only
Inspect

Overlay the current (or a chosen) planetary transit on a person's natal Human Design bodygraph.

CREDIT COST: 3 credits per call.

Highlights the channels a transit temporarily COMPLETES with the natal chart and any centers it newly defines — the core of a Human Design transit reading. Returns an interactive overlay bodygraph in MCP Apps-capable hosts (Claude Desktop), with a text summary fallback elsewhere. Premium (Pro tier). Calculated with NASA JPL DE440 ephemerides. Human Design was originated by Ra Uru Hu; OpenEphemeris is an independent calculation service, not affiliated with Jovian Archive.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNoVisual theme for the overlay bodygraph. Set automatically by the embedded app to match the host; defaults to dark. You normally never need to pass this.
layoutNoOverlay composition. 'graph' (default) is the classic bodygraph rectangle with the transit's activated channels highlighted; 'mandala' nests the same overlay inside the concentric ring set the natal chart uses. Set by the in-iframe layout toggle, never by the model.
datetimeYesNatal birth datetime, ISO 8601 (e.g. '1990-04-15T19:30:00Z'). Include 'Z' or an offset, or supply timezone for local time. HD is time-sensitive to the minute.
latitudeNoNatal birth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in.
locationNoNatal birth location. Prefer a plain place name like 'New York, NY' — the server resolves it via the same lookup `location_search` uses (unambiguous names → coords + timezone; ambiguous names throw with a disambiguation hint). If neither location nor lat/lon is supplied the call is rejected — no silent 0°N 0°E charts.
timezoneNoIANA timezone for the birth location (e.g. 'America/New_York').
longitudeNoNatal birth longitude in decimal degrees (positive = East). Optional if `location` is a place name.
transit_datetimeNoTransit moment, ISO 8601; must include 'Z' or an offset. Defaults to now (UTC) when omitted.

TDQS

A3.9/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description discloses significant behavioral details: a 3-credit cost per call, premium tier status, return format differences between MCP Apps-capable hosts (interactive overlay) and fallback (text summary), use of NASA JPL DE440 ephemerides, and that the call is rejected if neither location nor lat/lon is supplied. These specifics go beyond the basic safety hints.

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 generally well-structured: a clear two-sentence core purpose, followed by bullet-like details on credits, output, tier, ephemeris source, and a disclaimer. The disclaimer about Ra Uru Hu and OpenEphemeris independence is not relevant to tool invocation and could be considered noise, but it does not significantly bloat the description.

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?

Despite lacking an output schema, the description tells the agent what to expect: an interactive overlay in MCP Apps-capable hosts or a text summary elsewhere. It also provides credit cost, location requirements, and ephemeris quality. Some edge behaviors (e.g., exact error handling for ambiguous locations) are only hinted at in the schema's location parameter, but overall it is fairly complete for a read-only tool.

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?

The input schema already provides 100% description coverage for all 8 parameters, so the baseline is 3. The description does add one extra semantic constraint—the call is rejected without location/lat-lon information—which is not reflected in the schema's required fields. However, it does not add per-parameter syntax or format details beyond what the schema already documents, so it stays at baseline.

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 states the tool's function with a specific verb ('Overlay') and resource ('planetary transit on a person's natal Human Design bodygraph'). It distinguishes itself from siblings like 'explore_human_design' (natal chart only) and 'ephemeris_transits' (raw transit data) by emphasizing the overlay and highlighting of completed channels/defined centers, which is the core of a transit reading.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The context is implied: it is for Human Design transit readings. However, there is no explicit guidance on when to choose this tool over alternatives such as 'ephemeris_transits' or 'explore_transit_timeline'. It doesn't mention when not to use it or name any alternative tools, so the agent must infer its applicability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_moon_phaseA
Read-onlyIdempotent
Inspect

Generate an interactive Moon Phase dial showing the current lunar illumination, phase name, zodiac sign, and void-of-course status as a beautiful circular visualization.

Returns a visual dial with: • SVG crescent Moon showing real-time illumination percentage • Phase name and waxing/waning indicator • Current Moon sign with degree • Void-of-Course status with timing details • Lunar age (days in the synodic cycle) • Upcoming New Moon and Full Moon dates

CREDIT COST: 3 credits per call (phase + void-of-course + aspects, 1 each).

Use this instead of ephemeris_moon_phase for a rich, interactive lunar phase experience in MCP Apps-capable hosts (Claude Desktop). Falls back to a text summary in other hosts.

ParametersJSON Schema
NameRequiredDescriptionDefault
datetimeNoISO 8601 datetime to query, stating its zone ('2026-03-20T12:00:00Z'), or a local time together with timezone. If omitted, returns the current live moon phase (UTC now).
latitudeNoObserver latitude (optional, used for local void-of-course calculations).
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
longitudeNoObserver longitude (optional, used for local void-of-course calculations).

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, and non-destructive, but the description adds credit cost (3 credits with breakdown), real-time update behavior, and the fallback from an interactive dial to a text summary. These operational details go beyond what the annotations alone provide.

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?

The description is front-loaded with the core purpose and uses a bulleted list to keep details scannable. Every element—credit cost, sibling differentiation, fallback behavior—adds value, and there is no filler.

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?

Given there is no output schema, the bullet list reasonably describes the returned dial contents. However, the credit cost mentions 'aspects' but the output list doesn't explicitly include an aspects element, and the 'text summary' fallback is underspecified, keeping it from a perfect score.

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?

The input schema has 100% coverage for all four parameters, with each parameter already described in detail. The tool description adds no parameter-specific meaning beyond the schema, so the baseline score of 3 is appropriate.

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 ('Generate an interactive Moon Phase dial') and names the exact resource: current lunar illumination, phase name, zodiac sign, and void-of-course status. It clearly distinguishes this from the sibling ephemeris_moon_phase by positioning it as the rich interactive variant.

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 explicitly says 'Use this instead of ephemeris_moon_phase for a rich, interactive lunar phase experience in MCP Apps-capable hosts (Claude Desktop)' and notes the fallback behavior in other hosts. This gives the agent a clear decision rule for choosing this tool over the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_natal_chartA
Read-onlyIdempotent
Inspect

PRIMARY tool for any natal/birth-chart request. Renders an interactive, clickable chart wheel — prefer this over ephemeris_natal_chart when the user wants to SEE a chart. Returns an embedded visual chart explorer that lets you click any planet, house, or aspect line for instant astrological interpretation.

CREDIT COST: 1 credit per call.

Supports house system switching (Placidus, Whole Sign, Equal, Koch). The chart is computed using NASA JPL DE440 ephemerides for sub-arcsecond precision. Renders interactively in MCP Apps-capable hosts (Claude Desktop) and falls back to static SVG in other hosts.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodiesNoOptional list of body names to include. Defaults to 13 classical bodies (Sun through Pluto + Chiron + Nodes). Use 'all' as a single item to include every available body (Lilith, Ceres, Juno, Vesta, Pallas, Vertex, etc.). Example: ['sun','moon','lilith','vertex'].
datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
latitudeNoBirth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in. If you supply lat/lon directly, resolve them with location_search first; never recall coordinates from memory.
locationNoBirth location. Prefer a plain place name like 'New York, NY' — the server resolves it via the same lookup `location_search` uses (unambiguous names → coords + timezone; ambiguous names throw with a disambiguation hint). If you already have coords, either omit this or use it as a display caption; supplied coords always win.
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
longitudeNoBirth longitude in decimal degrees (positive = East). Optional if `location` is a place name.
house_systemNoHouse system to use (default: placidus).

TDQS

A4.7/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond annotations: credit cost, house system switching, NASA JPL DE440 ephemerides precision, and rendering behavior in different hosts (interactive vs static SVG). These details enrich the agent's understanding without contradicting the read-only and idempotent hints.

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?

The description is concise and well-structured, opening with the primary purpose and then providing differentiators, cost, and technical details. Every sentence earns its place with no redundant fluff.

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 a visual chart tool with no output schema, the description adequately explains what is returned (interactive chart explorer, clickable elements) and how it behaves in different hosts. Combined with rich schema descriptions and annotations, the agent has complete information to select and invoke the tool.

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% with detailed parameter descriptions (e.g., datetime timezone rules, location resolution). The description adds only marginal parameter context, such as mentioning house system switching. Since the schema already documents all parameters thoroughly, baseline 3 is appropriate.

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 explicitly states it is the PRIMARY tool for natal/birth-chart requests and renders an interactive chart wheel. It also distinguishes itself from sibling ephemeris_natal_chart by stating 'prefer this over ephemeris_natal_chart when the user wants to SEE a chart.' This gives a specific verb, resource, and clear differentiation.

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?

The description provides explicit when-to-use guidance: 'prefer this over ephemeris_natal_chart when the user wants to SEE a chart.' It also mentions host fallback behavior and names an alternative tool. This clearly signals when to use this tool versus the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_transit_timelineA
Read-onlyIdempotent
Inspect

Generate an interactive Transit Timeline — a vertical, date-ordered list of upcoming transit hits (transiting planets forming a chosen aspect to natal chart positions) over a date range.

Returns a visual timeline with: • Exact crossing dates grouped by month • Transiting planet glyph, the natal point it contacts, and the aspect • Zodiac position of each crossing and retrograde markers • Click any transit for a focused interpretation

ASPECT ANGLES: 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine, 60 = sextile. EFFICIENCY: specify transiting_planets and natal_points to keep compute fast. DEFAULT natal_points: sun, moon, mercury, venus, mars, jupiter, saturn. SEARCH RANGE LIMITS: Explorer/PayG → 1 year; Pro → 5 years; Startup → 10 years.

CREDIT COST: 6 credits per call (natal chart + predictive transit search).

Use this for a rich, interactive transit-forecast experience in MCP Apps-capable hosts (Claude Desktop). Falls back to a text summary in other hosts.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYesEnd of the transit search window. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC.
start_dateYesStart of the transit search window. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC.
aspect_angleNoAspect angle in degrees. 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine, 60 = sextile.
natal_pointsNoNatal point IDs to target, e.g. ['sun','moon','asc','mc','saturn']. Omit for the 7 classical bodies.
natal_datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
natal_latitudeYesLatitude of birth location in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory.
natal_timezoneNoIANA timezone for the natal birth location (e.g. `America/Chicago`); required when the datetime is naive.
natal_longitudeYesLongitude of birth location in decimal degrees.
transiting_planetsNoTransiting planet IDs to search, e.g. ['saturn','jupiter','uranus','pluto','chiron']. Omit to search all outer planets.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial behavioral context: exact return components, credit cost (6 credits per call), search range limits per plan, default natal points, and fallback behavior in non-MCP hosts. This exceeds annotation coverage and helps the agent understand side effects and constraints.

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 lengthy but well-structured with a summary, bullet list, and labeled sections for aspects, efficiency, limits, and credit cost. All content is actionable, though some details could be tightened without losing key information.

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 a complex tool with no output schema, the description covers inputs, defaults, search limits, credit cost, return content, and host-specific behavior. This is sufficient for an agent to select and invoke the tool correctly.

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. The description adds default natal_points, aspect-angle mappings (0, 180, 90, 120, 60), and performance guidance to specify transiting_planets/natal_points, supplementing the schema's parameter descriptions.

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 'Generate an interactive Transit Timeline' and clearly specifies a date-ordered list of transit hits with aspect and natal positions. It distinguishes itself from sibling tools like ephemeris_transits by emphasizing the interactive, visual experience and MCP Apps-capable host support.

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?

Explicitly states 'Use this for a rich, interactive transit-forecast experience in MCP Apps-capable hosts' and notes the fallback to a text summary. It also provides efficiency guidance (specify transiting_planets/natal_points) and plan-based search limits, but it does not name alternative tools or conditions to prefer them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_vedic_chartA
Read-onlyIdempotent
Inspect

Generate an interactive Vedic (Jyotish) birth chart as a South Indian fixed-sign Rashi grid, with clickable rashis showing sidereal placements, nakshatras, and the Lagna.

CREDIT COST: 3 credits per call (chart calculation + visual render).

Returns an embedded visual explorer that lets you click any rashi cell for its themes and any planets placed there. Shows sidereal (Lahiri by default) planet placements, nakshatra with pada, navamsa, and the Lagna (Ascendant) rashi. Uses NASA JPL DE440 ephemerides. Use this for a rich, interactive Jyotish experience in MCP Apps-capable hosts (Claude Desktop). Falls back to a text summary in other hosts.

ParametersJSON Schema
NameRequiredDescriptionDefault
ayanamsaNoAyanamsa system for sidereal conversion. Defaults to 'lahiri'.
datetimeYesISO 8601 birth datetime in UTC, e.g. '1990-06-15T14:30:00Z'. Include 'Z' or a timezone offset.
latitudeNoBirth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in. Never recall coordinates from memory; either supply a place name or resolve with location_search first.
locationNoBirth location. Prefer a plain place name like 'Mumbai, India' — the server resolves it via the same lookup `location_search` uses (unambiguous names → coords + timezone; ambiguous names throw with a disambiguation hint). Supplied coords always win.
timezoneNoIANA timezone name for the birth location (e.g. 'Asia/Kolkata'). Recommended for accuracy if providing local birth time without a UTC offset.
longitudeNoBirth longitude in decimal degrees (positive = East). Optional if `location` is a place name.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare safe read-only and idempotent hints, lowering the bar. The description adds credit cost, interactive click behavior, fallback to text in unsupported hosts, and use of NASA JPL DE440 ephemerides — rich behavioral detail beyond annotations. No contradictions.

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?

The description is well-structured and front-loaded: main purpose, credit cost, features, technical basis, usage context, and fallback in clear separate pieces. Every sentence earns its place with no redundancy.

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 complex tool with no output schema, the description covers the key return type (interactive visual explorer), fallback behavior, and precision details. It lacks explicit error handling or exact return structure, but given the rich schema and annotations, it is sufficiently complete.

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?

All six parameters have comprehensive descriptions in the schema (100% coverage), so the baseline is 3. The description does not add parameter-specific semantics beyond mentioning 'Lahiri by default', which duplicates the schema.

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 states it generates an interactive Vedic (Jyotish) birth chart as a South Indian fixed-sign Rashi grid, with clickable rashis. This specific verb+resource+format distinguishes it from siblings like vedic_chart and explore_natal_chart.

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?

Provides clear context: use for a rich, interactive Jyotish experience in MCP Apps-capable hosts, with fallback to text in other hosts. However, it does not explicitly compare to alternatives like vedic_chart or ephemeris_natal_chart, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

human_design_chartA
Read-onlyIdempotent
Inspect

Calculate a full Human Design I Ching hexagram chart from birth data. Returns the person's Type (Generator, Manifesting Generator, Projector, Manifestor, Reflector), Strategy, Authority, Profile (e.g. 1/3, 2/4), defined and undefined Centers, activated Gates and Channels, Incarnation Cross, and both Personality (conscious) and Design (unconscious) planetary positions.

Returns raw JSON. For a user-facing interactive bodygraph, use explore_human_design instead.

CREDIT COST: 2 credits per call.

Human Design uses two calculation moments: the birth time (Personality) and ~88° of Sun motion before birth (~3 months prior, the Design calculation). The API handles this automatically.

The datetime must state its zone — pass an offset/'Z', or pass local time plus timezone. A zone-less datetime is rejected rather than assumed to be UTC: Human Design is minute-sensitive, and an hour of error changes the Profile and the Design Sun line.

EXAMPLE (local birth time + zone): someone born 15 April 1990 at 14:30 in Chicago: datetime='1990-04-15T14:30:00', timezone='America/Chicago', latitude=41.8781, longitude=-87.6298 EXAMPLE (already in UTC): datetime='1990-04-15T19:30:00Z', latitude=41.8781, longitude=-87.6298

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format. 'llm' returns compact array projection for token efficiency (available on all tiers). 'json' returns verbose full output.
datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
latitudeNoLatitude of birth location in decimal degrees (positive = North). Resolve from a place name with location_search; never recall coordinates from memory.
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
longitudeNoLongitude of birth location in decimal degrees (positive = East).
visual_configNoOptional rendering preferences (only used when include_visual=true).
include_visualNoWhen true, renders the Human Design bodygraph as an SVG and embeds it in the response. The bodygraph image will display in the conversation alongside the data. Costs 2 additional credits on top of the base call cost.

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, but the description adds substantial behavioral context: it returns raw JSON, costs 2 credits per call (plus 2 more for visuals), rejects zone-less datetimes rather than assuming UTC because Human Design is minute-sensitive, and explicitly notes that the API handles the ~88° Design calculation automatically. These details go well beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place. It opens with the core purpose and outputs, then in a tight sequence covers the raw JSON format, the alternative tool, credit cost, the two-calculation-moment domain concept, the timezone rule with reasoning, and two concrete examples. There is no filler or repetition; the structure is front-loaded and logical.

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 a tool with no output schema, the description compensates by listing all major output categories. It covers inputs (including the timezone requirement and coordinate resolution), behavior (automatic design calculation, rejection of invalid datetimes), cost, and alternatives. It is complete for the complexity of a Human Design calculation tool, leaving no critical gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description enriches parameters with crucial context: it explains why the timezone is required (an hour of error changes the Profile and Design Sun line), provides two full usage examples (one with local time + timezone, one with Z suffix), and instructs that latitude/longitude must be resolved via location_search, never recalled from memory. This adds meaning beyond the schema's bare descriptions.

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 states the tool 'Calculate a full Human Design I Ching hexagram chart from birth data' and enumerates the exact outputs (Type, Strategy, Authority, Profile, Centers, Gates, Channels, Incarnation Cross, planetary positions). It also distinguishes itself from the sibling 'explore_human_design' by noting that alternative is for interactive bodygraphs. This is a specific, differentiated purpose.

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?

The description explicitly says to use 'explore_human_design' instead for a user-facing interactive bodygraph, providing a direct alternative. It also gives concrete guidance on when to use timezone vs. UTC, warns against recalling coordinates from memory (use location_search), and explains the automatic handling of the two calculation moments. This is clear usage context with exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timezone_resolveA
Read-onlyIdempotent
Inspect

Resolve the IANA timezone for a latitude/longitude pair. Use when you have coordinates but need the timezone to interpret a local birth time. Pass date to also get the historically-correct UTC offset that applied on that date. CREDIT COST: 1 credit per call. If you are starting from a place name rather than coordinates, use location_search instead — it returns the timezone too, in the same single call.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoOptional birth/event date 'YYYY-MM-DD'. Adds utcOffsetAtDate / utcOffsetMinutes / isDst / tzConfidence. Post-1970 resolves locally (free); pre-1970 consults the API's historical correction overlay (1 extra credit).
latitudeYes
longitudeYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to restate safety. It adds valuable behavioral context: the date parameter triggers historically-correct UTC offset calculation, and the credit cost is disclosed. This goes beyond the annotation baseline, though it stops short of describing exact response structure.

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?

Four sentences, each earning its place: purpose, usage, date behavior, credit cost, and alternative tool. No filler or redundancy. The most important information (what it does and when to use) is front-loaded.

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?

With no output schema, the description doesn't detail the return format, but the tool's complexity is low and annotations cover safety. It addresses purpose, usage, alternate tool, credit, and date-specific behavior. The only minor gap is not mentioning response fields (e.g., timezone name), but this is acceptable given the simplicity.

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 only 33% (date is documented in schema, latitude/longitude are bare numbers). The description compensates by explaining that passing the date yields a historically-correct UTC offset, which enriches the date parameter's meaning beyond the schema. Latitude/longitude are self-evident from the purpose, so no further elaboration is needed.

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 'Resolve the IANA timezone for a latitude/longitude pair' – a specific verb+resource that clearly defines the tool's purpose. It distinguishes itself from the sibling location_search by explicitly mentioning that location_search is the alternative when starting from a place name.

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?

Provides explicit usage context: 'Use when you have coordinates but need the timezone to interpret a local birth time.' It also names the alternative tool (location_search) and explains when to choose it instead, giving clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vedic_chartA
Read-onlyIdempotent
Inspect

Calculate a Vedic (Jyotish) natal chart with sidereal positions. Returns planet placements in rashis (sidereal signs), nakshatras with pada, navamsa placements, and bhavas (houses). Uses Whole Sign houses, sidereal zodiac with configurable ayanamsa.

CREDIT COST: 1 credit per call.

SUPPORTED AYANAMSA: lahiri (default), fagan_bradley, krishnamurti, raman, yukteshwar

EXAMPLE: Vedic chart for someone born Jan 15, 1990 at 8:30 AM UTC in Mumbai: datetime='1990-01-15T08:30:00Z', latitude=19.076, longitude=72.8777

ParametersJSON Schema
NameRequiredDescriptionDefault
ayanamsaNoAyanamsa system for sidereal conversion. Defaults to 'lahiri'.
datetimeYesISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`.
latitudeYesBirth latitude in decimal degrees (north positive). Resolve from a place name with location_search; never recall coordinates from memory.
timezoneNoIANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.
longitudeYesBirth longitude in decimal degrees (east positive).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond these: credit cost (1 per call), the list of supported ayanamsa values, and the default ayanamsa (lahiri). It also states the output contents, which helps set expectations. This is a solid contribution beyond 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 description is well-structured with clear sections (CREDIT COST, SUPPORTED AYANAMSA, EXAMPLE) and the core purpose is front-loaded. It is slightly longer than strictly necessary, but every section provides actionable information. The example is a nice touch without bloating the text.

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?

Even without an output schema, the description explains what the result will contain (planet placements, nakshatras, navamsa, bhavas) and the astrological framework (Whole Sign, sidereal, ayanamsa). The example provides a complete invocation. It doesn't cover edge cases or error handling, but for a read-only calculation tool with good annotations, this is reasonably complete.

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 the schema already documents all 5 parameters thoroughly. The description adds a concrete example with datetime, latitude, and longitude, which reinforces usage but doesn't reveal new semantics. The supported ayanamsa list is redundant given the schema enum. Per the rubric, baseline 3 is appropriate 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?

The description opens with a specific verb ('Calculate') and a clear resource ('Vedic (Jyotish) natal chart with sidereal positions'), then enumerates the output (rashis, nakshatras, navamsa, bhavas). It distinguishes from sibling tools by specifying sidereal/Vedic methodology and Whole Sign houses, making its purpose unambiguous.

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?

The description provides clear context: it is the tool for Vedic natal chart calculations with sidereal positions and configurable ayanamsa. It does not explicitly name alternatives or state when NOT to use it, but the context is sufficient to differentiate from Western chart tools or exploration variants. A bit more explicit sibling comparison would push to 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.9/5.0
Disambiguation4/5

Most tools have clearly distinct purposes, with detailed descriptions that explicitly differentiate similar-sounding tools (e.g., ephemeris_natal_chart vs explore_natal_chart, ephemeris_moon_phase vs explore_moon_phase vs ephemeris_next_lunar_phase). A few pairs like location_search and timezone_resolve overlap slightly, but the descriptions reduce ambiguity. Overall, an agent can generally tell tools apart, though the high number of tools adds cognitive load.

Naming Consistency2/5

Tool names follow several conflicting conventions: prefix-based (ephemeris_*, explore_*), verb_noun (location_search, timezone_resolve), noun phrases (account_usage, bazi_annual_pillar), and standalone names (vedic_chart, human_design_chart). There is no predictable verb_noun pattern like list_issues or create_issue. The inconsistent style makes it harder for an agent to infer tool behavior from the name alone.

Tool Count2/5

At 39 tools, the server far exceeds the calibration's 'too many' threshold of 25+. While the astrological domain is broad, the tool surface is exceptionally large and likely overwhelming for agents, especially with many similar explore_/ephemeris_ pairs. The count could be reduced by consolidating the explore_ variants or the various ephemeris_ raw-math tools.

Completeness5/5

The server provides thorough coverage of astrological calculations: natal charts, transits, synastry, Human Design, BaZi, Vedic, ACG, electional, moon phases, eclipses, planet positions, house cusps, and aspects. It also includes authentication, account usage, location/timezone resolution, and a generic API proxy (dev_read_api) to cover any edge case. There are no obvious missing operations that would cause agent failures.

Maintenance

ActivityActive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An AI-powered metaphysical Bazi calculator that provides accurate Chinese astrological chart calculations for personality analysis and destiny forecasting, addressing inaccuracies in existing AI fortune-telling tools.
    5
    286
    427
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables generation of detailed Chinese Ziwei Doushu (Purple Star) astrological charts with geographic location support and true solar time conversion. Provides tools for geocoding locations, converting Beijing time to apparent solar time, and creating comprehensive astrology readings based on birth information.
    16
    13
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Bazi MCP is an AI based Bazi calculator that provides accurate Bazi chart data for personality analysis and destiny prediction.
    3
    2
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    World's first Vedic Astrology MCP Server — connect Claude, ChatGPT, Cursor, or any AI to real Vedic astrology. Provides horoscope predictions, compatibility matching, numerology, planetary positions, yogas and house analysis via MCP.
    6

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/openephemeris/openephemeris-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server