Obesity and incretin drug trials: weight loss by dose with its estimand, adverse events, catalysts
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The extracted weight-loss table, joined to trial design, one row per arm and timepoint. Rows are NOT collapsed to one number per drug. The corpus holds several doses, timepoints and estimands per trial, and picking a single winner per drug would mean choosing between them here, silently and on the caller's behalf. The comparison is theirs to make; this returns the rows and the labels needed to make it correctly.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http drugs https://mcp.midgardfinance.com/mcp
The extracted weight-loss table, joined to trial design, one row per arm and timepoint. Rows are NOT collapsed to one number per drug. The corpus holds several doses, timepoints and estimands per trial, and picking a single winner per drug would mean choosing between them here, silently and on the caller's behalf. The comparison is theirs to make; this returns the rows and the labels needed to make it correctly.
| Argument | Type | Description |
|---|---|---|
| drugs | any | |
| limit | integer | |
| metric | string | |
| estimand | any | |
| timepoint_weeks | any |
{
"type": "object",
"title": "compare_efficacyArguments",
"properties": {
"drugs": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Drugs",
"default": null
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 40
},
"metric": {
"type": "string",
"title": "Metric",
"default": "mean_weight_change_pct"
},
"estimand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Estimand",
"default": null
},
"timepoint_weeks": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Timepoint Weeks",
"default": null
}
}
}Extracted adverse-event rates by trial and arm, with the arithmetic that was checked. `verification` is carried through verbatim. It is the raw-count recomputation recorded when the row was extracted ("997/2481 active = 40.18%"), and it is what lets a caller see that the percentage was checked against the paper rather than copied from an abstract.
| Argument | Type | Description |
|---|---|---|
| drug | any | |
| limit | integer | |
| trial | any | |
| ae_type | any |
{
"type": "object",
"title": "get_adverse_eventsArguments",
"properties": {
"drug": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Drug",
"default": null
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 40
},
"trial": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Trial",
"default": null
},
"ae_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ae Type",
"default": null
}
}
}Full record for one drug, with its efficacy figures estimand-tagged and its page URL. Matching goes slug, then exact name or brand, then substring, so "wegovy", "Wegovy HD" and "semaglutide-obesity" all land somewhere sensible without the caller knowing the slug scheme.
| Argument | Type | Description |
|---|---|---|
| name* | string |
{
"type": "object",
"title": "get_drugArguments",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"title": "Name"
}
}
}The digitised weight-loss curve for a drug: week-by-week points, plus per-dose series. Returned with `endpoint_pct` and its estimand alongside the curve, because the endpoint marker and the last plotted point are different quantities and the curve alone does not say which one a reader is looking at.
| Argument | Type | Description |
|---|---|---|
| drug* | string |
{
"type": "object",
"title": "get_trajectoryArguments",
"required": [
"drug"
],
"properties": {
"drug": {
"type": "string",
"title": "Drug"
}
}
}One trial's design, by NCT number or by trial key (SURMOUNT-1, scale, redefine-1).
| Argument | Type | Description |
|---|---|---|
| identifier* | string |
{
"type": "object",
"title": "get_trialArguments",
"required": [
"identifier"
],
"properties": {
"identifier": {
"type": "string",
"title": "Identifier"
}
}
}Upcoming and recent readouts, approvals and trial starts across sponsors. Dates are ISO strings where the event has a date and a bare year where the sponsor has only guided to one, so they are compared as strings rather than parsed - "2026" sorts before "2026-07-01", which is the right answer for an event guided to a year.
| Argument | Type | Description |
|---|---|---|
| tier | any | |
| limit | integer | |
| to_date | any | |
| from_date | any |
{
"type": "object",
"title": "list_catalystsArguments",
"properties": {
"tier": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Tier",
"default": null
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 40
},
"to_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "To Date",
"default": null
},
"from_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "From Date",
"default": null
}
}
}Search the drug boards by free text and by field.
| Argument | Type | Description |
|---|---|---|
| area | any | |
| limit | integer | |
| query | any | |
| status | any | |
| sponsor | any |
{
"type": "object",
"title": "search_drugsArguments",
"properties": {
"area": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Area",
"default": null
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 40
},
"query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Query",
"default": null
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Status",
"default": null
},
"sponsor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sponsor",
"default": null
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Oct 30, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.