Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,561Letters: 14Defects: 1,336counted 1 min ago
teppi

Server definition

Hash
sha256:8d230a91cdaaa531eb8185d3c68726d67429b5403a4b3bd2dbbaa809d2b8b2f8
What it is
What a remote MCP server returned when asked what it offers: 7 tools

The blob, as servednamed by its sha256

{ "instructions": "ThrustLab simulates electric UAV powertrains: battery, ESC, motor and propeller solved together. Use it to size a drone or aircraft powertrain and to look up real motor, propeller and battery data.\n\nTwo propeller models. The **Fast model** runs from the size printed on the propeller and answers in milliseconds; it is what these tools run. The **Full model** runs from measured blade geometry and needs a ThrustLab account. Every result says which model produced it — quote that name with the number.\n\nStart with `search_components` to find real parts, then `simulate_powertrain` for one operating point or `sweep_powertrain` to compare throttles or airspeeds. `estimate_propeller` answers a propeller-only question with no components at all. Every simulation returns a share URL; give it to the user, because that page is where they continue the work.\n\nComponent data is published under CC BY 4.0. When you quote a value, say: \"Data: ThrustLab component database (thrustlab.com), CC BY 4.0\".\n", "tools": [ { "description": "Thrust, torque and shaft power for one propeller, from its printed size.\n\n A closed-form momentum plus blade-element equation — no motor, no battery,\n no account. Give the size as it is printed: a 10x5 is `diameter_in=10`,\n `pitch_in=5`. `chord_ratio` is the chord at 75 % radius over the diameter:\n 0.065 thin electric, 0.07 sport, 0.10 slow flyer, 0.11 multirotor.\n ", "inputSchema": { "properties": { "airspeed_m_s": { "default": 0, "title": "Airspeed M S", "type": "number" }, "altitude_m": { "default": 0, "title": "Altitude M", "type": "number" }, "blades": { "default": 2, "title": "Blades", "type": "integer" }, "camber_pct": { "default": 3.2, "title": "Camber Pct", "type": "number" }, "chord_ratio": { "default": 0.065, "title": "Chord Ratio", "type": "number" }, "diameter_in": { "title": "Diameter In", "type": "number" }, "pitch_in": { "title": "Pitch In", "type": "number" }, "rpm": { "title": "Rpm", "type": "number" } }, "required": [ "diameter_in", "pitch_in", "rpm" ], "title": "estimate_propellerArguments", "type": "object" }, "name": "estimate_propeller", "outputSchema": { "additionalProperties": true, "title": "estimate_propellerDictOutput", "type": "object" } }, { "description": "Read one database row by its id (`comp_…`), with provenance.\n\n Propeller rows give diameter, pitch, blade count, weight and maximum rpm.\n Blade station geometry is never returned.\n ", "inputSchema": { "properties": { "component_id": { "title": "Component Id", "type": "string" } }, "required": [ "component_id" ], "title": "get_componentArguments", "type": "object" }, "name": "get_component", "outputSchema": { "additionalProperties": true, "title": "get_componentDictOutput", "type": "object" } }, { "description": "Read a stored result: a share `token` from a run, or a `simulation_id`.\n\n `simulation_id` needs a ThrustLab API key in `Authorization: Bearer` and\n reads only that account's own runs.\n ", "inputSchema": { "properties": { "simulation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Simulation Id" }, "token": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Token" } }, "title": "get_resultArguments", "type": "object" }, "name": "get_result", "outputSchema": { "additionalProperties": true, "title": "get_resultDictOutput", "type": "object" } }, { "description": "How accurate a model is, measured against wind-tunnel and bench data.\n\n `model` is \"fast\", \"full\", or an exact report slug such as \"prom-5.3\". The\n numbers are error against measured data by partition and channel, with the\n envelope they were measured inside. Quote the model name with the number.\n ", "inputSchema": { "properties": { "model": { "default": "full", "title": "Model", "type": "string" } }, "title": "get_validation_summaryArguments", "type": "object" }, "name": "get_validation_summary", "outputSchema": { "additionalProperties": true, "title": "get_validation_summaryDictOutput", "type": "object" } }, { "description": "Find motors, propellers or batteries in the ThrustLab database.\n\n`component_type` is \"motor\", \"propeller\" or \"battery\". `query` is a\ncase-insensitive substring of the part name or its maker (\"APC\", \"T-Motor\",\n\"13x6.5\"). The maker sits under `spec.brand` for motors and batteries and under\n`spec.type` for propellers. `limit` is capped at 200 rows a\npage; when `has_more` is true, pass the returned `next_offset` as `offset` to\nread the next page. Each row carries its datasheet values, its source and the\nCC BY 4.0 attribution line. Pass a returned `id` to\n`simulate_powertrain`.\n", "inputSchema": { "properties": { "component_type": { "title": "Component Type", "type": "string" }, "limit": { "default": 25, "title": "Limit", "type": "integer" }, "offset": { "default": 0, "title": "Offset", "type": "integer" }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Query" }, "sort_by": { "default": "name", "title": "Sort By", "type": "string" }, "sort_order": { "default": "asc", "title": "Sort Order", "type": "string" } }, "required": [ "component_type" ], "title": "search_componentsArguments", "type": "object" }, "name": "search_components", "outputSchema": { "additionalProperties": true, "title": "search_componentsDictOutput", "type": "object" } }, { "description": "Solve one operating point of a whole powertrain on the Fast model.\n\n Battery, ESC, motor and propeller are solved together, so the answer is a\n real thrust and current, not a propeller curve. The numbers come back in\n `result` (`result.All` = system totals in SI units: thrust N, current A,\n power W, time s; one entry per rotor; `result.Battery`), with a share URL.\n No second call is needed to read them.\n ", "inputSchema": { "$defs": { "PowertrainInput": { "description": "One powertrain, as the anonymous endpoint accepts it (spec D4).\n\nCatalog components are referenced by their public id (``comp_…``, from\n``search_components``). The propeller may instead be given as a label, which\nis all the Fast model needs.", "properties": { "airspeed_m_s": { "default": 0, "description": "0 is a static run.", "maximum": 300, "minimum": 0, "title": "Airspeed M S", "type": "number" }, "altitude_m": { "default": 0, "maximum": 11000, "minimum": 0, "title": "Altitude M", "type": "number" }, "battery_id": { "description": "Catalog battery public id.", "title": "Battery Id", "type": "string" }, "motor_id": { "description": "Catalog motor public id, e.g. comp_2xK….", "title": "Motor Id", "type": "string" }, "propeller_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Catalog propeller public id.", "title": "Propeller Id" }, "propeller_label": { "anyOf": [ { "$ref": "#/$defs/PropellerLabel" }, { "type": "null" } ], "default": null, "description": "Use instead of propeller_id to run from the printed size." }, "rotor_count": { "default": 1, "description": "Rotors on the craft.", "maximum": 16, "minimum": 1, "title": "Rotor Count", "type": "integer" }, "throttle_pct": { "default": 100, "exclusiveMinimum": 0, "maximum": 100, "title": "Throttle Pct", "type": "number" } }, "required": [ "motor_id", "battery_id" ], "title": "PowertrainInput", "type": "object" }, "PropellerLabel": { "description": "What is printed on the propeller — all the Fast model reads.\n\nInches and a spoken family name, because that is how a propeller is sold and\nhow a user will say it. :func:`to_schema_label` turns this into the metres\nand the enum ``app.schemas.simulation.PropellerLabel`` declares.", "properties": { "camber_pct": { "anyOf": [ { "maximum": 8, "minimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "Section camber in percent. Defaults to 3.2.", "title": "Camber Pct" }, "chord_ratio": { "anyOf": [ { "exclusiveMinimum": 0, "maximum": 0.5, "type": "number" }, { "type": "null" } ], "default": null, "description": "Chord at 75 % radius over diameter. Give it instead of 'family' (or with family='custom'); the two cannot both be set.", "title": "Chord Ratio" }, "diameter_in": { "description": "Diameter in inches, e.g. 10 for a 10x5.", "exclusiveMinimum": 0, "maximum": 400, "title": "Diameter In", "type": "number" }, "family": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Chord-ratio preset: 'thin electric' (0.065 D), 'sport' (0.07 D), 'slow flyer' (0.10 D) or 'multirotor' (0.11 D). Defaults to sport.", "title": "Family" }, "num_blades": { "default": 2, "description": "Blade count.", "maximum": 8, "minimum": 2, "title": "Num Blades", "type": "integer" }, "pitch_in": { "description": "Pitch in inches, e.g. 5 for a 10x5.", "exclusiveMinimum": 0, "maximum": 400, "title": "Pitch In", "type": "number" } }, "required": [ "diameter_in", "pitch_in" ], "title": "PropellerLabel", "type": "object" } }, "properties": { "powertrain": { "$ref": "#/$defs/PowertrainInput" } }, "required": [ "powertrain" ], "title": "simulate_powertrainArguments", "type": "object" }, "name": "simulate_powertrain", "outputSchema": { "additionalProperties": true, "title": "simulate_powertrainDictOutput", "type": "object" } }, { "description": "Solve a powertrain across a throttle or airspeed range, up to 25 points.\n\n `sweep.steps` is the NUMBER OF POINTS, not a step size: start 40, stop 100,\n steps 4 gives 40, 60, 80 and 100. One sweep beats a loop of single points.\n The points come back in `result.points` with the share URL; no second call\n is needed to read them.\n ", "inputSchema": { "$defs": { "PowertrainInput": { "description": "One powertrain, as the anonymous endpoint accepts it (spec D4).\n\nCatalog components are referenced by their public id (``comp_…``, from\n``search_components``). The propeller may instead be given as a label, which\nis all the Fast model needs.", "properties": { "airspeed_m_s": { "default": 0, "description": "0 is a static run.", "maximum": 300, "minimum": 0, "title": "Airspeed M S", "type": "number" }, "altitude_m": { "default": 0, "maximum": 11000, "minimum": 0, "title": "Altitude M", "type": "number" }, "battery_id": { "description": "Catalog battery public id.", "title": "Battery Id", "type": "string" }, "motor_id": { "description": "Catalog motor public id, e.g. comp_2xK….", "title": "Motor Id", "type": "string" }, "propeller_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Catalog propeller public id.", "title": "Propeller Id" }, "propeller_label": { "anyOf": [ { "$ref": "#/$defs/PropellerLabel" }, { "type": "null" } ], "default": null, "description": "Use instead of propeller_id to run from the printed size." }, "rotor_count": { "default": 1, "description": "Rotors on the craft.", "maximum": 16, "minimum": 1, "title": "Rotor Count", "type": "integer" }, "throttle_pct": { "default": 100, "exclusiveMinimum": 0, "maximum": 100, "title": "Throttle Pct", "type": "number" } }, "required": [ "motor_id", "battery_id" ], "title": "PowertrainInput", "type": "object" }, "PropellerLabel": { "description": "What is printed on the propeller — all the Fast model reads.\n\nInches and a spoken family name, because that is how a propeller is sold and\nhow a user will say it. :func:`to_schema_label` turns this into the metres\nand the enum ``app.schemas.simulation.PropellerLabel`` declares.", "properties": { "camber_pct": { "anyOf": [ { "maximum": 8, "minimum": 0, "type": "number" }, { "type": "null" } ], "default": null, "description": "Section camber in percent. Defaults to 3.2.", "title": "Camber Pct" }, "chord_ratio": { "anyOf": [ { "exclusiveMinimum": 0, "maximum": 0.5, "type": "number" }, { "type": "null" } ], "default": null, "description": "Chord at 75 % radius over diameter. Give it instead of 'family' (or with family='custom'); the two cannot both be set.", "title": "Chord Ratio" }, "diameter_in": { "description": "Diameter in inches, e.g. 10 for a 10x5.", "exclusiveMinimum": 0, "maximum": 400, "title": "Diameter In", "type": "number" }, "family": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Chord-ratio preset: 'thin electric' (0.065 D), 'sport' (0.07 D), 'slow flyer' (0.10 D) or 'multirotor' (0.11 D). Defaults to sport.", "title": "Family" }, "num_blades": { "default": 2, "description": "Blade count.", "maximum": 8, "minimum": 2, "title": "Num Blades", "type": "integer" }, "pitch_in": { "description": "Pitch in inches, e.g. 5 for a 10x5.", "exclusiveMinimum": 0, "maximum": 400, "title": "Pitch In", "type": "number" } }, "required": [ "diameter_in", "pitch_in" ], "title": "PropellerLabel", "type": "object" }, "SweepAxis": { "description": "A 1-D sweep axis. ``steps`` is the NUMBER OF POINTS, not a step size.", "properties": { "parameter": { "description": "'throttle_pct' or 'airspeed_m_s'.", "title": "Parameter", "type": "string" }, "start": { "title": "Start", "type": "number" }, "steps": { "description": "Point count, at most 25 anonymous.", "maximum": 25, "minimum": 2, "title": "Steps", "type": "integer" }, "stop": { "title": "Stop", "type": "number" } }, "required": [ "parameter", "start", "stop", "steps" ], "title": "SweepAxis", "type": "object" } }, "properties": { "powertrain": { "$ref": "#/$defs/PowertrainInput" }, "sweep": { "$ref": "#/$defs/SweepAxis" } }, "required": [ "powertrain", "sweep" ], "title": "sweep_powertrainArguments", "type": "object" }, "name": "sweep_powertrain", "outputSchema": { "additionalProperties": true, "title": "sweep_powertrainDictOutput", "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:8d230a91cdaaa531eb8185d3c68726d67429b5403a4b3bd2dbbaa809d2b8b2f8 | sha256sum