Skip to main content
Glama
adityarya24

Astro Skill MCP Server

by adityarya24

🌌 Astro Skill


🎯 Overview

Astro Skill is a production-grade, deterministic Vedic astrology engine that converts birth details and celestial coordinates into structured mathematical charts, timelines, and factual reports.

  • 🔬 Zero Hallucinations: 100% calculation-backed using bundled Swiss Ephemeris data (.se1 SWIEPH via pyswisseph) and Lahiri (Chitrapaksha) ayanamsa.

  • 🔌 3 Plug-and-Play Surfaces:

    1. Stdio MCP Server (astro-mcp): 11 stable tools for Claude Desktop, Cursor, Codex, OpenClaw, and any Model Context Protocol client.

    2. Python Library & CLI: Import directly in Python or run standalone CLI calculator scripts with --json outputs.

    3. Agent Skill: Portable SKILL.md ready to equip autonomous coding agents and orchestrators.

  • 📄 In-Process PDF Generator: Generates bilingual (Hindi & English) Kundali and Panchang charts via ReportLab with bundled Noto Sans Devanagari font — zero headless browser or Chrome dependencies.

  • 🔒 100% Offline & Private: Zero external API keys, zero rate-limits, and zero network calls required for astrological calculations.


Related MCP server: VedAstro MCP Server

🏛️ Architecture & Layering

                     [ Client / Agent Request ]
                                 │
                 ┌───────────────┼───────────────┐
                 ▼               ▼               ▼
          Stdio MCP Server   Python CLI     Agent Skill
          (11 Tools/JSON)   (Scripts/Lib)   (SKILL.md)
                 │               │               │
                 └───────────────┬───────────────┘
                                 │
                                 ▼
                     ┌───────────────────────┐
                     │   Astro Core Engine   │
                     │  (Swiss Ephemeris     │
                     │   + Lahiri Ayanamsa)  │
                     └───────────┬───────────┘
                                 │
                 ┌───────────────┴───────────────┐
                 ▼                               ▼
       [ Structured JSON ]            [ In-Process ReportLab PDF ]
       - 12 Bhavas, Grahas, Yogas     - Lagna & Navamsa (D1/D9)
       - Vimshottari Timeline         - Devanagari Hindi/English
       - Gochar & Guna Milan          - Dasha Strips & Panchang

✨ Core Capabilities

Category

Features & Astrological Foundations

Kundali (D1 & D9)

Lagna, Rashi, Nakshatra + Pada, 9 Grahas with true retrograde flags, whole-sign houses, and high-precision Navamsa (D9) divisional chart.

Planetary Strengths

Classical dignity, Digbala, Vargottama, Combustion (Asta), Graha Yuddha, and Lagna-specific functional benefic / malefic classifications.

Classical Yogas

Gajakesari, Budhaditya, Pancha Mahapurusha, Raja Yogas, Neechabhanga, Vipreet (Harsha/Sarala/Vimala), Kaal Sarp (full/partial), Parivartana (Maha/Khala/Dainya) — with classical cancellation checks.

12-House Bhava Analysis

House lords with placement & strength, occupants, Parashari planetary aspects (Drishti), and Bhava Karakas.

Vimshottari Dasha

Mahadasha, Antardasha, and Pratyantardasha timelines with true astronomical birth-balance handling.

Daily Panchang

Sunrise-anchored Tithi, Vara, Nakshatra, Yoga, Karana, Sunrise/Sunset, auspicious Muhurtas, and Anandadi/Amrit yogas.

Gochar (Transits)

Real-time planetary transits mapped against natal Moon and Lagna, with retrograde indicators and Saturn Sade Sati tracking.

Guna Milan (Matchmaking)

Complete 36-point Ashtakoot compatibility scoring with Nadi, Bhakoot, Gana, and Mangalik Dosha analysis.

Classical Remedies

Prioritized mantras, gemstones, fasting days, daan (charity), and rituals in bilingual Hindi/English.


🚀 Quick Start

1. Install from PyPI

pip install astro-skill

Requires Python 3.11+.

2. Run the Stdio MCP Server

astro-mcp
# or: python -m services.astro_mcp

3. CLI Command Examples

# Calculate Birth Kundali (JSON output)
python -m astro.scripts.kundali_calculator --dob 26/12/2019 --tob 09:15 \
  --place Delhi --lat 28.6139 --lon 77.2090 --timezone Asia/Kolkata --json

# Calculate Vimshottari Dasha Timeline
python -m astro.scripts.dasha_calculator --kundali-json chart.json --json

# Daily Panchang
python -m astro.scripts.panchang_calculator --date 2026-05-21 \
  --place Delhi --lat 28.6139 --lon 77.209 --timezone Asia/Kolkata --json

# Ashtakoot Guna Milan (Compatibility)
python -m astro.scripts.guna_milan --kundali-a-json person_a.json --kundali-b-json person_b.json --json

# Generate Factual Bilingual PDF Report
python -m astro.scripts.pdf_report --kundali-json chart.json --dasha-json dasha.json \
  --panchang-json panchang.json --output report.pdf --language hi

4. Python Library Usage

from astro.scripts.kundali_calculator import calculate_kundali

kundali = calculate_kundali(
    dob="15/08/1990",
    tob="14:30",
    place="Mumbai",
    lat=19.0760,
    lon=72.8777,
    tz_str="Asia/Kolkata"
)

