Skip to main content
Glama
alfonsoguv

DeepDNA MCP server

by alfonsoguv

DeepDNA MCP server

A remote Model Context Protocol server that gives AI agents cited pharmacogenomic and gene-variant lookups, so the model quotes CPIC and DPWG guidance instead of recalling it from memory. This repository also holds a local package that reads a raw DNA file on the user's own computer; nothing from the file is sent to DeepDNA.

https://deepdna.ai/mcp

Streamable HTTP, stateless, no API key, no account. Listed in the official MCP registry as ai.deepdna/knowledge.

Educational information only, not medical advice. The server reports what curated sources and guidelines say about a gene, a variant or a drug–gene pair. It does not diagnose, prescribe or recommend a dose.

Tools

Tool

What it returns

list_genes

The genes in the knowledge base, with a one-line summary and category for each

lookup_gene

Everything curated about one gene: function, key variants with rsIDs, phenotypes, drug interactions, what a consumer genotyping array can and cannot tell you, and sources

lookup_variant

One variant by dbSNP rsID: gene, star-allele or common name, alleles, effect, frequency note, sources, and a reading block (plus-strand GRCh37 alleles, countable, strand_ambiguous). Takes the rsID only, never a genotype

lookup_drug_gene

Guidance for a gene, optionally for one drug: guideline (CPIC or DPWG where one exists), summary, phenotype groups and sources

check_medications

Splits a list of generic drug names into drugs with a curated record (gene, and a basis field: CPIC or DPWG guideline, drug label, or primary literature) and drugs not covered. Needs no genotype

request_beta_access

The only tool that writes: registers the user's interest in the private beta (email and optional use case). The agent must ask the user first and set user_consent: true. See the privacy policy

Two prompts, medication_review and explain_variant, package the common questions for clients that show MCP prompts.

