mcpField
P
phylokit-mcp

phylokit-mcp

本地服务
github.com科研与教育02 天前更新

关于 phylokit-mcp

phylokit-mcp 是基于 IQ-TREE 3 和 MAFFT 的系统发育分析 MCP 服务,面向研究人员和 AI Agent。每棵推断树都附带自举支持度,并提供 Newick 字符串之外的诊断信息。

主要功能

  1. 01带自举支持度的最大似然树
  2. 02按信息准则排名替换模型
  3. 03按 Robinson–Foulds 距离比较树
  4. 04使用 MAFFT 比对序列
  5. 05模拟比对并映射位点

适用场景

  1. 01评估推断树中各分支的支持度
  2. 02比较备选树及其不同分支
  3. 03用 AIC、AICc 和 BIC 选择替换模型
  4. 04在建树前比对 FASTA 序列

MCP 相关

该 MCP 服务向 MCP 客户端提供系统发育分析工具,包括树推断、模型选择、树比较、序列比对和模拟。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"musharna-phylokit": {
"command": "uvx",
"args": [
"phylokit-mcp"
],
"env": {
"OMP_NUM_THREADS": "<OMP_NUM_THREADS>",
"MKL_NUM_THREADS": "<MKL_NUM_THREADS>"
}
}
}
}
启动命令uvx phylokit-mcp
需要配置的环境变量
OMP_NUM_THREADSPinned so inference is reproducible; overriding it makes IQ-TREE runs non-deterministic.
MKL_NUM_THREADSPinned alongside OMP_NUM_THREADS for the same reproducibility reason.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiphylokit-mcp0.8.0

工具

6

收录的工具列表 · 更新于 2 天前

参数类型必填说明
seedinteger否
fastastring是
modelstring否
replicatesinteger否
sequence_typestring否

详细介绍

phylokit-mcp

phylokit-mcp 是一个 MCP 服务,可让 AI Agent 使用 IQ-TREE 3 构建最大似然树,并使用 MAFFT 比对序列。

CI PyPI Python License DOI Glama

没有支持度的拓扑就不是结果。 infer_tree 总会运行自举分析并返回每个分支的支持度。没有可跳过该步骤的标志。

为什么要这样规定

无论数据是否支持它,最大似然树看起来都一样。使用从一棵_已知_的 7 个分类单元树模拟得到的比对数据进行测量(JC,100 次重复,seed 1):

位点数信息位点数是否还原真实树?最低分支支持度
30051是,完全还原1.00
6011否,RF 20.57

在 60 个位点的情况下,这棵树包含一个并不存在的分支(C,D,G),却遗漏了一个实际存在的分支(E,F,G)。两次运行都返回形状相同、完全解析的 Newick 字符串。只有支持度值能区分它们,而错误分支恰好是树中_支持度最低_的分支。

它能报告而 Newick 字符串无法表达的内容

  • 冲突分支:数据支持度 ≥0.70、但_未出现在_报告树中的分组。带支持度注释的 Newick 字符串无处记录这些分组。
  • fraction_resolved:支持度达到 0.70 的分支所占比例。在将任何单个分组重复陈述为事实之前,先查看这个关键数字。
  • 带 ΔAIC 的备选模型,而不只是获胜模型。在上文的 300 位点比对中,模拟所用模型为 JC,但 AIC 获胜模型不是 JC(TPM2u 和 TPM2 并列),且多个模型(包括 ΔAIC 为 0.7 的 JC)都处于传统的 ±2 范围内(seed=1,piqtree 0.8.3)。
  • 长度与证据:同时提供 n_parsimony_informative 和 n_sites。包含 10,000 个位点、但序列几乎完全相同的比对无法提供任何支持。

工具

工具功能
infer_treeML 树加上自举支持度(非参数法或 UFBoot2),按分支提供。
select_substitution_model按 ΔAIC/AICc/BIC 对 100 多种模型排序,并指出不同准则结论不一致的情况。
compare_treesRobinson–Foulds 距离以及不同的分支。比较分裂,而不是字符串。
simulate_alignment沿指定的树生成序列:阳性对照。
align_sequences使用 MAFFT 比对未比对的 FASTA,结果直接内联返回或写入新文件(out_path)。
map_positions将残基映射到其比对列,再将该列映射到其他每条序列。
capabilitiespiqtree 和 IQ-TREE 版本、215 种替换模型、MAFFT 版本及限制。

接受 FASTA 或 Newick 的工具也接受文件路径(fasta_path;两个树时使用 trees_path),由服务读取;相对路径以服务的工作目录为基准解析。

测试会运行真实的 IQ-TREE 和 MAFFT(不使用模拟引擎),并包含 23 项突变检查和真实进程的 JSON-RPC 握手测试。

安装

pip install phylokit-mcp

需要 Python 3.12+。IQ-TREE 3 通过 piqtree 0.8 提供,该版本会将它构建到 wheel 中。align_sequences 也需要 PATH 中有 MAFFT 二进制文件;对于未对齐的输入,map_positions 也需要它;其他工具则无需此依赖。详情请见:docs/INSTALL.md。

