@interstellar-tools/mcp 0.5.0 → 1.1.0

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 CHANGED
@@ -68,22 +68,27 @@ returned as `{ "rad": …, "deg": … }`.
68
68
 
69
69
  ## Tools
70
70
 
71
- | Tool | What it computes |
72
- | ---------------------------- | ------------------------------------------------------ |
73
- | `gravitational_parameter` | μ = G·(M + m) from masses |
74
- | `circular_speed` | Circular orbit speed at radius r |
75
- | `escape_speed` | Escape speed at radius r |
76
- | `vis_viva_speed` | Speed at radius r on an orbit with semi-major axis a |
77
- | `kepler_period` | Orbital period from semi-major axis |
78
- | `peri_apoapsis_radii` | Periapsis and apoapsis radii from a and e |
79
- | `sphere_of_influence_radius` | Laplace sphere of influence |
80
- | `hohmann_transfer` | Both burns, total Δv and transfer time |
81
- | `rocket_delta_v` | Tsiolkovsky rocket equation from Isp and masses |
82
- | `plane_change_delta_v` | Δv for a pure inclination change |
83
- | `solve_kepler` | Eccentric anomaly from mean anomaly and eccentricity |
84
- | `convert_anomaly` | Mean ↔ eccentric ↔ true anomaly (elliptic orbits) |
85
- | `convert_time` | Duration between units, attoseconds to gigayears |
86
- | `find_body` | Look up planets, moons, stars, comets, … by name or id |
71
+ | Tool | What it computes |
72
+ | ---------------------------- | --------------------------------------------------------------- |
73
+ | `gravitational_parameter` | μ = G·(M + m) from masses |
74
+ | `circular_speed` | Circular orbit speed at radius r |
75
+ | `escape_speed` | Escape speed at radius r |
76
+ | `vis_viva_speed` | Speed at radius r on an orbit with semi-major axis a |
77
+ | `kepler_period` | Orbital period from semi-major axis |
78
+ | `peri_apoapsis_radii` | Periapsis and apoapsis radii from a and e |
79
+ | `sphere_of_influence_radius` | Laplace sphere of influence |
80
+ | `state_to_elements` | Orbital elements from a position and velocity |
81
+ | `elements_to_state` | Position and velocity from orbital elements |
82
+ | `hohmann_transfer` | Both burns, total Δv and transfer time |
83
+ | `rocket_delta_v` | Tsiolkovsky rocket equation from Isp and masses |
84
+ | `plane_change_delta_v` | Δv for a pure inclination change |
85
+ | `solve_lambert` | Velocities for a transfer between two positions in a given time |
86
+ | `hyperbolic_departure` | Δv, C3 and eccentricity to leave or be captured with a given v∞ |
87
+ | `solve_kepler` | Eccentric anomaly from mean anomaly and eccentricity |
88
+ | `convert_anomaly` | Mean ↔ eccentric ↔ true anomaly (elliptic orbits) |
89
+ | `convert_time` | Duration between units, attoseconds to gigayears |
90
+ | `convert_distance` | Distance between units, metres to gigaparsecs |
91
+ | `find_body` | Look up planets, moons, stars, comets, … by name or id |
87
92
 
88
93
  All tools are pure and offline: no network access, no side effects.
89
94
 
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWpE,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAEhD,kFAAkF;AAClF,eAAO,MAAM,cAAc,EAAE,MAEpB,CAAC;AAEV;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,QAAO,SAiB/B,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYpE,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAEhD,kFAAkF;AAClF,eAAO,MAAM,cAAc,EAAE,MAEpB,CAAC;AAEV;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,QAAO,SAkB/B,CAAC"}
package/dist/server.js CHANGED
@@ -5,6 +5,7 @@ import { registerAnomalyTools } from './tools/anomalies.js';
5
5
  import { registerDistanceTools } from './tools/distance.js';
6
6
  import { registerManoeuvreTools } from './tools/manoeuvres.js';
7
7
  import { registerOrbitTools } from './tools/orbits.js';
8
+ import { registerStateVectorTools } from './tools/state-vectors.js';
8
9
  import { registerTimeTools } from './tools/time.js';
9
10
  export const SERVER_NAME = 'interstellar-tools';
10
11
  /** The published package version, read from `package.json` so it never drifts. */
@@ -23,9 +24,10 @@ export const SERVER_VERSION = createRequire(import.meta.url)('../package.json').
23
24
  */
