bpp-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BPP_MCP_<TOOL> | No | Path to a tool binary, e.g. BPP_MCP_BPP_DOCS=/path/to/bpp-docs. Used for tools missing a prebuilt release. |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| check_environmentA | Check that the BPP command-line tools are installed and new enough. Call this FIRST in every session, before any other tool. It runs
Output:
|
| inspect_dataA | Inspect the user's data files without changing anything (bpp-seqs --dry-run). Call after check_environment, on whatever the user has: aligned loci
(FASTA/PHYLIP/NEXUS, one or many per file), BAM/CRAM, gVCF, BED, a reference
FASTA, and the Imap (sample -> species table). File types are detected from
content. Read in the report:
|
| convert_dataA | Convert the inspected data into BPP input files (bpp-seqs). Writes PREFIX.txt (the BPP seqfile), PREFIX.imap, PREFIX.stats.tsv and
PREFIX.loci.tsv, where PREFIX is Options, all passed to bpp-seqs unchanged:
Read in the report: |
| make_loci_bedA | Make a BED file of candidate loci by tiling a genome into windows (bpp-seqs windows). Use when the user has BAM/CRAM or gVCF data but no BED file saying which
regions are the loci (inspect_data then lists a BED under Ask the user for the locus size and spacing; do not choose them yourself. All options are passed to bpp-seqs unchanged:
Read in the report: |
| subset_lociA | Write a new BPP seqfile holding a subset of the loci of an existing one (bpp-seqs extract). Use to make a small data set for a trial run, or to drop or keep
particular loci. Selection (at least one; passed to bpp-seqs unchanged):
Read in the report: |
| build_species_treeA | Build the species (or guide) tree from a join formula (bpp-tree). Writes PREFIX.stree (the species&tree block, with individual counts taken
from the Imap, plus any migration block) and PREFIX.nwk. Pass PREFIX.stree
to make_control_file as
Read in the report: |
| read_species_treeA | Read a species tree the user already has (bpp-tree --read). Use instead of build_species_tree when the user has a tree file: a Newick (or extended Newick with introgression), a species&tree block, or an old control file containing one. Migration and introgression in the file are recovered too.
Read in the report: |
| make_control_fileA | Create a BPP control file (bpp-lint --template --suggest-priors). Never write a control file yourself; use this, then lint_control_file.
Returns the file's |
| set_keywordA | Change one keyword in a control file, then lint the file again. Use this for every edit to an existing control file; never edit one by hand. Look up the keyword's syntax with lookup_docs first, and ask the user before changing a scientific choice.
The keyword's line is replaced where it stands (layout and comments are kept); a keyword the file does not have yet is added at the end. A value that spans several lines in the file (such as species&tree) is refused: remake the file with make_control_file instead. Returns the lint_control_file result for the edited file, plus
|
| lint_control_fileA | Validate a control file (bpp-lint --json --check-priors) and check it against its data. Call after make_control_file and after every change. Loop until
Read in the result:
|
| upgrade_control_fileA | Bring a control file written for BPP 2.x/3.x up to current syntax (bpp-lint --diff / --fix). For users who arrive with an old control file. Call first with
apply=false: nothing is written, and Returns the lint_control_file result for the file as it now stands (after
the rewrite when apply=true), plus
|
| lookup_docsA | The BPP manual's entry for one control-file keyword, quoted verbatim (bpp-docs). Use this instead of your own knowledge whenever you state BPP syntax,
defaults, allowed values or keyword dependencies, and quote it to the user.
Read in the report: |
| search_docsA | Ranked full-text search of the BPP manual (bpp-docs --search). Use for concepts rather than single keywords, e.g. 'migration prior',
'unphased diploid', 'species delimitation algorithm'. Returns the best
matching sections with |
| explain_diagnosticA | Long explanation of a bpp-lint diagnostic code, e.g. 'BPP101' or '101'. Use it to explain a lint_control_file diagnostic to the user in plain
language. Returns |
| smoke_testA | Run BPP briefly to prove it accepts the control file and loads the data. Call after lint_control_file reports server.status "valid". Runs a copy of
the file with a short chain ( Read in the result:
|
| run_commandA | How the user starts the full analysis themselves. Does NOT run BPP. Call last, once lint_control_file reports server.status "valid" and smoke_test did not fail. This server never starts the real run, which can take hours or days; give the user the command to run in their own terminal or job script. Read in the result:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| novice_setup | Go from raw data to a tested BPP control file, step by step. |
| upgrade_old_file | Bring a control file written for an older BPP up to date. |
| check_my_ctl | Review an existing control file without changing it. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| examples | List of the example control files. |
TDQS
Scored across 16 tools
Each tool maps to a distinct BPP pipeline stage: environment check, data inspection/conversion, tree building/reading, control-file creation/editing/linting, documentation lookup/search, smoke testing, and run-command generation. The closest overlap is inspect_data vs convert_data, but the dry-run versus write distinction is made explicit in the descriptions. No tools appear to do the same thing.
All tool names use snake_case and follow a mostly consistent verb_noun or verb_object pattern (check_environment, inspect_data, convert_data, build_species_tree, lint_control_file, run_command). The only minor variant is smoke_test as a compound noun, but it still fits the readable convention and does not disrupt predictability.
The server has 16 tools, slightly above the typical 3-15 range, but each corresponds to a real, non-redundant step in the BPP preparation workflow. Given the domain's complexity (data conversion, BED creation, subsetting, tree handling, control-file lifecycle, docs, smoke test, and run command), the count is reasonable rather than bloated.
The surface covers the core lifecycle from environment check through data conversion, tree building, control-file creation/linting, smoke testing, and final run-command generation. However, check_environment references set_project when no project root is configured, yet that tool is absent, leaving a configuration dead end; post-run BPP result parsing is also outside the surface.