analyze_admet_properties
Calculate ADMET properties (Absorption, Distribution, Metabolism, Excretion, Toxicity) for compounds using ChEMBL compound IDs to assess drug-like characteristics.
Instructions
Analyze ADMET properties (Absorption, Distribution, Metabolism, Excretion, Toxicity)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| chembl_id | Yes | ChEMBL compound ID |
Implementation Reference
- src/index.ts:1412-1462 (handler)Main handler function for analyze_admet_properties tool. Fetches ChEMBL compound data, extracts molecular properties (MW, ALogP, HBD, HBA, PSA, etc.), computes ADMET assessments for absorption, distribution, and drug-likeness using helper methods, and returns structured JSON analysis.private async handleAnalyzeAdmetProperties(args: any) { if (!isValidChemblIdArgs(args)) { throw new McpError(ErrorCode.InvalidParams, 'Invalid ADMET analysis arguments'); } try { const response = await this.apiClient.get(`/molecule/${args.chembl_id}.json`); const molecule = response.data; const props = molecule.molecule_properties || {}; // Analyze ADMET-related properties from ChEMBL data const admetAnalysis = { chembl_id: args.chembl_id, absorption: { molecular_weight: props.full_mwt || props.molecular_weight, alogp: props.alogp, hbd: props.hbd, hba: props.hba, psa: props.psa, ro3_pass: props.ro3_pass, assessment: this.assessAbsorption(props), }, distribution: { logp: props.alogp, psa: props.psa, assessment: this.assessDistribution(props), }, drug_likeness: { lipinski_violations: props.num_ro5_violations, rotatable_bonds: props.rtb, aromatic_rings: props.aromatic_rings, assessment: this.assessDrugLikeness(props), }, molecular_properties: props, }; return { content: [ { type: 'text', text: JSON.stringify(admetAnalysis, null, 2), }, ], }; } catch (error) { throw new McpError( ErrorCode.InternalError, `Failed to analyze ADMET properties: ${error instanceof Error ? error.message : 'Unknown error'}` ); } }
- src/index.ts:638-647 (schema)Tool schema definition in the list of tools, specifying name, description, and input schema requiring a ChEMBL compound ID.name: 'analyze_admet_properties', description: 'Analyze ADMET properties (Absorption, Distribution, Metabolism, Excretion, Toxicity)', inputSchema: { type: 'object', properties: { chembl_id: { type: 'string', description: 'ChEMBL compound ID' }, }, required: ['chembl_id'], }, },
- src/index.ts:787-789 (registration)Tool dispatch registration in the CallToolRequestSchema switch statement, mapping the tool name to its handler function.case 'analyze_admet_properties': return await this.handleAnalyzeAdmetProperties(args); case 'calculate_descriptors':
- src/index.ts:1464-1476 (helper)Helper function to assess absorption properties based on Lipinski-like rules using MW, HBD, HBA, PSA.private assessAbsorption(props: any): string { const mw = props.full_mwt || props.molecular_weight || 0; const hbd = props.hbd || 0; const hba = props.hba || 0; const psa = props.psa || 0; if (mw > 500 || hbd > 5 || hba > 10 || psa > 140) { return 'Poor oral absorption predicted'; } else if (mw < 400 && hbd <= 3 && hba <= 7 && psa < 100) { return 'Good oral absorption predicted'; } return 'Moderate oral absorption predicted'; }
- src/index.ts:1478-1489 (helper)Helper function to assess distribution properties based on LogP and PSA, including CNS penetration prediction.private assessDistribution(props: any): string { const logp = props.alogp || 0; const psa = props.psa || 0; if (logp > 5) { return 'High lipophilicity - may accumulate in tissues'; } else if (logp < 0) { return 'Low lipophilicity - limited tissue distribution'; } else if (psa < 90 && logp > 0 && logp < 3) { return 'Good CNS penetration predicted'; } return 'Moderate distribution predicted';