kundali-chart-mcp 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of kundali-chart-mcp might be problematic. Click here for more details.

Files changed (172) hide show
  1. package/README.md +67 -0
  2. package/azure-function/function_app.py +93 -0
  3. package/azure-function/host.json +15 -0
  4. package/azure-function/kundali_bridge.py +952 -0
  5. package/azure-function/python/kundali_lib/__init__.py +1 -0
  6. package/azure-function/python/kundali_lib/__pycache__/__init__.cpython-313.pyc +0 -0
  7. package/azure-function/python/kundali_lib/__pycache__/ephemeris.cpython-313.pyc +0 -0
  8. package/azure-function/python/kundali_lib/__pycache__/geocoder.cpython-313.pyc +0 -0
  9. package/azure-function/python/kundali_lib/__pycache__/vedicastro_bridge.cpython-313.pyc +0 -0
  10. package/azure-function/python/kundali_lib/ephemeris.py +30 -0
  11. package/azure-function/python/kundali_lib/geocoder.py +82 -0
  12. package/azure-function/python/kundali_lib/vedic/__init__.py +1 -0
  13. package/azure-function/python/kundali_lib/vedic/__pycache__/__init__.cpython-313.pyc +0 -0
  14. package/azure-function/python/kundali_lib/vedic/__pycache__/arishta.cpython-313.pyc +0 -0
  15. package/azure-function/python/kundali_lib/vedic/__pycache__/ashtakavarga.cpython-313.pyc +0 -0
  16. package/azure-function/python/kundali_lib/vedic/__pycache__/avasthas.cpython-313.pyc +0 -0
  17. package/azure-function/python/kundali_lib/vedic/__pycache__/ayanamsa.cpython-313.pyc +0 -0
  18. package/azure-function/python/kundali_lib/vedic/__pycache__/bhava_chalit.cpython-313.pyc +0 -0
  19. package/azure-function/python/kundali_lib/vedic/__pycache__/char_dasha.cpython-313.pyc +0 -0
  20. package/azure-function/python/kundali_lib/vedic/__pycache__/chart.cpython-313.pyc +0 -0
  21. package/azure-function/python/kundali_lib/vedic/__pycache__/chart_types.cpython-313.pyc +0 -0
  22. package/azure-function/python/kundali_lib/vedic/__pycache__/compatibility.cpython-313.pyc +0 -0
  23. package/azure-function/python/kundali_lib/vedic/__pycache__/constants.cpython-313.pyc +0 -0
  24. package/azure-function/python/kundali_lib/vedic/__pycache__/dasha_extended.cpython-313.pyc +0 -0
  25. package/azure-function/python/kundali_lib/vedic/__pycache__/dasha_systems.cpython-313.pyc +0 -0
  26. package/azure-function/python/kundali_lib/vedic/__pycache__/doshas.cpython-313.pyc +0 -0
  27. package/azure-function/python/kundali_lib/vedic/__pycache__/gandanta.cpython-313.pyc +0 -0
  28. package/azure-function/python/kundali_lib/vedic/__pycache__/gochara.cpython-313.pyc +0 -0
  29. package/azure-function/python/kundali_lib/vedic/__pycache__/hora.cpython-313.pyc +0 -0
  30. package/azure-function/python/kundali_lib/vedic/__pycache__/houses.cpython-313.pyc +0 -0
  31. package/azure-function/python/kundali_lib/vedic/__pycache__/jaimini.cpython-313.pyc +0 -0
  32. package/azure-function/python/kundali_lib/vedic/__pycache__/kalachakra.cpython-313.pyc +0 -0
  33. package/azure-function/python/kundali_lib/vedic/__pycache__/kartari.cpython-313.pyc +0 -0
  34. package/azure-function/python/kundali_lib/vedic/__pycache__/kurmachakra.cpython-313.pyc +0 -0
  35. package/azure-function/python/kundali_lib/vedic/__pycache__/lunar_return.cpython-313.pyc +0 -0
  36. package/azure-function/python/kundali_lib/vedic/__pycache__/muhurta.cpython-313.pyc +0 -0
  37. package/azure-function/python/kundali_lib/vedic/__pycache__/nabhasha.cpython-313.pyc +0 -0
  38. package/azure-function/python/kundali_lib/vedic/__pycache__/nakshatra_details.cpython-313.pyc +0 -0
  39. package/azure-function/python/kundali_lib/vedic/__pycache__/panchanga.cpython-313.pyc +0 -0
  40. package/azure-function/python/kundali_lib/vedic/__pycache__/planets.cpython-313.pyc +0 -0
  41. package/azure-function/python/kundali_lib/vedic/__pycache__/shadbala.cpython-313.pyc +0 -0
  42. package/azure-function/python/kundali_lib/vedic/__pycache__/special_conditions.cpython-313.pyc +0 -0
  43. package/azure-function/python/kundali_lib/vedic/__pycache__/sudarshana.cpython-313.pyc +0 -0
  44. package/azure-function/python/kundali_lib/vedic/__pycache__/tajaka.cpython-313.pyc +0 -0
  45. package/azure-function/python/kundali_lib/vedic/__pycache__/upagrahas.cpython-313.pyc +0 -0
  46. package/azure-function/python/kundali_lib/vedic/__pycache__/varshaphal.cpython-313.pyc +0 -0
  47. package/azure-function/python/kundali_lib/vedic/__pycache__/yogas.cpython-313.pyc +0 -0
  48. package/azure-function/python/kundali_lib/vedic/__pycache__/zodiac.cpython-313.pyc +0 -0
  49. package/azure-function/python/kundali_lib/vedic/arishta.py +465 -0
  50. package/azure-function/python/kundali_lib/vedic/ashtakavarga.py +213 -0
  51. package/azure-function/python/kundali_lib/vedic/avasthas.py +292 -0
  52. package/azure-function/python/kundali_lib/vedic/ayanamsa.py +106 -0
  53. package/azure-function/python/kundali_lib/vedic/bhava_chalit.py +137 -0
  54. package/azure-function/python/kundali_lib/vedic/char_dasha.py +308 -0
  55. package/azure-function/python/kundali_lib/vedic/chart.py +126 -0
  56. package/azure-function/python/kundali_lib/vedic/chart_types.py +338 -0
  57. package/azure-function/python/kundali_lib/vedic/compatibility.py +705 -0
  58. package/azure-function/python/kundali_lib/vedic/constants.py +108 -0
  59. package/azure-function/python/kundali_lib/vedic/dasha_extended.py +262 -0
  60. package/azure-function/python/kundali_lib/vedic/dasha_systems.py +439 -0
  61. package/azure-function/python/kundali_lib/vedic/doshas.py +453 -0
  62. package/azure-function/python/kundali_lib/vedic/gandanta.py +213 -0
  63. package/azure-function/python/kundali_lib/vedic/gochara.py +277 -0
  64. package/azure-function/python/kundali_lib/vedic/hora.py +263 -0
  65. package/azure-function/python/kundali_lib/vedic/houses.py +30 -0
  66. package/azure-function/python/kundali_lib/vedic/jaimini.py +361 -0
  67. package/azure-function/python/kundali_lib/vedic/kalachakra.py +226 -0
  68. package/azure-function/python/kundali_lib/vedic/kartari.py +243 -0
  69. package/azure-function/python/kundali_lib/vedic/kurmachakra.py +383 -0
  70. package/azure-function/python/kundali_lib/vedic/lunar_return.py +402 -0
  71. package/azure-function/python/kundali_lib/vedic/muhurta.py +414 -0
  72. package/azure-function/python/kundali_lib/vedic/nabhasha.py +349 -0
  73. package/azure-function/python/kundali_lib/vedic/nakshatra_details.py +945 -0
  74. package/azure-function/python/kundali_lib/vedic/panchanga.py +297 -0
  75. package/azure-function/python/kundali_lib/vedic/planets.py +55 -0
  76. package/azure-function/python/kundali_lib/vedic/shadbala.py +500 -0
  77. package/azure-function/python/kundali_lib/vedic/special_conditions.py +319 -0
  78. package/azure-function/python/kundali_lib/vedic/sudarshana.py +232 -0
  79. package/azure-function/python/kundali_lib/vedic/tajaka.py +482 -0
  80. package/azure-function/python/kundali_lib/vedic/upagrahas.py +229 -0
  81. package/azure-function/python/kundali_lib/vedic/varshaphal.py +185 -0
  82. package/azure-function/python/kundali_lib/vedic/yogas.py +935 -0
  83. package/azure-function/python/kundali_lib/vedic/zodiac.py +42 -0
  84. package/azure-function/python/kundali_lib/vedicastro_bridge.py +198 -0
  85. package/azure-function/requirements.txt +9 -0
  86. package/index.js +747 -0
  87. package/kundali-chart-mcp.js +159 -0
  88. package/kundali_bridge.py +952 -0
  89. package/package.json +41 -0
  90. package/python/kundali_lib/__init__.py +1 -0
  91. package/python/kundali_lib/__pycache__/__init__.cpython-313.pyc +0 -0
  92. package/python/kundali_lib/__pycache__/ephemeris.cpython-313.pyc +0 -0
  93. package/python/kundali_lib/__pycache__/geocoder.cpython-313.pyc +0 -0
  94. package/python/kundali_lib/__pycache__/vedicastro_bridge.cpython-313.pyc +0 -0
  95. package/python/kundali_lib/ephemeris.py +30 -0
  96. package/python/kundali_lib/geocoder.py +82 -0
  97. package/python/kundali_lib/vedic/__init__.py +1 -0
  98. package/python/kundali_lib/vedic/__pycache__/__init__.cpython-313.pyc +0 -0
  99. package/python/kundali_lib/vedic/__pycache__/arishta.cpython-313.pyc +0 -0
  100. package/python/kundali_lib/vedic/__pycache__/ashtakavarga.cpython-313.pyc +0 -0
  101. package/python/kundali_lib/vedic/__pycache__/avasthas.cpython-313.pyc +0 -0
  102. package/python/kundali_lib/vedic/__pycache__/ayanamsa.cpython-313.pyc +0 -0
  103. package/python/kundali_lib/vedic/__pycache__/bhava_chalit.cpython-313.pyc +0 -0
  104. package/python/kundali_lib/vedic/__pycache__/char_dasha.cpython-313.pyc +0 -0
  105. package/python/kundali_lib/vedic/__pycache__/chart.cpython-313.pyc +0 -0
  106. package/python/kundali_lib/vedic/__pycache__/chart_types.cpython-313.pyc +0 -0
  107. package/python/kundali_lib/vedic/__pycache__/compatibility.cpython-313.pyc +0 -0
  108. package/python/kundali_lib/vedic/__pycache__/constants.cpython-313.pyc +0 -0
  109. package/python/kundali_lib/vedic/__pycache__/dasha_extended.cpython-313.pyc +0 -0
  110. package/python/kundali_lib/vedic/__pycache__/dasha_systems.cpython-313.pyc +0 -0
  111. package/python/kundali_lib/vedic/__pycache__/doshas.cpython-313.pyc +0 -0
  112. package/python/kundali_lib/vedic/__pycache__/gandanta.cpython-313.pyc +0 -0
  113. package/python/kundali_lib/vedic/__pycache__/gochara.cpython-313.pyc +0 -0
  114. package/python/kundali_lib/vedic/__pycache__/hora.cpython-313.pyc +0 -0
  115. package/python/kundali_lib/vedic/__pycache__/houses.cpython-313.pyc +0 -0
  116. package/python/kundali_lib/vedic/__pycache__/jaimini.cpython-313.pyc +0 -0
  117. package/python/kundali_lib/vedic/__pycache__/kalachakra.cpython-313.pyc +0 -0
  118. package/python/kundali_lib/vedic/__pycache__/kartari.cpython-313.pyc +0 -0
  119. package/python/kundali_lib/vedic/__pycache__/kurmachakra.cpython-313.pyc +0 -0
  120. package/python/kundali_lib/vedic/__pycache__/lunar_return.cpython-313.pyc +0 -0
  121. package/python/kundali_lib/vedic/__pycache__/muhurta.cpython-313.pyc +0 -0
  122. package/python/kundali_lib/vedic/__pycache__/nabhasha.cpython-313.pyc +0 -0
  123. package/python/kundali_lib/vedic/__pycache__/nakshatra_details.cpython-313.pyc +0 -0
  124. package/python/kundali_lib/vedic/__pycache__/panchanga.cpython-313.pyc +0 -0
  125. package/python/kundali_lib/vedic/__pycache__/planets.cpython-313.pyc +0 -0
  126. package/python/kundali_lib/vedic/__pycache__/shadbala.cpython-313.pyc +0 -0
  127. package/python/kundali_lib/vedic/__pycache__/special_conditions.cpython-313.pyc +0 -0
  128. package/python/kundali_lib/vedic/__pycache__/sudarshana.cpython-313.pyc +0 -0
  129. package/python/kundali_lib/vedic/__pycache__/tajaka.cpython-313.pyc +0 -0
  130. package/python/kundali_lib/vedic/__pycache__/upagrahas.cpython-313.pyc +0 -0
  131. package/python/kundali_lib/vedic/__pycache__/varshaphal.cpython-313.pyc +0 -0
  132. package/python/kundali_lib/vedic/__pycache__/yogas.cpython-313.pyc +0 -0
  133. package/python/kundali_lib/vedic/__pycache__/zodiac.cpython-313.pyc +0 -0
  134. package/python/kundali_lib/vedic/arishta.py +465 -0
  135. package/python/kundali_lib/vedic/ashtakavarga.py +213 -0
  136. package/python/kundali_lib/vedic/avasthas.py +292 -0
  137. package/python/kundali_lib/vedic/ayanamsa.py +106 -0
  138. package/python/kundali_lib/vedic/bhava_chalit.py +137 -0
  139. package/python/kundali_lib/vedic/char_dasha.py +308 -0
  140. package/python/kundali_lib/vedic/chart.py +126 -0
  141. package/python/kundali_lib/vedic/chart_types.py +338 -0
  142. package/python/kundali_lib/vedic/compatibility.py +705 -0
  143. package/python/kundali_lib/vedic/constants.py +108 -0
  144. package/python/kundali_lib/vedic/dasha_extended.py +262 -0
  145. package/python/kundali_lib/vedic/dasha_systems.py +439 -0
  146. package/python/kundali_lib/vedic/doshas.py +453 -0
  147. package/python/kundali_lib/vedic/gandanta.py +213 -0
  148. package/python/kundali_lib/vedic/gochara.py +277 -0
  149. package/python/kundali_lib/vedic/hora.py +263 -0
  150. package/python/kundali_lib/vedic/houses.py +30 -0
  151. package/python/kundali_lib/vedic/jaimini.py +361 -0
  152. package/python/kundali_lib/vedic/kalachakra.py +226 -0
  153. package/python/kundali_lib/vedic/kartari.py +243 -0
  154. package/python/kundali_lib/vedic/kurmachakra.py +383 -0
  155. package/python/kundali_lib/vedic/lunar_return.py +402 -0
  156. package/python/kundali_lib/vedic/muhurta.py +414 -0
  157. package/python/kundali_lib/vedic/nabhasha.py +349 -0
  158. package/python/kundali_lib/vedic/nakshatra_details.py +945 -0
  159. package/python/kundali_lib/vedic/panchanga.py +297 -0
  160. package/python/kundali_lib/vedic/planets.py +55 -0
  161. package/python/kundali_lib/vedic/shadbala.py +500 -0
  162. package/python/kundali_lib/vedic/special_conditions.py +319 -0
  163. package/python/kundali_lib/vedic/sudarshana.py +232 -0
  164. package/python/kundali_lib/vedic/tajaka.py +482 -0
  165. package/python/kundali_lib/vedic/upagrahas.py +229 -0
  166. package/python/kundali_lib/vedic/varshaphal.py +185 -0
  167. package/python/kundali_lib/vedic/yogas.py +935 -0
  168. package/python/kundali_lib/vedic/zodiac.py +42 -0
  169. package/python/kundali_lib/vedicastro_bridge.py +198 -0
  170. package/remote-server.js +590 -0
  171. package/requirements.txt +8 -0
  172. package/setup.sh +218 -0
