MCP Screenshot Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_HOST | No | Host for HTTP transport | 0.0.0.0 |
| MCP_PORT | No | Port for HTTP transport | 8000 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| capture_screenshotA | Capture a screenshot of the screen, a region, or a specific window. On macOS, this uses the native screencapture command. On other systems, it uses PIL's ImageGrab or pyautogui as fallback. For window capture on macOS, you need the numeric window ID (not the window name). You can find window IDs using: osascript -e 'tell app "System Events" to get id of windows of processes' |
| load_imageB | Load an existing image file for annotation. |
| add_boxB | Draw a rectangle/box on the image. |
| add_lineC | Draw a line on the image. |
| add_arrowC | Draw an arrow on the image. |
| add_textC | Add text annotation to the image. |
| add_circleC | Draw a circle on the image. |
| add_highlightC | Add a semi-transparent highlight region to the image. |
| precise_annotateA | Pixel-perfect annotation tool. Places annotations at EXACT pixel coordinates. No anchor adjustments, no auto-positioning - pure pixel placement. Coordinates:
Examples:
|
| annotateA | Smart unified annotation tool with flexible positioning and anchor support. Position formats:
Anchor controls which part of the annotation aligns to the position:
Offset allows fine-tuning: offset_x=10 moves 10px right, offset_y=-5 moves 5px up. Examples:
|
| batch_annotateA | Apply multiple annotations in a single call. Pass a JSON array of annotation specs. Each annotation follows the same format as the annotate() tool. Example: [ {"type": "box", "position": "top-left", "width": 200, "height": 100, "color": "blue"}, {"type": "text", "position": "top-left", "text": "Header Area"}, {"type": "arrow", "position": "center-left", "end_position": "center-right", "color": "green"}, {"type": "callout", "position": "bottom-right", "text": "Click here"} ] |
| label_regionsB | Quickly label multiple regions of an image. Pass a JSON object mapping region names to positions. Example: { "Navigation": "top-left", "Search Bar": "top-center", "User Menu": "top-right", "Sidebar": "center-left", "Main Content": "center", "Footer": "bottom-center" } |
| annotate_stepA | Add a numbered step annotation with callout circle, arrow, and optional text. This is a composite tool that combines a numbered callout with an arrow pointing to a target location. Useful for creating step-by-step tutorials or highlighting UI elements. If callout_position is not specified, it's automatically placed offset from the target. |
| blur_regionA | Blur or pixelate a region of the image to hide sensitive information. Use this for hiding passwords, email addresses, personal info, etc. |
| crop_imageC | Crop the image to a specific region. |
| resize_imageB | Resize the image by dimensions or scale factor. |
| add_numbered_calloutC | Add a numbered callout (circled number) to the image. Numbers auto-increment if not specified, making it easy to add sequential callouts. |
| reset_callout_counterA | Reset the auto-increment callout counter to 0. |
| add_borderC | Add a border around the entire image. |
| undoA | Undo the last annotation on an image. |
| get_undo_countA | Get the number of available undo operations for an image. |
| quick_saveB | Quick save to common locations (Desktop, Downloads, Documents, or temp). Automatically determines the correct path based on the operating system. |
| rotate_imageB | Rotate the image by 90, 180, or 270 degrees. |
| flip_imageB | Flip the image horizontally (mirror) or vertically. |
| add_watermarkC | Add a text watermark to the image. |
| adjust_brightnessB | Adjust image brightness. |
| adjust_contrastC | Adjust image contrast. |
| compare_imagesA | Compare two images and optionally create a diff image highlighting differences. Returns the percentage of pixels that differ and creates a new image showing the differences if highlight_differences is True. Useful for comparing before/after screenshots, detecting UI changes, or validating visual regression tests. |
| create_side_by_sideA | Create a side-by-side comparison image from two images. Useful for visual comparisons, before/after documentation, or A/B testing screenshots. Labels are added above each image if label_height > 0. |
| list_imagesA | List all images stored in the current session. |
| get_memory_statsA | Get current memory usage statistics for the image store. |
| configure_limitsA | Configure memory limits for the image store. Triggers eviction if new limits are lower. |
| get_imageB | Get a specific image by its ID. Returns the image data. |
| duplicate_imageB | Create a copy of an existing image. |
| delete_imageB | Delete an image from the session. |
| export_sessionA | Export all images and metadata to a zip archive for later restoration. The archive contains:
Use import_session to restore the session later. |
| import_sessionA | Import a previously exported session from a zip archive. By default, merges with the existing session. Set merge=False to replace all current images with the imported ones. |
| save_imageC | Save an image to disk. |
| copy_to_clipboardA | Copy an image to the system clipboard. |
| get_image_base64B | Get an image as a base64-encoded string. |
| open_in_previewB | Open an image in the native Preview app (macOS only). On macOS, this opens the image in Preview.app for viewing and native annotation. On other platforms, it opens with the default image viewer. |
| open_file_in_previewA | Open an image file directly in the native Preview app (macOS) or default viewer. This doesn't require loading the image into the session first. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 42 tools
Many annotation tools overlap heavily: add_box, add_circle, add_line, add_arrow, and add_text duplicate the same operations available through annotate and precise_annotate via type parameters. add_numbered_callout and annotate_step both create numbered callouts with arrows, making the intended tool hard to select without reading every description.
Tool names overwhelmingly follow a predictable snake_case verb_noun pattern like list_images, crop_image, rotate_image, and delete_image. Minor deviations like quick_save, precise_annotate, and annotate_step are still readable and consistent with the overall style.
42 tools is excessive for a screenshot and annotation server, especially since many are redundant variations of the same annotation capability. The core workflow could be served with roughly half the tools, so the count feels inflated rather than deliberate.
The surface covers the full screenshot lifecycle well: capture, load, annotate, edit, compare, save, export/import, and session management. Minor gaps exist such as no redo operation or explicit clear-session tool, but agents can work around these.