just-prs-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PRS_MCP_HOST | No | HTTP server host | |
| PRS_MCP_MODE | No | Server mode: essentials or extended | essentials |
| PRS_MCP_PORT | No | HTTP server port | |
| PRS_MCP_HF_TOKEN | No | HuggingFace token for catalog upload | |
| PRS_MCP_CACHE_DIR | No | Root directory for cached data | |
| PRS_MCP_LOG_LEVEL | No | Logging level | |
| PRS_MCP_TRANSPORT | No | Transport type (stdio, http, etc.) | |
| FASTMCP_DOCKET_URL | No | Redis URL for background task backend | |
| PRS_MCP_DEFAULT_PANEL | No | Default reference panel | |
| PRS_MCP_DUCKDB_MEMORY_LIMIT | No | Memory limit for DuckDB | |
| PRS_MCP_DEFAULT_GENOME_BUILD | No | Default genome build (e.g., GRCh37, GRCh38) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_scoresA | Search the PGS Catalog for polygenic scores by free text. Case-insensitive substring match across PGS ID, score name, reported
trait, and EFO trait. Optionally filter to a genome build (GRCh37 /
GRCh38, harmonized cross-build scores included). Returns up to |
| score_infoA | Get cleaned metadata for a single PGS score by its ID (e.g. 'PGS000001'). |
| best_performanceA | Look up the best evaluation performance for a score (largest sample, EUR-preferred). Returns parsed effect sizes (OR/HR/Beta) and classification metrics (AUROC/C-index) plus pre-formatted display strings. |
| search_traitsA | Search the PGS Catalog REST API for traits by term. Upstream matching is exact-substring over labels and synonyms, so this
wrapper retries a few punctuation/order variants when the first query is
empty. By default, results include counts of directly associated PGS IDs
and child-trait PGS IDs; set |
| trait_infoA | Fetch a trait by ontology ID (EFO or MONDO) with its associated PGS IDs. |
| prs_job_statusA | Poll a long scoring/download job started by this server.
|
| list_prs_jobsA | List recent scoring/download jobs on this server process. Use after a client timeout to recover the |
| normalize_vcfA | Normalize a VCF to a quality-filtered genotype Parquet. This tool is optional preprocessing, not a prerequisite for scoring:
Strips the chr prefix, renames id→rsid, computes genotype from GT, applies
optional quality filters (FILTER allow-list, min DP, min QUAL), and writes
zstd-compressed Parquet. The output is a drop-in genotype source for
Idempotent: if the target Parquet already exists it is reused and the
(slow) normalization is skipped — Normalization is the slow step (seconds to minutes depending on VCF size).
Returns a |
| download_sample_genomeA | Download a public sample WGS VCF from Zenodo to try PRS without your own data. Two whole-genome sequencing (WGS) datasets open-sourced by the just-dna-lite project are pre-configured — download both when you want a multi-person comparison:
Pass The downloaded VCF lands under
Use Idempotent: if the target VCF already exists with the size Zenodo
reports, the ~hundreds-of-MB download is skipped and the cached file is
reused; likewise a present Parquet skips re-normalization. Returns a |
| list_genomesA | List genomes available in the server's cache directory. Scans Use this to discover genomes you can score or compare (Anton + Livia are the built-in pair):
No network access required — reads the local filesystem only. |
| vcf_metainfoA | Detect a genome's build, input type (WGS/array/gVCF), and genetic ancestry. One call that pairs WGS-vs-array/gVCF detection with population (super-population) inference, so before scoring you already know: the genome build (read from the VCF header), whether the input is whole-genome sequencing, a consumer genotyping array (and which chip), or a gVCF / all-sites callset, and the sample's inferred super-population. Pass The result carries ready-to-use recommendations:
|
| compute_prsA | Compute a polygenic risk score for one genome against one PGS model. Pass the raw VCF directly; a separate Reference restoration (F15/F22). Set Set Recommended follow-up: |
| compute_prs_batchA | Compute PRS for one genome against many PGS models. Pass the raw VCF directly; a separate normalization call is not required.
The tool transparently creates or reuses a collision-safe normalized cache,
then uses the memory-safe DuckDB engine with spill-to-disk. It reuses the
scoring caches across scores. This is still one genome × many PGS IDs.
For a trait panel across people, use
Returns a |
| compute_prs_by_traitA | Compute the PRS scores associated with a trait for one or more genomes. REQUIRED REPORT DELIVERY: when html_link is set, your reply MUST include it as a markdown link (for example Open the interactive trait report) and explicitly tell the user to open it. This is the primary user-facing result, not an implementation detail. Do not skip the link, merely say the report was saved, fetch it, or paste the HTML. html_link is an HTTP URL when available and a file:// URI on local stdio. Pass a raw .vcf/.vcf.gz path directly. Do NOT call normalize_vcf first as a prerequisite: multi-score tools transparently create or reuse a safe normalized cache, and single-score tools read the VCF directly. normalize_vcf is only an optional explicit step for custom filters. If list_genomes already shows a normalized Parquet, it can be passed directly.
Profile (curation):
This tool returns a PRSJob immediately. If status is queued or running, call prs_job_status(job_id, wait_seconds=25) until done or failed. Do not start a second identical compute — the server reuses the in-flight job. When done, html_link and result (TraitPRSReports) are on the job. Native multi-score work is isolated in a child process so a DuckDB/Polars crash fails the batch without killing the MCP transport. |
| percentileA | Estimate the population percentile (0-100) for a computed PRS value. Uses the 3-tier fallback: precomputed reference-panel distributions
(best), then a theoretical distribution, then an AUROC approximation.
Important next step: for disease traits, feed the returned
|
| absolute_riskA | Estimate absolute disease risk from a PRS z-score and population prevalence. Joins the score's trait to prevalence + effect-size data. |
| assess_qualityA | Classify and interpret a PRS result's quality (pure logic — no I/O).
|
| compare_genomesA | Compare saved by-trait PRS reports across two or more genomes.
Rankings use just-prs When every path is the same trait, |
| build_prs_promptA | Build the reusable just-prs LLM prompt from saved by-trait results. This is the MCP equivalent of
|
| plot_trait_panelA | Write the just-prs trait HTML report and return a URL or file path. REQUIRED REPORT DELIVERY: when html_link is set, your reply MUST include it as a markdown link (for example Open the interactive trait report) and explicitly tell the user to open it. This is the primary user-facing result, not an implementation detail. Do not skip the link, merely say the report was saved, fetch it, or paste the HTML. html_link is an HTTP URL when available and a file:// URI on local stdio. This is the MCP equivalent of |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| compute_prs_for_trait | Prompt template: find and compute PRS for a trait against one or more genomes. ``samples`` is a comma-separated ``Label=path`` list (one genome is fine). |
| interpret_prs_for_trait | Prompt template: interpretable by-trait PRS for one or more genomes. Encodes the recipe (resolve → ancestry → by-trait compute → concordance → compare when 2+ → caveats). ``samples`` is a comma-separated ``Label=path`` list (one genome is fine). |
| interpret_prs_result | Prompt template: interpret one PGS result for one genome. Prefer ``build_prs_prompt(kind='score')`` when you have a saved report. For several people, interpret each genome separately or use ``build_prs_prompt`` / ``compare_genomes`` on the full set. |
| interpret_trait_results | Prompt template: interpret one trait across models, for one genome or several. Prefer ``build_prs_prompt`` (and ``compare_genomes`` when 2+ reports exist) — those produce the same write-up as ``prs prompt`` / the UI Ask-AI buttons. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| panels | Reference panels, supported genome builds, and the active cache directory. |
| genomes | Genomes cached on the server: downloaded VCFs and normalized Parquets. Resource mirror of the ``list_genomes`` tool — the discovery surface a client enumerates to find the server-side paths it may pass as ``compute_prs`` / a ``compute_prs_by_trait`` ``samples`` entry, plus the pre-configured genomes it can fetch via ``download_sample_genome``. JSON, no network access. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/dna-seq/just-prs-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server