Skip to content
Agentmart
Submit a tool

plantcv-mcp

Plant phenotyping via PlantCV — returns traits plus the segmentation overlay they came from

Connector by musharna · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)
Write a review

Chalk Labs

Need help deploying plantcv-mcp?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/musharna-plantcv-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Plant phenotyping via PlantCV — returns traits plus the segmentation overlay they came from

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
11 read · 2 write · 0 delete · 4 not yet classified
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Tools by what they do 17

Read from the source code; the running server may list different tools.

Read 11 · Look things up without changing anything.

  • count_leaves
  • list_methods
  • measure
  • measure_morphology
  • measure_regions
  • measure_spectral
  • measure_thermal
  • segment_hyperspectral
  • segment_thermal
  • suggest_segmentation
  • zoom_image

Write 2 · Create, change, send or run things.

  • calibrate_scale_from_marker
  • refine

Not yet classified 4 · We could not tell from the name and description.

  • correct_lens_distortion
  • measure_images
  • segment
  • segment_leaves_sam

Network hosts it talks to 4

  • dl.fbaipublicfiles.com · found in code
  • doi.org · found in code
  • github.com · found in code
  • glama.ai · found in code

Files it touches

  • /mnt/c/Us
  • Your home directory (~)
  • Any path the agent passes to its tools

Tools (17)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • calibrate_scale_from_markerCalibrate pixels per millimetre

    Measure 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. (x, y, w, h) bounds a region containing ONLY the marker, with a little margin. marker_length_mm is its longest real dimension — the diameter of a circular marker. Check the returned marker_length_px against what you expect: a wrong scale silently rescales every trait you measure afterwards.

  • correct_lens_distortionCorrect lens distortion (writes a corrected image)

    Correct 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_path elsewhere when the image you are correcting sits with the calibration photos. Use this FIRST when straight edges bow in the image: measured on a real fisheye photo, distortion inflated plant area …

  • count_leavesCount leaf instances by watershed (returns the labelled overlay)

    Split 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. This is an ESTIMATE, not a learned segmentation. The watershed splits the mask wherever two distance-transform peaks are at least min_distance PIXELS apart: overlapping rosette leaves with no notch between them stay merged, and a long or lobed leaf can be cut in two. min_distance decides the…

  • list_methodsList segmentation methods

    List available segmentation channels, methods, object types, analyses, and the pinned PlantCV version.

  • measureMeasure traits from a segmentation

    Return plant traits for a segmentation produced by segment(). Raises if the mask is degenerate rather than returning zeros. analyses defaults to ["size"]; add "color" for hue/saturation/value statistics. px_per_mm converts spatial traits to mm and mm2 — without it every size is in PIXELS and is not comparable between images shot at different distances or zoom. include_histograms adds three frequency arrays totalling 692 numbers, off by default. traits (e.g. ["area"]) returns only those traits; a name the analyses do not produce is refused with the available names.

  • measure_imagesMeasure many images with one recipe

    Run one fixed segmentation recipe across many images. For trays give nrows/ncols (and rect_grid geometry if needed): each image is then measured per plant exactly as measure_regions() does and the row carries `regions` instead of `traits`. Without a grid a tray returns the GROUP's traits with a `multi_specimen` advisory. Real photographs take ~10 s each; max_seconds (default 300) bounds the call and images not started in time come back as not_run with their paths listed for resubmission. Each row reports its own `seconds`. There is no overlay here — nobody reviews two hundred of them — so i…

  • measure_morphologyMeasure morphology: leaves, stem, branch points (returns the overlay)

    Skeleton-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. prune_size removes skeleton spurs shorter than itself; the response warns (prune_size_sensitive) when the segment count changes by >30% at twice this value, because then the table describes the parameter, not the plant. tangent_size is the pixel window for tangent/insertion angles (defau…

  • measure_regionsMeasure each plant in a tray (returns the labelled overlay)

    Measure EACH plant in a multi-plant image separately. Works on every session kind: an RGB session returns traits per region (analyses / px_per_mm apply); a thermal session returns temperature statistics per region; a hyperspectral session returns index statistics per region (`indices`, default the session's index). Arguments belonging to another modality are refused, not ignored. measure() treats the whole frame as one region, so on a tray it merges every plant into a single object and every size trait describes the group. This returns one row per region, plus an overlay with each region out…

  • measure_spectralMeasure spectral indices and reflectance

    Per 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 sessions.

  • measure_thermalMeasure temperatures under a thermal mask

    max, 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.

  • refineRefine a mask (returns the new overlay)

    Apply morphological cleanup to a session's mask and get a NEW session. ops is an ordered list like [{"op": "fill_holes"}, {"op": "keep_largest", "n": 1}]; list_methods() documents every op and its parameters. The original session is untouched and still measurable, so a refinement that looks wrong is simply discarded. Returns the refined overlay — look at it — plus before/after mask diagnostics and warnings; NOT traits. Every op is validated before any runs, and a refinement that leaves no measurable plant is refused rather than minted. A `refine_dropped_object` warning names any component ≥10…

  • segmentSegment an image (returns the overlay)

    Segment an image. Returns the overlay image and mask diagnostics — NOT traits. Use the returned session_id with measure() to get traits. One channel: channel + method + object_type. object_type picks which side of the threshold is the plant ('dark' or 'light', default 'dark'); the wrong one returns the background with plausible-looking traits, so call suggest_segmentation() if unsure. Several channels, for a plant no one channel captures (yellowed and green leaves): pass rules instead, joined by combine ('or' = any rule, 'and' = every rule). A rule is {"channel", "method", "object_type"} or …

  • segment_hyperspectralSegment a hyperspectral cube by a spectral index (returns the overlay)

    Compute 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(). Cubes are usually integer counts: an index computed on counts wraps around silently, so the cube is either CALIBRATED to reflectance from white_reference + dark_reference (ENVI pairs; refused if white - dark is not positive everywhere) or cast to float with the `uncalibrated_cube` warning, meaning indices are relative, not reflectance. index is any PlantCV spectra…

  • segment_leaves_samCount leaf instances with Segment Anything (optional extra; returns the labelled overlay)

    Split 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), mostly on the mask, and not already covered by smaller kept masks. OPTIONAL: needs `pip install "plantcv-mcp[sam]"` (torch, torchvision, segment-anything). Without it this refuses with SamNotInstal…

  • segment_thermalSegment a thermal frame by temperature (returns the overlay)

    Read 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 borrowed from an RGB session. A band that selects nothing is refused.

Show 2 more tools
  • suggest_segmentationSuggest a segmentation

    Return 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 you.

  • zoom_imageZoom into part of an image (returns the enlarged crop)

    Return the box (x, y, w, h) of the image, in full-frame pixels, enlarged so its longest edge is about 1024 px (or by `scale`, 1-8), to look closely at what a whole-frame view shows too small: leaves to count, a marker's edge, a seedling in one pot. A picture, not a measurement; a box past the frame's edge is clipped and says so.

Signals

Stars
0
Forks
0
Open issues
2
Weekly downloads
559
Last commit
Oct 23, 2026 (7 days ago)
Last release
Oct 20, 2026 (10 days ago)
Last package publish
Oct 20, 2026 (10 days ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.musharna/plantcv-mcp
Version
1.17.1
Auth
No auth
Packages
pypi plantcv-mcp
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from musharna

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get plantcv-mcp running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying plantcv-mcp?

CallGet help
Cite this page

plantcv-mcp. Agent Mart. https://agentmart.dev/connectors/musharna-plantcv-mcp (last updated 2026-10-24)