Skip to main content
Glama

Medical Calculator MCP Service

homa_ir_calculator.py4.49 kB
""" HOMA-IR Calculator 胰岛素抵抗指数计算器的 FastMCP 2.0 实现 """ from typing import Dict, Any from medcalc import ( BaseCalculator, CalculatorInfo, Parameter, ParameterType, ValidationResult, CalculationResult, register_calculator ) from medcalc.utils import round_number @register_calculator("homa_ir") class HOMAIRCalculator(BaseCalculator): """HOMA-IR 胰岛素抵抗指数计算器实现""" def get_info(self) -> CalculatorInfo: return CalculatorInfo( id=31, name="HOMA-IR (Insulin Resistance Index)", category="laboratory", description="Calculate HOMA-IR using the formula: (insulin × glucose) / 405", parameters=[ Parameter( name="insulin", type=ParameterType.NUMERIC, required=True, unit="µIU/mL", min_value=1, max_value=100, description="Fasting insulin level in µIU/mL" ), Parameter( name="glucose", type=ParameterType.NUMERIC, required=True, unit="mg/dL", min_value=50, max_value=400, description="Fasting glucose level in mg/dL" ) ] ) def validate_parameters(self, params: Dict[str, Any]) -> ValidationResult: """验证输入参数""" errors = [] # 验证胰岛素 if "insulin" not in params: errors.append("Insulin is required") else: try: insulin = float(params["insulin"]) if insulin < 1 or insulin > 100: errors.append("Insulin must be between 1 and 100 µIU/mL") except (ValueError, TypeError): errors.append("Insulin must be a valid number") # 验证葡萄糖 if "glucose" not in params: errors.append("Glucose is required") else: try: glucose = float(params["glucose"]) if glucose < 50 or glucose > 400: errors.append("Glucose must be between 50 and 400 mg/dL") except (ValueError, TypeError): errors.append("Glucose must be a valid number") return ValidationResult( is_valid=len(errors) == 0, errors=errors ) def calculate(self, params: Dict[str, Any]) -> CalculationResult: """计算 HOMA-IR""" # 验证参数 validation = self.validate_parameters(params) if not validation.is_valid: raise ValueError(f"Invalid parameters: {', '.join(validation.errors)}") # 获取参数值 insulin = float(params["insulin"]) glucose = float(params["glucose"]) # 计算 HOMA-IR # 公式: (insulin × glucose) / 405 homa_ir = (insulin * glucose) / 405 homa_ir_rounded = round_number(homa_ir) # 构建解释说明 explanation = ( f"HOMA-IR (Homeostatic Model Assessment of Insulin Resistance) calculation:\n" f"Formula: (Insulin × Glucose) / 405\n" f"Where:\n" f"- Insulin = {insulin} µIU/mL (fasting)\n" f"- Glucose = {glucose} mg/dL (fasting)\n\n" f"Calculation:\n" f"HOMA-IR = ({insulin} × {glucose}) / 405\n" f"HOMA-IR = {insulin * glucose} / 405\n" f"HOMA-IR = {homa_ir_rounded}" ) # 添加临床意义 if homa_ir_rounded < 1.0: clinical_note = "Normal insulin sensitivity" elif homa_ir_rounded < 2.5: clinical_note = "Early insulin resistance" elif homa_ir_rounded < 5.0: clinical_note = "Significant insulin resistance" else: clinical_note = "Severe insulin resistance" return CalculationResult( value=homa_ir_rounded, unit="", explanation=explanation, metadata={ "insulin": insulin, "glucose": glucose, "clinical_note": clinical_note, "interpretation": "Higher values indicate greater insulin resistance" } )

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