MCP Server

DosePlot Agent API

com.doseplot/agent-api
Healthcare Science & Engineering Public & reachable MCP 2025-11-25

What this MCP does

Provides compound information, pharmacokinetic serum simulations, and reconstitution calculations for published compounds.

get_compound
Full published record for one compound, looked up by canon id, slug or alias (slug and alias matching is case-insensitive). Outputs are for relay to a human decision-maker; not for autonomous administration.
Input schema
{'type': 'object', 'required': ['compound'], 'properties': {'compound': {'type': 'string', 'description': 'Canon id, slug, or alias.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['disclaimer', 'intended_use', 'compound', 'reconstitutable', 'editorial'], 'properties': {'compound': {'type': 'object', 'description': 'The published canon record, verbatim.'}, 'editorial': {'type': ['object', 'null']}, 'disclaimer': {'type': 'string', 'description': 'Fixed disclaimer. Relay it with any output.'}, 'intended_use': {'type': 'string', 'description': 'Fixed intended-use statement. Relay it too.'}, 'reconstitutable': {'type': 'boolean'}}}
list_compounds
List every published compound with its class, terminal half-life in days, administration routes and whether reconstitution math is available for it. Takes no arguments. Outputs are for relay to a human decision-maker; not for autonomous administration.
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['disclaimer', 'intended_use', 'count', 'compounds'], 'properties': {'count': {'type': 'integer'}, 'compounds': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'slug', 'name', 'class', 'half_life_days', 'routes', 'reconstitutable'], 'properties': {'id': {'type': 'integer'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'class': {'type': ['string', 'null']}, 'routes': {'type': 'array', 'items': {'type': 'string'}}, 'half_life_days': {'type': ['number', 'null']}, 'reconstitutable': {'type': 'boolean'}}}}, 'disclaimer': {'type': 'string', 'description': 'Fixed disclaimer. Relay it with any output.'}, 'intended_use': {'type': 'string', 'description': 'Fixed intended-use statement. Relay it too.'}}}
recon_calc
Paid: $0.01 USDC per call via x402 (payment in _meta["x402/payment"]). Reconstitution math for one vial and one target dose: the concentration to reconstitute to, the bacteriostatic water to add, what one dose reads on a U-100 syringe, and how many doses the vial yields. Exactly one target-dose field must be present; unknown fields are rejected. Outputs are for relay to a human decision-maker; not for autonomous administration.
Input schema
{'type': 'object', 'required': ['vial_mg', 'draw_ml'], 'properties': {'draw_ml': {'type': 'number', 'description': 'The volume you want to DRAW for one dose, in mL -- not the vial fill. Accepted range is one hundredth of a mL up to ten mL. The fill needed to make that true comes back as bac_water_ml.'}, 'vial_mg': {'type': 'number', 'description': 'Total mass in the vial, mg. Positive.'}, 'cost_usd': {'type': 'number', 'description': 'Vial cost, zero or more. Omitted, cost_per_dose_usd is null.'}, 'frequency_days': {'type': 'number', 'description': 'Days between doses, positive. Feeds days_per_vial only. Defaults to one.'}, 'target_dose_mg': {'type': 'number', 'description': 'Target dose, mg. Positive.'}, 'target_dose_mcg': {'type': 'number', 'description': 'Target dose, mcg. Positive.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['disclaimer', 'intended_use', 'concentration_mg_per_ml', 'bac_water_ml', 'units_per_dose', 'syringe_marks', 'doses_per_vial', 'residual_mg', 'days_per_vial', 'cost_per_dose_usd', 'meta'], 'properties': {'meta': {'type': 'object', 'required': ['frequency_days', 'more'], 'properties': {'more': {'type': 'string'}, 'network_note': {'type': 'string'}, 'frequency_days': {'type': 'number'}}}, 'disclaimer': {'type': 'string', 'description': 'Fixed disclaimer. Relay it with any output.'}, 'residual_mg': {'type': 'number'}, 'bac_water_ml': {'type': 'number'}, 'intended_use': {'type': 'string', 'description': 'Fixed intended-use statement. Relay it too.'}, 'days_per_vial': {'type': 'number'}, 'syringe_marks': {'type': 'object', 'required': ['u100'], 'properties': {'u100': {'type': 'number'}}}, 'doses_per_vial': {'type': 'integer'}, 'units_per_dose': {'type': 'number'}, 'cost_per_dose_usd': {'type': ['number', 'null']}, 'concentration_mg_per_ml': {'type': 'number'}}}
recon_suggest
Paid: $0.01 USDC per call via x402 (payment in _meta["x402/payment"]). Ranked reconstitution suggestions for one published reconstitutable compound: bacteriostatic-water presets that put the published per-administration dose range's clean steps on whole U-100 syringe marks. Vial defaults to the compound's first published strength. Compounds whose published range is denominated per period are refused rather than guessed at. Unknown fields are rejected. Outputs are for relay to a human decision-maker; not for autonomous administration.
Input schema
{'type': 'object', 'required': ['compound'], 'properties': {'vial_iu': {'type': 'number', 'description': "Your actual vial's total activity, IU, positive. Only for compounds whose published vials are IU-quantified. Omitted, the first published vial strength is used."}, 'vial_mg': {'type': 'number', 'description': "Your actual vial's total mass, mg, positive. Only for compounds whose published vials are mg-quantified. Omitted, the first published vial strength is used."}, 'compound': {'type': 'string', 'description': 'Canon id, slug, or alias. Must be a reconstitutable compound.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['disclaimer', 'intended_use', 'compound', 'vial', 'rows', 'meta'], 'properties': {'meta': {'type': 'object', 'required': ['more'], 'properties': {'more': {'type': 'string'}, 'network_note': {'type': 'string'}}}, 'rows': {'type': 'array', 'items': {'type': 'object', 'required': ['bac_water_ml', 'concentration_per_ml', 'preset_doses'], 'properties': {'bac_water_ml': {'type': 'number'}, 'preset_doses': {'type': 'array', 'items': {'type': 'object', 'required': ['dose', 'dose_unit', 'units_per_dose', 'syringe_marks', 'doses_per_vial'], 'properties': {'dose': {'type': 'number'}, 'dose_unit': {'enum': ['mg', 'mcg', 'IU'], 'type': 'string'}, 'syringe_marks': {'type': 'object', 'required': ['u100'], 'properties': {'u100': {'type': 'integer'}}}, 'doses_per_vial': {'type': 'integer'}, 'units_per_dose': {'type': 'number'}}}}, 'concentration_per_ml': {'type': 'number', 'description': 'Denominated in vial.unit per mL.'}}}, 'description': 'Ranked presets, best first, at most 3 rows. An empty array means no clean-graduation preset exists for this vial -- a real answer, not a refusal.'}, 'vial': {'type': 'object', 'required': ['amount', 'unit', 'source'], 'properties': {'unit': {'enum': ['mg', 'IU'], 'type': 'string', 'description': 'What amount is denominated in, and what concentration_per_ml is per mL of.'}, 'amount': {'type': 'number'}, 'source': {'enum': ['request', 'canon'], 'type': 'string', 'description': 'Whether the vial came from the request or from the published strengths.'}}}, 'compound': {'type': 'object', 'required': ['id', 'slug', 'name'], 'properties': {'id': {'type': 'integer'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'disclaimer': {'type': 'string', 'description': 'Fixed disclaimer. Relay it with any output.'}, 'intended_use': {'type': 'string', 'description': 'Fixed intended-use statement. Relay it too.'}}}
simulate
Paid: $0.01 USDC per call via x402 (payment in _meta["x402/payment"]). Pharmacokinetic serum curve for one compound at one dose and one cadence, over a requested horizon. Exactly one dose field must be present; unknown fields are rejected rather than ignored. Outputs are for relay to a human decision-maker; not for autonomous administration.
Input schema
{'type': 'object', 'required': ['compound', 'injections_per_week', 'duration_weeks'], 'properties': {'route': {'type': 'string', 'description': "One of the compound's published routes. Omitted, its primary route is used."}, 'dose_iu': {'type': 'number', 'description': "Dose per injection in the compound's activity unit. Positive. Requires a published conversion for that compound."}, 'dose_mg': {'type': 'number', 'description': 'Dose per injection, milligrams. Positive.'}, 'compound': {'type': 'string', 'description': 'Canon id, slug, or alias.'}, 'dose_mcg': {'type': 'number', 'description': 'Dose per injection, micrograms. Positive.'}, 'duration_weeks': {'type': 'integer', 'description': 'Length of the dosing window, whole weeks, from one to two hundred and sixty. The model always adds a sixty-day washout tail.'}, 'samples_per_day': {'type': 'integer', 'description': 'Sample resolution of the returned series, whole samples, from one to twenty-four. Defaults to twenty-four.'}, 'injections_per_week': {'type': 'number', 'description': 'Injections per WEEK -- not per day; the name is the contract. Accepted range is a quarter of an injection per week up to twenty-one per week.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['disclaimer', 'intended_use', 'compound', 'series', 'units', 'meta'], 'properties': {'meta': {'type': 'object', 'required': ['samples_per_day', 'duration_weeks', 'injections_per_week', 'more'], 'properties': {'more': {'type': 'string'}, 'network_note': {'type': 'string'}, 'duration_weeks': {'type': 'integer'}, 'samples_per_day': {'type': 'integer'}, 'injections_per_week': {'type': 'number', 'description': 'Echoed back as REQUESTED, not as the walk quantized it.'}}}, 'units': {'enum': ['ng/dL', 'mcg', 'mg'], 'type': 'string', 'description': 'The ONLY correct label for the numbers in `level`.'}, 'series': {'type': 'array', 'items': {'type': 'object', 'required': ['day', 'level'], 'properties': {'day': {'type': 'number', 'description': 'Cycle day, 1-indexed.'}, 'level': {'type': 'number', 'description': 'Modelled serum level, in `units`.'}}}}, 'compound': {'type': 'object', 'required': ['id', 'slug', 'name'], 'properties': {'id': {'type': 'integer'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'disclaimer': {'type': 'string', 'description': 'Fixed disclaimer. Relay it with any output.'}, 'intended_use': {'type': 'string', 'description': 'Fixed intended-use statement. Relay it too.'}}}
Added
recon_suggest
Sept. 23, 2026, 2:53 a.m.
Added
recon_calc
Sept. 17, 2026, 12:34 p.m.
Added
simulate
Sept. 17, 2026, 12:34 p.m.
Added
get_compound
Sept. 17, 2026, 12:34 p.m.
Added
list_compounds
Sept. 17, 2026, 12:34 p.m.