# BioMCP-TS (npm · biomcp)

Biomedical MCP server: genes, variants, trials, literature, patents, optional SQL/R/biowasm tools.

- Trust score: 79/100 (medium)
- Change this week: +18
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-21

## Components

- npm · `biomcp`: 79/100 (this document), [markdown](https://verifymcp.io/servers/yeyuan98-biomcp-ts/biomcp.md), [page](https://verifymcp.io/servers/yeyuan98-biomcp-ts/biomcp)

## Channel facts

- Registry: `npm`
- Package: `biomcp`
- Version: `1.4.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-21.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 0 of 1 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 1 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 69/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 6077 tokens (~148/item across 41 items; 41 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 70/100
  - Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 98/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 94% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 41 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 41 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the BioMCP-TS MCP server?

BioMCP-TS runs locally as an npm package, launched with npx -y biomcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add yeyuan98-biomcp-ts -- npx -y biomcp
```

### Cursor

```json
{
  "mcpServers": {
    "yeyuan98-biomcp-ts": {
      "command": "npx",
      "args": [
        "-y",
        "biomcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "yeyuan98-biomcp-ts": {
      "command": "npx",
      "args": [
        "-y",
        "biomcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add yeyuan98-biomcp-ts -- npx -y biomcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "yeyuan98-biomcp-ts": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "biomcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add yeyuan98-biomcp-ts --command npx --arg -y --arg biomcp
```

### Hermes

```yaml
mcp_servers:
  yeyuan98-biomcp-ts:
    command: "npx"
    args: ["-y", "biomcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "yeyuan98-biomcp-ts": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "biomcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add yeyuan98-biomcp-ts -t stdio -c npx -a -y biomcp
```

### Other

```json
{
  "mcpServers": {
    "yeyuan98-biomcp-ts": {
      "command": "npx",
      "args": [
        "-y",
        "biomcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-20 (score 79, +1)

No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-18 (score 78, +1)

No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-16 (score 77, +1)

No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-15 (score 76, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-09-14 (score 61, −14)

- [security regression] Malware scan: pass → unverified
- [functional] Package version: 1.4.2 → 1.4.3

### 2026-09-12 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-10 (score 74, 0)

- [security regression] Tool safety: pass → unverified
- [security regression] Stability: 0.30 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified
- [functional] Package version: 1.1.1 → 1.4.2

### 2026-09-09 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (41)

### `gene_search` (~73 tokens)

Search for genes by symbol, name, or keyword

Input parameters:

- `chromosome` (string): Filter by chromosome (e.g., "7", "X")
- `limit` (integer): Maximum results
- `offset` (integer): Result offset
- `query` (string, required): Gene symbol, name, or keyword to search for

### `gene_get` (~131 tokens)

Get detailed gene information by symbol

Input parameters:

- `limit` (integer)
- `sections` (array): Sections to include
- `smart` (boolean): When true, automatically resolves gene aliases and common names to the official HGNC symbol before lookup (e.g., "HER2" → "ERBB2"). Zero overhead when input is already a valid HGNC symbol.
- `symbol` (string, required): Official HGNC gene symbol (e.g., "BRAF", "TP53", "ERBB2"). Common aliases like "HER2" or "NEU" are NOT accepted unless smart=true is enabled.

### `gene_diseases` (~61 tokens)

Get diseases associated with a gene. Requires DISGENET_API_KEY environment variable for DisGeNET data; falls back to OpenTargets gene-disease associations when unavailable.

Input parameters:

- `limit` (integer)
- `symbol` (string, required): HGNC gene symbol

### `gene_drugs` (~37 tokens)

Find drugs targeting a gene

Input parameters:

- `symbol` (string, required): HGNC gene symbol (e.g., "BRAF", "TP53")

### `gene_trials` (~26 tokens)

Find clinical trials for a gene

Input parameters:

- `symbol` (string, required): HGNC gene symbol

### `gene_articles` (~25 tokens)

Find articles about a gene

Input parameters:

- `symbol` (string, required): HGNC gene symbol

### `gene_enrich` (~31 tokens)

Perform pathway enrichment analysis for a gene list

Input parameters:

- `genes` (array, required): List of HGNC gene symbols

### `variant_search` (~307 tokens)

Search for variants. Use structured parameters for best results:
\- rsid: e.g. query="rs113488022"
\- HGVS: e.g. query="NM_004333.4:c.1799T>A"
\- Gene filter: e.g. gene="BRAF" with hgvsp="V600E" or consequence="missense"
\- ClinVar significance: e.g. significance="pathogenic"
Do NOT use compound free-text like "BRAF V600E" — use separate gene and hgvsp parameters instead.

Input parameters:

- `consequence` (string): Variant consequence (e.g., missense, synonymous)
- `gene` (string): Filter by gene symbol (e.g., "BRAF"). Use together with hgvsp for protein change queries.
- `hgvsc` (string): cDNA change
- `hgvsp` (string): Protein change (e.g., V600E). Use with gene parameter for compound queries.
- `limit` (integer): Maximum results
- `max_frequency` (number): Maximum allele frequency (0-1)
- `min_cadd` (number): Minimum CADD score
- `offset` (integer): Result offset
- `query` (string): Variant query (rsid or HGVS notation). Avoid compound queries like "BRAF V600E" — use gene + hgvsp parameters instead.
- `rsid` (string): dbSNP rsID
- `significance` (string)

### `variant_get` (~108 tokens)

Get detailed variant information with optional sections. Core data (id, gene, rsid, significance) is always returned at the top level. Use sections to request additional data.

Input parameters:

- `id` (string, required): Variant ID (rsid, HGVS, or ClinVar ID)
- `limit` (integer)
- `sections` (array): Sections to include: core, frequency, predictions, clinical, alphagenome_scores (currently unavailable — returns an error stub pending AlphaGenome gRPC reimplementation)

### `variant_oncokb` (~72 tokens)

Get OncoKB annotations for a variant in a cancer gene. Requires ONCOKB_TOKEN environment variable.

Input parameters:

- `gene` (string, required): Gene symbol (e.g., BRAF, EGFR)
- `protein_change` (string, required): Protein change (e.g., V600E, L858R)

### `variant_trials` (~34 tokens)

Find clinical trials for a variant

Input parameters:

- `variant` (string, required): Variant ID (rsID, HGVS, or variant ID)

### `drug_search` (~53 tokens)

Search for drugs by name, mechanism, or keyword

Input parameters:

- `limit` (integer): Maximum results
- `offset` (integer): Result offset
- `query` (string, required): Drug name, mechanism, or keyword to search

### `drug_get` (~73 tokens)

Get detailed drug information by name

Input parameters:

- `limit` (integer)
- `name` (string, required): Drug name (e.g., "imatinib", "aspirin")
- `sections` (array): Sections to include (adverse_events = FDA FAERS adverse reactions ranked by report count; limit applies to reaction rows)

### `drug_trials` (~24 tokens)

Find clinical trials for a drug

Input parameters:

- `drug` (string, required): Drug name

### `disease_search` (~54 tokens)

Search for diseases by name, phenotype, or keyword

Input parameters:

- `limit` (integer): Maximum results
- `offset` (integer): Result offset
- `query` (string, required): Disease name, phenotype, or keyword to search for

### `disease_get` (~59 tokens)

Get detailed disease information by ID

Input parameters:

- `disease_id` (string, required): Disease ID (e.g., "DOID:0060268", "C0018794")
- `limit` (integer)
- `sections` (array): Sections to include

### `disease_drugs` (~35 tokens)

Get drugs for a disease via OpenTargets

Input parameters:

- `disease_id` (string, required): Disease ID
- `limit` (integer)

### `disease_trials` (~32 tokens)

Get clinical trials for a disease

Input parameters:

- `disease_id` (string, required): Disease ID
- `limit` (integer)

### `article_search` (~204 tokens)

Search literature across multiple backends with federated search and deduplication

Input parameters:

- `dateRange` (string): Date range as YYYY-MM-DD/YYYY-MM-DD. Open-ended: "2020-01-01/" or "/2023-12-31". Only pubmed, europepmc, semantic_scholar support this.
- `limit` (integer): Maximum results to return. Applied to final deduplicated results, not per-source. Each source may fetch more internally before deduplication.
- `offset` (integer): Result offset. EuropePMC windows are capped at 1000 rows; use narrower queries or another source for deeper results
- `query` (string, required): Search query (title, abstract, or keyword). Journal scoping: PubMed matches full journal names and NLM abbreviations; EuropePMC JOURNAL:"..." filters require the NLM abbreviation (e.g. "N Engl J Med")
- `source` (string): Specific source to search

### `article_get` (~268 tokens)

Get article by PMID/PMCID/DOI. Citation: fast mode (~4s, 4 providers, auto-fallback to PubMed) or full mode (~15-30s, all 5 providers incl. PubMed). Forward citation lists come from Europe PMC, Semantic Scholar, and OpenCitations; Crossref provides counts and references only.

Input parameters:

- `citation_direction` (string): Citation direction: "forward" (articles citing this one), "backward" (references), "both" (default)
- `citation_mode` (string): Fast: Europe PMC, Semantic Scholar, OpenCitations, Crossref counts/references (~4s). Full: All 5 providers incl. PubMed (~15-30s). Fast mode auto-falls back to PubMed when other providers return no i…
- `id` (string, required): Article identifier: PMID (numeric, e.g. "12345"), PMCID (e.g. "PMC1234567"), or DOI (e.g. "10.1038/s41586-021-03819-2")
- `limit` (integer): Maximum items per section (e.g., 20 citations)
- `sections` (array): Sections to include. Use ["citation"] for citation data, ["all"] for everything.

### `trial_search` (~114 tokens)

Search clinical trials by condition, intervention, or keyword

Input parameters:

- `intervention_type` (string): Filter by intervention type (Drug, Device, etc.)
- `limit` (integer): Maximum results
- `page_token` (string): Page token from previous response for pagination
- `phase` (string): Filter by phase (Phase 1, Phase 2, etc.)
- `query` (string, required): Condition, intervention, or keyword to search for
- `status` (string): Filter by status (Recruiting, Completed, etc.)

### `trial_get` (~56 tokens)

Get detailed trial information by NCT ID

Input parameters:

- `limit` (integer)
- `nct_id` (string, required): NCT ID (e.g., "NCT01234567")
- `sections` (array): Sections to include

### `discover` (~49 tokens)

Free-text concept resolution - find entities matching a free-text query

Input parameters:

- `query` (string, required): Free-text query (e.g., "BRAF V600E", "lung cancer", "imatinib")

### `batch_get` (~25 tokens)

Get multiple entities in parallel

Input parameters:

- `inputs` (array, required): List of entity requests

### `pdb` (~284 tokens)

Access the Protein Data Bank (RCSB PDB) for macromolecular structure data.

  SEARCH: Provide "query" to find structures (e.g., "kinase inhibitor", "hemoglobin").
  GET: Provide "pdb_id" to retrieve entry metadata with optional detail sections.
  DOWNLOAD: Provide "pdb_id" + download=true to save the structure file and get the file path.

Input parameters:

- `download` (boolean): Save the structure file to disk and return the file path. Only used with pdb_id.
- `format` (string): File format: "cif" (mmCIF, recommended, always available) or "pdb" (legacy format, may not exist for some entries). Only used with download=true.
- `limit` (integer): Max search results
- `offset` (integer): Search result offset
- `pdb_id` (string): PDB identifier (e.g., "1CRN", "4HHB"). Required for get/download.
- `query` (string): Free-text search query to find PDB entries. Omit pdb_id when searching.
- `sections` (array): Metadata sections: polymer_entities (chains and sequences), ligands (small molecules and ions), assembly (biological assembly), experiment (method, resolution), citation (publication). Use "all" for…

### `patent_search` (~472 tokens)

Search patents worldwide (US, EP, WO, JP, and 100+ authorities). Quote exact multi-word concepts (e.g. "mRNA display") to avoid off-topic matches. Backend characters: ppubs = USPTO Public Search full-text conceptual search (US only, keyless, relevance-ranked; default US backend) | ops = EPO OPS worldwide bibliographic search over titles/abstracts (needs EPO_OPS_CONSUMER_KEY/EPO_OPS_CONSUMER_SECRET) | uspto_odp = US application metadata, bibliographic only but inventor/CPC/continuity-rich (needs USPTO_API_KEY) | google_patents = worldwide best-effort (often unavailable). Auto mode queries worldwide + ppubs concurrently; if ppubs fails hard it falls back to uspto_odp once (tagged with _note). Pass source to force a specific backend. Results are ranked by relevance by default (ppubs sort_by). Foundational prior art is auto-discovered via co-citation mining of the top results and returned in seminal_prior_art (surfaces seminal documents whose own vocabulary predates the query concept).

Input parameters:

- `assignee` (string): Filter by assignee/applicant organization, e.g. "Moderna"
- `cpc` (string): Filter by CPC classification symbol (full symbol, e.g. "C12N15/11")
- `date_range` (string): Date range "YYYY-MM-DD/YYYY-MM-DD" (either side may be empty)
- `inventor` (string): Filter by inventor name
- `limit` (integer): Maximum results
- `offset` (integer): Result offset for pagination
- `query` (string, required): Free-text query; quote exact multi-word concepts like "mRNA display" for precise matching
- `seminal` (boolean): Discover foundational prior art via co-citation analysis of the top results (default: true; adds ~5-30s; set false for the fastest bibliographic lookups)
- `sort_by` (string): Result ranking: "relevance" (default, conceptual match ranking) or "recency" (newest first). Currently affects the ppubs backend only
- `source` (string): Force a specific backend
- `status` (string): Filter by grant status

### `patent_get` (~125 tokens)

Get patent details by publication number (e.g. "US11027025B2", "EP3904939B1", "US20260240819A1"). Sections: abstract, claims (US fulltext via USPTO Public Search; EP/WO via EPO OPS), citations (backward + forward), family, classifications.

Input parameters:

- `limit` (integer): Max entries per section array
- `patent_id` (string, required): Publication number, e.g. "US11027025B2"
- `sections` (array): Sections to include (default: core only)

### `geo_search` (~218 tokens)

Search NCBI GEO (Gene Expression Omnibus) for functional genomics studies — expression microarrays, RNA-seq, and other high-throughput sequencing series.

Queries accept plain terms ("breast cancer RNA-seq", "melanoma single cell") or NCBI field syntax ("GSE183947[Accession]"). Each result carries cross-links for chaining: sra_project → sra_get, bioproject, pubmed_ids → article_get, and accession → geo_get for full details.

Input parameters:

- `entry_type` (string): GEO entry type — gse=study (default), gsm=sample, gpl=platform, gds=curated dataset
- `limit` (integer): Maximum results
- `offset` (integer): Result offset for pagination
- `organism` (string): Filter by organism (e.g. "Homo sapiens", "Mus musculus")
- `query` (string, required): Free-text GEO search terms, e.g. "breast cancer RNA-seq", "melanoma single cell"

### `geo_get` (~217 tokens)

Get the full SOFT record details for a GEO entry: series (GSE...), sample (GSM...), or platform (GPL...).

A series detail includes summary, organisms, platform_ids, a sample preview, supplementary file URLs, and cross-references for chaining: sra → sra_get(SRP.../SRR...), pubmed_ids → article_get, samples → geo_get(GSM...), platform_ids → geo_get(GPL...).

download=true additionally saves the first supplementary file (.gz/.csv/.txt, subject to max_bytes) to a local temp path and returns its path, size, and source URL.

Input parameters:

- `accession` (string, required): GEO accession (GSE series, GSM sample, or GPL platform; GDS curated DataSets return guidance pointing at the underlying GSE/GSM)
- `download` (boolean): Download the first supplementary file (.gz) to a local temp path
- `max_bytes` (integer): Size cap in bytes for the downloaded supplementary file (default 52428800 = 50 MB)

### `sra_search` (~162 tokens)

Search NCBI's Sequence Read Archive (SRA) for sequencing experiments and runs.

The query may be free text, an accession (SRP study, SRX experiment, SRR run, SRS sample), or NCBI field syntax ("RNA-SEQ AND Homo sapiens[Organism]"). Results list experiment/study/sample accessions, organism, library strategy, run count, and first_run_accession for chaining into sra_get.

Input parameters:

- `limit` (integer): Maximum results
- `offset` (integer): Result offset for pagination
- `query` (string, required): Free text or accession — SRP study, SRX experiment, SRR run, SRS sample, or terms like "RNA-SEQ AND Homo sapiens[Organism]"

### `sra_get` (~164 tokens)

Get full details for an NCBI SRA accession: SRR run (instrument, spots, bases, size), SRX experiment (library design), SRP study (experiment list), or SRS sample.

Chain from geo_get (sra field) or sra_search (experiment_accession / first_run_accession). European (ERP/ERR) and DDBJ (DRP/DRR) accessions are NOT indexed in NCBI SRA — use ENA (https://www.ebi.ac.uk/ena) for those.

Input parameters:

- `accession` (string, required): NCBI SRA accession: SRP (study), SRX (experiment), SRR (run), or SRS (sample), e.g. SRR14432476

### `genbank_search` (~163 tokens)

Search NCBI nucleotide records (GenBank/RefSeq/INSDC).

Queries may be plain terms, an accession, or NCBI field syntax ("TP53[Gene Name] AND Homo sapiens[Organism]", "BRCA1[Gene Name]"). Results include accession.version, definition, length_bp, organism, and topology — chain accessions into genbank_get or genbank_genes.

Input parameters:

- `limit` (integer): Maximum results
- `offset` (integer): Result offset for pagination
- `organism` (string): Filter by organism (e.g. "Homo sapiens")
- `query` (string, required): Nucleotide query, e.g. "TP53[Gene Name] AND Homo sapiens[Organism]" or an accession

### `genbank_get` (~299 tokens)

Fetch a GenBank/RefSeq nucleotide record as text (GenBank flat file or FASTA).

Whole-record fetches are capped at 2,000,000 bp — larger records require a seq_start/seq_stop region (1-based, inclusive, up to 10 Mb span; set strand=2 for a reverse-strand slice where seq_start > seq_stop — the region field echoes the request as given, while NCBI's text shows complement(min..max)). Output guard: sequence_text is truncated to its first 200,000 characters when oversized — request a narrower region for the full text.

Input parameters:

- `accession` (string, required): GenBank/RefSeq accession, versioned or bare — NC_000023.11, NG_017013.2, KJ668569.2
- `format` (string): Record format: genbank flat file (default) or fasta
- `max_response_bytes` (integer): Hard cap on the raw NCBI response in characters (default 30,000,000) — oversized responses error instead of truncating
- `seq_start` (integer): Region start (1-based, inclusive) — required with seq_stop for records over 2 Mb
- `seq_stop` (integer): Region stop (1-based, inclusive)
- `strand` (number): Strand: 1=plus (default), 2=minus (reverse slice; allows seq_start > seq_stop)

### `genbank_genes` (~105 tokens)

Map a GenBank/RefSeq nucleotide accession to its NCBI Gene IDs (elink nuccore→gene).

The returned gene_ids are entrezgene IDs usable directly with MyGene-backed gene tools (gene_get, gene_search). Useful bridge from a sequence record to gene-level annotation.

Input parameters:

- `accession` (string, required): GenBank/RefSeq accession, versioned or bare — e.g. NG_017013.2, NC_000023.11

### `gtex_expression` (~159 tokens)

Get median gene expression across GTEx tissues (GTEx Analysis v10, 54 tissue sites, TPM, sorted highest first).

Accepts an HGNC symbol (TP53) or Ensembl gene ID (ENSG00000141510, versioned or bare). Optionally filter to a single tissue via its tissueSiteDetailId (e.g. Brain_Cortex, Whole_Blood).

Input parameters:

- `gene` (string, required): HGNC symbol (TP53) or Ensembl gene ID (ENSG00000141510, versioned or bare)
- `limit` (integer): Maximum tissues to return (highest expression first)
- `tissue` (string): GTEx tissueSiteDetailId filter, e.g. Brain_Cortex, Whole_Blood

### `gtex_eqtl` (~140 tokens)

Get significant cis-eQTL associations for a gene in a specific GTEx tissue (GTEx Analysis v10): variant_id, p_value, and NES (effect direction/size), sorted by ascending p-value.

tissue is a required GTEx tissueSiteDetailId (e.g. Whole_Blood, Brain_Cortex).

Input parameters:

- `gene` (string, required): HGNC symbol (TP53) or Ensembl gene ID (ENSG00000141510, versioned or bare)
- `limit` (integer): Maximum associations to return
- `tissue` (string, required): GTEx tissueSiteDetailId — required, e.g. Whole_Blood

### `ensembl_lookup` (~244 tokens)

Resolve a gene in Ensembl terms for ANY Ensembl species (356 available): stable ID (ENSG…), symbol↔ID mapping, versioned identifier, canonical transcript, and coordinates on the current assembly (GRCh38 human, GRCm39 mouse, …). With expand=true, returns all transcripts with translation/protein IDs.

Accepts an HGNC symbol (BRAF) or Ensembl gene ID (ENSG00000157764, versioned or bare — versions are resolved to the current record). Species accepts scientific names or aliases ('homo_sapiens'/'human', 'mus_musculus'/'mouse').
For rich human gene annotation (summary, pathways, drugs, diseases) use gene_get instead — this tool is the identifier/structure authority.

Input parameters:

- `expand` (boolean): Include all transcripts with translation/protein IDs
- `gene_or_id` (string, required): HGNC symbol (BRAF) or Ensembl gene ID (ENSG00000157764, versioned or bare)
- `species` (string): Species name or alias — 'human' (default), 'mouse', 'mus_musculus', 'rat', …

### `ensembl_homology` (~233 tokens)

Find orthologues or paralogues of a gene across species (Ensembl Compara) — the cross-species gene mapping source in biomcp.

Returns target stable IDs, species, taxonomy level, and percent identity, sorted by identity. Accepts an HGNC symbol or Ensembl gene ID; scope to one species with target_species ('mouse') or target_taxon (10090).
Use it for conservation questions ('is this gene conserved?', 'what is the mouse orthologue of BRAF?').

Input parameters:

- `gene` (string, required): Gene symbol (BRAF) or Ensembl gene ID (ENSG00000157764)
- `limit` (integer): Maximum homologies to return (sorted by percent identity)
- `species` (string): Source species — 'human' (default), 'mouse', …
- `target_species` (string): Restrict results to one species, e.g. 'mouse'
- `target_taxon` (integer): Restrict results to a taxon ID, e.g. 10090 (Mus musculus)
- `type` (string): Homology type to fetch

### `ensembl_consequence` (~279 tokens)

Predict the functional consequence of a variant on demand via Ensembl VEP — works even for NOVEL variants absent from every database, and for non-human species.

Input forms: HGVS c./p./g. notation ("NM_004333:c.1799T>A", "ENST00000288602:c.1799T>A") or a dbSNP rsID ("rs113488060"). Prefer HGVS over rsIDs when both are available — rsIDs are resolved through dbSNP's coordinate mapping, which can yield less specific consequences.
Returns the most severe consequence plus per-transcript effects (impact, codon/amino-acid change, SIFT/PolyPhen where available) and co-located known variants (ClinVar/COSMIC IDs, gnomAD/1000G frequencies when present).
For KNOWN human variants, variant_get additionally provides deep pre-computed scores (CADD, REVEL, AlphaMissense, ClinVar stars) — prefer it there.

Input parameters:

- `limit` (integer): Max transcript consequences returned (sorted by impact severity)
- `species` (string): Species — 'human' (default), 'mouse', …
- `variant` (string, required): HGVS notation (NM_004333:c.1799T>A) or dbSNP rsID (rs113488060)

### `ensembl_region` (~191 tokens)

Query what lives in a genomic interval on the current assembly (GRCh38 for human): genes/transcripts (stable IDs, symbols, biotypes) and known variants (rsIDs, alleles, consequence terms, clinical significance).

Ideal for locus triage — "what genes and known variants sit in this GWAS hit interval?".
Keep spans modest (<1 Mb recommended); output is capped at limit with a truncated marker. For sequence text use genbank_get; for entity-level annotation chain IDs into gene_get / variant_get.

Input parameters:

- `features` (array): Feature types to include
- `limit` (integer): Maximum features returned
- `region` (string, required): Genomic region chr:start-end (1-based, GRCh38 for human) — e.g. 7:140450000-140480000
- `species` (string): Species — 'human' (default), 'mouse', …

### `biomcp_configure` (~671 tokens)

Inspect and configure biomcp — unified observability and restricted controllability for every parameter.

\**What it covers:** three optional feature groups (database, analysis_r, analysis_biowasm) whose knobs live in the .biomcp.json project config file (written by this tool, loaded at server startup — a restart applies changes), plus every environment-only parameter (API keys, proxy, security boundaries), which is query-only.

\**Actions:**
\- status (default; call with {}): per-feature running state (with each feature's settable_keys), config file health, conflicts (e.g. an env var vetoing the file), pending-restart flags, dependency prerequisites, and parameter counts. The full parameter catalog is NOT inlined — use filter for detailed rows: 'file', 'env', a feature id ('analysis_r'), or a dotted-id prefix ('features.database').
\- set: create/modify file parameters in one atomic batch. Enable/disable is just features.<group>.enabled. null removes a key (restores default). Sensitive keys (connection targets, mirrors) require confirm_sensitive=true. Nothing is written when any key is invalid (dry_run=true validates and diffs without writing).
\- reset: remove a feature section (target: feature id) or specific keys (target: [dotted ids]).

\**Hard rules:** environment parameters are never settable here (the response tells you how to set them in your client's env block); env var values are never displayed (masked: presence + fingerprint only); the file write is refused when the server's working directory is not a project root — the response then carries a paste-ready env block instead.

\**Examples:** {"action":"status"} · {"action":"status","filter":"features.analysis_r"} · {"action":"set","values":{"features.analysis_biowasm.enabled":true}} · {"action":"set","values":{"features.database.enabled":true,"features.database.type":"sqlite","features.database.sqlite_path":["data/geo.db"]}} · {"action":"set","values":{"features.analysis_r.mirror_url":null}} · {"action":"reset"…

Input parameters:

- `action` (string): status = inspect (default, works with no other arguments); set = create/modify file parameters; reset = remove.
- `confirm_sensitive` (boolean): Required true when set/reset touches sensitive keys (connection targets, mirrors, credentials).
- `dry_run` (boolean): Validate and diff without writing (set/reset).
- `filter` (string): For status: "file" | "env" | feature id | dotted-id prefix — returns detailed rows (effects, how-to-set).
- `target`: For reset: a feature id ("database" | "analysis_r" | "analysis_biowasm") removes the whole section, or a list of dotted file-param ids removes those keys.
- `values` (object): For set: {"<dotted file-param id>": <value|null>} — e.g. {"features.analysis_r.enabled": true}. null removes the key. Valid ids are listed by status.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/yeyuan98-biomcp-ts/biomcp#diagnostics

## Score history

- 2026-09-21: 79
- 2026-09-20: 79
- 2026-09-19: 78
- 2026-09-18: 78
- 2026-09-17: 77
- 2026-09-16: 77
- 2026-09-15: 76
- 2026-09-14: 61
- 2026-09-13: 75
- 2026-09-12: 75
- 2026-09-11: 74
- 2026-09-10: 74
- 2026-09-09: 74
- 2026-09-08: 73
- 2026-09-07: 73
- 2026-09-06: 72
- 2026-09-05: 72
- 2026-09-04: 71
- 2026-09-03: 71
- 2026-09-02: 70
- 2026-09-01: 59
- 2026-08-31: 69

## Common questions

### What is the BioMCP-TS MCP server?

BioMCP-TS is an MCP server listed in the public MCP registry as io.github.yeyuan98/biomcp-ts. Biomedical MCP server: genes, variants, trials, literature, patents, optional SQL/R/biowasm tools. This page covers its npm package (biomcp).

### Is the BioMCP-TS MCP server safe to use?

BioMCP-TS scores 79 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the BioMCP-TS MCP server expose?

BioMCP-TS exposes 41 tools: gene_search, gene_get, gene_diseases, gene_drugs, gene_trials, and 36 more. Their descriptions and schemas cost roughly 6,077 tokens of context every time the server is loaded.

### Is the BioMCP-TS MCP server still maintained?

BioMCP-TS is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the BioMCP-TS MCP server under?

BioMCP-TS declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/biomcp
- Socket report: https://socket.dev/npm/package/biomcp
- Repository: https://github.com/yeyuan98/biomcp-ts
- Website: https://github.com/yeyuan98/biomcp-ts/blob/main/docs/AGENT-INSTALL.md
- Changelog RSS feed: https://verifymcp.io/servers/yeyuan98-biomcp-ts/biomcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/yeyuan98-biomcp-ts/biomcp.json
- HTML version of this page: https://verifymcp.io/servers/yeyuan98-biomcp-ts/biomcp
