Skip to main content
Glama

Server Details

Vedic astrology MCP server connecting any AI to real ephemeris calculations — natal charts, Vimshottari Dasha, yogas with BPHS citations, matchmaking with Rajju/Vedha vetoes, panchanga, KP system, Lal Kitab, and numerology. OAuth 2.1. Free sandbox tier.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.7/5 across 103 of 103 tools scored.

Server CoherenceB
Disambiguation2/5

Many tools serve overlapping purposes, such as multiple numerology tools (expression, soul urge, personality, balance, chaldean, lo shu) and multiple 'check' tools (mobile, vehicle, business) that all output harmony scores. While descriptions are detailed, the sheer volume and similarity make it hard for an agent to reliably select the correct tool without careful analysis.

Naming Consistency4/5

Tool names follow a mostly consistent pattern of asterwise_<verb>_<noun> (e.g., asterwise_get_natal_chart, asterwise_check_mobile_number). Verbs vary between 'get', 'check', 'draw', but the structure is predictable. There are no mixed conventions like camelCase, and the prefix is uniform.

Tool Count2/5

With 103 tools, the server is vastly over-scoped. While the domains (astrology, numerology, tarot, crystals, etc.) are diverse, many tools could be consolidated (e.g., multiple numerology tools, multiple transit-range tools). This excessive count overwhelms the agent and reduces coherence.

Completeness5/5

The tool surface is remarkably thorough, covering Vedic astrology (full chart, dashes, transits, compatibility, doshas, yogas), Western astrology (natal, returns, progressions, synastry, transits), numerology (core numbers, cycles, compatibility), tarot (cards, spreads, yes/no), crystals (database, recommendations), dream symbols, biorhythms, festivals, and more. Obvious gaps are rare.

Available Tools

103 tools
asterwise_check_mobile_numberA
Read-onlyIdempotent
Inspect

Digit-strips a mobile string (keeping country code digits), reduces it with the owner's name and birth date, and returns harmonic scoring plus interpretive copy.

SECTION: WHAT THIS TOOL COVERS Accepts formats like bare ten digits, plus-country-code with spaces or hyphens; all non-digits drop out before summation and country code digits count toward totals. Compares against owner numerology via upstream rules. Not for vehicle plates (asterwise_check_vehicle_number) or business names.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_numerology_profile — anchor Life Path before judging the line. AFTER: None.

SECTION: INPUT CONTRACT Formatting noise is ignored; only digits contribute. Country code digits are included in the reduction sum.

SECTION: OUTPUT CONTRACT data.input (string — submitted number) data.input_type (string — 'mobile') data.total (int — sum of all retained digits) data.single_digit (int — Pythagorean root, one through nine) data.is_master (bool — true when total reduces to eleven, twenty-two, or thirty-three) data.theme (string) data.favourable_for[] (string array) data.caution (string) data.harmony_score (int — one through ten)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Plus signs and punctuation do not affect digit extraction.

SECTION: DO NOT CONFUSE WITH asterwise_check_vehicle_number — plate digit rules, not SIM numbering. asterwise_get_business_name_analysis — letter Expression scan, not phone roots.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
nameYes
mobile_numberYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true. The description adds valuable context beyond this: it explains that formatting noise is ignored, only digits contribute, country code digits are included, and it's classified as FAST_LOOKUP. However, it doesn't detail rate limits or authentication needs, which would elevate it to a 5.

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 (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), front-loading key information. Every sentence adds value—no fluff or repetition—making it efficient and easy to parse.

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 complexity (numerology analysis with multiple inputs), the description is highly complete. It covers purpose, usage, input handling, output structure (detailed in OUTPUT CONTRACT), error handling, and sibling differentiation. With annotations and an output schema present, the description provides all necessary context without redundancy.

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?

With 0% schema description coverage, the description must compensate. It explains that mobile_number accepts various formats (bare ten digits, plus-country-code with spaces/hyphens), name and date are used for owner numerology comparison, and response_format controls output serialization. This adds meaningful semantics, though it doesn't specify date format or name handling details.

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: it digit-strips a mobile number, reduces it with owner's name and birth date, and returns harmonic scoring plus interpretive copy. It specifically distinguishes from sibling tools like asterwise_check_vehicle_number and asterwise_get_business_name_analysis, making the scope explicit.

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 guidance on when to use this tool versus alternatives (e.g., 'Not for vehicle plates' and references to specific sibling tools). It also recommends a prerequisite tool (asterwise_get_numerology_profile) and clarifies there's no follow-up tool, offering comprehensive usage context.

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

asterwise_check_sade_satiA
Read-onlyIdempotent
Inspect

Evaluates Saturn's seven-and-a-half-year Moon-sign cycle phases against natal data for the current day and returns intensity, upcoming cycles, and historical rows.

SECTION: WHAT THIS TOOL COVERS Sade Sati mechanics: natal Moon sign in English, three reference signs (rising/peak/setting), active flag, current phase label, intensity score/label, next occurrence metadata, all_periods[] timeline with nested phase objects, mitigation booleans. "Today" is implicit — no date parameter. Signs are English, not Sanskrit. It is not general Gochar (asterwise_get_gochar) or dasha overlay (asterwise_get_dasha_transits).

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — confirm Moon sign context. AFTER: asterwise_get_gochar — broader transit canvas if needed.

SECTION: INPUT CONTRACT No explicit query date — API pins to current day. BirthData global contract applies.

SECTION: OUTPUT CONTRACT data.natal_moon_sign (string — English, e.g. 'Libra') data.natal_moon_sign_index (int — 0–11) data.sade_sati_signs: rising (string) peak (string) setting (string) data.is_currently_active (bool) data.current_phase (string — 'rising', 'peak', 'setting', or null) data.current_phase_description (string or null) data.intensity_score (int — 0–10) data.intensity_label (string — 'low', 'moderate', or 'high') data.next_sade_sati: starts (string — YYYY-MM-DD) phase (string) years_away (float) data.all_periods[] — each: sade_sati_number (int) overall_start (string — YYYY-MM-DD) overall_end (string — YYYY-MM-DD) duration_years (float) phases: rising — { name, description, start, end, saturn_sign, intensity } peak — same shape setting — same shape data.mitigated_by_own_sign (bool) data.mitigated_by_exaltation (bool)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — BirthData Pydantic only.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — English sign names throughout — do not expect Sanskrit.

SECTION: DO NOT CONFUSE WITH asterwise_get_gochar — nine-planet daily scan including sade_sati_active flag but less Sade Sati detail than this tool. asterwise_get_transits — ingress/station feed, not Moon-focused Saturn phase model.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations are readOnly, openWorld, idempotent, non-destructive. Description adds behavioral context: no date parameter (API pins to current day), input contract (BirthData global), output contract with all fields, error contracts (INVALID_PARAMS, INTERNAL_ERROR), compute class (MEDIUM_COMPUTE). 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?

Description is long but well-organized into sections with clear headings. It is front-loaded with key purpose and usage. Some redundancy exists in output contract, but structure aids readability. Could be slightly more concise, but not overly verbose.

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 complexity (nested objects, output schema present), description is very complete: covers purpose, workflow, input/output contracts, error handling, compute class, and differentiation from siblings. Output schema is provided, so description adds necessary context without redundancy.

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 50% but birth object has detailed descriptions for each field. Description adds meaning beyond schema: explains response_format options (json for programmatic, markdown for human-readable) and notes that English sign names are used. Some parameter details are already in schema, but description provides additional context.

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 that the tool evaluates Saturn's 7.5-year Moon-sign cycle phases (Sade Sati) against natal data for the current day, returning intensity, upcoming cycles, and historical rows. It explicitly distinguishes from siblings like asterwise_get_gochar and asterwise_get_transits, ensuring no confusion.

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 workflow: BEFORE recommending asterwise_get_natal_chart for context and AFTER suggesting asterwise_get_gochar for broader transit. It also states what the tool covers and what it does not (not general Gochar or dasha overlay), giving clear usage context.

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

asterwise_check_vehicle_numberA
Read-onlyIdempotent
Inspect

Strips non-digits from a vehicle registration token, reduces the numeric run with owner name and birth date, and returns the same harmony schema as mobile analysis.

SECTION: WHAT THIS TOOL COVERS Handles Indian pattern plates (e.g. MH01AB1234) and international variants; only digits feed totals. Produces vehicle-specific input_type. Does not analyse phone numbers (asterwise_check_mobile_number) or business names.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_numerology_profile — owner baseline. AFTER: None.

SECTION: INPUT CONTRACT Letters and separators are ignored; reduction uses numeric digits only.

SECTION: OUTPUT CONTRACT data.input (string — submitted plate) data.input_type (string — 'vehicle') data.total (int — sum of numeric digits) data.single_digit (int — root) data.is_master (bool) data.theme (string) data.favourable_for[] (string array) data.caution (string) data.harmony_score (int — one through ten)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Alphabetic segments are decorative for numerology here — only digits matter.

SECTION: DO NOT CONFUSE WITH asterwise_check_mobile_number — phone digit rules including country codes. asterwise_get_business_name_analysis — evaluates business Expression, not registration digits.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
nameYes
vehicle_numberYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

The description adds valuable behavioral context beyond annotations. Annotations indicate read-only, open-world, idempotent, and non-destructive operations, but the description details specific processing rules (e.g., 'Letters and separators are ignored; reduction uses numeric digits only'), error handling (e.g., 'INVALID_PARAMS (local — caught before upstream call): None'), and performance class ('FAST_LOOKUP'). It does not contradict annotations, which already cover safety aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

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

The description is structured with clear sections (e.g., 'WHAT THIS TOOL COVERS', 'WORKFLOW'), which aids readability, but it is verbose with redundant details. For example, the 'OUTPUT CONTRACT' and 'RESPONSE FORMAT' sections could be more concise, and some information (like 'Edge cases') repeats earlier points. It is front-loaded with core functionality but includes excessive elaboration.

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 complexity (numerology analysis with multiple inputs and outputs), the description is highly complete. It covers purpose, usage guidelines, input processing rules, detailed output fields, response formats, error handling, performance, and sibling differentiation. With an output schema present, it appropriately focuses on behavioral context rather than repeating return values, making it sufficient for effective tool use.

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?

With 0% schema description coverage, the description compensates by explaining parameter semantics. It clarifies that 'vehicle_number' handles 'Indian pattern plates (e.g. MH01AB1234) and international variants' and that 'name' and 'date' are used with the vehicle number for 'reduction'. It also details 'response_format' options ('json' vs 'markdown') and their effects, adding meaning not 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 clearly states the tool's purpose: 'Strips non-digits from a vehicle registration token, reduces the numeric run with owner name and birth date, and returns the same harmony schema as mobile analysis.' It specifies the verb (strips, reduces, returns), resource (vehicle registration), and distinguishes it from sibling tools like 'asterwise_check_mobile_number' and 'asterwise_get_business_name_analysis' in the 'DO NOT CONFUSE WITH' section.

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 guidance on when to use this tool versus alternatives. It states 'Does not analyse phone numbers (asterwise_check_mobile_number) or business names' and includes a 'DO NOT CONFUSE WITH' section listing specific sibling tools. It also recommends a 'BEFORE' tool (asterwise_get_numerology_profile) for owner baseline, offering clear workflow context.

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

asterwise_draw_tarot_cardsA
Read-only
Inspect

Draws N unique random cards from the 78-card deck using cryptographic randomness (Python secrets.SystemRandom). Every call is independent — there is no session state.

SECTION: WHAT THIS TOOL COVERS Random card selection for open readings, single-card daily pulls, or custom spread layouts. Uniqueness is guaranteed within a single draw — the same card cannot appear twice in one draw. The active_meaning field is pre-computed per orientation so callers do not need to branch on is_reversed.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: None — interpret drawn cards using their active_meaning and active_keywords fields.

SECTION: INPUT CONTRACT count (int 1–78, default 1) — Number of unique cards to draw. Example: 1 (daily pull), 3 (simple reading), 10 (Celtic Cross), 78 (full deck shuffle). Values outside 1–78 are rejected locally with MCP INVALID_PARAMS. allow_reversed (bool, default false) — When true, each drawn card independently has a 50% chance of reversal (cryptographically random, not seeded).

SECTION: OUTPUT CONTRACT data.cards[] — array of count objects, each: card — full card object (same shape as asterwise_get_tarot_card) is_reversed (bool) active_meaning (string — orientation-appropriate interpretation) active_keywords[] (string array) position (null — no position for free draws; use spread endpoints for positional reads) position_meaning (null) data.count (int — echoed) data.allow_reversed (bool — echoed)

SECTION: RESPONSE FORMAT response_format=json — structured draw result. response_format=markdown — human-readable card report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS FAST_LOOKUP — cryptographic randomness, no ephemeris.

SECTION: ERROR CONTRACT INVALID_PARAMS (local): — count < 1 or count > 78 → MCP INVALID_PARAMS immediately. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_tarot_card_of_the_day — deterministic daily card, same for all callers. asterwise_get_tarot_three_card_spread — positional read with named positions and meanings. asterwise_get_tarot_celtic_cross — 10-card positional spread.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
allow_reversedNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

The description adds significant behavioral context beyond annotations: it discloses the use of cryptographic randomness (Python secrets.SystemRandom), independence of calls (no session state), uniqueness guarantee within a draw, and pre-computation of active_meaning. Annotations already indicate readOnlyHint=true, which is consistent, and the description adds 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.

Conciseness4/5

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

The description is long but well-structured with clear section headings (SECTION: WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), making it easy to navigate. While concise overall, a few sentences could be trimmed, but the structure justifies 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?

The description is extremely thorough for a tool with 3 parameters and an output schema. It covers input constraints, output contract (with field descriptions), response format options, compute class, error contract, and disambiguation from three sibling tools. No gaps are evident.

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?

With 0% schema description coverage, the 'INPUT CONTRACT' section fully compensates by explaining each parameter in detail, including valid ranges, defaults, examples, and error handling. For instance, count is described with examples like '1 (daily pull), 3...', and allow_reversed is explained with its probabilistic behavior. This adds substantial meaning beyond the bare 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 explicitly states 'Draws N unique random cards from the 78-card deck using cryptographic randomness', providing a clear verb, resource, and distinguishing characteristic. The 'WHAT THIS TOOL COVERS' section further clarifies use cases, and the disambiguation section explicitly differentiates from sibling tools.

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

Usage Guidelines5/5

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

The description includes a 'WORKFLOW' section stating 'BEFORE: None — standalone' and 'AFTER: None — interpret drawn cards', and a dedicated 'DO NOT CONFUSE WITH' section listing three sibling tools with clear explanations of when to use each alternative instead. This provides explicit 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.

asterwise_get_angel_numberA
Read-onlyIdempotent
Inspect

Lookup the meaning of a specific angel number by its sequence. Supported: 000, 111–999 (single repeating digit), 911, 1010, 1111, 1122, 1212, 1234, 2222–9999 (double repeating digit).

SECTION: WHAT THIS TOOL COVERS Returns the theme, primary message, actionable guidance, and associated life areas for a specific angel number sequence. Each sequence carries distinct meaning in modern numerological tradition. 111 = manifestation portal. 444 = angelic protection. 999 = cycle completion. 1111 = awakening gateway. 555 = transformation in progress. Pass the number as a string exactly as it appears (e.g. '444' not 444).

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: None.

SECTION: INPUT CONTRACT number: string — the angel number sequence to look up. Examples: '111', '444', '1111', '911'.

SECTION: OUTPUT CONTRACT data.number (string) data.theme (string) data.message (string) data.guidance (string) data.areas[] (string array)

SECTION: RESPONSE FORMAT response_format=json — structured JSON. response_format=markdown — human-readable. Both return identical data.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (upstream): Unsupported number → 404, surfaces as MCP INTERNAL_ERROR. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_angel_number_today — today's collective daily angel number. asterwise_get_angel_number_personal — personal angel number from birth date. asterwise_get_number_meaning — Pythagorean numerology meaning for 1–33; different tradition.

ParametersJSON Schema
NameRequiredDescriptionDefault
numberYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Description adds significant behavioral detail beyond annotations: specifies return fields (theme, message, guidance, areas), error handling, input format requirements, and even notes the numerological tradition. Annotations already indicate readOnly, idempotent, non-destructive, and description aligns and complements.

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?

Description is well-structured into labeled sections and front-loaded with purpose. Some sections (e.g., COMPUTE CLASS, WORKFLOW) are minimally useful, adding slight verbosity, but overall efficient for the information 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?

Tool has 2 parameters, rich output schema, and annotations; description covers everything needed: supported numbers, output structure, error contracts, and disambiguation. Agent can fully understand when and how to invoke.

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 has 0% description coverage, so description compensates fully: explains 'number' parameter with examples and case-sensitivity, and explains 'response_format' enum values with clarity on output differences.

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 the tool looks up meaning of a specific angel number by sequence, lists supported numbers (e.g., 111, 444), and distinguishes from sibling tools in a dedicated section.

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?

Description includes a 'DO NOT CONFUSE WITH' section that explicitly contrasts three sibling tools, explaining when to use each. Workflow sections indicate standalone operation, but lacks explicit '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.

asterwise_get_angel_number_personalA
Read-onlyIdempotent
Inspect

Computes a personal angel number from a birth date using the Pythagorean Life Path as the base. Life Path 1-9 maps to the triple sequence (LP 4 → 444). Master numbers 11, 22, 33 map to 1111, 2222, 3333 respectively.

SECTION: WHAT THIS TOOL COVERS The personal angel number is the individual's primary energetic signature in angel number tradition. Derived using the digit-fusing Life Path method (same as asterwise_get_numerology_profile): all digits of the birth date are summed and reduced to a single digit or master number, then mapped to the corresponding triple or quadruple sequence. Returns the Life Path number, the angel sequence, and the full angel number interpretation.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_numerology_profile — confirm Life Path before calling. AFTER: None.

SECTION: INPUT CONTRACT date: Birth date in YYYY-MM-DD format. Example: '1994-03-31' name (optional): Person's name for personalisation.

SECTION: OUTPUT CONTRACT data.birth_date (string) data.life_path (int — 1-9 or master 11/22/33) data.angel_number (string — e.g. '333' for LP 3) data.number (string) data.theme (string) data.message (string) data.guidance (string) data.areas[] (string array) data.name (string or null — if provided)

SECTION: RESPONSE FORMAT response_format=json — structured JSON. response_format=markdown — human-readable. Both return identical data.

SECTION: COMPUTE CLASS FAST_LOOKUP — pure digit math, no ephemeris.

SECTION: ERROR CONTRACT INVALID_PARAMS (upstream): Invalid date format → 422. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_angel_number_today — collective daily number from today's date, not birth date. asterwise_get_numerology_profile — full Pythagorean profile; this tool extracts only the Life Path → angel sequence mapping.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
nameNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds useful behavioral context: it is a FAST_LOOKUP (pure digit math, no ephemeris), provides error contracts (INVALID_PARAMS, INTERNAL_ERROR), and details output fields. 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 well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, OUTPUT CONTRACT, etc.). It is somewhat lengthy but each section serves a purpose. Could be slightly more concise, but it is well-organized.

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 complexity, the description covers all necessary aspects: purpose, workflow, input/output contracts with field details, error handling, compute class, and differentiation from siblings. The output schema is described in detail, so no gaps remain.

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 0%, so the description carries the full burden. It explains the 'date' parameter format with an example, the optional 'name' for personalization, and the 'response_format' enum with descriptions of both options. This adds substantial meaning 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?

The description clearly states the tool computes a personal angel number from a birth date using Pythagorean Life Path. It identifies the specific resource (birth date) and method (digit-fusing Life Path), and explicitly distinguishes from sibling tools like asterwise_get_angel_number_today and asterwise_get_numerology_profile.

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 guidance: it recommends calling asterwise_get_numerology_profile before, and includes a 'DO NOT CONFUSE WITH' section listing alternative tools with clear differentiation. This helps the agent decide when to use this tool versus siblings.

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

asterwise_get_angel_number_todayA
Read-onlyIdempotent
Inspect

Returns today's angel number computed from the current date. All digits of the date are summed and reduced to a single digit (1-9), then the triple sequence of that digit is returned (e.g. digit 9 → angel number 999).

SECTION: WHAT THIS TOOL COVERS Angel numbers are repeated digit sequences interpreted as synchronistic messages in modern spiritual practice. The daily angel number is the same for all callers on the same date — it is a collective daily energy, not personal. Returns the angel number sequence, its theme, primary message, actionable guidance, and associated life areas. Life Path 3 → 333 (creative expression). Today's digit is derived from the date's digit sum.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_angel_number_personal — for a personalised angel number from birth date.

SECTION: INPUT CONTRACT No required parameters — today's date is used automatically.

SECTION: OUTPUT CONTRACT data.date (string — YYYY-MM-DD) data.daily_digit (int — reduced digit 1-9) data.angel_number (string — e.g. '999') data.number (string — same as angel_number) data.theme (string) data.message (string) data.guidance (string) data.areas[] (string array)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON. response_format=markdown renders a human-readable report. Both return identical data.

SECTION: COMPUTE CLASS FAST_LOOKUP — pure math, no ephemeris.

SECTION: ERROR CONTRACT INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_angel_number — lookup for a specific number sequence by value. asterwise_get_angel_number_personal — personalised number from birth date Life Path.

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already indicate read-only and idempotent behavior. The description adds value by detailing the pure math computation, FAAP_LOOKUP compute class, and that no external data is needed, which goes 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.

Conciseness4/5

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

The description is well-structured with clear sections and front-loaded with purpose. However, it is somewhat lengthy with sections like 'COMPUTE CLASS' and 'ERROR CONTRACT', which are useful but could be more concise.

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 all necessary aspects: input contract (no parameters required beyond response_format), output contract with field names and types, error contract, workflow, and compute class. It is fully self-contained and complete.

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?

The only parameter (response_format) has an enum, and the description explains the difference between markdown and json, including that both return identical data and json is indented. Since schema coverage is 0%, the description fully compensates.

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 returns today's angel number computed from the current date, explains the computation method, and distinguishes from siblings asterwise_get_angel_number and asterwise_get_angel_number_personal.

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 a 'DO NOT CONFUSE WITH' section explicitly naming alternatives and their differences, plus a workflow section stating it is standalone and suggesting asterwise_get_angel_number_personal for a personalized query.

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

asterwise_get_ashtakavargaA
Read-onlyIdempotent
Inspect

Computes full Ashtakavarga bindu matrices, trikona and ekadhipatya reductions, and sarva totals from BirthData for transit support analysis.

SECTION: WHAT THIS TOOL COVERS Ashtakavarga: bhinna tables per contributing body (including Lagna), reduced variants, sarva and sarva_reduced arrays, after_trikona/after_ekadhipatya aggregates, birth_time_provided flag. Threshold lore: twenty-eight or more sarva bindus supports transits; below twenty-five implies friction. Not Shadbala totals (asterwise_get_chart_strength) though that bundle duplicates this data when needed.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — confirm chart before AVK study. AFTER: asterwise_get_gochar — uses AVK scores in transit rows.

SECTION: INPUT CONTRACT BirthData only.

SECTION: OUTPUT CONTRACT data.bhinna — keys Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Lagna → each twelve-element int array (rashi index 0=Mesha .. 11=Meena), bindu 0..8 data.bhinna_after_trikona — seven planets (no Lagna), same array shape data.bhinna_after_ekadhipatya — same after further reduction data.sarva[] — twelve ints data.sarva_reduced[] — twelve ints data.after_trikona[] — twelve ints data.after_ekadhipatya[] — twelve ints data.birth_time_provided (bool)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — BirthData Pydantic only.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Rahu/Ketu are not classical bhinna contributors per tradition.

SECTION: DO NOT CONFUSE WITH asterwise_get_chart_strength — primary payload is Shadbala/Vimshopaka, though it embeds AVK too. asterwise_get_gochar — applies AVK scores to transits rather than exposing raw matrices.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds compute class, error contracts, and edge cases (Rahu/Ketu not classical contributors), but 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.

Conciseness4/5

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

Well-structured with clear sections, but somewhat lengthy. Each section adds value; could be slightly more concise.

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 complexity, the description covers workflow, error handling, output structure, and edge cases comprehensively. Output schema exists but description still adds context.

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 50% due to nested 'birth' object. Description states 'BirthData only' but doesn't add details beyond schema. However, output contract is well-documented.

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 computes full Ashtakavarga bindu matrices, reductions, and totals from BirthData for transit support analysis. It distinguishes from sibling tools like asterwise_get_chart_strength and asterwise_get_gochar.

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 workflow section recommends asterwise_get_natal_chart before and asterwise_get_gochar after. Also includes 'DO NOT CONFUSE WITH' section listing alternatives.

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

asterwise_get_ashtottari_dashaA
Read-onlyIdempotent
Inspect

Computes the 108-year Ashtottari Dasha tree with configurable depth (levels 1–5) and returns periods under data.periods.root with DD/MM/YYYY dates.

SECTION: WHAT THIS TOOL COVERS Provides the Ashtottari planetary sequence (eight grahas, Ketu excluded) with the same levels semantics as Vimshottari: deeper levels nest sub-periods in sub[]. Classical texts restrict use when Rahu is in Kendra/Trikona from Lagna lord (not in Lagna); this tool always returns a full timeline with no niyama_met flag — apply rules externally. It is not Vimshottari, Yogini, or Char Dasha.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — chart context before choosing between Ashtottari and Vimshottari. AFTER: asterwise_get_dasha — optional Vimshottari comparison.

SECTION: INPUT CONTRACT levels: same as asterwise_get_dasha (1–5), enforced locally before the API call. Periods use data.periods.root[], not data.periods[]. Dates in periods are DD/MM/YYYY.

SECTION: OUTPUT CONTRACT data.periods.root[] — Mahadasha objects: planet (string) start_jd (float) end_jd (float) start_date (string — DD/MM/YYYY) end_date (string — DD/MM/YYYY) sub[] — Antardasha objects, same shape, nested per levels data.birth_time_provided (bool)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE (timing scales with levels similarly to asterwise_get_dasha)

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — levels < 1 or levels > 5 → MCP INVALID_PARAMS

INVALID_PARAMS (upstream): None — remaining validation is upstream.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — No classical applicability check in the response; full timeline is always returned.

SECTION: DO NOT CONFUSE WITH asterwise_get_dasha — standard 120-year Vimshottari with data.periods[], not Ashtottari or data.periods.root[]. asterwise_get_yogini_dasha — 36-year Yogini cycle with yogini names on each row.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
levelsNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

The description goes well beyond the annotations (readOnlyHint, idempotentHint, etc.) by detailing compute class (MEDIUM_COMPUTE), error contracts (INVALID_PARAMS, INTERNAL_ERROR), edge cases (no classical applicability check), and output format (DD/MM/YYYY dates, nested sub periods). 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 well-structured with clear sections (WORKFLOW, INPUT CONTRACT, OUTPUT CONTRACT, etc.) and starts with a concise summary. However, it is lengthy due to the comprehensive coverage. While every section serves a purpose, verbosity could be slightly reduced without losing clarity.

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 multiple parameters, output schema, and sibling comparisons, the description covers all necessary aspects: what the tool computes, output structure, workflow, error handling, compute class, and distinctions from similar tools. The presence of an output schema means return values need not be detailed, and the description still provides key structural info.

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 only 33%, requiring the description to compensate. The description adds context about the 'levels' parameter (range 1-5) and the date format, but does not elaborate on other parameters beyond what the schema already provides. It provides moderate additional value but does not fully compensate for the low coverage.

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 that the tool computes the 108-year Ashtottari Dasha tree with configurable depth and returns periods under data.periods.root. It explicitly distinguishes itself from Vimshottari, Yogini, and Char dasha, and contrasts with sibling tools like asterwise_get_dasha.

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 a dedicated WORKFLOW section recommending a prerequisite (asterwise_get_natal_chart) and optional follow-up (asterwise_get_dasha for comparison). The 'DO NOT CONFUSE WITH' section explicitly warns against using this tool for other dasha types, providing 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.

asterwise_get_ayanamshaA
Read-onlyIdempotent
Inspect

Returns ayanamsha values for all four supported systems (Lahiri, Raman, KP, Tropical) for a given date.

SECTION: WHAT THIS TOOL COVERS Ayanamsha is the angular difference between the tropical and sidereal zodiacs due to the precession of the equinoxes (~50.3" per year). Returns each system's value in decimal degrees and DMS (degrees/minutes/seconds) format, with a description of each system's tradition. Lahiri (Chitrapaksha) is the Indian government standard. KP ayanamsha is used for Krishnamurti Paddhati calculations. Computed using Swiss Ephemeris DE431.

SECTION: WORKFLOW BEFORE: None — standalone reference. AFTER: None.

SECTION: INPUT CONTRACT date (optional): Date in YYYY-MM-DD format. Defaults to today.

SECTION: OUTPUT CONTRACT data.date (string) data.ayanamsha{}: lahiri, raman, kp, tropical — each: value_decimal (float), degrees (int), minutes (int), seconds (float), dms (string e.g. '24° 13' 29.82"'), description (string) data.note (string — recommendation to use Lahiri for Jyotish)

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_natal_chart — applies Lahiri ayanamsha automatically to natal positions. asterwise_get_western_natal — uses tropical zodiac (ayanamsha = 0).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds context: compute class (FAST_LOOKUP), error contract (INTERNAL_ERROR), and output format details. 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 well-structured with clear sections, front-loads the purpose, and avoids unnecessary repetition. It is slightly verbose but each section adds relevant 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?

The description covers purpose, usage, output structure (including DMS format), error handling, and will not confuse with similar tools. The missing parameter semantics for 'response_format' is a minor gap, but overall the tool is well-documented.

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

Parameters2/5

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

Schema description coverage is 0%, meaning the description adds little to parameter understanding. It only mentions the 'date' parameter with format and default, but omits 'response_format' entirely. The schema has an enum for 'response_format' but the description does not explain it.

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

Purpose5/5

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

The first sentence clearly states the tool returns ayanamsha values for four specific systems for a given date. The 'DO NOT CONFUSE WITH' section explicitly differentiates it from sibling tools that apply ayanamsha automatically, making purpose distinct.

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 a 'DO NOT CONFUSE WITH' section naming two specific sibling alternatives and explaining their difference. The 'WORKFLOW' section states it is a standalone reference with no before/after steps, clarifying when to use it.

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

asterwise_get_balance_numberA
Read-onlyIdempotent
Inspect

Calculates the Balance number from the first letter of each name part, using Pythagorean values. A three-part name yields three initials summed and reduced. The Balance number describes how a person handles emotional crises and unresolved inner conflict.

SECTION: WHAT THIS TOOL COVERS The Balance number is consulted specifically in times of stress. It does not describe everyday personality but rather the instinctive crisis-management style. A person with Balance 1 instinctively becomes self-reliant under pressure; Balance 2 seeks partnership; Balance 8 attempts to assert control.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: None.

SECTION: INPUT CONTRACT name — Full legal name as used at birth. The first letter of each space-separated part contributes one value. Example: 'Arjun Mehta' → A(1) + M(4) = 5 Example: 'James Earl Carter' → J(1) + E(5) + C(3) = 9

SECTION: OUTPUT CONTRACT data.number (int — Balance number 1–9, or master 11/22) data.is_master_number (bool)

SECTION: RESPONSE FORMAT response_format=json — structured JSON. response_format=markdown — human-readable. Both modes return identical underlying data.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None. INTERNAL_ERROR: upstream failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_expression_number — uses all letters, not just initials. asterwise_get_karmic_lessons — identifies absent digits across all letters.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already indicate a safe, read-only, idempotent operation. The description adds valuable details: compute class (FAST_LOOKUP), error contracts, and the specific behavior of only using first letters. 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.

Conciseness4/5

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

The description is well-structured with clear section headers and front-loaded with the core purpose. While lengthy, each section adds necessary context for correct usage. Could be slightly more concise but not wasteful.

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 niche numerological purpose and absence of an output schema, the description covers all necessary aspects: purpose, input format with examples, output structure (data.number and data.is_master_number), response format options, compute class, error contract, and differentiation from related tools.

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?

The input schema has no parameter descriptions (0% coverage). The description fully compensates with detailed explanations for both parameters: 'name' is defined as full birth name with space-splitting rules and examples, and 'response_format' is explained with its two values and effect.

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 calculates the Balance number from first letters of name parts using Pythagorean values. It explicitly distinguishes itself from siblings like asterwise_get_expression_number and asterwise_get_karmic_lessons, providing 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 guidance on when to use ('consulted specifically in times of stress') and what it does not cover (everyday personality). It also directly contrasts with sibling tools in the 'DO NOT CONFUSE WITH' section.

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

asterwise_get_biorhythmA
Read-only
Inspect

Computes physical (23-day), emotional (28-day), and intellectual (33-day) biorhythm cycles for a birth date.

SECTION: WHAT THIS TOOL COVERS Returns cycle values (-1.0 to +1.0), percentage, phase label (High/Rising/Falling/Low), and critical day flags for each cycle. Critical days occur when a cycle crosses the zero line — these represent instability and vulnerability to poor judgment or accidents. Supports single-day snapshot (days=1) and multi-day range (up to 90 days). Formula: sin(2π × t / cycle_length) where t = days since birth. Also returns composite_score (average of three cycles) and has_critical_day flag. Biorhythm is a Western concept — Vedic equivalents are Tarabala and Chandrabala (use asterwise_get_nakshatra_prediction for the Vedic equivalent).

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_nakshatra_prediction — for the Vedic personalized daily prediction.

SECTION: INPUT CONTRACT birth_date (required): Date of birth in YYYY-MM-DD format. target_date (optional): Date to compute for. Defaults to today. days (optional int 1-90): Number of consecutive days. Default 1.

SECTION: OUTPUT CONTRACT (single day) data.birth_date, data.target_date, data.days_since_birth (int) data.cycles{}: physical, emotional, intellectual — each: value (float -1.0 to +1.0), percentage (float), phase (string), is_critical (bool), cycle_length_days (int), description (string) data.critical_today[] (string array of cycle names that are critical) data.has_critical_day (bool) data.composite_score (float — average of three cycles) data.note (string — explains Vedic equivalents)

SECTION: OUTPUT CONTRACT (date range, days > 1) data.birth_date, data.start_date, data.end_date, data.days data.daily[] — array of day objects each with date, cycles{}, critical[], composite_score

SECTION: COMPUTE CLASS FAST_LOOKUP — pure math, no ephemeris.

SECTION: ERROR CONTRACT INVALID_PARAMS (upstream): birth_date after target_date → INTERNAL_ERROR INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_nakshatra_prediction — Vedic Tarabala/Chandrabala daily prediction. asterwise_get_panchanga — Vedic daily panchanga elements, not biorhythm cycles.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
birth_dateYes
target_dateNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds extensive behavioral context: formula, critical day explanation, output structure (single and multi-day), error contracts, and compute class. 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 well-structured with clear sections and headings, making it easy to parse. However, it is relatively verbose; some redundancy exists (e.g., repeating cycle details in multiple sections). Still, every section adds value.

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 complexity (multiple cycles, date ranges, output structure, error handling, sibling differentiation), the description is remarkably complete. It covers all essential aspects despite the output schema existing, and even includes compute class and error contracts.

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 0%, so the description must fully explain parameters. It covers birth_date (format), target_date (default), and days (range/default) in the 'INPUT CONTRACT' section. However, the response_format parameter (enum: markdown/json) is not mentioned in the description, leaving a gap in 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 clearly states it computes three biorhythm cycles (physical, emotional, intellectual) for a birth date. It uses specific verbs and resources, and includes a 'DO NOT CONFUSE WITH' section that explicitly distinguishes it from sibling tools like asterwise_get_nakshatra_prediction and asterwise_get_panchanga.

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 BEFORE/AFTER workflow guidance and a dedicated 'DO NOT CONFUSE WITH' section naming two sibling tools with their purposes. This makes it clear when to use this tool versus alternatives, such as for Western biorhythm vs. Vedic Tarabala.

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

asterwise_get_business_name_analysisA
Read-onlyIdempotent
Inspect

Reduces a business name to Expression and root digits against a founder birth date and returns thematic suitability lists plus a harmony score.

SECTION: WHAT THIS TOOL COVERS Allows numerals and punctuation in the brand string — non-letters drop before letter-value reduction. Returns business-facing favourable domains, caution copy, and scoring. Not personal spelling optimisation (asterwise_get_name_correction) nor vehicle or phone checks.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_name_correction — if the entity is a person, not a brand.

SECTION: INPUT CONTRACT Special characters and digits are acceptable; reduction strips non-letters per upstream rules. No local validation on name or date.

SECTION: OUTPUT CONTRACT data.input (string — business name as submitted) data.input_type (string — 'business_name') data.expression_number (int — compound before reduction) data.single_digit (int — reduced root; equals expression_number for master totals eleven, twenty-two, thirty-three) data.is_master (bool) data.theme (string) data.favourable_for[] (string array — suitable domains) data.caution (string) data.harmony_score (int — one through ten)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Brand strings with emojis or digits still flow through upstream stripping rules.

SECTION: DO NOT CONFUSE WITH asterwise_get_name_correction — personal spelling alternatives, not corporate Expression scoring. asterwise_check_mobile_number — numeric line analysis, not brand letters.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
business_nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

The description adds valuable behavioral context beyond what annotations provide. While annotations indicate read-only, open-world, idempotent, and non-destructive operations, the description details computational characteristics (FAST_LOOKUP class), input handling (strips non-letters per upstream rules, accepts special characters/digits), error contracts (upstream validation, INTERNAL_ERROR for API failures), and edge cases (emojis/digits flow through stripping). It doesn't contradict the annotations, which already cover safety aspects.

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 (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), making it easy to navigate. While comprehensive, it could be slightly more concise—some sections like OUTPUT CONTRACT list all fields in detail, which might be redundant given the output schema exists. However, every section adds value, and the information is front-loaded with the core purpose first.

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 complexity (numerology analysis with multiple outputs) and the presence of annotations and an output schema, the description is exceptionally complete. It covers purpose, usage guidelines, behavioral details, parameter semantics, output structure, error handling, and sibling differentiation. The output schema likely documents return values, so the description appropriately focuses on explaining the analysis logic and context rather than repeating schema information.

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?

With 0% schema description coverage, the description fully compensates by explaining all three parameters' semantics. It clarifies that 'business_name' accepts numerals/punctuation with non-letters stripped, 'date' is a founder birth date, and 'response_format' controls output presentation (json for programmatic parsing, markdown for human-readable reports). The OUTPUT CONTRACT section further details what each parameter influences in the results.

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: 'Reduces a business name to Expression and root digits against a founder birth date and returns thematic suitability lists plus a harmony score.' It specifies the exact operation (reduction against a date), distinguishes it from sibling tools (asterwise_get_name_correction for personal spelling, asterwise_check_mobile_number for numeric analysis), and identifies the specific resource (business 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?

The description provides explicit guidance on when to use this tool versus alternatives. The 'DO NOT CONFUSE WITH' section names specific sibling tools and explains their different purposes (personal spelling vs. corporate Expression scoring, numeric line analysis vs. brand letters). It also includes workflow sections indicating this is standalone and when to use asterwise_get_name_correction afterward for personal entities.

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

asterwise_get_chaldean_numerologyA
Read-onlyIdempotent
Inspect

Reduces a name and birth date through the Chaldean letter-value system and returns name, birth, and combined compound analyses with themes and keywords.

SECTION: WHAT THIS TOOL COVERS Chaldean assigns letters values one through eight (nine treated as sacred/unassigned in tradition). Response includes data.system 'chaldean', echoed full_name and birth_date, plus three parallel number objects (name, birth, compound) each with raw compound, reduced root, theme, keywords, interpretation. It does not output Pythagorean Life Path blocks (asterwise_get_numerology_profile) or Lo Shu grids.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_numerology_profile — compare against Pythagorean cores if needed.

SECTION: INPUT CONTRACT name and date forwarded as-is; no local validation.

SECTION: OUTPUT CONTRACT data.system (string — 'chaldean') data.full_name (string) data.birth_date (string) data.name_number: raw (int — compound) reduced (int — root) theme (string) keywords[] (string array) interpretation (string) data.birth_number — same shape as data.name_number data.compound_number — same shape; raw combines name and birth

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Chaldean and Pythagorean numbers disagree by design — never merge blindly.

SECTION: DO NOT CONFUSE WITH asterwise_get_numerology_profile — Pythagorean Life Path / Expression stack, not Chaldean compounds. asterwise_get_lo_shu_grid — digit placement magic square, not Chaldean name reduction.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true. The description adds valuable behavioral context: it specifies the compute class (MEDIUM_COMPUTE), explains that validation is upstream with no local validation, details error handling (INVALID_PARAMS, INTERNAL_ERROR), and warns about edge cases (Chaldean/Pythagorean disagreement). This goes significantly beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

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

The description is well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, etc.), but it's quite lengthy with some redundancy (e.g., OUTPUT CONTRACT and RESPONSE FORMAT overlap). While informative, it could be more concise by combining related sections or trimming repetitive details.

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 complexity (numerology calculation with multiple outputs) and rich annotations/output schema, the description is exceptionally complete. It covers purpose, differentiation, workflow, input/output contracts, response formats, compute class, error handling, and edge cases. With an output schema present, it appropriately focuses on behavioral aspects rather than re-describing return values.

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?

With 0% schema description coverage, the description must compensate. It explains that 'name and date forwarded as-is; no local validation' and details the 'response_format' parameter's effect (json vs markdown output modes). While it doesn't specify exact formats for name/date, it provides meaningful context about parameter handling that the schema lacks.

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 'reduces a name and birth date through the Chaldean letter-value system' and 'returns name, birth, and combined compound analyses with themes and keywords.' It specifically distinguishes from sibling tools like 'asterwise_get_numerology_profile' (Pythagorean) and 'asterwise_get_lo_shu_grid' (digit placement), providing explicit 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 'DO NOT CONFUSE WITH' section explicitly names alternatives (asterwise_get_numerology_profile, asterwise_get_lo_shu_grid) and clarifies when not to use this tool. The 'WORKFLOW' section provides before/after context, stating it's standalone and can be followed by asterwise_get_numerology_profile for comparison.

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

asterwise_get_char_dashaA
Read-onlyIdempotent
Inspect

Computes Char Dasha from birth data and returns sign lords as period rulers with ISO-dated Maha and Antar sequences plus karaka mappings.

SECTION: WHAT THIS TOOL COVERS Uses the classical system where rashis (not grahas) rule time periods, including Atmakaraka, eight karakas, current Maha/Antar labels in Sanskrit signs, and a period array with nested antardashas. It does not return Vimshottari (asterwise_get_dasha), Yogini, or Ashtottari timelines.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — contextualises the chart before interpreting sign-based lords. AFTER: asterwise_get_dasha — optional Vimshottari cross-check for the same native.

SECTION: INPUT CONTRACT Period start_date and end_date in data.periods[] are YYYY-MM-DD (ISO), unlike asterwise_get_dasha which uses DD/MM/YYYY in its tree. All other parameters follow the BirthData global contract.

SECTION: OUTPUT CONTRACT data.atmakaraka (string — planet name) data.start_rashi (string — Sanskrit rashi name) data.start_rashi_index (int) data.karakas{} — object mapping classical karaka keys to planet names data.current_mahadasha (string — Sanskrit rashi name, e.g. 'Mithuna') data.current_antardasha (string — Sanskrit rashi name) data.periods[] — Mahadasha objects: rashi (string) rashi_index (int) years (int) start_date (string — YYYY-MM-DD ISO) end_date (string — YYYY-MM-DD ISO) antardashas[] — same shape as one level (no further nesting)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Two planets at the same degree: classical tie-break rules apply upstream; no separate error.

SECTION: DO NOT CONFUSE WITH asterwise_get_dasha — Vimshottari planet lords with DD/MM/YYYY in periods[], not sign-based Char Dasha. asterwise_get_yogini_dasha — eight Yoginis and data.periods.root[], not classical signs.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations (readOnlyHint=true, destructiveHint=false) already declare the tool safe and idempotent. The description adds behavioral context: computation class (MEDIUM_COMPUTE), response format modes (json vs markdown), error contracts with edge cases like tie-breaking, and date format differences. All consistent with annotations with 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.

Conciseness3/5

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

The description is well-structured with clear sections and front-loaded summary, but it is verbose—spanning multiple sections with repeated admonitions. Some sentences (e.g., repeated edge-case handling) could be condensed without losing meaning.

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 an output schema (not shown but mentioned) and annotations, the description covers input contract, output contract, workflow, error contracts, and differentiation from siblings. It provides a complete picture for an agent 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?

With 50% schema coverage, the description adds value by noting the 'BirthData global contract' for the birth parameter and clarifying the date format difference (ISO vs DD/MM/YYYY) from a sibling tool. It also explains the response_format parameter's effect. This compensates for missing schema 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 the tool computes Char Dasha from birth data, specifying outputs like sign lords, ISO-dated sequences, and karaka mappings. It explicitly distinguishes from siblings such as asterwise_get_dasha and asterwise_get_yogini_dasha, so an agent can precisely identify its 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 provides a dedicated 'WORKFLOW' section recommending asterwise_get_natal_chart before and asterwise_get_dasha after, plus a 'DO NOT CONFUSE WITH' section that names alternative tools. This gives explicit 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.

asterwise_get_chart_strengthA
Read-onlyIdempotent
Inspect

Aggregates Shadbala, Bhavbala, Vimshopaka (with per-varga contributions), embedded sixteen vargas, Ashtakavarga, karaka maps, and graha yuddha pairs from BirthData.

SECTION: WHAT THIS TOOL COVERS Returns chart strength computations: six-planet Shadbala breakdowns with sthana/kala detail objects, twelve-house Bhavbala totals, Vimshopaka scores with threshold bands and per-D1..D60 fractions, full divisional chart mirror of asterwise_get_divisional_chart, Ashtakavarga mirror of asterwise_get_ashtakavarga, karaka_to_planet / planet_to_karaka, and graha_yuddha.war_pairs. It does not label named yogas (asterwise_get_yogas) or doshas (asterwise_get_doshas).

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — contextualises houses before reading bala tables. AFTER: asterwise_get_yogas — optional configuration pass after strength review.

SECTION: INPUT CONTRACT BirthData only; no extra toggles.

SECTION: OUTPUT CONTRACT data.shadbala — keyed by Sun..Saturn (excludes Rahu/Ketu): planet (string) sthana_bala, dig_bala, dig_bala_virupas, dig_bala_rupas, kala_bala, cheshta_bala, naisargika_bala, drik_bala, yuddhabala_adjustment, total (float), ratio (float), required_minimum (float), is_purna_bala (bool) sthana_bala_details — { uchcha, saptavargaja, ojhayugma, kendradi, drekkana, total } kala_bala_details — { nathonnatha, paksha, tribhaga, vara, hora, ayana, total } data.bhavbala — keys '1'..'12': bhavadhipati_bala, bhava_dig_bala, bhava_drik_bala, total (float) data.vimshopaka_bala — keyed by planet including Rahu/Ketu: vimshopaka_score (float, max 20) threshold (string — 'zero_capacity', 'moderate', 'good', or 'extremely_auspicious') per_varga — keyed by D1..D60: { contribution (float), fraction (float) } data.divisional_charts — same nested schema as asterwise_get_divisional_chart data.ashtakavarga — same schema as asterwise_get_ashtakavarga data.karakas — { karaka_to_planet{}, planet_to_karaka{} } data.graha_yuddha — { war_pairs[] } Threshold guide: 15+ extremely_auspicious, 10–15 good, 5–10 moderate, below 5 zero_capacity.

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE (~800ms)

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — BirthData only; Pydantic handles field bounds.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Large payload due to embedded vargas and Ashtakavarga duplicates.

SECTION: DO NOT CONFUSE WITH asterwise_get_yogas — boolean yoga catalogue, not numeric bala. asterwise_get_ashtakavarga — standalone AVK when strength bundle is not needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

The description adds significant behavioral context beyond annotations: compute class (~800ms), error contract, edge cases (large payload), and response format options. It does not contradict the annotations (readOnlyHint, idempotentHint).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

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

The description is well-structured with clear sections and front-loads the main purpose, but it is verbose, spanning multiple sections with detailed sub-headings. While the length is justified by the tool's complexity, it could be more concise.

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 numerous outputs, the description is remarkably complete: it covers workflow, error handling, detailed output contract with field names and types, response format options, and edge cases. 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 input schema already provides descriptions for both parameters (birth, response_format). The description adds value by clarifying the input contract ('BirthData only; no extra toggles') and the purpose of response_format. Given high schema coverage, the description's additional context is useful but not extensive.

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 what the tool does: aggregates Shadbala, Bhavbala, Vimshopaka, and other chart strength computations from BirthData. It also includes a dedicated 'DO NOT CONFUSE WITH' section that explicitly distinguishes it from sibling tools like asterwise_get_yogas and asterwise_get_ashtakavarga.

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 workflow guidance with recommended prior and subsequent tool calls ('BEFORE: asterwise_get_natal_chart', 'AFTER: asterwise_get_yogas'), and lists alternatives in the 'DO NOT CONFUSE WITH' section.

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

asterwise_get_choghadiyaA
Read-onlyIdempotent
Inspect

Splits a solar day into sixteen Choghadiya segments from sunrise/sunset at a location and labels each slot's quality, ruler, and local clock bounds.

SECTION: WHAT THIS TOOL COVERS Computes eight day and eight night Choghadiya periods with type (auspicious, highly auspicious, inauspicious), ruling planet, suitability text, and is_current flags. Boundaries follow actual sunrise/sunset for the timezone, so DST is implicit. It does not rank multi-day windows for named activities (asterwise_get_muhurta) or return full Panchanga limbs (asterwise_get_panchanga).

SECTION: WORKFLOW BEFORE: None — this tool is standalone. AFTER: asterwise_get_rahu_kaal — optional inauspicious band overlay for the same date.

SECTION: INPUT CONTRACT LocationInput enforces YYYY-MM-DD date and lat/lon ranges locally. All parameters are defined in the tool schema.

SECTION: OUTPUT CONTRACT data.date (string) data.sunrise (string — HH:MM local) data.sunset (string — HH:MM local) data.day_choghadiya[] — eight objects: period (int — 1–8) name (string) type (string — 'auspicious', 'highly auspicious', or 'inauspicious') ruling_planet (string) suitable_for (string) start (string — HH:MM local) end (string — HH:MM local) is_current (bool) data.night_choghadiya[] — eight objects with the same fields

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — Invalid LocationInput date or coordinates → MCP INVALID_PARAMS

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Slots track sunrise/sunset, not fixed civil slices.

SECTION: DO NOT CONFUSE WITH asterwise_get_hora — twenty-four planetary horas, not sixteen Choghadiya. asterwise_get_muhurta — scored windows across a date range for named activities.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationYesFor tools that need location but not birth time.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

The description adds valuable behavioral context beyond the annotations. While annotations indicate read-only, open-world, idempotent, and non-destructive operations, the description adds that boundaries follow actual sunrise/sunset with DST implicit, slots track sunrise/sunset not fixed civil slices, and it's classified as FAST_LOOKUP. It also details error contracts (INVALID_PARAMS, INTERNAL_ERROR) and edge cases, providing comprehensive behavioral transparency.

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 (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), making it easy to navigate. While comprehensive, some sections like OUTPUT CONTRACT and RESPONSE FORMAT are detailed but necessary for clarity. It avoids redundancy and is front-loaded with the core purpose, though it could be slightly more concise in the output details given the presence of an output schema.

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 complexity, rich annotations, and output schema, the description is highly complete. It covers purpose, usage guidelines, behavioral traits, input/output contracts, error handling, and sibling distinctions. The output schema exists, so the description doesn't need to explain return values in detail, but it still provides useful context on data structure and response formats, ensuring the agent has all necessary information.

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?

With 100% schema description coverage, the baseline is 3. The description mentions that LocationInput enforces YYYY-MM-DD date and lat/lon ranges locally, and all parameters are defined in the tool schema. It adds minimal semantic context beyond the schema, such as noting DST is implicit due to timezone handling, but doesn't elaborate on parameter usage or constraints beyond what's already documented 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 clearly states the tool's purpose: it splits a solar day into sixteen Choghadiya segments from sunrise/sunset at a location and labels each slot's quality, ruler, and local clock bounds. It specifically distinguishes this tool from sibling tools like asterwise_get_muhurta (multi-day windows for named activities) and asterwise_get_panchanga (full Panchanga limbs), providing 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 guidance on when to use this tool versus alternatives. It states that this tool is standalone (no prerequisites) and mentions asterwise_get_rahu_kaal as an optional follow-up. It also clearly distinguishes it from asterwise_get_hora (planetary horas) and asterwise_get_muhurta (scored windows for activities), giving clear alternatives and exclusions.

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

asterwise_get_compatibilityA
Read-onlyIdempotent
Inspect

Scores North Indian Ashtakoota (36-point Guna Milan) for two charts and returns koota breakdown, dosha flags, classical vetoes, mangal cross-check, and narrative guidance.

SECTION: WHAT THIS TOOL COVERS Implements classical Ashtakoota with eight weighted kootas (Varna through Nadi), dosha booleans and cancellations, Rajju/Vedha veto objects, supplementary Mahendra and Stree Deergha checks, mangal compatibility, and a structured narrative. It is not Dashakoot (asterwise_get_dashakoot), Tamil Porutham (asterwise_get_porutham), or twelve-koota Thirumana (asterwise_get_thirumana_porutham).

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart per person — understand charts before interpreting scores. AFTER: asterwise_get_papasamyam — optional malefic balance overlay.

SECTION: INPUT CONTRACT Two BirthData objects follow the global contract (unknown midnight time accepted without flag). All scoring is computed upstream from those payloads.

SECTION: OUTPUT CONTRACT data.total_score (float — out of 36) data.breakdown{} — keys Varna, Vashya, Tara, Yoni, GrahaMaitri, Gana, Bhakoot, Nadi — each value float score data.compatibility_level (string — e.g. 'Average', 'Good') data.doshas{}: varna_dosha (bool) bhakoot_dosha (bool) nadi_dosha (bool) bhakoot_dosha_type (string or null) data.dosha_cancellations{}: varna_dosha_cancelled (bool) bhakoot_dosha_cancelled (bool) nadi_dosha_cancelled (bool) data.analysis: major_doshas (string or object per upstream) cancelled_doshas (string or object per upstream) recommendation (string) data.classical_vetoes: has_veto (bool) vedha — { present (bool), description (string) } rajju — { present (bool), description (string), rajju_type (string — 'Siro', 'Kantha', 'Udara', 'Kati', or 'Pada') } veto_note (string) data.mangal_compatibility: person_a_manglik (bool) person_a_severity (string or value per upstream) person_b_manglik (bool) person_b_severity (string or value per upstream) match_status (string) description (string) data.supplementary_checks: mahendra — { is_auspicious (bool), distance (int), description (string) } stree_deergha — { distance (int), quality (string), is_favorable (bool), description (string) } data.compatibility_narrative: overall (string) strengths[] (string array) concerns[] — each { veto_type, severity, description, nakshatra_pair or body_part } recommendation (string) data.birth_time_provided (bool)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — malformed birth payloads surface as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Rajju and Vedha conditions may be present alongside high scores — read classical_vetoes before conclusions.

SECTION: DO NOT CONFUSE WITH asterwise_get_dashakoot — ten-point South Indian extension, not 36-point Ashtakoota. asterwise_get_porutham — Tamil ten-porutham pass/fail grid, different schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
person1YesBirth data for a single person.
person2YesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint. The description adds valuable context: compute class MEDIUM_COMPUTE, upstream computation, edge case advice (e.g., 'Rajju and Vedha conditions may be present alongside high scores'), and error contracts. No contradiction.

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 into labeled sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.) and front-loaded with the core purpose. While lengthy, each section provides necessary information without redundancy.

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 complexity, the description covers all aspects: purpose, workflow, input/output contracts (including detailed output schema), error handling, compute class, and sibling distinctions. It even addresses edge cases, making it fully complete.

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 67% (person1/person2 have descriptions; response_format lacks one). The description compensates by detailing the input contract ('Two BirthData objects follow the global contract') and explaining response_format options (json vs markdown with use cases). This adds meaning 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?

The description explicitly states the tool 'Scores North Indian Ashtakoota (36-point Guna Milan) for two charts' and lists what it returns (koota breakdown, dosha flags, etc.). It distinguishes from siblings by naming alternatives like asterwise_get_dashakoot in a dedicated 'DO NOT CONFUSE WITH' section.

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 a 'WORKFLOW' section recommending to use asterwise_get_natal_chart before and asterwise_get_papasamyam after. It also clarifies it is not Dashakoot, Tamil Porutham, or Thirumana, providing explicit when-to-use and when-to-avoid guidance.

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

asterwise_get_crystalA
Read-onlyIdempotent
Inspect

Lookup a specific crystal by slug or name (case-insensitive). Returns full detail including dual Vedic/Western planetary assignments, all healing properties, and any safety cautions.

SECTION: WHAT THIS TOOL COVERS Returns one crystal entry from the 50-crystal database. Accepts URL-safe slugs (e.g. 'blue-sapphire', 'rose-quartz') or display names (e.g. 'Blue Sapphire', 'Rose Quartz'). The caution field carries critical safety information — Blue Sapphire and Hessonite Garnet carry CRITICAL cautions about Jyotish use without qualified practitioner assessment. Malachite has a CRITICAL toxicity caution. Always surface the caution field to end users.

SECTION: WORKFLOW BEFORE: None — standalone or after asterwise_get_gemstone_recommendations. AFTER: None.

SECTION: INPUT CONTRACT name: Crystal slug or display name. Examples: 'amethyst', 'blue-sapphire', 'Cat's Eye Chrysoberyl'

SECTION: OUTPUT CONTRACT Same shape as each crystal in asterwise_get_crystals — full single crystal object.

SECTION: RESPONSE FORMAT response_format=json — single crystal object. response_format=markdown — formatted detail card. Both return identical data.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (upstream): Unknown crystal name → 404, surfaces as MCP INTERNAL_ERROR. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_crystals — full 50-crystal catalogue. asterwise_get_crystal_by_planet — all crystals for a Vedic planet. asterwise_get_gemstone_recommendations — natal chart-based gem recommendations (house lordship rules), different from this database.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds critical behavioral details such as the caution field containing safety warnings for specific crystals (e.g., toxicity of Malachite) and error contract descriptions. 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 well-structured into labeled sections (BEFORE, INPUT, OUTPUT, ERROR, etc.) and each adds value. It is somewhat verbose but appropriate for a tool with multiple facets; minor conciseness improvements could be made.

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?

Covers all relevant aspects: input syntax, output shape, error cases, safety warnings, and integration points. With an output schema present, the description adequately references it ('same shape as each crystal in asterwise_get_crystals'). Complete for a lookup tool.

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 0%, so description fully compensates. It explains the 'name' parameter can be slug or display name with examples (e.g., 'blue-sapphire'), and details 'response_format' options (json vs markdown) with different response styles. Adds meaning beyond the bare 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 'Lookup a specific crystal by slug or name' and specifies the returned data includes full detail. It distinguishes from siblings like asterwise_get_crystals (full catalogue) and asterwise_get_crystal_by_planet (by planet), preventing confusion.

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 'BEFORE/AFTER' workflow context and a 'DO NOT CONFUSE WITH' section listing sibling tools with their purposes, providing 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.

asterwise_get_crystal_by_planetA
Read-onlyIdempotent
Inspect

Returns all crystals associated with a specific Vedic planet. Results are sorted with primary Navaratna gems first, then Uparatna substitutes. Only Navaratna and Uparatna Vedic assignments are returned — crystals with no Vedic planetary correspondence are excluded.

SECTION: WHAT THIS TOOL COVERS Filters the crystal database by vedic_planet field. Only returns crystals where vedic_correspondence is 'navaratna' or 'uparatna' — none_classical crystals are not returned here because they have no actual Vedic planetary assignment. Useful for Jyotish practitioners recommending remedial gems. Navaratna gems appear first. Valid planets: Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — identify the planet needing remediation. AFTER: asterwise_get_gemstone_recommendations — for chart-specific gem safety assessment.

SECTION: INPUT CONTRACT planet: One of Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu.

SECTION: OUTPUT CONTRACT data.total (int) data.crystals[] — same shape as asterwise_get_crystals, sorted Navaratna first.

SECTION: RESPONSE FORMAT response_format=json — filtered crystal array. response_format=markdown — formatted list. Both return identical data.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (upstream): Unknown planet → 404. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_gemstone_recommendations — natal chart house-lordship gem recommendation with contraindications; use for actual gem prescription, not just listing. asterwise_get_crystals — all 50 crystals including Western-only ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
planetYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. Description adds valuable context beyond annotations: sorting order (Navaratna first), filtering criteria (only navaratna/uparatna), and response format behavior (identical data, different formatting). 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.

Conciseness4/5

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

Well-structured with clear sections, but somewhat verbose (repetition in 'What This Tool Covers' section largely restates main description). Still, it is front-loaded with purpose and remains readable.

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 2 parameters with simple types, the description covers all necessary context: valid inputs, output structure (data.total, data.crystals), sorting, filtering, error conditions, and workflow integration. Output schema exists but description still adds value by explaining shape and sort order.

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 0% (no descriptions in JSON schema), so description bears full burden. It thoroughly explains the 'planet' parameter listing valid values and 'response_format' enum options with behavior details (identical data). This fully compensates for the lack of schema 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 it returns all crystals associated with a specific Vedic planet (verb+resource). It distinguishes from siblings like asterwise_get_crystals (all 50 crystals) and asterwise_get_gemstone_recommendations (chart-specific recommendations). The scope is precise and 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?

Provides explicit guidance on when to use (Jyotish practitioners recommending remedial gems) and when not to (crystals with no Vedic correspondence). The 'DO NOT CONFUSE WITH' section and workflow BEFORE/AFTER suggestions offer clear context and differentiation from alternative tools.

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

asterwise_get_crystal_recommendationsA
Read-onlyIdempotent
Inspect

Recommends crystals based on zodiac sign, chakra, or intention keyword. At least one filter is required. Returns crystals that match the most criteria first.

SECTION: WHAT THIS TOOL COVERS Scoring: zodiac match scores 3, chakra match scores 2, keyword match scores 1. Crystals matching multiple filters rank highest. Returns up to limit results (default 5, max 20). Valid chakras: Root, Sacral, Solar Plexus, Heart, Throat, Third Eye, Crown. Valid zodiac signs: English Western zodiac names (Aries, Taurus, etc.). Intention keyword is matched against each crystal's keywords[] list (partial match). Not a Jyotish prescription — does not account for natal chart or planetary periods. For chart-based gem prescription use asterwise_get_gemstone_recommendations.

SECTION: WORKFLOW BEFORE: None — standalone for consumer apps. AFTER: asterwise_get_crystal — get full detail on any recommended crystal.

SECTION: INPUT CONTRACT At least one of: zodiac_sign, chakra, intention must be provided. zodiac_sign (optional): English zodiac sign, e.g. 'Taurus', 'Scorpio'. chakra (optional): One of Root, Sacral, Solar Plexus, Heart, Throat, Third Eye, Crown. intention (optional): Keyword string, e.g. 'protection', 'abundance', 'love'. limit (optional int, default 5, max 20): Maximum results to return.

SECTION: OUTPUT CONTRACT data.total (int — number returned) data.filters_applied{} — the filters used data.crystals[] — matched crystals sorted by score descending

SECTION: RESPONSE FORMAT response_format=json — recommendation object. response_format=markdown — formatted recommendations. Both return identical data.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (upstream): No filters provided → 422. Invalid chakra name → 422. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_crystal_by_planet — Vedic planet filter only. asterwise_get_gemstone_recommendations — natal chart house-lordship gem prescription with contraindications.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
chakraNo
intentionNo
zodiac_signNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already indicate readOnly and non-destructive. The description adds detailed behavioral traits: scoring method (zodiac 3, chakra 2, intention 1), ranking, matching logic (partial match on keywords), valid values, error contracts, and compute class. 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 with clear sections (scoring, workflow, input/output contracts, error contract, differentiation). The first sentence front-loads the core purpose. Every section adds value without redundancy.

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 complexity (5 parameters, scoring, multiple siblings), the description covers all needed information: how to use, output contract, error handling, differentiation, and workflow. Output schema exists, so return values are appropriately not detailed. Nothing missing.

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 description coverage is 0%, but the description fully explains all five parameters: limit (default 5, max 20), chakra (valid list), intention (keyword, partial match), zodiac_sign (English zodiac names), response_format (enum, not detailed but schema covers it). Also states at least one filter is required.

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 recommends crystals based on zodiac sign, chakra, or intention keyword, with at least one filter required. It differentiates from siblings like asterwise_get_crystal_by_planet and asterwise_get_gemstone_recommendations in the 'DO NOT CONFUSE WITH' section.

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 states when to use (for crystal recommendations based on zodiac/chakra/intention) and when not (not for Jyotish prescription, for chart-based gem use asterwise_get_gemstone_recommendations). Also provides workflow: standalone for consumer apps, then optionally asterwise_get_crystal for full details.

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

asterwise_get_crystal_recommendations_natalA
Read-onlyIdempotent
Inspect

Recommends crystals from a Vedic natal chart using house lordship rules for gem selection. This is the only API that derives crystal recommendations from a computed natal chart — not from zodiac sign or chakra preference.

SECTION: WHAT THIS TOOL COVERS Classical rules applied:

  1. INCLUSION RULE — A planet is recommended only if it lords at least one Trikona house (1st, 5th, or 9th). If a planet lords both a Trikona and a Dusthana (6th, 8th, or 12th), the Trikona lordship prevails and the planet is still recommended. This is the dual-lordship rule — violating it produces wrong exclusions.

  2. EXCLUSION RULE — A planet that does not lord any Trikona house is contraindicated. This includes pure Dusthana lords, pure Kendra lords (4th, 7th, 10th), and pure neutral lords.

  3. SCORING — Crystals are scored by which Trikona lordship their planet holds: Lagna lord (1st) Navaratna +5, Uparatna +4 — primary Life Stone Yogakaraka Navaratna +5, Uparatna +4 — lords both a non-1st Kendra AND a non-1st Trikona simultaneously 9th lord Navaratna +4, Uparatna +3 — Fortune Stone (Bhagyesh) 5th lord Navaratna +3, Uparatna +2 — Lucky Stone (Panchamesh)

  4. YOGAKARAKA — A planet that lords both a non-1st Kendra (4th, 7th, or 10th) AND a non-1st Trikona (5th or 9th) is the supreme benefic for that Lagna. Example: Mars for Cancer Lagna (lords 5th and 10th).

  5. DANGEROUS COMBINATIONS — Pairs of recommended crystals from enemy planet camps are flagged in warnings[]: Saturn+Sun, Saturn+Mars, Jupiter+Venus, Moon+Rahu, Moon+Ketu.

  6. CLASSICAL VEDIC ONLY — Crystals with vedic_correspondence='none_classical' (Labradorite, Amazonite, Black Obsidian, etc.) are never returned. These stones have no Vedic planetary assignment in the database.

SECTION: WORKFLOW BEFORE: None — this tool internally computes the natal chart. No separate natal chart call required. AFTER: asterwise_get_crystal — get full detail (hardness, origins, affirmation, full caution text) on any recommended crystal by slug. AFTER: asterwise_get_remedies — broader classical remedial programme alongside gem recommendations.

SECTION: INPUT CONTRACT Standard BirthData (date, time, lat, lon, timezone, ayanamsa). Defaults to Lahiri ayanamsa. time (required): Ascendant (Lagna) is time-sensitive. Inaccurate birth time changes the Lagna → changes all house lords → changes recommendations entirely.

SECTION: OUTPUT CONTRACT data.natal_context{} — chart factors used for recommendations: lagna_sign (string — Ascendant sign in English, e.g. 'Libra') lagna_lord (string — classical lord of the 1st house) fifth_sign (string — 5th house sign in English) fifth_lord (string — lord of the 5th house, Panchamesh) ninth_sign (string — 9th house sign in English) ninth_lord (string — lord of the 9th house, Bhagyesh) yogakaraka (string or null — Yogakaraka planet name if one exists for this Lagna; null if none) contraindicated_lords (string array — planets that do not lord any Trikona; their gems are contraindicated) ayanamsa (string — ayanamsa used, e.g. 'lahiri') data.total (int — number of crystals returned, up to 5) data.crystals[] — recommended crystals sorted by match_score descending: slug, name, colors[], hardness_mohs (float), chakras[], element, zodiac_signs[] vedic_planet (string — the planet this crystal corresponds to) vedic_correspondence (string — always 'navaratna' or 'uparatna'; none_classical never appears) western_planet (string or null) keywords[], healing_physical, healing_emotional, healing_spiritual, description origins[], affirmation, caution (string or null — always surface this to end users) match_score (int — house lordship score; higher indicates stronger lordship basis) match_reasons (string array — which house lordship triggered this recommendation) warnings (string array — dangerous combination warnings; may be empty)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE — full natal chart computation + crystal scoring pass.

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): BirthData Pydantic violations → MCP INVALID_PARAMS INVALID_PARAMS (upstream): Dates before 1800 or after 2100 → MCP INTERNAL_ERROR INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR Edge cases: — An empty crystals[] is valid when no Navaratna or Uparatna Vedic gem corresponds to the Trikona lords of this specific chart. — Blue Sapphire (Saturn) and Hessonite (Rahu) carry CRITICAL cautions in their caution field — always surface this to end users before advising wear. — Rahu and Ketu do not own signs in the classical system — they never appear as lagna_lord, fifth_lord, or ninth_lord.

SECTION: DO NOT CONFUSE WITH asterwise_get_gemstone_recommendations — also a chart-based gem endpoint but uses a different engine (Atmakaraka + role-based prescription vs house lordship scoring); returns gem names not crystal database entries; does not include match_score or match_reasons. asterwise_get_crystal_recommendations — recommends crystals by zodiac sign, chakra, or intention keyword (no natal chart computation; Western metaphysical matching, not classical Jyotish). asterwise_get_crystal_by_planet — lists all crystals for a Vedic planet without house context — use this for reference, not prescription.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations indicate safe read operation. Description adds extensive behavioral details: inclusion/exclusion rules, scoring algorithm, dangerous combinations, that non-classical crystals are never returned, edge cases (empty results, caution fields), error contracts, and output structure. 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?

Well-structured with clear section headers, but quite lengthy. Some redundancy (e.g., rules restated). Front-loaded with purpose and key rules. Could be shortened slightly without losing clarity, but structure makes navigation easy.

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 complexity of Vedic astrology, the description is extremely thorough: covers all input/output contracts, error handling, edge cases, workflow, sibling differentiation, and detailed rules. Output schema exists (described in OUTPUT CONTRACT) so return values are fully documented.

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?

With 50% schema coverage, description adds huge value: explains time sensitivity for birth parameter, defaults for ayanamsa and timezone, constraints on date range, and clarifies that response_format=json vs markdown return identical data but different presentations.

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 recommends crystals from a Vedic natal chart using house lordship rules. It explicitly distinguishes from three sibling tools (asterwise_get_gemstone_recommendations, asterwise_get_crystal_recommendations, asterwise_get_crystal_by_planet) by engine, input type, and output detail.

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 a 'WORKFLOW' section listing BEFORE (none) and AFTER links to other tools. Includes a 'DO NOT CONFUSE WITH' section naming siblings and their differences. Explains when to use this tool (classical Vedic prescription) vs alternatives.

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

asterwise_get_crystalsA
Read-onlyIdempotent
Inspect

Returns all 50 crystals in the database sorted alphabetically. Each entry includes chakra associations, elemental correspondences, Vedic and Western planetary assignments, physical/emotional/spiritual healing properties, geographic origins, affirmations, and safety cautions.

SECTION: WHAT THIS TOOL COVERS Dual-tradition crystal database distinguishing classical Vedic assignments from modern Western metaphysical ones. vedic_correspondence field is always one of: 'navaratna' (primary classical gem — one of the nine planetary gems), 'uparatna' (classical substitute gem), or 'none_classical' (no Vedic text assigns this stone — Western tradition only). The nine Navaratna: Ruby (Sun), Pearl (Moon), Red Coral (Mars), Emerald (Mercury), Yellow Sapphire (Jupiter), Diamond / White Sapphire (Venus), Blue Sapphire (Saturn), Hessonite Garnet (Rahu), Cat's Eye Chrysoberyl (Ketu). Crystals like Labradorite and Amazonite are marked none_classical — they were unknown in ancient India. Does not compute natal chart recommendations (asterwise_get_crystal_recommendations).

SECTION: WORKFLOW BEFORE: None — standalone catalogue. AFTER: asterwise_get_crystal_by_planet — filter by Vedic planet for remedial use.

SECTION: INPUT CONTRACT No required parameters.

SECTION: OUTPUT CONTRACT data.total (int — 50) data.crystals[] — 50 objects each: slug, name, colors[], hardness_mohs (float) chakras[] (string array) element (string) zodiac_signs[] (string array) vedic_planet (string or null) vedic_correspondence (string — 'navaratna'|'uparatna'|'none_classical') western_planet (string or null) keywords[] (string array) healing_physical, healing_emotional, healing_spiritual (strings) description (string) origins[] (string array) affirmation (string) caution (string or null)

SECTION: RESPONSE FORMAT response_format=json — full 50-crystal array. response_format=markdown — formatted catalogue. Both return identical data.

SECTION: COMPUTE CLASS FAST_LOOKUP — static database, no ephemeris.

SECTION: ERROR CONTRACT INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_crystal — single crystal detail by name. asterwise_get_crystal_by_planet — filter by Vedic planetary correspondence. asterwise_get_crystal_recommendations — recommendations by zodiac/chakra/intention.

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already indicate readOnlyHint, idempotentHint, and nondestructive behavior. The description adds context about the static database ('FAST_LOOKUP — static database, no ephemeris') and the dual-tradition content. 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 well-structured with clear sections, front-loaded with key information. It is somewhat verbose due to exhaustive detail (e.g., ERROR CONTRACT, OUTPUT CONTRACT), but each section serves a purpose for clarity. Could be slightly trimmed but still effective.

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 complexity (50 crystals, dual-tradition fields), the simple schema, and the presence of an output schema, the description is highly complete. It covers the vedic_correspondence logic, workflow, error behavior, and output structure thoroughly.

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 single parameter response_format is described in the 'RESPONSE FORMAT' section: 'response_format=json — full 50-crystal array. response_format=markdown — formatted catalogue. Both return identical data.' This adds meaning beyond the schema's enum values, especially since schema coverage is 0%.

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 'Returns all 50 crystals in the database sorted alphabetically', providing a specific verb and resource. It distinguishes from sibling tools like asterwise_get_crystal, asterwise_get_crystal_by_planet, etc., in the 'DO NOT CONFUSE WITH' section.

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 a WORKFLOW section stating 'BEFORE: None — standalone catalogue.' and 'AFTER: asterwise_get_crystal_by_planet — filter by Vedic planet for remedial use.' It also lists alternatives in 'DO NOT CONFUSE WITH', making when-to-use and when-not-to-use explicit.

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

asterwise_get_dashaA
Read-onlyIdempotent
Inspect

Computes Vimshottari Dasha from birth data and returns hierarchical period trees plus current Maha/Antar interpretation blocks.

SECTION: WHAT THIS TOOL COVERS Computes the classical classical Vimshottari timeline from the Moon's birth nakshatra: Mahadasha and nested sub-periods up to the depth set by levels, with Julian and calendar boundaries and optional modern summaries. It returns data.periods[] and data.interpretation for the active periods. It does not compute Char Dasha, Yogini Dasha, Ashtottari, or transit correlations; use the dedicated tools for those systems.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — establishes chart and Moon context before interpreting Dasha lords. AFTER: asterwise_get_dasha_transits — correlates active Dasha lords with transits for the same birth data.

SECTION: INPUT CONTRACT levels (int, default 3, max 5): tree depth — 1 = Mahadasha only; 2 adds Antardasha; 3 Pratyantar; 4 Sookshma; 5 Prana (much larger payload). Response dates in periods[] use DD/MM/YYYY, not ISO. BirthData fields follow global contract (date YYYY-MM-DD, time HH:MM; time='00:00' is accepted without flag — lagna-sensitive timing may be wrong if birth time is unknown).

SECTION: OUTPUT CONTRACT data.periods[] — array of Mahadasha objects: planet (string) start_jd (float) end_jd (float) start_date (string — DD/MM/YYYY, not ISO) end_date (string — DD/MM/YYYY) modern_summary (string or null) sub[] — array of Antardasha objects with the same shape; sub=null at deepest level data.interpretation.current_mahadasha: planet (string) start_date (string) end_date (string) duration_years (float) modern_summary (string or null) favorable_conditions[] (string array) favorable_results[] (string array) unfavorable_conditions[] (string array) unfavorable_results[] (string array) timing_note (string) data.interpretation.current_antardasha — same fields as current_mahadasha plus mahadasha_planet (string) data.birth_time_provided (bool)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE (~100ms at levels=1, ~1500ms at levels=5)

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — levels < 1 or levels > 5 → MCP INVALID_PARAMS

INVALID_PARAMS (upstream): — None — BirthData validation is upstream beyond Pydantic field constraints.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Period start_date/end_date strings are DD/MM/YYYY; do not parse as ISO.

SECTION: DO NOT CONFUSE WITH asterwise_get_char_dasha — classical sign-based periods with ISO dates on periods[], not planet-based Vimshottari. asterwise_get_yogini_dasha — 36-year eight-Yogini cycle with data.periods.root[], not Vimshottari. asterwise_get_ashtottari_dasha — 108-year alternative tree with data.periods.root[] and same levels semantics as this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
levelsNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already provide readOnlyHint, idempotentHint, etc. Description adds compute class timing (~100-1500ms), complete error contract (INVALID_PARAMS, INTERNAL_ERROR, edge cases), and output structure details. 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?

Very long but well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.). Each section earns its place. Slightly verbose but appropriate for the complexity; could be more concise while retaining all essential info.

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 complexity (3 parameters, nested objects, output schema exists), the description covers everything: input contract, output contract, error handling, edge cases, and integration with sibling tools. No gaps identified.

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?

Despite only 33% schema description coverage, the description comprehensively explains all parameters: levels depth and payload impact, birth data contract with special note about time='00:00', and response_format options. Adds meaning well beyond 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 computes Vimshottari Dasha from birth data, returns hierarchical period trees and interpretation blocks. It explicitly lists what it does not cover (Char, Yogini, Ashtottari) and distinguishes from many sibling dasha 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?

Provides explicit workflow: BEFORE use asterwise_get_natal_chart, AFTER use asterwise_get_dasha_transits. Also includes a 'DO NOT CONFUSE WITH' section naming alternative tools for different dasha systems, 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.

asterwise_get_dashakootA
Read-onlyIdempotent
Inspect

Computes the ten-koota Dashakoot grid for two charts, converts it to a ten-point score with percentage, and exposes boolean dosha flags plus supplementary diagnostics.

SECTION: WHAT THIS TOOL COVERS South Indian Kannada/Telugu style matching: each koota scores 0.0 or 1.0 with max_per_koota 1.0, includes Nadi/Bhakoot/Rajju/Vedha blocks, Mahendra/Stree Deergha supplements, and Rajju/Vedha detail objects. It is not Ashtakoota 36-point (asterwise_get_compatibility) or Tamil porutham pass grid (asterwise_get_porutham).

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart for each native — context before regional scoring. AFTER: asterwise_get_papasamyam — optional malefic differential.

SECTION: INPUT CONTRACT Two BirthData objects per global contract.

SECTION: OUTPUT CONTRACT data.total_score (float — out of 10) data.max_score (float — 10.0) data.percentage (float) data.compatibility_level (string) data.breakdown{} — keys Dina, Gana, Mahendra, StreeDeergha, Yoni, Rasi, RasiAdhipati, Vashya, Rajju, Vedha — each float 0.0 or 1.0 data.max_per_koota{} — each value 1.0 data.doshas{}: nadi_dosha (bool) nadi_cancelled (bool) bhakoot_dosha (bool) bhakoot_cancelled (bool) rajju_dosha (bool) rajju_group_boy (string or value per upstream) rajju_group_girl (string or value per upstream) vedha_dosha (bool) vedha_pair (string or value per upstream) data.supplementary: mahendra (object) stree_deergha (object) rajju — { boy_rajju, girl_rajju, same_rajju (bool), is_dosha (bool), description (string) } vedha — { has_vedha (bool), boy_nakshatra (int), girl_nakshatra (int), description (string) } dina_inclusive_count (int)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Read rajju/vedha supplementary objects before trusting the headline score.

SECTION: DO NOT CONFUSE WITH asterwise_get_compatibility — North Indian 36-point Ashtakoota with different breakdown keys. asterwise_get_porutham — Tamil ten-porutham passed counts, not Dashakoot floats.

ParametersJSON Schema
NameRequiredDescriptionDefault
person1YesBirth data for a single person.
person2YesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds valuable context beyond annotations: it specifies the 'COMPUTE CLASS' as 'MEDIUM_COMPUTE' (indicating resource intensity), details error contracts (INVALID_PARAMS, INTERNAL_ERROR), and advises to 'Read rajju/vedha supplementary objects before trusting the headline score' for edge cases. 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 well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, OUTPUT CONTRACT, etc.), making it easy to scan. It is appropriately sized for a complex tool, though some sections (like OUTPUT CONTRACT) are detailed but necessary. Every sentence adds value, with no redundant 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?

Given the tool's complexity (computational astrology matching), rich output schema detailed in 'OUTPUT CONTRACT', and annotations covering safety, the description is highly complete. It explains regional style, scoring methodology, workflow recommendations, error handling, compute class, and distinctions from siblings. The output schema eliminates need to describe return values in the description, and the description adds all necessary contextual information.

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 67%, with detailed descriptions for person1/person2 fields (lat, lon, date, time, ayanamsa, timezone, person_name) but no description for response_format. The description compensates by explaining in 'RESPONSE FORMAT' that 'response_format=json serialises... response_format=markdown renders...', adding semantic meaning not in the schema. However, it doesn't fully document all parameters beyond what the 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 states the tool computes a 'ten-koota Dashakoot grid for two charts' and converts it to a 'ten-point score with percentage', distinguishing it from sibling tools like 'asterwise_get_compatibility' (North Indian 36-point) and 'asterwise_get_porutham' (Tamil pass grid). It specifies the regional style (South Indian Kannada/Telugu) and scoring method (0.0 or 1.0 per koota).

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 guidance in the 'WORKFLOW' section: 'BEFORE: RECOMMENDED — asterwise_get_natal_chart for each native' and 'AFTER: asterwise_get_papasamyam — optional malefic differential.' It also includes a 'DO NOT CONFUSE WITH' section naming specific sibling tools and explaining their differences, giving clear alternatives and exclusions.

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

asterwise_get_dasha_transitsA
Read-onlyIdempotent
Inspect

Combines active Vimshottari lords with today's transits and returns scored correlations plus transit longitudes and houses from Moon and Lagna.

SECTION: WHAT THIS TOOL COVERS Builds a snapshot for the current calendar day (no date parameter): active Mahadasha, Antardasha, and Pratyantar; transiting planet positions; pairwise dasha–transit correlations with scores; and a filtered list of stronger correlations. It does not return full Dasha trees (use asterwise_get_dasha), ingress calendars (asterwise_get_transits), or standalone Gochar without Dasha context (asterwise_get_gochar).

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — same birth data should be understood before interpreting houses and lords. AFTER: asterwise_get_gochar — optional broader transit snapshot without dasha scoring.

SECTION: INPUT CONTRACT No date field — "today" is fixed by the API. All parameters are otherwise defined in the tool schema. BirthData follows the global contract (unknown birth time: time='00:00' accepted without detection).

SECTION: OUTPUT CONTRACT data.target_date (string — YYYY-MM-DD, today) data.active_dasha: start_date (string) end_date (string) maha — { planet (string), start_date (string), end_date (string) } antar — { planet (string), start_date (string), end_date (string) } pratyantar — { planet (string), start_date (string), end_date (string) } data.transit_positions{} — keyed by planet name: rashi_index (int) rashi (string) is_retrograde (bool) house_from_moon (int) house_from_lagna (int) data.correlations[] — each object: dasha_level (string) dasha_lord (string) transit_planet (string) aspect_type (string) score (int — 1=mild, 2=moderate, 3=high) natal_rashi (string) transit_rashi (string) is_retrograde (bool) significance (string) data.periods_of_significance[] — same shape as correlations[] filtered to score ≥ 2

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Target date is always "today"; past/future analysis is not supported by this tool.

SECTION: DO NOT CONFUSE WITH asterwise_get_gochar — full nine-planet Gochar with AVK and vedha fields, without dasha–transit correlation scores. asterwise_get_transits — ingress and station lists over a chosen range, not today's dasha snapshot. asterwise_get_dasha — full Vimshottari tree without transit overlay.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

The description adds valuable behavioral context beyond the annotations. While annotations indicate read-only, open-world, idempotent, and non-destructive operations, the description clarifies that the tool uses a fixed 'today' date (no date parameter), mentions compute class (MEDIUM_COMPUTE), and details error handling (INVALID_PARAMS, INTERNAL_ERROR). It also explains the response format options (json vs markdown) and edge cases like past/future analysis not being supported. No contradictions with annotations exist.

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 (e.g., WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT), making it easy to scan. Each sentence adds value without redundancy. It efficiently covers purpose, usage, parameters, output, format, compute class, errors, and sibling distinctions in a compact yet comprehensive manner.

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 complexity (astrological calculations with multiple outputs), rich annotations, and detailed output schema, the description is highly complete. It explains the tool's scope, workflow, input constraints (fixed date), output structure (with examples), response formats, compute class, error handling, and explicit sibling distinctions. The output schema is detailed, so the description doesn't need to re-explain return values, focusing instead on contextual guidance.

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?

With schema description coverage at 50% (only 'birth' object has descriptions, 'response_format' lacks one), the description compensates well. The 'INPUT CONTRACT' section clarifies that 'today' is fixed by the API and all parameters are defined in the schema, and it provides context for BirthData (e.g., 'unknown birth time: time='00:00' accepted without detection'). While it doesn't detail individual parameters beyond the schema, it adds meaningful usage context that aids 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's purpose: 'Combines active Vimshottari lords with today's transits and returns scored correlations plus transit longitudes and houses from Moon and Lagna.' It specifies the exact verb ('combines'), resources ('active Vimshottari lords', 'today's transits'), and output ('scored correlations', 'transit longitudes and houses'). It explicitly distinguishes from siblings like asterwise_get_dasha, asterwise_get_transits, and asterwise_get_gochar in the 'DO NOT CONFUSE WITH' section.

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 guidance on when to use this tool versus alternatives. The 'WHAT THIS TOOL COVERS' section states what it does and what it doesn't do (e.g., 'no date parameter', 'does not return full Dasha trees'). The 'WORKFLOW' section recommends using asterwise_get_natal_chart before this tool and asterwise_get_gochar after. The 'DO NOT CONFUSE WITH' section explicitly names alternative tools and their different purposes.

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

asterwise_get_divisional_chartA
Read-onlyIdempotent
Inspect

Computes divisional (varga) chart positions from BirthData; pass chart_type for one varga, or omit chart_type for all sixteen.

SECTION: WHAT THIS TOOL COVERS When chart_type is provided, returns only that one divisional chart. When chart_type is omitted, returns all sixteen standard classical divisional charts (D1, D2, D3, D4, D7, D9, D10, D12, D16, D20, D24, D27, D30, D40, D45, D60). D30 omits Sun and Moon per convention. Does not return Shadbala (asterwise_get_chart_strength) or radix-only graha drishti (asterwise_get_natal_chart).

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — anchor D1 before reading higher vargas. AFTER: None.

SECTION: INPUT CONTRACT chart_type enum is enforced locally (Pydantic). BirthData follows the global contract.

SECTION: OUTPUT CONTRACT When chart_type is provided: data — object with a single key (the requested chart, e.g. 'D9'): planet_name (Sun..Ketu) → { sign (string), sign_num (int), degree (float) } When chart_type is omitted: data — object with keys D1, D2, D3, D4, D7, D9, D10, D12, D16, D20, D24, D27, D30, D40, D45, D60 — each: planet_name → { sign, sign_num, degree } (D30 excludes Sun and Moon entries.)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — Invalid chart_type enum → MCP INVALID_PARAMS (via Pydantic)

INVALID_PARAMS (upstream): — None — unknown ayanamsa for a varga surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_natal_chart — radix chart with houses and drishti, not the full varga dictionary. asterwise_get_chart_strength — embeds vargas inside strength metrics, different primary payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
chart_typeNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds behavioral details such as D30 omitting Sun and Moon, compute class MEDIUM_COMPUTE, and detailed error contracts, going 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-organized with clear sections, but it is verbose. The first sentence is effective, though some sections could be condensed without losing clarity.

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 output format details, error contracts, workflow order, and response format options. With an output schema indicated, the description compensates fully for any gaps.

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?

Despite schema coverage at 33%, the description thoroughly explains the chart_type parameter behavior (single vs all), the response_format modes, and the birth data structure. The enum values for chart_type are listed in the 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 specifies the tool computes divisional (varga) chart positions from BirthData, with clear differentiation between single chart and all sixteen vargas. It also distinguishes itself from siblings like asterwise_get_natal_chart and asterwise_get_chart_strength.

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 a 'WORKFLOW' section recommending to call asterwise_get_natal_chart first and a 'DO NOT CONFUSE WITH' section that explicitly names alternative tools for different use cases.

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

asterwise_get_doshasA
Read-onlyIdempotent
Inspect

Scores twelve fixed dosha buckets from birth data and returns presence flags, typed detail objects, optional summaries, and remedy lines per dosha.

SECTION: WHAT THIS TOOL COVERS Maps mangal_dosha, shani_dosha, shrapit_dosha, grahan_dosha, kala_sarpa, guru_chandal, kemadruma_dosha, paap_kartari, pitru_dosha, gandmool_dosha, nadi_dosha, and gulika — each with present, types[], details{}, interpretation_summary, keywords, remedies[]. It does not replace compatibility Nadi scoring (asterwise_get_compatibility) or Shadbala (asterwise_get_chart_strength). Cancellation arrays inside details (e.g. mangal_dosha) must be read before treating a dosha as final.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — chart familiarity before dosha interpretation. AFTER: asterwise_get_remedies — classical remedial suggestions after dosha review.

SECTION: INPUT CONTRACT BirthData follows the global contract. Unknown birth time at midnight is accepted silently.

SECTION: OUTPUT CONTRACT data.doshas — object with exactly twelve keys: mangal_dosha, shani_dosha, shrapit_dosha, grahan_dosha, kala_sarpa, guru_chandal, kemadruma_dosha, paap_kartari, pitru_dosha, gandmool_dosha, nadi_dosha, gulika Each value: present (bool) types[] (string array) details{} (object — mangal_dosha includes mars_house, from_moon, from_venus, d9_present, severity, cancellations[]; gulika includes longitude, sign_index, sign_name, house, dosha_sensitive; other keys vary) interpretation_summary (string or null) keywords (array or null) remedies[] (string array or null) data.birth_time_provided (bool)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — Dates before 1800 or after 2100 → MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Many doshas include cancellation lists inside details — read before concluding severity.

SECTION: DO NOT CONFUSE WITH asterwise_get_chart_strength — Shadbala/Vimshopaka power metrics, not dosha booleans. asterwise_get_compatibility — pair scoring including nadi_dosha flags, not the twelve natal dosha buckets.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

The description adds significant behavioral context beyond the annotations, including compute class (MEDIUM_COMPUTE), error contracts for INVALID_PARAMS and INTERNAL_ERROR, edge cases about cancellation lists, and details on output format differences between json and markdown. No contradiction with readOnlyHint=true or other 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-organized with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, OUTPUT CONTRACT, etc.), making it easy to parse. While it is lengthy, each section serves a purpose and front-loads the main action. Minor redundancy in listing doshas twice could be trimmed, but overall efficient.

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 complexity of twelve doshas with detailed output, the description covers input contract, output contract with field types, error contracts, workflow suggestions, and sibling tool distinctions. It is complete enough for an AI agent to understand when and how to use the tool effectively.

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 for the birth object is high, and the description adds that unknown birth time at midnight is accepted silently. It explains the effect of response_format options (json vs markdown), which adds value beyond the schema enum descriptions. However, some parameters like timezone default are mentioned in schema, but description does not add new constraints beyond what 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 explicitly states it scores twelve fixed dosha buckets from birth data and lists each dosha name. It also distinguishes from sibling tools asterwise_get_chart_strength and asterwise_get_compatibility, making the purpose very specific and clear.

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 a dedicated 'SECTION: DO NOT CONFUSE WITH' that names two alternative tools, a 'SECTION: WORKFLOW' that recommends prerequisite tools (asterwise_get_natal_chart) and follow-up tools (asterwise_get_remedies), and explicit statements about what the tool does not replace.

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

asterwise_get_dream_symbolA
Read-onlyIdempotent
Inspect

Lookup a specific dream symbol by slug or name (case-insensitive). Returns full dual-tradition interpretation including Jungian archetype, Vedic dream meaning with auspiciousness, context variants, and related symbols.

SECTION: WHAT THIS TOOL COVERS Single symbol lookup with complete detail. Use for dream journaling apps, AI-powered dream interpretation (the themes[] field is designed for synthesis), and cross-tradition comparison. Notable tradition conflicts: Snake (Western=transformation; Vedic=partial — white snake=auspicious, black chasing=inauspicious). Elephant=auspicious both traditions (Ganesha). Crow=inauspicious both traditions (Yama's messenger). Wedding=conflict (West=union; Vedic=inauspicious).

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: None.

SECTION: INPUT CONTRACT name: Symbol slug or display name. Examples: 'snake', 'eagle', 'childhood-home', 'lotus', 'black-dog'

SECTION: OUTPUT CONTRACT Same shape as each symbol in asterwise_get_dream_symbols — full single symbol object.

SECTION: RESPONSE FORMAT response_format=json — single symbol object. response_format=markdown — formatted interpretation card. Both return identical data.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (upstream): Unknown symbol → 404, surfaces as MCP INTERNAL_ERROR. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_dream_symbols — full database listing with optional category filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations indicate readOnly, non-destructive, idempotent, open world. Description adds context: tradition conflicts (snake, elephant, crow, wedding), themes field for synthesis, response formats, and error contracts (invalid params → 404, internal error). 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.

Conciseness4/5

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

The description is well-structured with sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.). It front-loads core purpose. Slightly verbose but each section adds value; could be more concise but still effective.

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 complexity (dual-tradition, context variants, related symbols) and the presence of an output schema (mentioned in context signals), the description covers input, output format, error handling, workflow, and provides examples of tradition conflicts. It is complete and leaves no major gaps.

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 0% (no descriptions in schema). Description provides examples for 'name' ('snake', 'eagle', etc.), notes case-insensitivity, and explains 'response_format' enum values (json vs markdown return identical data). Adds significant meaning beyond bare 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 the tool looks up a specific dream symbol by slug or name (case-insensitive) and returns full dual-tradition interpretation. It identifies the resource (dream symbol) and the action (lookup). It also distinguishes from sibling tool asterwise_get_dream_symbols by noting it is for a single symbol vs full database listing.

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 states use cases: dream journaling, AI-powered interpretation, cross-tradition comparison. Includes a 'DO NOT CONFUSE WITH' section naming the alternative sibling tool. Mentions stand-alone workflow with no prerequisites, and provides error handling guidance.

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

asterwise_get_dream_symbolsA
Read-onlyIdempotent
Inspect

Returns dream symbols from the database with dual-tradition interpretation: Jungian/Western psychological analysis and traditional Vedic dream-symbol meaning. 500 symbols across 8 categories. Optionally filter by category.

SECTION: WHAT THIS TOOL COVERS Each symbol includes: Jungian meaning and archetype (Shadow, Self, Anima, Animus, Great Mother, Wise Old Man, Hero, Trickster, Persona), Vedic dream meaning with Shubha/Ashubha (auspicious/inauspicious) classification, vedic_source tradition label per entry, traditions_agree field flagging where East and West conflict, emotional tone, 2-3 context variants, and related symbol slugs. The traditions_agree='conflict' entries are significant — e.g. Owl (West=wisdom; Vedic=inauspicious death omen), Wedding (West=union; Vedic=inauspicious, medical-astrological tradition warns illness), Gold (West=the Self; Vedic=financial loss warning in medical-astrological tradition). Valid categories: animals, nature, people, places, objects, actions, body, abstract.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_dream_symbol — get full detail for a specific symbol.

SECTION: INPUT CONTRACT category (optional): One of animals, nature, people, places, objects, actions, body, abstract. Omit for all 500 symbols.

SECTION: OUTPUT CONTRACT data.total (int) data.category_filter (string or null) data.symbols[] — each: slug (string) name (string) category (string) jungian_meaning (string) jungian_archetype (string) vedic_meaning (string) vedic_auspicious (bool or null — null = mixed/context-dependent) vedic_source (string) traditions_agree (string — 'agree'|'conflict'|'partial') emotional_tone (string) themes[] (string array — for AI synthesis) context_variants[] — { context (string), meaning (string) } related_symbols[] (string array of slugs)

SECTION: RESPONSE FORMAT response_format=json — symbol array. response_format=markdown — formatted catalogue. Both return identical data.

SECTION: COMPUTE CLASS FAST_LOOKUP — static database.

SECTION: ERROR CONTRACT INVALID_PARAMS (upstream): Invalid category → 422. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_dream_symbol — single symbol detail by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already indicate readOnly, openWorld, idempotent, and non-destructive hints. The description adds beyond that by detailing the 500 symbols, 8 categories, and the 'traditions_agree' field highlighting East-West conflicts. The 'COMPUTE CLASS: FAST_LOOKUP' section also clarifies performance. 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 well-structured with clear sections (e.g., 'WHAT THIS TOOL COVERS', 'WORKFLOW', 'INPUT CONTRACT'). However, it is verbose and could be more concise; several sentences repeat information already implied by the structure.

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 complexity (500 symbols, dual traditions, optional filters), the description covers all necessary aspects: input, output format, error contracts, compute class, and sibling differentiation. The output schema exists (as per context) and the description details the output structure, so completeness is high.

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 0%, so description must compensate. The 'INPUT CONTRACT' section lists the optional category parameter with valid values ('animals, nature, people, places, objects, actions, body, abstract'). The 'RESPONSE FORMAT' section explains the response_format parameter's values ('json' for symbol array, 'markdown' for formatted catalogue), adding meaning beyond the schema enum.

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 returns dream symbols with dual-tradition interpretation (Jungian and Vedic). It explicitly distinguishes from the sibling tool 'asterwise_get_dream_symbol' which returns a single symbol detail, satisfying the purpose clarity criteria.

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 a 'WHAT THIS TOOL COVERS' section explaining the scope, a 'WORKFLOW' section showing before/after dependencies, and a 'DO NOT CONFUSE WITH' section that explicitly warns against using it for single symbol retrieval. This provides clear guidance on when to use this tool vs alternatives.

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

asterwise_get_expression_numberA
Read-onlyIdempotent
Inspect

Calculates the Expression (Destiny) number from the full name using Pythagorean letter values. Reduces each name part separately before summing — this is the Goodwin/Balliett per-part method which preserves the vibrational weight of compound numbers within each name segment. Master numbers 11, 22, 33 are preserved and not further reduced.

SECTION: WHAT THIS TOOL COVERS The Expression number describes the natural talents, abilities, and shortcomings a person brought into this life — what they are capable of becoming. It differs from the Soul Urge (inner motivation) and Personality (outer mask). Uses all letters A–Z mapped to Pythagorean values 1–9. Not Chaldean (asterwise_get_chaldean_numerology).

SECTION: WORKFLOW BEFORE: None — this tool is standalone. AFTER: asterwise_get_soul_urge_number — complete the core trinity (Expression, Soul Urge, Personality).

SECTION: INPUT CONTRACT name — Full legal name as used at birth. Include all name parts separated by spaces. Example: 'Arjun Mehta', 'Sofia Rossi', 'James Carter' Format: string, any case (uppercase/lowercase both accepted) Constraint: at least one alphabetic character required

SECTION: OUTPUT CONTRACT data.number (int — Expression number; may be 11, 22, or 33 for master numbers) data.is_master_number (bool — true when number is 11, 22, or 33) data.karmic_debt_number (int or null — the karmic debt root if present; null otherwise)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — validation is upstream. INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_soul_urge_number — vowels only, not all letters. asterwise_get_personality_number — consonants only, not all letters. asterwise_get_numerology_profile — returns Expression plus all other core numbers, pinnacles, challenges, and lucky numbers in one call. asterwise_get_chaldean_numerology — different letter-value system (Chaldean 1–8).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already indicate readOnly, idempotent, non-destructive. The description adds master number preservation (11, 22, 33), per-part reduction method, output fields including karmic debt, and compute class (FAST_LOOKUP). 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 well-structured with clear sections but is quite lengthy. However, each section adds necessary detail without redundancy, earning a high score but not perfect due to 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?

Given the complexity and many sibling tools, the description covers purpose, usage, parameters, output contract, error contract, compute class, and response format options. Output schema exists, so return values need not be elaborated.

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 0%, so description fully compensates. The INPUT CONTRACT details the 'name' parameter (full legal name, case-insensitive, alphabetic constraint) and 'response_format' enum with usage explanation.

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 Expression (Destiny) number using Pythagorean letter values with the Goodwin/Balliett per-part method. It distinguishes from siblings like Soul Urge, Personality, and Chaldean numerology.

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 workflow guidance is provided, including that the tool is standalone and can be followed by asterwise_get_soul_urge_number. A 'DO NOT CONFUSE WITH' section lists alternatives with clear differentiators.

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

asterwise_get_festival_calendarA
Read-onlyIdempotent
Inspect

Computes all major Hindu festival dates for a given year and location. Returns 20 pan-Hindu festivals including solar sankrantis (Makar Sankranti, Vaisakhi) and tithi-based festivals (Diwali, Holi, Dussehra, Janmashtami, Ganesh Chaturthi, Ram Navami, and 12 others).

SECTION: WHAT THIS TOOL COVERS All dates are astronomically computed — no hardcoded calendar dates. Solar festivals (Makar Sankranti, Vaisakhi) use exact Swiss Ephemeris Sun ingress into Lahiri sidereal signs. Tithi festivals (all others) use Sun-Moon elongation at local sunrise: elongation = (moon_lon - sun_lon) % 360, tithi_index = int(elongation / 12), indices 0-14 = Shukla Paksha tithi 1-15, indices 15-29 = Krishna Paksha tithi 1-15. Location is required for sunrise-based tithi determination — the same astronomical event may fall on different calendar dates at different locations.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_panchanga — drill into full Panchanga detail for any specific festival date.

SECTION: INPUT CONTRACT year: integer 1900-2100. Either location (city name) OR latitude + longitude + timezone must be provided.

SECTION: OUTPUT CONTRACT data.year (int) data.timezone (string — IANA timezone used) data.total (int — number of festivals found) data.festivals[] — chronologically sorted: name (string — festival name) date (string — YYYY-MM-DD) type (string — 'solar' or 'tithi') description (string — classical basis, e.g. which tithi of which lunar month) significance (string — cultural and religious significance)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS SLOW_COMPUTE — scans all 365 days of the year per tithi festival (up to 20 date scans).

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR Edge cases: — Sunrise-based tithi may differ by one day from printed almanac calendars (which use midnight or fixed-time rules). — Rare years where a tithi is skipped may cause a festival to not be found (returns total < 20).

SECTION: DO NOT CONFUSE WITH asterwise_get_panchanga_calendar — full Panchanga for every day of a month; not festival-specific. asterwise_get_muhurta — finds auspicious windows for activities; not a festival calendar.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
latitudeNo
locationNo
timezoneNo
longitudeNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Describes complex calculation methodology (Swiss Ephemeris, sunrise-based tithi determination) and edge cases (tithi skipping, almanac differences). Annotations already indicate read-only, idempotent, non-destructive, and open-world. The description adds significant behavioral context 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?

Well-structured with clear sections (WHAT, WORKFLOW, INPUT, OUTPUT, etc.). While somewhat lengthy, each section adds necessary information. Could be slightly more concise (e.g., tithi calculation formula might be simplified), but overall effective.

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?

Covers all relevant aspects: input validation, output contract with fields, error scenarios, compute class, and relationships to sibling tools. Output contract details compensate for the absence of explicit output schema text. Completely adequate for a complex tool with 6 parameters and no schema descriptions.

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?

Despite 0% schema description coverage, the description details input contract: year range (1900-2100), requirement for location or lat+lon+timezone, and explanation of response_format options (json vs markdown). This fully compensates for missing schema 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 it computes major Hindu festival dates for a given year and location, listing specific festivals and distinguishing between solar and tithi-based types. The 'DO NOT CONFUSE WITH' section explicitly names sibling tools (asterwise_get_panchanga_calendar and asterwise_get_muhurta) and their different purposes.

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 workflow with 'BEFORE: None — standalone' and 'AFTER: asterwise_get_panchanga' for further detail. The 'DO NOT CONFUSE WITH' section gives clear alternatives and when to use them. Error contract and compute class (SLOW_COMPUTE) also guide usage expectations.

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

asterwise_get_gemstone_recommendationsA
Read-onlyIdempotent
Inspect

Computes Ratna-style gemstone picks and cautions from the natal chart and returns primary, role-based stones, secondary options, contraindications, and a safety note.

SECTION: WHAT THIS TOOL COVERS Surfaces data.primary, yogakaraka/fifth/ninth/atmakaraka gems, secondary, contraindicated[], and note. Gemstone may be an empty string in primary when dual lordship withholds a recommendation. It does not emit mantra or fasting guidance (asterwise_get_remedies) or Lal Kitab totkas (asterwise_get_lal_kitab_remedies). The same mineral may appear in secondary and contraindicated with different reasons — read reason fields.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — confirm chart before wearing advice. AFTER: asterwise_get_remedies — broader remedial programme if needed.

SECTION: INPUT CONTRACT BirthData follows the global contract.

SECTION: OUTPUT CONTRACT data.primary: planet (string) reason (string) gemstone (string — may be empty when withheld for dual lordship) substitute_gemstone (string) metal (string) colour (string) note (string) caution (string) data.yogakaraka_gem — { planet (string), gemstone (string) } data.fifth_lord_gem — { planet (string), gemstone (string) } data.ninth_lord_gem — { planet (string), gemstone (string) } data.atmakaraka_gem — { planet (string), gemstone (string) } data.secondary — { planet (string), gemstone (string) } data.contraindicated[] — { planet (string), gemstone (string), reason (string) } data.note (string — safety disclaimer)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — Dates before 1800 or after 2100 → MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Gemstone duplication across secondary and contraindicated is intentional when roles conflict.

SECTION: DO NOT CONFUSE WITH asterwise_get_remedies — mantras, fasting, charity rows, not a gem matrix. asterwise_get_lal_kitab_remedies — Lal Kitab actions, not classical Ratna picks.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true. The description adds valuable behavioral context beyond annotations: it explains that gemstone may be empty in primary due to dual lordship, warns about intentional gemstone duplication across secondary and contraindicated, and specifies the compute class as MEDIUM_COMPUTE. 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.

Conciseness3/5

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

The description is well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, etc.), but it's verbose with redundant details like full output contract and error specifications that could be in structured fields. Some sentences (e.g., Edge cases about duplication) are necessary, but overall it could be more concise.

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 complexity, rich annotations, and detailed output schema, the description is highly complete. It covers purpose, usage guidelines, behavioral nuances, input/output contracts, error handling, and sibling distinctions. The output schema exists, so the description appropriately focuses on contextual information rather than repeating return values.

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 50%, with detailed descriptions for birth parameters but none for response_format. The description adds minimal parameter semantics beyond the schema, mainly referencing the global contract for BirthData and explaining the two response_format options. It doesn't fully compensate for the schema gap, but the baseline is appropriate given the schema does substantial 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 computes Ratna-style gemstone recommendations from a natal chart and specifies the exact output structure (primary, role-based stones, secondary options, contraindications, safety note). It distinguishes from siblings by explicitly naming asterwise_get_remedies and asterwise_get_lal_kitab_remedies as different 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?

The description provides explicit workflow guidance: BEFORE recommends asterwise_get_natal_chart to confirm the chart, and AFTER suggests asterwise_get_remedies for broader remedial programs. It also clearly states what the tool does NOT cover (mantra, fasting, Lal Kitab totkas), distinguishing it from alternatives.

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

asterwise_get_ghat_chakraA
Read-onlyIdempotent
Inspect

Returns the four Ghatak (inauspicious) timing parameters for a native based on their Janma Rasi (natal Moon sign).

SECTION: WHAT THIS TOOL COVERS Ghat Chakra identifies the four parameters that are persistently inauspicious for a native based on their Janma Rasi:

  1. Ghatak Masa — the lunar month to avoid for major events

  2. Ghatak Tithi — the lunar day group (Nanda/Bhadra/Jaya/Rikta/Purna)

  3. Ghatak Vara — the weekday to avoid for major events

  4. Ghatak Nakshatra — the transit Moon nakshatra to avoid When transit periods align with these parameters, the native should avoid starting new ventures, surgery, travel, or auspicious ceremonies. When multiple Ghatak parameters coincide simultaneously, the period is considered extremely inauspicious. Ghatak parameters are fixed per Janma Rasi — independent of current transits.

SECTION: WORKFLOW BEFORE: None — birth data computes everything needed. AFTER: asterwise_get_nakshatra_prediction — for today's personalized daily auspiciousness score.

SECTION: INPUT CONTRACT birth — BirthData (date, time, lat, lon, timezone). Moon sign is computed from birth data.

SECTION: OUTPUT CONTRACT data.janma_rasi (string — Sanskrit Moon sign name) data.janma_rasi_index (int 0-11) data.ghatak_parameters{}: masa{}: name (string), description (string) tithi{}: group (string), tithi_numbers[] (int array), description (string) vara{}: day (string), description (string) nakshatra{}: name (string), description (string) data.guidance (string) data.avoidance_guidance[] (string array)

SECTION: COMPUTE CLASS MEDIUM_COMPUTE — natal chart for Moon sign.

SECTION: ERROR CONTRACT INVALID_PARAMS (local): BirthData Pydantic violations → MCP INVALID_PARAMS INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_nakshatra_prediction — personalised daily Tarabala score, not static Ghatak parameters. asterwise_get_panchanga — daily panchanga elements, not Ghat Chakra lookup.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
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 behavioral context beyond annotations: compute class (MEDIUM_COMPUTE), error contracts (INVALID_PARAMS, INTERNAL_ERROR), and an explanation that parameters are fixed per Janma Rasi, independent of transits. No contradiction.

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 long but well-structured with clear labeled sections (SECTION: WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, OUTPUT CONTRACT, etc.). It is front-loaded with purpose and sibling differentiation. Could be slightly more concise, but the structure aids readability.

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 complexity (nested output, multiple parameters, and specific astrological domain), the description is comprehensive. It covers input, output, compute intensity, error handling, and usage context. The output contract compensates for not describing return values in prose, as the output schema exists.

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 50% – the 'birth' object parameter is fully described in the schema, but 'response_format' lacks a schema description. The description provides an 'INPUT CONTRACT' section summarizing 'birth' but does not elaborate on 'response_format' or its role. This partially compensates but leaves the missing parameter unexplained.

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 returns the four Ghatak (inauspicious) timing parameters based on Janma Rasi (natal Moon sign). It uses a specific verb-resource combination and explicitly distinguishes from siblings like asterwise_get_nakshatra_prediction and asterwise_get_panchanga in the 'DO NOT CONFUSE WITH' section.

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 a 'DO NOT CONFUSE WITH' section naming two sibling tools and explaining their differences, plus a 'WORKFLOW' section with BEFORE (none) and AFTER (suggesting asterwise_get_nakshatra_prediction). 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.

asterwise_get_gocharA
Read-onlyIdempotent
Inspect

Computes Gochar against the natal Moon and Lagna and returns per-planet transit longitudes, houses, AVK scores, vedha flags, and a roll-up summary.

SECTION: WHAT THIS TOOL COVERS Produces a transit snapshot: natal Moon and ascendant signs, nine graha transit rows with nakshatra/pada, houses from Moon and Lagna, favourability flags, optional Ashtakavarga bindu (null for Rahu/Ketu), vedha state, interpretation strings, themes, and quality labels, plus summary counts and sade sati / chandra ashtama flags. It does not list ingress events over a range (asterwise_get_transits), correlate with Vimshottari (asterwise_get_dasha_transits), or return Panchanga elements.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — anchors what "natal" means for the same birth record. AFTER: asterwise_get_dasha_transits — adds dasha-lord correlation for today.

SECTION: INPUT CONTRACT target_date (string, optional — YYYY-MM-DD): date to compute transits for; defaults to today if omitted. BirthData follows the global contract (time='00:00' accepted without unknown-time detection).

SECTION: OUTPUT CONTRACT data.natal: moon_sign (string) moon_sign_index (int) ascendant_sign (string) ascendant_sign_index (int) data.target_date (string — YYYY-MM-DD, today) data.transits[] — nine objects (Sun through Ketu): planet (string) transit_sign (string) transit_sign_index (int) transit_degree (float) is_retrograde (bool) nakshatra (string) nakshatra_pada (int) house_from_moon (int — 1–12) house_from_lagna (int — 1–12) is_favorable_from_moon (bool) is_favorable_from_lagna (bool) bindu_override (bool) vedha_active (bool) vedha_blocking_planet (string or null) ashtakavarga_score (int or null — null for Rahu and Ketu) interpretation (string) themes[] (string array) quality (string — 'favorable' or 'unfavorable') data.summary: favorable_count (int) unfavorable_count (int) vedha_blocked_count (int) overall_score (int) sade_sati_active (bool) sade_sati_phase (string or null) sade_sati_interpretation (object or null — populated when sade_sati_active is true; contains phase-specific prose for rising, peak, or setting phase of Sade Sati) chandra_ashtama_active (bool)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — target_date must match YYYY-MM-DD when provided (Pydantic pattern on the tool schema) → MCP INVALID_PARAMS

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — ashtakavarga_score is null for Rahu and Ketu.

SECTION: DO NOT CONFUSE WITH asterwise_get_transits — ingress and station tables for a chosen date window, not a single-day Gochar snapshot. asterwise_get_dasha_transits — scores how transits meet active dasha lords, not the full nine-planet Gochar row set.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
target_dateNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations cover read-only, open-world, idempotent, and non-destructive hints, so the bar is lower. The description adds valuable context beyond annotations: it specifies compute class ('MEDIUM_COMPUTE'), details error contracts (e.g., 'INVALID_PARAMS', 'INTERNAL_ERROR'), and mentions edge cases (e.g., 'ashtakavarga_score is null for Rahu and Ketu'). However, it doesn't explicitly address rate limits or authentication needs, though annotations imply safety.

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 (e.g., 'WHAT THIS TOOL COVERS', 'WORKFLOW'), each sentence adds value without redundancy. It is front-loaded with the core purpose, and the structured format enhances readability and efficiency for an AI agent.

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 complexity, rich output schema, and annotations, the description is highly complete. It covers purpose, usage guidelines, input/output contracts, error handling, and sibling differentiation. The output schema exists, so the description doesn't need to explain return values in detail, and it provides all necessary contextual information for effective tool use.

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 low at 33%, but the description compensates well. 'SECTION: INPUT CONTRACT' explains the optional target_date parameter with format and default behavior, and clarifies BirthData follows a global contract. While it doesn't detail all schema properties like ayanamsa or timezone, it adds meaningful context for key inputs, raising it above the 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 starts with a clear verb ('Computes') and specifies the exact resource ('Gochar against the natal Moon and Lagna'), then lists the comprehensive return data. It explicitly distinguishes from siblings like asterwise_get_transits and asterwise_get_dasha_transits, making the purpose specific and differentiated.

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 'SECTION: WHAT THIS TOOL COVERS' explicitly states what it does not do (e.g., 'does not list ingress events over a range'), and 'SECTION: DO NOT CONFUSE WITH' names alternatives. 'SECTION: WORKFLOW' provides clear before/after recommendations (e.g., 'BEFORE: RECOMMENDED — asterwise_get_natal_chart'), giving explicit guidance on when to use this tool versus others.

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

asterwise_get_horaA
Read-onlyIdempotent
Inspect

Builds the twenty-four planetary Horas between successive sunrises for a location date and tags each hour with ruler, quality text, and whether it is current.

SECTION: WHAT THIS TOOL COVERS Classical hora muhurta: sequence restarts from the weekday lord, spans day and night until next sunrise, and exposes start/end in local time. It is not a natal divisional chart, not Choghadiya (asterwise_get_choghadiya), and not full Panchanga (asterwise_get_panchanga).

SECTION: WORKFLOW BEFORE: None — this tool is standalone. AFTER: asterwise_get_choghadiya — alternative same-day slot system.

SECTION: INPUT CONTRACT LocationInput date/coordinate rules apply locally (YYYY-MM-DD, bounded lat/lon).

SECTION: OUTPUT CONTRACT data.date (string) data.sunrise (string — HH:MM) data.next_sunrise (string — HH:MM) data.horas[] — twenty-four objects: hora (int — 1–24) ruling_planet (string) start (string — HH:MM local) end (string — HH:MM local) quality (string — suitable activities description) is_current (bool)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — Invalid LocationInput fields → MCP INVALID_PARAMS

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Horas bridge midnight until the next sunrise reference.

SECTION: DO NOT CONFUSE WITH asterwise_get_choghadiya — sixteen Choghadiya segments, not twenty-four Horas. asterwise_get_natal_chart — natal analysis, not hourly muhurta tables.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationYesFor tools that need location but not birth time.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true. The description adds valuable behavioral context beyond annotations: it explains the hora sequence logic ('sequence restarts from the weekday lord, spans day and night until next sunrise'), mentions edge cases ('Horas bridge midnight until the next sunrise reference'), and specifies the compute class ('FAST_LOOKUP'). No contradiction with annotations 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 with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.) that make it easy to scan. While comprehensive, every section serves a purpose - distinguishing from siblings, explaining workflow, documenting contracts, and preventing confusion. Some sections could be more concise, but overall it's efficiently organized.

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 comprehensive annotations, 100% schema coverage, and an output schema (implied by the detailed OUTPUT CONTRACT section), the description is complete. It covers purpose, differentiation from siblings, behavioral context, input/output contracts, error handling, and edge cases. The existence of an output schema means the description doesn't need to explain return values in detail.

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 fully documents all parameters. The description adds minimal parameter semantics beyond the schema - it mentions 'LocationInput date/coordinate rules apply locally (YYYY-MM-DD, bounded lat/lon)' which restates what's in the schema. The baseline of 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 clearly states the tool 'Builds the twenty-four planetary Horas between successive sunrises for a location date and tags each hour with ruler, quality text, and whether it is current.' This is a specific verb ('Builds') + resource ('twenty-four planetary Horas') with precise scope. It explicitly distinguishes from siblings like asterwise_get_choghadiya and asterwise_get_natal_chart in the 'DO NOT CONFUSE WITH' section.

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 guidance on when to use this tool versus alternatives. The 'SECTION: WHAT THIS TOOL COVERS' states it's 'not Choghadiya (asterwise_get_choghadiya), and not full Panchanga (asterwise_get_panchanga).' The 'SECTION: DO NOT CONFUSE WITH' section explicitly names two sibling tools and explains the differences. The 'SECTION: WORKFLOW' clarifies it's standalone with no prerequisites.

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

asterwise_get_horoscopeA
Read-onlyIdempotent
Inspect

Fetches an AI-synthesised Moon-sign horoscope for a chosen horizon and returns structured guidance fields plus metadata about the model and period.

SECTION: WHAT THIS TOOL COVERS Calls the upstream horoscope service for a lunar sign (English or Sanskrit input accepted; response normalises moon_sign to lowercase English) and a period of daily, weekly, monthly, or yearly. It returns narrative and checklist-style content for life areas, remedy, and timing flavour text. It does not compute a personal natal chart, divisional charts, or dasha — only sign-level transit-flavoured copy tied to the requested horizon.

SECTION: WORKFLOW BEFORE: None — this tool is standalone. AFTER: asterwise_get_natal_chart — if the user needs a personalised chart beyond sign-general copy.

SECTION: INPUT CONTRACT period is constrained to the tool schema enum (daily, weekly, monthly, yearly). moon_sign accepts Sanskrit (Tula, Vrischika, Karka, Simha, Kanya, Dhanu, Makara, Kumbha, Meena, Mesha, Vrishabha, Mithuna) or English (Libra, Scorpio, Cancer, Leo, Virgo, Sagittarius, Capricorn, Aquarius, Pisces, Aries, Taurus, Gemini); resolution is upstream. response_format selects JSON vs markdown rendering only.

SECTION: OUTPUT CONTRACT data.content: do[] (string array) body (string) love (string) avoid[] (string array) money (string) career (string) remedy (string) headline (string) narrative (string) open_loop (string) data.model_used (string — AI model version label) data.generated_at (string — ISO UTC) data.period_key (string — YYYY-MM-DD for daily; identifier for other horizons) data.horizon (string — 'daily', 'weekly', 'monthly', or 'yearly') data.moon_sign (string — lowercase English, e.g. 'libra')

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — Invalid period enum or other Pydantic field violations on the tool schema → MCP INVALID_PARAMS

INVALID_PARAMS (upstream): — Unknown or unsupported moon_sign → MCP INTERNAL_ERROR at the tool layer (upstream rejection).

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Sign-level content only; not a substitute for birth-chart analysis.

SECTION: DO NOT CONFUSE WITH asterwise_get_natal_chart — full personalised sidereal chart from birth data, not Moon-sign editorial copy. asterwise_get_gochar — nine-planet transit snapshot vs natal chart for today, not AI horoscope prose.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes
moon_signYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

The description adds substantial behavioral context beyond the annotations. While annotations indicate read-only, open-world, idempotent, and non-destructive operations, the description provides critical details: it's a 'FAST_LOOKUP' compute class, explains the upstream service call, describes error handling (INVALID_PARAMS and INTERNAL_ERROR scenarios), clarifies that it only provides 'sign-level content' not birth-chart analysis, and details the response format options (JSON vs markdown) and their identical underlying data.

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 (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.) that make information easy to find. While comprehensive, it's appropriately sized for a tool with complex behavior and 0% schema coverage. Some sections could be slightly more concise, but every sentence adds value beyond structured fields.

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 complexity (3 parameters with 0% schema coverage, multiple sibling tools, and rich output), the description is exceptionally complete. It covers purpose, usage guidelines, input semantics, output structure, response formats, compute class, error handling, and sibling differentiation. With an output schema present, it appropriately focuses on explaining the meaning and use of output fields rather than just listing them.

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?

With 0% schema description coverage, the description fully compensates by providing comprehensive parameter semantics. 'SECTION: INPUT CONTRACT' details: period is constrained to the enum values, moon_sign accepts both Sanskrit and English names with normalization to lowercase English, and response_format selects JSON vs markdown rendering. It also explains resolution is upstream and what each format provides, adding crucial context not in the bare 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 the tool 'fetches an AI-synthesised Moon-sign horoscope' with specific details about what it returns (structured guidance fields plus metadata). It explicitly distinguishes this from sibling tools like 'asterwise_get_natal_chart' and 'asterwise_get_gochar' by explaining this provides 'sign-level transit-flavoured copy' rather than personalized charts or planetary transit snapshots.

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 guidance in multiple sections: 'SECTION: WHAT THIS TOOL COVERS' explains what it does and doesn't do (no natal chart, divisional charts, or dasha), 'SECTION: WORKFLOW' specifies when to use this tool (standalone) and when to use 'asterwise_get_natal_chart' instead, and 'SECTION: DO NOT CONFUSE WITH' clearly differentiates from two specific sibling tools with their purposes.

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

asterwise_get_karmic_lessonsA
Read-onlyIdempotent
Inspect

Identifies karmic lessons by scanning all letter values in the full name and finding which digits 1–9 are absent. Each missing digit represents an area where experience is thin and development is needed in this lifetime.

SECTION: WHAT THIS TOOL COVERS Every letter in the name maps to a digit 1–9. Digits that never appear indicate karmic lessons — life areas the soul has not yet fully explored. A person missing the digit 4 (associated with system-building, discipline, endurance) will find practical organisation a recurring challenge. Missing multiple digits intensifies the developmental pressure in those areas. Digit zero is not used — only 1 through 9.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_numerology_profile — see karmic lessons alongside all core numbers.

SECTION: INPUT CONTRACT name — Full legal name as used at birth. Example: 'Arjun Mehta' — scan all 9 letters for their Pythagorean digit values. Letters present: A=1, R=9, J=1, U=3, N=5, M=4, E=5, H=8, T=2, A=1 Digits present: {1,2,3,4,5,8,9} → Missing: {6,7}

SECTION: OUTPUT CONTRACT data.karmic_lessons (int array — missing digits 1–9, sorted ascending; empty if none missing) data.has_karmic_lessons (bool — false when all nine digits are present)

SECTION: RESPONSE FORMAT response_format=json — structured JSON. response_format=markdown — human-readable. Both modes return identical underlying data.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None. INTERNAL_ERROR: upstream failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_balance_number — uses only first letters (initials), not all letters. asterwise_get_expression_number — reduces all letters to a single number; does not scan for absent digits.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Adds compute class (FAST_LOOKUP), input/output contracts, and error handling details beyond annotations. Annotations (readOnlyHint, idempotentHint) are consistent.

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?

Well-structured with clear sections but long; some repetition of output schema info, but no waste.

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?

Covers input, output, error handling, workflow, and distinctions from siblings. Complete for a lookup tool with output schema.

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?

Despite 0% schema coverage, description provides detailed example for 'name' and explains response_format options, fully compensating.

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 identifies karmic lessons by scanning letter values and finding absent digits. It distinguishes from siblings like asterwise_get_balance_number and asterwise_get_expression_number.

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 DO NOT CONFUSE WITH section and WORKFLOW with BEFORE/AFTER, including direct sibling references.

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

asterwise_get_kp_chartA
Read-onlyIdempotent
Inspect

Builds a KP natal chart with sub-lords on grahas and twelve cusps from BirthData using the KP ayanamsa in the response.

SECTION: WHAT THIS TOOL COVERS Krishnamurti Paddhati charting: lagna row, planet rows with nakshatra_index and sub_lord, house_cusps with matching lords. Recommend BirthData.ayanamsa='kp' for coherent physics — any enum value is accepted locally and forwarded. Accurate birth time matters; midnight placeholder yields unreliable sub-lords for event timing. Not radix (asterwise_get_natal_chart) nor prashna (asterwise_get_prashna_chart).

SECTION: WORKFLOW BEFORE: RECOMMENDED — cross-check birth record before trusting sub-lords. AFTER: asterwise_get_kp_significators — house-level significator chains.

SECTION: INPUT CONTRACT ayanamsa choice is not forced locally — mismatched settings still post to upstream. time='00:00' is accepted without warning.

SECTION: OUTPUT CONTRACT data.ayanamsa (string — 'kp') data.lagna: rashi (string) rashi_index (int) longitude (float) nakshatra_lord (string) sub_lord (string) data.planets{} — Sun..Ketu: longitude (float) rashi_index (int) rashi (string) degree (float) is_retrograde (bool) house (int) nakshatra_index (int — 0–26) nakshatra_lord (string) sub_lord (string) data.house_cusps{} — keys '1'..'12': longitude (float) rashi_index (int) rashi (string) nakshatra_lord (string) sub_lord (string)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — BirthData Pydantic only.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Sub-lord chains degrade when true birth time unknown.

SECTION: DO NOT CONFUSE WITH asterwise_get_natal_chart — classical bundle without KP sub-lords. asterwise_get_kp_ruling_planets — live moment rulers, not natal cusps.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

The description adds significant behavioral context beyond annotations: it states that sub-lord chains degrade with unknown birth time, that midnight placeholder yields unreliable results, that ayanamsa choice is not forced locally but mismatched settings post upstream, and that time='00:00' is accepted without warning. These details are not in the annotations and enhance transparency. No contradiction.

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 (WHAT, WORKFLOW, INPUT/OUTPUT CONTRACT, etc.) and front-loads the main purpose. While it is lengthy, the sections are justified by the tool's complexity. It could be slightly more concise, but it earns a 4 for good organization and no wasted sentences.

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 complexity (KP chart with sub-lords, multiple parameters, output schema exists), the description is comprehensive. It covers purpose, usage guidelines, behavioral traits, parameter nuances, error contracts, output structure (referencing schema), and sibling differentiation. The presence of an output schema means return values are already documented, and the description complements it well.

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 provides descriptions for all parameters, including nested fields in 'birth'. The description adds value by explaining that ayanamsa choice is not locally enforced and that time='00:00' is accepted without warning, which are nuances beyond the schema. However, it does not extensively elaborate on all parameters, so a score of 4 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 clearly states it builds a KP natal chart with sub-lords, using the KP ayanamsa. It explicitly distinguishes from sibling tools like asterwise_get_natal_chart (classical without sub-lords) and asterwise_get_prashna_chart, satisfying the specific verb+resource requirement and sibling 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 guidance: recommends cross-checking birth record before use, suggests following up with asterwise_get_kp_significators, and warns not to confuse with radix or prashna chart tools. It also mentions limitations like unreliable sub-lords with unknown birth time, offering clear when-to-use and when-not-to-use context.

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

asterwise_get_kp_ruling_planetsA
Read-onlyIdempotent
Inspect

Computes KP ruling planets for the instantaneous chart at lat/lon with no birth data and returns day lord, Moon/Ascendant lord chains, and a deduplicated ruling_planets list.

SECTION: WHAT THIS TOOL COVERS Current-moment KP snapshot: target_utc, day_lord, Moon and Ascendant tuples with sign/nakshatra/sub lords, ruling_planets[] unique names. Not natal positions (asterwise_get_kp_chart) and not house significators (asterwise_get_kp_significators). Coordinate sanity is upstream — not locally validated floats beyond whatever FastMCP passes.

SECTION: WORKFLOW BEFORE: None — this tool is standalone. AFTER: asterwise_get_kp_chart — if natal confirmation is needed afterwards.

SECTION: INPUT CONTRACT lat and lon only; no date parameter — "now" is implicit on the server clock.

SECTION: OUTPUT CONTRACT data.ayanamsa (string — 'kp') data.target_utc (string — ISO UTC) data.day_lord (string — planet name) data.moon: longitude (float) rashi (string) sign_lord (string) nakshatra_lord (string) sub_lord (string) data.ascendant — same fields as data.moon data.ruling_planets[] (string array — unique names, deduplicated)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — lat/lon not range-checked locally.

INVALID_PARAMS (upstream): — None — coordinate errors surface as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Represents instantaneous sky — differs from natal stored charts.

SECTION: DO NOT CONFUSE WITH asterwise_get_kp_chart — needs BirthData and returns full natal KP cusps. asterwise_get_prashna_chart — horary keyword workflow, not ruling-planet snapshot.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lonYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already provide readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context beyond this: it specifies the tool uses server clock for 'now', notes coordinate validation is upstream, describes edge cases (instantaneous vs. natal), and details error handling (e.g., INTERNAL_ERROR for upstream failures). This enriches behavioral understanding without contradicting 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 clear sections (e.g., WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT), making it easy to scan. Each sentence adds value, such as distinguishing from siblings or explaining output fields, with no redundant information. The front-loaded summary immediately states the core purpose.

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 complexity (astrological computations), the description is highly complete. It covers purpose, usage, input semantics, output structure (detailed in OUTPUT CONTRACT), error handling, and sibling differentiation. With annotations covering safety and an output schema likely detailing return values, the description fills all necessary contextual gaps without over-explaining structured data.

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 0%, so the description must compensate. It explains 'lat and lon only; no date parameter — "now" is implicit on the server clock', clarifying the temporal aspect. For 'response_format', it details the differences between 'json' and 'markdown' modes. However, it doesn't specify expected formats or ranges for lat/lon beyond noting they're 'not range-checked locally', leaving some ambiguity.

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 clear verb ('Computes') and resource ('KP ruling planets'), specifying it's for an instantaneous chart with lat/lon and no birth data. It explicitly distinguishes from siblings like 'asterwise_get_kp_chart' (needs birth data) and 'asterwise_get_kp_significators' (house significators), making the purpose specific and well-differentiated.

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 'WHAT THIS TOOL COVERS' section details what it does and does not cover, while 'DO NOT CONFUSE WITH' explicitly lists alternative tools and when to use them (e.g., 'asterwise_get_kp_chart — needs BirthData'). The 'WORKFLOW' section provides clear before/after guidance, making usage context explicit.

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

asterwise_get_kp_significatorsA
Read-onlyIdempotent
Inspect

Computes KP significator chains for all houses or one optional house from BirthData and returns house tables plus planet-tier reverse indexes.

SECTION: WHAT THIS TOOL COVERS For each house string key '1'..'12', lists sign_lord, occupants, nakshatra lord chains, and unions; planet_significators{} exposes tiered house lists per graha. Optional house_number filters upstream when provided. Out-of-range house integers are not validated locally — upstream handles errors as MCP INTERNAL_ERROR. Requires same birth tuple as asterwise_get_kp_chart for coherent analysis.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_kp_chart — establish cusps before significators. AFTER: None.

SECTION: INPUT CONTRACT house_number optional int; omit for all twelve. Values outside 1..12 are validated upstream only.

SECTION: OUTPUT CONTRACT data.ayanamsa (string — 'kp') data.significators{} — keys '1'..'12': house (int) sign_lord (string) occupants[] (string array) nak_of_occupants[] (string array) nak_of_lord[] (string array) all_significators[] (string array) data.planet_significators{} — per planet: tier1_houses[] (int array) tier2_houses[] (int array) tier3_houses[] (int array) tier4_houses[] (int array) all_significators[] (int array)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — house_number not bounds-checked here.

INVALID_PARAMS (upstream): — None — invalid house indices surface as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Filtering to one house still returns planet_significators{} for context.

SECTION: DO NOT CONFUSE WITH asterwise_get_kp_chart — cusps and sub-lords, not tiered significator unions. asterwise_get_natal_chart — classical drishti matrices differ from KP significator tiers.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
house_numberNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds value by detailing: error handling (out-of-range house numbers → MCP INTERNAL_ERROR upstream), compute class (MEDIUM_COMPUTE), and edge cases (filtered output still includes planet_significators for context). This context is beyond what annotations provide.

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 long but well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.). The first sentence immediately conveys the core purpose. Every section earns its place given the tool's complexity, though brevity could be slightly improved.

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 no output schema, the description provides a detailed 'OUTPUT CONTRACT' covering every field and their types. It also includes an 'ERROR CONTRACT' listing possible errors and edge cases. The description fully addresses the tool's purpose, inputs, outputs, workflow, and differentiation, leaving no ambiguity.

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 description coverage is low (33%), but the description compensates thoroughly. The 'INPUT CONTRACT' section explains house_number behavior (omit for all, upstream validation for out-of-range), and the 'RESPONSE FORMAT' section elaborates on the two values of response_format. The birth object is already documented in the schema, so no repetition 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 a specific verb and resource: 'Computes KP significator chains for all houses or one optional house from BirthData.' It clearly distinguishes from sibling tools like asterwise_get_kp_chart and asterwise_get_natal_chart in the 'DO NOT CONFUSE WITH' section, plus notes a recommended workflow dependency on asterwise_get_kp_chart.

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 includes a 'WORKFLOW' section stating (BEFORE: RECOMMENDED — asterwise_get_kp_chart), and a 'DO NOT CONFUSE WITH' section naming alternative tools and their different purposes. The description also clarifies when to omit the optional house_number parameter and mentions upstream validation behavior.

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

asterwise_get_lal_kitab_chartA
Read-onlyIdempotent
Inspect

Produces the Lal Kitab house and planet schema plus Rin (debt) flags from BirthData using Lal Kitab placement rules. Lal Kitab uses a distinct astrological system from standard Vedic computation, with its own house-based remedies.

SECTION: WHAT THIS TOOL COVERS Returns data.system 'lal_kitab', ayanamsa, planets{} with lk_house and pucca/kachcha flags, twelve houses{} with occupants and significations, and rin_analysis with boolean debts, active_rins[], and rin_remedies[] rows. Do not merge these houses with asterwise_get_natal_chart Bhava Chalit without explicit user intent — frameworks differ.

SECTION: WORKFLOW BEFORE: None — standalone for Lal Kitab queries. AFTER: asterwise_get_lal_kitab_remedies — practical totkas aligned to this chart.

SECTION: INPUT CONTRACT BirthData global contract; mixing interpretive systems in prose is a caller concern, not validated here.

SECTION: OUTPUT CONTRACT data.system (string — 'lal_kitab') data.ayanamsa (string) data.planets{} — Sun..Ketu: longitude (float) rashi_index (int) rashi (string) lk_house (int — 1–12) house_lord (string) is_retrograde (bool) pucca_ghar (bool) kachcha_ghar (bool) uchcha (bool) neecha (bool) pucca_house (int) kachcha_house (int) data.houses{} — keys '1'..'12': house (int) rashi_index (int) rashi (string) lord (string) occupants[] (string array) signification (string) has_benefic (bool) has_malefic (bool) data.rin_analysis: pitru_rin, matru_rin, bhai_rin, stri_rin, dev_rin (bool) active_rins[] (string array) rin_remedies[] — { rin (string), planet (string), totka (string) }

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — BirthData Pydantic only.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Lal Kitab houses are not interchangeable with cusps.

SECTION: DO NOT CONFUSE WITH asterwise_get_natal_chart — classical radix, not Lal Kitab lk_house logic. asterwise_get_lal_kitab_remedies — remedy list without full chart geometry.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds substantial behavioral context: compute class MEDIUM_COMPUTE, error contracts (INVALID_PARAMS, INTERNAL_ERROR), edge cases, and notes that Lal Kitab houses differ from cusps. This goes 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.

Conciseness4/5

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

The description is well-structured with labeled sections (e.g., 'WHAT THIS TOOL COVERS', 'WORKFLOW', 'OUTPUT CONTRACT'). It is front-loaded with the main purpose. However, it is lengthy and includes extensive output details that could be shortened.

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 complexity (nested objects, output schema present), the description covers workflow, error handling, output format options, and distinctions from similar tools. The output schema is present, so return values are fully documented. No gaps remain.

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 50% but the schema itself provides detailed descriptions for most fields inside the 'birth' object. The description does not add additional semantic meaning beyond what the schema already provides, such as clarifying the 'response_format' enum. With high schema coverage, a baseline 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 begins with a clear verb and resource: 'Produces the Lal Kitab house and planet schema plus Rin (debt) flags from BirthData using Lal Kitab placement rules.' It distinguishes from siblings like asterwise_get_natal_chart and asterwise_get_lal_kitab_remedies in the 'DO NOT CONFUSE WITH' section.

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 includes a 'WORKFLOW' section stating 'BEFORE: None — standalone for Lal Kitab queries. AFTER: asterwise_get_lal_kitab_remedies.' It also lists similar tools to avoid confusion. However, it does not explicitly state when not to use this tool, which would strengthen guidance.

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

asterwise_get_lal_kitab_remediesA
Read-onlyIdempotent
Inspect

Lists Lal Kitab style totkas per stressed planet from BirthData with priority tiers and typed action rows (remedy, donation, keep, avoid).

SECTION: WHAT THIS TOOL COVERS Outputs data.system, ayanamsa, and remedies[] entries tying planets to lk context and nested remedies[] instructions. Distinct from classical mantra/gem rows (asterwise_get_remedies). Best interpreted alongside asterwise_get_lal_kitab_chart for house context.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_lal_kitab_chart — see chart before applying totkas. AFTER: None.

SECTION: INPUT CONTRACT BirthData only.

SECTION: OUTPUT CONTRACT data.system (string — 'lal_kitab') data.ayanamsa (string) data.remedies[] — each: planet (string) lk_house (int) rashi (string) pucca_ghar (bool) kachcha_ghar (bool) uchcha (bool) neecha (bool) priority (string — 'high', 'medium', or 'low') remedies[] — { type (string — 'remedy', 'donation', 'keep', or 'avoid'), action (string) }

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — BirthData Pydantic only.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Empty remedies[] possible when no graha needs attention — still success if upstream returns so.

SECTION: DO NOT CONFUSE WITH asterwise_get_remedies — mantra/gem prescriptions, not Lal Kitab totkas. asterwise_get_gemstone_recommendations — classical Ratna focus, not household remedies.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Beyond annotations (readOnlyHint=true, idempotentHint=true, etc.), the description adds extensive behavioral details: it specifies input contract (BirthData only), output contract with field names and types, response format modes (json/markdown with identical data), compute class (MEDIUM_COMPUTE), and a detailed error contract including edge cases (empty remedies). 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 well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), front-loading the main purpose. Every section adds value, but the length could be slightly reduced without losing clarity. Overall, it is efficient and well-organized.

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 complexity (nested input, output schema with arrays, response formats, error handling, sibling tools), the description covers all relevant aspects: workflow, output fields, error contracts, and differentiation from similar tools. The output contract is detailed enough for programmatic use, and the presence of an output schema further supports completeness.

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 50% (only 'birth' has a top-level description). The description merely states 'BirthData only' in the INPUT CONTRACT, which does not add meaningful detail beyond what the schema already provides for nested parameters. While the schema describes each nested field well, the description does not compensate for the missing top-level description of 'response_format' or provide parameter usage tips.

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 clear verb-resource pairing: 'Lists Lal Kitab style totkas per stressed planet from BirthData with priority tiers and typed action rows.' It explicitly distinguishes from siblings like asterwise_get_remedies and asterwise_get_gemstone_recommendations in both the 'WHAT THIS TOOL COVERS' section and the 'DO NOT CONFUSE WITH' section, making the tool's specific scope 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?

The WORKFLOW section explicitly recommends using asterwise_get_lal_kitab_chart before this tool, providing clear context on when to use it. The DO NOT CONFUSE WITH section lists two alternatives with explanations of what they cover (mantra/gem vs. totkas, classical Ratna focus vs. household remedies), giving explicit guidance on when not 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.

asterwise_get_lo_shu_gridA
Read-onlyIdempotent
Inspect

Derives a Lo Shu three-by-three frequency grid from birth-date digits and annotates planes, missing or repeated digits, and per-digit traits.

SECTION: WHAT THIS TOOL COVERS Chinese Lo Shu analysis: counts how often each digit one through nine appears in the date string, lays counts into the classical magic-square positions, and adds plane_analysis plus number_analysis entries keyed by digit strings '1'..'9'. Zero digits are ignored for placement. It does not compute Pythagorean Life Path (asterwise_get_numerology_profile) or Chaldean compounds.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: None.

SECTION: INPUT CONTRACT date string only; validated upstream.

SECTION: OUTPUT CONTRACT data.birth_date (string) data.grid — three-by-three nested int array (row-major): row positions map to numbers [4,9,2], [3,5,7], [8,1,6] respectively; cell value = count of that digit in the date (0 if absent) data.present_numbers[] (int array) data.missing_numbers[] (int array) data.repeated_numbers[] (int array — digits appearing at least twice) data.plane_analysis: thought_plane — { numbers[] (int array), description (string), complete (bool) } will_plane — same shape action_plane — same shape golden_yod — same shape silver_yod — same shape data.number_analysis{} — keys '1' through '9' (string keys): count (int) plane (string) trait (string) status (string — 'missing', 'present', or 'strong') note (string)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Zeros in ISO dates are skipped — only digits one through nine populate the grid.

SECTION: DO NOT CONFUSE WITH asterwise_get_numerology_profile — letter-based Western numbers, not digit-frequency Lo Shu. asterwise_get_name_correction — spelling harmonics, not birth-date grids.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already provide readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context beyond this: it specifies the tool ignores zero digits, details the compute class (MEDIUM_COMPUTE), and outlines error handling (upstream validation, INTERNAL_ERROR cases). However, it doesn't describe rate limits or auth needs, keeping it from a perfect score.

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 (WHAT THIS TOOL COVERS, WORKFLOW, etc.), each sentence adds value, and it's front-loaded with the core purpose. There's no redundant information, and the structured format enhances readability 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?

Given the tool's complexity, rich output schema detailed in the description, and comprehensive annotations, the description is complete. It fully explains the output structure (grid, planes, number analysis), error handling, compute class, and distinctions from siblings. The presence of an output schema means return values are adequately documented.

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?

With 0% schema description coverage, the description compensates well. It explains 'date string only; validated upstream' and details the response_format options (json vs markdown) and their implications. While it doesn't specify date format examples, it clarifies that validation occurs upstream and both formats return identical data.

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 the tool 'Derives a Lo Shu three-by-three frequency grid from birth-date digits' and provides detailed coverage of what it analyzes (digit frequencies, plane analysis, number traits). It clearly distinguishes from sibling tools like 'asterwise_get_numerology_profile' and 'asterwise_get_name_correction' by specifying what it does NOT compute.

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 'SECTION: DO NOT CONFUSE WITH' explicitly names alternative tools and explains when NOT to use this tool (e.g., for Pythagorean Life Path or Chaldean compounds). The 'SECTION: WHAT THIS TOOL COVERS' further clarifies scope, and 'SECTION: WORKFLOW' indicates it's standalone with no prerequisites.

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

asterwise_get_lucky_numbersA
Read-onlyIdempotent
Inspect

Fetches condensed lucky-number guidance for a name and birth date including primary and secondary picks, power number, interpretation, and a date_specific flag.

SECTION: WHAT THIS TOOL COVERS Thin numerology endpoint mirroring lucky_numbers[] from the full profile but omitting pinnacles, challenges, and long interpretations. data.date_specific is always false (profile-derived). Use when payload size matters. It is not the full profile (asterwise_get_numerology_profile) nor Lo Shu counts (asterwise_get_lo_shu_grid).

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_numerology_profile — if deeper context is required.

SECTION: INPUT CONTRACT name and date forwarded upstream without local checks.

SECTION: OUTPUT CONTRACT data.lucky_numbers[] (int array — primary and secondary values) data.power_number (int — Life Path anchor) data.date_specific (bool — always false; derived from profile) data.interpretation (string)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Duplicates asterwise_get_numerology_profile lucky list — choose this tool for smaller JSON only.

SECTION: DO NOT CONFUSE WITH asterwise_get_numerology_profile — full multi-section profile, not lucky-number-only payload. asterwise_get_number_meaning — dictionary entry for one integer, not personalised lucky sets.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

The description adds valuable behavioral context beyond what annotations provide. While annotations declare readOnlyHint=true, idempotentHint=true, etc., the description specifies that this is a 'FAST_LOOKUP' compute class, that all validation is upstream, that upstream failures surface as MCP INTERNAL_ERROR, and that the tool mirrors lucky_numbers[] from the full profile. This provides practical implementation details that help the agent understand performance characteristics and error handling.

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 exceptionally well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, OUTPUT CONTRACT, etc.). Each sentence earns its place by providing specific, actionable information. The information is front-loaded with the core purpose, followed by detailed sections that can be referenced as needed. No wasted words or redundancy.

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 complexity and the presence of an output schema, the description provides comprehensive context. It explains what the tool does, when to use it, input behavior, output structure (even though an output schema exists), compute characteristics, error handling, and differentiation from siblings. The description successfully bridges the gap between structured fields and practical usage, making it complete for agent decision-making.

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?

With 0% schema description coverage, the description carries the full burden of explaining parameters. It clearly states that 'name and date forwarded upstream without local checks' and provides detailed information about the response_format parameter, explaining that both 'json' and 'markdown' options return identical data but in different formats for different use cases. This adds meaningful context beyond the bare 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 the tool 'fetches condensed lucky-number guidance for a name and birth date' with specific details about what's included (primary/secondary picks, power number, interpretation, date_specific flag). It explicitly distinguishes this from sibling tools asterwise_get_numerology_profile and asterwise_get_lo_shu_grid, making the purpose specific and differentiated.

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 guidance on when to use this tool ('Use when payload size matters') and when not to use it ('It is not the full profile... nor Lo Shu counts'). It names specific alternatives (asterwise_get_numerology_profile for deeper context, asterwise_get_number_meaning for dictionary entries) and includes a 'DO NOT CONFUSE WITH' section that clearly delineates boundaries with sibling tools.

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

asterwise_get_maturity_numberA
Read-onlyIdempotent
Inspect

Calculates the Maturity number as the sum of Life Path and Expression numbers, reduced to a single digit or master number. Represents the underlying wish or true desire that becomes conscious around age 35 and fully emerges by midlife.

SECTION: WHAT THIS TOOL COVERS The Maturity number is sometimes called the True Goal — the final attainment that Life Path and Expression together point toward. It becomes increasingly dominant after age 35 and is the most important number for understanding the second half of life.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_numerology_profile — confirm Life Path and Expression before interpreting their sum. AFTER: None.

SECTION: INPUT CONTRACT name — Full legal name as used at birth. Example: 'Arjun Mehta' date — Birth date in YYYY-MM-DD format. Example: '1985-11-12'

SECTION: OUTPUT CONTRACT data.maturity_number (int — LP + Expression, reduced; master numbers preserved) data.life_path_number (int — component) data.expression_number (int — component) data.is_master_number (bool — true if maturity is 11, 22, or 33)

SECTION: RESPONSE FORMAT response_format=json — structured JSON. response_format=markdown — human-readable. Both modes return identical underlying data.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None. INTERNAL_ERROR: upstream failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_numerology_profile — returns maturity_number as part of the full profile. asterwise_get_personal_cycles — temporal cycles that change annually, not a fixed number.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already indicate readOnly and idempotent behavior. Description adds context: compute class (FAST_LOOKUP), the fixed nature of the number, timing (becomes dominant after age 35), and error contracts. 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?

Description is well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.) and front-loaded with the core operation. While somewhat lengthy, each section serves a purpose and provides necessary context without redundancy.

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 presence of annotations and an output schema, the description covers all necessary aspects: purpose, usage, parameter semantics, behavioral notes, error handling, and differentiation from siblings. It is fully adequate for an agent to use the tool correctly.

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 has 0% description coverage, but the description's 'INPUT CONTRACT' section provides clear definitions and examples for each parameter (name, date, response_format), compensating fully for the lack of schema 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?

Description starts with a clear verb and resource: 'Calculates the Maturity number...' and explicitly differentiates from siblings in 'DO NOT CONFUSE WITH' section, listing asterwise_get_numerology_profile and asterwise_get_personal_cycles.

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 workflow with BEFORE and AFTER recommendations, and a 'DO NOT CONFUSE WITH' section that names specific alternative tools. This gives clear guidance on when to use this tool and when not to.

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

asterwise_get_muhurtaA
Read-onlyIdempotent
Inspect

Searches a date span for top-scoring muhurta windows for a named activity using Panchanga, Choghadiya, and classical siddhi flags at a location.

SECTION: WHAT THIS TOOL COVERS Evaluates marriage, travel, griha_pravesh, business, education, medical, and vehicle_purchase (exact spellings upstream). Returns scored windows with tithi, nakshatra-related yoga name (Panchanga yoga, not natal yogas), vara, choghadiya metadata, boolean guards (rahu kaal, abhijit, amrita/sarvartha siddhi), and textual reasons. Unsupported activity strings are rejected upstream. It does not return a full month calendar (asterwise_get_panchanga_calendar) or only Choghadiya rows (asterwise_get_choghadiya).

SECTION: WORKFLOW BEFORE: None — this tool is standalone. AFTER: asterwise_get_panchanga — drill into Panchanga limbs for a chosen winning date.

SECTION: INPUT CONTRACT activity must be one of the supported English slugs above — not validated locally; bad values become MCP INTERNAL_ERROR. from_date/to_date ordering and span rules are enforced upstream. Location coordinates reuse LocationInput validation for lat/lon/date pattern.

SECTION: OUTPUT CONTRACT data.event_type (string) data.from_date (string) data.to_date (string) data.timezone (string) data.ayanamsa (string) data.total_windows_evaluated (int) data.top_windows[] — each: date (string — YYYY-MM-DD) start (string — HH:MM local) end (string — HH:MM local) score (int — 0–100) choghadiya (string) choghadiya_type (string) yoga (string — Panchanga yoga name) vara (string) vara_number (int — 1–7) tithi (string) tithi_number (int — 1–30) is_rahu_kaal (bool) is_abhijit (bool) is_amrita_siddhi (bool) is_sarvartha_siddhi (bool) reason (string)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — Invalid LocationInput date/lat/lon → MCP INVALID_PARAMS

INVALID_PARAMS (upstream): — None — bad activity, range, or ordering surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Panchanga yoga names here are not asterwise_get_yogas natal yogas.

SECTION: DO NOT CONFUSE WITH asterwise_get_choghadiya — enumerates all Choghadiya for one day without activity scoring across a span. asterwise_get_panchanga — single-day limb detail, not ranked muhurta search.

ParametersJSON Schema
NameRequiredDescriptionDefault
to_dateYes
activityYes
locationYesFor tools that need location but not birth time.
from_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

The description adds substantial behavioral context beyond annotations. While annotations indicate read-only, non-destructive, idempotent operations, the description details compute class ('MEDIUM_COMPUTE'), error contracts (INVALID_PARAMS, INTERNAL_ERROR), edge cases (yoga name clarification), and specific rejection rules for unsupported activities. This provides crucial operational context not covered by 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 exceptionally well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), each containing only essential information. Every sentence serves a specific purpose with zero redundancy, making it easy to scan and understand despite the complexity of the tool.

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 complexity and the presence of an output schema, the description provides complete context: it explains what the tool does, when to use it, input requirements, output structure, error handling, compute characteristics, and sibling distinctions. The output schema existence means the description doesn't need to explain return values, and it focuses appropriately on behavioral and usage aspects.

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?

With only 25% schema description coverage, the description compensates well by explaining parameter semantics: it specifies that 'activity must be one of the supported English slugs' and lists them, clarifies that 'from_date/to_date ordering and span rules are enforced upstream', and explains location validation. However, it doesn't detail all four parameters' formats beyond what the schema minimally 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 explicitly states the tool 'Searches a date span for top-scoring muhurta windows for a named activity using Panchanga, Choghadiya, and classical siddhi flags at a location.' This is a specific verb ('searches') with clear resources ('date span', 'muhurta windows', 'activity') and distinguishes from siblings by naming what it does not return ('full month calendar' or 'only Choghadiya rows').

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 guidance on when to use this tool versus alternatives: 'BEFORE: None — this tool is standalone. AFTER: asterwise_get_panchanga — drill into Panchanga limbs for a chosen winning date.' It also clearly distinguishes from sibling tools like 'asterwise_get_choghadiya' and 'asterwise_get_panchanga' with specific 'DO NOT CONFUSE WITH' section.

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

asterwise_get_nakshatra_detailsA
Read-onlyIdempotent
Inspect

Looks up static metadata for one of twenty-seven nakshatras by exact name and returns interpretive, professional, activity, and body-map reference data.

SECTION: WHAT THIS TOOL COVERS Vedanga/classical reference only — no chart computation. Covers deity, ruler, symbol, gana, nature, classical vs modern prose, profession vectors, life themes, keywords, strengths/challenges, favourable vs unfavourable activities, and body_map. Names are case-sensitive exact matches (Ashwini … Revati list). It does not compute birth nakshatra from BirthData (use asterwise_get_natal_chart).

SECTION: WORKFLOW BEFORE: None — this tool is standalone. AFTER: None.

SECTION: INPUT CONTRACT nakshatra_name is forwarded raw — no local fuzzy matching or normalisation.

SECTION: OUTPUT CONTRACT data.name (string) data.index (int — 0–26) data.interpretation: source (string) nakshatra_number (int) name (string) sanskrit (string) span (string) symbol (string) deity (string) ruling_planet (string) sign (string) sign_lord (string) gana (string) nature (string) body_part (string) classical_qualities[] (string array) appearance — { classical (string), modern (string) } nature_description — { classical (string), modern (string) } profession — { primary[] (string array), secondary[] (string array), note (string), modern (string) } life_themes — { core, karmic_path, challenge, gift, modern (strings) } keywords[] (string array) strengths[] (string array) challenges[] (string array) data.activities: favorable_activities[] (string array) unfavorable_activities[] (string array) data.body_map: parts[] (string array) sensitivity (string)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — name passes straight through.

INVALID_PARAMS (upstream): — None — unknown names surface as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Exact spelling required — no fuzzy recovery.

SECTION: DO NOT CONFUSE WITH asterwise_get_natal_chart — computes birth nakshatra from time/place, not encyclopaedic copy. asterwise_get_dasha — uses Moon nakshatra for timing, not this lookup table.

ParametersJSON Schema
NameRequiredDescriptionDefault
nakshatra_nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds important behavioral details: exact match required, no fuzzy matching, error contracts for unknown names (MCP INTERNAL_ERROR), and the compute class (FAST_LOOKUP). There is no 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 structured into clear sections (e.g., 'SECTION: WHAT THIS TOOL COVERS', 'SECTION: WORKFLOW') and is front-loaded with the purpose. Every section earns its place by providing specific, actionable information without redundancy.

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 presence of a detailed output schema and annotations, the description covers all necessary context: input constraints, error handling, compute class, and distinctions from sibling tools. It is complete for a complex tool with 27 possible inputs and a rich output structure.

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?

Although schema coverage is 0%, the description provides extensive semantic meaning for both parameters: nakshatra_name requires exact case-sensitive spelling, and response_format options (json/markdown) are explained with their impact on output structure. This far exceeds the limited schema information.

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+resource: 'Looks up static metadata for one of twenty-seven nakshatras by exact name and returns interpretive, professional, activity, and body-map reference data.' It clearly distinguishes from siblings like asterwise_get_natal_chart and asterwise_get_dasha in the 'DO NOT CONFUSE WITH' section.

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 workflow sections ('BEFORE: None', 'AFTER: None') and a 'DO NOT CONFUSE WITH' that lists alternative tools and when to use them instead. It also states that the tool does not compute birth nakshatra from BirthData, which guides the agent to use asterwise_get_natal_chart instead.

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

asterwise_get_nakshatra_predictionA
Read-only
Inspect

Returns a personalised daily prediction using Tarabala and Chandrabala.

SECTION: WHAT THIS TOOL COVERS Computes the individual's daily auspiciousness score by:

  1. TARABALA: Counts from birth nakshatra to today's transit Moon nakshatra (inclusive). The remainder mod 9 gives the Tara (1=Janma, 2=Sampat/Wealth, 3=Vipat/Danger, 4=Kshema/Prosperity, 5=Pratyak/Obstacle, 6=Sadhana/Achievement, 7=Naidhana/Destruction, 8=Mitra/Friend, 9=Ati-Mitra/Great Friend).

  2. CHANDRABALA: Transit Moon's house from natal Moon (favorable in houses 1,3,6,7,10,11).

  3. TRANSIT NAKSHATRA QUALITY: The type of today's Moon nakshatra (Dhruva/Chara/Ugra/Tikshna/Kshipra/Mridu/Mishra) with auspicious and inauspicious activities. Combined daily score out of 4 with label (Excellent/Good/Moderate/Challenging).

SECTION: WORKFLOW BEFORE: None — birth data computes everything needed. AFTER: asterwise_get_panchanga — for full daily panchanga context.

SECTION: INPUT CONTRACT birth — BirthData (date, time, lat, lon, timezone). target_date (optional): YYYY-MM-DD. Defaults to today.

SECTION: OUTPUT CONTRACT data.target_date (string) data.birth_nakshatra{}: name (string), index (int 0-26) data.natal_moon_sign_index (int 0-11) data.transit_moon{}: nakshatra (string), nakshatra_index (int), rashi_index (int) data.tarabala{}: tara_number (int 1-9), count_from_birth (int), name (string), meaning (string), is_favorable (bool), interpretation (string) data.chandrabala{}: moon_house_from_natal (int 1-12), is_favorable (bool), favorable_houses[] (int array) data.daily_score{}: score (int 0-4), max_score (4), label (string) data.transit_nakshatra_quality{}: nakshatra (string), quality_type (string), english (string), auspicious_for[] (string array), inauspicious_for[] (string array) data.nakshatra_activities{}: favorable[] (string array), unfavorable[] (string array) SECTION: COMPUTE CLASS MEDIUM_COMPUTE — natal chart + ephemeris Moon position.

SECTION: ERROR CONTRACT INVALID_PARAMS (local): BirthData Pydantic violations → MCP INVALID_PARAMS INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_nakshatra_details — static nakshatra reference, not personalised prediction. asterwise_get_panchanga — daily panchanga (tithi, yoga, karana), not Tarabala scoring. asterwise_get_biorhythm — Western biorhythm cycles, not classical Vedic prediction.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
target_dateNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

The description extensively discloses behavioral details beyond the annotations. It explains the computation logic (Tarabala counting, Chandrabala house analysis, transit nakshatra quality), indicates it is a read-only computation ('MEDIUM_COMPUTE'), and provides no side effects. This complements the readOnlyHint annotation with rich context.

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 and front-loads the main purpose. However, it is verbose, including details like exact computation steps and output fields that could be inferred from the output schema. This may reduce efficiency for an AI agent looking for quick scanning.

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 a complex input and output, the description is thorough. It covers input parameters, output structure, compute class, error contracts, and workflow suggestions. The presence of an output schema does not diminish the need for the detailed output contract provided, as it adds descriptions to the fields.

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 has 33% description coverage, but the description's 'INPUT CONTRACT' section adds meaning: it explains that 'birth' is a BirthData object, 'target_date' is optional YYYY-MM-DD defaulting to today, and lists subfields. However, 'response_format' is not mentioned in the input contract, and the description does not elaborate on all parameter details, leaving some burden on 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 the tool returns 'a personalised daily prediction using Tarabala and Chandrabala.' It details the computation components (Tarabala, Chandrabala, transit nakshatra quality) and explicitly distinguishes from three sibling tools in the 'DO NOT CONFUSE WITH' section.

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 guidance on when to use this tool versus alternatives. It includes a 'WORKFLOW' section noting it can be used after 'asterwise_get_panchanga' for full context, and the 'DO NOT CONFUSE WITH' section clearly specifies when to use 'asterwise_get_nakshatra_details', 'asterwise_get_panchanga', or 'asterwise_get_biorhythm' instead.

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

asterwise_get_name_correctionA
Read-onlyIdempotent
Inspect

Scores the current spelling of a personal name against the birth-date Life Path, suggests alternate spellings with harmony metrics, and echoes recommendation stub fields.

SECTION: WHAT THIS TOOL COVERS Returns data.current_name metrics (expression, soul urge, personality, master and karmic flags, compatibility band, harmony_score 1..5) plus data.alternatives[] with identical shape per suggestion. data.recommendation is currently null (stub). Empty alternatives[] means no better spelling was found — still success. Not for business entities (asterwise_get_business_name_analysis) or mobile/vehicle checks.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_numerology_profile — baseline numbers before renaming advice. AFTER: None.

SECTION: INPUT CONTRACT name and date strings only; upstream validates.

SECTION: OUTPUT CONTRACT data.full_name (string) data.birth_date (string) data.life_path (int) data.current_name: name (string) expression (int) soul_urge (int) personality (int) is_master (bool) karmic_debt (int or null) compatibility (string — 'harmonious', 'neutral', or 'challenging') harmony_score (int — 1 through 5) data.alternatives[] — objects matching data.current_name shape data.recommendation (currently null — stub)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Empty alternatives[] is valid when no improvement exists.

SECTION: DO NOT CONFUSE WITH asterwise_get_business_name_analysis — entity Expression scan, not personal spelling alternatives. asterwise_get_chaldean_numerology — Chaldean compounds, not harmony-scored spelling list.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

The description adds valuable behavioral context beyond what annotations provide. While annotations indicate read-only, open-world, idempotent, and non-destructive operations, the description explains that empty alternatives[] is valid (success case), clarifies compute class as MEDIUM_COMPUTE, details error handling (upstream validation, INTERNAL_ERROR cases), and specifies that recommendation is currently a null stub. No contradiction with annotations 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 with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), making it easy to navigate. While comprehensive, some sections like 'RESPONSE FORMAT' could be more concise. Overall, each section adds value without unnecessary repetition.

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 complexity (numerology analysis with multiple metrics), the description provides complete context. It details output structure (including current_name metrics and alternatives array), explains edge cases (empty alternatives), distinguishes from siblings, and covers workflow recommendations. With annotations and output schema available, the description fills all necessary gaps.

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?

With 0% schema description coverage, the description compensates well by explaining parameter semantics in the 'INPUT CONTRACT' section. It clarifies that 'name and date strings only; upstream validates' and details the response_format parameter's effect on output presentation (json vs markdown). However, it doesn't specify exact date format or name formatting requirements.

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 with specific verbs ('scores', 'suggests', 'echoes') and resources ('personal name', 'birth-date Life Path', 'alternate spellings'). It explicitly distinguishes from sibling tools like asterwise_get_business_name_analysis and asterwise_get_chaldean_numerology, making the 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 provides explicit guidance on when to use this tool versus alternatives, including a 'DO NOT CONFUSE WITH' section naming specific sibling tools. It also includes a 'BEFORE' section recommending asterwise_get_numerology_profile as a prerequisite and clarifies that empty alternatives[] is valid when no improvement exists.

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

asterwise_get_natal_chartA
Read-onlyIdempotent
Inspect

Computes the full sidereal natal chart from BirthData and returns planet rows, houses, aspects, arudhas, upapada, bhava cusps, and avakhada metadata.

SECTION: WHAT THIS TOOL COVERS Vedic natal endpoint: nine grahas with signs, degrees, nakshatras, combustion, retrograde, Bhava Chalit and rashi houses, twelve house cusps, graha and rashi drishti, arudha padas A1–A12, upapada lagna block, bhava madhya/sandhi arrays, ayanamsa metadata, and avakhada attributes. When include_interpretation=true, ascendant_sign_interpretation, moon_sign_interpretation, moon_nakshatra_interpretation, and interpretation are populated from interpretation JSON; otherwise they are null. It does not return PDFs, yogas list (asterwise_get_yogas), or dasha trees (asterwise_get_dasha).

SECTION: WORKFLOW BEFORE: None — this tool is standalone. AFTER: RECOMMENDED — asterwise_get_yogas — layer classical combinations after the base chart exists.

SECTION: INPUT CONTRACT BirthData enforces date YYYY-MM-DD, time HH:MM, lat -90..90, lon -180..180, ayanamsa enum locally (Pydantic). Unknown birth time may be entered as time='00:00' without error; lagna-sensitive results are then unreliable and callers must handle that — the API does not flag it.

SECTION: OUTPUT CONTRACT data.planets[] — nine objects: planet (string) sign (string) sign_num (int — 0–11) degree (float) nakshatra (string) nakshatra_pada (int — 1–4) is_retrograde (bool) is_combust (bool) is_deep_combust (bool) house (int — Bhava Chalit) rasi_house (int) bhava_chalit_house (int) data.houses[] — twelve objects: house (int) sign (string) sign_num (int) degree (float) data.ascendant (float) data.ascendant_sign (string — Sanskrit name) data.moon_sign (string) data.moon_nakshatra (string) data.ayanamsa_value (float) data.ayanamsa_used (string) data.avakahada: nakshatra, nakshatra_lord, charan (int), rashi, rashi_lord, varna, vashya, yoni, gana, nadi, paya, ascendant, ascendant_lord, sun_sign, sun_sign_lord (strings/ints per upstream) data.graha_drishti — object keyed by planet name; each value object keyed by house strings '1'–'12' with aspect strength int (25, 50, 75, or 100) data.rashi_drishti[] — active sign-to-sign aspect pairs: { from_sign (string), from_sign_num (int 0-11), to_sign (string), to_sign_num (int 0-11) } data.arudha_padas — keys A1–A12 each { sign_index (int), sign_name (string) } data.upapada_lagna: sign_index (int) sign_name (string) upapada_lord (string) second_from_upapada_sign_index (int) second_from_upapada_sign_name (string) planets_in_second_from_upapada[] (string array of planet names) has_benefic_in_second_from_upapada (bool) has_malefic_in_second_from_upapada (bool) data.bhava_madhya[] — twelve objects: { house (int 1-12), sign (string), sign_num (int 0-11), degree (float) } data.bhava_sandhi[] — twelve objects: { house (int 1-12), sign (string), sign_num (int 0-11), degree (float) } data.birth_time_provided (bool — always false; no detection) data.fallback_method (null) ascendant_sign_interpretation (dict or null — sign interpretation from signs/ascendant.json when include_interpretation=true) moon_sign_interpretation (dict or null — Moon sign interpretation from signs/moon_sign.json when include_interpretation=true) moon_nakshatra_interpretation (dict or null — nakshatra interpretation from nakshatras/ files when include_interpretation=true) interpretation (list or null — planet-in-house interpretation list when include_interpretation=true)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — BirthData Pydantic violations (date/time/lat/lon/ayanamsa) → MCP INVALID_PARAMS

INVALID_PARAMS (upstream): — None — calendar years outside supported upstream window surface as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — time='00:00' accepted; lagna may be wrong if true birth time unknown — not auto-detected. — Interpretation fields are null unless include_interpretation=true on the request.

SECTION: DO NOT CONFUSE WITH asterwise_get_divisional_chart — sixteen vargas only, not the primary radix bundle returned here.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes
include_interpretationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds beyond that: it clarifies interpretation fields are null unless include_interpretation=true, that time='00:00' is accepted but lagna may be wrong, and details error contracts. 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.

Conciseness4/5

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

The description is very long but well-structured with labeled sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.). It front-loads the core purpose and uses clear headers. While some sections are verbose, the structure makes it navigable for an AI agent. Minor deduction for 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?

Given the tool's complexity (many output fields, nested objects, optional interpretation, two response formats), the description covers all essential aspects: input constraints, output structure, error handling, edge cases, and workflow. It is fully complete for an AI agent to use the tool correctly.

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?

Although schema coverage is 33%, the description compensates by detailing the input contract extensively: date/time/lat/lon/ayanamsa constraints, edge cases for time='00:00', and default timezone. This adds significant meaning 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?

The description clearly states it computes a full sidereal natal chart and explicitly lists what it returns (planet rows, houses, aspects, etc.). It also distinguishes itself from sibling tools like asterwise_get_divisional_chart and asterwise_get_yogas by stating what it does not cover.

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 'WORKFLOW' section provides explicit before/after guidance, recommending asterwise_get_yogas after this tool. It also warns about unreliable lagna results with unknown birth time and includes a 'DO NOT CONFUSE WITH' section to avoid misuse.

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

asterwise_get_number_meaningA
Read-onlyIdempotent
Inspect

Returns dictionary-style numerology copy for a single integer, including interpretation, keywords, and stubbed extended fields.

SECTION: WHAT THIS TOOL COVERS Static reference for any whole number from one through thirty-three inclusive (includes master numbers eleven, twenty-two, thirty-three plus every intermediate value). No name or date. data.theme, data.advice, data.opportunities[], and data.challenges[] are stubs (null or empty). Not personalised profiling (asterwise_get_numerology_profile).

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: None.

SECTION: INPUT CONTRACT number must pass local guard: inclusive range one through thirty-three; values outside that band raise MCP INVALID_PARAMS before the HTTP call.

SECTION: OUTPUT CONTRACT data.number (int) data.context (string — 'general') data.interpretation (string) data.keywords[] (string array) data.theme (currently null — stub) data.opportunities[] (currently empty — stub) data.challenges[] (currently empty — stub) data.advice (currently null — stub)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — number less than 1 or greater than 33 → MCP INVALID_PARAMS

INVALID_PARAMS (upstream): — None — further rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Accepts every integer in the inclusive one..thirty-three range, not only master numbers.

SECTION: DO NOT CONFUSE WITH asterwise_get_numerology_profile — computes personal numbers from name and date, not a static dictionary row. asterwise_get_lucky_numbers — personalised lucky list, not reference meanings.

ParametersJSON Schema
NameRequiredDescriptionDefault
numberYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

The description adds valuable behavioral context beyond what annotations provide. While annotations indicate read-only, open-world, idempotent, and non-destructive operations, the description details the range constraint (1-33), stub fields, error handling (INVALID_PARAMS for out-of-range), compute class (FAST_LOOKUP), and output format options. This enriches understanding without contradicting 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 (WHAT THIS TOOL COVERS, WORKFLOW, etc.), making it easy to navigate. While somewhat lengthy, each section earns its place by providing essential information. The content is front-loaded with the core purpose, and the structure helps organize detailed information efficiently.

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 complexity (range validation, stub fields, output format options) and the presence of annotations and an output schema, the description is remarkably complete. It covers purpose, usage guidelines, input constraints, output structure, error handling, and sibling differentiation. The output schema existence means the description doesn't need to detail return values, and it provides all necessary contextual information.

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?

With 0% schema description coverage, the description fully compensates by explaining both parameters thoroughly. It specifies that 'number' must be 1-33 inclusive and describes the validation logic. For 'response_format', it explains the difference between 'json' and 'markdown' outputs and that both return identical data. This adds complete meaning beyond the bare 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 the tool 'Returns dictionary-style numerology copy for a single integer' with specific details about what it includes (interpretation, keywords, stubbed fields) and what it doesn't (no name or date). It explicitly distinguishes from sibling tools like asterwise_get_numerology_profile and asterwise_get_lucky_numbers in the 'DO NOT CONFUSE WITH' section, making the purpose highly specific and differentiated.

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 guidance on when to use this tool versus alternatives. The 'WHAT THIS TOOL COVERS' section clarifies it's for static reference of numbers 1-33, not personalized profiling. The 'DO NOT CONFUSE WITH' section names specific sibling tools and explains their different purposes, giving clear alternatives and exclusions.

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

asterwise_get_numerology_compatibilityA
Read-onlyIdempotent
Inspect

Compares two people on Pythagorean Life Path numbers derived from their names and birth dates and returns a score, tier label, narrative, strengths, challenges, and advice.

SECTION: WHAT THIS TOOL COVERS Pairwise numerology only — no charts, rashis, or kootas. Outputs discrete compatibility_score 1..10 with textual bands. It does not run asterwise_get_compatibility (Jyotish matchmaking) or regional porutham tools.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_numerology_profile per person — sanity-check Life Paths before comparing. AFTER: None.

SECTION: INPUT CONTRACT Four strings (two names, two dates) are passed through without local guards.

SECTION: OUTPUT CONTRACT data.life_path_1 (int) data.life_path_2 (int) data.compatibility_score (int — 1 through 10) data.compatibility_level (string — 'Excellent', 'Good', 'Average', or 'Challenging') data.interpretation (string) data.strengths[] (string array) data.challenges[] (string array) data.advice (string)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — For Vedic matching, use asterwise_get_compatibility instead.

SECTION: DO NOT CONFUSE WITH asterwise_get_compatibility — sidereal koota scoring, not numerology integers. asterwise_get_numerology_profile — single-person profile, not dyad scoring.

ParametersJSON Schema
NameRequiredDescriptionDefault
person1_dateYes
person1_nameYes
person2_dateYes
person2_nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds valuable context: it specifies the tool only covers 'pairwise numerology' (no charts, rashis, or kootas), details the compute class as MEDIUM_COMPUTE, and explains error handling (e.g., upstream validation, INTERNAL_ERROR cases). This enhances behavioral understanding without contradicting 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 clear sections (e.g., WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT), each sentence adds value without redundancy, and it's front-loaded with the core purpose. Despite being detailed, it avoids fluff and efficiently communicates necessary 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?

Given the tool's complexity (numerology comparison with multiple outputs), the description is highly complete: it explains the scope, workflow, input/output contracts, compute class, error handling, and sibling distinctions. With annotations covering safety and an output schema detailing return values, the description fills all contextual gaps effectively.

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 0%, so the description must compensate. It explains that inputs are 'four strings (two names, two dates)' and details the response_format parameter (json vs. markdown modes with identical data). While it doesn't specify exact date/name formats, it clarifies the parameter roles and usage, adding significant meaning beyond the bare 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 the tool 'compares two people on Pythagorean Life Path numbers' and specifies it returns a score, tier label, narrative, strengths, challenges, and advice. It explicitly distinguishes from siblings like asterwise_get_compatibility (Jyotish matchmaking) and asterwise_get_numerology_profile (single-person profile), making the purpose specific and differentiated.

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 guidance: it recommends using asterwise_get_numerology_profile per person beforehand for sanity-checking, states it does not run asterwise_get_compatibility or regional porutham tools, and clarifies edge cases (e.g., 'For Vedic matching, use asterwise_get_compatibility instead'). This covers when to use, when not to use, and alternatives.

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

asterwise_get_numerology_profileA
Read-onlyIdempotent
Inspect

Builds a Pythagorean numerology profile from a legal name and birth date and returns core numbers, cycles, lucky digits, and summary copy.

SECTION: WHAT THIS TOOL COVERS Computes Life Path, Expression, Soul Urge, Personality, Birthday, Pinnacles, Challenges, lucky_numbers[], summary, and key_traits via the upstream profile engine. data.personal_year is currently null — use asterwise_get_personal_year for the dedicated Personal Year endpoint. It is not Chaldean mapping (asterwise_get_chaldean_numerology), Lo Shu grids (asterwise_get_lo_shu_grid), or paired compatibility (asterwise_get_numerology_compatibility).

SECTION: WORKFLOW BEFORE: None — this tool is standalone. AFTER: asterwise_get_personal_year — fills Personal Year when needed.

SECTION: INPUT CONTRACT name and date strings are forwarded without extra local validation; malformed payloads fail upstream.

SECTION: OUTPUT CONTRACT For each of data.life_path, data.expression, data.soul_urge, data.personality, data.birth_day: number (int) reduced_number (int) is_master_number (bool) is_karmic_debt (bool) karmic_debt_number (int or null) interpretation (string) keywords[] (string array) data.personal_year — currently null — use asterwise_get_personal_year for Personal Year calculation data.pinnacles[] — four objects: number (int), start_age (int), end_age (int), interpretation (string), focus_areas[] (string array) data.challenges[] — four objects with the same shape as pinnacles[] data.lucky_numbers[] (int array) data.summary (string) data.key_traits[] (string array)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — personal_year field is null here by design.

SECTION: DO NOT CONFUSE WITH asterwise_get_chaldean_numerology — Chaldean letter values and compound structure, not Pythagorean cores. asterwise_get_lucky_numbers — lightweight lucky list without the full profile payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already cover readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds valuable context beyond annotations: it discloses that personal_year is null by design, explains the compute class (MEDIUM_COMPUTE), details error handling (upstream validation, INTERNAL_ERROR cases), and describes the two response formats. This provides rich behavioral insight without contradicting 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 (WHAT THIS TOOL COVERS, WORKFLOW, etc.), making it easy to scan. It's appropriately sized for the tool's complexity, though some sections like OUTPUT CONTRACT are quite detailed. Every section adds value, but it could be slightly more concise in listing all output fields.

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 complexity, rich annotations, and detailed output schema (implied by OUTPUT CONTRACT section), the description is highly complete. It covers purpose, usage, behavior, input/output contracts, errors, and sibling differentiation. The output schema is thoroughly documented in the description, making it fully sufficient for an agent to understand and use the tool 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 0%, but the description adds some parameter context: it notes that name and date are forwarded without local validation and that malformed payloads fail upstream. However, it doesn't explain the semantics of name (legal name), date (format), or response_format beyond the enum values. The schema carries most of the burden, but the description provides limited additional meaning.

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 'Builds a Pythagorean numerology profile from a legal name and birth date' with specific outputs listed. It explicitly distinguishes from siblings like asterwise_get_chaldean_numerology, asterwise_get_lo_shu_grid, and asterwise_get_numerology_compatibility, making the purpose distinct and well-defined.

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 guidance on when to use this tool versus alternatives, including a dedicated 'DO NOT CONFUSE WITH' section. It specifies that personal_year is null here and directs to asterwise_get_personal_year for that data, and clarifies it's not for Chaldean mapping, Lo Shu grids, or compatibility analysis.

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

asterwise_get_panchangaA
Read-onlyIdempotent
Inspect

Computes Panchanga elements for one calendar date at a geographic location and returns tithi, vara, nakshatra, yoga, karana, and end times in UTC.

SECTION: WHAT THIS TOOL COVERS Derives classical Panchanga limbs from sidereal astronomy for the given date, latitude, longitude, and timezone — no birth time or natal chart. data.yoga here is the Panchanga Yoga (Sun+Moon nakshatra composite), wholly separate from natal yogas in asterwise_get_yogas. It does not score muhurta windows across ranges (asterwise_get_muhurta), list Choghadiya slices (asterwise_get_choghadiya), or monthly calendars (asterwise_get_panchanga_calendar).

SECTION: WORKFLOW BEFORE: None — this tool is standalone. AFTER: asterwise_get_choghadiya — same-day slot quality for the location.

SECTION: INPUT CONTRACT date must be YYYY-MM-DD (Pydantic pattern on LocationInput). lat/lon bounds are validated locally. Upstream rejects calendar dates outside 1900–2100. timezone defaults to Asia/Kolkata when the caller leaves the default in LocationInput.

SECTION: OUTPUT CONTRACT data.tithi: number (int — 1–30) name (string) paksha (string — 'Shukla' or 'Krishna') degrees_elapsed (float) degrees_remaining (float) end_time (string — ISO UTC) data.vara: number (int — 1=Ravivar through 7=Shanivar) name (string) lord (string) end_time (string) data.nakshatra: index (int — 0–26) name (string) pada (int — 1–4) degrees_elapsed (float) degrees_remaining (float) end_time (string — ISO UTC) data.yoga: index (int — 0–26) name (string) is_inauspicious (bool) degrees_elapsed (float) end_time (string — ISO UTC) data.karana: number (int) name (string) degrees_elapsed (float) degrees_remaining (float) end_time (string — ISO UTC) SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — date not YYYY-MM-DD or invalid calendar day → MCP INVALID_PARAMS — lat/lon outside allowed ranges → MCP INVALID_PARAMS

INVALID_PARAMS (upstream): — None — dates outside 1900–2100 surface as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Panchanga yoga is unrelated to asterwise_get_yogas natal combinations.

SECTION: DO NOT CONFUSE WITH asterwise_get_yogas — natal chart yogas, not Panchanga Sun–Moon yoga. asterwise_get_panchanga_calendar — whole-month daily rows, not a single day.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationYesFor tools that need location but not birth time.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already indicate readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds behavioral context: compute class 'FAST_LOOKUP', detailed error contract (INVALID_PARAMS, INTERNAL_ERROR), edge cases (yoga distinction), and output format details. 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 well-structured with clear section headers (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), making it easy to navigate. However, it is lengthy with some redundancy (e.g., repeated mention of yoga distinction). Still, every section serves a purpose.

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 complexity (multiple output fields, error handling, parameters), the description is thorough: it covers output contract with all fields, error types, edge cases, and differentiation from siblings. The output schema exists but the description fully explains the response.

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 description coverage is 100% with descriptions for all parameters. The description adds value by elaborating on input contract: date format validation, lat/lon bounds, default timezone, response_format options, and output contract with field details. This goes 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?

The description clearly specifies the tool computes Panchanga elements for a single date and location, returning tithi, vara, nakshatra, yoga, karana, and end times in UTC. It explicitly distinguishes from sibling tools like asterwise_get_yogas and asterwise_get_panchanga_calendar, making the 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 Guidelines5/5

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

The description includes a 'WORKFLOW' section stating 'BEFORE: None' and 'AFTER: asterwise_get_choghadiya', plus a 'DO NOT CONFUSE WITH' section listing alternatives. This clearly indicates when to use this tool versus siblings.

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

asterwise_get_panchanga_calendarA
Read-onlyIdempotent
Inspect

Returns one row per civil day for a calendar month at a location with condensed tithi, vara, nakshatra, yoga, karana, and rahu_kaal columns.

SECTION: WHAT THIS TOOL COVERS Month-wide Panchanga suitable for planners; each day includes ending times where applicable and local Rahu Kaal bounds. Year must be 1900–2100 and month 1–12 (Pydantic on PanchangaCalendarInput). It is not single-day detailed Panchanga (asterwise_get_panchanga) nor muhurta search (asterwise_get_muhurta).

SECTION: WORKFLOW BEFORE: None — this tool is standalone. AFTER: asterwise_get_panchanga — expand any single day at full detail.

SECTION: INPUT CONTRACT year/month/lat/lon validated locally. Timezone handling follows upstream response fields (data.timezone echo).

SECTION: OUTPUT CONTRACT data.year (int) data.month (int) data.timezone (string) data.ayanamsa (string) data.days[] — 28–31 objects: date (string — YYYY-MM-DD) tithi — { name (string), number (int), paksha (string), end_time (string — ISO UTC) } vara — { name (string), number (int), lord (string) } nakshatra — { name (string), index (int), pada (int), end_time (string — ISO UTC) } yoga — { name (string), index (int), is_inauspicious (bool), end_time (string — ISO UTC) } karana — { name (string), number (int), end_time (string — ISO UTC) } rahu_kaal — { start (string — HH:MM local), end (string — HH:MM local) }

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — year outside 1900–2100 → MCP INVALID_PARAMS — month outside 1–12 → MCP INVALID_PARAMS — lat/lon out of range → MCP INVALID_PARAMS

INVALID_PARAMS (upstream): — None — further rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Day count follows the civil month (28–31 entries).

SECTION: DO NOT CONFUSE WITH asterwise_get_panchanga — deep single-day Panchanga with degree fields, not a month grid. asterwise_get_muhurta — activity-ranked windows, not a passive calendar.

ParametersJSON Schema
NameRequiredDescriptionDefault
calendarYesMonthly Panchanga calendar parameters.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already provide readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context beyond this: it specifies the tool is 'FAST_LOOKUP' (compute class), documents error handling (INVALID_PARAMS and INTERNAL_ERROR contracts), and explains edge cases like day count following civil month. It doesn't contradict annotations and provides useful behavioral details.

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 (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), making it easy to navigate. While comprehensive, some sections could be more concise (e.g., the OUTPUT CONTRACT lists all fields in detail, which might be excessive since an output schema exists). However, the information is front-loaded and each section serves a clear purpose.

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 complexity (astrological calculations with multiple output fields), the description is highly complete. It covers purpose, usage guidelines, input validation, output structure, response formats, compute characteristics, error handling, and sibling differentiation. With annotations providing safety hints and an output schema existing, the description adds all necessary contextual information without redundancy.

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 meaningful context: it explains that year/month/lat/lon are 'validated locally' and that 'Timezone handling follows upstream response fields.' It also clarifies the purpose of the response_format parameter ('json serialises... use this for programmatic parsing... response_format=markdown renders... human-readable report'). This provides valuable semantic understanding beyond the schema's structural definition.

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 'Returns one row per civil day for a calendar month at a location with condensed tithi, vara, nakshatra, yoga, karana, and rahu_kaal columns.' This specifies the verb ('Returns'), resource ('Panchanga calendar'), and scope ('month-wide'). It explicitly distinguishes from sibling tools asterwise_get_panchanga (single-day detailed) and asterwise_get_muhurta (activity-ranked windows).

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 guidance on when to use this tool versus alternatives. The 'WHAT THIS TOOL COVERS' section states it's 'Month-wide Panchanga suitable for planners' and clarifies it is 'not single-day detailed Panchanga (asterwise_get_panchanga) nor muhurta search (asterwise_get_muhurta).' The 'WORKFLOW' section also indicates this tool is standalone and can be followed by asterwise_get_panchanga for single-day expansion.

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

asterwise_get_papasamyamA
Read-onlyIdempotent
Inspect

Measures malefic stress from Lagna, Moon, and Venus references for each partner, compares totals, and labels compatibility level against a threshold.

SECTION: WHAT THIS TOOL COVERS Papa Samyam balancing for marriage: per-person lagna/moon/venus scores, effective_score, cancellation flag, per-planet breakdown rows, then pairwise score_difference, compatible boolean, qualitative level ('Good', 'Moderate', 'Poor'), and numeric threshold. It does not output Ashtakoota points (asterwise_get_compatibility) or porutham passes (asterwise_get_porutham).

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_compatibility — establish baseline match quality. AFTER: None.

SECTION: INPUT CONTRACT Two BirthData objects per global contract.

SECTION: OUTPUT CONTRACT data.person1 and data.person2 — each: lagna_score (float) moon_score (float) venus_score (float) total_score (float) effective_score (float) cancellation (bool) breakdown[] — each: planet (string) house_lagna (int) house_moon (int) house_venus (int) weight_lagna (float) weight_moon (float) weight_venus (float) score (float) data.score_difference (float) data.compatible (bool) data.compatibility_level (string — 'Good', 'Moderate', or 'Poor') data.threshold (float)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Both charts with zero malefics in the scanned houses → score_difference=0 and compatible=true (not an error).

SECTION: DO NOT CONFUSE WITH asterwise_get_doshas — twelve natal dosha buckets for one chart, not pairwise malefic balance. asterwise_get_compatibility — Guna Milan totals and vetoes, not Papa Samyam scoring.

ParametersJSON Schema
NameRequiredDescriptionDefault
person1YesBirth data for a single person.
person2YesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

The description adds valuable behavioral context beyond annotations: it explains the COMPUTE_CLASS (MEDIUM_COMPUTE), details the complete output structure, describes edge cases (zero malefics results), and specifies error handling. While annotations cover safety (readOnly, non-destructive), the description provides operational context that helps the agent understand computational requirements and expected behavior.

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 (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.) that make information easy to locate. While somewhat lengthy, every section adds value and the information is front-loaded with the core purpose. The structure helps the agent quickly find relevant 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?

Given the tool's complexity, the description provides comprehensive context: it details the complete output structure, explains computational class, specifies error handling, clarifies what the tool does NOT do, and provides workflow guidance. With an output schema present, the description appropriately focuses on behavioral and contextual information rather than repeating return value details.

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?

With 67% schema description coverage, the description compensates well by clarifying the input contract ('Two BirthData objects per global contract') and explaining the response_format parameter's effect on output presentation. While it doesn't detail individual parameter semantics, it provides important context about the overall input structure that helps the agent understand what data is required.

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: measuring malefic stress from Lagna, Moon, and Venus references for each partner, comparing totals, and labeling compatibility against a threshold. It specifically distinguishes this from sibling tools like asterwise_get_compatibility and asterwise_get_porutham, providing 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 includes explicit workflow guidance: 'BEFORE: RECOMMENDED — asterwise_get_compatibility — establish baseline match quality.' It also clearly states what this tool does NOT cover (Ashtakoota points, porutham passes) and provides a 'DO NOT CONFUSE WITH' section naming specific alternative tools.

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

asterwise_get_personal_cyclesA
Read-onlyIdempotent
Inspect

Returns the Personal Year, Personal Month, and Personal Day numbers for a given birth date and optional target date. All three cycle numbers are derived from the birth month, birth day, and the target calendar date.

SECTION: WHAT THIS TOOL COVERS Personal cycles are the Pythagorean timing system. The Personal Year (1–9) sets the annual theme. The Personal Month refines it to a 30-day window. The Personal Day gives the daily energy flavour. A Personal Year 1 favours new beginnings; a 9 favours completion and release. Cycles nest: the same number in Year, Month, and Day simultaneously creates a peak intensity day.

Formula: Personal Year = birth_month_reduced + birth_day_reduced + target_year_reduced Personal Month = Personal Year + target_month, reduced Personal Day = Personal Month + target_day, reduced Master numbers 11 and 22 are preserved where they arise.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_numerology_profile — see personal cycles alongside core numbers.

SECTION: INPUT CONTRACT date — Birth date in YYYY-MM-DD format. Example: '1985-11-12' year (optional int) — Target year. Defaults to current calendar year. Example: 2026 month (optional int 1–12) — Target month. Defaults to current month. Example: 5 day (optional int 1–31) — Target day. Personal Day is only returned when day is provided. Defaults to null (Personal Day omitted). Example: 1

SECTION: OUTPUT CONTRACT data.personal_year (int — 1–9 or master 11/22) data.personal_month (int — 1–9 or master 11/22) data.personal_day (int or null — null when day parameter is not provided) data.target_year (int — echoed) data.target_month (int — echoed) data.target_day (int or null — echoed)

SECTION: RESPONSE FORMAT response_format=json — structured JSON. response_format=markdown — human-readable. Both modes return identical underlying data.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None — all validation is upstream. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_personal_year — returns Personal Year only, no month or day breakdown. asterwise_get_numerology_profile — core name numbers; personal_year field is null there.

ParametersJSON Schema
NameRequiredDescriptionDefault
dayNo
dateYes
yearNo
monthNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already indicate readOnly, idempotent, non-destructive. The description adds the formula, master number preservation, conditional return of personal day based on day parameter, response_format behavior, and compute class FAST_LOOKUP, all 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 well-structured with clear section headers (SECTION), front-loaded purpose, and no redundant information. Each section adds value, making it efficient for an agent to parse.

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 input, output, error contracts, compute class, workflow, and disambiguation. With output schema existing and annotations provided, the description adds necessary context, leaving no critical gaps.

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?

Despite 0% schema description coverage, the 'INPUT CONTRACT' section provides thorough explanations for each parameter: date format, defaults, ranges, examples, and behavioral impact (day parameter controls personal day output). This fully compensates.

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 returns Personal Year, Personal Month, and Personal Day numbers. It distinguishes from sibling tools (asterwise_get_personal_year and asterwise_get_numerology_profile) in the 'DO NOT CONFUSE WITH' section.

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 a 'WORKFLOW' section noting the tool is standalone and suggests using it after asterwise_get_numerology_profile. The 'DO NOT CONFUSE WITH' section explicitly tells when to use alternative siblings.

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

asterwise_get_personality_numberA
Read-onlyIdempotent
Inspect

Calculates the Personality number from consonants in the full name. All non-vowels (BCDFGHJKLMNPQRSTVWXYZ) contribute — Y is always a consonant. Reduces each name part separately, preserving master numbers 11, 22, 33.

SECTION: WHAT THIS TOOL COVERS The Personality number is the outer mask — how others perceive you before they know you well. It governs first impressions, physical presentation, and the social interface between the private self (Soul Urge) and the world.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_numerology_profile — see all five core numbers together.

SECTION: INPUT CONTRACT name — Full legal name as used at birth. Example: 'Arjun Mehta', 'Sofia Rossi' Y is always a consonant — not treated as a vowel.

SECTION: OUTPUT CONTRACT data.number (int — Personality number; master numbers 11/22/33 preserved) data.is_master_number (bool) data.karmic_debt_number (int or null)

SECTION: RESPONSE FORMAT response_format=json — structured JSON. response_format=markdown — human-readable. Both modes return identical underlying data.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None. INTERNAL_ERROR: upstream failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_expression_number — all letters (Expression = Soul Urge + Personality). asterwise_get_soul_urge_number — vowels only.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already indicate read-only and idempotent, and the description adds behavioral details such as preserving master numbers (11, 22, 33), reducing each name part separately, and treating Y as a consonant. It also explains the compute class as FAST_LOOKUP and error contracts. 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 well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), but it is somewhat verbose. Each section adds value, though some content could be condensed without losing clarity.

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 input, output (including number, is_master_number, karmic_debt_number), workflow, error handling, and differentiation from related tools. Given the presence of an output schema, the description provides sufficient context for correct usage.

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?

Although the schema description coverage is 0%, the description provides detailed semantics for both parameters: name (with example and rule about Y) and response_format (with explanation of json vs markdown). This compensates fully for the schema gap.

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 calculates the Personality number from consonants in the full name. It also explicitly distinguishes from sibling tools like asterwise_get_expression_number and asterwise_get_soul_urge_number, making the 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 Guidelines5/5

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

The description includes a 'WORKFLOW' section indicating it is standalone and suggests using asterwise_get_numerology_profile after. The 'DO NOT CONFUSE WITH' section provides explicit alternatives, and the 'INPUT CONTRACT' clarifies the name parameter. This gives clear guidance on when and how to use the tool.

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

asterwise_get_personal_yearA
Read-onlyIdempotent
Inspect

Looks up the Personal Year theme for the current calendar cycle from a name and birth date using only month and day inputs server-side.

SECTION: WHAT THIS TOOL COVERS Endpoint returns Personal Year data derived from birth month/day against the running calendar year on the server — there is no extra year argument in the tool schema. Expected response keys (pending live confirmation): personal_year_number (int), theme (string), interpretation (string), advice (string), favorable_actions[] (string array), challenges[] (string array). asterwise_get_numerology_profile leaves personal_year null; use this tool when Personal Year detail is required.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_numerology_profile — see other core numbers first. AFTER: None.

SECTION: INPUT CONTRACT Only name and date are submitted; the active calendar year is chosen upstream automatically.

SECTION: OUTPUT CONTRACT personal_year_number (int) — expected theme (string) — expected interpretation (string) — expected advice (string) — expected favorable_actions[] (string array) — expected challenges[] (string array) — expected (Schema not yet confirmed from live response; fields above reflect tool design.)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Cannot request arbitrary calendar years via this tool — only the server-selected current year.

SECTION: DO NOT CONFUSE WITH asterwise_get_numerology_profile — personal_year field there is null; this endpoint supplies the annual theme. asterwise_get_varshaphal — Vedic solar return, not Pythagorean Personal Year.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

The description adds significant behavioral context beyond annotations. While annotations indicate read-only, open-world, idempotent, and non-destructive traits, the description details server-side computation ('using only month and day inputs server-side'), automatic year selection ('active calendar year is chosen upstream automatically'), response format options (json/markdown), error handling (INTERNAL_ERROR for upstream failures), and constraints ('Cannot request arbitrary calendar years'). This enriches the agent's understanding of how the tool behaves in practice.

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 (e.g., WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT), making it easy to scan. Each sentence adds value—no fluff or repetition. It efficiently conveys purpose, usage, parameters, output, and errors without unnecessary verbosity, demonstrating excellent information density and organization.

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 complexity (involving numerology calculations) and the presence of annotations and an output schema, the description is highly complete. It covers purpose, sibling differentiation, workflow, input behavior, output fields, response formats, compute class, error scenarios, and edge cases. The output schema likely details response structure, so the description appropriately focuses on contextual nuances rather than repeating schema information.

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?

With 0% schema description coverage, the description compensates well by explaining parameter roles. It clarifies that 'date' uses 'month and day inputs' (implying year is ignored), 'name' is required for lookup, and 'response_format' controls output serialization (json for programmatic use, markdown for human-readable reports). However, it doesn't specify exact date format or name constraints, leaving some gaps in 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 clearly states the tool 'looks up the Personal Year theme for the current calendar cycle from a name and birth date using only month and day inputs server-side.' It specifies the exact verb ('looks up'), resource ('Personal Year theme'), and scope ('current calendar cycle'), and explicitly distinguishes it from sibling tools like 'asterwise_get_numerology_profile' and 'asterwise_get_varshaphal' by explaining their differences.

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 guidance on when to use this tool vs. alternatives. It states 'use this tool when Personal Year detail is required' and contrasts it with 'asterwise_get_numerology_profile' (which leaves personal_year null) and 'asterwise_get_varshaphal' (which is Vedic, not Pythagorean). It also includes a 'BEFORE' recommendation to use 'asterwise_get_numerology_profile' first for core numbers, offering clear workflow context.

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

asterwise_get_pitra_doshaA
Read-only
Inspect

Detects and analyses Pitru Dosha (Pitru Shapa — Ancestral Curse) using all five classical Pitru Dosha combinations.

SECTION: WHAT THIS TOOL COVERS Standalone Pitru Dosha endpoint with deeper analysis than the pitru_dosha field inside asterwise_get_doshas. Returns: presence flag, severity (mild/moderate/severe), which of the 5 classical combinations triggered, Sun analysis (house, sign, debilitation, afflictions), 9th lord analysis (identity, house, debilitation, afflictions), all contributing factors, cancellation conditions (Jupiter protective), classical symptoms, and remedies. Primary classical symptom for Purvajanma Shapa (karmic affliction): denial of progeny or difficulties with children. Afflicting planets: Saturn, Rahu, Mars, Ketu.

SECTION: WORKFLOW BEFORE: None — birth data computes everything needed. AFTER: asterwise_get_puja_suggestions — recommend remedial pujas for Sun/Mars.

SECTION: INPUT CONTRACT birth — BirthData (date, time, lat, lon, timezone).

SECTION: OUTPUT CONTRACT data.present (bool) data.severity (string — 'mild', 'moderate', 'severe', or null) data.severity_note (string or null) data.combinations_triggered[] — each: combination (string), description (string), factors[] (string array), weight (int) data.combinations_count (int) data.sun_analysis{}: house (int), sign_index (int), debilitated (bool), afflictions[] (string array) data.ninth_lord_analysis{}: planet (string), house (int), sign_index (int), debilitated (bool), afflictions[] (string array) data.all_factors[] (string array — deduplicated list of all triggers) data.cancellations[] (string array — Jupiter protective conditions) data.interpretation (string) data.classical_symptoms[] (string array) data.remedies[] (string array)

SECTION: COMPUTE CLASS MEDIUM_COMPUTE — natal chart computation.

SECTION: ERROR CONTRACT INVALID_PARAMS (local): BirthData Pydantic violations → MCP INVALID_PARAMS INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_doshas — returns pitru_dosha as one of twelve doshas with less detail. Use this tool when dedicated Pitru Dosha analysis is needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false. The description adds substantial behavioral context: compute class (MEDIUM_COMPUTE), output details (presence, severity, combinations, etc.), and that it is a standalone endpoint. No contradictions. Good but not perfect.

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?

Well-structured with sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, OUTPUT CONTRACT, etc.). Front-loaded with purpose. Slightly verbose but every section adds value.

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?

Covers input, output (with structured contract), workflow, error contracts, compute class, and sibling differentiation. Output schema is described in detail. Very complete for a complex 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 description coverage is high—each birth field and response_format have detailed descriptions. The description's INPUT CONTRACT section just restates 'birth — BirthData', adding no new semantic value beyond what schema provides. 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?

Description clearly states it detects and analyzes Pitru Dosha using all five classical combinations. It distinguishes from sibling tool asterwise_get_doshas by noting deeper analysis and standalone nature.

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?

Includes a 'DO NOT CONFUSE WITH' section explicitly contrasting with asterwise_get_doshas. Also provides workflow guidance: 'BEFORE: None' and 'AFTER: asterwise_get_puja_suggestions'.

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

asterwise_get_planet_natureA
Read-onlyIdempotent
Inspect

Returns classical graha (planet) properties for all nine planets or a single planet per classical Vedic tradition.

SECTION: WHAT THIS TOOL COVERS Returns tattva (element), guna (Sattvic/Rajasic/Tamasic), gender, caste/varna, natural benefic/malefic nature, direction, color, presiding deity, ruling day of week, metal, body part governed, and naisargika maitri (natural friends, enemies, neutrals) for each of the nine grahas: Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu. Rahu and Ketu include note explaining reference-table limits for shadow nodes.

SECTION: WORKFLOW BEFORE: None — standalone reference. AFTER: asterwise_get_puja_suggestions — propitiation for a specific graha.

SECTION: INPUT CONTRACT planet (optional): One of Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu. Omit to get all nine planets.

SECTION: OUTPUT CONTRACT Single planet: data.planet, data.tattva, data.guna, data.gender, data.caste, data.nature, data.direction, data.color, data.deity, data.day, data.metal, data.body_part, data.friends[], data.enemies[], data.neutrals[] All planets: data.planets{} — object keyed by planet name, each with above fields

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (upstream): Unknown planet name → MCP INTERNAL_ERROR INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_puja_suggestions — ritual propitiation per planet, not properties. asterwise_get_rudraksha — bead recommendations per planet, not natal properties.

ParametersJSON Schema
NameRequiredDescriptionDefault
planetNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, indicating safety. The description adds behavioral context: it is a FAST_LOOKUP, standalone, with error contracts (INVALID_PARAMS, INTERNAL_ERROR), and notes on Rahu/Ketu limits. 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.

Conciseness4/5

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

The description is well-structured with clear sections, but it is lengthy due to verbose output contract details. The first sentence is effective at summarizing purpose. Every section adds value, but conciseness could be improved.

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 complexity (nine planets, many properties), the description covers input, output, errors, workflow, and sibling differentiation comprehensively. Even with an assumed output schema, the description provides necessary context for agent selection and invocation.

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 schema has 0% description coverage. The description adds meaning for 'planet' by listing possible values and the effect of omission. However, 'response_format' is not described beyond its enum values in the schema, missing an opportunity to clarify its usage.

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 returns classical graha (planet) properties for nine planets or a single planet, listing specific attributes. It distinguishes from siblings asterwise_get_puja_suggestions and asterwise_get_rudraksha, making the 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 Guidelines5/5

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

The WORKFLOW section indicates it is standalone (BEFORE: None) and suggests a follow-up tool (AFTER: asterwise_get_puja_suggestions). The DO NOT CONFUSE WITH section explicitly names alternative tools and what they do, providing clear guidance on 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.

asterwise_get_poruthamA
Read-onlyIdempotent
Inspect

Runs the Tamil ten-porutham checklist for two charts, counts passes out of ten, surfaces Rajju/Vedha classical condition booleans, and returns per-porutham evidence objects.

SECTION: WHAT THIS TOOL COVERS Classical Tamil Nadu marriage screening: Dinam, Ganam, Mahendra, Stree Deergha, Yoni, Rasi, Rasiyathipaty, Rajju, Vedha, Vasya — each with passed plus type-specific fields (counts, ganas, scores, rajju pairs, vedha flags, distances). Rajju and Vedha classical conditions elevate rajju_veto/vedha_veto/hard_veto booleans. It is not twelve-koota Thirumana (asterwise_get_thirumana_porutham) or North Indian Ashtakoota (asterwise_get_compatibility).

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart per native. AFTER: asterwise_get_thirumana_porutham — extended twelve-koota read if needed.

SECTION: INPUT CONTRACT Two BirthData objects per global contract.

SECTION: OUTPUT CONTRACT data.total_passed (int — out of 10) data.total_poruthams (int — 10) data.compatibility_level (string) data.rajju_veto (bool) data.vedha_veto (bool) data.hard_veto (bool) data.breakdown{} — keyed by porutham name (Dinam, Ganam, Mahendra, Stree Deergha, Yoni, Rasi, Rasiyathipaty, Rajju, Vedha, Vasya): passed (bool) Dinam: count (int), position (int) Ganam: boy_gana (string), girl_gana (string) Rasiyathipaty/Vasya: score (float) Rajju: boy_rajju (string), girl_rajju (string), is_veto (bool) Vedha: is_veto (bool) Stree Deergha: distance (int), description (string)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — hard_veto aggregates Rajju/Vedha classical condition outcomes — read breakdown before narrating success.

SECTION: DO NOT CONFUSE WITH asterwise_get_thirumana_porutham — twelve poruthams including Nadi and Varna, not ten. asterwise_get_dashakoot — South Indian float scoring, not Tamil pass grid.

ParametersJSON Schema
NameRequiredDescriptionDefault
person1YesBirth data for a single person.
person2YesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description details the computation (ten poruthams, booleans for Rajju/Vedha), the output fields, error contracts, and compute class. This adds significant behavioral context 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.

Conciseness3/5

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

The description is long but well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), making it scannable. However, it contains redundancy, such as repeating 'DO NOT CONFUSE WITH' information, and the detailed output contract might be better suited for the output schema.

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 complexity (3 parameters, nested objects, output schema), the description is remarkably complete, covering purpose, workflow, input, output, error handling, compute class, and disambiguation. No gaps remain.

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 description clarifies that person1 and person2 are BirthData objects and explains the response_format parameter's options (json vs markdown) and their behavior. While the schema already has descriptions for nested fields, the description adds context like 'Two BirthData objects per global contract' and the response format modes, enhancing 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 explicitly states it runs the Tamil ten-porutham checklist, counts passes out of ten, surfaces Rajju/Vedha booleans, and returns per-porutham objects. It distinguishes from sibling tools like asterwise_get_thirumana_porutham and asterwise_get_dashakoot, making the purpose crystal clear.

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 WORKFLOW section recommends running asterwise_get_natal_chart before and asterwise_get_thirumana_porutham after, and the DO NOT CONFUSE WITH section explicitly names alternatives and their differences, giving explicit when/ when-not guidance.

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

asterwise_get_prashna_chartA
Read-onlyIdempotent
Inspect

Casts a Prashna chart for the query instant using supplied date, time, place, and a single-topic keyword, then returns houses, Moon diagnostics, verdict, and cusps.

SECTION: WHAT THIS TOOL COVERS Horary workflow: maps one of the approved keywords to a primary house, evaluates Moon (phase, VOC, affliction), applies ithsala flags, aggregates graha dignities/houses from Prashna Lagna, and emits verdict/confidence/score. Not natal life analysis (asterwise_get_natal_chart) and not KP cusps from birth (asterwise_get_kp_chart).

SECTION: WORKFLOW BEFORE: None — standalone for horary. AFTER: None.

SECTION: INPUT CONTRACT question must be exactly one of: self, wealth, siblings, property, children, health, marriage, death, travel, career, gains, loss. Full sentences are not validated locally and are rejected upstream → MCP INTERNAL_ERROR at the tool layer. PrashnaInput enforces date/time/lat/lon/ayanamsa patterns locally.

SECTION: OUTPUT CONTRACT data.ayanamsa (string) data.question (string — keyword echoed) data.primary_house (int) data.ithsala_applying (bool) data.ithsala_separating (bool) data.query_utc (string — ISO UTC) data.lagna: rashi_index (int) rashi (string) longitude (float) lord (string) data.house_analysis: house (int) rashi_index (int) rashi (string) lord (string) lord_dignity (string) lord_house (int) lord_longitude (float) occupants[] (string array) data.moon: longitude (float) rashi_index (int) rashi (string) nakshatra (string) phase (string — 'waxing' or 'waning') dignity (string) void_of_course (bool) afflicted_moon (bool) applying_to_benefic (bool) data.verdict: verdict (string — 'favorable', 'mixed', or 'unfavorable') confidence (string — 'high', 'medium', or 'low') score (int — negative unfavorable, positive favorable) data.planets{} — per planet: longitude (float), rashi_index (int), rashi (string), house (int), is_retrograde (bool), dignity (string) data.house_cusps{} — keys '1'..'12': rashi_index (int), rashi (string), lord (string), longitude (float)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — PrashnaInput Pydantic violations (date, time, lat, lon, ayanamsa) → MCP INVALID_PARAMS

INVALID_PARAMS (upstream): — None — bad question tokens surface as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Moon void-of-course flagged classically negative for outcomes.

SECTION: DO NOT CONFUSE WITH asterwise_get_natal_chart — requires birth data, not query-moment prashna. asterwise_get_kp_chart — natal KP from birth time, not horary keyword mapping.

ParametersJSON Schema
NameRequiredDescriptionDefault
prashnaYesPrashna (horary) query parameters.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

The description adds valuable behavioral context beyond annotations. While annotations indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, the description details the horary workflow, Moon diagnostics, verdict scoring, and error handling (e.g., bad question tokens cause INTERNAL_ERROR). It also notes edge cases like 'Moon void-of-course flagged classically negative for outcomes,' which provides important behavioral insight not covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

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

The description is structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), which aids readability. However, it is quite lengthy and includes some redundant details (e.g., repeating output fields that are already in the output schema). While informative, it could be more concise by focusing only on value-added information beyond structured fields.

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 complexity, rich output schema, and comprehensive annotations, the description is highly complete. It covers purpose, usage guidelines, workflow, input constraints, output details, error handling, and sibling tool distinctions. The presence of an output schema means the description doesn't need to explain return values in depth, and it effectively supplements the structured data with necessary context.

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 description adds some parameter semantics, such as specifying that 'question must be exactly one of: self, wealth, siblings...' and warning that 'Full sentences are not validated locally and are rejected upstream.' However, with 100% schema description coverage, the schema already documents all parameters thoroughly. The description provides additional context but doesn't significantly enhance understanding beyond what the schema offers.

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 'casts a Prashna chart for the query instant' and specifies it returns 'houses, Moon diagnostics, verdict, and cusps.' It explicitly distinguishes from sibling tools asterwise_get_natal_chart and asterwise_get_kp_chart by stating this is for horary analysis, not natal life analysis or KP cusps from birth.

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 guidance on when to use this tool versus alternatives. It states 'Not natal life analysis (asterwise_get_natal_chart) and not KP cusps from birth (asterwise_get_kp_chart).' It also specifies this is for 'horary workflow' and is 'standalone for horary,' clearly defining its intended context.

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

asterwise_get_puja_suggestionsA
Read-onlyIdempotent
Inspect

Returns puja (ritual worship) recommendations for planetary propitiation per graha.

SECTION: WHAT THIS TOOL COVERS For each of the nine grahas, returns: puja name, presiding deity, day of week, specific offerings (flowers, grains, incense), grain associated, and beej mantra. Used by practitioners to recommend planetary remedies based on chart analysis.

SECTION: WORKFLOW BEFORE: asterwise_get_natal_chart — identify afflicted planets before recommending pujas. AFTER: asterwise_get_rudraksha — complementary bead-based remedy.

SECTION: INPUT CONTRACT planet (optional): One of Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu. Omit to get all nine planets.

SECTION: OUTPUT CONTRACT Single planet: data.planet, data.puja_name, data.deity, data.day, data.offerings[], data.grain, data.mantra All planets: data.planets{} — object keyed by planet name

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (upstream): Unknown planet name → MCP INTERNAL_ERROR INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_remedies — personalised remedies from natal chart analysis. asterwise_get_rudraksha — bead recommendations, not puja rituals.

ParametersJSON Schema
NameRequiredDescriptionDefault
planetNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already declare read-only and idempotent. The description adds compute class 'FAST_LOOKUP', error contracts (INVALID_PARAMS leads to INTERNAL_ERROR), and detailed output contract. 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.

Conciseness5/5

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

The description is well-organized with clear sections (WORKFLOW, INPUT CONTRACT, etc.) and front-loads the core purpose. Each section adds value without redundancy.

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 moderate complexity, output schema exists, and annotations cover safety, the description provides thorough context: workflow, error handling, compute class, and differentiation from siblings. No missing pieces.

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 0%, so description carries full burden. It explains the 'planet' parameter well, listing valid values and behavior when omitted. However, it does not document 'response_format' (required enum), missing its purpose (whether to return markdown or json). Slight gap.

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 returns puja recommendations for planetary propitiation per graha, listing output fields (puja_name, deity, day, etc.). It explicitly distinguishes from sibling tools in the 'DO NOT CONFUSE WITH' section, naming asterwise_get_remedies and asterwise_get_rudraksha.

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 workflow guidance: 'BEFORE: asterwise_get_natal_chart' and 'AFTER: asterwise_get_rudraksha'. It also tells when not to use it by naming alternative tools, giving clear usage context.

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

asterwise_get_rahu_kaalA
Read-onlyIdempotent
Inspect

Computes Rahu Kaal, Gulika Kaal, and Yamaganda Kaal intervals from diurnal length at a location and marks whether Rahu Kaal is active now in local time.

SECTION: WHAT THIS TOOL COVERS Returns sunrise/sunset anchors plus three inauspicious bands with start, end, duration_minutes (~93 for Rahu Kaal), and is_active on Rahu Kaal. Polar latitudes where sunrise/sunset cannot be solved fail upstream. It does not return Panchanga tithi/nakshatra (asterwise_get_panchanga) or scored muhurta search (asterwise_get_muhurta).

SECTION: WORKFLOW BEFORE: None — this tool is standalone. AFTER: asterwise_get_choghadiya — broader auspicious/inauspicious grid for the day.

SECTION: INPUT CONTRACT LocationInput validates date pattern and coordinates locally.

SECTION: OUTPUT CONTRACT data.date (string) data.sunrise (string — HH:MM local) data.sunset (string — HH:MM local) data.rahu_kaal: start (string — HH:MM local) end (string — HH:MM local) duration_minutes (int — typically 93) is_active (bool) data.gulika_kaal — same shape as data.rahu_kaal data.yamaganda_kaal — same shape as data.rahu_kaal

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — Invalid LocationInput fields → MCP INVALID_PARAMS

INVALID_PARAMS (upstream): — None — polar or astronomical failures surface as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Polar latitudes may make sunrise/sunset undefined for the solver → MCP INTERNAL_ERROR.

SECTION: DO NOT CONFUSE WITH asterwise_get_choghadiya — full day/night slot tables, not only the three kaal bands. asterwise_get_panchanga — Panchanga limbs, not kaal timers.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationYesFor tools that need location but not birth time.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already provide readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond annotations: it specifies polar latitude failures (INTERNAL_ERROR), describes the compute class as FAST_LOOKUP, explains error contracts (INVALID_PARAMS vs INTERNAL_ERROR), and details the response format options (json vs markdown).

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 (WHAT THIS TOOL COVERS, WORKFLOW, etc.) that make information easy to find. While comprehensive, some sections could be more concise - the OUTPUT CONTRACT section repeats field names that could be inferred from context, and the ERROR CONTRACT section is quite detailed.

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 complexity, rich annotations, and detailed output schema, the description provides excellent contextual completeness. It covers purpose, usage guidelines, behavioral details, error handling, sibling differentiation, and response formats - everything needed for an agent to understand when and how to use this tool effectively.

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 fully documents all parameters. The description adds minimal parameter-specific information beyond the schema - it mentions LocationInput validates date pattern and coordinates locally, but doesn't provide additional semantic context about parameter usage or meaning.

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 computes three specific inauspicious time intervals (Rahu Kaal, Gulika Kaal, Yamaganda Kaal) from diurnal length at a location and marks whether Rahu Kaal is active now. It distinguishes from siblings by explicitly naming asterwise_get_choghadiya and asterwise_get_panchanga as different 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?

The description provides explicit guidance in multiple sections: 'WHAT THIS TOOL COVERS' clarifies what it returns and what it doesn't (contrasting with siblings), 'WORKFLOW' specifies it's standalone and suggests asterwise_get_choghadiya as a follow-up, and 'DO NOT CONFUSE WITH' explicitly names alternative tools with their purposes.

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

asterwise_get_remediesA
Read-onlyIdempotent
Inspect

Derives classical remedial prescriptions from planetary weakness and dusthana lordship and returns mantra, lifestyle, charity, and dignity tables.

SECTION: WHAT THIS TOOL COVERS Builds data.recommended_remedies[] for grahas judged weak or afflicted plus data.planet_dignities[] for all nine planets. It is not Lal Kitab totka advice (asterwise_get_lal_kitab_remedies) nor a curated gem safety brief (asterwise_get_gemstone_recommendations). Empty recommended_remedies[] means no weak planets were flagged — not an error.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — chart context before choosing remedies. AFTER: asterwise_get_gemstone_recommendations — optional focused gem briefing.

SECTION: INPUT CONTRACT BirthData follows the global contract.

SECTION: OUTPUT CONTRACT data.recommended_remedies[] — each object: planet (string) dignity (string — e.g. 'debilitated', 'enemy', 'neutral') rashi (string) house (int) is_dusthana_lord (bool) reason (string) mantra (string) repetitions (int — typically 108) deity (string) gemstone (string) colour (string) metal (string) fast_day (string) charity (string) action_daily (string) action_weekly (string) data.planet_dignities[] — nine objects: planet, dignity, rashi, house (int)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — Dates before 1800 or after 2100 → MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Empty data.recommended_remedies[] when no weak grahas — valid success.

SECTION: DO NOT CONFUSE WITH asterwise_get_lal_kitab_remedies — household Lal Kitab totkas, not mantra/gem classical rows. asterwise_get_gemstone_recommendations — gemstone roles and contraindications only, not full lifestyle remedies.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Discloses compute class (MEDIUM_COMPUTE), error contracts with specific conditions, edge cases (empty recommended_remedies means no weak planets), and response format behavior. No contradiction with annotations (readOnlyHint=true, etc.).

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?

Well-structured with clear headings and sections. Some redundancy, but each section adds value. Could be slightly more concise, but overall efficient for the complexity.

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?

Covers all needed aspects: purpose, workflow, input/output contracts, error handling, response format options, compute class, and edge cases. Given the complexity and presence of output schema, this is 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?

The schema already has detailed descriptions for each parameter, including the birth object properties. The description adds an 'Input Contract' reference but does not add new semantics beyond the schema. 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 clearly states it derives classical remedial prescriptions from planetary weakness and dusthana lordship, and distinguishes from sibling tools like asterwise_get_lal_kitab_remedies and asterwise_get_gemstone_recommendations.

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 workflow section with BEFORE and AFTER recommendations, and a 'DO NOT CONFUSE WITH' section. Does not explicitly list when to use vs alternatives beyond sibling distinctions, but offers good contextual guidance.

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

asterwise_get_rudrakshaA
Read-onlyIdempotent
Inspect

Returns Rudraksha bead recommendations per planet.

SECTION: WHAT THIS TOOL COVERS For each of the nine planets, returns: mukhi (face count), presiding deity, exact beej mantra, recommended metal for stringing, wearing day, mala bead count (108), recommended wearing finger, and spiritual benefits.

SECTION: WORKFLOW BEFORE: asterwise_get_natal_chart — identify planets needing support. AFTER: None.

SECTION: INPUT CONTRACT planet (optional): One of Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu. Omit to get all nine planets.

SECTION: OUTPUT CONTRACT Single planet: data.planet, data.mukhi (int), data.presiding_deity, data.mantra, data.metal, data.wearing_day, data.mala_beads (int), data.wearing_finger, data.benefits All planets: data.planets{} — object keyed by planet name

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (upstream): Unknown planet name → MCP INTERNAL_ERROR INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_gemstone_recommendations — Ratna-style gemstones from natal chart. asterwise_get_puja_suggestions — ritual worship, not bead recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
planetNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already indicate readOnly, idempotent, non-destructive. Description adds compute class (FAST_LOOKUP) and error contracts (INVALID_PARAMS, INTERNAL_ERROR). No contradiction with annotations; additional context is helpful.

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?

Well-structured with clear sections, front-loaded with purpose. Slightly verbose but each section adds value. Efficient for a comprehensive description.

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 presence of output schema, description fully explains return values in output contract. Covers error contracts and compute class. No gaps for intended use case.

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?

With 0% schema coverage, description compensates by documenting planet parameter with valid values and default (omit for all planets). Response_format is covered by schema enum. Adequate but could add more detail on response_format behavior.

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 the tool returns Rudraksha bead recommendations per planet, listing specific attributes (mukhi, deity, mantra, etc.). It differentiates from sibling tools like gemstone and puja suggestions, satisfying specificity and distinction.

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 workflow: use after asterwise_get_natal_chart to identify planets needing support. Also includes a 'DO NOT CONFUSE WITH' section naming specific alternatives, guiding when not 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.

asterwise_get_soul_urge_numberA
Read-onlyIdempotent
Inspect

Calculates the Soul Urge (Heart's Desire) number from vowels in the full name. Only A, E, I, O, U are treated as vowels — Y is always a consonant in this system. Reduces each name part separately before summing, preserving master numbers 11, 22, 33.

SECTION: WHAT THIS TOOL COVERS The Soul Urge reveals the inner motivation — what the soul craves, what drives choices at the deepest level. It is the hidden engine beneath the Expression. This is the most private of the three core name numbers.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_personality_number — complete the name number trinity.

SECTION: INPUT CONTRACT name — Full legal name as used at birth. Example: 'Arjun Mehta', 'Sofia Rossi' Y is always treated as a consonant — not a vowel.

SECTION: OUTPUT CONTRACT data.number (int — Soul Urge number; 11/22/33 preserved as master) data.is_master_number (bool) data.karmic_debt_number (int or null)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None — validation is upstream. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_expression_number — all letters, not vowels only. asterwise_get_personality_number — consonants only, not vowels.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already indicate read-only and idempotent behavior. The description adds detailed behavioral traits: vowel selection rules, separate reduction of each name part, preservation of master numbers 11/22/33, error contracts, and compute class. 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 well-structured with sections (WORKFLOW, INPUT CONTRACT, etc.), front-loading the core calculation. While slightly lengthy, every section adds value, and the structure aids readability. Minor redundancy in the 'SECTION: RESPONSE FORMAT' could be streamlined.

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 workflow, input contract with examples, output contract with return fields, response format options, error contract, and disambiguation from siblings. Given the presence of an output schema (not shown but referenced), this is very complete.

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 0%, but the description compensates by explaining the 'name' parameter with examples and the 'response_format' parameter with its two modes (json and markdown). Could include more detail on response_format usage but sufficient for correct invocation.

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 calculates the Soul Urge number from vowels in the full name, with explicit rules (only A,E,I,O,U, Y as consonant). It also distinguishes itself from sibling tools in the 'DO NOT CONFUSE WITH' section, naming asterwise_get_expression_number and asterwise_get_personality_number.

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 a 'WORKFLOW' section specifying that it is standalone (no before tool) and suggests using asterwise_get_personality_number after. The 'DO NOT CONFUSE WITH' section provides clear alternatives and exclusions.

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

asterwise_get_special_ascendantsA
Read-onlyIdempotent
Inspect

Calls atmakaraka and ishta-devata endpoints sequentially and merges their payloads into top-level atmakaraka and ishta_devata objects for one BirthData.

SECTION: WHAT THIS TOOL COVERS Returns the karaka layer: eight-karaka mapping, soul significator graha, navamsa-based ishta devata inference, twelfth-house occupants, and D9 positions map. It is not general prediction, medical timing, or matchmaking scoring. Two planets tied by degree use classical highest-longitude resolution without raising an error.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — understand chart basics before devotional pointers. AFTER: None.

SECTION: INPUT CONTRACT Wrapper returns { atmakaraka: , ishta_devata: } — not a flat data.* root; consumers must read nested .data fields inside each branch per upstream shape.

SECTION: OUTPUT CONTRACT Top-level merge: atmakaraka — upstream POST /v1/astro/atmakaraka body; use atmakaraka.data: karaka_to_planet{} (eight karakas to planet names) planet_to_karaka{} atmakaraka (string) atmakaraka_sign (string) atmakaraka_nakshatra (string) details{} — per karaka: planet, rashi, nakshatra, longitude ishta_devata — upstream POST /v1/astro/ishta-devta body; use ishta_devata.data: atmakaraka (string) karakamsha_lagna (string) karakamsha_lagna_index (int) jivanmuktamsa_planet (string) navamsa_lagna (string) navamsa_lagna_index (int) twelfth_house_sign (string) twelfth_house_index (int) planets_in_12th[] (string array) ishta_devta_planet (string) deity (string) description (string) method (string) d9_positions{} — per planet: { sign (string), sign_num (int) }

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — BirthData validated via Pydantic only.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout on either sequential call → MCP INTERNAL_ERROR

Edge cases: — Identical-degree planets: classical tie-break applies; no error.

SECTION: DO NOT CONFUSE WITH asterwise_get_natal_chart — general chart; does not compute ishta devata workflow. asterwise_get_char_dasha — timing system using karakas, not deity discovery.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Describes sequential API calls, merging behavior, classical tie-breaking for identical-degree planets, and comprehensive error contracts. Annotations (readOnlyHint, idempotentHint) are consistent, and the description adds significant behavioral context beyond them.

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-sectioned with clear headers (WHAT THIS TOOL COVERS, WORKFLOW, INPUT/OUTPUT CONTRACT, etc.). Each section adds value, though some redundancy exists. Front-loaded with purpose.

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 tool complexity (nested objects, sequential endpoints, multiple error modes), the description is comprehensive: covers input, output, errors, edge cases, and workflow. Output schema exists, and description explains response consumption.

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 50% but the description adds meaning for the 'birth' parameter via input contract explanation and outlines output structure details. The output schema exists, but description clarifies how to read nested .data fields.

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 calls two endpoints sequentially and merges payloads into atmakaraka and ishta_devata objects. It specifies the scope (karaka layer, not general prediction) and distinguishes from siblings like asterwise_get_natal_chart and asterwise_get_char_dasha.

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 when-to-use guidance (recommends asterwise_get_natal_chart beforehand) and excludes what it does not cover (general prediction, medical timing, matchmaking). Includes a 'DO NOT CONFUSE WITH' section naming specific siblings.

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

asterwise_get_tamil_panchangaA
Read-onlyIdempotent
Inspect

Returns Tamil-specific Panchanga for a date and location: all four inauspicious periods (Rahu Kalam, Yamagandam, Kuligai, Emagandam), Nalla Neram (auspicious daytime windows between inauspicious periods), and the Tamil solar month name based on the Sun's sidereal sign at sunrise.

SECTION: WHAT THIS TOOL COVERS Rahu Kalam, Yamagandam (Yamakanda), Kuligai (Gulika), and Emagandam divide the daytime into eight equal parts from sunrise to sunset following the Tamil weekday table. Nalla Neram is every gap between the four inauspicious periods — the auspicious windows left for commencing ventures. Tamil solar month follows the Sun's Lahiri sidereal sign at local sunrise (Chithirai when Sun is in Mesha, through Panguni when Sun is in Meena). This tool does not return Vedic Panchanga limbs (asterwise_get_panchanga) or the standard Rahu/Gulika/Yamaganda breakdown used in North Indian tradition (asterwise_get_rahu_kaal).

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_panchanga — for full Vedic five-limb panchanga of the same date.

SECTION: INPUT CONTRACT date: YYYY-MM-DD format. Either location (city name) OR latitude + longitude + timezone must be provided.

SECTION: OUTPUT CONTRACT data.date (string — YYYY-MM-DD) data.sunrise (string — HH:MM local time) data.sunset (string — HH:MM local time) data.tamil_month (string — Tamil solar month name, e.g. 'Chithirai', 'Vaikasi') data.rahu_kalam: start, end (HH:MM), duration_minutes (int), is_active (bool) data.yamagandam: start, end (HH:MM), duration_minutes (int), is_active (bool) data.kuligai: start, end (HH:MM), duration_minutes (int), is_active (bool) data.emagandam: start, end (HH:MM), duration_minutes (int), is_active (bool) data.nalla_neram: list of { start (HH:MM), end (HH:MM) } objects

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP — sunrise computation + lookup tables, no full natal chart.

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None — all validation upstream. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR Edge cases: — Polar latitudes where sunrise cannot be computed → MCP INTERNAL_ERROR. — Emagandam part table: Sun=5, Mon=4, Tue=3, Wed=2, Thu=8, Fri=1, Sat=7.

SECTION: DO NOT CONFUSE WITH asterwise_get_rahu_kaal — North Indian Rahu/Gulika/Yamaganda only; no Emagandam, Nalla Neram, or Tamil month. asterwise_get_panchanga — five Vedic limbs (tithi, vara, nakshatra, yoga, karana); not Tamil-specific periods.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
latitudeNo
locationNo
timezoneNo
longitudeNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint false. The description adds value by detailing compute class (FAST_LOOKUP), error contract (polar latitudes, internal errors), and edge cases (Emagandam part table). 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 structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), which aids readability. It is fairly long but each section provides necessary detail. Slightly verbose but well-organized.

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 6 parameters, annotations, and output schema, this description is highly complete. It covers input contract, output contract with all fields, error handling, compute class, and distinctions from siblings. The output schema is detailed, so description does not need to repeat return values.

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 has 0% coverage, so description must compensate. It explains the date format, the location vs lat/lon/timezone requirement, and response_format enum behavior (json vs markdown). Though not per-parameter documentation, it adds sufficient meaning beyond 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 the tool returns Tamil-specific Panchanga including four inauspicious periods (Rahu Kalam, Yamagandam, Kuligai, Emagandam), Nalla Neram, and Tamil solar month. It distinguishes itself from siblings like asterwise_get_rahu_kaal and asterwise_get_panchanga by detailing what it covers and does not cover.

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 and when-not-to-use guidance. The 'WORKFLOW' section states no prerequisites, and 'DO NOT CONFUSE WITH' lists alternatives. The 'INPUT CONTRACT' clarifies required parameters. This helps the agent select the tool correctly.

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

asterwise_get_tarot_cardA
Read-onlyIdempotent
Inspect

Returns full structured data for a single card identified by its slug ID. Useful for card detail pages, single-card lookups, and displaying a specific card after the user selects one by name.

SECTION: WHAT THIS TOOL COVERS Returns one card object from the 78-card Rider-Waite-Smith deck. The slug is the card's unique identifier in lowercase-hyphenated format. All fields are identical to what asterwise_get_tarot_cards returns per card.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: None.

SECTION: INPUT CONTRACT card_id — Slug identifier for the card. Must be exact. Major Arcana examples: 'the-fool', 'the-magician', 'the-high-priestess', 'the-empress', 'the-emperor', 'the-hierophant', 'the-lovers', 'the-chariot', 'strength', 'the-hermit', 'wheel-of-fortune', 'justice', 'the-hanged-man', 'death', 'temperance', 'the-devil', 'the-tower', 'the-star', 'the-moon', 'the-sun', 'judgement', 'the-world' Minor Arcana pattern: '{rank}-of-{suit}' Examples: 'ace-of-wands', 'two-of-cups', 'ten-of-swords', 'page-of-pentacles', 'knight-of-wands', 'queen-of-cups', 'king-of-swords'

SECTION: OUTPUT CONTRACT data — single card object: id (string — slug), name (string), arcana_type ('major'|'minor'), suit (string|null) number (int — 0=Fool, 1–21=Major; 1=Ace, 11=Page, 12=Knight, 13=Queen, 14=King) element (string), astrology_correspondence (string) keywords_upright[] (string array), keywords_reversed[] (string array) upright_meaning (string), reversed_meaning (string) yes_no ('yes'|'no'|'maybe'), description (string — visual imagery)

SECTION: RESPONSE FORMAT response_format=json — single card object as JSON. response_format=markdown — human-readable card detail.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None. INTERNAL_ERROR: Unknown card_id returns 404 upstream → MCP INTERNAL_ERROR If the card is not found, check slug format: lowercase, hyphens, no spaces.

SECTION: DO NOT CONFUSE WITH asterwise_get_tarot_cards — returns all 78 cards in one call. asterwise_draw_tarot_cards — random draw, not a specific card.

ParametersJSON Schema
NameRequiredDescriptionDefault
card_idYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations declare readOnlyHint, idempotentHint, and destructiveHint. The description adds compute class (FAST_LOOKUP), error behavior for unknown slugs (returns 404), and slug format requirements. 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.

Conciseness4/5

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

Well-organized with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, OUTPUT CONTRACT, etc.). Some redundancy (e.g., slug format repeated), but overall efficient for the level of detail.

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?

Fully describes input (with examples), output (detailed schema), error handling, and workflow. No missing information for a single-card lookup with only two parameters.

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 0%, but description compensates with extensive examples for card_id (all major arcana slugs and minor arcana pattern) and explains response_format enum values (json/markdown) and their output contracts.

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 'Returns full structured data for a single card identified by its slug ID.' It clearly distinguishes from siblings asterwise_get_tarot_cards and asterwise_draw_tarot_cards with specific differentiators.

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 states use cases: 'card detail pages, single-card lookups, and displaying a specific card after the user selects one by name.' The 'DO NOT CONFUSE WITH' section clearly lists alternatives and their purposes.

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

asterwise_get_tarot_card_of_the_dayA
Read-onlyIdempotent
Inspect

Returns a deterministic daily tarot card seeded by SHA-256 hash of the date string. The same card is returned for all callers on the same date — this is intentional. The daily card is not a reading for an individual but a collective daily energy.

SECTION: WHAT THIS TOOL COVERS Deterministic daily oracle: one card with its upright or reversed orientation (also deterministic when allow_reversed=true). The SHA-256 seed ensures that no two consecutive days produce the same card except by mathematical coincidence. The active_meaning field pre-computes the correct interpretation for the orientation — callers do not need to branch on is_reversed.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_tarot_three_card_spread — for deeper daily reading context.

SECTION: INPUT CONTRACT date (optional string YYYY-MM-DD) — Date to get the card for. Defaults to today. Example: '2026-05-01' allow_reversed (optional bool) — Default: false. When true: reversed state is also deterministic (seeded by date+'_rev'). When false: card is always upright regardless of date.

SECTION: OUTPUT CONTRACT data.date (string — YYYY-MM-DD, the date this card represents) data.card — full card object (same shape as asterwise_get_tarot_card) data.is_reversed (bool) data.active_meaning (string — upright_meaning when not reversed, reversed_meaning when reversed) data.active_keywords[] (string array — upright or reversed keywords per orientation)

SECTION: RESPONSE FORMAT response_format=json — full card object with metadata. response_format=markdown — human-readable daily card report.

SECTION: COMPUTE CLASS FAST_LOOKUP — deterministic, no randomness.

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None — date is validated upstream. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_draw_tarot_cards — random draw, different every call. asterwise_get_tarot_three_card_spread — positional reading with question context.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
allow_reversedNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Beyond annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds deterministic SHA-256 seeding, collective energy purpose, orientation determinism, and pre-computed active_meaning. 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 lengthy but well-structured with clear sections (WHAT, WORKFLOW, INPUT CONTRACT, etc.). It is front-loaded with the core purpose. A minor reduction in verbosity could improve conciseness, but structure aids readability.

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 complexity (multiple parameters, response formats, deterministic vs random siblings), the description covers all aspects: input, output, error contract, compute class, workflow, and disambiguation. Output schema exists, so return value details are adequate.

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?

Despite 0% schema description coverage, the 'INPUT CONTRACT' section fully explains each parameter with examples, defaults, and behavior (e.g., date format YYYY-MM-DD, allow_reversed seeding). Output contract also describes response fields.

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 returns a deterministic daily tarot card seeded by date hash, distinguishing it from random draws like asterwise_draw_tarot_cards and other tarot tools. It explicitly contrasts with siblings in the 'DO NOT CONFUSE WITH' section.

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 a 'WORKFLOW' section stating it's standalone and suggests using asterwise_get_tarot_three_card_spread for deeper context. The 'DO NOT CONFUSE WITH' section explicitly tells when not to use this tool (random draws, reading with question context).

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

asterwise_get_tarot_cardsA
Read-onlyIdempotent
Inspect

Returns the complete 78-card Rider-Waite-Smith deck with full metadata. Each card includes id (slug), name, arcana_type (major/minor), suit, number, element, astrology_correspondence, upright and reversed meanings, keywords for both orientations, yes/no polarity, and visual description.

SECTION: WHAT THIS TOOL COVERS The complete 78-card Rider-Waite-Smith deck as structured JSON. Every card includes both upright and reversed meanings as separate fields, making orientation-aware interpretation automatic — the caller does not need to branch on is_reversed. The visual description field describes the imagery of each card. Use this endpoint to populate card databases, build card browsers, filter by element or astrology correspondence, or batch-load the deck for offline use.

SECTION: WORKFLOW BEFORE: None — standalone catalogue endpoint. AFTER: asterwise_draw_tarot_cards or asterwise_get_tarot_three_card_spread — use card data from this endpoint to build enriched display layers.

SECTION: INPUT CONTRACT response_format — Required: markdown | json (same as all Asterwise tools). No other parameters.

SECTION: OUTPUT CONTRACT data[] — 78 card objects, each: id (slug e.g. 'the-fool', 'ace-of-wands') name, arcana_type, suit (null for major arcana), number element, astrology_correspondence keywords_upright[], keywords_reversed[] upright_meaning, reversed_meaning yes_no ('yes'|'no'|'maybe'), description

SECTION: RESPONSE FORMAT response_format=json serialises the complete 78-card array as indented JSON. response_format=markdown renders a structured human-readable card catalogue. Both modes return identical underlying data.

SECTION: COMPUTE CLASS FAST_LOOKUP — data is static; no ephemeris or randomness involved.

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None — no input parameters beyond response_format. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_tarot_major_arcana — returns only the 22 Major Arcana subset. asterwise_get_tarot_suit — returns only the 14 cards of a single suit. asterwise_draw_tarot_cards — returns a random draw, not the catalogue.

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations provide readOnlyHint, idempotentHint, and destructiveHint. The description adds that data is static ('no ephemeris or randomness involved') and assigns it to compute class 'FAST_LOOKUP', going beyond annotations 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.

Conciseness4/5

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

The description is well-structured with clear sections, but it is somewhat lengthy. Every section adds value, but some redundancy exists (e.g., repeating the list of fields in multiple sections). Still, it is front-loaded and well-organized.

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 output schema exists, the description still provides a detailed output contract and covers errors, response formats, and compute class. For a simple static data retrieval tool with comprehensive annotations, the description is fully complete.

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?

The only parameter 'response_format' has an enum (markdown/json). The description explains the effect of each format: 'response_format=json serialises the complete 78-card array as indented JSON' and 'response_format=markdown renders a structured human-readable card catalogue', adding meaning 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?

The description clearly states 'Returns the complete 78-card Rider-Waite-Smith deck with full metadata,' specifying the verb and resource. It also distinguishes itself from siblings like asterwise_get_tarot_major_arcana and asterwise_get_tarot_suit in a dedicated 'DO NOT CONFUSE WITH' section.

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 workflow guidance (BEFORE/AFTER) and a dedicated 'DO NOT CONFUSE WITH' section that lists alternative tools and their purposes. It clarifies that this tool is for the full catalogue, not random draws or subsets.

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

asterwise_get_tarot_celtic_crossA
Read-only
Inspect

Ten-card Celtic Cross spread — traditional ten-position tarot layout. Draws 10 unique cards using cryptographic randomness and assigns each to one of the 10 classical Celtic Cross positions.

SECTION: WHAT THIS TOOL COVERS The Celtic Cross examines a situation from 10 angles simultaneously: Position 1 (present) — the core situation Position 2 (challenge) — what crosses or complicates it Position 3 (root) — unconscious foundation or distant past Position 4 (past) — recent events that led here Position 5 (possible_outcome) — what could happen if current energy continues Position 6 (near_future) — what is coming in the next weeks Position 7 (self) — how you see yourself / your attitude Position 8 (external) — how others see you or environmental factors Position 9 (hopes_and_fears) — what you hope for or fear Position 10 (outcome) — the most likely final resolution All position meanings are included in the response — callers do not need external tables.

SECTION: WORKFLOW BEFORE: None — standalone reading, or follow asterwise_get_tarot_three_card_spread when a more detailed examination of the same question is needed. AFTER: None.

SECTION: INPUT CONTRACT allow_reversed (bool, default false) — Each card independently has 50% reversal chance. question (optional string, max 500 chars) — The question or situation being examined. Example: 'Should I accept the job offer in London?'

SECTION: OUTPUT CONTRACT data.spread_type (string — 'celtic_cross') data.positions[] — 10 objects in order [present, challenge, root, past, possible_outcome, near_future, self, external, hopes_and_fears, outcome]: card — full card object is_reversed (bool) position (string — named position key) position_meaning (string — what this position represents) active_meaning (string — orientation-appropriate interpretation) active_keywords[] (string array) data.question (string or null — echoed)

SECTION: RESPONSE FORMAT response_format=json — full 10-card spread object. response_format=markdown — formatted Celtic Cross reading.

SECTION: COMPUTE CLASS FAST_LOOKUP — cryptographic randomness, no ephemeris.

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_tarot_three_card_spread — 3 positions only; use for simpler questions. asterwise_draw_tarot_cards — free draw with no positional meaning. asterwise_get_tarot_yes_no — binary answer, not positional analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionNo
allow_reversedNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds key behavioral traits: cryptographic randomness, independence of reversal chance (50% per card), compute class (FAST_LOOKUP), and error contract details. 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 structured into clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, OUTPUT CONTRACT, RESPONSE FORMAT, COMPUTE CLASS, ERROR CONTRACT, DO NOT CONFUSE WITH). Every section adds value without redundancy, making it efficient and well-organized.

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 3 parameters, an output schema, and annotations, the description is comprehensive. It covers input details, output structure, compute class, error handling, and disambiguation from similar tools. No gaps remain for an agent to select and invoke correctly.

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 description coverage is 0%, but the description explains each parameter in detail: allow_reversed (bool, default false, reversal chance), question (optional string, max 500 chars, example provided), response_format (enum with two options). This compensates fully for the lack of schema 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 defines the tool as a Ten-card Celtic Cross spread with cryptographic randomness and 10 classical positions. It uses specific verbs like 'draws' and 'assigns', and distinguishes itself from sibling tools in the 'DO NOT CONFUSE WITH' section.

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 'WORKFLOW' section indicates it's a standalone reading or can follow a three-card spread for more detail. The 'DO NOT CONFUSE WITH' section explicitly lists alternative tools (three-card spread, free draw, yes/no) and when to use them, providing clear guidance.

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

asterwise_get_tarot_major_arcanaA
Read-onlyIdempotent
Inspect

Returns all 22 Major Arcana cards (The Fool through The World) as a structured array. Major Arcana represent universal archetypes and major life themes.

SECTION: WHAT THIS TOOL COVERS The 22 Major Arcana are the foundation of the tarot — they deal with karmic and spiritual lessons, major life events, and universal forces. They are numbered 0 (The Fool) through 21 (The World). Each has an astrological correspondence and elemental association.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_draw_tarot_cards — draw from this subset by filtering by arcana_type.

SECTION: INPUT CONTRACT response_format — Required: markdown | json.

SECTION: OUTPUT CONTRACT data[] — 22 card objects, each identical to asterwise_get_tarot_card output. Ordered 0–21 (The Fool through The World).

SECTION: RESPONSE FORMAT response_format=json — array of 22 card objects. response_format=markdown — formatted list.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_tarot_cards — full 78-card deck including Minor Arcana. asterwise_get_tarot_suit — 14 Minor Arcana cards by suit.

ParametersJSON Schema
NameRequiredDescriptionDefault
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already provide readOnlyHint, idempotentHint, destructiveHint; the description adds practical context like 'COMPUTE CLASS: FAST_LOOKUP', ordering (0-21), and error contracts, exceeding the annotation information.

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?

Well-structured with clear sections, but somewhat verbose; each section adds value, but could be more streamlined without losing 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?

Comprehensive: covers input/output contracts, error handling, compute class, workflow, and comparisons to sibling tools. Given the simple nature and existing output schema, no gaps remain.

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 0%; description compensates by explaining the 'response_format' parameter's options ('markdown' or 'json') and how each affects the output (array vs. formatted list), but could provide more detail on usage.

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 returns all 22 Major Arcana cards with names and numbering, and explicitly distinguishes from the full tarot deck and suit-specific tools in the 'DO NOT CONFUSE WITH' section.

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?

Includes a 'WORKFLOW' section stating it is standalone and can be followed by 'asterwise_draw_tarot_cards' for subset drawing, plus a 'DO NOT CONFUSE WITH' section that names alternative tools for different scopes.

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

asterwise_get_tarot_suitA
Read-onlyIdempotent
Inspect

Returns all 14 cards in a given Minor Arcana suit as a structured array.

SECTION: WHAT THIS TOOL COVERS Each of the four suits has 14 cards: Ace through 10 plus Page, Knight, Queen, King. Elemental associations: Wands=fire (action, career, creativity), Cups=water (emotions, relationships, intuition), Swords=air (intellect, conflict, truth), Pentacles=earth (material, money, body, practical matters).

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: None.

SECTION: INPUT CONTRACT suit — One of exactly: 'wands', 'cups', 'swords', 'pentacles'. Case-insensitive. Any other value is rejected locally with MCP INVALID_PARAMS.

SECTION: OUTPUT CONTRACT data[] — 14 card objects for the requested suit, each identical to asterwise_get_tarot_card output. Ordered Ace through King.

SECTION: RESPONSE FORMAT response_format=json — array of 14 card objects. response_format=markdown — formatted list.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local): — suit not in {wands, cups, swords, pentacles} → MCP INVALID_PARAMS immediately. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_tarot_major_arcana — 22 Major Arcana, not suit-based. asterwise_get_tarot_cards — full 78-card catalogue.

ParametersJSON Schema
NameRequiredDescriptionDefault
suitYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations show readOnlyHint=true, idempotentHint=true, destructiveHint=false, consistent with a safe lookup. Description adds error contracts (INVALID_PARAMS for invalid suit, INTERNAL_ERROR for API failure), compute class (FAST_LOOKUP), and output format details, going 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.

Conciseness5/5

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

Well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.). Every sentence adds value, and key info is front-loaded. No unnecessary text.

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?

Covers input validation, output ordering (Ace through King), error handling, compute classification, and differentiation from siblings. Despite having output schema, description adds ordering context and structure details.

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 description coverage is 0%, but description compensates by specifying allowed suit values (wands, cups, swords, pentacles, case-insensitive) and detailing response_format options (json vs markdown) with output structure explanation.

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 returns all 14 cards in a given Minor Arcana suit, including the range (Ace through King) and elemental associations. It distinguishes from sibling tools asterwise_get_tarot_major_arcana and asterwise_get_tarot_cards.

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 says 'BEFORE: None — standalone. AFTER: None.' and includes a 'DO NOT CONFUSE WITH' section that lists and describes sibling tools, providing clear guidance on when to use this tool vs alternatives.

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

asterwise_get_tarot_three_card_spreadA
Read-only
Inspect

Past / Present / Future spread. Draws 3 unique cards using cryptographic randomness and assigns each to a named positional slot with an interpretive context.

SECTION: WHAT THIS TOOL COVERS The three-card spread is the most widely used tarot layout. Position 1 (past) shows what led to the current situation. Position 2 (present) shows current energy and the core issue. Position 3 (future) shows the likely outcome if current energy continues. Each card returns position, position_meaning, and active_meaning — the complete interpretive context is included; callers do not need external position tables.

SECTION: WORKFLOW BEFORE: None — standalone reading. AFTER: asterwise_get_tarot_celtic_cross — for deeper 10-position analysis of same question.

SECTION: INPUT CONTRACT allow_reversed (bool, default false) — Each card independently has 50% reversal chance. question (optional string, max 500 chars) — The question being asked. Setting a question is strongly recommended for coherent readings. Example: 'What should I focus on in my career this month?' The question is echoed in the response but does not affect card selection.

SECTION: OUTPUT CONTRACT data.spread_type (string — 'three_card') data.positions[] — 3 objects in order [past, present, future]: card — full card object is_reversed (bool) position (string — 'past'|'present'|'future') position_meaning (string — what this position represents in the spread) active_meaning (string — orientation-appropriate card interpretation) active_keywords[] (string array) data.question (string or null — echoed)

SECTION: RESPONSE FORMAT response_format=json — full spread object. response_format=markdown — formatted three-card reading.

SECTION: COMPUTE CLASS FAST_LOOKUP — cryptographic randomness, no ephemeris.

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_draw_tarot_cards — free draw with no positional meaning. asterwise_get_tarot_celtic_cross — 10-card spread with comprehensive positional coverage. asterwise_get_tarot_yes_no — single-card binary answer, no positional structure.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionNo
allow_reversedNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations indicate readOnlyHint=true, and the description adds that it uses cryptographic randomness, draws 3 unique cards, has 50% reversal chance, and details the output contract. It also includes compute class (FAST_LOOKUP) and error contracts, providing comprehensive behavioral context 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 sections and front-loaded first sentence. However, it is verbose with sections like 'COMPUTE CLASS' and 'ERROR CONTRACT' that may not be essential for all agents. Still, each part adds value and the organization is clear.

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 all necessary aspects: what the tool does, input parameters, output structure, workflow, error handling, and comparisons with siblings. It is complete for a tarot reading tool, especially given the presence of an output schema.

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 description coverage is 0%, but the description's 'INPUT CONTRACT' section explains each parameter: allow_reversed (bool, default false, with behavior), question (optional, max 500 chars, with recommendation and example), response_format (enum with format explanation). This fully compensates for the missing schema 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 'Past / Present / Future spread' and defines each position's meaning. It includes a 'DO NOT CONFUSE WITH' section that explicitly distinguishes it from sibling tools like asterwise_draw_tarot_cards and asterwise_get_tarot_celtic_cross.

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 a 'WORKFLOW' section stating it's a standalone reading and suggests after it to use asterwise_get_tarot_celtic_cross for deeper analysis. The 'DO NOT CONFUSE WITH' section explicitly tells when to use alternatives.

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

asterwise_get_tarot_yes_noA
Read-only
Inspect

Draws one card and returns a yes, no, or maybe answer with confidence level. The answer is derived from the card's built-in yes_no polarity and its orientation.

SECTION: WHAT THIS TOOL COVERS Quick binary oracle using the classical tarot yes/no system. Each card in the Rider-Waite-Smith deck has a pre-assigned polarity (yes/no/maybe). Reversal introduces uncertainty — a yes-polarity card reversed becomes maybe rather than no. This allows nuanced answers: strong yes, leaning toward yes, leaning toward no, strong no, or genuinely unclear.

Answer logic (exact): yes-polarity card + upright → answer='yes', confidence='strong' yes-polarity card + reversed → answer='maybe', confidence='leaning' no-polarity card + upright → answer='no', confidence='strong' no-polarity card + reversed → answer='maybe', confidence='leaning' maybe-polarity card (any orientation) → answer='maybe', confidence='unclear'

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_tarot_three_card_spread — for more context when the yes/no answer is 'maybe' or the situation needs elaboration.

SECTION: INPUT CONTRACT allow_reversed (bool, default true) — Recommended to keep true for nuanced answers. Set false only if you want strictly yes/no with no maybe results from reversal. question (optional string, max 500 chars) — The yes/no question being asked. Example: 'Should I accept this job offer?' Example: 'Will the project launch on time?'

SECTION: OUTPUT CONTRACT data.card — full card object data.is_reversed (bool) data.answer (string — 'yes'|'no'|'maybe') data.confidence (string — 'strong' when card directly says yes/no; 'leaning' when reversed card; 'unclear' when maybe-polarity card) data.active_meaning (string — orientation-appropriate interpretation) data.question (string or null — echoed)

SECTION: RESPONSE FORMAT response_format=json — full yes/no result object. response_format=markdown — formatted oracle response.

SECTION: COMPUTE CLASS FAST_LOOKUP — cryptographic randomness, no ephemeris.

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_tarot_three_card_spread — positional reading, not binary answer. asterwise_draw_tarot_cards — free draw without answer logic.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionNo
allow_reversedNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Discloses detailed answer logic, reversal effects, confidence levels, and computational class (FAST_LOOKUP with cryptographic randomness). Annotations already indicate readOnlyHint=true, but description adds depth about behavior 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.

Conciseness4/5

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

Well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, OUTPUT CONTRACT, etc.). Slightly lengthy but all information is relevant and adds value. Could be more concise, but organization aids readability.

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 presence of an output schema, the description thoroughly explains input contracts, output contracts (including data.card, is_reversed, answer, confidence, active_meaning, question), error contracts, and compute class. No gaps remain for the agent to understand tool usage.

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 0%, but the description compensates by explaining each parameter: allow_reversed (bool, default true, with recommendation to keep true), question (optional string, max 500 chars, with examples), and response_format in a separate section. Missing some detail like exact constraint for question max length is mentioned, so score 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 draws one card and returns a yes/no/maybe answer with confidence level. It specifies the verb (draws/returns), resource (tarot card), and result type. The 'DO NOT CONFUSE WITH' section distinguishes it from sibling tools like asterwise_get_tarot_three_card_spread and asterwise_draw_tarot_cards.

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?

Includes a 'WORKFLOW' section that explicitly says 'BEFORE: None — standalone' and 'AFTER: asterwise_get_tarot_three_card_spread — for more context when the yes/no answer is maybe or the situation needs elaboration.' Also provides input contract and do-not-confuse section, giving clear guidance on when to use this tool vs alternatives.

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

asterwise_get_thirumana_poruthamA
Read-onlyIdempotent
Inspect

Evaluates twelve Tamil Thirumana poruthams for two charts, tracks veto severity for Rajju, and returns an expanded breakdown map with tradition metadata.

SECTION: WHAT THIS TOOL COVERS Extends the ten-porutham screen with Nadi and Varna plus richer Rajju severity coding (5=Siro most severe, down to 1=Pada least severe) and labels. Same veto booleans as shorter Tamil tools. Not Ashtakoota (asterwise_get_compatibility) nor Dashakoot (asterwise_get_dashakoot).

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_porutham — quick ten-koota pass before twelve-koota depth. AFTER: None.

SECTION: INPUT CONTRACT Two BirthData objects per global contract.

SECTION: OUTPUT CONTRACT data.total_passed (int — out of 12) data.total_poruthams (int — 12) data.compatibility_level (string) data.rajju_veto (bool) data.vedha_veto (bool) data.hard_veto (bool) data.rajju_severity (int — 5=Siro most severe, 4=Kantha, 3=Udara, 2=Kati, 1=Pada least severe) data.rajju_severity_label (string — body part name) data.tradition (string — 'Tamil Thirumana Porutham') data.breakdown{} — twelve keys with full porutham names (e.g. 'Gana Porutham'): passed (bool) plus type-specific fields following the same patterns as asterwise_get_porutham (counts, scores, rajju pairs, vedha flags, etc.)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — rajju_severity encodes body-zone risk — pair with rajju_veto boolean.

SECTION: DO NOT CONFUSE WITH asterwise_get_porutham — ten poruthams only, no Nadi/Varna keys. asterwise_get_compatibility — North Indian 36-point schema, not Tamil porutham map.

ParametersJSON Schema
NameRequiredDescriptionDefault
person1YesBirth data for a single person.
person2YesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already declare readOnlyHint=true (safe read) and destructiveHint=false. The description adds valuable behavioral context: compute class (MEDIUM_COMPUTE), Rajju severity encoding details, response format options (json vs markdown), and error contracts. 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.

Conciseness4/5

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

The description is structured with labeled sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), making it scannable. However, it is verbose with detailed output and error contracts that could be condensed; every sentence is earned but the length slightly impacts conciseness.

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 12 poruthams, Rajju severity, and rich output, the description is highly complete. It details the output contract with all fields, error handling (INVALID_PARAMS, INTERNAL_ERROR, edge cases), and response formats. Having an output schema further reduces ambiguity.

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 coverage is 67% (all fields except response_format have descriptions). The description clarifies the response_format parameter by explaining both json and markdown modes and their identical data. It also references 'Two BirthData objects per global contract', adding context 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?

The description clearly states it evaluates twelve Tamil Thirumana poruthams for two charts, tracking Rajju severity and returning expanded breakdown with tradition metadata. It explicitly distinguishes from sibling tools like asterwise_get_porutham (ten koota) and asterwise_get_compatibility (North Indian 36-point schema), ensuring no confusion.

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 a recommended before-step: asterwise_get_porutham for a quick ten-koota pass, and a 'DO NOT CONFUSE WITH' section listing alternatives. This gives explicit guidance on when to use this tool versus others.

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

asterwise_get_transitsA
Read-onlyIdempotent
Inspect

Lists sign ingresses and retrograde/direct stations for all planets between two dates against the natal context and returns chronological astronomical events.

SECTION: WHAT THIS TOOL COVERS Aggregates ingress rows (with sankranti flag for Sun) and station rows with Julian day, local ISO timestamps, and ecliptic longitude. The upstream API enforces ordering and a 24-month window; violations are not pre-checked in this MCP layer. It does not return today's full Gochar row (asterwise_get_gochar) or dasha-transit scores (asterwise_get_dasha_transits).

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — clarifies the natal reference for the same birth data. AFTER: asterwise_get_gochar — optional current snapshot after scanning the range.

SECTION: INPUT CONTRACT from_date and to_date are strings in the format expected by the upstream API (typically YYYY-MM-DD). Range cap (24 months), date order, and validity are enforced upstream, not locally.

SECTION: OUTPUT CONTRACT data.ingresses[] — each: planet (string) from_sign (int — 0–11) to_sign (int — 0–11) jd (float) date_iso (string — ISO datetime, local time) is_sankranti (bool — true for Sun ingresses only) retrograde_ingress (bool) data.stations[] — each: planet (string) station_type (string — 'retrograde' or 'direct') jd (float) date_iso (string — ISO datetime) longitude (float)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — range/order violations surface as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Exceeding the 24-month cap or bad date order fails upstream and is not turned into MCP INVALID_PARAMS here.

SECTION: DO NOT CONFUSE WITH asterwise_get_gochar — single-day transit snapshot with houses from Moon/Lagna, not ingress/station lists. asterwise_get_dasha_transits — dasha lord vs transit scoring for today only.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
to_dateYes
from_dateYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations provide readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds valuable behavioral context beyond annotations: it discloses the 24-month window constraint ('upstream API enforces ordering and a 24-month window'), clarifies that violations are not pre-checked locally, and explains error handling ('range/order violations surface as MCP INTERNAL_ERROR'). It also notes the 'MEDIUM_COMPUTE' class. However, it doesn't detail rate limits or authentication needs, which could be relevant for a tool with openWorldHint=true.

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 (e.g., 'WHAT THIS TOOL COVERS', 'WORKFLOW', 'INPUT CONTRACT'), making it easy to scan. However, it is quite lengthy with multiple detailed sections, which may be excessive for a tool with only 4 parameters. Some redundancy exists, such as repeating 'upstream API' constraints in multiple sections. While informative, it could be more concise by consolidating related points.

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 complexity (astrological calculations with a nested 'birth' object), the description is highly complete. It covers purpose, usage guidelines, behavioral traits (e.g., 24-month cap, error handling), parameter semantics, and output details (with a full 'OUTPUT CONTRACT' section). Annotations provide safety hints, and an output schema exists (implied by 'Has output schema: true'), so the description doesn't need to explain return values exhaustively. It addresses all critical aspects for an AI agent to use 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 description coverage is 25% (only the 'birth' object has descriptions), so the description must compensate. It adds significant parameter semantics: it explains that 'from_date and to_date are strings in the format expected by the upstream API (typically YYYY-MM-DD)', clarifies the 'range cap (24 months), date order, and validity are enforced upstream, not locally', and details the 'response_format' options ('json serialises... use this for programmatic parsing... response_format=markdown renders... as a human-readable report'). This goes well beyond the sparse schema, though it doesn't fully document all parameters like the nested 'birth' object details.

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 'Lists sign ingresses and retrograde/direct stations for all planets between two dates against the natal context and returns chronological astronomical events.' This specifies the exact verb ('Lists'), resource ('sign ingresses and retrograde/direct stations'), scope ('all planets between two dates'), and context ('against the natal context'), distinguishing it from siblings like asterwise_get_gochar and asterwise_get_dasha_transits.

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 guidance on when to use this tool versus alternatives. It states 'BEFORE: RECOMMENDED — asterwise_get_natal_chart — clarifies the natal reference' and 'AFTER: asterwise_get_gochar — optional current snapshot after scanning the range.' It also includes a 'DO NOT CONFUSE WITH' section naming specific sibling tools and explaining their differences, such as 'asterwise_get_gochar — single-day transit snapshot... not ingress/station lists' and 'asterwise_get_dasha_transits — dasha lord vs transit scoring for today only.'

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

asterwise_get_varshaphalA
Read-onlyIdempotent
Inspect

Computes the annual Tajika-style solar return for a four-digit civil year and returns Muntha, Pancha Adhikari metrics, Tajika aspects, and varshaphal positions.

SECTION: WHAT THIS TOOL COVERS Varshaphal engine: solar return instant, year lord, muntha block, varsha pati election, five pancha adhikaris with bala components, tajika aspect arrays, and pairwise Tajika geometry including ithsala/musaripha flags. year must mean calendar year (e.g. 2026), not biological age — not enforced locally; wrong integers chart the wrong annual return. Not lifetime Vimshottari (asterwise_get_dasha) nor generic transit ingress lists (asterwise_get_transits).

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — baseline radix before annual overlay. AFTER: None.

SECTION: INPUT CONTRACT year is a plain int sent as target_year upstream; callers must supply the true Gregorian return year, not age.

SECTION: OUTPUT CONTRACT data.target_year (int) data.ayanamsa (string) data.solar_return_utc (string — ISO) data.solar_return_jd (float) data.natal_sun_longitude (float) data.natal_lagna (string) data.natal_lagna_index (int) data.year_lord (string — planet name) data.muntha: rashi_index (int) rashi (string) age_years (float) muntha_lord (string) data.planets{} — keys Sun..Ketu: longitude (float) rashi_index (int) rashi (string) degree (float) is_retrograde (bool) speed (float) data.varshaphal_ascendant_longitude (float) data.varshaphal_ascendant_sign (string — Sanskrit sign name derived from the ascendant longitude) data.varshaphal_ascendant_sign_index (int — sign index 0-11, where 0=Mesha and 11=Meena) data.varsha_pati: planet (string) role (string) pancha_vargeeya_bala (float) kshetra_bala (float) uchcha_bala (float) election_used_strongest_without_aspect (bool) data.pancha_adhikaris[] — five objects: role (string) planet (string) pancha_vargeeya_bala, kshetra_bala, uchcha_bala, hadda_bala, dreshkana_bala, navamsa_bala (floats) pending_components_note (string) aspects_ascendant (bool) tajika_aspect_angles_matched[] (array) separation_from_asc_deg (float) data.pancha_vargeeya_bala{} — keyed by role (float values) data.tajika_aspects[] — per Pancha Adhikari (structure per upstream) data.tajika_planet_pairs[] — each: planet_a, planet_b (strings) house_a, house_b (int) diff_ab, diff_ba (float) aspect_ab, aspect_ba (strings or floats per upstream) is_ithsala (bool) is_musaripha (bool) faster_planet (string) orb_degrees (float)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — year not range-checked here.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Feeding age instead of civil year silently mis-orients the return — caller responsibility.

SECTION: DO NOT CONFUSE WITH asterwise_get_dasha — multi-decade Vimshottari, not one solar return. asterwise_get_transits — ingress/station timeline, not annual Tajika chart.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

The description adds valuable behavioral context beyond the annotations. While annotations indicate read-only, non-destructive, idempotent operations, the description specifies compute intensity ('MEDIUM_COMPUTE'), error handling (INVALID_PARAMS, INTERNAL_ERROR), and critical constraints like using civil year not age and the silent mis-orientation risk. It doesn't contradict annotations, but could mention rate limits or caching behavior for a more complete picture.

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 efficiently structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), each containing only essential information. Every sentence serves a distinct purpose—defining scope, guiding usage, detailing inputs/outputs, or differentiating from siblings—with no redundant or verbose 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's complexity (3 parameters with nested objects, rich output schema), the description is highly complete. It covers purpose, usage guidelines, input semantics, detailed output structure, compute class, error handling, and sibling differentiation. With an output schema provided, the description appropriately focuses on explaining the data's meaning rather than restating structure, making it fully adequate for agent understanding.

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?

With only 33% schema description coverage, the description compensates well by adding semantic context. It explains that 'year' must be a Gregorian civil year (not age), clarifies the 'birth' object's purpose for baseline radix, and distinguishes 'response_format' options (json vs markdown). However, it doesn't detail all nested properties of 'birth' (e.g., ayanamsa, timezone), leaving some schema gaps partially addressed.

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 specific action ('computes the annual Tajika-style solar return') and resource ('for a four-digit civil year'), distinguishing it from siblings like asterwise_get_dasha (multi-decade Vimshottari) and asterwise_get_transits (ingress/station timeline). It explicitly lists the outputs (Muntha, Pancha Adhikari metrics, Tajika aspects, and varshaphal positions), making the purpose highly specific and differentiated.

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 guidance on when to use this tool versus alternatives, with a dedicated 'DO NOT CONFUSE WITH' section naming asterwise_get_dasha and asterwise_get_transits. It also includes a 'WORKFLOW' section recommending asterwise_get_natal_chart as a prerequisite and stating there's no follow-up tool, offering clear contextual boundaries.

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

asterwise_get_varshaphal_harsha_balaA
Read-onlyIdempotent
Inspect

Computes Harsha Bala (positional happiness score) for all 7 classical planets in a Varshaphal solar return chart. Maximum 20 per planet (4 components × 5 points each).

SECTION: WHAT THIS TOOL COVERS Harsha Bala is entirely distinct from Pancha Vargeeya Bala. Pancha Vargeeya Bala measures mathematical strength (sign dignity, exaltation arc, divisional chart fractions). Harsha Bala measures whether a planet is positionally comfortable — does it occupy the right house, sign, hemisphere, and return type for its nature? A planet with high Pancha Vargeeya Bala (60/80) but zero Harsha Bala has the capacity to deliver results, but does so through stress, delay, and frustration. A Year Lord (Varsha Pati) with 0 Harsha Bala signals a difficult year even when it wins the Pancha Adhikari election.

4 Components (5 points each, maximum 20):

  1. STHANA — Happy house placement in the Varsha chart (measured from Varsha Ascendant, not natal Ascendant): Sun=9th, Moon=3rd, Mars=6th, Mercury=1st, Jupiter=11th, Venus=5th, Saturn=12th.

  2. SWAKSHETRA/UCCHA — Planet in its own sign (Swakshetra) or sign of exaltation (Uccha).

  3. PUM-STRI (Gender/Hemisphere) — Male planets (Sun, Mars, Jupiter) prefer houses 7–12 (visible hemisphere). Female planets (Moon, Venus, Saturn) prefer houses 1–6 (invisible hemisphere). Mercury earns this component unconditionally.

  4. DINA-RATRI (Day/Night) — Male planets (Sun, Mars, Jupiter) prefer a daytime solar return. Female planets (Moon, Venus, Saturn) prefer a nighttime return. Mercury earns this component unconditionally.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_varshaphal — identify the Year Lord (Varsha Pati) before interpreting Harsha Bala. The Year Lord's Harsha Bala is the most actionable number in this response. AFTER: asterwise_get_varshaphal_saham — use Harsha Bala to assess whether each Saham lord can deliver its theme with ease or difficulty.

SECTION: INPUT CONTRACT Same as asterwise_get_varshaphal — BirthData plus target_year. target_year (required int): The Gregorian civil year of the solar return. Not age. time (required): Solar return ascendant and house positions are time-sensitive.

SECTION: OUTPUT CONTRACT data.target_year (int) data.ayanamsa (string) data.solar_return_utc (string — ISO UTC of solar return moment) data.is_day_return (bool — true if solar return falls between sunrise and sunset; directly determines Dina-Ratri component results for all planets) data.varshaphal_ascendant_longitude (float — Varsha Ascendant in degrees; all house placements are measured from this) data.planets[] — 7 objects (Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn in that order): planet (string — planet name) harsha_bala (int — total score 0–20) max_harsha_bala (int — always 20) varsha_house (int — planet's house in the Varsha chart, 1–12, from Varsha Ascendant) rashi_index (int — 0–11, 0=Mesha) rashi (string — Sanskrit sign name) components{} — four keys: sthana{}: earned (bool), points (int — 0 or 5), happy_house (int), actual_house (int), description (string) swakshetra_uccha{}: earned (bool), points (int — 0 or 5), in_own_sign (bool), in_exaltation (bool), current_rashi_index (int) pum_stri{}: earned (bool), points (int — 0 or 5), gender (string — 'male'|'female'|'neutral'), happy_hemisphere (string), actual_house (int) dina_ratri{}: earned (bool), points (int — 0 or 5), happy_period (string), actual_period (string — 'day' or 'night') interpretation (string — qualitative label: 'Excellent', 'Strong', 'Moderate', 'Weak', or 'Very weak') (string — methodology and interpretation guidance)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS SLOW_COMPUTE — internally runs the full solar return computation before deriving Harsha Bala.

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — BirthData Pydantic only. INVALID_PARAMS (upstream): None — upstream rejection surfaces as MCP INTERNAL_ERROR. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR Edge cases: — Rahu and Ketu are excluded — Harsha Bala is defined only for the 7 classical grahas. — Polar latitudes where sunrise/sunset cannot be computed affect is_day_return → MCP INTERNAL_ERROR. — target_year is a Gregorian year, not age.

SECTION: DO NOT CONFUSE WITH asterwise_get_varshaphal — returns Pancha Vargeeya Bala (mathematical strength out of 80) for the Pancha Adhikaris; Harsha Bala (positional happiness out of 20) is a completely different measurement returned by this tool. asterwise_get_varshaphal_saham — derives sensitive zodiac points; this tool scores planet positional comfort. asterwise_get_chart_strength — Shadbala for the natal chart, not Tajika Harsha Bala for the solar return.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

The description adds substantial behavioral context beyond annotations: compute class SLOW_COMPUTE, error contracts with detailed edge cases (excluded Rahu/Ketu, polar latitude issues, target_year meaning), and output field explanations. Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description does not contradict them.

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 clear section headings (SECTION: WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.) and front-loaded purpose. Every sentence adds value, though some sections (e.g., COMPUTE CLASS) could be slightly shorter. Given the complexity, the length is justified.

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 highly complete: covers all components, workflow, input/output contracts, error handling, edge cases, compute class, and disambiguation. An output schema exists and is detailed, so the description does not need to explain return values. It provides all necessary context for an AI 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.

Parameters5/5

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

Schema description coverage is only 33% (birth object has descriptions, but year and response_format lack them). The description compensates by explaining year as 'Gregorian civil year of the solar return, not age' and response_format options (json vs markdown). It also adds context for the time field within birth as 'time-sensitive'. This adds meaning 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?

The description clearly states the verb 'Computes' and the resource 'Harsha Bala for all 7 classical planets in a Varshaphal solar return chart'. It distinguishes itself from Pancha Vargeeya Bala and sibling tools like asterwise_get_varshaphal, asterwise_get_varshaphal_saham, and asterwise_get_chart_strength in the 'DO NOT CONFUSE WITH' section.

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 workflow instructions: 'BEFORE: RECOMMENDED — asterwise_get_varshaphal' and 'AFTER: asterwise_get_varshaphal_saham'. It clarifies when to use this tool (for Harsha Bala) and when not (for Pancha Vargeeya Bala), with direct references to sibling tools.

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

asterwise_get_varshaphal_sahamA
Read-onlyIdempotent
Inspect

Computes all 10 Tajika Saham (sensitive points) for a Varshaphal solar return chart. Sahams are the Tajika equivalent of Arabic Parts — mathematically derived zodiac points that focus the annual horoscope on specific life themes.

SECTION: WHAT THIS TOOL COVERS Saham formula: (A - B + Ascendant) % 360, with a conditional +30° correction applied when the Ascendant does not fall in the forward zodiacal arc from B to A. This conditional is the defining classical Tajika Saham rule — without it, results are wrong. Day and night formulas differ: the Minuend and Subtrahend swap based on whether the solar return falls during daytime or nighttime at the birth location. Punya Saham (Fortune) is always computed first because Yashas (Fame) and Mahatmya (Status) use it as an operand. The Saham lord (planet ruling the sign where the Saham falls) is the Sahamesha — its strength, house placement, and Tajika aspects to the Varsha Ascendant determine whether the theme manifests positively or is obstructed.

10 Sahams returned: punya — Fortune and Luck (Moon-Sun day / Sun-Moon night) vidya — Education and Learning (Sun-Jupiter day) yashas — Fame and Reputation (Jupiter-Punya day) — uses Punya as operand mitra — Friends and Allies (Jupiter-Venus day) mahatmya — Greatness and Status (Punya-Mars day) — uses Punya as operand asha — Desires and Fulfillment (Saturn-Venus day) karmakarya — Action and Profession (Mars-Mercury day) vyapara — Business and Trade (Mars-Saturn day) vivaha — Marriage and Relationships (Venus-Saturn day) santapa — Sorrow and Stress (Saturn-Moon day)

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_varshaphal — understand the base solar return chart (year lord, Muntha, Varsha Ascendant) before interpreting Saham lords. The Saham is meaningless without knowing which house it occupies from the Varsha Ascendant. AFTER: asterwise_get_varshaphal_harsha_bala — assess the Saham lord's positional happiness score to determine ease or difficulty of manifestation.

SECTION: INPUT CONTRACT Same as asterwise_get_varshaphal — BirthData plus target_year. target_year (required int): The Gregorian calendar year of the solar return. Not age — the civil year (e.g. 2026). Feeding age instead of year silently produces the wrong return. time (required): Solar return Ascendant is time-sensitive. Accurate birth time is required for reliable Saham interpretation.

SECTION: OUTPUT CONTRACT data.target_year (int — calendar year of the solar return) data.ayanamsa (string — ayanamsa system used, e.g. 'lahiri') data.solar_return_utc (string — ISO UTC timestamp of solar return moment) data.is_day_return (bool — true if solar return occurs between sunrise and sunset; determines which Saham formula variant is used) data.varshaphal_ascendant_longitude (float — Varsha Ascendant in degrees; all 10 Saham longitudes are computed relative to this) data.total (int — always 10) data.sahams[] — 10 objects in order [punya, vidya, yashas, mitra, mahatmya, asha, karmakarya, vyapara, vivaha, santapa]: slug (string — lowercase key, e.g. 'punya') name (string — full display name, e.g. 'Punya Saham') theme (string — life area, e.g. 'Fortune and Luck') longitude (float — Saham longitude in degrees 0–360) rashi_index (int — 0–11, 0=Mesha) rashi (string — Sanskrit sign name, e.g. 'Mesha') degree_in_sign (float — degrees within the sign) saham_lord (string — classical lord of the sign where Saham falls) formula_used (string — describes whether day or night formula was applied and which planets were operands, e.g. 'day: Moon - Sun + Asc') (string — methodology note)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS SLOW_COMPUTE — internally runs the full solar return computation (binary-search Sun longitude + house computation) before deriving Sahams.

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — BirthData Pydantic only. INVALID_PARAMS (upstream): None — upstream rejection surfaces as MCP INTERNAL_ERROR. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR Edge cases: — Day/night determination uses sunrise/sunset at the birth coordinates for the solar return date. Polar latitudes where sunrise cannot be computed → MCP INTERNAL_ERROR. — target_year is a Gregorian year, not age — always verify the caller passes the civil year.

SECTION: DO NOT CONFUSE WITH asterwise_get_varshaphal — returns the full base solar return chart including Muntha, year lord, and planet positions; Saham points are not included there. asterwise_get_varshaphal_harsha_bala — scores planet positional happiness; this tool computes zodiac points, not planet positions. asterwise_get_gemstone_recommendations — birthchart gemstone recommendations, unrelated to Tajika Saham.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds substantial context: it is SLOW_COMPUTE, explains day/night determination, the conditional +30° correction, dependency of Yashas and Mahatmya on Punya, and potential errors at polar latitudes. 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 long but well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT/OUTPUT CONTRACTS, etc.). It is slightly verbose but every section adds useful information, making it appropriate for the complexity of the tool.

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 complexity (10 Sahams with dependencies, day/night formulas, compute class, error contracts), the description is comprehensive. It details the output contract including all fields, error scenarios, and edge cases. The presence of an output schema further supports 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 has 3 parameters with 33% description coverage. The description adds value by explaining that 'year' is the Gregorian year (not age), emphasizing time sensitivity, and describing the 'response_format' options. It also references the birth object from another tool and includes input contract with warnings. This compensates well for low schema coverage.

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 computes all 10 Tajika Saham for a Varshaphal solar return chart. It lists each Saham with its name and theme, and distinguishes from sibling tools like asterwise_get_varshaphal and asterwise_get_varshaphal_harsha_bala.

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 a dedicated 'WORKFLOW' section recommending to first use asterwise_get_varshaphal, then this tool, then harsha_bala. It also has a 'DO NOT CONFUSE WITH' section explicitly listing three related tools and how they differ, providing clear guidance on 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.

asterwise_get_western_aspectsA
Read-onlyIdempotent
Inspect

Calculates all active aspects between a supplied set of planetary longitudes. Accepts a dictionary of body name to tropical ecliptic longitude and returns every aspect within standard natal orbs.

SECTION: WHAT THIS TOOL COVERS Flexible aspect calculator that works with any set of positions — natal planets, transit planets, progressed planets, or custom hypothetical points. Aspect orbs: conjunction/opposition 5°, square/trine 5°, sextile 3°, semisextile/quincunx/semisquare/sesquiquadrate 1.5°. Returns is_applying based on relative speeds if speeds are provided, otherwise assumed separating.

SECTION: WORKFLOW BEFORE: None — standalone; or use asterwise_get_western_natal to get positions first. AFTER: None.

SECTION: INPUT CONTRACT positions — dict mapping planet/body name (string) to tropical longitude (float 0–360). Must contain at least 2 entries. Example: {'Sun': 229.6, 'Moon': 221.8, 'Mars': 189.6, 'Jupiter': 309.6} Names can be any string — the tool does not enforce planet names.

SECTION: OUTPUT CONTRACT data.aspects[] — each: planet_a (string), planet_b (string), type (string — aspect name) exact_angle (float), orb (float), is_applying (bool) data.orbs_used — dict of aspect type to orb value used data.body_count (int — number of input bodies) data.aspect_count (int — number of aspects found)

SECTION: RESPONSE FORMAT response_format=json — aspect grid object. response_format=markdown — formatted aspect table.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local): — fewer than 2 bodies in positions dict → MCP INVALID_PARAMS immediately. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_western_natal — computes both positions and aspects from birth data. asterwise_get_western_synastry — inter-chart aspects between two people.

ParametersJSON Schema
NameRequiredDescriptionDefault
positionsYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations indicate readOnly and idempotent; description adds details on orb ranges, is_applying logic based on speeds, error contracts, and response formats, 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?

Well-structured with sections, but somewhat verbose with repeated headers; core purpose is front-loaded and value is clear.

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?

Covers input, output, orbs, applying logic, error handling, and workflow, despite having output schema and annotations, the description adds complete context for usage.

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 provides 0% coverage, but description's INPUT CONTRACT fully explains the positions dict (min 2 entries, float 0-360, example), and response_format implications for output format.

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?

Clearly states it calculates aspects from planetary longitudes, distinguishes from sibling tools asterwise_get_western_natal and asterwise_get_western_synastry in the DO NOT CONFUSE WITH section.

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 states it can be used standalone or after asterwise_get_western_natal, and lists alternatives to avoid confusion in DO NOT CONFUSE WITH section.

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

asterwise_get_western_compatibilityA
Read-onlyIdempotent
Inspect

Overall compatibility score (0–100) between two natal charts. Scores element affinity, synastry aspects between personal planets (Sun, Moon, Venus, Mars), and Sun/Moon/rising sign comparisons.

SECTION: WHAT THIS TOOL COVERS Weighted scoring model combining elemental harmony, personal-planet synastry hits, and luminaries/rising affinity labels. Higher score = more harmonious synergy — interpret relatively, not as fate.

SECTION: WORKFLOW BEFORE: asterwise_get_western_natal per person optional. AFTER: asterwise_get_western_synastry — drill into raw aspects if score needs detail.

SECTION: INPUT CONTRACT person1, person2 — WesternBirthData each.

SECTION: OUTPUT CONTRACT data.overall_score (int 0-100) data.element_score (int 0-100) data.aspect_score (int 0-100) data.sun_sign_affinity, data.moon_sign_affinity, data.rising_sign_affinity — 'harmonious'|'neutral'|'challenging' data.person1_sun, data.person2_sun, data.person1_moon, data.person2_moon data.key_aspects[] — aspects between personal planets

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local): WesternBirthData validation failures. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR Edge cases: Score reflects multiple weighted factors. Use for relative comparison between charts, not as an absolute outcome predictor.

SECTION: DO NOT CONFUSE WITH asterwise_get_western_synastry — raw aspects, no score. asterwise_get_western_zodiac_compatibility — sign-only, no birth data.

ParametersJSON Schema
NameRequiredDescriptionDefault
person1YesBirth data for Western astrology tools (tropical zodiac).
person2YesBirth data for Western astrology tools (tropical zodiac).
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds compute class 'MEDIUM_COMPUTE', error contracts (INVALID_PARAMS, INTERNAL_ERROR), and interpretive guidance (relative interpretation, not fate). 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 long but well-organized into clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, OUTPUT CONTRACT, etc.). Every section adds value, though some redundancy exists (e.g., 'WHAT THIS TOOL COVERS' and 'COMPUTE CLASS' could be merged). It is front-loaded with the core purpose.

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 complexity (3 params, nested objects, output schema), the description fully covers output contract, error handling, workflow, and disambiguation. With an output schema present, the description needn't detail return values, but it does so helpfully. No gaps identified.

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 67%. The description includes an 'INPUT CONTRACT' listing required objects but does not add detailed semantics beyond what the schema provides. The schema already describes person1/person2 properties, so the description adds marginal value for understanding parameters.

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 computes an overall compatibility score (0–100) between two natal charts, listing components (element affinity, synastry aspects, sign comparisons). It explicitly distinguishes from sibling tools asterwise_get_western_synastry (raw aspects, no score) and asterwise_get_western_zodiac_compatibility (sign-only, no birth data).

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 'WORKFLOW' section suggests using asterwise_get_western_natal before this tool and asterwise_get_western_synastry after for detail. The 'DO NOT CONFUSE WITH' section explicitly names alternatives with clear differentiators, providing excellent guidance on 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.

asterwise_get_western_compositeA
Read-onlyIdempotent
Inspect

Midpoint composite chart for two people. Each composite planet is the midpoint of the two natal positions. Returns composite planets with dignities and internal aspects.

SECTION: WHAT THIS TOOL COVERS Single synthetic chart representing the relationship as its own entity — not person A vs person B overlaid. Midpoints handle wrap-around at 360° correctly.

SECTION: WORKFLOW BEFORE: asterwise_get_western_synastry — examine inter-chart aspects before composite. AFTER: None.

SECTION: INPUT CONTRACT person1, person2 — WesternBirthData each. house_system ignored.

SECTION: OUTPUT CONTRACT data.planets[] — 10 composite planets with name, longitude, sign, degree_in_sign, dignity, dignity_score data.ascendant_longitude, data.ascendant_sign, data.ascendant_sign_index data.aspects[] — internal aspects within the composite chart

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE (~600ms)

SECTION: ERROR CONTRACT INVALID_PARAMS (local): WesternBirthData validation failures. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_western_synastry — two charts, inter-chart aspects vs composite (one midpoint chart). asterwise_get_western_compatibility — numeric score vs structural composite chart.

ParametersJSON Schema
NameRequiredDescriptionDefault
person1YesBirth data for Western astrology tools (tropical zodiac).
person2YesBirth data for Western astrology tools (tropical zodiac).
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds compute class (~600ms), that house_system is ignored, error contracts, and the output contract structure, providing contextual behavior 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-organized into clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.), making it easy to scan. However, it is somewhat verbose; a few redundant phrases could be trimmed without losing clarity.

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 complexity of a composite chart calculation and the existence of an output schema, the description covers purpose, workflow, error handling, compute class, and sibling distinctions. It provides all necessary context for an agent to correctly 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 description coverage is 67%. The description adds that house_system is ignored, which is not in the schema. However, for person1 and person2, it repeats the nested structure but does not add new semantics beyond the schema's descriptions. So it provides some added value but not extensive.

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 immediately states it is a midpoint composite chart for two people, clearly distinguishes from synastry and compatibility. The section 'WHAT THIS TOOL COVERS' reinforces that it produces a single synthetic chart for the relationship, not inter-chart aspects.

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 'WORKFLOW' section explicitly advises to examine synastry before composite, and the 'DO NOT CONFUSE WITH' section lists two sibling tools with precise differences, providing 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.

asterwise_get_western_horoscopeA
Read-onlyIdempotent
Inspect

Fetches an AI-synthesised Western sun-sign horoscope for a chosen horizon and returns structured guidance fields plus metadata about the model and period.

SECTION: WHAT THIS TOOL COVERS Calls the upstream western horoscope service for a tropical sun sign and a period of daily, weekly, monthly, or yearly. Uses the tropical zodiac (not sidereal). Content is grounded in current sky aspects, slow planet positions, and the solar season — not Vedic transit rules. It does not compute a personal natal chart, divisional charts, or dasha — only sign-level tropical transit-flavoured copy tied to the requested horizon. No remedy field — Western tradition has no planetary remedy system.

SECTION: WORKFLOW BEFORE: None — this tool is standalone. AFTER: asterwise_get_western_natal — if the user needs a personalised tropical chart beyond sign-general copy.

SECTION: INPUT CONTRACT period is constrained to the tool schema enum (daily, weekly, monthly, yearly). sun_sign accepts English zodiac names only (Aries, Taurus, Gemini, Cancer, Leo, Virgo, Libra, Scorpio, Sagittarius, Capricorn, Aquarius, Pisces). No Sanskrit aliases — this is Western astrology. response_format selects JSON vs markdown rendering only.

SECTION: OUTPUT CONTRACT data.content: headline (string) narrative (string) love (string) career (string) money (string) body (string) power_window (string) caution_window (string) closing_message (string) phases[] (monthly only — array of phase objects with phase_number, start_date, end_date, title, narrative) year_theme (string — yearly only) chapters[] (yearly only — array of chapter objects with chapter_number, start_date, end_date, title, narrative) auspicious_months[] (yearly only — string array of month names) landmark_dates[] (yearly only — array of {date, event} objects) data.model_used (string — AI model version label) data.generated_at (string — ISO UTC) data.period_key (string — YYYY-MM-DD for daily; YYYY-W## for weekly; YYYY-MM for monthly; YYYY for yearly) data.horizon (string — 'daily', 'weekly', 'monthly', or 'yearly') data.sun_sign (string — lowercase English, e.g. 'aries') data.zodiac_type (string — 'western')

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — Invalid period enum or other Pydantic field violations on the tool schema → MCP INVALID_PARAMS

INVALID_PARAMS (upstream): — Unknown or unsupported sun_sign → MCP INTERNAL_ERROR at the tool layer (upstream rejection).

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR — Horoscope not yet generated for the current period → MCP INTERNAL_ERROR with status not_generated

Edge cases: — Sun-sign content only; not a substitute for birth-chart analysis. — If a period's horoscope has not yet been generated by the cron, returns 404 upstream (surfaces as INTERNAL_ERROR). — No remedy field in western horoscopes by design.

SECTION: DO NOT CONFUSE WITH asterwise_get_horoscope — Vedic Moon-sign horoscope using sidereal zodiac, not Western tropical sun-sign. asterwise_get_western_natal — full personalised tropical chart from birth data, not sign-general editorial copy.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes
sun_signYes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations (readOnlyHint, openWorldHint, idempotentHint, destructiveHint) are all true/non-destructive. The description adds context about tropical zodiac, lack of personal data, no remedy field, and error handling for ungenerated periods, which goes beyond what annotations convey.

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, but it is quite verbose. The main purpose is front-loaded, and each sentence adds value, though some details (e.g., full output contract) could be shortened if the output schema is already present.

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 the complexity (multiple horizons, varying output fields), the description covers input constraints, output fields per horizon, error contracts, compute class, and edge cases. The output schema exists, so return value details are already provided. Everything needed for correct invocation is present.

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 0%, so the description fully compensates. It explains the period enum values, constrains sun_sign to English names, and clarifies response_format selects rendering mode only. This adds essential meaning missing from 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 the tool fetches an AI-synthesized Western sun-sign horoscope for a chosen horizon. It explicitly contrasts with Vedic and personalized charts, distinguishing it from siblings like asterwise_get_horoscope and asterwise_get_western_natal.

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 'DO NOT CONFUSE WITH' section directly lists alternative tools and their differences. The 'WORKFLOW' section indicates this tool is standalone and suggests a follow-up tool for personalized charts, providing clear guidance on when to use it versus alternatives.

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

asterwise_get_western_lunar_returnA
Read-onlyIdempotent
Inspect

Next lunar return chart after a given date. Finds the next moment the Moon returns to its natal tropical longitude (approximately every 27.3 days) and builds a complete Western natal chart for that moment at the birth location.

SECTION: WHAT THIS TOOL COVERS Monthly emotional reset chart — similar workflow to solar return but cadence is lunar synodic month, not tropical year.

SECTION: WORKFLOW BEFORE: asterwise_get_western_natal. AFTER: None.

SECTION: INPUT CONTRACT birth — WesternBirthData. after_date (optional YYYY-MM-DD) — find next return after this date. Defaults to today.

SECTION: OUTPUT CONTRACT Same shape as solar return: planet='Moon', natal_longitude, return_utc, return_jd, chart

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE (~500ms)

SECTION: ERROR CONTRACT INVALID_PARAMS (local): WesternBirthData validation failures. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR Edge cases: Returns the NEXT lunar return after after_date — if after_date is omitted, returns the next return from today.

SECTION: DO NOT CONFUSE WITH asterwise_get_western_solar_return — annual Sun return vs lunar_return (monthly Moon return).

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for Western astrology tools (tropical zodiac).
after_dateNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint (all safe). The description adds value by specifying MEDIUM_COMPUTE (~500ms) and detailed error contracts (INVALID_PARAMS, INTERNAL_ERROR) with edge case handling. 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 well-organized into clear sections (WHAT, WORKFLOW, INPUT, OUTPUT, RESPONSE FORMAT, COMPUTE CLASS, ERROR CONTRACT, DO NOT CONFUSE). While long, each section serves a purpose and front-loads the primary use case. Minor redundancy in the RESPONSE FORMAT section could be tightened.

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 an output schema (implied), the description provides sufficient context: compute time, error types, output shape (planet, natal_longitude, etc.), and edge cases (next return from today). Combined with annotations, it equips the agent to select and invoke the tool correctly without missing critical details.

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?

With only 33% schema description coverage for top-level params, the description compensates by explaining 'after_date' defaults to today and 'response_format' modes (json/markdown). For 'birth', it provides context as 'WesternBirthData' and references the schema's details. This adds meaningful guidance beyond bare 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 calculates the next lunar return and builds a Western natal chart. It explicitly distinguishes from the solar return sibling tool in the 'DO NOT CONFUSE WITH' section, ensuring no ambiguity.

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 before/after workflow cues ('BEFORE: asterwise_get_western_natal', 'AFTER: None') and warns against confusing with asterwise_get_western_solar_return, giving clear context for 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.

asterwise_get_western_moon_calendarA
Read-onlyIdempotent
Inspect

Returns lunar phase data for every day in a calendar month as a structured array. Each element is a complete daily phase object identical to asterwise_get_western_moon_phase.

SECTION: WHAT THIS TOOL COVERS Month-at-a-glance lunar calendar for any year/month combination. Useful for building moon phase widgets, identifying full and new moon dates, planning tools based on lunar cycles, and content calendars. Defaults to the current month.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: None.

SECTION: INPUT CONTRACT year (optional int) — Target year. Defaults to current year. Example: 2026 month (optional int 1–12) — Target month. Defaults to current month. Example: 5 (May) Values outside 1–12 are rejected locally with MCP INVALID_PARAMS.

SECTION: OUTPUT CONTRACT data[] — array of daily phase objects, one per calendar day in the month. Each object is identical to asterwise_get_western_moon_phase output.

SECTION: RESPONSE FORMAT response_format=json — array of daily phase objects. response_format=markdown — month view with day-by-day phases.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE (~500ms for 30 days)

SECTION: ERROR CONTRACT INVALID_PARAMS (local): — month outside 1–12 → MCP INVALID_PARAMS immediately. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_western_moon_phase — single-day phase only.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo
monthNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already indicate the tool is read-only, idempotent, and not destructive. The description adds valuable behavioral context: compute class (MEDIUM_COMPUTE ~500ms), error contracts (INVALID_PARAMS and INTERNAL_ERROR), and response format options. This exceeds annotation coverage, though not maximal.

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 sections, front-loading the main purpose. While somewhat lengthy, each section provides necessary information without redundancy. It is sufficiently concise for the tool's complexity.

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 complexity (monthly calendar, multiple parameters, output format), the description covers all aspects: input contract, output contract, error handling, compute class, and distinction from sibling. An output schema exists, and the description adequately references it without needing to repeat details.

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?

With 0% schema description coverage, the description fully compensates by explaining each parameter: year (optional, defaults to current), month (optional 1-12, defaults, validation), and response_format (enum with markdown/json). Providing examples and local validation rules adds meaning 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?

The description clearly states it returns lunar phase data for each day in a month as a structured array. It explicitly distinguishes itself from the sibling tool asterwise_get_western_moon_phase, which provides single-day data, ensuring correct selection.

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 a 'WORKFLOW' section indicating the tool is standalone with no prerequisites, and a 'DO NOT CONFUSE WITH' section that specifies when to use this tool versus the single-day phase tool. It also notes defaults, providing clear context for usage.

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

asterwise_get_western_moon_phaseA
Read-onlyIdempotent
Inspect

Calculates the tropical lunar phase for any date using Swiss Ephemeris. Returns the phase name, phase angle, illumination percentage, Moon age in days, and the next major phase transition.

SECTION: WHAT THIS TOOL COVERS Eight-phase tropical lunar cycle: New Moon (0°), Waxing Crescent, First Quarter (90°), Waxing Gibbous, Full Moon (180°), Waning Gibbous, Last Quarter (270°), Waning Crescent. Phase angle is Sun–Moon elongation in degrees (0–360). Illumination percentage is derived from the phase angle using the cosine formula. Moon age is days since last New Moon.

SECTION: WORKFLOW BEFORE: None — standalone. AFTER: asterwise_get_western_moon_calendar — get the full month's phase data.

SECTION: INPUT CONTRACT date (optional string YYYY-MM-DD) — Date to compute phase for. Defaults to today. Example: '2026-05-01'

SECTION: OUTPUT CONTRACT data.date (string — YYYY-MM-DD) data.phase_name (string — one of the eight canonical phase names) data.phase_angle (float — 0–360°, Sun–Moon elongation) data.illumination_pct (float — 0–100) data.moon_age_days (float — days since New Moon) data.moon_longitude (float — tropical ecliptic longitude) data.sun_longitude (float — tropical ecliptic longitude) data.is_waxing (bool — true from New to Full Moon) data.next_phase_name (string — next major phase) data.next_phase_date (string — approximate YYYY-MM-DD of next major phase)

SECTION: RESPONSE FORMAT response_format=json — structured phase data. response_format=markdown — human-readable moon report.

SECTION: COMPUTE CLASS FAST_LOOKUP

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None — date validated upstream. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_western_moon_calendar — full monthly day-by-day phase table. asterwise_get_panchanga — Vedic tithi system (lunar day based on 12° arc increments).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already note readOnly, idempotent, non-destructive. The description adds Swiss Ephemeris usage, compute class FAST_LOOKUP, response format options, and detailed error contracts. 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?

Well-structured with clear sections. Each section adds unique value without redundancy. Front-loaded with core purpose. Appropriate length for comprehensive documentation.

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 output schema existence, description provides complete output contract, error handling, and sibling differentiation. All aspects covered: input, output, errors, workflow, and distinctions.

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 has 0% description coverage. The description fully explains date format, default, and response_format options. INPUT CONTRACT and RESPONSE FORMAT sections provide complete parameter semantics.

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 tropical lunar phase using Swiss Ephemeris, returns specific data like phase name, angle, illumination, age. It distinguishes from siblings like moon_calendar and panchanga in the DO NOT CONFUSE WITH section.

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 WORKFLOW section specifies it's standalone and suggests next tool. DO NOT CONFUSE WITH explicitly lists alternatives with differences. This gives clear guidance on when to use vs not.

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

asterwise_get_western_natalA
Read-onlyIdempotent
Inspect

Calculate a complete Western natal chart using the tropical zodiac and Swiss Ephemeris. Returns 10 planet positions with Placidus (or chosen) house placements, essential dignities, all active aspects, and element/modality/hemisphere balance statistics.

SECTION: WHAT THIS TOOL COVERS Tropical natal chart: Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto. Each planet returns tropical longitude, sign, house (1–12), retrograde flag, dignity label (domicile/exaltation/detriment/fall/peregrine), dignity score (domicile +5, exaltation +4, triplicity +3, term +2, face +1, detriment -5, fall -4), is_exaltation_degree (within 1° of exact exaltation), dignity_disputed (true for outer planets where exaltation/fall is disputed among modern astrologers). Aspect orbs: conjunction/opposition 5°, square/trine 5°, sextile 3°, minor aspects 1.5°. Not Vedic sidereal (asterwise_get_natal_chart).

SECTION: WORKFLOW BEFORE: None — this tool is standalone. AFTER: asterwise_get_western_transits_daily — layer current transits over this natal chart. AFTER: asterwise_get_western_synastry — compare this chart against a partner's chart. AFTER: asterwise_get_western_solar_return — annual return chart for the current year.

SECTION: INPUT CONTRACT birth.date — YYYY-MM-DD. Example: '1985-11-12' birth.time — HH:MM (24-hour local time). Example: '06:45' birth.lat — Decimal degrees, north positive. Example: 19.076 (Mumbai) birth.lon — Decimal degrees, east positive. Example: 72.8777 (Mumbai) birth.timezone — IANA timezone string. Example: 'Asia/Kolkata', 'America/New_York', 'Europe/Rome', 'UTC'. Default: UTC. IMPORTANT: Timezone defaults to UTC — always supply the correct local timezone for accurate house cusps. An incorrect timezone shifts the Ascendant. birth.house_system — 'placidus' (default, most common), 'koch', 'equal', 'whole_sign'. Placidus is standard for most Western traditions. Whole sign is traditional/Hellenistic. NOTE: house_system is accepted here but silently ignored by transit, return, synastry, composite, and progression endpoints — those always use the birth location coordinates without house-system selection. ayanamsa — always tropical regardless of any value supplied; field is not present.

SECTION: OUTPUT CONTRACT data.zodiac (string — 'tropical') data.house_system (string — the system used) data.ascendant — { longitude (float), sign (string), sign_index (int 0–11), degree_in_sign (float) } data.mc — same shape as ascendant data.planets[] — 10 objects (Sun through Pluto): name (string), longitude (float), sign (string), sign_index (int 0–11) degree_in_sign (float), house (int 1–12) is_retrograde (bool), dignity (string), dignity_score (int) is_exaltation_degree (bool), dignity_disputed (bool) data.houses[] — 12 objects: house (int 1–12), cusp_longitude (float), sign (string) sign_index (int 0–11), degree_in_sign (float) data.aspects[] — each: planet_a (string), planet_b (string), type (string) exact_angle (float), orb (float), is_applying (bool) data.elements — { fire (int), earth (int), air (int), water (int), dominant (string) } data.modalities — { cardinal (int), fixed (int), mutable (int), dominant (string) } data.hemisphere — { eastern (int), western (int), northern (int), southern (int) } data.ayanamsa_value (float — 0.0 for tropical) data.ayanamsa_used (string — 'tropical') data.birth_time_provided (bool)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable natal report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE (~300ms)

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): — WesternBirthData Pydantic violations (date pattern, time pattern, lat/lon bounds) → MCP INVALID_PARAMS INVALID_PARAMS (upstream): — None expected for valid coordinates and dates post-1800. INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR Edge cases: — Polar latitudes (above ~65°N or below ~65°S) may cause Placidus house calculation failure; use whole_sign or equal house system for polar births. — time='00:00' accepted; lagna-sensitive results are unreliable for unknown birth times.

SECTION: DO NOT CONFUSE WITH asterwise_get_natal_chart — Vedic sidereal chart using Lahiri ayanamsa; different zodiac, different house system, different planet set (9 grahas vs 10 tropical planets). asterwise_get_western_aspects — takes raw longitudes as input; use when you already have positions and don't need full chart computation.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for Western astrology tools (tropical zodiac).
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. Description adds extensive behavioral details: compute class (~300ms), error contracts with specific codes, edge cases (polar latitudes, unknown birth time), and that house_system is silently ignored by other endpoints. 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?

Description is very long with multiple sections and some repetition (e.g., planet list appears twice). However, it is well-structured with clear headings and front-loaded purpose. Could be slightly more concise without losing completeness.

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 nested parameters and rich output, the description fully covers input, output (including full data structure), error handling, edge cases, and workflow integration. Output schema is detailed in description; no gaps remain.

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 has 2 parameters (birth object, response_format) with 50% description coverage. Description adds crucial context: timezone defaults to UTC and warns about accuracy, house_system defaults to Placidus with explanation of each option, ayanamsa is always tropical. It also explains the 'person_name' field and how house_system affects output vs other tools.

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 a complete Western natal chart using tropical zodiac and Swiss Ephemeris. It specifies exactly what it covers (10 planets, aspects, dignities) and distinguishes from Vedic sidereal chart (asterwise_get_natal_chart) and aspects tool (asterwise_get_western_aspects).

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 'DO NOT CONFUSE WITH' section naming alternative tools and when not to use. It also provides 'WORKFLOW' section with BEFORE/AFTER suggestions for chaining with other tools like asterwise_get_western_transits_daily, synastry, solar return.

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

asterwise_get_western_planetary_returnA
Read-onlyIdempotent
Inspect

Next return chart for any planet after a given date. Finds the exact moment the specified planet returns to its natal tropical longitude and builds a complete Western natal chart for that moment at the birth location.

SECTION: WHAT THIS TOOL COVERS Generalised return for any of the 10 classical tropical bodies — Mercury returns (yearly-ish), Venus (~1 year), Mars (~2 years), Jupiter (~12 years), Saturn (~29 years), through Pluto (~248 years).

SECTION: WORKFLOW BEFORE: asterwise_get_western_natal. AFTER: None.

SECTION: INPUT CONTRACT birth — WesternBirthData. planet — one of Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto. after_date (optional YYYY-MM-DD) — defaults to today.

SECTION: OUTPUT CONTRACT Same shape as solar return: planet name, natal_longitude, return_utc, return_jd, chart

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS SLOW_COMPUTE for outer planets (Jupiter+ return can search years ahead)

SECTION: ERROR CONTRACT INVALID_PARAMS (local): planet not in the valid 10-planet set → MCP INVALID_PARAMS locally. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR Edge cases: Neptune return takes ~165 years — only useful for generational analysis, not individual lifetime prediction. Pluto return: ~248 years, never completes in one lifetime.

SECTION: DO NOT CONFUSE WITH asterwise_get_western_solar_return — Sun-only shortcut. asterwise_get_western_lunar_return — Moon-only shortcut.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for Western astrology tools (tropical zodiac).
planetYes
after_dateNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Description adds substantial behavioral context beyond annotations: compute class (SLOW_COMPUTE for outer planets), edge cases (Neptune/Pluto return durations and their suitability), and error contracts (INVALID_PARAMS, INTERNAL_ERROR). Annotations already declare readOnlyHint and destructiveHint, which the description does not contradict, and it enriches with these operational details.

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?

Description is well-structured with clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.) and front-loaded with the core purpose. It is concise, using bullet points for key details without redundant text. Every section adds value, and the overall length is appropriate for the tool's complexity.

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 complexity (4 parameters, nested objects), the description is complete. It covers input contract, output contract (same shape as solar return), response formats, compute class, error contracts, and edge cases. The output schema exists, so return value details are not needed. All necessary context for correct invocation is 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?

With only 25% schema description coverage, the description compensates well. It explains the 'planet' parameter (list of 10 bodies), the 'birth' parameter (as WesternBirthData), the optional 'after_date' (defaults to today), and the 'response_format' (json/markdown). While it doesn't detail every nested field, it provides enough context for an agent to understand parameter semantics.

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 the tool's purpose: 'Next return chart for any planet after a given date.' It specifies the exact algorithm (finding the moment a planet returns to its natal tropical longitude and building a chart) and enumerates the 10 covered planets. The 'DO NOT CONFUSE WITH' section explicitly differentiates from solar and lunar return tools, making the purpose distinct from siblings.

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 usage guidance: it lists a prerequisite workflow ('BEFORE: asterwise_get_western_natal'), states when to use this tool (generalized returns for any planet) and when not (use specialized tools for Sun/Moon under 'DO NOT CONFUSE WITH'). It also includes compute class hints (SLOW_COMPUTE for outer planets) and error contracts, helping the agent decide when to invoke.

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

asterwise_get_western_secondary_progressionsA
Read-onlyIdempotent
Inspect

Secondary progressed chart using the day-for-a-year method. Each day after birth symbolises one year of life (1 ephemeris day = 1 tropical year = 365.2421904 days). Returns all 10 progressed planet positions, progressed Ascendant and MC, and the solar arc.

SECTION: WHAT THIS TOOL COVERS Secondary directions: Moon advances ~12°/year of life, Mercury/Venus track close to Sun speed, outer planets crawl. Includes progressed lunation phases internally.

SECTION: WORKFLOW BEFORE: asterwise_get_western_natal. AFTER: asterwise_get_western_solar_arc — compare uniform arc vs individual motion.

SECTION: INPUT CONTRACT birth — WesternBirthData. target_date (optional YYYY-MM-DD) — the date to progress to. Defaults to today.

SECTION: OUTPUT CONTRACT data.target_date, data.progressed_jd, data.age_years data.solar_arc (float — ~1° per year) data.natal_sun_longitude, data.progressed_sun_longitude data.progressed_planets[] — 10 objects: name, longitude, sign, degree_in_sign, is_retrograde, dignity, dignity_score data.progressed_ascendant, data.progressed_ascendant_sign data.progressed_mc, data.progressed_mc_sign

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE (~400ms)

SECTION: ERROR CONTRACT INVALID_PARAMS (local): WesternBirthData validation failures. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR Edge cases: Progressed ASC uses the actual house calculation at progressed JD (not solar arc approximation) for higher accuracy. Progressed MC uses natal MC + solar arc.

SECTION: DO NOT CONFUSE WITH asterwise_get_western_solar_arc — all planets move by one uniform arc. asterwise_get_western_transits_daily — real-time sky, not symbolic progression.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for Western astrology tools (tropical zodiac).
target_dateNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already declare read-only, open-world, idempotent, and non-destructive. The description adds behavioral details beyond annotations: progressed ASC uses actual house calculation (not solar arc approximation), progressed MC uses natal MC + solar arc, compute class MEDIUM_COMPUTE (~400ms), and detailed error contracts. 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.

Conciseness3/5

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

The description is well-structured with clear sections (WHAT, WORKFLOW, INPUT, OUTPUT, RESPONSE FORMAT, COMPUTE CLASS, ERROR CONTRACT, DO NOT CONFUSE WITH). However, it is verbose and contains explanatory details that could be more concise without losing clarity.

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 complexity of astrology progression tools and the presence of an output schema (mentioned), the description covers all crucial aspects: input contract, output contract, error handling, compute class, edge cases (ASC/MC calculation), and differentiation from siblings. No gaps remain.

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 33% (only birth property has a description in schema). The description compensates by explaining target_date optionality and default (today), response_format options, and the birth substructure context. It adds the progression calculation details that are not in the schema, but could be more precisely linked to parameters.

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 computes secondary progressed charts using the day-for-a-year method, lists all returned elements (10 planets, Asc, MC, solar arc), and distinguishes it from related tools like solar_arc and transits in the 'DO NOT CONFUSE WITH' section.

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 workflow guidance: BEFORE using asterwise_get_western_natal, AFTER compare with asterwise_get_western_solar_arc. Also includes a dedicated section clarifying when NOT to use this tool by contrasting it with solar_arc and transits, giving agents clear decision rules.

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

asterwise_get_western_solar_arcA
Read-onlyIdempotent
Inspect

Solar Arc Directions for a target date. The solar arc (progressed Sun minus natal Sun) is applied uniformly to every natal planet and angle — approximately 1° per year. Unlike secondary progressions, all planets advance at the same rate.

SECTION: WHAT THIS TOOL COVERS Solar arc directions — one delta longitude applied to every natal body and the angles. Classic predictive technique for timing outer events.

SECTION: WORKFLOW BEFORE: asterwise_get_western_natal. AFTER: None.

SECTION: INPUT CONTRACT birth — WesternBirthData. target_date (optional YYYY-MM-DD) — defaults to today.

SECTION: OUTPUT CONTRACT data.target_date, data.solar_arc, data.age_years data.natal_sun_longitude, data.progressed_sun_longitude data.directed_planets[] — 10 objects: name, natal_longitude, directed_longitude, sign, degree_in_sign, dignity, dignity_score data.directed_ascendant, data.directed_ascendant_sign data.directed_mc, data.directed_mc_sign

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE (~400ms)

SECTION: ERROR CONTRACT INVALID_PARAMS (local): WesternBirthData validation failures. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR Edge cases: All planets advance at the same rate (solar arc ≈ 1°/year). This is Solar Arc Directions — different from secondary progressions where each planet moves at its own astronomical speed.

SECTION: DO NOT CONFUSE WITH asterwise_get_western_secondary_progressions — each planet moves at its own rate. asterwise_get_western_transits_daily — real-time transits, not arc directions.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for Western astrology tools (tropical zodiac).
target_dateNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds explicit behavioral details such as compute class (MEDIUM_COMPUTE ~400ms), error contract (INVALID_PARAMS, INTERNAL_ERROR), and the nature of solar arc directions (all planets advance at same rate). 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.

Conciseness5/5

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

The description is well-organized into labeled sections (e.g., WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT) that are front-loaded with the core purpose. Every sentence adds value, and the structure allows quick skimming. It is appropriately sized for the tool's complexity.

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 tool has an output schema (inferred from context), and the description includes a detailed 'OUTPUT CONTRACT' listing all return fields. Combined with annotations covering safety, compute class, error contract, and workflow, the description provides complete context for correct invocation.

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 description coverage is only 33% (only 'birth' has a description), but the description fully compensates by explaining all three parameters: 'birth — WesternBirthData', 'target_date (optional YYYY-MM-DD) — defaults to today', and 'response_format=json... response_format=markdown'. It also clarifies defaults and formatting.

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 'Solar Arc Directions for a target date' and explains that it applies the solar arc uniformly to all planets, distinguishing it from secondary progressions. It also explicitly differentiates from sibling tools in the 'DO NOT CONFUSE WITH' section, making the purpose crystal clear.

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 a 'WORKFLOW' section stating 'BEFORE: asterwise_get_western_natal. AFTER: None.' and includes a dedicated 'DO NOT CONFUSE WITH' section that lists two sibling tools and explains how they differ. This gives clear guidance on 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.

asterwise_get_western_solar_returnA
Read-onlyIdempotent
Inspect

Solar return chart for a given year. Finds the exact moment the Sun returns to its natal tropical longitude and builds a complete Western natal chart for that moment at the birth location. Provide the year as an integer (e.g. 2026).

SECTION: WHAT THIS TOOL COVERS Annual solar return — the chart cast for the precise instant the transiting Sun reaches the natal Sun's longitude, relocated to birth place (not relocated charts). The embedded data.chart is a full tropical chart at that instant.

SECTION: WORKFLOW BEFORE: asterwise_get_western_natal — understand natal chart before reading return. AFTER: None.

SECTION: INPUT CONTRACT birth — WesternBirthData. house_system ignored (chart uses return computation defaults). year (int) — calendar year of the return (e.g. 2026), not age.

SECTION: OUTPUT CONTRACT data.planet — 'Sun' data.natal_longitude (float — natal Sun tropical longitude) data.return_utc (string — ISO 8601 UTC moment of return) data.return_jd (float — Julian Day of return) data.chart — full Western natal chart at return moment

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE (~800ms, iterative Sun longitude search)

SECTION: ERROR CONTRACT INVALID_PARAMS (local): WesternBirthData validation failures. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR Edge cases: year param is the calendar year of the return (e.g., 2026), not the age. Feeding age instead of year silently produces the wrong return chart.

SECTION: DO NOT CONFUSE WITH asterwise_get_western_lunar_return — Moon return, ~monthly. asterwise_get_varshaphal — Vedic Tajika solar return — different system.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes
birthYesBirth data for Western astrology tools (tropical zodiac).
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Beyond annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false), the description discloses compute class (MEDIUM_COMPUTE ~800ms), notes that house_system is ignored, and explains the output contract in detail. 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 well-structured with clear sections and front-loaded purpose. While verbose, each section adds value. Minor redundancy (e.g., repeating return moment) but overall efficient.

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 complexity (3 parameters including nested object, output schema exists), the description covers input, output, workflow, error contract, edge cases, and disambiguation thoroughly. The output contract lists all returned fields, making it easy for an agent to process results.

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 33%, but the description compensates by explaining the 'year' parameter (calendar year, not age) and 'response_format' parameter (controls output mode). It also details the birth object's properties beyond the schema's 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 it returns a solar return chart for a given year, finds the exact moment the Sun returns to its natal longitude, and builds a complete Western natal chart for that moment. It uses specific verbs and resource ('solar return chart') and distinguishes from siblings by explicitly naming 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 includes a 'DO NOT CONFUSE WITH' section naming siblings (lunar_return, varshaphal) and a workflow section noting that the natal chart should be obtained first. It also warns against feeding age instead of year, providing 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.

asterwise_get_western_synastryA
Read-onlyIdempotent
Inspect

Aspect grid between two natal charts using the tropical zodiac. Returns all inter-chart aspects using standard inter-chart orbs. Useful for relationship compatibility analysis.

SECTION: WHAT THIS TOOL COVERS Bidirectional aspect matrix: every person1 planet to every person2 planet within orb. Does not produce a compatibility score — raw geometry only. House overlays are not included.

SECTION: WORKFLOW BEFORE: asterwise_get_western_natal per person — understand charts individually first. AFTER: asterwise_get_western_composite — midpoint chart for the relationship itself.

SECTION: INPUT CONTRACT person1, person2 — each WesternBirthData (date, time, lat, lon, timezone). house_system ignored for synastry payload.

SECTION: OUTPUT CONTRACT data.aspects[] — person1_planet, person2_planet, type, exact_angle, orb data.total_aspects

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE (~600ms, two natal charts + aspect grid)

SECTION: ERROR CONTRACT INVALID_PARAMS (local): WesternBirthData validation failures. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_western_composite — one merged midpoint chart vs synastry (two charts overlaid). asterwise_get_western_compatibility — numeric 0–100 score vs raw aspects.

ParametersJSON Schema
NameRequiredDescriptionDefault
person1YesBirth data for Western astrology tools (tropical zodiac).
person2YesBirth data for Western astrology tools (tropical zodiac).
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds that it 'does not produce a compatibility score — raw geometry only' and 'house overlays are not included.' It also documents compute class (~600ms) and response format 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 well-structured with sections (SECTION: WHAT THIS TOOL COVERS, WORKFLOW, etc.), but it is somewhat lengthy. However, every section adds essential information, and the first sentence captures the core purpose effectively.

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 complexity (3 parameters, nested objects, output schema exists), the description covers input contract, output contract (listing data.aspects[] fields), compute class, error contract, and workflow. It is fully detailed for an agent to use 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 67%, but description adds valuable context: 'house_system ignored for synastry payload' for the nested objects. It confirms person1 and person2 each require WesternBirthData. The response_format parameter is an enum described in OUTPUT CONTRACT.

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 returns an 'Aspect grid between two natal charts using the tropical zodiac' with 'all inter-chart aspects using standard inter-chart orbs' and is 'useful for relationship compatibility analysis.' It distinguishes itself from siblings like asterwise_get_western_composite and asterwise_get_western_compatibility directly.

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 workflow guidance: 'BEFORE: asterwise_get_western_natal per person' and 'AFTER: asterwise_get_western_composite'. It also includes a 'DO NOT CONFUSE WITH' section listing three tools to avoid confusion.

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

asterwise_get_western_transits_dailyA
Read-onlyIdempotent
Inspect

Current sky positions vs natal chart for a single day. Returns all 10 planets with tropical longitudes and active aspects to natal positions using transit orbs: major 3°, sextile 2°, minor 1°. Provide start_date for a specific day; defaults to today.

SECTION: WHAT THIS TOOL COVERS Single-day transit snapshot: where each planet is now versus where each natal planet was at birth, with applying/separating transit-to-natal aspects using tighter transit orbs than natal chart orbs. Excludes progressions and solar arc — pure transit ephemeris.

SECTION: WORKFLOW BEFORE: asterwise_get_western_natal — establish natal chart first. AFTER: asterwise_get_western_transits_weekly — for week view.

SECTION: INPUT CONTRACT birth — WesternBirthData (date, time, lat, lon, timezone). house_system ignored for this endpoint. start_date (optional YYYY-MM-DD) — defaults to today.

SECTION: OUTPUT CONTRACT data.date, data.transit_planets[] — name, longitude, sign, is_retrograde, aspects_to_natal[] data.aspects[] — transit_planet, natal_planet, type, orb, is_applying data.total_aspects

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE (~400ms)

SECTION: ERROR CONTRACT INVALID_PARAMS (local): WesternBirthData validation failures. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR Edge cases: Transit orbs are smaller than natal orbs: major 3°, sextile 2°, minor 1°.

SECTION: DO NOT CONFUSE WITH asterwise_get_western_transits_weekly — 7 days vs 1 day. asterwise_get_western_transits_monthly — 30-day window vs single day.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for Western astrology tools (tropical zodiac).
start_dateNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already indicate readOnlyHint, idempotentHint, etc. The description adds compute class (~400ms), error contracts, and transit orb details. No contradiction exists; the description enriches behavioral context 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 and front-loaded purpose. While slightly verbose, each section (workflow, input, output, errors) adds value. It could be trimmed slightly but remains effective.

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 output schema is outlined, error handling documented, and edge cases (transit orbs) noted, the description is comprehensive for the tool's complexity. Sibling differentiation is thorough.

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?

The input schema is detailed but the description adds crucial context: house_system ignored for this endpoint, response_format only affects presentation, start_date defaults to today. This compensates for the 33% schema coverage and clarifies parameter behavior.

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 returns current sky positions vs natal chart for a single day, listing all 10 planets with longitudes and aspects. It differentiates from sibling tools like weekly and monthly variants in the 'DO NOT CONFUSE WITH' section.

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 WORKFLOW section specifies prerequisites (natal chart first) and suggests weekly variant for more days. The description explicitly excludes progressions and solar arc, providing 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.

asterwise_get_western_transits_monthlyA
Read-onlyIdempotent
Inspect

30-day transit window vs natal chart. Returns day-by-day transit snapshots plus peak aspects (active 10+ days in the window). Use start_date to set the month start; defaults to today.

SECTION: WHAT THIS TOOL COVERS Full-month transit calendar: 30 consecutive daily snapshots vs the same natal chart, with peak_aspects for long-duration hits. Largest payload of the transit trio.

SECTION: WORKFLOW BEFORE: asterwise_get_western_natal. AFTER: None.

SECTION: INPUT CONTRACT birth — WesternBirthData. house_system ignored. start_date (optional YYYY-MM-DD) — month start; defaults to today.

SECTION: OUTPUT CONTRACT data.start_date, data.end_date data.days[] — 30 daily transit objects data.peak_aspects[] — aspects active on 10 or more days

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS SLOW_COMPUTE (~15s for 30 days)

SECTION: ERROR CONTRACT INVALID_PARAMS (local): WesternBirthData validation failures. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR Edge cases: Large payload — 30 daily snapshots. Use json format for downstream processing.

SECTION: DO NOT CONFUSE WITH asterwise_get_western_transits_daily — 1 day. asterwise_get_western_transits_weekly — 7 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for Western astrology tools (tropical zodiac).
start_dateNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations already declare readOnlyHint=true. The description adds that this is the 'largest payload of the transit trio' and has 'SLOW_COMPUTE (~15s for 30 days)'. It also includes an error contract. This provides substantial behavioral context 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 clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.) and front-loaded with the core purpose. Every sentence adds value, and the format aids quick scanning.

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 complexity (3 params, output schema exists), the description covers workflow, input contract, output contract, response format, compute class, error contract, and sibling differentiation. It is thorough and leaves no ambiguity for an AI agent.

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 33%. The description adds meaning by stating that start_date is optional with default today, response_format has two modes (json/markdown) with identical data, and birth's house_system is ignored. This compensates well for the schema's gaps.

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 '30-day transit window vs natal chart. Returns day-by-day transit snapshots plus peak aspects (active 10+ days in the window).' It specifies the verb (get), resource (western transits), and scope (monthly), and explicitly distinguishes from siblings via the DO NOT CONFUSE WITH section.

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 WORKFLOW section says 'BEFORE: asterwise_get_western_natal. AFTER: None.' The DO NOT CONFUSE WITH section explicitly names asterwise_get_western_transits_daily (1 day) and asterwise_get_western_transits_weekly (7 days) as alternatives, providing clear when-to-use guidance.

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

asterwise_get_western_transits_weeklyA
Read-onlyIdempotent
Inspect

7-day transit window vs natal chart. Returns day-by-day transit snapshots plus peak aspects (active 4+ days in the window). Use start_date to set the week start; defaults to today.

SECTION: WHAT THIS TOOL COVERS Rolling seven-day transit analysis with one snapshot per day (same structure as daily transits) plus peak_aspects highlighting aspects that persist across multiple days.

SECTION: WORKFLOW BEFORE: asterwise_get_western_natal. AFTER: asterwise_get_western_transits_monthly — for full month.

SECTION: INPUT CONTRACT birth — WesternBirthData. house_system ignored. start_date (optional YYYY-MM-DD) — week start; defaults to today.

SECTION: OUTPUT CONTRACT data.start_date, data.end_date data.days[] — 7 daily transit objects (same shape as daily transits) data.peak_aspects[] — aspects active on 4 or more days

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE (~2s for 7 days)

SECTION: ERROR CONTRACT INVALID_PARAMS (local): WesternBirthData validation failures. INTERNAL_ERROR: Any upstream API failure or timeout → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_western_transits_daily — single day. asterwise_get_western_transits_monthly — 30 days vs 7.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for Western astrology tools (tropical zodiac).
start_dateNo
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Beyond annotations (readOnly, idempotent), description adds rolling 7-day analysis, peak aspect threshold (4+ days), compute class MEDIUM_COMPUTE (~2s), and error contracts. Adds significant behavioral context.

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?

Well-structured with sections, but slightly verbose (e.g., separate sections for coverage, workflow, input/output contracts). Could be condensed without losing clarity.

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?

Comprehensive coverage: purpose, input/output contracts, error handling, compute class, sibling differentiation. Given complexity and presence of output schema, description fully equips agent for correct invocation.

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?

With only 33% schema description coverage, description compensates fully: explains birth parameter (house_system ignored), start_date (optional, defaults to today), response_format (markdown/json). Details output contract and response format.

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 '7-day transit window vs natal chart' and returns 'day-by-day transit snapshots plus peak aspects'. Explicitly distinguishes from sibling tools by name and time window.

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?

Includes a 'DO NOT CONFUSE WITH' section that lists daily and monthly siblings, plus 'BEFORE' and 'AFTER' workflow suggestions. Provides clear context for when to use this tool vs alternatives.

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

asterwise_get_western_zodiac_compatibilityA
Read-onlyIdempotent
Inspect

Sign-to-sign compatibility without birth data. Based on element and modality affinity. Fast — no ephemeris calculation required.

SECTION: WHAT THIS TOOL COVERS Lookup table compatibility using sign elements (fire/earth/air/water) and modalities (cardinal/fixed/mutable). No houses, no Moon phase, no Venus Mars geometry.

SECTION: WORKFLOW BEFORE: None — no birth data needed. AFTER: asterwise_get_western_compatibility — when full charts are available.

SECTION: INPUT CONTRACT sign1, sign2 — English zodiac names (Aries … Pisces).

SECTION: OUTPUT CONTRACT data.sign1, data.sign2 data.element1, data.element2 data.modality1, data.modality2 data.element_affinity, data.modality_affinity — 'harmonious'|'neutral'|'challenging' data.overall_score (int 0-100) data.description (string)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data.

SECTION: COMPUTE CLASS FAST_LOOKUP — no ephemeris, pure table lookup.

SECTION: ERROR CONTRACT INVALID_PARAMS (local): None — sign validation upstream. INTERNAL_ERROR: Any upstream API failure → MCP INTERNAL_ERROR

SECTION: DO NOT CONFUSE WITH asterwise_get_western_compatibility — requires full birth data, more accurate. asterwise_get_western_synastry — aspect geometry between two full charts.

ParametersJSON Schema
NameRequiredDescriptionDefault
sign1Yes
sign2Yes
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint. The description adds behavioral context: 'Fast — no ephemeris calculation required', compute class FAST_LOOKUP, and explicit output contract. 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.

Conciseness4/5

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

The description is well-structured with clear sections (SECTION:), front-loading the essential purpose. While somewhat verbose, the length is justified by the need to disambiguate from many siblings and cover all aspects. Every sentence adds value.

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 complexity (3 parameters, many siblings, output schema present), the description is remarkably complete: it covers purpose, workflow, input/output contracts, response formats, compute class, error handling, and explicit disambiguation. No gaps remain.

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?

Even though schema coverage is 0%, the description provides full parameter semantics: sign1 and sign2 are English zodiac names (Aries...Pisces), response_format is explained with both modes. The input contract section clearly describes each parameter's meaning 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?

The description clearly states 'Sign-to-sign compatibility without birth data' and specifies it's based on element and modality affinity, which precisely identifies the tool's capability and distinguishes it from siblings that require full birth data.

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 states when to use this tool (no birth data) and when not to (use asterwise_get_western_compatibility for full charts), with workflow instructions BEFORE and AFTER, and a dedicated section 'DO NOT CONFUSE WITH' listing alternatives.

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

asterwise_get_yogasA
Read-onlyIdempotent
Inspect

Evaluates the natal chart for named classical yogas and returns category, formation text, classical results, modern summaries, and keywords per hit.

SECTION: WHAT THIS TOOL COVERS Detects an open-ended set of named yogas and emits the data.yogas[] list; categories include raja_yogas, dhana_yogas, pancha_mahapurusha, chandra_yogas, surya_yogas, kartari_yogas, or unknown while metadata is pending. It does not return the Graha Drishti matrix (see asterwise_get_natal_chart data.graha_drishti), Shadbala scores, or divisional charts. New yogas may appear without API versioning.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — same birth tuple should be understood before interpreting yoga names. AFTER: asterwise_get_doshas — complementary affliction scan on the same chart.

SECTION: INPUT CONTRACT BirthData follows the global contract. time='00:00' is accepted without flag; yoga house logic may be wrong if true birth time is unknown.

SECTION: OUTPUT CONTRACT data.yogas[] — each object: yoga_name (string) category (string — 'raja_yogas', 'dhana_yogas', 'pancha_mahapurusha', 'chandra_yogas', 'surya_yogas', 'kartari_yogas', or 'unknown' while metadata is pending) formation (string — empty when yoga has no JSON entry yet) modern_summary (string) keywords[] (string array) data.birth_time_provided (bool)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — Dates before 1800 or after 2100 → MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Graha Drishti lives only on asterwise_get_natal_chart, not in data.yogas[].

SECTION: DO NOT CONFUSE WITH asterwise_get_natal_chart — supplies graha_drishti and base chart rows, not the yoga catalogue. asterwise_get_panchanga — Panchanga yoga (Sun+Moon sum) is unrelated to these natal yogas.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already indicate read-only, idempotent, and open-world behavior. The description adds significant context: new yogas may appear without versioning (open world), compute class MEDIUM_COMPUTE, error contracts for each failure mode, and edge cases like graha drishti only on another tool. 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 long but well-organized into labeled sections. The first sentence immediately conveys the core purpose. Each section (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.) is informative and earns its place. Minor redundancy could be trimmed, but structure is excellent for tool discovery.

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 complexity (open-ended yoga set, multiple error modes, workflow dependencies), the description covers all essential aspects: purpose, exclusions, prerequisites, output structure (matching output schema), error contracts, and alternative tools. No gaps remain for safe agent invocation.

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 50% (response_format lacks description). The description compensates by explaining the response_format options (json vs markdown) and their equivalence. It also adds semantic detail for the birth.time parameter, noting that '00:00' is accepted but may cause inaccurate house logic. This adds value 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?

The description starts with a clear verb 'Evaluates' and resource 'natal chart for named classical yogas'. It lists return fields and explicitly states what it does not return (Graha Drishti, Shadbala), distinguishing it from siblings like asterwise_get_natal_chart and asterwise_get_panchanga.

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 a dedicated 'WORKFLOW' section recommending use before asterwise_get_natal_chart and after asterwise_get_doshas. The 'DO NOT CONFUSE WITH' section lists two alternative tools. It also warns about potential inaccuracies when birth time is unknown, providing explicit usage context.

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

asterwise_get_yogini_dashaA
Read-onlyIdempotent
Inspect

Computes the eight-Yogini, 36-year Yogini Dasha cycle with two-level period trees and DD/MM/YYYY boundaries from birth data.

SECTION: WHAT THIS TOOL COVERS Returns Mahadasha rows under data.periods.root[] (not data.periods[]), each with Yogini name, ruling planet, Julian and calendar dates, and sub-periods for Antar only (two levels total). The eight Yoginis map to year-lengths 1–8 summing to 36 years per cycle. It does not validate or refuse charts outside classical Yogini applicability; it does not output Vimshottari or Char Dasha.

SECTION: WORKFLOW BEFORE: RECOMMENDED — asterwise_get_natal_chart — establishes birth context for interpreting Yogini lords. AFTER: asterwise_get_dasha — optional Vimshottari comparison for the same native.

SECTION: INPUT CONTRACT Tree lives at data.periods.root[] — agents must not expect a top-level data.periods array. Calendar strings in periods use DD/MM/YYYY. BirthData follows the global contract.

SECTION: OUTPUT CONTRACT data.periods.root[] — array of Mahadasha objects: yogini (string — e.g. 'Pingala') planet (string — ruling planet) start_jd (float) end_jd (float) start_date (string — DD/MM/YYYY) end_date (string — DD/MM/YYYY) sub[] — Antardasha objects with the same fields (max two levels total) data.birth_time_provided (bool)

SECTION: RESPONSE FORMAT response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining. response_format=markdown renders the same data as a human-readable report. Both modes return identical underlying data — no fields are added, removed, or filtered by either mode.

SECTION: COMPUTE CLASS MEDIUM_COMPUTE

SECTION: ERROR CONTRACT INVALID_PARAMS (local — caught before upstream call): None — all validation is upstream.

INVALID_PARAMS (upstream): — None — upstream rejection surfaces as MCP INTERNAL_ERROR at the tool layer.

INTERNAL_ERROR: — Any upstream API failure or timeout → MCP INTERNAL_ERROR

Edge cases: — Root key is data.periods.root, not data.periods.

SECTION: DO NOT CONFUSE WITH asterwise_get_dasha — Vimshottari planet periods with data.periods[] and optional levels 1–5, not Yogini names. asterwise_get_ashtottari_dasha — 108-year system with data.periods.root[] but planet-based rows, not Yoginis.

ParametersJSON Schema
NameRequiredDescriptionDefault
birthYesBirth data for a single person.
response_formatYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior5/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds critical behavioral context: the period tree lives at data.periods.root[] (not data.periods[]), two-level depth only, date format DD/MM/YYYY, no validation/refusal of charts, and detailed error contract. 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 lengthy but well-structured into clear sections (WHAT THIS TOOL COVERS, WORKFLOW, INPUT CONTRACT, etc.). It is front-loaded with the core purpose. While every section is informative, some redundancy exists (e.g., repeating 'DO NOT CONFUSE WITH' details), but overall it remains efficiently organized.

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 complexity (two-level period trees, multiple output formats, error handling), the description is complete. It covers input, output, workflow, error contract, edge cases, and disambiguation. The existence of an output schema does not reduce the need for description, and this description fully compensates.

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 50% (birth has description, response_format lacks it). The description adds semantics for response_format (differentiating json vs markdown modes) and clarifies that birth follows the global contract. While sub-properties are described in schema, the description provides overall context 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?

The description explicitly states it computes the eight-Yogini, 36-year Yogini Dasha cycle with two-level period trees. It clearly specifies the output location (data.periods.root[]) and distinguishes from related tools like asterwise_get_dasha and asterwise_get_ashtottari_dasha in the 'DO NOT CONFUSE WITH' section.

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 a WORKFLOW section recommending prior use of asterwise_get_natal_chart and optional follow-up with asterwise_get_dasha for Vimshottari comparison. It also provides explicit disambiguation, telling agents when to use alternative tools instead of this one.

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

Discussions

No comments yet. Be the first to start the discussion!

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources