Skip to main content
Glama

Medical Calculator MCP Service

steroid_conversion_calculator.py6.81 kB
""" Steroid Conversion Calculator """ from typing import Dict, Any from medcalc import ( BaseCalculator, CalculatorInfo, Parameter, ParameterType, ValidationResult, CalculationResult, register_calculator ) from medcalc.utils import round_number @register_calculator("steroid_conversion") class SteroidConversionCalculator(BaseCalculator): """类固醇转换计算器实现""" def get_info(self) -> CalculatorInfo: steroid_choices = [ "Betamethasone IV", "Cortisone PO", "Dexamethasone IV", "Dexamethasone PO", "Hydrocortisone IV", "Hydrocortisone PO", "MethylPrednisoLONE IV", "MethylPrednisoLONE PO", "PrednisoLONE PO", "PredniSONE PO", "Triamcinolone IV" ] return CalculatorInfo( id=24, name="Steroid Conversion Calculator", category="pharmacology", description="Convert between equivalent doses of different corticosteroids", parameters=[ Parameter( name="input_steroid", type=ParameterType.CHOICE, required=True, choices=steroid_choices, description="Input steroid type and route" ), Parameter( name="input_dose", type=ParameterType.NUMERIC, required=True, unit="mg", min_value=0.001, max_value=1000, description="Input steroid dose in mg" ), Parameter( name="target_steroid", type=ParameterType.CHOICE, required=True, choices=steroid_choices, description="Target steroid type and route" ) ] ) def validate_parameters(self, parameters: Dict[str, Any]) -> ValidationResult: """验证输入参数""" errors = [] # 获取参数值 input_steroid = parameters.get("input_steroid") input_dose = parameters.get("input_dose") target_steroid = parameters.get("target_steroid") # 验证必需参数 if input_steroid is None: errors.append("input_steroid is required") if input_dose is None: errors.append("input_dose is required") elif not isinstance(input_dose, (int, float)) or input_dose <= 0: errors.append("input_dose must be a positive number") if target_steroid is None: errors.append("target_steroid is required") return ValidationResult(is_valid=len(errors) == 0, errors=errors) def calculate(self, parameters: Dict[str, Any]) -> CalculationResult: """计算类固醇转换""" # 转换因子字典(相对于0.75mg基准) conversion_dict = { "Betamethasone IV": 1, "Cortisone PO": 33.33, "Dexamethasone IV": 1, "Dexamethasone PO": 1, "Hydrocortisone IV": 26.67, "Hydrocortisone PO": 26.67, "MethylPrednisoLONE IV": 5.33, "MethylPrednisoLONE PO": 5.33, "PrednisoLONE PO": 6.67, "PredniSONE PO": 6.67, "Triamcinolone IV": 5.33 } # 等效剂量字典(mg) equivalent_doses = { "Betamethasone IV": 0.75, "Cortisone PO": 25, "Dexamethasone IV": 0.75, "Dexamethasone PO": 0.75, "Hydrocortisone IV": 20, "Hydrocortisone PO": 20, "MethylPrednisoLONE IV": 4, "MethylPrednisoLONE PO": 4, "PrednisoLONE PO": 5, "PredniSONE PO": 5, "Triamcinolone IV": 4 } # 获取参数值 input_steroid = parameters["input_steroid"] input_dose = float(parameters["input_dose"]) target_steroid = parameters["target_steroid"] # 计算转换 from_multiplier = conversion_dict[input_steroid] to_multiplier = conversion_dict[target_steroid] conversion_factor = round_number(to_multiplier / from_multiplier) converted_amount = round_number(input_dose * conversion_factor) # 生成解释 explanation = self._generate_explanation( input_steroid, input_dose, target_steroid, conversion_factor, converted_amount, equivalent_doses ) return CalculationResult( value=converted_amount, unit="mg", explanation=explanation, metadata={ "input_steroid": input_steroid, "input_dose_mg": input_dose, "target_steroid": target_steroid, "conversion_factor": conversion_factor, "converted_dose_mg": converted_amount, "input_equivalent_dose": equivalent_doses[input_steroid], "target_equivalent_dose": equivalent_doses[target_steroid] } ) def _generate_explanation(self, input_steroid: str, input_dose: float, target_steroid: str, conversion_factor: float, converted_amount: float, equivalent_doses: Dict) -> str: """生成计算解释""" explanation = """Steroid Conversion Calculator The following are equivalent doses for various corticosteroids: 1. Betamethasone: Route = IV, Equivalent Dose = 0.75 mg 2. Cortisone: Route = PO, Equivalent Dose = 25 mg 3. Dexamethasone (Decadron): Route = IV or PO, Equivalent Dose = 0.75 mg 4. Hydrocortisone: Route = IV or PO, Equivalent Dose = 20 mg 5. MethylPrednisoLONE: Route = IV or PO, Equivalent Dose = 4 mg 6. PrednisoLONE: Route = PO, Equivalent Dose = 5 mg 7. PredniSONE: Route = PO, Equivalent Dose = 5 mg 8. Triamcinolone: Route = IV, Equivalent Dose = 4 mg """ explanation += f"Converting {input_dose} mg of {input_steroid} to {target_steroid}:\n\n" explanation += f"Input steroid equivalent dose: {equivalent_doses[input_steroid]} mg\n" explanation += f"Target steroid equivalent dose: {equivalent_doses[target_steroid]} mg\n" explanation += f"Conversion factor: {conversion_factor}\n\n" explanation += f"Calculation: {input_dose} mg × {conversion_factor} = {converted_amount} mg\n\n" explanation += f"Therefore, {input_dose} mg of {input_steroid} is equivalent to {converted_amount} mg of {target_steroid}." return explanation

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/winninghealth/medcalcmcp'

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