RESTful open API for RocketPy, a rocket flight simulator. Provides endpoints for creating, managing, and simulating rocket flights, environments, rockets, and motors.
This MCP server exposes 35 tools via FastMCP wrapping a FastAPI REST API for RocketPy (rocket flight simulation). While tool names follow verb_noun conventions and basic structures are present, there are critical gaps in definition quality: (1) Parameter descriptions are minimal or missing for complex nested objects. (2) Output schemas are NOT documented, the server provides no schema documentation for return values, forcing LLMs to guess what each tool returns. (3) Error handling descriptions are absent, tools provide no guidance on failure modes or recovery paths. (4) Many parameters accept 'object' types with nested 'properties' that are themselves undescribed or vaguely specified (e.g., 'flight', 'rocket', 'motor', 'environment' params). (5) The server relies on the underlying FastAPI app's documentation but does NOT explicitly surface structured output schemas in the MCP layer. Per the rubric, 'Document the output schema. LLMs need to know what fields to expect', this server fails that test. Tools like post_flight, post_motor, post_rocket accept deeply nested objects with many optional fields but provide no guidance on which combinations are valid or what the response structure is. Enumerated fields (motor_kind, atmospheric_model_type, equations_of_motion, interpolation_method) are present and correct, which is a positive. However, the absence of output schema documentation and sparse parameter descriptions for complex nested types significantly reduce confidence in LLM usability.
Create a flight from environment and rocket references.
Create a rocket from a motor reference.
Delete an environment by ID.
Delete a flight by ID.
Delete a motor by ID.
Delete a rocket by ID.
Retrieve an environment by ID.
Simulate a rocket environment.
Output schemas are not documented. Tools like post_flight, post_motor, post_rocket, get_flight_simulation, get_motor_simulation, get_rocket_simulation provide no schema documentation for return values. LLMs cannot determine what fields to expect or how to chain results to downstream tools.
Complex nested parameters lack detailed descriptions. Tools like post_flight, post_motor, post_rocket accept deeply nested 'object' types (flight, motor, rocket, environment) with many optional fields and complex validation rules. Descriptions such as 'Rocket model data' or 'Flight parameters' do not guide LLMs on required fields, valid combinations, or constraints. For example, post_motor accepts motor_kind as an enum but does not document which additional parameters are required per kind (e.g., grain_number only valid for SOLID).
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 57 | - | v1 |
Retrieve a flight by ID.
Get the flight trajectory as a KML file.
Generate a Jupyter notebook for a persisted flight.
Simulate a rocket flight.
Retrieve a motor by ID.
Build the motor-only drawing-geometry payload for a persisted motor. Renders the motor at its own coordinate origin (motor_position=0, parent_csys=1) so the playground can show a motor in isolation.
Simulate a rocketpy motor.
Retrieve a rocket by ID.
Build the drawing geometry payload for a persisted rocket.
Simulate a rocketpy rocket.
Get rocketpy.Environmnet dill binary.
Get rocketpy.flight as a portable `.rpy` JSON file.
Get a rocketpy.Motor object as a dill binary.
Get a rocketpy.Rocket object as dill binary.
Import a `.rpy` JSON file: decompose the RocketPy Flight into Environment, Motor, Rocket and Flight models, persist each one via the normal CRUD pipeline, and return all IDs.
Create a new environment.
Create a new flight.
Create a new motor.
Create a new rocket.
Update an environment by ID.
Update a flight by ID.
Update a motor by ID.
Update a rocket by ID.
Update a models.Flight.environment in the database.
Update a flight from environment and rocket references.
Update a models.Flight.rocket in the database.
Update a rocket from a motor reference.
No error handling guidance. Tools provide no descriptions of failure modes, recovery strategies, or actionable error messages. For destructive operations (delete_flight_by_id, delete_motor_by_id, delete_rocket_by_id, delete_environment_by_id), there is no mention of irreversibility or confirmation requirements. LLMs have no guidance on what to do if a deletion fails or if an ID does not exist.
Parameters for 'object' types lack internal schema. Tools accepting 'environment', 'rocket', 'motor', 'flight' as parameters define them as type 'object' with nested 'properties', but the depth and complexity of those properties is under-documented. For post_environment, 'pressure', 'temperature', 'wind_u', 'wind_v' can be 'number or array', the 'array' case is not explained (are these tuples? what format?). For post_motor, conditional parameters based on motor_kind (e.g., chamber_radius, chamber_height only for GENERIC) are not cross-referenced.
Generic parameter descriptions for updates. Tools like put_environment_by_id, put_flight_by_id, put_motor_by_id, put_rocket_by_id accept 'environment', 'flight', 'motor', 'rocket' parameters described only as 'Updated X data' with no guidance on which fields can be updated, which are immutable, or what happens if invalid combinations are sent.
No pagination or result-limit guidance. Tools like get_flight_simulation, get_motor_simulation, get_rocket_simulation, get_environment_simulation return 'simulation results' but do not document whether results are paginated, how large responses can be, or whether the LLM should expect truncation. Per the rubric, 'Even if the API allows returning thousands of items, cap results at a reasonable limit (e.g. 20-50) and offer pagination.'
Missing confirmation/dry-run for destructive operations. Tools delete_flight_by_id, delete_motor_by_id, delete_rocket_by_id, and delete_environment_by_id are destructive but offer no confirmation step or dry-run capability. Per the rubric, 'Irreversible operations (delete, send, publish) should support a dry-run or confirmation step.'
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are not present. The server does not declare tool risk levels explicitly in MCP schema, the 'Risk' field in the spec (READ_ONLY, WRITE, DESTRUCTIVE) is metadata but not surfaced as tool annotations. Per the MCP spec (2026-07-28), tool annotations enable agents to understand which tools are safe to retry and which have side effects.