
plantcv-mcp
io.github.musharna由 GitHub 账号 musharna 发布v1.19.2更新于 Nov 3, 2026
Plant phenotyping via PlantCV — returns traits plus the segmentation overlay they came from
概览
在本地运行 PlantCV 植物表型分析,返回性状数值以及这些数值所依据的分割叠加图。
- 可以做什么
- 推荐分割参数,并预览各通道与目标类型会得到什么结果
- 把图像分割为掩膜,返回叠加图、诊断与警告但不给性状,并可对接近正确的掩膜进行细化
- 从分割会话中测量性状,支持批量图像、托盘内单株以及叶茎形态测量
- 通过分水岭或可选的 Segment Anything 估算叶片数量
- 用已知尺寸标记标定比例、校正镜头畸变,以及裁剪和放大图像
- 分割并测量高光谱与热成像图像
- 适用场景
- 当助手需要从图像中获得定量植物测量结果(叶面积、形态、计数、光谱或热统计)时适用;它同时展示掩膜,便于发现错误分割而不是盲信数值。
- 运行要求
- 以 Python 包形式通过 stdio 在本地运行(pip install plantcv-mcp,或用 uvx 搭配 Python 3.13;需 Python 3.11 至 3.13)。可选的 Segment Anything 工具需安装 sam 附加组件。未声明认证或环境变量;--root 参数或 PLANTCV_MCP_ROOTS 可限制文件访问范围。
安装
在 SourceWeft 中
- 打开 控制台中的 plantcv-mcp,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
plantcv-mcp
plantcv-mcp is an MCP server that lets AI agents run PlantCV plant phenotyping. It returns trait numbers and the segmentation overlay they were measured from, and refuses to return numbers when the segmentation is degenerate.
[CI] [PyPI] [Python] [License] [DOI] [Glama]
[Correct segmentation: four views of a rendered plant, stems and leaves tinted red and outlined in cyan, the gray background untouched] [Inverted segmentation: the whole gray background tinted red, the four plant views left out]
Left, channel="a", object_type="dark": the mask covers 3.1% of the frame, 9 components,
area=32427. Right, channel="s", object_type="dark": the mask covers 96.1%; it is the
background, area=1007829.
Why you get the overlay
Both images come from the same file and the same threshold method; only the channel differs. Without the picture, both runs return 17 traits with correct units and believable magnitudes. The one on the right is measuring the wall behind the plants. Red marks the measured pixels; a cyan line traces the mask's edge.
So segment() returns the overlay and diagnostics but no traits, and measure() needs the
session_id that segment() mints: no single image is measured before you are shown it. The
exception is measure_images(), which applies one recipe to up to 200 images without overlays.
Settle the recipe on one image's overlay first (the server does not check); every image still
passes the segment() guards, and one that trips a blocking guard gets no traits.
Measured with PlantCV 4.11.3 on a synthetic render (first row:
tests/fixtures/multi_specimen.png) and on photographs, each of these returns believable
numbers with correct units:
Install
With uv nothing needs installing: uvx --python 3.13 plantcv-mcp fetches and
runs the current release. Otherwise:
Requires Python 3.11 to 3.13: PlantCV 4.11.3 needs SciPy below 1.16, which has no Python 3.14
wheels, so --python 3.13 keeps uvx off a 3.14 default. PlantCV and its scientific stack make the first install (or first uvx
run) slow. From a checkout: uv add /path/to/plantcv-mcp. The one optional tool,
segment_leaves_sam(), needs pip install "plantcv-mcp[sam]" (torch, torchvision,
segment-anything); without it, that tool refuses with that command and every other tool works.
Configure your MCP client
Claude Desktop and other stdio hosts:
With a pip install the command is plantcv-mcp (checkout config).
Verify with list_methods().
Flags: --root DIR (repeatable, or PLANTCV_MCP_ROOTS) confines every read, and every file
the server keeps, to your imagery: plantcv-mcp --root /data/phenotyping. --no-isolate (or
PLANTCV_MCP_ISOLATE=0) runs analyses in-process instead of in the crash-containing worker.
What the benchmark shows
Claude with the server was compared with Claude writing its own code (mostly OpenCV) in a Python environment we set up with the same PlantCV and OpenCV, on 46 measurement questions about rendered plant images, 3 runs each. A tie means the server matches that result without you building the environment. Questions right in every run, server against Claude's own code: Claude Haiku 5.5 38 against 32, Sonnet 5.5 33 against 28, Opus 5.5 42 against 44. None is separated (pre-registered; exact McNemar p = 0.15, 0.23 and 0.63), and Claude's own code was cheaper on all three models.
The chart is the Opus 5.5 re-run on 2026-10-18, against an unreleased commit (051aff0) that adds
several-channel segmentation rules and zoom_image: right on 97.1% of answers with its own code
and 95.7% with the server. Its own code cost $0.038 against $0.066 per answer (medians; the
intervals do not overlap). On release 1.16.1 the server was right on 86.2% against 95.7%
(p = 0.18). The images have crisp edges, so a single color cut with no model answers 28 of the
46.
We wrote the questions and ran the benchmark ourselves; an outside re-run is welcome. Method, controls and limitations: benchmarks/agent_qa; the Haiku and Sonnet runs: 2026-10-20 re-run.
Tools
Typical loop: suggest_segmentation → segment → look at the overlay → segment again
with another channel, method or polarity if it is wrong (or refine if it is nearly right) →
measure. With a ColorChecker in the frame, color_correct=true corrects colors before
segmenting and excludes the card from the mask. Parameters, an example response and the
measured facts behind each tool:
docs/GUIDE.md.
What it refuses
Each guard was added after a specific failure and names the next action. Blocking guards withhold numbers; advisories travel with them.
- Inverted mask (
implausible_coverage): the right-hand image above, 17 believable traits describing the wall. - Nothing selected, or
fill_sizedeleted the specimen (empty_mask,fill_erased_mask): PlantCV returns 17 zeros within_bounds=True. - Background texture (
noisy_segmentation): specks of chamber wall measured as one plant. - Several plants in one mask (
multi_specimen): usemeasure_regions(). - Wrong scale, wrong session kind, a file changed after segmentation: refused, naming the right tool.
- A lens calibration the boards do not determine, or no color card when one was asked for: refused.
Why each guard exists, and every warning code: docs/GUIDE.md#warnings-and-refusals.
Security
With no --root, the server reads any image file the host user can read and returns it to the
model. It writes only the lens-corrected image, the Segment Anything checkpoint when asked to
download it, and short-lived temporary copies of hyperspectral and thermal inputs. Run it as a
non-root user with --root set. Analyses run in a worker subprocess, so a native crash is a
tool error, not a dead server. Details:
docs/GUIDE.md#security-and-trust-boundary.
Attribution and license
MIT licensed. It depends on PlantCV, which is licensed under the Mozilla Public License 2.0. No PlantCV source is vendored or redistributed here; it is an ordinary runtime dependency, so the MIT license applies to this project's own files. Unofficial: not affiliated with, endorsed by, or sponsored by the Donald Danforth Plant Science Center or the PlantCV maintainers. See NOTICE.
Cite it with CITATION.cff (archived at doi:10.5281/zenodo.21713516). Changes: CHANGELOG.md.
来源:README.md,提交 d6b2e59
工具
0版本历史
12- v1.19.2最新Nov 3, 2026
- v1.18.3Nov 1, 2026
- v1.18.2Nov 1, 2026
- v1.18.1Oct 31, 2026
- v1.18.0Oct 29, 2026
- v1.17.1Oct 20, 2026
- v1.17.0Oct 20, 2026
- v1.16.1Sep 26, 2026
- v1.16.0Sep 23, 2026
- v1.15.0Sep 19, 2026
- v1.14.0Sep 19, 2026
- v1.13.1Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分