MCP server for phylogenetic inference — never returns a topology without its support
Phylokit-mcp demonstrates solid definition quality with well-structured tool schemas and thoughtful descriptions. All 6 tools have explicit input schemas with typed parameters and descriptions. Tool names follow verb_noun convention (infer_tree, select_substitution_model, align_sequences, compare_trees, simulate_alignment, server_capabilities). Descriptions are domain-specific and contextual (avg ~150 chars), explaining not just WHAT but WHY (e.g., infer_tree emphasizes bootstrap support as core value). However, some parameter descriptions lack actionable constraints (e.g., 'seed' accepts 0 to 2**31-1 but this range is stated in description, not schema constraints). Output schemas are not explicitly documented in the visible code, return types are inferred from docstrings rather than formally specified. Error handling is minimal; no recovery guidance or actionable error messages visible.
Run MAFFT on unaligned sequences and return FASTA that infer_tree accepts as is. An alignment is an inference too — read its fraction_gaps and n_parsimony_informative before building on it.
Compare two trees by Robinson-Foulds distance and shared clades. Returns the distance, normalised distance, and lists of clades unique to each tree.
Build a maximum-likelihood tree and measure how well the data support it. Always bootstraps. There is deliberately no option to skip it: an unsupported topology is the failure mode this server exists to prevent.
Rank substitution models by AIC, AICc, and BIC. Returns the ranking and the margin, not just a winner. Models within DELTA_INDISTINGUISHABLE of the best are conventionally indistinguishable.
Return the server's capabilities: available substitution models, model selection criteria, limits, support thresholds, and engine versions.
Simulate an alignment under a given tree and substitution model. Useful for testing inference methods or generating synthetic data.
Output schemas not formally documented. Tool descriptions mention return fields (e.g., 'support.fraction_resolved', 'warnings') but no explicit JSON Schema for responses. LLMs cannot reliably extract structured data without documented return types.
Numeric parameter constraints stated in descriptions but not enforced in schema. 'seed' (0 to 2**31-1), 'replicates' (20-1000), 'n_sites' (default 1000) lack minimum/maximum in JSON Schema. LLMs may pass invalid values; validation happens at runtime, not upfront.
No error handling guidance. Tools return domain-specific errors (e.g., AlignmentError, ToolError) but descriptions do not explain failure modes or recovery steps. An LLM receiving 'ragged alignment' error has no guidance on what to do next.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Parameter dependencies undocumented. 'sequence_type' (dna|protein) determines which substitution models are valid, but this constraint is not stated in parameter descriptions. LLMs may pass 'LG+G' (protein model) with sequence_type='dna'.
server_capabilities tool lacks specificity. Description is generic ('Return the server's capabilities'); no hint of what fields are returned or when to call it. Should guide LLM to call this first to discover available models and limits.