24
25
  export const createServer = () => {
25
26
  const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION }, {
26
- instructions: 'Deterministic orbital mechanics calculations. Every field with a unit ends with it: r_m is metres, mu_m3_s2 is m³/s², v_m_s is m/s, T_d is days. Dimensionless fields such as e have no suffix. Angles are given as { value, unit: "deg" | "rad" } and returned as { rad, deg }. Dataset distances are in au or km: use convert_distance before passing them to tools that take metres. Prefer these tools over mental arithmetic.'
27
+ instructions: 'Deterministic orbital mechanics calculations. Every field with a unit ends with it: r_m is metres, mu_m3_s2 is m³/s², v_m_s is m/s, T_d is days. Dimensionless fields such as e have no suffix. Angles are given as { value, unit: "deg" | "rad" } and returned as { rad, deg }. Vectors are [x, y, z] arrays in an inertial frame centred on the body. Dataset distances are in au or km: use convert_distance before passing them to tools that take metres. Prefer these tools over mental arithmetic.'
27
28
  });
28
29
  registerOrbitTools(server);
30
+ registerStateVectorTools(server);
29
31
  registerManoeuvreTools(server);
30
32
  registerAnomalyTools(server);
31
33
  registerTimeTools(server);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEhD,kFAAkF;AAClF,MAAM,CAAC,MAAM,cAAc,GAAW,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAClE,iBAAiB,CAClB,CAAC,OAAO,CAAC;AAEV;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAc,EAAE;IAC1C,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,EAC9C;QACE,YAAY,EACV,oaAAoa;KACva,CACF,CAAC;IAEF,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEhD,kFAAkF;AAClF,MAAM,CAAC,MAAM,cAAc,GAAW,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAClE,iBAAiB,CAClB,CAAC,OAAO,CAAC;AAEV;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAc,EAAE;IAC1C,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,EAC9C;QACE,YAAY,EACV,2eAA2e;KAC9e,CACF,CAAC;IAEF,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"manoeuvres.d.ts","sourceRoot":"","sources":["../../src/tools/manoeuvres.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,eAAO,MAAM,sBAAsB,GAAI,QAAQ,SAAS,SA8FvD,CAAC"}