print(f"Lagna: {kundali['lagna']['sign_name']}, Nakshatra: {kundali['nakshatra']['name']}")

🤖 MCP Server Setup

The built-in MCP server exposes 11 tools over stdio. It includes SQLite client profile management and report generation out of the box.

📋 Available MCP Tools (11)

Tool Name

Description

parse_birth_details

Parse conversational birth-detail strings into structured ISO date/time and coordinates.

save_client_profile

Upsert client profile and birth parameters into local SQLite database.

find_client_profile

Search client by client_id or name substring.

list_client_reports

Retrieve previously generated reports for a client.

calculate_kundali

Compute complete Lahiri/whole-sign Kundali, Navamsa (D9), yogas, and bhava data.

calculate_dasha

Compute Vimshottari Mahadasha + Antardasha timeline with exact birth balance.

calculate_gochar

Compute transit chart and Sade Sati status for any target date.

calculate_compatibility

36-point Ashtakoot Guna Milan compatibility score between two charts.

calculate_panchang

Daily sunrise-anchored Panchang (Tithi, Vara, Nakshatra, Yoga, Karana).

generate_report_json

Compile an all-in-one structured astrology draft JSON.

generate_pdf_report

Render a clean, printable PDF report using in-process ReportLab.

⚙️ Client Configurations

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "astro": {
      "command": "astro-mcp"
    }
  }
}

Cursor (settings.json / MCP Config)

{
  "mcpServers": {
    "astro": {
      "command": "python",
      "args": ["-m", "services.astro_mcp"],
      "cwd": "C:/path/to/astro-skill"
    }
  }
}

👑 Pro Report Tier

This repository contains the open-core deterministic engine — mathematical calculations, structured JSON schemas, and factual ReportLab PDFs.

For astrologers, consultancies, and consumer apps seeking client-ready, beautifully designed Janma Patrikas, a Pro Report Tier is available:

  • 📖 Pandit-Grade LLM Synthesis: Deep house-by-house, dasha-by-dasha, and transit narrative analysis in Hindi, English, or Hinglish.

  • 🎨 Premium Print-Ready Layout: Multi-page styled Janma Patrika with rich cover pages, divisional charts, and branded styling.

  • Prioritized Actionable Remedies: Context-aware Gemstone, Mantra, Yantra, and Daan suggestions tailored to running dasha periods.

📩 Interested in licensing the Pro Tier or API? Contact: adityaryawork@gmail.com


🛠️ Development & Testing

git clone https://github.com/adityarya24/astro-skill.git
cd astro-skill
python -m venv .venv
source .venv/bin/activate  # Windows: .\.venv\Scripts\Activate.ps1
pip install -e ".[dev]"

# Run full test suite (154 tests)
pytest -q

# Linter & format check
ruff check astro services scripts

🛡️ Safety Boundaries

  1. Calculation-Backed Drafts: Reports are mathematical baselines intended for review by an astrologer or operator before sharing.

  2. Missing Birth Details: Never guess or synthesize birth times or locations; prompt the user if inputs are missing.

  3. Ethical Guardrails: Strictly prohibits generating fatalistic claims, death timing, medical diagnoses, or unavoidable harm predictions.


📜 License

MIT License © 2026 Aditya Arya

Available Tools

11 tools
calculate_compatibilityGuna Milan CompatibilityA
Read-onlyIdempotent

Guna Milan (Ashtakoot, 36-point) marriage compatibility between two kundali JSONs (kundali_a = bride, kundali_b = groom). Returns the koota-wise point breakdown, the total out of 36, and Nadi, Bhakoot, and Manglik dosha findings.

ParametersJSON Schema
NameRequiredDescriptionDefault
kundali_aYesBride's kundali JSON from calculate_kundali.
kundali_bYesGroom's kundali JSON from calculate_kundali.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, closed-world, so safety is covered. The description adds genuinely useful behavioral context by disclosing what is returned (koota-wise breakdown, total out of 36, Nadi/Bhakoot/Manglik dosha findings), though it says nothing about failure modes for malformed kundali input.

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?

A single compact sentence that front-loads the scoring system and the operation, then the inputs, then the return contents. No filler, no redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the work of explaining the return payload, which is the right call. Inputs are non-trivial nested kundali objects re-used from a sibling tool, and that dependency is stated. Only the handling of invalid or partial kundali input is left unaddressed.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters are documented there, including their provenance from calculate_kundali. The description's bride/groom mapping merely restates the schema's role labels, adding no syntax, format, or constraint detail beyond it, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource (Guna Milan/Ashtakoot compatibility), names the governing 36-point scoring system, and disambiguates from sibling calculate_kundali by declaring that tool's output as its input. An agent can identify the operation without opening the schema.

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 makes the usage context explicit by requiring kundali JSONs produced by calculate_kundali and pinning the bride/groom roles, so the agent knows the prerequisite step. It does not name a competing alternative or state when NOT to use it, so it falls short of a 5.

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

calculate_dashaCalculate Vimshottari DashaA
Read-onlyIdempotent

