Midgard Finance drug data

Obesity and incretin drug trials: weight loss by dose with its estimand, adverse events, catalysts

Should I use this

Quality & Safety

A
Description quality
96%
Schema completeness
68%
Naming quality
97%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'get_trial' description lacks action verbin get_trial

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,261Tokens (tool definitions)
~903 BTypical response size
Moderate attention impact (0.99% of 128k context)

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": {
    "drugs": {
      "url": "https://mcp.midgardfinance.com/mcp"
    }
  }
}

Remote endpoints

https://mcp.midgardfinance.com/mcpstreamable-http

What it can do

Tool inventory

Tools (7)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_drugs(query, area, sponsor, status, limit)

Search the drug boards by free text and by field.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Query"
    },
    "area": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Area"
    },
    "sponsor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Sponsor"
    },
    "status": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Status"
    },
    "limit": {
      "default": 10,
      "title": "Limit",
      "type": "integer"
    }
  },
  "title": "search_drugsArguments"
}
🟢get_drug(name)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "title": "Name",
      "type": "string"
    }
  },
  "required": [
    "name"
  ],
  "title": "get_drugArguments"
}
🟢get_trial(identifier)

One trial's design, by NCT number or by trial key (SURMOUNT-1, scale, redefine-1).

Input Schema

{
  "type": "object",
  "properties": {
    "identifier": {
      "title": "Identifier",
      "type": "string"
    }
  },
  "required": [
    "identifier"
  ],
  "title": "get_trialArguments"
}
🟢compare_efficacy(drugs, timepoint_weeks, estimand, metric, limit)

The extracted weight-loss table for the named drugs, 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.

Input Schema

{
  "type": "object",
  "properties": {
    "drugs": {
      "items": {
        "type": "string"
      },
      "title": "Drugs",
      "type": "array"
    },
    "timepoint_weeks": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Timepoint Weeks"
    },
    "estimand": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Estimand"
    },
    "metric": {
      "default": "mean_weight_change_pct",
      "title": "Metric",
      "type": "string"
    },
    "limit": {
      "default": 10,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "drugs"
  ],
  "title": "compare_efficacyArguments"
}
🟢get_adverse_events(drug, trial, ae_type, limit)

Extracted adverse-event rates for a named drug or trial, by 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.

Input Schema

{
  "type": "object",
  "properties": {
    "drug": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Drug"
    },
    "trial": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Trial"
    },
    "ae_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Ae Type"
    },
    "limit": {
      "default": 10,
      "title": "Limit",
      "type": "integer"
    }
  },
  "title": "get_adverse_eventsArguments"
}
🟢get_trajectory(drug)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "drug": {
      "title": "Drug",
      "type": "string"
    }
  },
  "required": [
    "drug"
  ],
  "title": "get_trajectoryArguments"
}
🟢list_catalysts(from_date, to_date, tier, limit)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "from_date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "From Date"
    },
    "to_date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "To Date"
    },
    "tier": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Tier"
    },
    "limit": {
      "default": 10,
      "title": "Limit",
      "type": "integer"
    }
  },
  "title": "list_catalystsArguments"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools