@hovatar/platlas-mcp
v0.1.0
Published
MCP server for PLATLAS — a GWAS/pheWAS atlas of 1167 phenotypes across 5 ancestry groups on GRCh38.
Downloads
20
Maintainers
Readme
platlas-mcp
An MCP server for PLATLAS — a pleiotropy atlas of 1,167 phenotypes × ~60M GRCh38 variants across five ancestry groups. It lets an AI assistant query the atlas directly: single-variant pheWAS, batch triage of a candidate list, ancestry comparison, and trait-first locus lookup.
Read-only. Three dependencies. No build step.
Install
Requires Node.js 20+. Nothing to clone — npx fetches the server on demand.
Claude Code
claude mcp add platlas -- npx -y @hovatar/platlas-mcpClaude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"platlas": {
"command": "npx",
"args": ["-y", "@hovatar/platlas-mcp"]
}
}
}From source
Useful if you want to read or modify the tools:
git clone https://github.com/Hovatar/platlas-mcp.git ~/platlas-mcp
cd ~/platlas-mcp && npm install
claude mcp add platlas -- node ~/platlas-mcp/src/index.jsVerify it connected
Ask your assistant: "Using PLATLAS, what traits is 16:53767042:T:C associated with?" — expect ~104 phenotypes led by Body Mass Index. If it answers without calling a tool, it is not connected.
Configuration
| variable | default | purpose |
|---|---|---|
| PLATLAS_API_BASE | https://platlas.hovatar.app | point at a local instance, e.g. http://localhost:8899 |
| PLATLAS_TIMEOUT_MS | 60000 | per-request timeout |
Tools
| tool | answers |
|---|---|
| platlas_find_traits | "what's the id for LDL cholesterol?" — start here when the user names a trait in words |
| platlas_variant_phewas | "what traits is this variant associated with?" |
| platlas_screen_variants | "rank these 200 candidate variants" |
| platlas_compare_ancestries | "is this effect European-specific?" |
| platlas_trait_loci | "what loci does type 2 diabetes have in EUR?" |
Every result opens with a CENSUS block giving whole-result totals before any row, so truncation can never be mistaken for the full answer, and closes with a HOW TO READ THIS footer. Tables are TSV — cheap in tokens and pasteable into R or pandas unchanged.
What this data will not tell you
These are properties of the atlas, not limitations of the server, and the tools state each one where it matters rather than letting a model infer otherwise.
Absence is not a null result. Summary statistics are retained only where p < 1e-4. There is
no sub-threshold baseline. A phenotype missing from a result was not necessarily tested and null —
its statistics may simply not have been retained. scope="tested" and platlas_compare_ancestries
separate the four real states: significant, sub-threshold, not-retained, and never-released.
"EUR only" is usually study design. 609 of 1,167 phenotypes were released in exactly one ancestry group (608 of them EUR-only); only 47 exist in all five. Per-group coverage is EUR 1,154, ALL 558, AFR 328, EAS 93, AMR 61. A signal appearing only in Europeans is far more often a statement about what was run than about biology.
ALL is not a population. It is the trans-ancestry MR-MEGA meta-analysis — not the union of
the other four, and not independent replication.
Loci are distance-clumped, not LD-clumped. 500 kb windows, no reference panel, no r². Two independent signals within 500 kb collapse into one; two variants further apart appear separately even in LD. The locus count is an approximation, never a causal-variant count.
No rsIDs, no gene symbols. rsid and nearest_gene are null on every row. Variants are
addressable only as chr:pos:ref:alt on GRCh38 autosomes 1–22, and allele order is part of the
key — 16:53767042:T:C exists, 16:53767042:C:T does not. Given an rsID or a gene name, the
tools refuse rather than guess coordinates.
Phecodes are hierarchical and correlated. Phe_250 is the parent of Phe_250_2. A variant
significant across six diabetes phecodes has one signal, not six; results flag this.
The phenotype catalog's own population list is unreliable. It overstates for 556 phenotypes (naming SAS for 412, which is in no release) and understates for 558. Ancestry availability is read only from the release metadata.
Development
PLATLAS_API_BASE=http://localhost:8899 npm testTests hit a live PLATLAS; they assert shape and invariants rather than exact counts, so a data refresh does not break them.