Compute the Vimshottari dasha timeline from a kundali: mahadasha and antardasha periods with start/end dates, plus the running mahadasha/antardasha/pratyantardasha for on_date. Returns dasha JSON accepted by the report tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
kundaliYesKundali JSON exactly as returned by the calculate_kundali tool.
on_dateNoYYYY-MM-DD date to report the running period for (default: today).

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and non-destructive behavior, so the safety profile is covered. The description adds that the return value is 'dasha JSON accepted by the report tools,' which is useful downstream context, but does not describe computational assumptions, required kundali shape beyond the schema, or handling of missing 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?

A single tight sentence front-loads the main computation and then lists the outputs and downstream use. It is appropriately sized, though the trailing clause about report tools could be slightly more integrated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, read-only computation tool with no output schema, the description covers what is computed, the time reference, and the output form. It does not need to explain return values beyond the mention that they are report-tool-compatible, so it is nearly complete.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (kundali and on_date) are already documented in the schema with format and default details. The description only restates that on_date selects the running period, adding no new syntax or semantic constraints 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?

States a specific verb (compute) and resource (Vimshottari dasha timeline from a kundali), and enumerates the outputs (mahadasha and antardasha periods with start/end dates plus running periods). This distinguishes it clearly from sibling calculate_* tools like calculate_kundali or calculate_gochar, which produce different artifacts.

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

Usage Guidelines3/5

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

Implies the tool is used to derive dasha periods from a kundali, but does not explicitly say when to use it versus generate_report_json or list_client_reports. The mention that the output feeds report tools hints at a workflow but does not give a when-not or alternative-selection rule.

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

calculate_gocharCalculate Gochar (Transits)A
Read-onlyIdempotent

Compute gochar — planetary transits relative to the natal Moon and Lagna — plus the Saturn Sade Sati / Dhaiya phase for a date. Returns gochar JSON accepted by the report tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
kundaliYesKundali JSON exactly as returned by the calculate_kundali tool.
on_dateNoYYYY-MM-DD date to compute transits for (default: today).

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond that: it names the exact computational scope (natal Moon and Lagna) and the interoperability contract ('gochar JSON accepted by the report tools'), which tells the agent the output feeds other tools.

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

Conciseness5/5

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

Two compact sentences, front-loaded with the core computation and followed by the return contract. Nothing is wasted.

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?

There is no output schema, but the description characterizes the return value as gochar JSON consumed by the report tools, which is sufficient orientation. Minor gaps remain around prerequisite chaining and error behavior for a nested kundali input.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters (kundali, on_date) are already documented in the schema, including the default of today. The description adds no format or syntax detail beyond what the schema provides, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb (compute) and resource (gochar planetary transits relative to natal Moon and Lagna), plus the Sade Sati/Dhaiya phase. It is clearly distinguishable from siblings like calculate_dasha, calculate_panchang, and calculate_kundali.

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

Usage Guidelines3/5

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

The description implies usage by noting the output is accepted by the report tools, which hints at downstream chaining, and the schema requires a kundali from calculate_kundali. However, it never explicitly states when to call this versus the other calculation tools or what the prerequisite ordering is.

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

calculate_kundaliCalculate Kundali (Birth Chart)A
Read-onlyIdempotent

Compute a sidereal Vedic kundali (birth chart) from birth details: lagna, Moon rashi, nakshatra with pada, planet positions with sign and whole-sign house placements, navamsa (D9) and further divisional charts, ashtakavarga tables, and the Vimshottari dasha seed. Returns the kundali JSON that the dasha, gochar, compatibility, and report tools consume.

ParametersJSON Schema
NameRequiredDescriptionDefault
dobYesDate of birth, DD/MM/YYYY or YYYY-MM-DD.
latYesLatitude of the birth place in decimal degrees (north positive).
lonYesLongitude of the birth place in decimal degrees (east positive).
tobYesTime of birth, HH:MM (24-hour clock), local time at the birth place.
placeYesBirth place name; a label for output, not geocoded.
ayanamsaNoSidereal ayanamsa to calculate with. Default is Lahiri (Chitrapaksha).lahiri
timezone_nameYesIANA timezone of the birth place, e.g. Asia/Kolkata.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and a closed-world scope, so the safety profile is covered. The description adds real value beyond that by disclosing the exact contents of the returned JSON and its role as a shared input for downstream tools, which is the key behavioral trait an agent needs here.

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?

Two sentences, front-loaded with the action and payload, with no filler. The output enumeration is dense but each listed artifact is decision-relevant, so it largely earns its place, though it could be trimmed slightly.

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?

No output schema exists, and the description compensates by enumerating the return payload and stating which sibling tools consume it. Combined with 100% parameter coverage and clear annotations for a read-only computation, an agent has everything needed to call and sequence this 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 100%, including formats for dob/tob, decimal-degree conventions for lat/lon, the IANA timezone requirement, the non-geocoded nature of place, and the ayanamsa enum with default — so the schema carries full parameter meaning. The description adds nothing beyond the vague phrase 'birth details', matching the baseline 3.

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?

Specific verb (compute) plus resource (sidereal Vedic kundali/birth chart) and an explicit enumeration of the computed artifacts: lagna, Moon rashi, nakshatra with pada, planet positions, D9 and divisional charts, ashtakavarga, and the dasha seed. The closing sentence distinguishes it from siblings by naming the tools that consume its output (dasha, gochar, compatibility, report).

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 final sentence makes the usage context clear: this is the upstream generator whose JSON feeds calculate_dasha, calculate_gochar, calculate_compatibility, and the report tools, implying it must be run first. It does not explicitly exclude alternatives (e.g. parse_birth_details, calculate_panchang), so it stops short of full when-not guidance.

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