1
+ {"version":3,"file":"manoeuvres.d.ts","sourceRoot":"","sources":["../../src/tools/manoeuvres.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,eAAO,MAAM,sBAAsB,GAAI,QAAQ,SAAS,SAgLvD,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { SECONDS_PER_DAY } from '@interstellar-tools/constants';
2
- import { hohmannTransfer, planeChangeDeltaV, rocketDeltaVFromIsp } from '@interstellar-tools/equations';
2
+ import { characteristicEnergyC3, circularSpeed, hohmannTransfer, hyperbolicEccentricity, hyperbolicPeriapsisSpeed, planeChangeDeltaV, rocketDeltaVFromIsp, solveLambert } from '@interstellar-tools/equations';
3
3
  import { z } from 'zod';
4
- import { angleSchema, muSchema, PURE_TOOL, result, toRadians } from './shared.js';
4
+ import { angleSchema, muSchema, PURE_TOOL, result, toRadians, vectorOutputSchema, vectorSchema } from './shared.js';
5
5
  const directionSchema = z.enum(['prograde', 'retrograde', 'none']);
6
6
  export const registerManoeuvreTools = (server) => {
7
7
  server.registerTool('hohmann_transfer', {
@@ -69,5 +69,69 @@ export const registerManoeuvreTools = (server) => {
69
69
  outputSchema: { dv_m_s: z.number() },
70
70
  annotations: PURE_TOOL
71
71
  }, ({ v_m_s, delta_i }) => result({ dv_m_s: planeChangeDeltaV(v_m_s, toRadians(delta_i)) }));
72
+ server.registerTool('solve_lambert', {
73
+ title: 'Lambert’s problem',
74
+ description: 'Find the orbit from position r1 to position r2 in time dt (Lambert’s problem), single revolution, for ellipses and hyperbolas alike. Returns the velocities at both ends. Positions are in an inertial frame centred on the body. For the burns, subtract the velocity of the orbit you leave from v1, and v2 from the velocity of the orbit you join. Positions 0° or 180° apart are an error: the transfer plane is undefined. Feed v1 to state_to_elements for the transfer orbit.',
75
+ inputSchema: {
76
+ r1_m: vectorSchema('Start position [x, y, z], in metres.'),
77
+ r2_m: vectorSchema('End position [x, y, z], in metres.'),
78
+ dt_s: z.number().positive().describe('Time of flight, in seconds.'),
79
+ mu_m3_s2: muSchema,
80
+ prograde: z
81
+ .boolean()
82
+ .default(true)
83
+ .describe('true (default): fly counterclockwise seen from +z. false: clockwise.')
84
+ },
85
+ outputSchema: {
86
+ v1_m_s: vectorOutputSchema,
87
+ v2_m_s: vectorOutputSchema,
88
+ speed1_m_s: z.number(),
89
+ speed2_m_s: z.number()
90
+ },
91
+ annotations: PURE_TOOL
92
+ }, ({ r1_m, r2_m, dt_s, mu_m3_s2, prograde }) => {
93
+ const { v1, v2 } = solveLambert(r1_m, r2_m, dt_s, mu_m3_s2, {
94
+ prograde
95
+ });
96
+ return result({
97
+ v1_m_s: v1,
98
+ v2_m_s: v2,
99
+ speed1_m_s: Math.hypot(...v1),
100
+ speed2_m_s: Math.hypot(...v2)
101
+ });
102
+ });
103
+ server.registerTool('hyperbolic_departure', {
104
+ title: 'Hyperbolic departure or capture',
105
+ description: 'The burn from a circular parking orbit of radius rp onto the hyperbola that leaves the body with excess speed v∞, made at periapsis. The same Δv captures an arriving v∞ into that circular orbit. Also returns C3 = v∞², the launch-energy figure, and the hyperbola’s eccentricity. For an interplanetary transfer, v∞ is the difference between the planet’s velocity and the transfer orbit’s (from solve_lambert).',
106
+ inputSchema: {
107
+ v_inf_m_s: z
108
+ .number()
109
+ .positive()
110
+ .describe('Hyperbolic excess speed v∞, in m/s.'),
111
+ rp_m: z
112
+ .number()
113
+ .positive()
114
+ .describe('Periapsis radius, the parking orbit’s radius from the body’s centre, in metres.'),
115
+ mu_m3_s2: muSchema
116
+ },
117
+ outputSchema: {
118
+ vp_m_s: z.number(),
119
+ v_circular_m_s: z.number(),
120
+ dv_m_s: z.number(),
121
+ c3_m2_s2: z.number(),
122
+ e: z.number()
123
+ },
124
+ annotations: PURE_TOOL
125
+ }, ({ v_inf_m_s, rp_m, mu_m3_s2 }) => {
126
+ const vp = hyperbolicPeriapsisSpeed(v_inf_m_s, rp_m, mu_m3_s2);
127
+ const vc = circularSpeed(rp_m, mu_m3_s2);
128
+ return result({
129
+ vp_m_s: vp,
130
+ v_circular_m_s: vc,
131
+ dv_m_s: vp - vc,
132
+ c3_m2_s2: characteristicEnergyC3(v_inf_m_s),
133
+ e: hyperbolicEccentricity(v_inf_m_s, rp_m, mu_m3_s2)
134
+ });
135
+ });
72
136
  };
73
137
  //# sourceMappingURL=manoeuvres.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manoeuvres.js","sourceRoot":"","sources":["../../src/tools/manoeuvres.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manoeuvres.js","sourceRoot":"","sources":["../../src/tools/manoeuvres.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,10 @@ export declare const angleSchema: z.ZodObject<{
12
12
  }>;
13
13
  }, z.core.$strip>;
14
14
  export type AngleInputType = z.infer<typeof angleSchema>;
15
+ /** A 3D vector input, such as a position or a velocity. */
16
+ export declare const vectorSchema: (description: string) => z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
17
+ /** A 3D vector output. */
18
+ export declare const vectorOutputSchema: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
15
19
  /** Angle output carrying both radians and degrees. */
16
20
  export declare const angleOutputSchema: z.ZodObject<{
17
21
  rad: z.ZodNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,0EAA0E;AAC1E,eAAO,MAAM,QAAQ,aAKlB,CAAC;AAEJ,0DAA0D;AAC1D,eAAO,MAAM,WAAW;;;;;;iBAKuD,CAAC;AAEhF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEzD,sDAAsD;AACtD,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAC;AAEH,eAAO,MAAM,SAAS,GAAI,iBAAiB,cAAc,KAAG,OACR,CAAC;AAErD,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM;;;CAGrC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtD,MAAM,CAAC,KACN,cAAc,GAAG;IAAE,iBAAiB,EAAE,CAAC,CAAA;CAGxC,CAAC;AAEH,uFAAuF;AACvF,eAAO,MAAM,SAAS;;;;;CAKZ,CAAC"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,0EAA0E;AAC1E,eAAO,MAAM,QAAQ,aAKlB,CAAC;AAEJ,0DAA0D;AAC1D,eAAO,MAAM,WAAW;;;;;;iBAKuD,CAAC;AAEhF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEzD,2DAA2D;AAC3D,eAAO,MAAM,YAAY,GAAI,aAAa,MAAM,8DAGtB,CAAC;AAE3B,0BAA0B;AAC1B,eAAO,MAAM,kBAAkB,2DAAgD,CAAC;AAEhF,sDAAsD;AACtD,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAC;AAEH,eAAO,MAAM,SAAS,GAAI,iBAAiB,cAAc,KAAG,OACR,CAAC;AAErD,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM;;;CAGrC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtD,MAAM,CAAC,KACN,cAAc,GAAG;IAAE,iBAAiB,EAAE,CAAC,CAAA;CAGxC,CAAC;AAEH,uFAAuF;AACvF,eAAO,MAAM,SAAS;;;;;CAKZ,CAAC"}
@@ -12,6 +12,12 @@ export const angleSchema = z
12
12
  unit: z.enum(['deg', 'rad'])
13
13
  })