Coverage today is 12 genes: CYP2C19, CYP2C9, CYP2D6, SLCO1B1, VKORC1, UGT1A1, G6PD, MTHFR, COMT, HFE, APOE and BRCA1, with 51 curated drug–gene pairs across 11 of them: 40 cite a CPIC or DPWG guideline, the rest a drug label or the primary literature; the basis field in check_medications says which (guideline is null, or "drug label", when no guideline exists). It is a small, reviewed set, not a mirror of PharmGKB/ClinPGx. Every record lists its sources. The level field (the guideline's evidence grade) is null for every pair today.

Related MCP server: GenomeMCP

Connect

Claude Code

claude mcp add --transport http deepdna https://deepdna.ai/mcp

Cursor (~/.cursor/mcp.json) and other clients that use an mcpServers file:

{
  "mcpServers": {
    "deepdna": { "type": "http", "url": "https://deepdna.ai/mcp" }
  }
}

VS Code (.vscode/mcp.json):

{
  "servers": {
    "deepdna": { "type": "http", "url": "https://deepdna.ai/mcp" }
  }
}

Claude Desktop and claude.ai: add https://deepdna.ai/mcp as a custom connector.

Try it without a client

curl -s https://deepdna.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"lookup_drug_gene","arguments":{"gene":"CYP2C19","drug":"clopidogrel"}}}'

The answer carries the CPIC recommendation for clopidogrel by CYP2C19 metabolizer group, the sources it was written from, and the disclaimer. The same data is available as plain REST, documented in the API docs and the OpenAPI spec:

GET https://deepdna.ai/api/v1/pgx/CYP2C19/clopidogrel
GET https://deepdna.ai/api/v1/variants/rs4244285

Read a raw DNA file on your own computer

The remote server takes no genotype: its tools have no field for one. For a raw DNA file there is a local package in this repository. It reads the file on the user's computer and reports what it shows at each position DeepDNA curates, with the cited records. Nothing from the file is sent to deepdna.ai: the package downloads the same public records for every user, and lookup_drug_gene sends only the gene and drug names. What read_dna_file returns (the letters and counts at the curated positions) becomes part of the conversation with the AI model your client uses, under that provider's terms.

Claude Code (needs uv; the package is on PyPI):

claude mcp add deepdna-local -- uvx deepdna-mcp@0.1.1

Clients that use an mcpServers file (if the client cannot find uvx, put its full path, from which uvx, in command):

{
  "mcpServers": {
    "deepdna-local": { "command": "uvx", "args": ["deepdna-mcp@0.1.1"] }
  }
}

Tool

What it returns

read_dna_file

What a 23andMe, AncestryDNA or MyHeritage/FamilyTreeDNA export (.txt, .csv or .zip) shows at each curated position

lookup_drug_gene

Guidance for a gene, optionally for one drug, from the public API. Sends only the gene and drug names

  • Each position gets one of four states: read, no_call, not_in_file, or unexpected_letters (letters that fit neither the record nor its complement). A missing or unreadable position is unknown, never normal.

  • For positions the record marks as countable (no phasing or other variants are needed to read them), it gives how many copies of the variant allele the file shows, with the record's text and sources.

  • genes limits the answer to what the user asked about. APOE, BRCA1 and HFE are disease-risk genes: they are read only when named in genes, so the user chooses what to learn.

  • sex is needed only for some chromosome X positions (G6PD).

  • It checks the file's strand first: at least three positions that are not A/T or C/G must agree, and none disagree. A/T and C/G positions, whose two letters look the same on either strand, are counted only on a confirmed strand.

A count at one position is not a metabolizer status, a diplotype, a diagnosis or a dose. The tools tell the model never to suggest starting, stopping or changing a medication: that stays with the prescriber. VCF files are not supported.

Try it with: "My 23andMe file is at /Users/me/Downloads/genome.txt. What does it show at the CYP2C19 positions DeepDNA curates, and what do the sources say about clopidogrel?" (on Windows, a path such as C:\Users\me\Downloads\genome.txt).

What it is not

  • The remote server does not read DNA files. Parsing on DeepDNA's servers is specified in the API but is in private beta and not deployed. A remote lookup carries a gene symbol, an rsID or a drug name. Its tools have no genotype field, and an undeclared argument is refused and not used. An agent that reads a raw DNA file itself compares the user's genotype with the reading block, outside DeepDNA. The reading block gives the reference and variant alleles on the plus strand of GRCh37, as 23andMe raw data reports it.

  • Neither server calls phenotypes or doses. Turning a genotype into a metabolizer status needs phasing and the other variants in the gene, which a single lookup or a chip file does not give. Tools such as PharmCAT do that from a VCF.

  • Remote usage is counted, people are not. Each request to the remote server is counted (method, tool, the lookup label described below, whether there was an answer, the client's name and version, its user-agent, a country code). IP addresses, request bodies and medication lists are not stored. A value typed into a declared field is recorded only as a short lookup label: an rsID in the form rs123, a gene from a fixed list of known pharmacogenes, or a drug DeepDNA covers; anything else, whatever it is, is recorded as "(other)". Please don't type a personal genetic result into these fields. The one exception is request_beta_access: it keeps the email and use case the user agrees to send, the signup metadata listed in the privacy policy (time, source, country code and the client's name), and a hashed IP for one hour to limit abuse. The local package's downloads are ordinary requests to the public API, with the user-agent deepdna-mcp-local/<version>.

  • A consumer chip is not a clinical test. Arrays are reliable for common variants and much less so for rare ones; anything that could affect a health decision needs a validated test and a clinician.

This repository holds the documentation and the local package; the remote server is hosted by DeepDNA. Questions and bug reports go in the issues; please don't post a raw DNA file, genotypes or medications there.

Written with AI assistance.

Available Tools

2 tools
lookup_drug_geneLook up drug-gene guidanceA
Read-onlyIdempotent

Cited pharmacogenomic guidance for a gene, optionally for one drug, from DeepDNA's public API: the guideline (CPIC or DPWG where one exists, otherwise a drug label or the primary literature), a summary and sources. Sends only the gene and drug names. The phenotype groups it lists are the guideline's own: do not place the user in one from read_dna_file counts. Educational information, not a dose or a prescription.

ParametersJSON Schema
NameRequiredDescriptionDefault
drugNoGeneric drug name, e.g. "clopidogrel"
geneYesGene symbol, e.g. "CYP2C19"

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), yet the description adds real context: only gene and drug names are transmitted (privacy), the source hierarchy (CPIC/DPWG, else drug label or primary literature), and a clear educational/non-prescriptive disclaimer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose and scope, with no filler. The middle clause enumerating guideline sources is dense but earns its place; overall slightly long for the payload.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return structure need not be re-explained. The description still covers the source hierarchy, the privacy of transmitted data, and the educational caveat — everything an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema; the description's 'optionally for one drug' only mildly reinforces optionality. With the schema doing the heavy lifting, this is the expected baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Cited pharmacogenomic guidance for a gene, optionally for one drug'), names the data source (DeepDNA public API), and states what is returned (guideline, summary, sources). It also distinguishes itself from the sibling read_dna_file by warning against inferring phenotype groups from that tool's counts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clarifies that the drug parameter is optional and gives explicit cross-tool guidance ('do not place the user in one from read_dna_file counts') plus a scope boundary ('educational information, not a dose or a prescription'). It does not spell out a full when-to-use/when-not-to-use decision rule, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_dna_fileRead a raw DNA file on this computerA
Read-onlyIdempotent

Read the user's raw DNA file (23andMe, AncestryDNA, MyHeritage or FamilyTreeDNA; .txt, .csv or .zip) on this computer and report, for each curated variant, one of four states: read, no_call, not_in_file, or unexpected_letters (the file's letters fit neither the record nor its complement). For positions the record marks as countable it gives how many copies of the variant allele the file shows, with the record's text and sources. Pass genes for what the user asked about (for example ["CYP2C19"] before discussing clopidogrel). APOE, BRCA1 and HFE are disease-risk genes: they are read only when named in genes, so do not offer or report them unless the user asks for them by name. A count at one position is not a metabolizer status, diplotype, diagnosis or dose: say so, and refer anything that could matter for health to a clinician and a validated test.

