Skip to main content
Glama

Critical Drug-Drug Interaction Screener

check_drug_interactions
Read-onlyIdempotent

Screens medication regimens for critical or fatal drug-drug interactions, resolves trade brand names to generics, and flags pregnancy, pediatric, and geriatric contraindications.

Instructions

Screens patient medication regimens for critical, contraindicated, or fatal drug-drug interactions (DDIs), automatically resolves regional trade brand names to generic INN entities, and evaluates demographic contraindications (pregnancy, pediatric, geriatric).

When to use:

  • Evaluating prescription combinations or medication lists for dangerous interactions, QT prolongation, bleeding risks, or pregnancy contraindications.

When NOT to use:

  • Comprehensive clinical consultation triage with vital signs and symptom red flags (use check_red_flags instead).

  • Translating single brand names without DDI screening (use normalize_terminology instead).

  • Renal dosage adjustment or clinical clearance calculations (use calculate_clinical_score instead).

Parameter constraints & formats:

  • 'medications': Trade brand or generic medication names (e.g. ['Concor 5mg', 'Voltaren 75mg', 'Warfarin 5mg']).

  • 'patient_demographics':

    • age_years (0-120): Evaluates Beers Criteria geriatric (>65) and pediatric (<18) contraindications.

    • biological_sex: Sex-linked pharmacological risks ('male'|'female').

    • pregnancy_status: 'not_pregnant' (default), 'PREGNANT' (suspected), 'CONFIRMED_PREGNANT' (enforces strict FDA Category X blocks), or specific trimester ('first_trimester' to 'third_trimester').

Behavioral guarantees & return states:

  • Deterministic pharmacological rule engine grounded in curated interaction databases; stateless with zero external network calls or patient storage.

  • Auth & limits: Fully local execution; requires no API keys, credentials, or network auth, with zero rate limits.

  • Severity stratification: Interactions are categorized as 'CONTRAINDICATED' (fatal or severe co-administration hazard), 'MAJOR' (serious risk requiring intervention), or 'MODERATE' (monitoring recommended), each paired with safe therapeutic alternatives.

  • Error handling: Clean regimens return interactions_found_count=0; unrecognized brand names are reported in warnings without throwing exceptions.

Input Schema

NameRequiredDescriptionDefault
medicationsYesList of medication trade brand names or INN generic names (e.g., ['Concor', 'Voltaren', 'Warfarin', 'Aspirin', 'Sildenafil']).
patient_demographicsNoOptional patient demographic variables used to assess physiological contraindications (e.g., pregnancy, age-specific risks).

Output Schema