14
14
  .describe('Angle with explicit unit, e.g. { "value": 28.5, "unit": "deg" }.');
15
+ /** A 3D vector input, such as a position or a velocity. */
16
+ export const vectorSchema = (description) => z
17
+ .tuple([z.number().finite(), z.number().finite(), z.number().finite()])
18
+ .describe(description);
19
+ /** A 3D vector output. */
20
+ export const vectorOutputSchema = z.tuple([z.number(), z.number(), z.number()]);
15
21
  /** Angle output carrying both radians and degrees. */
16
22
  export const angleOutputSchema = z.object({
17
23
  rad: z.number(),
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAGtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,0EAA0E;AAC1E,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC;KACtB,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,QAAQ,CACP,wKAAwK,CACzK,CAAC;AAEJ,0DAA0D;AAC1D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACzB,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE;IAC1B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;CAC7B,CAAC;KACD,QAAQ,CAAC,kEAAkE,CAAC,CAAC;AAIhF,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAkB,EAAW,EAAE,CACpE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAiB,CAAC;AAErD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC;IAC3C,GAAG;IACH,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE;CAC3B,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,IAAO,EACoC,EAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IAChE,iBAAiB,EAAE,IAAI;CACxB,CAAC,CAAC;AAEH,uFAAuF;AACvF,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,YAAY,EAAE,IAAI;IAClB,eAAe,EAAE,KAAK;IACtB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,KAAK;CACZ,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAGtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,0EAA0E;AAC1E,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC;KACtB,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,QAAQ,CACP,wKAAwK,CACzK,CAAC;AAEJ,0DAA0D;AAC1D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACzB,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE;IAC1B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;CAC7B,CAAC;KACD,QAAQ,CAAC,kEAAkE,CAAC,CAAC;AAIhF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,WAAmB,EAAE,EAAE,CAClD,CAAC;KACE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;KACtE,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE3B,0BAA0B;AAC1B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAEhF,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAkB,EAAW,EAAE,CACpE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAiB,CAAC;AAErD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC;IAC3C,GAAG;IACH,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE;CAC3B,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,IAAO,EACoC,EAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IAChE,iBAAiB,EAAE,IAAI;CACxB,CAAC,CAAC;AAEH,uFAAuF;AACvF,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,YAAY,EAAE,IAAI;IAClB,eAAe,EAAE,KAAK;IACtB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,KAAK;CACZ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare const registerStateVectorTools: (server: McpServer) => void;
3
+ //# sourceMappingURL=state-vectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-vectors.d.ts","sourceRoot":"","sources":["../../src/tools/state-vectors.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,eAAO,MAAM,wBAAwB,GAAI,QAAQ,SAAS,SAyFzD,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { elementsToState, stateToElements } from '@interstellar-tools/equations';
2
+ import { z } from 'zod';
3
+ import { angleOutput, angleOutputSchema, angleSchema, muSchema, PURE_TOOL, result, toRadians, vectorOutputSchema, vectorSchema } from './shared.js';
4
+ export const registerStateVectorTools = (server) => {
5
+ server.registerTool('state_to_elements', {
6
+ title: 'State vector to orbital elements',
7
+ description: 'Classical orbital elements (a, e, i, Ω, ω, ν) from a position and velocity in an inertial frame centred on the body. Works for ellipses and hyperbolas. For a circular orbit ω is 0 and ν is measured from the node; for an equatorial one Ω is 0. Returns the periapsis radius, the specific energy, and the period if the orbit is elliptic.',
8
+ inputSchema: {
9
+ r_m: vectorSchema('Position [x, y, z], in metres.'),
10
+ v_m_s: vectorSchema('Velocity [vx, vy, vz], in m/s.'),
11
+ mu_m3_s2: muSchema
12
+ },
13
+ outputSchema: {
14
+ a_m: z.number(),
15
+ e: z.number(),
16
+ i: angleOutputSchema,
17
+ raan: angleOutputSchema,
18
+ argp: angleOutputSchema,
19
+ nu: angleOutputSchema,
20
+ rp_m: z.number(),
21
+ energy_m2_s2: z.number(),
22
+ T_s: z.number().optional()
23
+ },
24
+ annotations: PURE_TOOL
25
+ }, ({ r_m, v_m_s, mu_m3_s2 }) => {
26
+ const { a, e, i, raan, argp, nu } = stateToElements(r_m, v_m_s, mu_m3_s2);
27
+ return result({
28
+ a_m: a,
29
+ e,
30
+ i: angleOutput(i),
31
+ raan: angleOutput(raan),
32
+ argp: angleOutput(argp),
33
+ nu: angleOutput(nu),
34
+ rp_m: a * (1 - e),
35
+ energy_m2_s2: -mu_m3_s2 / (2 * a),
36
+ ...(e < 1 && { T_s: 2 * Math.PI * Math.sqrt(a ** 3 / mu_m3_s2) })
37
+ });
38
+ });
39
+ server.registerTool('elements_to_state', {
40
+ title: 'Orbital elements to state vector',
41
+ description: 'Position and velocity in an inertial frame centred on the body, from classical orbital elements. Use a > 0 with e < 1 for an ellipse and a < 0 with e > 1 for a hyperbola; parabolas (e = 1) are not supported.',
42
+ inputSchema: {
43
+ a_m: z
44
+ .number()
45
+ .finite()
46
+ .refine((a) => a !== 0, 'a must be non-zero')
47
+ .describe('Semi-major axis, in metres. Positive for elliptic, negative for hyperbolic.'),
48
+ e: z
49
+ .number()
50
+ .nonnegative()
51
+ .refine((e) => e !== 1, 'e must not be 1 (parabolic)')
52
+ .describe('Eccentricity, e ≥ 0 and e ≠ 1.'),
53
+ i: angleSchema.describe('Inclination, in [0°, 180°].'),
54
+ raan: angleSchema.describe('Right ascension of the ascending node Ω.'),
55
+ argp: angleSchema.describe('Argument of periapsis ω.'),
56
+ nu: angleSchema.describe('True anomaly ν.'),
57
+ mu_m3_s2: muSchema
58
+ },
59
+ outputSchema: {
60
+ r_m: vectorOutputSchema,
61
+ v_m_s: vectorOutputSchema
62
+ },
63
+ annotations: PURE_TOOL
64
+ }, ({ a_m, e, i, raan, argp, nu, mu_m3_s2 }) => {
65
+ const { r, v } = elementsToState({
66
+ a: a_m,
67
+ e,
68
+ i: toRadians(i),
69
+ raan: toRadians(raan),
70
+ argp: toRadians(argp),
71
+ nu: toRadians(nu)
72
+ }, mu_m3_s2);
73
+ return result({ r_m: r, v_m_s: v });
74
+ });
75
+ };
76
+ //# sourceMappingURL=state-vectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-vectors.js","sourceRoot":"","sources":["../../src/tools/state-vectors.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@interstellar-tools/mcp",
3
- "version": "0.5.0",
3
+ "version": "1.1.0",
4
4
  "description": "Model Context Protocol (MCP) server exposing interstellar-tools orbital mechanics equations and celestial body datasets to AI assistants.",
5
5
  "keywords": [
6
6
  "mcp",
@@ -55,12 +55,12 @@
55
55
  "test:ci": "glob-bin -c \"node --import tsx --test --no-warnings --experimental-test-coverage --test-reporter=cobertura --test-reporter-destination=coverage/cobertura-coverage.xml --test-reporter=spec --test-reporter-destination=stdout\" \"**/__tests__/**/*.spec.ts\""
56
56
  },
57
57
  "dependencies": {
58
- "@interstellar-tools/constants": "^0.64.0",
59
- "@interstellar-tools/equations": "^0.64.0",
60
- "@interstellar-tools/temporal": "^0.61.0",
61
- "@interstellar-tools/types": "^0.64.0",
62
- "@modelcontextprotocol/sdk": "1.31.0",
63
- "zod": "4.6.5"
58
+ "@interstellar-tools/constants": "^1.0.0",
59
+ "@interstellar-tools/equations": "^1.8.0",
60
+ "@interstellar-tools/temporal": "^1.0.0",
61
+ "@interstellar-tools/types": "^1.0.0",
62
+ "@modelcontextprotocol/sdk": "1.32.2",
63
+ "zod": "4.6.7"
64
64
  },
65
65
  "devDependencies": {
66
66
  "@types/node": "^24.19.2",