用途
plant-genomics-mcp 是一个植物基因组学 MCP(模型上下文协议)服务器,用于对植物基因座进行跨数据源查询。它通过 Model Context Protocol 向客户端(如 Claude 等)提供工具,使用户可以用自然语言提问,例如询问拟南芥基因 AT1G01010 的功能、GO 术语、KEGG 通路、蛋白互作伙伴和近期论文。用户无需记住具体工具名称或调用顺序,由客户端自行决定调用哪些工具以及调用顺序。
主要能力
服务器包含 56 个工具,分布在 23 个后端数据源上。具体构成:29 个单基因座查询工具、1 个基序查询、1 个区域查询、1 个组装列表、1 个版本报告、1 个变异注释器、1 个基因集富集、1 个 BLAST 搜索、2 个成员列表(家族条目、基因树)、13 个并行批处理工具以及 5 个跨源综合变体。
23 个免费公开数据源为:Ensembl Plants、Phytozome BioMart、UniProtKB、Europe PMC、QuickGO、Planteome、PlantCyc/PMN、g:Profiler、AlphaFold DB、PDBe、InterPro、JASPAR、PANTHER、OrthoDB、AraGWAS、1001 Genomes、NCBI BLAST、Gramene、KEGG、STRING-DB、ATTED-II、ThaleMine、BAR(Bio-Analytic Resource for Plant Biology)。
大多数工具接收 TAIR 风格的基因座(例如 AT1G01010),以及可选的 organism= 参数(支持 slug、学名、通用名或 NCBI taxid)。跨物种查询时传入 organism=,例如水稻 Os01g0100100(oryza_sativa),每个工具会将 organism 映射到该后端自己的标识符。12 种植物覆盖矩阵可在 MCP 资源 pgmcp://organisms/coverage 中查看。
所有工具都会发布 JSON outputSchema、EDAM 本体标签和行为注解。每个工具都是 readOnlyHint + openWorldHint,因此宿主可以展示它们而不触发破坏性操作确认提示。
批量工具返回 {tool, count, results, errors},其中 results[locus] 与单基因座工具返回结构相同,errors[locus] 为同样的 [ClassName] 消息字符串。Ensembl 的批量使用原生 POST /lookup/id 端点(一次 HTTP 往返);其余通过 asyncio.gather 扇出。
所有实时工具会抛出 PlantGenomicsError 子类;MCP SDK 将其字符串化到线上内容中,带 [ClassName] 前缀,使客户端可以根据失败类型路由而无需解析消息。
使用方式
安装后,最简单的调用可以返回 NAC001 的 Ensembl Plants 记录。用户可以用自然语言向 Claude 提问,例如“告诉我拟南芥基因 AT1G01010 的一切——功能、GO 术语、KEGG 通路、蛋白互作伙伴和近期论文”。服务器提供工具,具体调用哪些、按什么顺序、分几轮由客户端决定。在仓库的录制示例中(较窄的提示),Claude Code 自行选择调用并返回组合答案。
传输方式支持 stdio 和 Streamable-HTTP。HTTP 传输是无状态的,默认输出 JSON 响应,适合注册表索引器和远程托管。没有公共托管端点,如需使用 HTTP 传输需自行运行:同一二进制文件,由自己的 bearer token(PLANT_GENOMICS_MCP_HTTP_TOKEN)控制,NCBI BLAST 请求以你自己的联系邮箱发送。
配置方面,Stdio 无需配置。两个重要的环境变量(具体变量名官方文本未明确列出,除 HTTP token 外)。缓存是进程本地的——重启服务器会丢弃所有条目。长时间调用(重试风暴、多秒的 Phytozome BioMart POST)会通过活动会话发出 MCP notifications/progress;客户端通过请求 _meta 中的 progressToken 选择加入。
提供了资源与提示:客户端通过 resources/list 和 prompts/list 发现。具体资源(resources/read)和提示(prompts/get)列表在官方文本中未详细列出。
安装与开发:使用 uv 时传 --extra dev,因为裸 uv sync 会省略(并移除)测试依赖。CI 在每次 push/PR 运行单元套件 + stdio 冒烟测试(矩阵:Python 3.11、3.12、3.13、3.14),并设置死代理使未加门的网络调用失败。单独的 live-smoke 作业运行两个实时测试文件(tests/test_verify_genes.py、tests/test_arf_mcp_client.py,InterPro 和 PANTHER)于 Python 3.12,结果报告但不作为必需检查,因为依赖第三方服务。其余实时套件(PLANT_GENOMICS_MCP_LIVE=1)不在 CI 中运行。
漂移检测:scripts/benchmark_annotations.py 运行一个精选语料库,包含 27 个基因座(横跨全部 12 个生物),通过 12 个函数(organism 解析器加上 9 个后端中的 11 个查询:ATTED-II、BAR、Ensembl Plants、Europe PMC、Gramene、KEGG、Phytozome、STRING-DB、UniProt),并将结果与早前结果的冻结快照(scripts/benchmark_annotations.expected.json)比较,输出 PASS / DRIFT / FAIL 以及两个跨源一致性不变量。变化是相对于该快照检测的,而非对照独立真相。BLAST 和综合管道已在脚本中注册,但没有语料库基因座触发它们。计划的 GitHub Actions 工作流(.github/workflows/benchmark.yml)每周运行,当相同基因座在重跑中失败时告警。操作指南见 docs/benchmarking.md。
发布说明见 CHANGELOG.md,包括 v0.8 → v0.9 的 species= / organism_id= → organism= 迁移和 v1.0.1 的 HTTP token 强制变更。已在官方 MCP 注册表中以命名空间列出。
适用场景
适用于植物基因组学研究,如对拟南芥、水稻等植物的基因座进行功能注释、GO 术语、通路、蛋白互作、文献、变异注释、基因集富集和 BLAST 搜索等查询,支持跨物种和批量处理。示例工作流:examples/arf_family/PAGE.md 中记录了一个 64 次调用、覆盖 114 个基因、三种生物的运行,记录了 51 个缺口(其中 39 个已关闭)。
限制
没有公共托管端点,HTTP 传输需自行运行。缓存为进程本地。底层服务(Ensembl Plants、Phytozome、TAIR、PlantCyc、BAR)有自己的使用条款,批量查询前需查阅。漂移检测是相对于快照而非独立真相。CI 中的 live-smoke 结果依赖第三方服务,不是必需检查。其余实时套件不在 CI 中运行。代码使用 MIT 许可证。除此之外,官方文本未提供其他限制信息。