High-performance MCP/API server for GTEx Portal genetic expression database
GTEx-Link provides 5 tools with HTTP Streamable transport and fastmcp framework. Tools have clear verb-based naming (get_, health_check, version_info) and well-structured parameter schemas with type declarations, defaults, and pagination support. However, descriptions are inconsistent in depth, some tools exceed the recommended length (194-char baseline) with verbose output examples, and output schemas are not formally documented. Error handling is minimal (no recovery guidance, no actionable errors in the tool definitions). Tool compositions are straightforward (read-only, single responsibility), but parameter relationships and field-level constraints could be clearer. No security issues detected (read-only tools, no secrets in params). Overall, this is a solidly competent domain-specific tool set with good fundamentals but missing documentation polish expected of A-grade servers.
Get individual sample gene expression data at the sample level. Required: Versioned GENCODE IDs. Optional: Filter by tissues, donor attributes. Returns: Individual sample expression values in TPM units.
Get median gene expression data across tissues. Required: Versioned GENCODE IDs (e.g., ENSG00000012048.20). Optional: Filter by specific tissues. Returns: Median expression values in TPM units.
Get top expressed genes for a specific tissue, sorted by median expression. Required: Single tissue. Returns: Top genes with highest median expression in that tissue.
Health check for the GTEx-Link service. Returns overall service status, GTEx API availability, cache status, and uptime.
Get version information for GTEx-Link and the API.
Output schemas not formally documented. Tool descriptions mention return values ('Median expression values in TPM units', 'Individual sample expression values', etc.) but do not specify structured response schema with field types, allowing LLMs to guess at result structure and potentially extract wrong fields.
Error handling absent from tool definitions. No guidance on recovery steps, retryable vs. fatal errors, or actionable error messages. If GTEx API is unavailable or query returns no results, the LLM has no direction for next steps.
Description length inconsistency. get_median_gene_expression description is ~180 chars (good); get_gene_expression is ~155 chars (good); but they include verbose output specification within the description text. Baseline is 194 chars, and these approach or exceed it with example-heavy language that LLMs may reuse literally.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 70 | 2026-07-28+ | v2 |
Parameter relationship documentation weak. 'tissueSiteDetailId' defaults to empty string with note 'Use ALL (empty) for all tissues', this creates an ambiguous contract where empty string and 'ALL' both mean the same thing. LLMs may pass both, or neither, causing confusion.
version_info description is brief (21 chars: 'Get version information for GTEx-Link and the API'). Meets minimum but lacks context on WHEN to call it (e.g., 'Call to verify API compatibility before starting analysis workflows') and WHAT it returns structurally.