calculate_panchangCalculate PanchangA
Read-onlyIdempotent

Compute the daily Panchang for a place and date: vara, tithi, nakshatra, yoga, karana, and sunrise/sunset times. Returns panchang JSON accepted by the report tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude in decimal degrees.
lonYesLongitude in decimal degrees.
dateYesYYYY-MM-DD date for the Panchang.
placeYesPlace name; a label for output, not geocoded.
ayanamsaNoSidereal ayanamsa to calculate with. Default is Lahiri (Chitrapaksha).lahiri
timezone_nameYesIANA timezone of the place, e.g. Asia/Kolkata.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description adds useful interop context (the JSON feeds the report tools) but says nothing about computation cost, ephemeris data requirements, or how partial/invalid dates are handled.

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

Conciseness5/5

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

Two tight sentences: the computation scope and its outputs come first, the downstream integration second. Nothing is padded or redundant.

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?

No output schema exists, but the description compensates by listing the returned Panchang components, so an agent knows what comes back. It does not describe the JSON's shape or nesting, which is the only remaining gap for a six-parameter computation 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 100%, so lat/lon/date/place/timezone_name/ayanamsa are all documented at the schema level. The description adds no parameter-level detail (e.g. how place relates to geocoding) beyond what the schema already states, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Compute') and a specific resource ('daily Panchang'), and enumerates the outputs (vara, tithi, nakshatra, yoga, karana, sunrise/sunset), which effectively separates it from calculate_kundali, calculate_dasha, and calculate_gochar. It stops short of explicitly naming which sibling to pick instead, so it is clear but not fully differentiated.

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

Usage Guidelines3/5

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

Gives an implied usage signal by noting the result is 'accepted by the report tools', routing the agent toward the report pipeline, and the scope is limited to a place and date. There is no explicit when-to-use versus calculate_kundali or when-not guidance.

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

find_client_profileFind Client ProfileA
Idempotent

Look up a client profile by exact client_id, otherwise by case-insensitive display_name substring. Returns the profile, or null when nothing matches.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesclient_id, or part of the display name.
db_pathNoPath of the SQLite client store (default: data/astro_mcp.sqlite3). Must resolve inside the server working directory, the system temp directory, or ASTRO_MCP_BASE_DIR; other paths are rejected.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare idempotent, non-destructive behavior but readOnlyHint=false, so the description's disclosure that the result may be null is valuable return-shape context that annotations cannot supply. It doesn't explain the openWorldHint=false / local SQLite boundary or why the tool isn't flagged read-only, but no contradiction is present.

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?

One sentence, front-loaded with the matching precedence and ending with the null-result case. No padding or restatement of the title.

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?