@@ -0,0 +1,159 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Kundali MCP Server — Vedic astrology chart generation.
5
+ *
6
+ * Usage:
7
+ * kundali-chart-mcp <function-url>
8
+ * kundali-chart-mcp https://kundali-mcp-func.azurewebsites.net
9
+ *
10
+ * If no URL is provided, uses KUNDALI_FUNCTION_URL env var
11
+ * or falls back to the default hosted instance.
12
+ */
13
+
14
+ import { dirname, join } from "node:path";
15
+ import { fileURLToPath } from "node:url";
16
+ import { existsSync } from "node:fs";
17
+ import { execSync } from "node:child_process";
18
+
19
+ const __filename = fileURLToPath(import.meta.url);
20
+ const __dirname = dirname(__filename);
21
+
22
+ // ─── Install dependencies if needed ────────────────────────────────────────
23
+ const nodeModules = join(__dirname, "node_modules");
24
+ if (!existsSync(nodeModules)) {
25
+ console.error("📦 Installing dependencies (first run)...");
26
+ try {
27
+ execSync("npm install", { cwd: __dirname, stdio: "inherit" });
28
+ } catch (e) {
29
+ console.error("❌ Failed to install dependencies. Run manually:");
30
+ console.error(` cd ${__dirname} && npm install`);
31
+ process.exit(1);
32
+ }
33
+ }
34
+
35
+ // ─── Load MCP SDK ──────────────────────────────────────────────────────────
36
+ const { McpServer } = await import("@modelcontextprotocol/sdk/server/mcp.js");
37
+ const { StdioServerTransport } = await import("@modelcontextprotocol/sdk/server/stdio.js");
38
+ const { z } = await import("zod");
39
+
40
+ // ─── Config ────────────────────────────────────────────────────────────────
41
+ const DEFAULT_URL = "https://kundali-mcp-func.azurewebsites.net";
42
+ const FUNCTION_URL = process.argv[2] || process.env.KUNDALI_FUNCTION_URL || DEFAULT_URL;
43
+
44
+ if (!FUNCTION_URL) {
45
+ console.error("Usage: kundali-chart-mcp <function-url>");
46
+ console.error(" or: KUNDALI_FUNCTION_URL=<url> kundali-chart-mcp");
47
+ process.exit(1);
48
+ }
49
+
50
+ // ─── HTTP helper ───────────────────────────────────────────────────────────
51
+ async function callRemote(toolName, payload) {
52
+ let url = `${FUNCTION_URL}/api/kundali/${toolName}`;
53
+ if (process.env.KUNDALI_FUNCTION_KEY) {
54
+ url += `?code=${process.env.KUNDALI_FUNCTION_KEY}`;
55
+ }
56
+
57
+ const res = await fetch(url, {
58
+ method: "POST",
59
+ headers: { "Content-Type": "application/json" },
60
+ body: JSON.stringify(payload),
61
+ });
62
+
63
+ if (!res.ok) {
64
+ const body = await res.text();
65
+ throw new Error(`HTTP ${res.status}: ${body}`);
66
+ }
67
+
68
+ return res.json();
69
+ }
70
+
71
+ // ─── Helpers ───────────────────────────────────────────────────────────────
72
+ function jsonContent(data) {
73
+ return {
74
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
75
+ };
76
+ }
77
+
78
+ const standardBirthInput = {
79
+ name: z.string().optional().describe("Person's name."),
80
+ city: z.string().optional().describe("Birth city. Used for geocoding if coordinates not provided."),
81
+ date_of_birth: z.string().describe("Birth date YYYY-MM-DD."),
82
+ time_of_birth: z.string().describe("Birth time HH:MM or HH:MM:SS, local to birthplace."),
83
+ latitude: z.number().optional().describe("Birth latitude. Must come with longitude."),
84
+ longitude: z.number().optional().describe("Birth longitude. Must come with latitude."),
85
+ timezone: z.string().optional().describe("IANA timezone, e.g. Asia/Kolkata."),
86
+ ayanamsa_mode: z.string().optional().describe("Ayanamsa, default 'lahiri'."),
87
+ house_system: z.string().optional().describe("House system code, default 'P'."),
88
+ };
89
+
90
+ // ─── Server ────────────────────────────────────────────────────────────────
91
+ const server = new McpServer({
92
+ name: "kundali-chart",
93
+ version: "0.2.0",
94
+ });
95
+
96
+ server.tool("generate_kundali", "Generate a Vedic Kundali birth chart from birth details.", {
97
+ name: z.string().describe("Person's name."),
98
+ city: z.string().describe("Birth city/place."),
99
+ date_of_birth: z.string().describe("Birth date in YYYY-MM-DD format."),
100
+ time_of_birth: z.string().describe("Birth time in HH:MM or HH:MM:SS format."),
101
+ latitude: z.number().optional(),
102
+ longitude: z.number().optional(),
103
+ timezone: z.string().optional(),
104
+ chart_type: z.string().optional().describe("Optional chart type. Default: lagna."),
105
+ ayanamsa_mode: z.string().optional().describe("Optional sidereal mode. Default: lahiri."),
106
+ house_system: z.string().optional().describe("Optional house system code. Default: P."),
107
+ }, async (args) => jsonContent(await callRemote("generate_kundali", args)));
108
+
109
+ server.tool("list_available_chart_types", "List supported Kundali chart types and aliases.", {}, async (a) => jsonContent(await callRemote("list_available_chart_types", a)));
110
+ server.tool("list_ayanamsa_modes", "List all sidereal (ayanamsa) modes.", {}, async (a) => jsonContent(await callRemote("list_ayanamsa_modes", a)));
111
+ server.tool("list_house_systems", "List all house systems.", {}, async (a) => jsonContent(await callRemote("list_house_systems", a)));
112
+ server.tool("search_birth_places", "Search birth-place suggestions.", { query: z.string(), limit: z.number().int().min(1).max(10).optional() }, async (a) => jsonContent(await callRemote("search_birth_places", a)));
113
+ server.tool("get_timezone_for_coordinates", "Get IANA timezone for lat/lon.", { latitude: z.number(), longitude: z.number() }, async (a) => jsonContent(await callRemote("get_timezone_for_coordinates", a)));
114
+ server.tool("get_transit_positions", "Get sidereal planetary transit positions.", { datetime_utc: z.string().optional() }, async (a) => jsonContent(await callRemote("get_transit_positions", a)));
115
+ server.tool("get_extended_chart", "Get enhanced Kundali chart with SubLord/KP data.", { year: z.number(), month: z.number(), day: z.number(), hour: z.number(), minute: z.number(), second: z.number().optional(), utc_offset: z.string(), latitude: z.number(), longitude: z.number(), ayanamsa: z.string().optional(), house_system: z.string().optional() }, async (a) => jsonContent(await callRemote("get_extended_chart", a)));
116
+ server.tool("get_vimshottari_dasha", "Get Vimshottari Dasha periods.", { year: z.number(), month: z.number(), day: z.number(), hour: z.number(), minute: z.number(), second: z.number().optional(), utc_offset: z.string(), latitude: z.number(), longitude: z.number(), ayanamsa: z.string().optional(), house_system: z.string().optional() }, async (a) => jsonContent(await callRemote("get_vimshottari_dasha", a)));
117
+ server.tool("get_planetary_aspects", "Get all planetary aspects.", { year: z.number(), month: z.number(), day: z.number(), hour: z.number(), minute: z.number(), second: z.number().optional(), utc_offset: z.string(), latitude: z.number(), longitude: z.number(), ayanamsa: z.string().optional(), house_system: z.string().optional() }, async (a) => jsonContent(await callRemote("get_planetary_aspects", a)));
118
+ server.tool("get_significators", "Get planet-wise and house-wise significators (KP system).", { year: z.number(), month: z.number(), day: z.number(), hour: z.number(), minute: z.number(), second: z.number().optional(), utc_offset: z.string(), latitude: z.number(), longitude: z.number(), ayanamsa: z.string().optional(), house_system: z.string().optional() }, async (a) => jsonContent(await callRemote("get_significators", a)));
119
+ server.tool("list_extended_options", "List supported ayanamsas and house systems for extended tools.", {}, async (a) => jsonContent(await callRemote("list_extended_options", a)));
120
+ server.tool("get_panchanga", "Get Panchanga (5 Vedic time limbs) for any datetime and location.", { datetime: z.string().optional(), timezone: z.string().optional(), ayanamsa_mode: z.string().optional() }, async (a) => jsonContent(await callRemote("get_panchanga", a)));
121
+ server.tool("get_doshas", "Check all major doshas: Mangal Dosha, Kaal Sarp Dosha, Sade Sati, Graha Yuddha, Combustion.", { ...standardBirthInput, current_saturn_rashi: z.string().optional() }, async (a) => jsonContent(await callRemote("get_doshas", a)));
122
+ server.tool("get_yogas", "Identify all major Vedic Yogas.", standardBirthInput, async (a) => jsonContent(await callRemote("get_yogas", a)));
123
+ server.tool("get_compatibility", "Ashtakoot Milan: 36-point Vedic marriage compatibility scoring.", { chart1: z.object(standardBirthInput), chart2: z.object(standardBirthInput) }, async (a) => jsonContent(await callRemote("get_compatibility", a)));
124
+ server.tool("get_special_conditions", "Check Vargottama, Pushkara Navamsha, Dig Bala, Jaimini Karakas.", standardBirthInput, async (a) => jsonContent(await callRemote("get_special_conditions", a)));
125
+ server.tool("get_pratyantar_dasha", "Get 3-level Vimshottari Dasha: MD → AD → PD.", standardBirthInput, async (a) => jsonContent(await callRemote("get_pratyantar_dasha", a)));
126
+ server.tool("get_yogini_dasha", "Get Yogini Dasha (8-yogini, 36-year cycle).", standardBirthInput, async (a) => jsonContent(await callRemote("get_yogini_dasha", a)));
127
+ server.tool("get_varshaphal", "Get Varshaphal (Solar Return chart).", { ...standardBirthInput, year_of_life: z.number(), query_latitude: z.number().optional(), query_longitude: z.number().optional(), query_timezone: z.string().optional() }, async (a) => jsonContent(await callRemote("get_varshaphal", a)));
128
+ server.tool("get_ashtakavarga", "Get Ashtakavarga benefic point scores.", standardBirthInput, async (a) => jsonContent(await callRemote("get_ashtakavarga", a)));
129
+ server.tool("get_shadbala", "Get Shadbala — six-fold planetary strength.", standardBirthInput, async (a) => jsonContent(await callRemote("get_shadbala", a)));
130
+ server.tool("get_jaimini", "Get full Jaimini astrology: Chara Karakas, aspects, Karakamsha.", standardBirthInput, async (a) => jsonContent(await callRemote("get_jaimini", a)));
131
+ server.tool("get_muhurta", "Score a datetime for Muhurta (auspicious timing).", { datetime: z.string().optional(), timezone: z.string().optional(), event_type: z.string().optional() }, async (a) => jsonContent(await callRemote("get_muhurta", a)));
132
+ server.tool("get_best_muhurta", "Find top 5 auspicious Muhurta windows in a date range.", { start_datetime: z.string(), end_datetime: z.string(), timezone: z.string().optional(), latitude: z.number().optional(), longitude: z.number().optional(), event_type: z.string().optional() }, async (a) => jsonContent(await callRemote("get_best_muhurta", a)));
133
+ server.tool("get_avasthas", "Get planetary Avasthas (9 states + Baladi Avasthas).", standardBirthInput, async (a) => jsonContent(await callRemote("get_avasthas", a)));
134
+ server.tool("get_upagrahas", "Get Upagrahas (shadow sub-planets): Gulika, Mandi, Dhuma, etc.", standardBirthInput, async (a) => jsonContent(await callRemote("get_upagrahas", a)));
135
+ server.tool("get_gandanta", "Check Gandanta zones (water-fire junctions).", standardBirthInput, async (a) => jsonContent(await callRemote("get_gandanta", a)));
136
+ server.tool("get_kartari", "Check Kartari Yoga (hemmed between benefics/malefics).", standardBirthInput, async (a) => jsonContent(await callRemote("get_kartari", a)));
137
+ server.tool("get_nakshatra_analysis", "Get deep Nakshatra information for each planet.", { ...standardBirthInput, nakshatra_name: z.string().optional() }, async (a) => jsonContent(await callRemote("get_nakshatra_analysis", a)));
138
+ server.tool("get_gochara", "Get Gochara (Vedic transit analysis).", { ...standardBirthInput, transit_datetime: z.string().optional() }, async (a) => jsonContent(await callRemote("get_gochara", a)));
139
+ server.tool("get_bhava_chalit", "Get Bhava Chalit chart (actual house positions).", standardBirthInput, async (a) => jsonContent(await callRemote("get_bhava_chalit", a)));
140
+ server.tool("get_hora", "Get Planetary Hour (Hora) for datetime and location.", { datetime: z.string().optional(), timezone: z.string().optional(), latitude: z.number().optional(), longitude: z.number().optional() }, async (a) => jsonContent(await callRemote("get_hora", a)));
141
+ server.tool("get_sudarshana_chakra", "Get Sudarshana Chakra triple-layer chart analysis.", standardBirthInput, async (a) => jsonContent(await callRemote("get_sudarshana_chakra", a)));
142
+ server.tool("get_ashtottari_dasha", "Get Ashtottari Dasha (108-year, 8-planet cycle).", standardBirthInput, async (a) => jsonContent(await callRemote("get_ashtottari_dasha", a)));
143
+ server.tool("get_sookshma_dasha", "Get Sookshma Dasha (4th level of Vimshottari).", standardBirthInput, async (a) => jsonContent(await callRemote("get_sookshma_dasha", a)));
144
+ server.tool("get_prana_dasha", "Get Prana Dasha (5th level of Vimshottari).", standardBirthInput, async (a) => jsonContent(await callRemote("get_prana_dasha", a)));
145
+ server.tool("get_char_dasha", "Get Char Dasha (Jaimini).", standardBirthInput, async (a) => jsonContent(await callRemote("get_char_dasha", a)));
146
+ server.tool("get_narayana_dasha", "Get Narayana Dasha (Jaimini).", standardBirthInput, async (a) => jsonContent(await callRemote("get_narayana_dasha", a)));
147
+ server.tool("get_tajaka", "Get Tajaka analysis for Varshaphal.", { ...standardBirthInput, year_of_life: z.number(), query_latitude: z.number().optional(), query_longitude: z.number().optional(), query_timezone: z.string().optional() }, async (a) => jsonContent(await callRemote("get_tajaka", a)));
148
+ server.tool("get_nabhasha_yogas", "Get Nabhasha Yogas (Ashrayas, Dala, Akriti).", standardBirthInput, async (a) => jsonContent(await callRemote("get_nabhasha_yogas", a)));
149
+ server.tool("get_arishta", "Get Arishta Yogas (longevity assessment).", standardBirthInput, async (a) => jsonContent(await callRemote("get_arishta", a)));
150
+ server.tool("get_lunar_return", "Get Lunar Return (Chandraphal).", { ...standardBirthInput, target_year: z.number(), target_month: z.number(), query_latitude: z.number().optional(), query_longitude: z.number().optional(), query_timezone: z.string().optional() }, async (a) => jsonContent(await callRemote("get_lunar_return", a)));
151
+ server.tool("get_prasna", "Get Prasna (Horary/Question) chart.", { datetime: z.string().optional(), timezone: z.string().optional(), latitude: z.number().optional(), longitude: z.number().optional(), question: z.string().optional() }, async (a) => jsonContent(await callRemote("get_prasna", a)));
152
+ server.tool("get_kalachakra_dasha", "Get Kalachakra Dasha (9-group, 112-year sign-based dasha).", standardBirthInput, async (a) => jsonContent(await callRemote("get_kalachakra_dasha", a)));
153
+ server.tool("get_kurmachakra", "Get Kurmachakra directional analysis.", { ...standardBirthInput, current_moon_nakshatra: z.string().optional(), event_type: z.enum(["travel", "construction", "marriage", "general"]).optional() }, async (a) => jsonContent(await callRemote("get_kurmachakra", a)));
154
+ server.tool("get_travel_direction_score", "Score a specific travel direction for auspiciousness.", { ...standardBirthInput, intended_direction: z.string(), current_moon_nakshatra: z.string().optional(), weekday: z.enum(["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]).optional() }, async (a) => jsonContent(await callRemote("get_travel_direction_score", a)));
155
+ server.tool("get_full_kurmachakra_chart", "Return the full Kurmachakra reference chart (all 9 directions).", {}, async (a) => jsonContent(await callRemote("get_full_kurmachakra_chart", a)));
156
+
157
+ // ─── Start ─────────────────────────────────────────────────────────────────
158
+ const transport = new StdioServerTransport();
159
+ await server.connect(transport);