NameRequiredDescriptionDefault
interactionsYesList of detected interactions including severity level, clinical mechanism, immediate action, and safe therapeutic alternatives.
medications_checkedYesList of normalized medication identifiers that were evaluated.
interactions_found_countYesTotal number of severe, contraindicated, or moderate interactions identified.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed15 schema fields changedv0.1.2
    • addedInput schema / properties / medications / examples
      Added value: +[
      +  [
      +    "Concor 5mg",
      +    "Voltaren 75mg",
      +    "Warfarin 5mg",
      +    "Sildenafil 50mg"
      +  ]
      +]
    • addedInput schema / properties / medications / items / minLength
      Added value: +1
    • addedInput schema / properties / medications / minItems
      Added value: +1
    • changedInput schema / properties / patient_demographics / properties / age_years / description
      Previous value: -"Patient age in years to assess pediatric or geriatric medication contraindications."New value: +"Patient age in years to assess pediatric (<18) or geriatric (>65) contraindications."
    • addedInput schema / properties / patient_demographics / properties / age_years / examples
      Added value: +[
      +  68
      +]
    • addedInput schema / properties / patient_demographics / properties / age_years / maximum
      Added value: +120
    • addedInput schema / properties / patient_demographics / properties / age_years / minimum
      Added value: +0
    • addedInput schema / properties / patient_demographics / properties / biological_sex / examples
      Added value: +[
      +  "female"
      +]
    • addedInput schema / properties / patient_demographics / properties / pregnancy_status / default
      Added value: +"not_pregnant"
    • changedInput schema / properties / patient_demographics / properties / pregnancy_status / description
      Previous value: -"Pregnancy confirmation status (e.g. 'PREGNANT', 'CONFIRMED_PREGNANT', 'first_trimester', 'not_pregnant')."New value: +"Pregnancy confirmation status: 'not_pregnant', 'PREGNANT', 'CONFIRMED_PREGNANT', or trimester."
    • addedInput schema / properties / patient_demographics / properties / pregnancy_status / enum
      Added value: +[
      +  "not_pregnant",
      +  "PREGNANT",
      +  "CONFIRMED_PREGNANT",
      +  "first_trimester",
      +  "second_trimester",
      +  "third_trimester"
      +]
    • addedInput schema / properties / patient_demographics / properties / pregnancy_status / examples
      Added value: +[
      +  "not_pregnant"
      +]
    • addedOutput schema / properties / interactions / items / properties
      Added value: +{
      +  "clinical_effect": {
      +    "description": "Physiological or pathological consequence of the drug combination.",
      +    "type": "string"
      +  },
      +  "immediate_action": {
      +    "description": "Required clinical mitigation, discontinuation, or monitoring steps.",
      +    "type": "string"
      +  },
      +  "rule_id": {
      +    "description": "Unique identifier of the pharmacological interaction rule.",
      +    "type": "string"
      +  },
      +  "safe_alternatives": {
      +    "description": "Guideline-concordant alternative therapeutic options.",
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  "severity": {
      +    "description": "Severity level of the drug interaction.",
      +    "enum": [
      +      "CONTRAINDICATED",
      +      "MAJOR",
      +      "MODERATE"
      +    ],
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / properties / interactions / items / required
      Added value: +[
      +  "rule_id",
      +  "severity",
      +  "clinical_effect",
      +  "immediate_action"
      +]
    • addedOutput schema / required
      Added value: +[
      +  "medications_checked",
      +  "interactions_found_count",
      +  "interactions"
      +]
  2. Changed7 schema fields changedv0.1.1
    • changedInput schema / properties / medications / description
      Previous value: -"List of medication trade names or INN generic names (e.g. ['concor', 'voltaren', 'warfarin'])"New value: +"List of medication trade brand names or INN generic names (e.g., ['Concor', 'Voltaren', 'Warfarin', 'Aspirin', 'Sildenafil'])."
    • addedInput schema / properties / patient_demographics / description
      Added value: +"Optional patient demographic variables used to assess physiological contraindications (e.g., pregnancy, age-specific risks)."
    • addedInput schema / properties / patient_demographics / properties / age_years / description
      Added value: +"Patient age in years to assess pediatric or geriatric medication contraindications."
    • addedInput schema / properties / patient_demographics / properties / biological_sex / description
      Added value: +"Patient biological sex."
    • addedInput schema / properties / patient_demographics / properties / biological_sex / enum
      Added value: +[
      +  "male",
      +  "female"
      +]
    • addedInput schema / properties / patient_demographics / properties / pregnancy_status / description
      Added value: +"Pregnancy confirmation status (e.g. 'PREGNANT', 'CONFIRMED_PREGNANT', 'first_trimester', 'not_pregnant')."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "Report of screened medications, interaction count, and detailed descriptions of all detected critical interactions or contraindications.",
      +  "properties": {
      +    "interactions": {
      +      "description": "List of detected interactions including severity level, clinical mechanism, immediate action, and safe therapeutic alternatives.",
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "interactions_found_count": {
      +      "description": "Total number of severe, contraindicated, or moderate interactions identified.",
      +      "type": "integer"
      +    },
      +    "medications_checked": {
      +      "description": "List of normalized medication identifiers that were evaluated.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  3. First observedv0.1.0

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, closed-world, non-destructive), yet the description still adds real operational context: stateless execution, no network calls, no credentials, zero rate limits, deterministic rule engine, and defined error behavior for unrecognized brand names. It also discloses severity stratification tiers and that clean regimens return interactions_found_count=0. Slight redundancy between 'zero external network calls' and 'requires no API keys, credentials, or network auth' keeps it just short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded and sectioned with bold headers ('When to use', 'When NOT to use', 'Parameter constraints', 'Behavioral guarantees'), so an agent can scan to the relevant block. Some wording is padded — the auth/no-network claim is stated twice in adjacent sections — but no section is extraneous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with a nested demographics object and an existing output schema, the description supplies everything needed: scope, routing to alternatives, input formats, enum semantics for pregnancy states, failure modes, and the shape of a zero-result response. No material gap remains for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes beyond the schema by explaining what each demographic actually triggers: Beers Criteria geriatric (>65) and pediatric (<18) evaluation, sex-linked pharmacological risks, and that 'CONFIRMED_PREGNANT' enforces strict FDA Category X blocks versus the milder 'PREGNANT' state. It also clarifies that medications accept trade brands with dosages (e.g. 'Concor 5mg') as well as INN generics, which the schema only partly conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb (screens), a specific resource (patient medication regimens), and the exact hazard classes it targets (critical, contraindicated, fatal DDIs), plus the two secondary capabilities of brand-to-INN resolution and demographic contraindication checks. It is immediately distinguishable from siblings like normalize_terminology or calculate_clinical_score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'When to use' and 'When NOT to use' sections, with three named alternative siblings (check_red_flags, normalize_terminology, calculate_clinical_score) and the precise condition that routes to each. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.