@openephemeris/mcp-server 3.2.13 → 3.3.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 +2 -2
- package/dist/index.js +2 -48
- package/dist/server-sse.js +7 -4
- package/dist/tools/index.d.ts +25 -0
- package/dist/tools/index.js +62 -0
- package/dist/tools/specialized/acg.d.ts +1 -0
- package/dist/tools/specialized/acg.js +143 -0
- package/dist/tools/specialized/comparative.d.ts +1 -0
- package/dist/tools/specialized/comparative.js +153 -0
- package/dist/tools/specialized/electional.js +178 -0
- package/dist/tools/specialized/ephemeris_core.d.ts +1 -0
- package/dist/tools/specialized/ephemeris_core.js +93 -0
- package/dist/tools/specialized/ephemeris_extended.d.ts +1 -0
- package/dist/tools/specialized/ephemeris_extended.js +234 -0
- package/dist/tools/specialized/hd_group.d.ts +1 -0
- package/dist/tools/specialized/hd_group.js +107 -0
- package/dist/tools/specialized/progressed.d.ts +1 -0
- package/dist/tools/specialized/progressed.js +65 -0
- package/dist/tools/specialized/returns.js +67 -49
- package/dist/tools/specialized/venus_star_points.d.ts +1 -0
- package/dist/tools/specialized/venus_star_points.js +187 -0
- package/package.json +2 -2
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { registerTool, validateRequired } from "../index.js";
|
|
2
|
+
import { backendClient } from "../../backend/client.js";
|
|
3
|
+
registerTool({
|
|
4
|
+
name: "ephemeris_progressed_chart",
|
|
5
|
+
description: "Calculate a Secondary Progressed (or Solar Arc / Tertiary) chart. " +
|
|
6
|
+
"Advances the natal chart symbolically — 1 day = 1 year (secondary), or using solar arc motion. " +
|
|
7
|
+
"Returns progressed planet positions, house cusps, aspects, and retrograde status.\n\n" +
|
|
8
|
+
"CREDIT COST: 2 credits per call.\n\n" +
|
|
9
|
+
"EXAMPLE: Secondary progressions for someone born 1985-06-21, progressed to 2026-01-01:\n" +
|
|
10
|
+
" birth_datetime='1985-06-21T14:00:00', birth_latitude=51.5, birth_longitude=-0.12,\n" +
|
|
11
|
+
" target_datetime='2026-01-01', method='secondary'",
|
|
12
|
+
inputSchema: {
|
|
13
|
+
type: "object",
|
|
14
|
+
properties: {
|
|
15
|
+
birth_datetime: {
|
|
16
|
+
type: "string",
|
|
17
|
+
description: "ISO 8601 natal birth date/time.",
|
|
18
|
+
},
|
|
19
|
+
birth_latitude: {
|
|
20
|
+
type: "number",
|
|
21
|
+
description: "Birth latitude in decimal degrees.",
|
|
22
|
+
},
|
|
23
|
+
birth_longitude: {
|
|
24
|
+
type: "number",
|
|
25
|
+
description: "Birth longitude in decimal degrees.",
|
|
26
|
+
},
|
|
27
|
+
target_datetime: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "Target date to progress the chart to (ISO 8601).",
|
|
30
|
+
},
|
|
31
|
+
method: {
|
|
32
|
+
type: "string",
|
|
33
|
+
enum: ["secondary", "solar_arc", "tertiary"],
|
|
34
|
+
description: "Progression method. Defaults to 'secondary' (1 day = 1 year).",
|
|
35
|
+
},
|
|
36
|
+
include_aspects: {
|
|
37
|
+
type: "boolean",
|
|
38
|
+
description: "Whether to include aspect grid in the response. Default false.",
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
required: ["birth_datetime", "birth_latitude", "birth_longitude", "target_datetime"],
|
|
42
|
+
additionalProperties: false,
|
|
43
|
+
},
|
|
44
|
+
handler: async (args) => {
|
|
45
|
+
validateRequired(args, ["birth_datetime", "birth_latitude", "birth_longitude", "target_datetime"]);
|
|
46
|
+
const body = {
|
|
47
|
+
subject: {
|
|
48
|
+
name: "Progressed Subject",
|
|
49
|
+
birth_datetime: { iso: args.birth_datetime },
|
|
50
|
+
birth_location: {
|
|
51
|
+
latitude: { decimal: args.birth_latitude },
|
|
52
|
+
longitude: { decimal: args.birth_longitude },
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
target_datetime: { iso: args.target_datetime },
|
|
56
|
+
};
|
|
57
|
+
if (args.method) {
|
|
58
|
+
body.progression_options = { method: args.method };
|
|
59
|
+
}
|
|
60
|
+
if (args.include_aspects != null) {
|
|
61
|
+
body.options = { include_aspects: args.include_aspects };
|
|
62
|
+
}
|
|
63
|
+
return await backendClient.post("/ephemeris/progressed", body);
|
|
64
|
+
},
|
|
65
|
+
});
|
|
@@ -7,8 +7,7 @@ registerTool({
|
|
|
7
7
|
"Used to cast the Solar Return chart for the year ahead.\n\n" +
|
|
8
8
|
"CREDIT COST: 1 credit per call.\n\n" +
|
|
9
9
|
"EXAMPLE: Solar return for someone born 1985-06-21 near their 2026 birthday:\n" +
|
|
10
|
-
" birth_datetime='1985-06-21T14:00:00',
|
|
11
|
-
" target_datetime='2026-06-01'",
|
|
10
|
+
" birth_datetime='1985-06-21T14:00:00', target_datetime='2026-06-01'",
|
|
12
11
|
inputSchema: {
|
|
13
12
|
type: "object",
|
|
14
13
|
properties: {
|
|
@@ -16,48 +15,46 @@ registerTool({
|
|
|
16
15
|
type: "string",
|
|
17
16
|
description: "ISO 8601 birth date/time (e.g. '1985-06-21T14:00:00').",
|
|
18
17
|
},
|
|
18
|
+
target_datetime: {
|
|
19
|
+
type: "string",
|
|
20
|
+
description: "Date/time near which to find the Solar Return (ISO 8601). Required.",
|
|
21
|
+
},
|
|
19
22
|
birth_latitude: {
|
|
20
23
|
type: "number",
|
|
21
|
-
description: "Birth latitude in decimal degrees.",
|
|
24
|
+
description: "Birth latitude in decimal degrees (optional, for location context).",
|
|
22
25
|
},
|
|
23
26
|
birth_longitude: {
|
|
24
27
|
type: "number",
|
|
25
|
-
description: "Birth longitude in decimal degrees.",
|
|
26
|
-
},
|
|
27
|
-
target_datetime: {
|
|
28
|
-
type: "string",
|
|
29
|
-
description: "Date near which to find the Solar Return (ISO 8601). Defaults to now.",
|
|
28
|
+
description: "Birth longitude in decimal degrees (optional, for location context).",
|
|
30
29
|
},
|
|
31
30
|
return_latitude: {
|
|
32
31
|
type: "number",
|
|
33
|
-
description: "Location latitude for the return chart (optional).
|
|
32
|
+
description: "Location latitude for the return chart (optional).",
|
|
34
33
|
},
|
|
35
34
|
return_longitude: {
|
|
36
35
|
type: "number",
|
|
37
|
-
description: "Location longitude for the return chart (optional).
|
|
36
|
+
description: "Location longitude for the return chart (optional).",
|
|
38
37
|
},
|
|
39
38
|
},
|
|
40
|
-
required: ["birth_datetime", "
|
|
39
|
+
required: ["birth_datetime", "target_datetime"],
|
|
41
40
|
additionalProperties: false,
|
|
42
41
|
},
|
|
43
42
|
handler: async (args) => {
|
|
44
|
-
validateRequired(args, ["birth_datetime", "
|
|
43
|
+
validateRequired(args, ["birth_datetime", "target_datetime"]);
|
|
45
44
|
const body = {
|
|
46
|
-
birth_datetime: {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
birth_datetime: { iso: args.birth_datetime },
|
|
46
|
+
target_datetime: { iso: args.target_datetime },
|
|
47
|
+
};
|
|
48
|
+
if (args.birth_latitude != null && args.birth_longitude != null) {
|
|
49
|
+
body.location = {
|
|
50
50
|
latitude: { decimal: args.birth_latitude },
|
|
51
51
|
longitude: { decimal: args.birth_longitude },
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
if (args.target_datetime) {
|
|
55
|
-
body.target_datetime = { iso: args.target_datetime };
|
|
52
|
+
};
|
|
56
53
|
}
|
|
57
54
|
if (args.return_latitude != null && args.return_longitude != null) {
|
|
58
55
|
body.return_location = {
|
|
59
|
-
latitude: args.return_latitude,
|
|
60
|
-
longitude: args.return_longitude,
|
|
56
|
+
latitude: { decimal: args.return_latitude },
|
|
57
|
+
longitude: { decimal: args.return_longitude },
|
|
61
58
|
};
|
|
62
59
|
}
|
|
63
60
|
return await backendClient.post("/predictive/returns/solar", body);
|
|
@@ -70,8 +67,7 @@ registerTool({
|
|
|
70
67
|
"Used to cast the monthly Lunar Return chart.\n\n" +
|
|
71
68
|
"CREDIT COST: 1 credit per call.\n\n" +
|
|
72
69
|
"EXAMPLE: Next lunar return after 2026-03-15 for someone born 1990-04-15:\n" +
|
|
73
|
-
" birth_datetime='1990-04-15T14:30:00',
|
|
74
|
-
" target_datetime='2026-03-15'",
|
|
70
|
+
" birth_datetime='1990-04-15T14:30:00', target_datetime='2026-03-15'",
|
|
75
71
|
inputSchema: {
|
|
76
72
|
type: "object",
|
|
77
73
|
properties: {
|
|
@@ -79,48 +75,70 @@ registerTool({
|
|
|
79
75
|
type: "string",
|
|
80
76
|
description: "ISO 8601 birth date/time.",
|
|
81
77
|
},
|
|
82
|
-
birth_latitude: {
|
|
83
|
-
type: "number",
|
|
84
|
-
description: "Birth latitude in decimal degrees.",
|
|
85
|
-
},
|
|
86
|
-
birth_longitude: {
|
|
87
|
-
type: "number",
|
|
88
|
-
description: "Birth longitude in decimal degrees.",
|
|
89
|
-
},
|
|
90
78
|
target_datetime: {
|
|
91
79
|
type: "string",
|
|
92
|
-
description: "Date near which to find the Lunar Return (ISO 8601).
|
|
80
|
+
description: "Date/time near which to find the Lunar Return (ISO 8601). Required.",
|
|
93
81
|
},
|
|
94
|
-
|
|
82
|
+
birth_latitude: {
|
|
95
83
|
type: "number",
|
|
96
|
-
description: "
|
|
84
|
+
description: "Birth latitude in decimal degrees (optional).",
|
|
97
85
|
},
|
|
98
|
-
|
|
86
|
+
birth_longitude: {
|
|
99
87
|
type: "number",
|
|
100
|
-
description: "
|
|
88
|
+
description: "Birth longitude in decimal degrees (optional).",
|
|
101
89
|
},
|
|
102
90
|
},
|
|
103
|
-
required: ["birth_datetime", "
|
|
91
|
+
required: ["birth_datetime", "target_datetime"],
|
|
104
92
|
additionalProperties: false,
|
|
105
93
|
},
|
|
106
94
|
handler: async (args) => {
|
|
107
|
-
validateRequired(args, ["birth_datetime", "
|
|
95
|
+
validateRequired(args, ["birth_datetime", "target_datetime"]);
|
|
108
96
|
const body = {
|
|
109
97
|
birth_datetime: { iso: args.birth_datetime },
|
|
110
|
-
|
|
98
|
+
target_datetime: { iso: args.target_datetime },
|
|
99
|
+
};
|
|
100
|
+
if (args.birth_latitude != null && args.birth_longitude != null) {
|
|
101
|
+
body.location = {
|
|
111
102
|
latitude: { decimal: args.birth_latitude },
|
|
112
103
|
longitude: { decimal: args.birth_longitude },
|
|
113
|
-
},
|
|
114
|
-
};
|
|
115
|
-
if (args.target_datetime) {
|
|
116
|
-
body.target_datetime = { iso: args.target_datetime };
|
|
117
|
-
}
|
|
118
|
-
if (args.return_latitude != null && args.return_longitude != null) {
|
|
119
|
-
body.return_location = {
|
|
120
|
-
latitude: args.return_latitude,
|
|
121
|
-
longitude: args.return_longitude,
|
|
122
104
|
};
|
|
123
105
|
}
|
|
124
106
|
return await backendClient.post("/predictive/returns/lunar", body);
|
|
125
107
|
},
|
|
126
108
|
});
|
|
109
|
+
// POST /predictive/returns (generic planetary return)
|
|
110
|
+
registerTool({
|
|
111
|
+
name: "ephemeris_planetary_return",
|
|
112
|
+
description: "Calculate a planetary return — when any planet returns to its natal longitude. " +
|
|
113
|
+
"Useful for Jupiter returns (~12 years), Saturn returns (~29 years), etc.\n\n" +
|
|
114
|
+
"CREDIT COST: 1 credit per call.\n\n" +
|
|
115
|
+
"EXAMPLE: Saturn return for birth 1990-04-15 near year 2019:\n" +
|
|
116
|
+
" body='saturn', birth_datetime='1990-04-15T14:30:00', target_datetime='2019-01-01'",
|
|
117
|
+
inputSchema: {
|
|
118
|
+
type: "object",
|
|
119
|
+
properties: {
|
|
120
|
+
body: {
|
|
121
|
+
type: "string",
|
|
122
|
+
description: "Planet name: sun, moon, mercury, venus, mars, jupiter, saturn.",
|
|
123
|
+
},
|
|
124
|
+
birth_datetime: {
|
|
125
|
+
type: "string",
|
|
126
|
+
description: "ISO 8601 birth date/time.",
|
|
127
|
+
},
|
|
128
|
+
target_datetime: {
|
|
129
|
+
type: "string",
|
|
130
|
+
description: "Date/time near which to find the return (ISO 8601). Required.",
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
required: ["body", "birth_datetime", "target_datetime"],
|
|
134
|
+
additionalProperties: false,
|
|
135
|
+
},
|
|
136
|
+
handler: async (args) => {
|
|
137
|
+
validateRequired(args, ["body", "birth_datetime", "target_datetime"]);
|
|
138
|
+
return await backendClient.post("/predictive/returns", {
|
|
139
|
+
body: args.body,
|
|
140
|
+
birth_datetime: { iso: args.birth_datetime },
|
|
141
|
+
target_datetime: { iso: args.target_datetime },
|
|
142
|
+
});
|
|
143
|
+
},
|
|
144
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { registerTool, validateRequired } from "../index.js";
|
|
2
|
+
import { backendClient } from "../../backend/client.js";
|
|
3
|
+
function buildSubject(datetime, lat, lon) {
|
|
4
|
+
return {
|
|
5
|
+
name: "Subject",
|
|
6
|
+
birth_datetime: { iso: datetime },
|
|
7
|
+
birth_location: {
|
|
8
|
+
latitude: { decimal: lat },
|
|
9
|
+
longitude: { decimal: lon },
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
// POST /ephemeris/venus-star-points
|
|
14
|
+
registerTool({
|
|
15
|
+
name: "venus_star_points",
|
|
16
|
+
description: "Get Venus Star Points — the Sun-Venus conjunction events nearest to a birth date. " +
|
|
17
|
+
"Shows the quality of each conjunction (cazimi, combust, under beams) with zodiac details.\n\n" +
|
|
18
|
+
"CREDIT COST: 2 credits per call.\n\n" +
|
|
19
|
+
"EXAMPLE: Venus star points for someone born 1990-04-15:\n" +
|
|
20
|
+
" datetime='1990-04-15T14:30:00', latitude=41.88, longitude=-87.63",
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: "object",
|
|
23
|
+
properties: {
|
|
24
|
+
datetime: { type: "string", description: "Birth datetime (ISO 8601)." },
|
|
25
|
+
latitude: { type: "number", description: "Birth latitude." },
|
|
26
|
+
longitude: { type: "number", description: "Birth longitude." },
|
|
27
|
+
format: { type: "string", enum: ["json", "llm"], description: "Output format." },
|
|
28
|
+
},
|
|
29
|
+
required: ["datetime", "latitude", "longitude"],
|
|
30
|
+
additionalProperties: false,
|
|
31
|
+
},
|
|
32
|
+
handler: async (args) => {
|
|
33
|
+
validateRequired(args, ["datetime", "latitude", "longitude"]);
|
|
34
|
+
const query = {};
|
|
35
|
+
if (args.format)
|
|
36
|
+
query.format = args.format;
|
|
37
|
+
return await backendClient.request("POST", "/ephemeris/venus-star-points", {
|
|
38
|
+
data: { subject: buildSubject(args.datetime, args.latitude, args.longitude) },
|
|
39
|
+
params: query,
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
// POST /ephemeris/venus-star-points/conjunctions
|
|
44
|
+
registerTool({
|
|
45
|
+
name: "venus_star_points_conjunctions",
|
|
46
|
+
description: "Find all Sun-Venus conjunctions in a date range. Returns each conjunction with " +
|
|
47
|
+
"its exact timestamp, zodiac position, orb, visibility (morning/evening star), and dignity.\n\n" +
|
|
48
|
+
"CREDIT COST: 2 credits per call.\n\n" +
|
|
49
|
+
"EXAMPLE: Find Venus conjunctions in 2026:\n" +
|
|
50
|
+
" start_date='2026-01-01', end_date='2026-12-31'",
|
|
51
|
+
inputSchema: {
|
|
52
|
+
type: "object",
|
|
53
|
+
properties: {
|
|
54
|
+
start_date: { type: "string", description: "Start date (ISO 8601)." },
|
|
55
|
+
end_date: { type: "string", description: "End date (ISO 8601)." },
|
|
56
|
+
format: { type: "string", enum: ["json", "llm"], description: "Output format." },
|
|
57
|
+
},
|
|
58
|
+
required: ["start_date", "end_date"],
|
|
59
|
+
additionalProperties: false,
|
|
60
|
+
},
|
|
61
|
+
handler: async (args) => {
|
|
62
|
+
validateRequired(args, ["start_date", "end_date"]);
|
|
63
|
+
const query = {};
|
|
64
|
+
if (args.format)
|
|
65
|
+
query.format = args.format;
|
|
66
|
+
return await backendClient.request("POST", "/ephemeris/venus-star-points/conjunctions", {
|
|
67
|
+
data: { start_date: args.start_date, end_date: args.end_date },
|
|
68
|
+
params: query,
|
|
69
|
+
});
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
// POST /ephemeris/venus-star-points/eight-year-star
|
|
73
|
+
registerTool({
|
|
74
|
+
name: "venus_eight_year_star",
|
|
75
|
+
description: "Compute the 8-year Venus Star pattern — the pentagram of 5 Venus-Sun conjunctions " +
|
|
76
|
+
"that trace a near-perfect star over 8 years (the Venus synodic cycle). Returns the 5 " +
|
|
77
|
+
"vertices with their zodiac positions.\n\n" +
|
|
78
|
+
"CREDIT COST: 2 credits per call.\n\n" +
|
|
79
|
+
"EXAMPLE: 8-year star starting from 2020:\n" +
|
|
80
|
+
" date='2020-01-01'",
|
|
81
|
+
inputSchema: {
|
|
82
|
+
type: "object",
|
|
83
|
+
properties: {
|
|
84
|
+
date: { type: "string", description: "Start date for the 8-year cycle (ISO 8601)." },
|
|
85
|
+
format: { type: "string", enum: ["json", "llm"], description: "Output format." },
|
|
86
|
+
},
|
|
87
|
+
required: ["date"],
|
|
88
|
+
additionalProperties: false,
|
|
89
|
+
},
|
|
90
|
+
handler: async (args) => {
|
|
91
|
+
validateRequired(args, ["date"]);
|
|
92
|
+
const query = {};
|
|
93
|
+
if (args.format)
|
|
94
|
+
query.format = args.format;
|
|
95
|
+
return await backendClient.request("POST", "/ephemeris/venus-star-points/eight-year-star", {
|
|
96
|
+
data: { date: args.date },
|
|
97
|
+
params: query,
|
|
98
|
+
});
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
// POST /ephemeris/venus-star-points/phase
|
|
102
|
+
registerTool({
|
|
103
|
+
name: "venus_phase",
|
|
104
|
+
description: "Get the current Venus phase — morning star, evening star, or combust. Returns Venus " +
|
|
105
|
+
"longitude, Sun longitude, elongation, retrograde/cazimi status.\n\n" +
|
|
106
|
+
"CREDIT COST: 1 credit per call.\n\n" +
|
|
107
|
+
"EXAMPLE: Venus phase right now:\n" +
|
|
108
|
+
" date='2026-03-20'",
|
|
109
|
+
inputSchema: {
|
|
110
|
+
type: "object",
|
|
111
|
+
properties: {
|
|
112
|
+
date: { type: "string", description: "Date to check (ISO 8601). Defaults to now." },
|
|
113
|
+
format: { type: "string", enum: ["json", "llm"], description: "Output format." },
|
|
114
|
+
},
|
|
115
|
+
required: ["date"],
|
|
116
|
+
additionalProperties: false,
|
|
117
|
+
},
|
|
118
|
+
handler: async (args) => {
|
|
119
|
+
validateRequired(args, ["date"]);
|
|
120
|
+
const query = {};
|
|
121
|
+
if (args.format)
|
|
122
|
+
query.format = args.format;
|
|
123
|
+
return await backendClient.request("POST", "/ephemeris/venus-star-points/phase", {
|
|
124
|
+
data: { date: args.date },
|
|
125
|
+
params: query,
|
|
126
|
+
});
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
// POST /ephemeris/venus-star-points/elongations
|
|
130
|
+
registerTool({
|
|
131
|
+
name: "venus_elongations",
|
|
132
|
+
description: "Find Venus greatest elongation events (when Venus is farthest from the Sun in the sky). " +
|
|
133
|
+
"Returns east (evening star) and west (morning star) elongation peaks.\n\n" +
|
|
134
|
+
"CREDIT COST: 2 credits per call.",
|
|
135
|
+
inputSchema: {
|
|
136
|
+
type: "object",
|
|
137
|
+
properties: {
|
|
138
|
+
start_date: { type: "string", description: "Start date (ISO 8601)." },
|
|
139
|
+
end_date: { type: "string", description: "End date (ISO 8601)." },
|
|
140
|
+
format: { type: "string", enum: ["json", "llm"], description: "Output format." },
|
|
141
|
+
},
|
|
142
|
+
required: ["start_date", "end_date"],
|
|
143
|
+
additionalProperties: false,
|
|
144
|
+
},
|
|
145
|
+
handler: async (args) => {
|
|
146
|
+
validateRequired(args, ["start_date", "end_date"]);
|
|
147
|
+
const query = {};
|
|
148
|
+
if (args.format)
|
|
149
|
+
query.format = args.format;
|
|
150
|
+
return await backendClient.request("POST", "/ephemeris/venus-star-points/elongations", {
|
|
151
|
+
data: { start_date: args.start_date, end_date: args.end_date },
|
|
152
|
+
params: query,
|
|
153
|
+
});
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
// POST /ephemeris/venus-star-points/stations
|
|
157
|
+
registerTool({
|
|
158
|
+
name: "venus_stations",
|
|
159
|
+
description: "Find Venus retrograde and direct stations in a date range. Returns the exact " +
|
|
160
|
+
"moment Venus appears to stop and reverse direction.\n\n" +
|
|
161
|
+
"CREDIT COST: 2 credits per call.\n\n" +
|
|
162
|
+
"EXAMPLE: Venus stations in 2026:\n" +
|
|
163
|
+
" start_date='2026-01-01', end_date='2026-12-31'",
|
|
164
|
+
inputSchema: {
|
|
165
|
+
type: "object",
|
|
166
|
+
properties: {
|
|
167
|
+
start_date: { type: "string", description: "Start date (ISO 8601)." },
|
|
168
|
+
end_date: { type: "string", description: "End date (ISO 8601). Defaults to +1 year." },
|
|
169
|
+
format: { type: "string", enum: ["json", "llm"], description: "Output format." },
|
|
170
|
+
},
|
|
171
|
+
required: ["start_date"],
|
|
172
|
+
additionalProperties: false,
|
|
173
|
+
},
|
|
174
|
+
handler: async (args) => {
|
|
175
|
+
validateRequired(args, ["start_date"]);
|
|
176
|
+
const query = {};
|
|
177
|
+
if (args.format)
|
|
178
|
+
query.format = args.format;
|
|
179
|
+
return await backendClient.request("POST", "/ephemeris/venus-star-points/stations", {
|
|
180
|
+
data: {
|
|
181
|
+
start_date: args.start_date,
|
|
182
|
+
end_date: args.end_date || "",
|
|
183
|
+
},
|
|
184
|
+
params: query,
|
|
185
|
+
});
|
|
186
|
+
},
|
|
187
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openephemeris/mcp-server",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.1",
|
|
4
4
|
"description": "Model Context Protocol server for the Open Ephemeris astronomical computation API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"dev": "tsx watch src/index.ts",
|
|
22
22
|
"dev:sse": "tsx watch src/server-sse.ts",
|
|
23
23
|
"start": "node dist/index.js",
|
|
24
|
-
"start:sse": "node dist/
|
|
24
|
+
"start:sse": "node dist/server-sse.js",
|
|
25
25
|
"test": "vitest run --exclude \"dist/**\"",
|
|
26
26
|
"test:watch": "vitest --exclude \"dist/**\"",
|
|
27
27
|
"test:integration": "tsx scripts/test-client.ts",
|