get_variants
Retrieve genetic variants within a specified genomic region from GTEx datasets to support genomic research and analysis.
Instructions
Get genetic variants in a genomic region
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| chr | Yes | Chromosome (e.g., chr1, chr2, chrX) | |
| datasetId | No | GTEx dataset ID (default: gtex_v8) | gtex_v8 |
| end | Yes | End position (1-based) | |
| start | Yes | Start position (1-based) |
Implementation Reference
- Core handler function implementing the get_variants tool. Validates input, calls API client, formats variant data into a readable markdown summary including genomic positions, alleles, dbSNP IDs, and population genetics info.async getVariants(args: any) { if (!args.snpId && !args.variantId && !args.chromosome) { throw new Error('At least one of snpId, variantId, or chromosome must be provided'); } const result = await this.apiClient.getVariants({ snpId: args.snpId, variantId: args.variantId, datasetId: args.datasetId || 'gtex_v8', chromosome: args.chromosome, pos: args.positions ? (Array.isArray(args.positions) ? args.positions : [args.positions]) : undefined, page: args.page || 0, itemsPerPage: args.itemsPerPage || 250 }); if (result.error) { return { content: [{ type: "text", text: `Error retrieving variant information: ${result.error}` }], isError: true }; } const variants = result.data || []; if (variants.length === 0) { return { content: [{ type: "text", text: "No variants found matching the specified criteria." }] }; } let output = `**Variant Information (${variants.length} variants)**\n`; output += `Dataset: ${variants[0]?.datasetId}\n\n`; variants.forEach((variant, index) => { output += `### ${index + 1}. ${variant.variantId}\n`; output += `**Genomic Information:**\n`; output += ` • Position: ${variant.chromosome}:${variant.pos.toLocaleString()}\n`; output += ` • Alleles: ${variant.ref} → ${variant.alt}\n`; if (variant.snpId && variant.snpId !== 'nan') { output += ` • dbSNP ID: ${variant.snpId}\n`; } if (variant.b37VariantId) { output += ` • GRCh37 ID: ${variant.b37VariantId}\n`; } output += `\n**Population Genetics:**\n`; output += ` • MAF ≥1%: ${variant.maf01 ? 'Yes' : 'No'}\n`; if (variant.shorthand) { output += ` • Shorthand: ${variant.shorthand}\n`; } output += '\n'; }); if (result.paging_info && result.paging_info.totalNumberOfItems > variants.length) { output += `**Note:** Showing ${variants.length} of ${result.paging_info.totalNumberOfItems} total results.\n`; } return { content: [{ type: "text", text: output.trim() }] }; }
- src/index.ts:727-732 (registration)Tool dispatch/registration in the main MCP server CallToolRequest handler. Maps input parameters (chr, start, end, datasetId) to the referenceHandlers.getVariants method.if (name === "get_variants") { return await referenceHandlers.getVariants({ chromosome: args?.chr, positions: args?.start && args?.end ? [args.start, args.end] : undefined, datasetId: args?.datasetId });
- src/index.ts:421-446 (schema)MCP tool registration including name, description, and input schema definition for get_variants in the ListTools response.name: "get_variants", description: "Get genetic variants in a genomic region", inputSchema: { type: "object", properties: { chr: { type: "string", description: "Chromosome (e.g., chr1, chr2, chrX)" }, start: { type: "integer", description: "Start position (1-based)" }, end: { type: "integer", description: "End position (1-based)" }, datasetId: { type: "string", description: "GTEx dataset ID (default: gtex_v8)", default: "gtex_v8" } }, required: ["chr", "start", "end"] } },
- src/types/gtex-types.ts:425-433 (schema)TypeScript interface defining parameters for the getVariants API call, used by the handler and API client.export interface GetVariantsParams { snpId?: string; variantId?: string; datasetId?: string; chromosome?: string; pos?: number[]; page?: number; itemsPerPage?: number; }
- src/utils/api-client.ts:253-269 (helper)API client method that makes the HTTP request to GTEx Portal API /dataset/variant endpoint to fetch variant data.async getVariants(params: GetVariantsParams): Promise<GTExApiResponse<Variant[]>> { try { const queryParams = this.buildQueryParams({ snpId: params.snpId, variantId: params.variantId, datasetId: params.datasetId || 'gtex_v8', chromosome: params.chromosome, pos: params.pos, page: params.page || 0, itemsPerPage: params.itemsPerPage || 250 }); const response = await this.axiosInstance.get(`/dataset/variant?${queryParams}`); return { data: response.data.data, paging_info: response.data.paging_info }; } catch (error) {