ParametersJSON Schema
NameRequiredDescriptionDefault
sexNoOnly if the user gives it: some chromosome X positions (G6PD) need it
pathYesFull path to the raw DNA file on this computer, e.g. /Users/name/Downloads/genome.txt
genesNoGene symbols the user asked about, e.g. ["CYP2C19"]

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnly, idempotent, non-destructive, openWorld); the description goes well beyond by disclosing the four possible per-variant states, the conditional gating of disease-risk genes, the chromosome-X/sex dependency for G6PD, and a required downstream behavior (defer health decisions to a clinician and validated test). These are operational rules an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Efficient and front-loaded: purpose, formats, return states, then parameter guidance, then safety constraints. It is on the dense/long side and the state enumeration partially overlaps the output schema, but every sentence carries operational weight — none is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, the description needn't enumerate return values yet does so usefully, and it covers the domain-specific risks of consumer genetics data (gene gating, non-diagnostic framing, clinician referral). Nothing an agent needs to call this correctly — input source, scoping, and interpretation limits — is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still adds meaning beyond the schema by framing `genes` as 'what the user asked about' with a worked example and tying `sex` to a specific consequence (G6PD chromosome X positions). It does not restate parameter types or defaults, which is correct given the schema already handles that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource pair ('Read the user's raw DNA file') and immediately narrows scope with supported vendors and file formats (.txt, .csv, .zip). The four output states (read, no_call, not_in_file, unexpected_letters) make the tool's contract concrete and clearly distinguish it from the lookup_drug_gene sibling, which operates on interpreted data rather than raw files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to pass `genes` ('what the user asked about, e.g. ["CYP2C19"] before discussing clopidogrel') and imposes a hard exclusion rule: APOE, BRCA1 and HFE 'are read only when named in `genes`, so do not offer or report them unless the user asks for them by name.' It also states the boundary of interpretation ('a count at one position is not a metabolizer status, diplotype, diagnosis or dose') and where to route health-relevant findings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.1.1
    • First observedlookup_drug_gene
    • First observedread_dna_file

TDQS

A4.4/5.0

Scored across 2 tools

Disambiguation5/5

The two tools are cleanly separated: read_dna_file operates on a local DNA file and reports variant states, while lookup_drug_gene is a read-only query against a remote pharmacogenomic API. There is no plausible way to confuse one for the other, and each description reinforces the boundary.

Naming Consistency5/5

Both names follow the same verb_noun snake_case pattern (read_dna_file, lookup_drug_gene), with verbs drawn from the same read-verb family and concrete noun objects. No casing or convention drift.

Tool Count3/5

Two tools is on the thin side even for a narrowly scoped read-only domain, though each tool is substantive rather than trivial. A helper for listing curated genes/variants or mapping drugs to genes would round out the surface.

Completeness3/5

The core loop (read a DNA file, then fetch gene/drug guidance) is covered, but there is no way to enumerate which variants or genes the record curates, discover which drugs map to a gene, or search a record by rsID. Agents must already know the gene names to pass in, which is a notable gap.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables real-time pharmacogenomics analysis, including variant clinical significance, drug-gene interactions, and dosing guidelines, by connecting to ClinVar, PharmGKB, gnomAD, and other databases.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to query clinical genomics databases, retrieve supporting literature, analyze population genetics, and visualize biological pathways.
    18
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI-driven pharmacogenomic analysis by querying structured genetic variant, drug response, and disease risk data. Supports natural language questions about medications, traits, and health risks based on user genome data, with privacy-first local execution.
    16
    28 npm
    12
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to query authoritative medical sources such as FDA, WHO, PubMed, RxNorm, and ClinicalTrials.gov for drug information, safety data, health statistics, clinical guidelines, pediatric resources, and evidence-graded literature. Runs locally with no API keys or data leaving the machine.
    56 npm
    ISC