Skip to main content
Glama

ensembl_compara

Analyze gene trees, homology relationships, species alignments, and evolutionary patterns across multiple species using comparative genomics data.

Instructions

Comparative genomics: gene trees, homology, species alignments, and evolutionary analysis. Covers /genetree/, /homology/, /alignment/* endpoints.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
gene_idNoGene ID for homology/gene tree analysis (e.g., 'ENSG00000141510', 'ENSG00000012048')
gene_symbolNoGene symbol (alternative to gene_id) (e.g., 'BRCA1', 'TP53', 'EGFR')
regionNoGenomic region for alignments in format 'chr:start-end' (e.g., '17:7565096-7590856', 'X:1000000-2000000', '6:25000000-35000000')
analysis_typeNoType of comparative analysis
speciesNoSpecies name (e.g., 'homo_sapiens', 'mus_musculus', 'pan_troglodytes')homo_sapiens
target_speciesNoTarget species for homology search (e.g., 'mus_musculus', 'pan_troglodytes', 'rattus_norvegicus')
homology_typeNoType of homology to retrieveall
alignedNoInclude aligned sequences

Implementation Reference

  • Direct handler function for the 'ensembl_compara' tool. Normalizes input arguments and calls the EnsemblApiClient's getComparativeData method to execute the comparative genomics logic.
    export async function handleCompara(args: any) {
      try {
        const normalizedArgs = normalizeEnsemblInputs(args);
        return await ensemblClient.getComparativeData(normalizedArgs);
      } catch (error) {
        return {
          error: error instanceof Error ? error.message : "Unknown error",
          success: false,
        };
      }
    }
  • Input schema definition for the 'ensembl_compara' tool, including parameters like gene_id, analysis_type (homology, genetree, etc.), species, and validation rules.
    {
      name: "ensembl_compara",
      description:
        "Comparative genomics: gene trees, homology, species alignments, and evolutionary analysis. Covers /genetree/*, /homology/*, /alignment/* endpoints.",
      inputSchema: {
        type: "object",
        properties: {
          gene_id: {
            type: "string",
            description:
              "Gene ID for homology/gene tree analysis (e.g., 'ENSG00000141510', 'ENSG00000012048')",
          },
          gene_symbol: {
            type: "string",
            description:
              "Gene symbol (alternative to gene_id) (e.g., 'BRCA1', 'TP53', 'EGFR')",
          },
          region: {
            type: "string",
            description:
              "Genomic region for alignments in format 'chr:start-end' (e.g., '17:7565096-7590856', 'X:1000000-2000000', '6:25000000-35000000')",
          },
          analysis_type: {
            type: "string",
            enum: ["homology", "genetree", "cafe_tree", "alignment"],
            description: "Type of comparative analysis",
          },
          species: {
            type: "string",
            description:
              "Species name (e.g., 'homo_sapiens', 'mus_musculus', 'pan_troglodytes')",
            default: "homo_sapiens",
          },
          target_species: {
            type: "string",
            description:
              "Target species for homology search (e.g., 'mus_musculus', 'pan_troglodytes', 'rattus_norvegicus')",
          },
          homology_type: {
            type: "string",
            enum: ["orthologues", "paralogues", "all"],
            description: "Type of homology to retrieve",
            default: "all",
          },
          aligned: {
            type: "boolean",
            description: "Include aligned sequences",
            default: false,
          },
        },
        anyOf: [
          { required: ["gene_id", "analysis_type"] },
          { required: ["gene_symbol", "analysis_type"] },
          { required: ["region", "analysis_type"] },
        ],
      },
    },
  • index.ts:139-147 (registration)
    MCP tool execution registration: switch case in CallToolRequestSchema handler that dispatches 'ensembl_compara' calls to the handleCompara function.
    case "ensembl_compara":
      return {
        content: [
          {
            type: "text",
            text: JSON.stringify(await handleCompara(args), null, 2),
          },
        ],
      };
  • Core helper method implementing the comparative genomics functionality by routing to appropriate Ensembl REST API endpoints based on analysis_type (homology, genetree, alignment, etc.).
    // Comparative genomics
    async getComparativeData(args: any): Promise<any> {
      const {
        gene_id,
        gene_symbol,
        region,
        analysis_type,
        species = "homo_sapiens",
        target_species,
        homology_type = "all",
        aligned,
      } = args;
      const params: Record<string, string> = {};
    
      if (aligned !== undefined) {
        params.aligned = aligned.toString();
      }
      if (target_species) {
        params.target_species = target_species;
      }
      if (homology_type !== "all") {
        params.type = homology_type;
      }
    
      switch (analysis_type) {
        case "homology":
          if (gene_id) {
            return this.makeRequest(`/homology/id/${species}/${gene_id}`, params);
          } else if (gene_symbol) {
            return this.makeRequest(
              `/homology/symbol/${species}/${gene_symbol}`,
              params
            );
          }
          throw new Error("Either gene_id or gene_symbol required for homology");
    
        case "genetree":
          if (gene_id) {
            return this.makeRequest(`/genetree/id/${gene_id}`, params);
          } else if (gene_symbol) {
            return this.makeRequest(
              `/genetree/member/symbol/${species}/${gene_symbol}`,
              params
            );
          }
          throw new Error("Either gene_id or gene_symbol required for gene tree");
    
        case "cafe_tree":
          if (gene_id) {
            return this.makeRequest(`/cafe/genetree/id/${gene_id}`, params);
          } else if (gene_symbol) {
            return this.makeRequest(
              `/cafe/genetree/member/symbol/${species}/${gene_symbol}`,
              params
            );
          }
          throw new Error("Either gene_id or gene_symbol required for cafe tree");
    
        case "alignment":
          if (!region) throw new Error("region required for alignment");
          return this.makeRequest(
            `/alignment/region/${species}/${region}`,
            params
          );
    
        default:
          throw new Error(`Unknown analysis_type: ${analysis_type}`);
      }
    }
  • index.ts:47-50 (registration)
    MCP tool listing registration: handler for ListToolsRequestSchema that returns the ensemblTools array, making 'ensembl_compara' discoverable.
    this.server.setRequestHandler(ListToolsRequestSchema, async () => {
      return {
        tools: ensemblTools,
      };

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/effieklimi/ensembl-mcp-server'

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