Skip to main content
Glama
taehojo
by taehojo

compare_protective_risk

Compare protective and risk alleles side-by-side to analyze opposite disease associations for mechanism studies and therapeutic target identification.

Instructions

Compare protective vs risk alleles directly.

Side-by-side comparison of alleles with opposite disease associations.

Perfect for: disease mechanism studies, therapeutic target identification.

Example: "Compare APOE protective allele vs risk allele"

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
protective_variantYes
risk_variantYes

Implementation Reference

  • Defines the Tool object for 'compare_protective_risk' including name, description, and input schema requiring protective_variant and risk_variant objects.
    export const COMPARE_PROTECTIVE_RISK_TOOL: Tool = {
      name: 'compare_protective_risk',
      description: `Compare protective vs risk alleles directly.
    
    Side-by-side comparison of alleles with opposite disease associations.
    
    Perfect for: disease mechanism studies, therapeutic target identification.
    
    Example: "Compare APOE protective allele vs risk allele"`,
      inputSchema: {
        type: 'object',
        properties: {
          protective_variant: {
            type: 'object',
            properties: {
              chromosome: { type: 'string', pattern: '^chr([1-9]|1[0-9]|2[0-2]|X|Y)$' },
              position: { type: 'number', minimum: 1 },
              ref: { type: 'string', pattern: '^[ATGCatgc]+$' },
              alt: { type: 'string', pattern: '^[ATGCatgc]+$' },
            },
            required: ['chromosome', 'position', 'ref', 'alt'],
          },
          risk_variant: {
            type: 'object',
            properties: {
              chromosome: { type: 'string', pattern: '^chr([1-9]|1[0-9]|2[0-2]|X|Y)$' },
              position: { type: 'number', minimum: 1 },
              ref: { type: 'string', pattern: '^[ATGCatgc]+$' },
              alt: { type: 'string', pattern: '^[ATGCatgc]+$' },
            },
            required: ['chromosome', 'position', 'ref', 'alt'],
          },
        },
        required: ['protective_variant', 'risk_variant'],
      },
    };
  • src/tools.ts:709-730 (registration)
    Registers COMPARE_PROTECTIVE_RISK_TOOL in the ALL_TOOLS array used by the MCP listTools handler.
    export const ALL_TOOLS: Tool[] = [
      PREDICT_VARIANT_TOOL,
      BATCH_SCORE_TOOL,
      ASSESS_PATHOGENICITY_TOOL,
      PREDICT_TISSUE_SPECIFIC_TOOL,
      COMPARE_VARIANTS_TOOL,
      PREDICT_SPLICE_IMPACT_TOOL,
      PREDICT_EXPRESSION_IMPACT_TOOL,
      ANALYZE_GWAS_LOCUS_TOOL,
      COMPARE_ALLELES_TOOL,
      BATCH_TISSUE_COMPARISON_TOOL,
      PREDICT_TF_BINDING_IMPACT_TOOL,
      PREDICT_CHROMATIN_IMPACT_TOOL,
      COMPARE_PROTECTIVE_RISK_TOOL,
      BATCH_PATHOGENICITY_FILTER_TOOL,
      COMPARE_VARIANTS_SAME_GENE_TOOL,
      PREDICT_ALLELE_SPECIFIC_EFFECTS_TOOL,
      ANNOTATE_REGULATORY_CONTEXT_TOOL,
      BATCH_MODALITY_SCREEN_TOOL,
      GENERATE_VARIANT_REPORT_TOOL,
      EXPLAIN_VARIANT_IMPACT_TOOL,
    ];
  • MCP server request handler for 'compare_protective_risk' tool call, invokes AlphaGenomeClient and returns JSON-formatted result.
    case 'compare_protective_risk': {
      const result = await getClient().compareProtectiveRisk(args);
      return {
        content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
      };
    }
  • AlphaGenomeClient method that forwards compare_protective_risk parameters to the Python bridge via callPythonBridge.
    async compareProtectiveRisk(params: any): Promise<any> {
      try {
        return await this.callPythonBridge('compare_protective_risk', params);
      } catch (error) {
        if (error instanceof ApiError) throw error;
        throw new ApiError(`Protective vs risk comparison failed: ${error}`, 500);
      }
    }
  • Core handler function in Python bridge that implements the tool logic by predicting variant effects for protective and risk variants and returning a comparison dictionary.
    def compare_protective_risk(client, params: Dict[str, Any]) -> Dict[str, Any]:
        """Compare protective vs risk alleles."""
        protective = params.get('protective_variant')
        risk = params.get('risk_variant')
    
        result_protective = predict_variant_effect(client, protective)
        result_risk = predict_variant_effect(client, risk)
    
        return {
            'protective': {
                'variant': result_protective['variant'],
                'impact': result_protective['interpretation']['impact_level'],
                'expression_fc': result_protective['predictions'].get('rna_seq', {}).get('fold_change', 0)
            },
            'risk': {
                'variant': result_risk['variant'],
                'impact': result_risk['interpretation']['impact_level'],
                'expression_fc': result_risk['predictions'].get('rna_seq', {}).get('fold_change', 0)
            }
        }

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/taehojo/alphagenome-mcp'

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