plantcv-mcp server
Plant phenotyping via PlantCV — returns traits plus the segmentation overlay they came from
0 stars261 downloads/wk
Reviews
Write oneNobody has reviewed plantcv-mcp yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
plantcv-mcp tools (16, 1 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
calibrate_scale_from_markerMeasure a size marker of known real length and return px_per_mm, which you then pass to measure() to get traits in mm instead of pixels.
correct_lens_distortionCorrect lens/fisheye distortion using checkerboard calibration photos, write the corrected image next to the input as <image>_undistorted.png (or to output_path, refused if it exists), and return its path plus a preview. Segment, calibrate scale, and measure the CORRECTED file. The correction is never written INTO checkerboard_dir: everything there is read as a calibration frame, so pass output_pa
count_leavesSplit ONE top-view plant mask into leaf instances with PlantCV's distance-transform watershed and return the count, each instance's area, centroid [x, y] and bbox [x, y, w, h] (full-frame pixels), and the overlay with every instance outlined and numbered — instance `id` is the number drawn on the picture.
list_methodsList available segmentation channels, methods, object types, analyses, and the pinned PlantCV version.
measureReturn plant traits for a segmentation produced by segment(). Raises if the mask is degenerate rather than returning zeros.
measure_imageswrite actionRun one fixed segmentation recipe across many images.
measure_morphologySkeleton-based traits for ONE plant: per-segment path and euclidean length, curvature, angle, tangent angle and insertion angle, plus stem height/length/angle, tip and branch-point counts, cycles and widths. Returns the numbered-segment overlay with the table — segment `id` is the number drawn on the picture.
measure_regionsMeasure EACH plant in a multi-plant image separately.
measure_spectralPer requested index: mean, median, std, min, max over the session's mask, computed on the calibrated (or float-cast) cube exactly as segment_hyperspectral() prepared it. indices defaults to the index the session was segmented with. include_spectrum adds the per-band mean/ max/min/std reflectance — hundreds of numbers per list, off by default; band_count is always reported. Refuses RGB and thermal
measure_thermalmax, min, mean and median degrees Celsius over the session's mask, via PlantCV's analyze.thermal, plus the pixel count and the frame's range. include_histograms adds the 100-bin temperature histogram. Refuses RGB and hyperspectral sessions.
refineApply morphological cleanup to a session's mask and get a NEW session.
segmentSegment an image. Returns the overlay image and mask diagnostics — NOT traits. Use the returned session_id with measure() to get traits.
segment_hyperspectralCompute one spectral index over an ENVI cube (.raw/.hdr pair; give either path) and threshold it into a mask, returning the overlay on the cube's pseudo-RGB plus diagnostics — NOT numbers. Use the session_id with measure_spectral().
segment_leaves_samSplit ONE top-view plant mask into leaf instances with Segment Anything (ViT-B, Apache-2.0) and return the count, each instance's area, centroid [x, y] and bbox [x, y, w, h] (full-frame pixels), and the overlay with every instance outlined and numbered, as count_leaves() does. The model is prompted on a 32x32 point grid restricted to the mask; masks are kept when leaf-sized (0.2%-40% of the plant)
segment_thermalRead a FLIR radiometric .jpg (via flyr), a .csv, or a .npz of degrees Celsius and select the pixels between min_c and max_c (give at least one) as the plant. Returns the overlay on a grey rendering of the frame, the frame's temperature range and diagnostics — NOT numbers; use the session_id with measure_thermal(). A thermal frame is a different sensor from the RGB camera, so a mask is never borrow
suggest_segmentationReturn colourspace and threshold contact sheets, plus what each object_type would yield on this image, so the channel/method/polarity choice is informed rather than blind. Call this before segment(). polarity.warnings carries `noisy_segmentation` when the recommended polarity is many components with no dominant one — background texture, not a plant — which the `ambiguous` flag alone cannot tell yo
Public scan report
scanner v0.1.5 · 2026-09-19 · same rubric, same numbers if you re-run it
- Code scan23 source files scanned20/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitylocal package, no credentials required12/15
- Maintenancelast push 0 days ago15/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
Findings (1)
- mediumeval / new Function used
exec.evalplantcv_mcp-1.15.0/src/plantcv_mcp/sam_leaves.py: …te_dict(state) model.to(device).eval() _loaded.clear() # one model i…
Install directly
claude mcp add plantcv-mcp -- uvx plantcv-mcp
plantcv-mcp: common questions
- Is plantcv-mcp server safe?
- Yes, by our scan: it is graded A (85/100). Read the plantcv-mcp safety report
- How do I install plantcv-mcp?
- It runs on your machine. Copy the Claude Code, Claude Desktop or Cursor config from the install section.
- Does plantcv-mcp need an API key?
- Not as far as the registry entry and our scan can tell: no credentials are declared or required.
- Is plantcv-mcp maintained?
- The last commit was in the last day (2026-09-19). The latest release is v1.15.0.