Skip to main content

Local offline OpenCV-based image-processing MCP server: webcam capture, image transforms, edges, contours, face/QR detection, video, and ~40 tools.

Project description

farshid-mcp-imageProcessing

A comprehensive OpenCV image-processing MCP server for VS Code Copilot Agent Mode (or any MCP client). Exposes ~40 tools across webcam capture, image I/O, transforms, color, filtering, edges, thresholding, morphology, contours/shapes, feature matching, object detection (faces / eyes / bodies / QR), drawing, image arithmetic, template matching, and video processing.

  • PyPI: farshid-mcp-imageProcessing
  • MCP Registry: io.github.pirahansiah/farshid-mcp-imageProcessing
  • Python: 3.14+
  • OS: latest Windows 11, latest macOS, latest mainstream Linux (Ubuntu 24.04+/Fedora 41+)

Install (PyPI)

pip install farshid-mcp-imageProcessing
farshid-mcp-imageprocessing          # runs the stdio MCP server

Register in VS Code

Add this to your user or workspace mcp.json:

{
  "servers": {
    "imageProcessing": {
      "command": "farshid-mcp-imageprocessing",
      "type": "stdio"
    }
  }
}

Or, if you cloned the repo and want to run from source with the local .venv:

git clone https://github.com/pirahansiah/farshid-mcp-imageProcessing
cd farshid-mcp-imageProcessing
# Windows (PowerShell):
py -3.14 -m venv .venv ; .\.venv\Scripts\Activate.ps1
# macOS / Linux:
python3.14 -m venv .venv && source .venv/bin/activate

pip install -U pip
pip install -e .

opencv-contrib-python is used so the bundled Haar cascades and extra algorithms are available.

Quick start: the /cv Copilot prompt

This repo ships a workspace prompt file at .github/prompts/cv.prompt.md. In VS Code Copilot Chat (Agent mode), type:

/cv take image from webcam and save it as gray scale 240 * 240

The agent will call webcam_save, image_to_grayscale, and image_resize from this server to produce the requested file under ./.farshid/cv/.

Tool catalog

Webcam / capture

  • webcam_capture(camera_index=0) → returns a PNG image
  • webcam_save(output_path="", camera_index=0)
  • webcam_preview(camera_index=0, seconds=10) (local desktop window)
  • webcam_record(output_path, seconds=5, camera_index=0, fps=20)

Image I/O & info

  • image_show(path) — return image to chat
  • image_info(path) — shape, dtype, mean, file size
  • image_convert(input_path, output_path, quality=95)

Geometric transforms

  • image_resize(... width|height|scale, interpolation)
  • image_crop(input_path, output_path, x, y, width, height)
  • image_rotate(input_path, output_path, angle, scale=1, keep_size=False)
  • image_flip(input_path, output_path, direction)
  • image_pad(... top, bottom, left, right, border_type, color)

Color

  • image_to_grayscale
  • color_convert(target=gray|hsv|hls|lab|ycrcb|rgb|bgr)
  • adjust_brightness_contrast
  • histogram_equalize(method=clahe|global)
  • histogram_data(bins=32)

Filtering

  • blur_gaussian(ksize, sigma)
  • blur_median(ksize)
  • blur_bilateral(d, sigma_color, sigma_space)
  • sharpen(amount)
  • denoise(strength)

Edges / gradients

  • edges_canny(threshold1, threshold2)
  • edges_sobel(ksize)
  • edges_laplacian(ksize)

Thresholding & morphology

  • threshold(method=otsu|binary|binary_inv|adaptive_mean|adaptive_gaussian)
  • morphology(op=erode|dilate|open|close|gradient|tophat|blackhat)

Contours & shapes

  • find_contours(input_path, output_path?, thresh, min_area)
  • detect_circles(...) — Hough
  • detect_lines(...) — Probabilistic Hough
  • detect_corners(...) — Shi-Tomasi

Feature matching

  • feature_match(image1, image2, output_path?) — ORB + BFMatcher

Object detection (Haar)

  • detect_faces
  • detect_eyes
  • detect_bodies
  • detect_qrcode

Drawing

  • draw_rectangle, draw_circle, draw_line, draw_text

Composition / arithmetic

  • image_blend(image1, image2, output_path, alpha)
  • image_diff(image1, image2, output_path?) → mean/max diff
  • image_concat(images, output_path, direction)
  • template_match(image_path, template_path, output_path?, threshold)

Video

  • video_info(path)
  • video_extract_frames(video_path, output_dir, every_n, max_frames, ext)
  • video_thumbnail(video_path, output_path, time_seconds)

Build & publish

pip install -U build twine mcp-publisher
python -m build
twine upload dist/*
mcp-publisher login github
mcp-publisher publish .mcp/server.json

OS notes

  • Windows 11 (latest): webcam works out of the box; ensure Settings → Privacy & security → Camera → Let desktop apps access your camera is On.
  • macOS (latest): the first webcam call triggers a system Camera permission prompt; grant it to the terminal/VS Code process.
  • Linux (latest): requires a working /dev/video* device. Headless servers without a display cannot use webcam_preview (it opens an OpenCV window).

Notes

  • Never use print() in tool functions: stdout is the MCP protocol channel. Use sys.stderr (the _log helper at the bottom of server.py).
  • webcam_preview opens a real desktop window — only works where the server has a display (not over plain SSH or in a headless container).
  • All paths support ~ expansion. Output directories are created automatically.
  • Tools that return annotated images take an optional output_path; when omitted they only return the JSON metadata.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

farshid_mcp_imageprocessing-0.2.0.tar.gz (14.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

farshid_mcp_imageprocessing-0.2.0-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file farshid_mcp_imageprocessing-0.2.0.tar.gz.

File metadata

  • Download URL: farshid_mcp_imageprocessing-0.2.0.tar.gz
  • Upload date:
  • Size: 14.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for farshid_mcp_imageprocessing-0.2.0.tar.gz
Algorithm Hash digest
SHA256 47edaa60152346a8a51cde62fbe24c900e2d1c645b174fa9091d53fabc3132e2
MD5 a3aee6149b11a4b028fe07ac84476ccc
BLAKE2b-256 b87d13dd35fdb46867a875daee946b81688340d21ab6ec8d1484c544828d3ff4

See more details on using hashes here.

File details

Details for the file farshid_mcp_imageprocessing-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: farshid_mcp_imageprocessing-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 15.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for farshid_mcp_imageprocessing-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 37d14c8d2f63ba4d403f85d775cc4f7286acdb073dbda22e52f3595e70b33373
MD5 ea458f41f59fdfda9702751bc4341d1e
BLAKE2b-256 1062b78edaa2b3d1ce00ce08035a8d2cbf925945d5b98741310d212e30c8416a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page