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.
- package/README.md +67 -0
- package/azure-function/function_app.py +93 -0
- package/azure-function/host.json +15 -0
- package/azure-function/kundali_bridge.py +952 -0
- package/azure-function/python/kundali_lib/__init__.py +1 -0
- package/azure-function/python/kundali_lib/__pycache__/__init__.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/__pycache__/ephemeris.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/__pycache__/geocoder.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/__pycache__/vedicastro_bridge.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/ephemeris.py +30 -0
- package/azure-function/python/kundali_lib/geocoder.py +82 -0
- package/azure-function/python/kundali_lib/vedic/__init__.py +1 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/__init__.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/arishta.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/ashtakavarga.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/avasthas.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/ayanamsa.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/bhava_chalit.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/char_dasha.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/chart.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/chart_types.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/compatibility.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/constants.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/dasha_extended.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/dasha_systems.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/doshas.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/gandanta.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/gochara.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/hora.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/houses.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/jaimini.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/kalachakra.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/kartari.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/kurmachakra.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/lunar_return.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/muhurta.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/nabhasha.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/nakshatra_details.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/panchanga.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/planets.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/shadbala.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/special_conditions.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/sudarshana.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/tajaka.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/upagrahas.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/varshaphal.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/yogas.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/__pycache__/zodiac.cpython-313.pyc +0 -0
- package/azure-function/python/kundali_lib/vedic/arishta.py +465 -0
- package/azure-function/python/kundali_lib/vedic/ashtakavarga.py +213 -0
- package/azure-function/python/kundali_lib/vedic/avasthas.py +292 -0
- package/azure-function/python/kundali_lib/vedic/ayanamsa.py +106 -0
- package/azure-function/python/kundali_lib/vedic/bhava_chalit.py +137 -0
- package/azure-function/python/kundali_lib/vedic/char_dasha.py +308 -0
- package/azure-function/python/kundali_lib/vedic/chart.py +126 -0
- package/azure-function/python/kundali_lib/vedic/chart_types.py +338 -0
- package/azure-function/python/kundali_lib/vedic/compatibility.py +705 -0
- package/azure-function/python/kundali_lib/vedic/constants.py +108 -0
- package/azure-function/python/kundali_lib/vedic/dasha_extended.py +262 -0
- package/azure-function/python/kundali_lib/vedic/dasha_systems.py +439 -0
- package/azure-function/python/kundali_lib/vedic/doshas.py +453 -0
- package/azure-function/python/kundali_lib/vedic/gandanta.py +213 -0
- package/azure-function/python/kundali_lib/vedic/gochara.py +277 -0
- package/azure-function/python/kundali_lib/vedic/hora.py +263 -0
- package/azure-function/python/kundali_lib/vedic/houses.py +30 -0
- package/azure-function/python/kundali_lib/vedic/jaimini.py +361 -0
- package/azure-function/python/kundali_lib/vedic/kalachakra.py +226 -0
- package/azure-function/python/kundali_lib/vedic/kartari.py +243 -0
- package/azure-function/python/kundali_lib/vedic/kurmachakra.py +383 -0
- package/azure-function/python/kundali_lib/vedic/lunar_return.py +402 -0
- package/azure-function/python/kundali_lib/vedic/muhurta.py +414 -0
- package/azure-function/python/kundali_lib/vedic/nabhasha.py +349 -0
- package/azure-function/python/kundali_lib/vedic/nakshatra_details.py +945 -0
- package/azure-function/python/kundali_lib/vedic/panchanga.py +297 -0
- package/azure-function/python/kundali_lib/vedic/planets.py +55 -0
- package/azure-function/python/kundali_lib/vedic/shadbala.py +500 -0
- package/azure-function/python/kundali_lib/vedic/special_conditions.py +319 -0
- package/azure-function/python/kundali_lib/vedic/sudarshana.py +232 -0
- package/azure-function/python/kundali_lib/vedic/tajaka.py +482 -0
- package/azure-function/python/kundali_lib/vedic/upagrahas.py +229 -0
- package/azure-function/python/kundali_lib/vedic/varshaphal.py +185 -0
- package/azure-function/python/kundali_lib/vedic/yogas.py +935 -0
- package/azure-function/python/kundali_lib/vedic/zodiac.py +42 -0
- package/azure-function/python/kundali_lib/vedicastro_bridge.py +198 -0
- package/azure-function/requirements.txt +9 -0
- package/index.js +747 -0
- package/kundali-chart-mcp.js +159 -0
- package/kundali_bridge.py +952 -0
- package/package.json +41 -0
- package/python/kundali_lib/__init__.py +1 -0
- package/python/kundali_lib/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/kundali_lib/__pycache__/ephemeris.cpython-313.pyc +0 -0
- package/python/kundali_lib/__pycache__/geocoder.cpython-313.pyc +0 -0
- package/python/kundali_lib/__pycache__/vedicastro_bridge.cpython-313.pyc +0 -0
- package/python/kundali_lib/ephemeris.py +30 -0
- package/python/kundali_lib/geocoder.py +82 -0
- package/python/kundali_lib/vedic/__init__.py +1 -0
- package/python/kundali_lib/vedic/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/arishta.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/ashtakavarga.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/avasthas.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/ayanamsa.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/bhava_chalit.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/char_dasha.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/chart.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/chart_types.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/compatibility.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/constants.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/dasha_extended.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/dasha_systems.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/doshas.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/gandanta.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/gochara.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/hora.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/houses.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/jaimini.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/kalachakra.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/kartari.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/kurmachakra.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/lunar_return.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/muhurta.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/nabhasha.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/nakshatra_details.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/panchanga.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/planets.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/shadbala.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/special_conditions.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/sudarshana.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/tajaka.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/upagrahas.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/varshaphal.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/yogas.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/__pycache__/zodiac.cpython-313.pyc +0 -0
- package/python/kundali_lib/vedic/arishta.py +465 -0
- package/python/kundali_lib/vedic/ashtakavarga.py +213 -0
- package/python/kundali_lib/vedic/avasthas.py +292 -0
- package/python/kundali_lib/vedic/ayanamsa.py +106 -0
- package/python/kundali_lib/vedic/bhava_chalit.py +137 -0
- package/python/kundali_lib/vedic/char_dasha.py +308 -0
- package/python/kundali_lib/vedic/chart.py +126 -0
- package/python/kundali_lib/vedic/chart_types.py +338 -0
- package/python/kundali_lib/vedic/compatibility.py +705 -0
- package/python/kundali_lib/vedic/constants.py +108 -0
- package/python/kundali_lib/vedic/dasha_extended.py +262 -0
- package/python/kundali_lib/vedic/dasha_systems.py +439 -0
- package/python/kundali_lib/vedic/doshas.py +453 -0
- package/python/kundali_lib/vedic/gandanta.py +213 -0
- package/python/kundali_lib/vedic/gochara.py +277 -0
- package/python/kundali_lib/vedic/hora.py +263 -0
- package/python/kundali_lib/vedic/houses.py +30 -0
- package/python/kundali_lib/vedic/jaimini.py +361 -0
- package/python/kundali_lib/vedic/kalachakra.py +226 -0
- package/python/kundali_lib/vedic/kartari.py +243 -0
- package/python/kundali_lib/vedic/kurmachakra.py +383 -0
- package/python/kundali_lib/vedic/lunar_return.py +402 -0
- package/python/kundali_lib/vedic/muhurta.py +414 -0
- package/python/kundali_lib/vedic/nabhasha.py +349 -0
- package/python/kundali_lib/vedic/nakshatra_details.py +945 -0
- package/python/kundali_lib/vedic/panchanga.py +297 -0
- package/python/kundali_lib/vedic/planets.py +55 -0
- package/python/kundali_lib/vedic/shadbala.py +500 -0
- package/python/kundali_lib/vedic/special_conditions.py +319 -0
- package/python/kundali_lib/vedic/sudarshana.py +232 -0
- package/python/kundali_lib/vedic/tajaka.py +482 -0
- package/python/kundali_lib/vedic/upagrahas.py +229 -0
- package/python/kundali_lib/vedic/varshaphal.py +185 -0
- package/python/kundali_lib/vedic/yogas.py +935 -0
- package/python/kundali_lib/vedic/zodiac.py +42 -0
- package/python/kundali_lib/vedicastro_bridge.py +198 -0
- package/remote-server.js +590 -0
- package/requirements.txt +8 -0
- package/setup.sh +218 -0
package/index.js
ADDED
|
@@ -0,0 +1,747 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
|
|
7
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = dirname(__filename);
|
|
13
|
+
const bridgePath = join(__dirname, "kundali_bridge.py");
|
|
14
|
+
const packageDir = __dirname;
|
|
15
|
+
const pythonCommand = process.env.KUNDALI_MCP_PYTHON || "python3";
|
|
16
|
+
|
|
17
|
+
const server = new McpServer({
|
|
18
|
+
name: "kundali-chart",
|
|
19
|
+
version: "0.1.0",
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
function callBridge(toolName, payload) {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
const child = spawn(pythonCommand, [bridgePath, toolName], {
|
|
25
|
+
cwd: packageDir,
|
|
26
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
27
|
+
env: process.env,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
let stdout = "";
|
|
31
|
+
let stderr = "";
|
|
32
|
+
|
|
33
|
+
child.stdout.setEncoding("utf8");
|
|
34
|
+
child.stderr.setEncoding("utf8");
|
|
35
|
+
|
|
36
|
+
child.stdout.on("data", (chunk) => {
|
|
37
|
+
stdout += chunk;
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
child.stderr.on("data", (chunk) => {
|
|
41
|
+
stderr += chunk;
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
child.on("error", (error) => {
|
|
45
|
+
reject(new Error(`Failed to start Python bridge: ${error.message}`));
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
child.on("close", (code) => {
|
|
49
|
+
if (code !== 0) {
|
|
50
|
+
reject(new Error(stderr || `Python bridge exited with code ${code}`));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
try {
|
|
55
|
+
resolve(JSON.parse(stdout));
|
|
56
|
+
} catch (error) {
|
|
57
|
+
reject(
|
|
58
|
+
new Error(`Python bridge returned invalid JSON: ${error.message}`),
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
child.stdin.end(JSON.stringify(payload));
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function jsonContent(data) {
|
|
68
|
+
return {
|
|
69
|
+
content: [
|
|
70
|
+
{
|
|
71
|
+
type: "text",
|
|
72
|
+
text: JSON.stringify(data, null, 2),
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
server.tool(
|
|
79
|
+
"generate_kundali",
|
|
80
|
+
"Generate a Vedic Kundali birth chart from birth details.",
|
|
81
|
+
{
|
|
82
|
+
name: z.string().describe("Person's name."),
|
|
83
|
+
city: z
|
|
84
|
+
.string()
|
|
85
|
+
.describe(
|
|
86
|
+
"Birth city/place. Used for geocoding if coordinates are not provided.",
|
|
87
|
+
),
|
|
88
|
+
date_of_birth: z.string().describe("Birth date in YYYY-MM-DD format."),
|
|
89
|
+
time_of_birth: z
|
|
90
|
+
.string()
|
|
91
|
+
.describe("Birth time in HH:MM or HH:MM:SS format, local to birthplace."),
|
|
92
|
+
latitude: z
|
|
93
|
+
.number()
|
|
94
|
+
.optional()
|
|
95
|
+
.describe(
|
|
96
|
+
"Optional birthplace latitude. Must be provided with longitude.",
|
|
97
|
+
),
|
|
98
|
+
longitude: z
|
|
99
|
+
.number()
|
|
100
|
+
.optional()
|
|
101
|
+
.describe(
|
|
102
|
+
"Optional birthplace longitude. Must be provided with latitude.",
|
|
103
|
+
),
|
|
104
|
+
timezone: z
|
|
105
|
+
.string()
|
|
106
|
+
.optional()
|
|
107
|
+
.describe("Optional IANA timezone, for example Asia/Kolkata."),
|
|
108
|
+
chart_type: z
|
|
109
|
+
.string()
|
|
110
|
+
.optional()
|
|
111
|
+
.describe(
|
|
112
|
+
"Optional chart type. Default is lagna. Supported: lagna/rashi/d1, chandra, surya, d2, d3, d4, d7, d9, d10, d12, d16, d20, d24, d27, d30, d40, d45, d60, all, all_divisionals.",
|
|
113
|
+
),
|
|
114
|
+
ayanamsa_mode: z
|
|
115
|
+
.string()
|
|
116
|
+
.optional()
|
|
117
|
+
.describe(
|
|
118
|
+
"Optional sidereal mode. Default 'lahiri'. Use list_ayanamsa_modes to see all supported modes.",
|
|
119
|
+
),
|
|
120
|
+
house_system: z
|
|
121
|
+
.string()
|
|
122
|
+
.optional()
|
|
123
|
+
.describe(
|
|
124
|
+
"Optional house system code: P (Placidus), K (Koch), E (Equal), N (Whole Sign), etc. Default 'P'. Use list_house_systems to see all.",
|
|
125
|
+
),
|
|
126
|
+
},
|
|
127
|
+
async (args) => jsonContent(await callBridge("generate_kundali", args)),
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
server.tool(
|
|
131
|
+
"list_available_chart_types",
|
|
132
|
+
"List supported Kundali chart types and aliases accepted by generate_kundali.",
|
|
133
|
+
{},
|
|
134
|
+
async (args) =>
|
|
135
|
+
jsonContent(await callBridge("list_available_chart_types", args)),
|
|
136
|
+
);
|
|
137
|
+
|
|
138
|
+
server.tool(
|
|
139
|
+
"list_ayanamsa_modes",
|
|
140
|
+
"List all sidereal (ayanamsa) modes supported by the underlying Swiss Ephemeris engine.",
|
|
141
|
+
{},
|
|
142
|
+
async (args) => jsonContent(await callBridge("list_ayanamsa_modes", args)),
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
server.tool(
|
|
146
|
+
"list_house_systems",
|
|
147
|
+
"List all house systems supported by the underlying Swiss Ephemeris engine.",
|
|
148
|
+
{},
|
|
149
|
+
async (args) => jsonContent(await callBridge("list_house_systems", args)),
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
server.tool(
|
|
153
|
+
"search_birth_places",
|
|
154
|
+
"Search birth-place suggestions for choosing chart coordinates.",
|
|
155
|
+
{
|
|
156
|
+
query: z.string().describe("Place/city search text. Minimum 2 characters."),
|
|
157
|
+
limit: z
|
|
158
|
+
.number()
|
|
159
|
+
.int()
|
|
160
|
+
.min(1)
|
|
161
|
+
.max(10)
|
|
162
|
+
.optional()
|
|
163
|
+
.describe("Maximum number of suggestions to return."),
|
|
164
|
+
},
|
|
165
|
+
async (args) => jsonContent(await callBridge("search_birth_places", args)),
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
server.tool(
|
|
169
|
+
"get_timezone_for_coordinates",
|
|
170
|
+
"Get the IANA timezone for a latitude/longitude pair.",
|
|
171
|
+
{
|
|
172
|
+
latitude: z.number().describe("Latitude."),
|
|
173
|
+
longitude: z.number().describe("Longitude."),
|
|
174
|
+
},
|
|
175
|
+
async (args) =>
|
|
176
|
+
jsonContent(await callBridge("get_timezone_for_coordinates", args)),
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
server.tool(
|
|
180
|
+
"get_transit_positions",
|
|
181
|
+
"Get sidereal Lahiri planetary transit positions for now or a specific UTC datetime.",
|
|
182
|
+
{
|
|
183
|
+
datetime_utc: z
|
|
184
|
+
.string()
|
|
185
|
+
.optional()
|
|
186
|
+
.describe(
|
|
187
|
+
"Optional ISO UTC datetime, for example 2026-06-20T12:00:00Z. If omitted, current UTC time is used.",
|
|
188
|
+
),
|
|
189
|
+
},
|
|
190
|
+
async (args) => jsonContent(await callBridge("get_transit_positions", args)),
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
const extendedBirthInput = {
|
|
194
|
+
year: z.number().int().describe("Birth year, e.g. 1998."),
|
|
195
|
+
month: z.number().int().min(1).max(12).describe("Birth month (1–12)."),
|
|
196
|
+
day: z.number().int().min(1).max(31).describe("Birth day (1–31)."),
|
|
197
|
+
hour: z
|
|
198
|
+
.number()
|
|
199
|
+
.int()
|
|
200
|
+
.min(0)
|
|
201
|
+
.max(23)
|
|
202
|
+
.describe("Birth hour in 24h local time."),
|
|
203
|
+
minute: z.number().int().min(0).max(59).describe("Birth minute."),
|
|
204
|
+
second: z
|
|
205
|
+
.number()
|
|
206
|
+
.int()
|
|
207
|
+
.min(0)
|
|
208
|
+
.max(59)
|
|
209
|
+
.optional()
|
|
210
|
+
.describe("Birth second. Defaults to 0."),
|
|
211
|
+
utc_offset: z
|
|
212
|
+
.string()
|
|
213
|
+
.describe("UTC offset of birthplace, e.g. '+05:30', '-04:00', '+00:00'."),
|
|
214
|
+
latitude: z.number().describe("Birthplace latitude."),
|
|
215
|
+
longitude: z.number().describe("Birthplace longitude."),
|
|
216
|
+
ayanamsa: z
|
|
217
|
+
.string()
|
|
218
|
+
.optional()
|
|
219
|
+
.describe(
|
|
220
|
+
"Optional ayanamsa. Default 'Lahiri'. Supported: Lahiri, Lahiri_1940, Lahiri_VP285, Lahiri_ICRC, Raman, Krishnamurti, Krishnamurti_Senthilathiban. Use list_extended_options to see all.",
|
|
221
|
+
),
|
|
222
|
+
house_system: z
|
|
223
|
+
.string()
|
|
224
|
+
.optional()
|
|
225
|
+
.describe(
|
|
226
|
+
"Optional house system. Default 'Placidus'. Supported: Placidus, Equal, Equal 2, Whole Sign. Use list_extended_options to see all.",
|
|
227
|
+
),
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
server.tool(
|
|
231
|
+
"get_extended_chart",
|
|
232
|
+
"Get enhanced Kundali chart with SubLord/KP data, Nakshatra SubLords for planets and house cusps. Uses vedicastro engine.",
|
|
233
|
+
extendedBirthInput,
|
|
234
|
+
async (args) => jsonContent(await callBridge("get_extended_chart", args)),
|
|
235
|
+
);
|
|
236
|
+
|
|
237
|
+
server.tool(
|
|
238
|
+
"get_vimshottari_dasha",
|
|
239
|
+
"Get Vimshottari Dasha (mahadasha + antardasha) periods for a birth chart. Uses vedicastro engine.",
|
|
240
|
+
extendedBirthInput,
|
|
241
|
+
async (args) => jsonContent(await callBridge("get_vimshottari_dasha", args)),
|
|
242
|
+
);
|
|
243
|
+
|
|
244
|
+
server.tool(
|
|
245
|
+
"get_planetary_aspects",
|
|
246
|
+
"Get all planetary aspects (conjunction, sextile, square, trine, opposition, semi-sextile, etc.) for a birth chart. Uses vedicastro engine.",
|
|
247
|
+
extendedBirthInput,
|
|
248
|
+
async (args) => jsonContent(await callBridge("get_planetary_aspects", args)),
|
|
249
|
+
);
|
|
250
|
+
|
|
251
|
+
server.tool(
|
|
252
|
+
"get_significators",
|
|
253
|
+
"Get planet-wise and house-wise significators (KP system) for a birth chart. Uses vedicastro engine.",
|
|
254
|
+
extendedBirthInput,
|
|
255
|
+
async (args) => jsonContent(await callBridge("get_significators", args)),
|
|
256
|
+
);
|
|
257
|
+
|
|
258
|
+
server.tool(
|
|
259
|
+
"list_extended_options",
|
|
260
|
+
"List supported ayanamsas and house systems for the extended vedicastro-powered tools.",
|
|
261
|
+
{},
|
|
262
|
+
async (args) => jsonContent(await callBridge("list_extended_options", args)),
|
|
263
|
+
);
|
|
264
|
+
|
|
265
|
+
// ─── Standard birth input (for pyswisseph tools) ───────────────────────────
|
|
266
|
+
const standardBirthInput = {
|
|
267
|
+
name: z.string().optional().describe("Person's name."),
|
|
268
|
+
city: z
|
|
269
|
+
.string()
|
|
270
|
+
.optional()
|
|
271
|
+
.describe("Birth city. Used for geocoding if coordinates not provided."),
|
|
272
|
+
date_of_birth: z.string().describe("Birth date YYYY-MM-DD."),
|
|
273
|
+
time_of_birth: z
|
|
274
|
+
.string()
|
|
275
|
+
.describe("Birth time HH:MM or HH:MM:SS, local to birthplace."),
|
|
276
|
+
latitude: z
|
|
277
|
+
.number()
|
|
278
|
+
.optional()
|
|
279
|
+
.describe("Birth latitude. Must come with longitude."),
|
|
280
|
+
longitude: z
|
|
281
|
+
.number()
|
|
282
|
+
.optional()
|
|
283
|
+
.describe("Birth longitude. Must come with latitude."),
|
|
284
|
+
timezone: z.string().optional().describe("IANA timezone, e.g. Asia/Kolkata."),
|
|
285
|
+
ayanamsa_mode: z
|
|
286
|
+
.string()
|
|
287
|
+
.optional()
|
|
288
|
+
.describe("Ayanamsa, default 'lahiri'. Use list_ayanamsa_modes."),
|
|
289
|
+
house_system: z
|
|
290
|
+
.string()
|
|
291
|
+
.optional()
|
|
292
|
+
.describe("House system code, default 'P'. Use list_house_systems."),
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
// ─── Panchanga ─────────────────────────────────────────────────────────────
|
|
296
|
+
server.tool(
|
|
297
|
+
"get_panchanga",
|
|
298
|
+
"Get Panchanga (5 Vedic time limbs: Tithi, Vara, Nakshatra, Yoga, Karana) for any datetime and location.",
|
|
299
|
+
{
|
|
300
|
+
datetime: z.string().optional().describe("ISO datetime. Defaults to now."),
|
|
301
|
+
timezone: z.string().optional().describe("IANA timezone."),
|
|
302
|
+
ayanamsa_mode: z.string().optional().describe("Ayanamsa, default lahiri."),
|
|
303
|
+
},
|
|
304
|
+
async (args) => jsonContent(await callBridge("get_panchanga", args)),
|
|
305
|
+
);
|
|
306
|
+
|
|
307
|
+
// ─── Doshas ────────────────────────────────────────────────────────────────
|
|
308
|
+
server.tool(
|
|
309
|
+
"get_doshas",
|
|
310
|
+
"Check all major doshas: Mangal Dosha, Kaal Sarp Dosha, Sade Sati, Graha Yuddha (planetary war), and Combustion.",
|
|
311
|
+
{
|
|
312
|
+
...standardBirthInput,
|
|
313
|
+
current_saturn_rashi: z
|
|
314
|
+
.string()
|
|
315
|
+
.optional()
|
|
316
|
+
.describe("Current Saturn sign for Sade Sati check, e.g. 'Pisces'."),
|
|
317
|
+
},
|
|
318
|
+
async (args) => jsonContent(await callBridge("get_doshas", args)),
|
|
319
|
+
);
|
|
320
|
+
|
|
321
|
+
// ─── Yogas ─────────────────────────────────────────────────────────────────
|
|
322
|
+
server.tool(
|
|
323
|
+
"get_yogas",
|
|
324
|
+
"Identify all major Vedic Yogas: Pancha Mahapurusha, Raj Yoga, Gaja Kesari, Dhana, Viparita Raj, Parivartana, Neecha Bhanga, and more.",
|
|
325
|
+
standardBirthInput,
|
|
326
|
+
async (args) => jsonContent(await callBridge("get_yogas", args)),
|
|
327
|
+
);
|
|
328
|
+
|
|
329
|
+
// ─── Compatibility ─────────────────────────────────────────────────────────
|
|
330
|
+
server.tool(
|
|
331
|
+
"get_compatibility",
|
|
332
|
+
"Ashtakoot Milan: 36-point Vedic marriage compatibility scoring across all 8 kootas (Varna, Vashya, Tara, Yoni, Graha Maitri, Gana, Bhakoot, Nadi).",
|
|
333
|
+
{
|
|
334
|
+
chart1: z
|
|
335
|
+
.object(standardBirthInput)
|
|
336
|
+
.describe("First person's birth details."),
|
|
337
|
+
chart2: z
|
|
338
|
+
.object(standardBirthInput)
|
|
339
|
+
.describe("Second person's birth details."),
|
|
340
|
+
},
|
|
341
|
+
async (args) => jsonContent(await callBridge("get_compatibility", args)),
|
|
342
|
+
);
|
|
343
|
+
|
|
344
|
+
// ─── Special Conditions ────────────────────────────────────────────────────
|
|
345
|
+
server.tool(
|
|
346
|
+
"get_special_conditions",
|
|
347
|
+
"Check Vargottama, Pushkara Navamsha, Dig Bala (directional strength), and Jaimini Karakas for a birth chart.",
|
|
348
|
+
standardBirthInput,
|
|
349
|
+
async (args) => jsonContent(await callBridge("get_special_conditions", args)),
|
|
350
|
+
);
|
|
351
|
+
|
|
352
|
+
// ─── Pratyantar Dasha ──────────────────────────────────────────────────────
|
|
353
|
+
server.tool(
|
|
354
|
+
"get_pratyantar_dasha",
|
|
355
|
+
"Get 3-level Vimshottari Dasha: Mahadasha → Antardasha → Pratyantar Dasha with exact start/end dates.",
|
|
356
|
+
standardBirthInput,
|
|
357
|
+
async (args) => jsonContent(await callBridge("get_pratyantar_dasha", args)),
|
|
358
|
+
);
|
|
359
|
+
|
|
360
|
+
// ─── Yogini Dasha ──────────────────────────────────────────────────────────
|
|
361
|
+
server.tool(
|
|
362
|
+
"get_yogini_dasha",
|
|
363
|
+
"Get Yogini Dasha (8-yogini, 36-year cycle: Mangala, Pingala, Dhanya, Bhramari, Bhadrika, Ulka, Siddha, Sankata).",
|
|
364
|
+
standardBirthInput,
|
|
365
|
+
async (args) => jsonContent(await callBridge("get_yogini_dasha", args)),
|
|
366
|
+
);
|
|
367
|
+
|
|
368
|
+
// ─── Varshaphal ────────────────────────────────────────────────────────────
|
|
369
|
+
server.tool(
|
|
370
|
+
"get_varshaphal",
|
|
371
|
+
"Get Varshaphal (Solar Return chart) — the chart for the exact moment the Sun returns to its natal longitude in a given year of life.",
|
|
372
|
+
{
|
|
373
|
+
...standardBirthInput,
|
|
374
|
+
year_of_life: z
|
|
375
|
+
.number()
|
|
376
|
+
.int()
|
|
377
|
+
.describe("Which year's solar return to calculate, e.g. 26."),
|
|
378
|
+
query_latitude: z
|
|
379
|
+
.number()
|
|
380
|
+
.optional()
|
|
381
|
+
.describe("Current location latitude. Defaults to birth location."),
|
|
382
|
+
query_longitude: z
|
|
383
|
+
.number()
|
|
384
|
+
.optional()
|
|
385
|
+
.describe("Current location longitude. Defaults to birth location."),
|
|
386
|
+
query_timezone: z
|
|
387
|
+
.string()
|
|
388
|
+
.optional()
|
|
389
|
+
.describe("Current location timezone. Defaults to birth timezone."),
|
|
390
|
+
},
|
|
391
|
+
async (args) => jsonContent(await callBridge("get_varshaphal", args)),
|
|
392
|
+
);
|
|
393
|
+
|
|
394
|
+
// ─── Ashtakavarga ──────────────────────────────────────────────────────────
|
|
395
|
+
server.tool(
|
|
396
|
+
"get_ashtakavarga",
|
|
397
|
+
"Get Ashtakavarga — benefic point scores for all 12 houses for each of 7 planets (BAV) and total (SAV). Used for transit predictions.",
|
|
398
|
+
standardBirthInput,
|
|
399
|
+
async (args) => jsonContent(await callBridge("get_ashtakavarga", args)),
|
|
400
|
+
);
|
|
401
|
+
|
|
402
|
+
// ─── Shadbala ──────────────────────────────────────────────────────────────
|
|
403
|
+
server.tool(
|
|
404
|
+
"get_shadbala",
|
|
405
|
+
"Get Shadbala — six-fold planetary strength: Sthana Bala, Dig Bala, Kala Bala, Chesta Bala, Naisargika Bala, and Drik Bala.",
|
|
406
|
+
standardBirthInput,
|
|
407
|
+
async (args) => jsonContent(await callBridge("get_shadbala", args)),
|
|
408
|
+
);
|
|
409
|
+
|
|
410
|
+
// ─── Jaimini ───────────────────────────────────────────────────────────────
|
|
411
|
+
server.tool(
|
|
412
|
+
"get_jaimini",
|
|
413
|
+
"Get full Jaimini astrology: Chara Karakas (Atmakaraka, Amatyakaraka, etc.), sign-based aspects, and Karakamsha.",
|
|
414
|
+
standardBirthInput,
|
|
415
|
+
async (args) => jsonContent(await callBridge("get_jaimini", args)),
|
|
416
|
+
);
|
|
417
|
+
|
|
418
|
+
// ─── Muhurta ───────────────────────────────────────────────────────────────
|
|
419
|
+
server.tool(
|
|
420
|
+
"get_muhurta",
|
|
421
|
+
"Score a specific datetime for Muhurta (auspicious timing) based on Panchanga for a given event type (marriage, business, travel, housewarming, education, general).",
|
|
422
|
+
{
|
|
423
|
+
datetime: z
|
|
424
|
+
.string()
|
|
425
|
+
.optional()
|
|
426
|
+
.describe("ISO datetime to score. Defaults to now."),
|
|
427
|
+
timezone: z.string().optional().describe("IANA timezone."),
|
|
428
|
+
event_type: z
|
|
429
|
+
.string()
|
|
430
|
+
.optional()
|
|
431
|
+
.describe(
|
|
432
|
+
"Event type: marriage, business, travel, housewarming, education, general.",
|
|
433
|
+
),
|
|
434
|
+
},
|
|
435
|
+
async (args) => jsonContent(await callBridge("get_muhurta", args)),
|
|
436
|
+
);
|
|
437
|
+
|
|
438
|
+
server.tool(
|
|
439
|
+
"get_best_muhurta",
|
|
440
|
+
"Find the top 5 most auspicious Muhurta windows within a date range for a specific event type.",
|
|
441
|
+
{
|
|
442
|
+
start_datetime: z
|
|
443
|
+
.string()
|
|
444
|
+
.describe("Range start in ISO format, e.g. 2026-07-01T00:00:00."),
|
|
445
|
+
end_datetime: z
|
|
446
|
+
.string()
|
|
447
|
+
.describe("Range end in ISO format, e.g. 2026-07-15T23:59:59."),
|
|
448
|
+
timezone: z.string().optional().describe("IANA timezone for the range."),
|
|
449
|
+
latitude: z.number().optional().describe("Location latitude."),
|
|
450
|
+
longitude: z.number().optional().describe("Location longitude."),
|
|
451
|
+
event_type: z
|
|
452
|
+
.string()
|
|
453
|
+
.optional()
|
|
454
|
+
.describe(
|
|
455
|
+
"Event type: marriage, business, travel, housewarming, education, general.",
|
|
456
|
+
),
|
|
457
|
+
},
|
|
458
|
+
async (args) => jsonContent(await callBridge("get_best_muhurta", args)),
|
|
459
|
+
);
|
|
460
|
+
|
|
461
|
+
// ─── Batch 2: Comprehensive Vedic Astrology tools ───────────────────────────────
|
|
462
|
+
|
|
463
|
+
server.tool(
|
|
464
|
+
"get_avasthas",
|
|
465
|
+
"Get planetary Avasthas (9 states: Deepta, Swastha, Mudita, Santha, Dina, Dukhita, Vikala, Khala, Bhadra) and Baladi Avasthas (infant/youth/old/dead) for each planet.",
|
|
466
|
+
standardBirthInput,
|
|
467
|
+
async (args) => jsonContent(await callBridge("get_avasthas", args)),
|
|
468
|
+
);
|
|
469
|
+
|
|
470
|
+
server.tool(
|
|
471
|
+
"get_upagrahas",
|
|
472
|
+
"Get Upagrahas (shadow sub-planets): Gulika, Mandi, Dhuma, Vyatipata, Parivesha, Indra Chapa, Upaketu — with rashi, house, and significance.",
|
|
473
|
+
standardBirthInput,
|
|
474
|
+
async (args) => jsonContent(await callBridge("get_upagrahas", args)),
|
|
475
|
+
);
|
|
476
|
+
|
|
477
|
+
server.tool(
|
|
478
|
+
"get_gandanta",
|
|
479
|
+
"Check which planets are in Gandanta zones (sensitive junctions between water and fire signs: Scorpio-Sagittarius, Pisces-Aries, Cancer-Leo).",
|
|
480
|
+
standardBirthInput,
|
|
481
|
+
async (args) => jsonContent(await callBridge("get_gandanta", args)),
|
|
482
|
+
);
|
|
483
|
+
|
|
484
|
+
server.tool(
|
|
485
|
+
"get_kartari",
|
|
486
|
+
"Check Kartari Yoga: planets or houses hemmed between benefics (Subha Kartari — auspicious) or malefics (Papa Kartari — harmful).",
|
|
487
|
+
standardBirthInput,
|
|
488
|
+
async (args) => jsonContent(await callBridge("get_kartari", args)),
|
|
489
|
+
);
|
|
490
|
+
|
|
491
|
+
server.tool(
|
|
492
|
+
"get_nakshatra_analysis",
|
|
493
|
+
"Get deep Nakshatra information for each planet: deity, symbol, gana, element, quality, body part, padas, and keywords. Also lookup any specific nakshatra.",
|
|
494
|
+
{
|
|
495
|
+
...standardBirthInput,
|
|
496
|
+
nakshatra_name: z
|
|
497
|
+
.string()
|
|
498
|
+
.optional()
|
|
499
|
+
.describe("Optional: get details for a specific nakshatra by name."),
|
|
500
|
+
},
|
|
501
|
+
async (args) => jsonContent(await callBridge("get_nakshatra_analysis", args)),
|
|
502
|
+
);
|
|
503
|
+
|
|
504
|
+
server.tool(
|
|
505
|
+
"get_gochara",
|
|
506
|
+
"Get Gochara (Vedic transit analysis): how current or specified transiting planets affect natal Moon houses, with Vedha (obstruction) checks, Sade Sati, and Kantaka Shani.",
|
|
507
|
+
{
|
|
508
|
+
...standardBirthInput,
|
|
509
|
+
transit_datetime: z
|
|
510
|
+
.string()
|
|
511
|
+
.optional()
|
|
512
|
+
.describe("ISO datetime for transit analysis. Defaults to now."),
|
|
513
|
+
},
|
|
514
|
+
async (args) => jsonContent(await callBridge("get_gochara", args)),
|
|
515
|
+
);
|
|
516
|
+
|
|
517
|
+
server.tool(
|
|
518
|
+
"get_bhava_chalit",
|
|
519
|
+
"Get Bhava Chalit chart: actual house positions based on equal-division from house cusps (midpoint method). Shows which planets change house vs the regular Rashi chart.",
|
|
520
|
+
standardBirthInput,
|
|
521
|
+
async (args) => jsonContent(await callBridge("get_bhava_chalit", args)),
|
|
522
|
+
);
|
|
523
|
+
|
|
524
|
+
server.tool(
|
|
525
|
+
"get_hora",
|
|
526
|
+
"Get Planetary Hour (Hora) for any datetime and location: which planet rules the current hour, all 12 day hours, all 12 night hours, and their significance.",
|
|
527
|
+
{
|
|
528
|
+
datetime: z.string().optional().describe("ISO datetime. Defaults to now."),
|
|
529
|
+
timezone: z.string().optional().describe("IANA timezone."),
|
|
530
|
+
latitude: z
|
|
531
|
+
.number()
|
|
532
|
+
.optional()
|
|
533
|
+
.describe("Latitude for sunrise/sunset calculation."),
|
|
534
|
+
longitude: z
|
|
535
|
+
.number()
|
|
536
|
+
.optional()
|
|
537
|
+
.describe("Longitude for sunrise/sunset calculation."),
|
|
538
|
+
},
|
|
539
|
+
async (args) => jsonContent(await callBridge("get_hora", args)),
|
|
540
|
+
);
|
|
541
|
+
|
|
542
|
+
server.tool(
|
|
543
|
+
"get_sudarshana_chakra",
|
|
544
|
+
"Get Sudarshana Chakra: triple-layer chart analysis from Lagna, Moon, and Sun simultaneously — identifies consistently strong/afflicted planets and the current Sudarshana year.",
|
|
545
|
+
standardBirthInput,
|
|
546
|
+
async (args) => jsonContent(await callBridge("get_sudarshana_chakra", args)),
|
|
547
|
+
);
|
|
548
|
+
|
|
549
|
+
server.tool(
|
|
550
|
+
"get_ashtottari_dasha",
|
|
551
|
+
"Get Ashtottari Dasha (108-year, 8-planet cycle: Sun, Moon, Mars, Mercury, Saturn, Jupiter, Rahu, Venus) with mahadashas and antardashas.",
|
|
552
|
+
standardBirthInput,
|
|
553
|
+
async (args) => jsonContent(await callBridge("get_ashtottari_dasha", args)),
|
|
554
|
+
);
|
|
555
|
+
|
|
556
|
+
server.tool(
|
|
557
|
+
"get_sookshma_dasha",
|
|
558
|
+
"Get current Sookshma Dasha (4th level of Vimshottari: MD\u2192AD\u2192PD\u2192SD) and upcoming 5 Sookshma periods.",
|
|
559
|
+
standardBirthInput,
|
|
560
|
+
async (args) => jsonContent(await callBridge("get_sookshma_dasha", args)),
|
|
561
|
+
);
|
|
562
|
+
|
|
563
|
+
server.tool(
|
|
564
|
+
"get_prana_dasha",
|
|
565
|
+
"Get current Prana Dasha (5th and finest level of Vimshottari: MD\u2192AD\u2192PD\u2192SD\u2192PRD) and upcoming 5 Prana periods.",
|
|
566
|
+
standardBirthInput,
|
|
567
|
+
async (args) => jsonContent(await callBridge("get_prana_dasha", args)),
|
|
568
|
+
);
|
|
569
|
+
|
|
570
|
+
server.tool(
|
|
571
|
+
"get_char_dasha",
|
|
572
|
+
"Get Char Dasha (Jaimini): sign-based dasha starting from Atmakaraka's sign with mahadashas and antardashas for all 12 signs.",
|
|
573
|
+
standardBirthInput,
|
|
574
|
+
async (args) => jsonContent(await callBridge("get_char_dasha", args)),
|
|
575
|
+
);
|
|
576
|
+
|
|
577
|
+
server.tool(
|
|
578
|
+
"get_narayana_dasha",
|
|
579
|
+
"Get Narayana Dasha (Jaimini): sign-based dasha for worldly events, starting from Lagna sign.",
|
|
580
|
+
standardBirthInput,
|
|
581
|
+
async (args) => jsonContent(await callBridge("get_narayana_dasha", args)),
|
|
582
|
+
);
|
|
583
|
+
|
|
584
|
+
server.tool(
|
|
585
|
+
"get_tajaka",
|
|
586
|
+
"Get Tajaka analysis for Varshaphal: Muntha position, Munthesh, and Tajaka Yogas (Ithasala, Ishrafa, Mutthasila, Nakta, Yamaya, Duphali Kuttha, Tambira).",
|
|
587
|
+
{
|
|
588
|
+
...standardBirthInput,
|
|
589
|
+
year_of_life: z
|
|
590
|
+
.number()
|
|
591
|
+
.int()
|
|
592
|
+
.describe("Which year's Varshaphal to analyze, e.g. 26."),
|
|
593
|
+
query_latitude: z
|
|
594
|
+
.number()
|
|
595
|
+
.optional()
|
|
596
|
+
.describe("Current location latitude."),
|
|
597
|
+
query_longitude: z
|
|
598
|
+
.number()
|
|
599
|
+
.optional()
|
|
600
|
+
.describe("Current location longitude."),
|
|
601
|
+
query_timezone: z
|
|
602
|
+
.string()
|
|
603
|
+
.optional()
|
|
604
|
+
.describe("Current location timezone."),
|
|
605
|
+
},
|
|
606
|
+
async (args) => jsonContent(await callBridge("get_tajaka", args)),
|
|
607
|
+
);
|
|
608
|
+
|
|
609
|
+
server.tool(
|
|
610
|
+
"get_nabhasha_yogas",
|
|
611
|
+
"Get Nabhasha Yogas: special yogas based on overall planetary distribution — Ashrayas (Rajju/Musala/Nala), Dala (Mala/Sarpa), and Akriti (Gada, Kamala, Vapi, etc.).",
|
|
612
|
+
standardBirthInput,
|
|
613
|
+
async (args) => jsonContent(await callBridge("get_nabhasha_yogas", args)),
|
|
614
|
+
);
|
|
615
|
+
|
|
616
|
+
server.tool(
|
|
617
|
+
"get_arishta",
|
|
618
|
+
"Get Arishta Yogas: longevity assessment (Balarishta conditions, Pindayu longevity indicator, 8th house analysis) with disclaimer that this is one of many tools.",
|
|
619
|
+
standardBirthInput,
|
|
620
|
+
async (args) => jsonContent(await callBridge("get_arishta", args)),
|
|
621
|
+
);
|
|
622
|
+
|
|
623
|
+
server.tool(
|
|
624
|
+
"get_lunar_return",
|
|
625
|
+
"Get Lunar Return (Chandraphal): the chart for when the Moon returns to its natal position — computed for a specific year and month.",
|
|
626
|
+
{
|
|
627
|
+
...standardBirthInput,
|
|
628
|
+
target_year: z
|
|
629
|
+
.number()
|
|
630
|
+
.int()
|
|
631
|
+
.describe("Year for which to find the Lunar Return, e.g. 2026."),
|
|
632
|
+
target_month: z
|
|
633
|
+
.number()
|
|
634
|
+
.int()
|
|
635
|
+
.min(1)
|
|
636
|
+
.max(12)
|
|
637
|
+
.describe("Month (1-12) for which to find the Lunar Return."),
|
|
638
|
+
query_latitude: z
|
|
639
|
+
.number()
|
|
640
|
+
.optional()
|
|
641
|
+
.describe("Current location latitude."),
|
|
642
|
+
query_longitude: z
|
|
643
|
+
.number()
|
|
644
|
+
.optional()
|
|
645
|
+
.describe("Current location longitude."),
|
|
646
|
+
query_timezone: z
|
|
647
|
+
.string()
|
|
648
|
+
.optional()
|
|
649
|
+
.describe("Current location timezone."),
|
|
650
|
+
},
|
|
651
|
+
async (args) => jsonContent(await callBridge("get_lunar_return", args)),
|
|
652
|
+
);
|
|
653
|
+
|
|
654
|
+
server.tool(
|
|
655
|
+
"get_prasna",
|
|
656
|
+
"Get Prasna (Horary/Question) chart: the birth chart for the exact moment a question is asked, with key Prasna indicators and general reading.",
|
|
657
|
+
{
|
|
658
|
+
datetime: z
|
|
659
|
+
.string()
|
|
660
|
+
.optional()
|
|
661
|
+
.describe("ISO datetime of the question. Defaults to now."),
|
|
662
|
+
timezone: z.string().optional().describe("IANA timezone."),
|
|
663
|
+
latitude: z
|
|
664
|
+
.number()
|
|
665
|
+
.optional()
|
|
666
|
+
.describe("Location latitude where question is asked."),
|
|
667
|
+
longitude: z
|
|
668
|
+
.number()
|
|
669
|
+
.optional()
|
|
670
|
+
.describe("Location longitude where question is asked."),
|
|
671
|
+
question: z
|
|
672
|
+
.string()
|
|
673
|
+
.optional()
|
|
674
|
+
.describe("The question being asked (for context in the reading)."),
|
|
675
|
+
},
|
|
676
|
+
async (args) => jsonContent(await callBridge("get_prasna", args)),
|
|
677
|
+
);
|
|
678
|
+
|
|
679
|
+
server.tool(
|
|
680
|
+
"get_kalachakra_dasha",
|
|
681
|
+
"Get Kalachakra Dasha: the 9-group, 112-year sign-based dasha system — one of the most complex and powerful dasha systems in Vedic astrology. Returns mahadashas (sign-based) and antardashas for the full cycle.",
|
|
682
|
+
standardBirthInput,
|
|
683
|
+
async (args) => jsonContent(await callBridge("get_kalachakra_dasha", args)),
|
|
684
|
+
);
|
|
685
|
+
|
|
686
|
+
server.tool(
|
|
687
|
+
"get_kurmachakra",
|
|
688
|
+
"Get Kurmachakra (Tortoise Wheel) directional analysis: maps the 27 Nakshatras to 8 cardinal directions + Centre. Returns auspicious/inauspicious directions for travel, construction, and marriage based on birth nakshatra (Janma Nakshatra). Optionally takes current_moon_nakshatra for daily direction guidance.",
|
|
689
|
+
{
|
|
690
|
+
...standardBirthInput,
|
|
691
|
+
current_moon_nakshatra: z
|
|
692
|
+
.string()
|
|
693
|
+
.optional()
|
|
694
|
+
.describe(
|
|
695
|
+
"Current Moon nakshatra name, e.g. 'Rohini'. If given, includes daily auspicious/avoid directions.",
|
|
696
|
+
),
|
|
697
|
+
event_type: z
|
|
698
|
+
.enum(["travel", "construction", "marriage", "general"])
|
|
699
|
+
.optional()
|
|
700
|
+
.describe(
|
|
701
|
+
"Type of event for tailored recommendations. Defaults to 'travel'.",
|
|
702
|
+
),
|
|
703
|
+
},
|
|
704
|
+
async (args) => jsonContent(await callBridge("get_kurmachakra", args)),
|
|
705
|
+
);
|
|
706
|
+
|
|
707
|
+
server.tool(
|
|
708
|
+
"get_travel_direction_score",
|
|
709
|
+
"Score a specific intended travel direction (e.g. 'North', 'South-East') for auspiciousness using Kurmachakra rules. Returns a 0-100 score, grade (Excellent/Good/Caution/Avoid), warnings and positives considering birth nakshatra, current Moon nakshatra, and weekday direction restrictions.",
|
|
710
|
+
{
|
|
711
|
+
...standardBirthInput,
|
|
712
|
+
intended_direction: z
|
|
713
|
+
.string()
|
|
714
|
+
.describe(
|
|
715
|
+
"Direction of intended travel, e.g. 'North', 'South', 'East', 'West', 'North-East', 'South-East', 'North-West', 'South-West'.",
|
|
716
|
+
),
|
|
717
|
+
current_moon_nakshatra: z
|
|
718
|
+
.string()
|
|
719
|
+
.optional()
|
|
720
|
+
.describe("Current Moon nakshatra name for daily direction guidance."),
|
|
721
|
+
weekday: z
|
|
722
|
+
.enum([
|
|
723
|
+
"Sunday",
|
|
724
|
+
"Monday",
|
|
725
|
+
"Tuesday",
|
|
726
|
+
"Wednesday",
|
|
727
|
+
"Thursday",
|
|
728
|
+
"Friday",
|
|
729
|
+
"Saturday",
|
|
730
|
+
])
|
|
731
|
+
.optional()
|
|
732
|
+
.describe("Day of travel for weekday-direction restriction check."),
|
|
733
|
+
},
|
|
734
|
+
async (args) =>
|
|
735
|
+
jsonContent(await callBridge("get_travel_direction_score", args)),
|
|
736
|
+
);
|
|
737
|
+
|
|
738
|
+
server.tool(
|
|
739
|
+
"get_full_kurmachakra_chart",
|
|
740
|
+
"Return the full Kurmachakra reference chart: all 9 directions with their Sanskrit names, associated nakshatras, general nature, weekday-avoid rules, and travel guidelines. No birth data needed.",
|
|
741
|
+
{},
|
|
742
|
+
async (args) =>
|
|
743
|
+
jsonContent(await callBridge("get_full_kurmachakra_chart", args)),
|
|
744
|
+
);
|
|
745
|
+
|
|
746
|
+
const transport = new StdioServerTransport();
|
|
747
|
+
await server.connect(transport);
|