配置 MCP 客户端

{
  "mcpServers": {
    "phylokit": {
      "command": "uvx",
      "args": ["phylokit-mcp"]
    }
  }
}

如果 uvx 选择的 Python 版本低于 3.12,请使用 "args": ["--python", "3.12", "phylokit-mcp"]。

基准测试结果

我们将使用该服务的 Claude,与在我们配置了 piqtree、cogent3 和 MAFFT 的环境中编写 Python 的 Claude 进行了对比;测试涵盖 38 道系统发育学问题,每道题运行 3 次。平局意味着无需自行搭建环境,该服务也能达到相同结果。每次运行都答对的问题数,服务对比 Python:Claude Haiku 5.5 为 34 对 37,Sonnet 5.5 为 37 对 35,Opus 5.5 为 36 对 35(使用接收文件路径的提交版本)。差异均不显著(预注册;Haiku 和 Sonnet 的 Holm 校正 McNemar 检验 p = 0.75)。服务在 Haiku 上的费用与 Python 大致相同,在 Sonnet 上更高(1.23×),在 Opus 上也更高(1.26×)。

每种设置共 114 个答案(38 道题,每道运行 3 次)的柱状图。Claude 单独使用:114 个拒答。只读:76 个正确、24 个错误、12 个拒答、2 个无效。Python、MAFFT 和网页:113 个正确、1 个无效。phylokit-mcp:110 个正确、4 个错误。

图表展示的是首次 Opus 5.5 运行结果,使用的发布版本将数据作为文本接收。按答案数计算,服务答对了 114 个中的 110 个,Python 答对了 113 个;按题目数计算,每次运行都答对的题目分别为 38 道中的 36 道和 37 道(符号检验 p = 1)。按每道题计算,服务耗时是 Python 的 6.0 倍(95% CI 为 4.4 至 8.3),费用是 14.4 倍(9.9 至 20.2);两者均为每题比值的几何平均数。大部分费用来自模型将数据文件粘贴到工具调用中;改用文件路径后(预注册的复测,2026-10-18),费用降至 1.26 倍(1.04 至 1.55)。

问题由我们编写,基准测试也由我们执行;欢迎外部复测。该基准测试不评估支持值;方法、对照和其他限制见 benchmarks/agent_qa;Haiku 和 Sonnet 的测试结果见:2026-10-20 复测。

可复现性

在任何设置下都无法做到位级精确:IQ-TREE 会在搜索过程中读取墙上时钟,因此,即使请求和种子相同,分支长度和对数似然值的末尾数字也可能不同,支持值也可能因某次重复结果翻转而发生变化。该服务会报告 deterministic_across_processes: false。请使用 compare_trees 比较树,并以容差比较数值,切勿使用字符串相等比较。测量详情:docs/REPRODUCIBILITY.md。

局限性

  • 核苷酸和蛋白质,不支持密码子模型。 传入 sequence_type="protein" 和蛋白质模型(LG、WAG 等)。分子类型是显式声明的,不会自动检测:仅包含 A/C/G/T 的比对也可以是有效的蛋白质序列(丙氨酸/半胱氨酸/甘氨酸/苏氨酸),错误猜测会导致树、似然值和支持度出错,且不会发出警告。
  • 支持两种自举,不支持 aLRT 或近似贝叶斯法。 默认采用非参数自举(Felsenstein 1985),在此处计算,支持度为 0.70;这是唯一能报告 ML 树中缺失的强支持分支的方法。support_method="ufboot" 使用 IQ-TREE 的 UFBoot2(Hoang et al. 2018),支持度为 0.95。
  • 非参数自举的成本随重复次数线性增长,每次重复都是一次完整的 ML 搜索:对于 89 个分类单元 × 435 个位点,一次重复耗时 25–93 秒,1000 次 UFBoot2 重复耗时 83 秒。上限为 200 个分类单元、1000 次非参数自举和 10000 次 UFBoot2 重复。每个工具每 15 秒发送一次进度通知,因此客户端空闲超时不会中止耗时较长的调用。
  • 比对仅使用 MAFFT --auto,且为单线程运行:不提供策略选择、谱系比对或修剪;最多支持 200 条序列,每条 100,000 个残基,耗时上限为 600 秒。不接受带缺口的输入,不会去除缺口。树工具会拒绝长度不齐的输入,而不会进行比对。
  • 无根树。 不提供定根、年代推断或祖先重建。

许可证

GPL-2.0-only,因为 piqtree 使用 GPL-2.0-only,该许可证与 GPL-3.0 不兼容。cogent3 使用 BSD 许可证。

如果发布此服务生成的结果,请引用 IQ-TREE 3、piqtree,以及在用于生成比对时引用 MAFFT,而非此封装程序。参考文献见 CITATION.cff, 许可证和隶属信息见 NOTICE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。