Skip to main content
Glama
pubspro

medterms-mcp

lookup_ctcae

Retrieve NCI CTCAE grading criteria for an adverse event term to support oncology trial safety reporting.

Instructions

Look up NCI Common Terminology Criteria for Adverse Events (CTCAE) grading criteria for an adverse event. Essential for oncology clinical trial safety reporting.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
adverse_eventYesAdverse event term (e.g. 'neutropenia', 'nausea', 'peripheral neuropathy', 'QTc prolongation')

Implementation Reference

  • index.js:497-662 (registration)
    Tool registration for lookup_ctcae using server.tool() with name 'lookup_ctcae' and description about CTCAE grading lookup.
    server.tool(
      "lookup_ctcae",
      "Look up NCI Common Terminology Criteria for Adverse Events (CTCAE) grading criteria for an adverse event. Essential for oncology clinical trial safety reporting.",
      {
        adverse_event: z
          .string()
          .describe("Adverse event term (e.g. 'neutropenia', 'nausea', 'peripheral neuropathy', 'QTc prolongation')"),
      },
      async ({ adverse_event }) => {
        // Curated CTCAE v5.0 grading for most common oncology AEs
        const ctcae = {
          "neutropenia": {
            soc: "Investigations",
            grades: {
              1: "ANC <LLN - 1500/mm³",
              2: "ANC 1000 - <1500/mm³",
              3: "ANC 500 - <1000/mm³",
              4: "ANC <500/mm³",
              5: "Death",
            },
            notes: "ANC = Absolute Neutrophil Count. Grade 3/4 = dose-limiting toxicity in most protocols.",
          },
          "nausea": {
            soc: "Gastrointestinal disorders",
            grades: {
              1: "Loss of appetite without change in eating habits",
              2: "Oral intake decreased without significant weight loss or dehydration",
              3: "Inadequate oral caloric/fluid intake; tube feeding, TPN, or hospitalization indicated",
            },
            notes: "No Grade 4 or 5 for nausea alone.",
          },
          "vomiting": {
            soc: "Gastrointestinal disorders",
            grades: {
              1: "1-2 episodes in 24 hours",
              2: "3-5 episodes in 24 hours; IV fluids <24 hours",
              3: "≥6 episodes in 24 hours; IV fluids ≥24 hours; hospitalization indicated",
              4: "Life-threatening; urgent intervention indicated",
              5: "Death",
            },
            notes: "Distinguish from nausea — separate CTCAE terms.",
          },
          "peripheral neuropathy": {
            soc: "Nervous system disorders",
            grades: {
              1: "Asymptomatic; clinical or diagnostic observations only",
              2: "Moderate symptoms; limiting instrumental ADL",
              3: "Severe symptoms; limiting self-care ADL",
              4: "Life-threatening; urgent intervention indicated",
              5: "Death",
            },
            notes: "Includes peripheral sensory and motor neuropathy — code to most specific term.",
          },
          "fatigue": {
            soc: "General disorders and administration site conditions",
            grades: {
              1: "Fatigue relieved by rest",
              2: "Fatigue not relieved by rest; limiting instrumental ADL",
              3: "Fatigue not relieved by rest; limiting self-care ADL",
            },
            notes: "No Grade 4 or 5 for fatigue alone.",
          },
          "diarrhea": {
            soc: "Gastrointestinal disorders",
            grades: {
              1: "<4 stools/day over baseline; mild increase in ostomy output",
              2: "4-6 stools/day over baseline; IV fluids <24 hours; not interfering with ADL",
              3: "≥7 stools/day over baseline; IV fluids ≥24 hours; hospitalization; interfering with ADL",
              4: "Life-threatening; urgent intervention indicated",
              5: "Death",
            },
          },
          "qtc prolongation": {
            soc: "Cardiac disorders",
            grades: {
              1: "QTc 450-480 ms",
              2: "QTc 481-500 ms",
              3: "QTc ≥501 ms on at least 2 separate ECGs",
              4: "QTc ≥501 ms and/or >60 ms change from baseline; Torsade de pointes; ventricular fibrillation; urgent intervention indicated",
              5: "Death",
            },
            notes: "Use Fridericia formula (QTcF) unless protocol specifies otherwise.",
          },
          "thrombocytopenia": {
            soc: "Blood and lymphatic system disorders",
            grades: {
              1: "Platelets <LLN - 75,000/mm³",
              2: "Platelets 50,000 - <75,000/mm³",
              3: "Platelets 25,000 - <50,000/mm³",
              4: "Platelets <25,000/mm³",
              5: "Death",
            },
          },
          "hypertension": {
            soc: "Vascular disorders",
            grades: {
              1: "Prehypertension (systolic 120-139 or diastolic 80-89 mmHg)",
              2: "Stage 1 (systolic 140-159 or diastolic 90-99 mmHg); medical intervention indicated",
              3: "Stage 2 (systolic ≥160 or diastolic ≥100 mmHg); medical intervention indicated",
              4: "Life-threatening (malignant hypertension, transient or permanent neurologic deficit, hypertensive crisis)",
              5: "Death",
            },
          },
          "alopecia": {
            soc: "Skin and subcutaneous tissue disorders",
            grades: {
              1: "Hair loss of <50% of normal that is not obvious from a distance",
              2: "Hair loss of ≥50% of normal; wig or hairpiece necessary",
            },
            notes: "No Grade 3, 4, or 5 for alopecia.",
          },
        };
    
        const key = adverse_event.toLowerCase().trim();
        const match = ctcae[key] ||
          ctcae[Object.keys(ctcae).find(k => k.includes(key) || key.includes(k))];
    
        if (!match) {
          const available = Object.keys(ctcae).map(k =>
            k.charAt(0).toUpperCase() + k.slice(1)
          ).join(", ");
          return {
            content: [{
              type: "text",
              text: [
                `## CTCAE v5.0: "${adverse_event}"`,
                "",
                `_Term not found in curated index. Full CTCAE v5.0 available at:_`,
                `_https://ctep.cancer.gov/protocoldevelopment/electronic_applications/ctc.htm_`,
                "",
                `### Available in this server:`,
                available,
              ].join("\n")
            }]
          };
        }
    
        const gradeRows = Object.entries(match.grades)
          .map(([g, def]) => `| Grade ${g} | ${def} |`)
          .join("\n");
    
        const text = [
          `## CTCAE v5.0: ${adverse_event.charAt(0).toUpperCase() + adverse_event.slice(1)}`,
          "",
          `**SOC:** ${match.soc}`,
          match.notes ? `**Note:** ${match.notes}` : "",
          "",
          `### Grading Criteria`,
          `| Grade | Definition |`,
          `|-------|------------|`,
          gradeRows,
          "",
          `### Grading Context`,
          `- **Grade 1:** Mild — asymptomatic or mild symptoms`,
          `- **Grade 2:** Moderate — minimal intervention indicated`,
          `- **Grade 3:** Severe — hospitalization or dose modification usually required`,
          `- **Grade 4:** Life-threatening — urgent intervention required`,
          `- **Grade 5:** Death related to AE`,
          "",
          `_Source: NCI CTCAE v5.0 (November 2017). Reference: ctep.cancer.gov_`,
          `_Used in oncology clinical trial protocols for adverse event severity grading._`,
        ].filter(Boolean).join("\n");
    
        return { content: [{ type: "text", text }] };
      }
    );
  • Input schema defining the 'adverse_event' parameter as a zod string with description.
    {
      adverse_event: z
        .string()
        .describe("Adverse event term (e.g. 'neutropenia', 'nausea', 'peripheral neuropathy', 'QTc prolongation')"),
    },
  • Async handler function implementing the CTCAE v5.0 grade lookup logic. Contains a curated dictionary of adverse events with grading criteria, fuzzy matching logic, and formatted markdown response.
    async ({ adverse_event }) => {
      // Curated CTCAE v5.0 grading for most common oncology AEs
      const ctcae = {
        "neutropenia": {
          soc: "Investigations",
          grades: {
            1: "ANC <LLN - 1500/mm³",
            2: "ANC 1000 - <1500/mm³",
            3: "ANC 500 - <1000/mm³",
            4: "ANC <500/mm³",
            5: "Death",
          },
          notes: "ANC = Absolute Neutrophil Count. Grade 3/4 = dose-limiting toxicity in most protocols.",
        },
        "nausea": {
          soc: "Gastrointestinal disorders",
          grades: {
            1: "Loss of appetite without change in eating habits",
            2: "Oral intake decreased without significant weight loss or dehydration",
            3: "Inadequate oral caloric/fluid intake; tube feeding, TPN, or hospitalization indicated",
          },
          notes: "No Grade 4 or 5 for nausea alone.",
        },
        "vomiting": {
          soc: "Gastrointestinal disorders",
          grades: {
            1: "1-2 episodes in 24 hours",
            2: "3-5 episodes in 24 hours; IV fluids <24 hours",
            3: "≥6 episodes in 24 hours; IV fluids ≥24 hours; hospitalization indicated",
            4: "Life-threatening; urgent intervention indicated",
            5: "Death",
          },
          notes: "Distinguish from nausea — separate CTCAE terms.",
        },
        "peripheral neuropathy": {
          soc: "Nervous system disorders",
          grades: {
            1: "Asymptomatic; clinical or diagnostic observations only",
            2: "Moderate symptoms; limiting instrumental ADL",
            3: "Severe symptoms; limiting self-care ADL",
            4: "Life-threatening; urgent intervention indicated",
            5: "Death",
          },
          notes: "Includes peripheral sensory and motor neuropathy — code to most specific term.",
        },
        "fatigue": {
          soc: "General disorders and administration site conditions",
          grades: {
            1: "Fatigue relieved by rest",
            2: "Fatigue not relieved by rest; limiting instrumental ADL",
            3: "Fatigue not relieved by rest; limiting self-care ADL",
          },
          notes: "No Grade 4 or 5 for fatigue alone.",
        },
        "diarrhea": {
          soc: "Gastrointestinal disorders",
          grades: {
            1: "<4 stools/day over baseline; mild increase in ostomy output",
            2: "4-6 stools/day over baseline; IV fluids <24 hours; not interfering with ADL",
            3: "≥7 stools/day over baseline; IV fluids ≥24 hours; hospitalization; interfering with ADL",
            4: "Life-threatening; urgent intervention indicated",
            5: "Death",
          },
        },
        "qtc prolongation": {
          soc: "Cardiac disorders",
          grades: {
            1: "QTc 450-480 ms",
            2: "QTc 481-500 ms",
            3: "QTc ≥501 ms on at least 2 separate ECGs",
            4: "QTc ≥501 ms and/or >60 ms change from baseline; Torsade de pointes; ventricular fibrillation; urgent intervention indicated",
            5: "Death",
          },
          notes: "Use Fridericia formula (QTcF) unless protocol specifies otherwise.",
        },
        "thrombocytopenia": {
          soc: "Blood and lymphatic system disorders",
          grades: {
            1: "Platelets <LLN - 75,000/mm³",
            2: "Platelets 50,000 - <75,000/mm³",
            3: "Platelets 25,000 - <50,000/mm³",
            4: "Platelets <25,000/mm³",
            5: "Death",
          },
        },
        "hypertension": {
          soc: "Vascular disorders",
          grades: {
            1: "Prehypertension (systolic 120-139 or diastolic 80-89 mmHg)",
            2: "Stage 1 (systolic 140-159 or diastolic 90-99 mmHg); medical intervention indicated",
            3: "Stage 2 (systolic ≥160 or diastolic ≥100 mmHg); medical intervention indicated",
            4: "Life-threatening (malignant hypertension, transient or permanent neurologic deficit, hypertensive crisis)",
            5: "Death",
          },
        },
        "alopecia": {
          soc: "Skin and subcutaneous tissue disorders",
          grades: {
            1: "Hair loss of <50% of normal that is not obvious from a distance",
            2: "Hair loss of ≥50% of normal; wig or hairpiece necessary",
          },
          notes: "No Grade 3, 4, or 5 for alopecia.",
        },
      };
    
      const key = adverse_event.toLowerCase().trim();
      const match = ctcae[key] ||
        ctcae[Object.keys(ctcae).find(k => k.includes(key) || key.includes(k))];
    
      if (!match) {
        const available = Object.keys(ctcae).map(k =>
          k.charAt(0).toUpperCase() + k.slice(1)
        ).join(", ");
        return {
          content: [{
            type: "text",
            text: [
              `## CTCAE v5.0: "${adverse_event}"`,
              "",
              `_Term not found in curated index. Full CTCAE v5.0 available at:_`,
              `_https://ctep.cancer.gov/protocoldevelopment/electronic_applications/ctc.htm_`,
              "",
              `### Available in this server:`,
              available,
            ].join("\n")
          }]
        };
      }
    
      const gradeRows = Object.entries(match.grades)
        .map(([g, def]) => `| Grade ${g} | ${def} |`)
        .join("\n");
    
      const text = [
        `## CTCAE v5.0: ${adverse_event.charAt(0).toUpperCase() + adverse_event.slice(1)}`,
        "",
        `**SOC:** ${match.soc}`,
        match.notes ? `**Note:** ${match.notes}` : "",
        "",
        `### Grading Criteria`,
        `| Grade | Definition |`,
        `|-------|------------|`,
        gradeRows,
        "",
        `### Grading Context`,
        `- **Grade 1:** Mild — asymptomatic or mild symptoms`,
        `- **Grade 2:** Moderate — minimal intervention indicated`,
        `- **Grade 3:** Severe — hospitalization or dose modification usually required`,
        `- **Grade 4:** Life-threatening — urgent intervention required`,
        `- **Grade 5:** Death related to AE`,
        "",
        `_Source: NCI CTCAE v5.0 (November 2017). Reference: ctep.cancer.gov_`,
        `_Used in oncology clinical trial protocols for adverse event severity grading._`,
      ].filter(Boolean).join("\n");
    
      return { content: [{ type: "text", text }] };
    }
  • Curated CTCAE v5.0 data dictionary containing 10 adverse events (neutropenia, nausea, vomiting, peripheral neuropathy, fatigue, diarrhea, QTc prolongation, thrombocytopenia, hypertension, alopecia) with SOC, grade definitions, and notes.
    const ctcae = {
      "neutropenia": {
        soc: "Investigations",
        grades: {
          1: "ANC <LLN - 1500/mm³",
          2: "ANC 1000 - <1500/mm³",
          3: "ANC 500 - <1000/mm³",
          4: "ANC <500/mm³",
          5: "Death",
        },
        notes: "ANC = Absolute Neutrophil Count. Grade 3/4 = dose-limiting toxicity in most protocols.",
      },
      "nausea": {
        soc: "Gastrointestinal disorders",
        grades: {
          1: "Loss of appetite without change in eating habits",
          2: "Oral intake decreased without significant weight loss or dehydration",
          3: "Inadequate oral caloric/fluid intake; tube feeding, TPN, or hospitalization indicated",
        },
        notes: "No Grade 4 or 5 for nausea alone.",
      },
      "vomiting": {
        soc: "Gastrointestinal disorders",
        grades: {
          1: "1-2 episodes in 24 hours",
          2: "3-5 episodes in 24 hours; IV fluids <24 hours",
          3: "≥6 episodes in 24 hours; IV fluids ≥24 hours; hospitalization indicated",
          4: "Life-threatening; urgent intervention indicated",
          5: "Death",
        },
        notes: "Distinguish from nausea — separate CTCAE terms.",
      },
      "peripheral neuropathy": {
        soc: "Nervous system disorders",
        grades: {
          1: "Asymptomatic; clinical or diagnostic observations only",
          2: "Moderate symptoms; limiting instrumental ADL",
          3: "Severe symptoms; limiting self-care ADL",
          4: "Life-threatening; urgent intervention indicated",
          5: "Death",
        },
        notes: "Includes peripheral sensory and motor neuropathy — code to most specific term.",
      },
      "fatigue": {
        soc: "General disorders and administration site conditions",
        grades: {
          1: "Fatigue relieved by rest",
          2: "Fatigue not relieved by rest; limiting instrumental ADL",
          3: "Fatigue not relieved by rest; limiting self-care ADL",
        },
        notes: "No Grade 4 or 5 for fatigue alone.",
      },
      "diarrhea": {
        soc: "Gastrointestinal disorders",
        grades: {
          1: "<4 stools/day over baseline; mild increase in ostomy output",
          2: "4-6 stools/day over baseline; IV fluids <24 hours; not interfering with ADL",
          3: "≥7 stools/day over baseline; IV fluids ≥24 hours; hospitalization; interfering with ADL",
          4: "Life-threatening; urgent intervention indicated",
          5: "Death",
        },
      },
      "qtc prolongation": {
        soc: "Cardiac disorders",
        grades: {
          1: "QTc 450-480 ms",
          2: "QTc 481-500 ms",
          3: "QTc ≥501 ms on at least 2 separate ECGs",
          4: "QTc ≥501 ms and/or >60 ms change from baseline; Torsade de pointes; ventricular fibrillation; urgent intervention indicated",
          5: "Death",
        },
        notes: "Use Fridericia formula (QTcF) unless protocol specifies otherwise.",
      },
      "thrombocytopenia": {
        soc: "Blood and lymphatic system disorders",
        grades: {
          1: "Platelets <LLN - 75,000/mm³",
          2: "Platelets 50,000 - <75,000/mm³",
          3: "Platelets 25,000 - <50,000/mm³",
          4: "Platelets <25,000/mm³",
          5: "Death",
        },
      },
      "hypertension": {
        soc: "Vascular disorders",
        grades: {
          1: "Prehypertension (systolic 120-139 or diastolic 80-89 mmHg)",
          2: "Stage 1 (systolic 140-159 or diastolic 90-99 mmHg); medical intervention indicated",
          3: "Stage 2 (systolic ≥160 or diastolic ≥100 mmHg); medical intervention indicated",
          4: "Life-threatening (malignant hypertension, transient or permanent neurologic deficit, hypertensive crisis)",
          5: "Death",
        },
      },
      "alopecia": {
        soc: "Skin and subcutaneous tissue disorders",
        grades: {
          1: "Hair loss of <50% of normal that is not obvious from a distance",
          2: "Hair loss of ≥50% of normal; wig or hairpiece necessary",
        },
        notes: "No Grade 3, 4, or 5 for alopecia.",
      },
    };
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It does not mention read-only nature, error handling (e.g., term not found), or whether the output includes grade descriptions. This is a significant gap for a lookup tool.

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

Conciseness5/5

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

The description is two concise sentences with no wasted words. It front-loads the action ('Look up') and includes both the full name and acronym (CTCAE) for clarity.

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

Completeness3/5

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

Given the tool's simplicity (one parameter, no output schema), the description covers the basic purpose and domain. However, it omits any mention of output format (e.g., grade level descriptions) or behavior on invalid input, leaving some ambiguity about what the agent will receive.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter 'adverse_event', with examples given. The tool description adds domain-specific context but does not provide additional semantic meaning beyond what the schema already offers. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states it looks up CTCAE grading criteria for adverse events, specifying the resource (CTCAE) and action (look up grading). The phrase 'Essential for oncology clinical trial safety reporting' provides domain context. It distinguishes from sibling tools that focus on other terminologies (ICD, MedDRA, RxNorm) by focusing on CTCAE.

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

Usage Guidelines3/5

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

The description implies usage for oncology clinical trial safety reporting but does not explicitly state when to use this tool versus alternatives like lookup_meddra or search_medical_concept. No exclusions or when-not-to-use guidance is provided, leaving the agent to infer context.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pubspro/medterms-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server