DosePlot Agent API
PK serum simulation, reconstitution math and compound data for agents. Paid tools $0.01 via x402.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"agent-api": {
"url": "https://api.doseplot.com/mcp"
}
}
}Remote endpoints
https://api.doseplot.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (5)
🟢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",
"properties": {
"disclaimer": {
"type": "string",
"description": "Fixed disclaimer. Relay it with any output."
},
"intended_use": {
"type": "string",
"description": "Fixed intended-use statement. Relay it too."
},
"count": {
"type": "integer"
},
"compounds": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"slug",
"name",
"class",
"half_life_days",
"routes",
"reconstitutable"
],
"properties": {
"id": {
"type": "integer"
},
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"class": {
"type": [
"string",
"null"
]
},
"half_life_days": {
"type": [
"number",
"null"
]
},
"routes": {
"type": "array",
"items": {
"type": "string"
}
},
"reconstitutable": {
"type": "boolean"
}
}
}
}
},
"required": [
"disclaimer",
"intended_use",
"count",
"compounds"
]
}🟢get_compound(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",
"properties": {
"compound": {
"type": "string",
"description": "Canon id, slug, or alias."
}
},
"required": [
"compound"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"disclaimer": {
"type": "string",
"description": "Fixed disclaimer. Relay it with any output."
},
"intended_use": {
"type": "string",
"description": "Fixed intended-use statement. Relay it too."
},
"compound": {
"type": "object",
"description": "The published canon record, verbatim."
},
"reconstitutable": {
"type": "boolean"
},
"editorial": {
"type": [
"object",
"null"
]
}
},
"required": [
"disclaimer",
"intended_use",
"compound",
"reconstitutable",
"editorial"
]
}⚪simulate(compound, dose_mg, dose_mcg, dose_iu, injections_per_week, ...)
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",
"properties": {
"compound": {
"type": "string",
"description": "Canon id, slug, or alias."
},
"dose_mg": {
"type": "number",
"description": "Dose per injection, milligrams. Positive."
},
"dose_mcg": {
"type": "number",
"description": "Dose per injection, micrograms. Positive."
},
"dose_iu": {
"type": "number",
"description": "Dose per injection in the compound's activity unit. Positive. Requires a published conversion for that compound."
},
"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."
},
"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."
},
"route": {
"type": "string",
"description": "One of the compound's published routes. Omitted, its primary route is used."
},
"samples_per_day": {
"type": "integer",
"description": "Sample resolution of the returned series, whole samples, from one to twenty-four. Defaults to twenty-four."
}
},
"required": [
"compound",
"injections_per_week",
"duration_weeks"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"disclaimer": {
"type": "string",
"description": "Fixed disclaimer. Relay it with any output."
},
"intended_use": {
"type": "string",
"description": "Fixed intended-use statement. Relay it too."
},
"compound": {
"type": "object",
"required": [
"id",
"slug",
"name"
],
"properties": {
"id": {
"type": "integer"
},
"slug": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"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`."
}
}
}
},
"units": {
"type": "string",
"enum": [
"ng/dL",
"mcg",
"mg"
],
"description": "The ONLY correct label for the numbers in `level`."
},
"meta": {
"type": "object",
"required": [
"samples_per_day",
"duration_weeks",
"injections_per_week",
"more"
],
"properties": {
"samples_per_day": {
"type": "integer"
},
"duration_weeks": {
"type": "integer"
},
"injections_per_week": {
"type": "number",
"description": "Echoed back as REQUESTED, not as the walk quantized it."
},
"more": {
"type": "string"
},
"network_note": {
"type": "string"
}
}
}
},
"required": [
"disclaimer",
"intended_use",
"compound",
"series",
"units",
"meta"
]
}⚪recon_calc(vial_mg, draw_ml, target_dose_mg, target_dose_mcg, frequency_days, ...)
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",
"properties": {
"vial_mg": {
"type": "number",
"description": "Total mass in the vial, mg. Positive."
},
"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."
},
"target_dose_mg": {
"type": "number",
"description": "Target dose, mg. Positive."
},
"target_dose_mcg": {
"type": "number",
"description": "Target dose, mcg. Positive."
},
"frequency_days": {
"type": "number",
"description": "Days between doses, positive. Feeds days_per_vial only. Defaults to one."
},
"cost_usd": {
"type": "number",
"description": "Vial cost, zero or more. Omitted, cost_per_dose_usd is null."
}
},
"required": [
"vial_mg",
"draw_ml"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"disclaimer": {
"type": "string",
"description": "Fixed disclaimer. Relay it with any output."
},
"intended_use": {
"type": "string",
"description": "Fixed intended-use statement. Relay it too."
},
"concentration_mg_per_ml": {
"type": "number"
},
"bac_water_ml": {
"type": "number"
},
"units_per_dose": {
"type": "number"
},
"syringe_marks": {
"type": "object",
"required": [
"u100"
],
"properties": {
"u100": {
"type": "number"
}
}
},
"doses_per_vial": {
"type": "integer"
},
"residual_mg": {
"type": "number"
},
"days_per_vial": {
"type": "number"
},
"cost_per_dose_usd": {
"type": [
"number",
"null"
]
},
"meta": {
"type": "object",
"required": [
"frequency_days",
"more"
],
"properties": {
"frequency_days": {
"type": "number"
},
"more": {
"type": "string"
},
"network_note": {
"type": "string"
}
}
}
},
"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"
]
}🟡recon_suggest(compound, vial_mg, vial_iu)
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",
"properties": {
"compound": {
"type": "string",
"description": "Canon id, slug, or alias. Must be a reconstitutable compound."
},
"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."
},
"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."
}
},
"required": [
"compound"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"disclaimer": {
"type": "string",
"description": "Fixed disclaimer. Relay it with any output."
},
"intended_use": {
"type": "string",
"description": "Fixed intended-use statement. Relay it too."
},
"compound": {
"type": "object",
"required": [
"id",
"slug",
"name"
],
"properties": {
"id": {
"type": "integer"
},
"slug": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"vial": {
"type": "object",
"required": [
"amount",
"unit",
"source"
],
"properties": {
"amount": {
"type": "number"
},
"unit": {
"type": "string",
"enum": [
"mg",
"IU"
],
"description": "What amount is denominated in, and what concentration_per_ml is per mL of."
},
"source": {
"type": "string",
"enum": [
"request",
"canon"
],
"description": "Whether the vial came from the request or from the published strengths."
}
}
},
"rows": {
"type": "array",
"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.",
"items": {
"type": "object",
"required": [
"bac_water_ml",
"concentration_per_ml",
"preset_doses"
],
"properties": {
"bac_water_ml": {
"type": "number"
},
"concentration_per_ml": {
"type": "number",
"description": "Denominated in vial.unit per mL."
},
"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": {
"type": "string",
"enum": [
"mg",
"mcg",
"IU"
]
},
"units_per_dose": {
"type": "number"
},
"syringe_marks": {
"type": "object",
"required": [
"u100"
],
"properties": {
"u100": {
"type": "integer"
}
}
},
"doses_per_vial": {
"type": "integer"
}
}
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"more"
],
"properties": {
"more": {
"type": "string"
},
"network_note": {
"type": "string"
}
}
}
},
"required": [
"disclaimer",
"intended_use",
"compound",
"vial",
"rows",
"meta"
]
}Community
Evidence