There is no output schema, and the description correctly fills that gap by stating the return is a profile or null. What remains unstated (the profile's fields, substring-match ambiguity) is minor for a lookup tool with fully documented parameters.

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

Parameters4/5

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

Schema coverage is 100%, so baseline would be 3, but the description adds interpretation detail the schema lacks: that `query` is treated as an exact client_id in one path and a case-insensitive substring in the other. The db_path path restrictions are left to the schema, which already documents them fully.

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?

Specific verb ('look up') plus resource ('client profile') with the exact matching strategy spelled out. It is clearly distinguishable from siblings like save_client_profile and list_client_reports, which are write/list operations rather than a single-profile lookup.

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 defines the selection rule between two modes: exact client_id first, falling back to case-insensitive display_name substring. That is genuine usage guidance for picking a query form, though it does not name sibling alternatives or state 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.

generate_pdf_reportGenerate PDF ReportA

Render a client-facing PDF report (cover, Lagna/Navamsa charts, planet table, dasha timeline) from a kundali plus optional sections, using the in-process ReportLab renderer. Returns the report record with the path of the written PDF.

ParametersJSON Schema
NameRequiredDescriptionDefault
brandNoOptional white-label footer text. Empty keeps the report's neutral footer.
dashaNoOptional dasha JSON from calculate_dasha; adds the dasha timeline section.
gocharNoOptional gochar JSON from calculate_gochar; adds the transit section.
db_pathNoSQLite store to record the report in; when omitted the report is only written to disk. Must resolve inside the server working directory, the system temp directory, or ASTRO_MCP_BASE_DIR; other paths are rejected.
kundaliYesKundali JSON exactly as returned by the calculate_kundali tool.
languageNoReport language: 'hin' or 'hi' for Hindi (Devanagari), 'en' for English.hin
panchangNoOptional panchang JSON from calculate_panchang; adds the panchang section.
rendererNoPDF rendering backend. Only the pure-Python ReportLab renderer is supported.reportlab
templateNoPDF layout. Only the standard factual report template is supported.standard
client_idNoClient identifier the report is filed under.anonymous
output_dirNoDirectory the report file is written into (default: data/reports). Must resolve inside the server working directory, the system temp directory, or ASTRO_MCP_BASE_DIR; other paths are rejected.
client_nameNoClient/native name shown on the PDF cover page

TDQS

A4/5.0
Behavior4/5

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

The description discloses the action (writes PDF to disk, optionally records in SQLite) and the return value. Annotations show no destructive or read-only hints, and the description does not contradict them. However, it does not mention potential side effects like overwriting files or required permissions.

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 a single sentence that front-loads the tool's purpose and key output. It is concise, but could be better structured to separate required and optional parts.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (12 parameters, nested objects, no output schema), the description is relatively brief. It mentions the return value but lacks detail on error conditions, prerequisites beyond having a kundali, or the behavior of the optional sections.

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

Parameters3/5

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

The input schema has 100% description coverage for all parameters. The tool description adds context about the overall flow and mentions the renderer, but it does not significantly enhance understanding of individual parameters beyond the 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 states a specific action (render a PDF report), lists key sections (cover, charts, planet table, dasha timeline), and identifies the input (kundali) and optional additions. It clearly distinguishes from sibling tools which perform calculations or data management.

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 implicitly indicates when to use this tool (to generate a PDF from a kundali) and mentions optional sections from other tools (dasha, gochar, panchang). However, it does not explicitly state when not to use it or provide alternatives beyond the implied prerequisite calculations.

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

generate_report_jsonGenerate JSON ReportA

Assemble a structured astrology report draft (birth chart summary plus optional dasha/panchang/gochar sections) and write it to disk as JSON. Returns the report record: report_id, path of the written file, client_id, and created_at.

ParametersJSON Schema
NameRequiredDescriptionDefault
dashaNoOptional dasha JSON from calculate_dasha; adds the dasha timeline section.
gocharNoOptional gochar JSON from calculate_gochar; adds the transit section.
db_pathNoSQLite store to record the report in; when omitted the report is only written to disk. Must resolve inside the server working directory, the system temp directory, or ASTRO_MCP_BASE_DIR; other paths are rejected.
kundaliYesKundali JSON exactly as returned by the calculate_kundali tool.
languageNoReport language: 'hin' or 'hi' for Hindi (Devanagari), 'en' for English.hin
panchangNoOptional panchang JSON from calculate_panchang; adds the panchang section.
client_idNoClient identifier the report is filed under.anonymous
output_dirNoDirectory the report file is written into (default: data/reports). Must resolve inside the server working directory, the system temp directory, or ASTRO_MCP_BASE_DIR; other paths are rejected.
client_nameNoClient/native name shown on the PDF cover page
gochar_narrativeNoOptional gochar narrative JSON from build_antardasha_gochar_narrative. If missing, it will be computed automatically.

TDQS

A4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, destructiveHint=false and idempotentHint=false; the description goes beyond them by disclosing the side effect (a JSON file is written to disk) and the returned record fields (report_id, path, client_id, created_at), which matters since no output schema exists. It does not explain non-idempotency, i.e. whether repeated calls create duplicate reports.

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

Conciseness5/5

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

Two sentences, both load-bearing: the first covers the action and its output artifact, the second covers the return shape. Nothing is repeated from the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter write tool with no output schema, the description supplies the return fields and the disk-write behavior, and the schema covers all parameters. Remaining gaps are behavioral edge cases (file naming/overwrite behavior, duplicate-report behavior on repeat invocation) rather than anything needed to call it.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents path restrictions, enum values, defaults, and which inputs feed which report sections. The description adds only the high-level notion that dasha/panchang/gochar sections are optional; it introduces no syntax or format detail 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?

States a specific verb ('assemble ... and write it to disk as JSON') and resource ('structured astrology report draft'), and enumerates the sections it comprises. An agent can distinguish it from sibling generate_pdf_report purely from the text.

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

Usage Guidelines3/5

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

Usage is implied ('Assemble a structured astrology report draft'), and the schema hints at ordering by pointing at calculate_kundali/calculate_dasha/calculate_gochar/calculate_panchang outputs. However, it never says when to choose this JSON variant over the sibling generate_pdf_report, nor when to persist via db_path versus writing to disk only.

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

list_client_reportsList Client ReportsB
Idempotent

List report records previously generated for a client, newest first. Each record carries report_id, report_type, path, and created_at.

ParametersJSON Schema
NameRequiredDescriptionDefault
db_pathNoPath of the SQLite client store (default: data/astro_mcp.sqlite3). Must resolve inside the server working directory, the system temp directory, or ASTRO_MCP_BASE_DIR; other paths are rejected.
client_idYesClient identifier whose reports to list.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is largely covered. The description usefully adds that results are newest-first and enumerates returned fields, but it does not explain the notable readOnlyHint=false (an unusual signal for a listing tool) nor error behavior for unknown clients.

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

Conciseness5/5

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

Two sentences, no filler, with the scoping and ordering constraint front-loaded before the return-field detail. Every clause carries 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?

With no output schema, the description compensates by describing the returned record shape (report_id, report_type, path, created_at), which is genuinely helpful. It omits potential pagination/limit behavior and handling of a client with no reports, leaving minor gaps for a low-complexity two-parameter 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 100%, and both parameters (db_path, client_id) are fully documented in the schema, including the path-resolution constraints. The description adds no parameter detail beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb (list), resource (report records), scope (for a client), and ordering (newest first), plus the fields each record returns. It is clearly distinct from the generate_report/generate_pdf_report siblings, though it never names those siblings to reinforce the distinction.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus alternatives (e.g., generate_report_json or generate_pdf_report), and no mention of prerequisites such as the client needing to exist or having prior reports. The agent must infer usage from the name alone.

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

parse_birth_detailsParse Birth DetailsA
Read-onlyIdempotent

Conservatively extract dob, tob, place, lat, lon, and timezone from a short operator note. Returns the recognised fields plus a 'missing' list naming everything that could not be parsed, so the agent can ask the operator for clarification instead of guessing.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesFree-form note with birth details, e.g. 'born 26 Dec 2019, 9:15 am, Delhi'.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (read-only, idempotent, non-destructive), so the description earns credit for adding behavior: it parses 'conservatively' (won't guess) and returns a 'missing' list of unparsed fields. With no output schema, this disclosure of the return contract is genuinely useful; it could go further on accepted input formats or how partial/ambiguous values are handled.

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

Conciseness5/5

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

Two sentences, no filler. The extraction target list is front-loaded and the clarification rationale follows immediately, so an agent gets purpose and payoff in one pass.

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 single-parameter, read-only parser with no output schema, the description covers what is extracted, the conservative failure mode, and the shape of the return value (recognised fields plus a missing list). Nothing an agent needs to invoke it correctly is absent.

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

Parameters3/5

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

Schema description coverage is 100% and there is only one parameter, so the schema already carries the semantics. The description adds only the framing that the note is 'short' and free-form, which is a marginal gain over the schema's own example — baseline 3 applies.

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

Purpose5/5

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

It names a specific verb (extract/parse) and enumerates the exact resource fields (dob, tob, place, lat, lon, timezone) from a clearly scoped input (a short operator note). This separates it cleanly from the sibling calculators, which compute results rather than parse free text.

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 establishes clear context: it operates on a short operator note and is meant to precede clarification ('so the agent can ask the operator for clarification instead of guessing'). It stops short of explicitly naming when to call this versus the calculate_* siblings, so no exclusions or alternatives are stated.

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

save_client_profileSave Client ProfileA
DestructiveIdempotent

Create or update (upsert by client_id) a client profile in the SQLite store, optionally with birth details. Returns the saved profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
db_pathNoPath of the SQLite client store (default: data/astro_mcp.sqlite3). Must resolve inside the server working directory, the system temp directory, or ASTRO_MCP_BASE_DIR; other paths are rejected.
profileYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations indicate destructiveHint=true and idempotentHint=true, and the description confirms upsert behavior and return of saved profile. However, it does not elaborate on what destructive actions occur (e.g., overwriting existing data) or any rate limits.

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 a single sentence that covers key aspects (upsert, storage, optional birth details, return value) without any redundant or vague language.

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 the essential behavior and return value, but lacks details on the format of the returned profile or handling of the db_path parameter. Given the absence of an output schema, a bit more detail on the return value would be helpful.

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%, and the description adds little beyond the schema: it mentions 'optionally with birth details' and implies db_path usage but does not describe parameter formats or constraints not already 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 explicitly states it performs an upsert (create or update) on a client profile in the SQLite store, with optional birth details, and returns the saved profile. This clearly distinguishes it from sibling tools like parse_birth_details or calculation tools.

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

Usage Guidelines3/5

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

The description mentions the upsert behavior and optional birth details but provides no explicit guidance on when to use this tool versus siblings like parse_birth_details or when not to use it.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev2.0.1
    • Addedgenerate_report_json
  2. 3 tool updatesv2.0.0
    • Addedfind_client_profile
    • Addedgenerate_pdf_report
    • Addedlist_client_reports
  3. 8 tool updatesv1.1.1
    • Addedcalculate_compatibility
    • Addedcalculate_dasha
    • Addedcalculate_gochar
    • Addedcalculate_kundali
    • Addedcalculate_panchang
    • Removedlist_client_reports
    • Addedparse_birth_details
    • Addedsave_client_profile
  4. 3 tool updatesv1.1.0
    • Removedcalculate_gochar
    • Addedlist_client_reports
    • Removedsave_client_profile
  5. 10 tool updatesv1.1.0
    • Removedcalculate_compatibility
    • Removedcalculate_dasha
    • Removedcalculate_kundali
    • Removedcalculate_panchang
    • Removedfind_client_profile
    • Removedgenerate_pdf_report
    • Removedgenerate_report_json
    • Removedlist_client_reports
    • Removedparse_birth_details
    • Changedsave_client_profile1 field changed
      • changedInput schema / properties / db_path / description
        Previous value: -"Path of the SQLite client store (default: data/astro_mcp.sqlite3)."New value: +"Path of the SQLite client store (default: data/astro_mcp.sqlite3). Must resolve inside the server working directory, the system temp directory, or ASTRO_MCP_BASE_DIR; other paths are rejected."
  6. 11 tool updatesv1.0.1
    • Changedcalculate_compatibility2 fields changed
      • addedInput schema / properties / kundali_a / description
        Added value: +"Bride's kundali JSON from calculate_kundali."
      • addedInput schema / properties / kundali_b / description
        Added value: +"Groom's kundali JSON from calculate_kundali."
    • Changedcalculate_dasha2 fields changed
      • addedInput schema / properties / kundali / description
        Added value: +"Kundali JSON exactly as returned by the calculate_kundali tool."
      • changedInput schema / properties / on_date / description
        Previous value: -"YYYY-MM-DD"New value: +"YYYY-MM-DD date to report the running period for (default: today)."
    • Changedcalculate_gochar2 fields changed
      • addedInput schema / properties / kundali / description
        Added value: +"Kundali JSON exactly as returned by the calculate_kundali tool."
      • changedInput schema / properties / on_date / description
        Previous value: -"YYYY-MM-DD (default: today)"New value: +"YYYY-MM-DD date to compute transits for (default: today)."
    • Changedcalculate_kundali8 fields changed
      • addedInput schema / properties / ayanamsa / description
        Added value: +"Sidereal ayanamsa to calculate with. Default is Lahiri (Chitrapaksha)."
      • addedInput schema / properties / ayanamsa / enum
        Added value: +[
        +  "lahiri",
        +  "chitrapaksha",
        +  "raman",
        +  "krishnamurti",
        +  "kp",
        +  "fagan_bradley",
        +  "true_chitra",
        +  "yukteshwar"
        +]
      • addedInput schema / properties / dob / description
        Added value: +"Date of birth, DD/MM/YYYY or YYYY-MM-DD."
      • addedInput schema / properties / lat / description
        Added value: +"Latitude of the birth place in decimal degrees (north positive)."
      • addedInput schema / properties / lon / description
        Added value: +"Longitude of the birth place in decimal degrees (east positive)."
      • addedInput schema / properties / place / description
        Added value: +"Birth place name; a label for output, not geocoded."
      • addedInput schema / properties / timezone_name / description
        Added value: +"IANA timezone of the birth place, e.g. Asia/Kolkata."
      • addedInput schema / properties / tob / description
        Added value: +"Time of birth, HH:MM (24-hour clock), local time at the birth place."
    • Changedcalculate_panchang7 fields changed
      • addedInput schema / properties / ayanamsa / description
        Added value: +"Sidereal ayanamsa to calculate with. Default is Lahiri (Chitrapaksha)."
      • addedInput schema / properties / ayanamsa / enum
        Added value: +[
        +  "lahiri",
        +  "chitrapaksha",
        +  "raman",
        +  "krishnamurti",
        +  "kp",
        +  "fagan_bradley",
        +  "true_chitra",
        +  "yukteshwar"
        +]
      • changedInput schema / properties / date / description
        Previous value: -"YYYY-MM-DD"New value: +"YYYY-MM-DD date for the Panchang."
      • addedInput schema / properties / lat / description
        Added value: +"Latitude in decimal degrees."
      • addedInput schema / properties / lon / description
        Added value: +"Longitude in decimal degrees."
      • addedInput schema / properties / place / description
        Added value: +"Place name; a label for output, not geocoded."
      • addedInput schema / properties / timezone_name / description
        Added value: +"IANA timezone of the place, e.g. Asia/Kolkata."
    • Changedfind_client_profile2 fields changed
      • addedInput schema / properties / db_path / description
        Added value: +"Path of the SQLite client store (default: data/astro_mcp.sqlite3)."
      • addedInput schema / properties / query / description
        Added value: +"client_id, or part of the display name."
    • Changedgenerate_pdf_report12 fields changed
      • addedInput schema / properties / client_id / description
        Added value: +"Client identifier the report is filed under."
      • addedInput schema / properties / client_name
        Added value: +{
        +  "description": "Client/native name shown on the PDF cover page",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / dasha / description
        Added value: +"Optional dasha JSON from calculate_dasha; adds the dasha timeline section."
      • addedInput schema / properties / db_path / description
        Added value: +"SQLite store to record the report in; when omitted the report is only written to disk."
      • addedInput schema / properties / gochar
        Added value: +{
        +  "description": "Optional gochar JSON from calculate_gochar; adds the transit section.",
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • addedInput schema / properties / kundali / description
        Added value: +"Kundali JSON exactly as returned by the calculate_kundali tool."
      • addedInput schema / properties / language / description
        Added value: +"Report language: 'hin' or 'hi' for Hindi (Devanagari), 'en' for English."
      • addedInput schema / properties / language / enum
        Added value: +[
        +  "hin",
        +  "hi",
        +  "en"
        +]
      • addedInput schema / properties / output_dir / description
        Added value: +"Directory the report file is written into (default: data/reports)."
      • addedInput schema / properties / panchang / description
        Added value: +"Optional panchang JSON from calculate_panchang; adds the panchang section."
      • addedInput schema / properties / renderer / description
        Added value: +"'html' renders via Chromium/Playwright (best Devanagari shaping); 'reportlab' needs no browser."
      • addedInput schema / properties / template / description
        Added value: +"'standard' report, or 'pandit_v1' — the premium Hindi janma-patrika layout (requires renderer='html')."
    • Changedgenerate_report_json9 fields changed
      • addedInput schema / properties / client_id / description
        Added value: +"Client identifier the report is filed under."
      • addedInput schema / properties / dasha / description
        Added value: +"Optional dasha JSON from calculate_dasha; adds the dasha timeline section."
      • addedInput schema / properties / db_path / description
        Added value: +"SQLite store to record the report in; when omitted the report is only written to disk."
      • addedInput schema / properties / gochar / description
        Added value: +"Optional gochar JSON from calculate_gochar; adds the transit section."
      • addedInput schema / properties / kundali / description
        Added value: +"Kundali JSON exactly as returned by the calculate_kundali tool."
      • addedInput schema / properties / language / description
        Added value: +"Report language: 'hin' or 'hi' for Hindi (Devanagari), 'en' for English."
      • addedInput schema / properties / language / enum
        Added value: +[
        +  "hin",
        +  "hi",
        +  "en"
        +]
      • addedInput schema / properties / output_dir / description
        Added value: +"Directory the report file is written into (default: data/reports)."
      • addedInput schema / properties / panchang / description
        Added value: +"Optional panchang JSON from calculate_panchang; adds the panchang section."
    • Changedlist_client_reports2 fields changed
      • addedInput schema / properties / client_id / description
        Added value: +"Client identifier whose reports to list."
      • addedInput schema / properties / db_path / description
        Added value: +"Path of the SQLite client store (default: data/astro_mcp.sqlite3)."
    • Changedparse_birth_details1 field changed
      • addedInput schema / properties / text / description
        Added value: +"Free-form note with birth details, e.g. 'born 26 Dec 2019, 9:15 am, Delhi'."
    • Changedsave_client_profile6 fields changed
      • addedInput schema / properties / db_path / description
        Added value: +"Path of the SQLite client store (default: data/astro_mcp.sqlite3)."
      • changedInput schema / properties / profile / properties / birth / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "dob": {
        -        "description": "DD/MM/YYYY or YYYY-MM-DD",
        -        "type": "string"
        -      },
        -      "lat": {
        -        "type": "number"
        -      },
        -      "lon": {
        -        "type": "number"
        -      },
        -      "place": {
        -        "type": "string"
        -      },
        -      "timezone_name": {
        -        "description": "IANA name, eg Asia/Kolkata",
        -        "type": "string"
        -      },
        -      "tob": {
        -        "description": "HH:MM (24h) local time",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "dob",
        -      "tob",
        -      "place",
        -      "lat",
        -      "lon",
        -      "timezone_name"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "dob": {
        +        "description": "Date of birth, DD/MM/YYYY or YYYY-MM-DD.",
        +        "type": "string"
        +      },
        +      "lat": {
        +        "description": "Latitude of the birth place in decimal degrees (north positive).",
        +        "type": "number"
        +      },
        +      "lon": {
        +        "description": "Longitude of the birth place in decimal degrees (east positive).",
        +        "type": "number"
        +      },
        +      "place": {
        +        "description": "Birth place name; a label for output, not geocoded.",
        +        "type": "string"
        +      },
        +      "timezone_name": {
        +        "description": "IANA timezone of the birth place, e.g. Asia/Kolkata.",
        +        "type": "string"
        +      },
        +      "tob": {
        +        "description": "Time of birth, HH:MM (24-hour clock), local time at the birth place.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "dob",
        +      "tob",
        +      "place",
        +      "lat",
        +      "lon",
        +      "timezone_name"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / profile / properties / birth / description
        Added value: +"Birth details to store with the profile."
      • addedInput schema / properties / profile / properties / client_id / description
        Added value: +"Stable unique identifier for the client."
      • addedInput schema / properties / profile / properties / display_name / description
        Added value: +"Human-readable client name."
      • addedInput schema / properties / profile / properties / notes / description
        Added value: +"Free-form notes about the client."
  7. 11 tool updatesv1.0.0
    • First observedcalculate_compatibility
    • First observedcalculate_dasha
    • First observedcalculate_gochar
    • First observedcalculate_kundali
    • First observedcalculate_panchang
    • First observedfind_client_profile
    • First observedgenerate_pdf_report
    • First observedgenerate_report_json
    • First observedlist_client_reports
    • First observedparse_birth_details
    • First observedsave_client_profile

TDQS

A4/5.0

Scored across 11 tools

Disambiguation4/5

Most tools target distinct astrological calculations or client operations, making selection clear. The only mild overlap is generate_report_json vs generate_pdf_report, which both assemble reports but differ in output format, so an agent must rely on descriptions to choose.

Naming Consistency5/5

All 11 tools use snake_case with a predictable verb_noun structure (calculate_*, list_*, parse_*, generate_*, find_*, save_*). No naming inconsistencies or mixed conventions are present.

Tool Count5/5

11 tools fit the domain well: five calculation types, birth parsing, two client profile operations, two report generators, and report listing. No tool feels redundant or missing at this scale.

Completeness4/5

Core lifecycle for astrology calculations and reports is covered, including parsing, calculation, report generation, and client profile upsert/lookup. Minor gaps exist (e.g., no delete for profiles/reports, no list_clients), but agents can work around them.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    World's first Vedic Astrology MCP Server — connect Claude, ChatGPT, Cursor, or any AI to real Vedic astrology. Provides horoscope predictions, compatibility matching, numerology, planetary positions, yogas and house analysis via MCP.
    9
    -
  • A
    license
    A
    quality
    C
    maintenance
    Vedic astrology MCP server providing 6 tools: horoscope predictions (200+ life aspects), compatibility match reports with Kuta scoring, Chaldean numerology, raw planet and house chart data, 24 general astro properties, and Ashtakvarga charts. Free tier included with no API key required, premium unlimited tier also available
    3
    643
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A Vedic astrology MCP server that computes birth charts, dashas, transits, and yogas locally using Swiss Ephemeris, enabling an LLM to interpret horoscopes and provide personalized advice.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Exposes Vedic astrology tools for birth chart, dasha, transit calculations, and question context analysis.
    MIT