1.3.1npm · rudycanshoot · current release
Observed 2026-08-15T22:47:33.098Z using mcpSecurity-inventory. Status: succeeded. Negotiated protocol: 2025-06-18.
{
"tools": {
"listChanged": true
}
}| Tool | Category | Annotations | Risk |
|---|---|---|---|
annotate_screenshotAdd a text label to an existing screenshot. Returns the annotated image path.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Input image path"
},
"text": {
"type": "string",
"description": "Text to add"
},
"outputPath": {
"description": "Where to write annotated image (default: replaces input)",
"type": "string"
},
"position": {
"default": "bottom",
"type": "string",
"enum": [
"top",
"bottom",
"center"
]
},
"color": {
"default": "#00ff88",
"description": "Text color as hex, e.g. #ff0000",
"type": "string"
},
"fontSize": {
"default": 18,
"type": "integer",
"minimum": 8,
"maximum": 72
}
},
"required": [
"path",
"text"
]
} | — | — · — | — |
capture_commandRun a shell command and render its output as a styled terminal screenshot PNG. Works without a display — uses Python/Pillow to render text on a dark terminal background. Returns the file path.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"command": {
"type": "string",
"description": "Shell command to run (passed to sh -c)"
},
"title": {
"description": "Title bar label (default: the command itself)",
"type": "string"
},
"outputDir": {
"description": "Directory to save into",
"type": "string"
},
"filename": {
"description": "Output filename (default: terminal-<timestamp>.png)",
"type": "string"
},
"timeout": {
"default": 30,
"description": "Command timeout in seconds",
"type": "integer",
"minimum": 1,
"maximum": 120
},
"fontSize": {
"default": 13,
"description": "Font size for rendering",
"type": "integer",
"minimum": 8,
"maximum": 24
}
},
"required": [
"command"
]
} | — | — · — | — |
capture_urlHeadlessly render a web page (no visible browser) and screenshot it. Supports auth via cookies, a custom viewport, full-page capture, and waiting for dynamic content (e.g. maps) to settle. Returns the saved file path.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The page URL to capture"
},
"width": {
"default": 1600,
"description": "Viewport width in px",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"height": {
"default": 1000,
"description": "Viewport height in px",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"fullPage": {
"default": false,
"description": "Capture the full scrollable page",
"type": "boolean"
},
"waitMs": {
"default": 4000,
"description": "Settle delay after load (ms) for dynamic content",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"waitSelector": {
"description": "Also wait until this CSS selector exists",
"type": "string"
},
"cookies": {
"description": "Auth cookies as {name: value} (sent as a Cookie header)",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"headers": {
"description": "Extra HTTP headers as {name: value}",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"filename": {
"description": "Output filename",
"type": "string"
},
"outputDir": {
"description": "Directory to save into",
"type": "string"
}
},
"required": [
"url"
]
} | — | — · — | — |
cleanup_videosDelete temporary screen recordings (default) or all recordings.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"all": {
"default": false,
"description": "If true, delete all videos not just tmp/",
"type": "boolean"
},
"olderThanMinutes": {
"default": 0,
"description": "Only delete files older than this many minutes (0 = all matching)",
"type": "number",
"minimum": 0
}
}
} | — | — · — | — |
compare_screenshotsGet pixel-level similarity metrics between two screenshots.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"before": {
"type": "string",
"description": "Path to first image"
},
"after": {
"type": "string",
"description": "Path to second image"
}
},
"required": [
"before",
"after"
]
} | — | — · — | — |
diff_screenshotsCompare two screenshots and render a difference image.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"before": {
"type": "string",
"description": "Path to 'before' image"
},
"after": {
"type": "string",
"description": "Path to 'after' image"
},
"outputPath": {
"type": "string",
"description": "Where to save the diff image"
},
"mode": {
"default": "highlight",
"type": "string",
"enum": [
"highlight",
"heatmap",
"side-by-side"
]
}
},
"required": [
"before",
"after",
"outputPath"
]
} | — | — · — | — |
list_screenshotsList recent screenshots captured by this tool.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"limit": {
"default": 20,
"description": "Max number of results",
"type": "integer",
"minimum": 1,
"maximum": 100
}
}
} | — | — · — | — |
list_videosList recent screen recordings (including temporary ones).Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"limit": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 100
}
}
} | — | — · — | — |
read_screenshotRead a previously captured screenshot as base64 so the AI can view it.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Absolute path to the screenshot file"
}
},
"required": [
"path"
]
} | — | — · — | — |
read_videoExtract frames from a saved video/GIF and return them as images so the AI can watch and understand the recording.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Absolute path to the video or GIF"
},
"maxFrames": {
"default": 12,
"description": "Max evenly spaced frames to return",
"type": "integer",
"minimum": 1,
"maximum": 30
}
},
"required": [
"path"
]
} | — | — · — | — |
record_terminalRecord a TERMINAL SESSION: run a shell command and capture its terminal output over time as a GIF. Unlike record_video (which screen-captures the whole desktop, including private windows), this records ONLY the terminal — no desktop, no private info — and works headless (WSL, SSH, CI). Ideal for demoing CLI programs.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"command": {
"type": "string",
"description": "Shell command to run and record (e.g. './demo.sh')"
},
"output": {
"description": "Output .gif path (default: ~/.rudycanshoot/videos/tmp/)",
"type": "string"
},
"fontSize": {
"default": 15,
"description": "Font size",
"type": "integer",
"minimum": 8,
"maximum": 40
},
"sampleMs": {
"default": 400,
"description": "Snapshot cadence (ms)",
"type": "integer",
"minimum": 100,
"maximum": 2000
},
"idleCapMs": {
"default": 1500,
"description": "Cap long unchanged stretches (e.g. a model load) to this many ms so the GIF stays short",
"type": "integer",
"minimum": 200,
"maximum": 10000
},
"rows": {
"default": 32,
"description": "Visible terminal rows (tail window)",
"type": "integer",
"minimum": 4,
"maximum": 80
},
"cols": {
"default": 110,
"description": "Visible terminal columns",
"type": "integer",
"minimum": 20,
"maximum": 240
},
"keep": {
"default": false,
"description": "Store in videos/ instead of videos/tmp/",
"type": "boolean"
},
"returnFrames": {
"default": true,
"description": "Return sampled frames as images for AI review",
"type": "boolean"
},
"maxFrames": {
"default": 10,
"description": "Max frames returned when returnFrames=true",
"type": "integer",
"minimum": 1,
"maximum": 30
}
},
"required": [
"command"
]
} | — | — · — | — |
record_videoRecord a temporary screen video for visual monitoring. By default returns evenly spaced frames as images so the AI can watch/understand what happened, plus the saved video path.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"durationSec": {
"default": 5,
"description": "How long to record (seconds)",
"type": "number",
"minimum": 0.5,
"maximum": 120
},
"fps": {
"default": 4,
"description": "Capture frame rate (frame-sampling backend)",
"type": "integer",
"minimum": 1,
"maximum": 30
},
"area": {
"description": "Optional region as 'x,y,width,height'",
"type": "string"
},
"temporary": {
"default": true,
"description": "Store under ~/.rudycanshoot/videos/tmp/ for easy cleanup",
"type": "boolean"
},
"returnFrames": {
"default": true,
"description": "Include extracted frames as images the AI can view",
"type": "boolean"
},
"maxFrames": {
"default": 12,
"description": "Max frames returned to the AI when returnFrames=true",
"type": "integer",
"minimum": 1,
"maximum": 30
},
"filename": {
"description": "Output filename",
"type": "string"
},
"outputDir": {
"description": "Override output directory",
"type": "string"
}
}
} | — | — · — | — |
take_screenshotCapture a screenshot of the screen, active window, or a region. Returns the file path of the saved image.Input schema{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"mode": {
"default": "fullscreen",
"description": "What to capture",
"type": "string",
"enum": [
"fullscreen",
"window",
"area"
]
},
"area": {
"description": "Region as 'x,y,width,height' — only used when mode=area",
"type": "string"
},
"filename": {
"description": "Output filename (default: screenshot-<timestamp>.png)",
"type": "string"
},
"outputDir": {
"description": "Directory to save into (default: ~/.rudycanshoot/captures/)",
"type": "string"
}
}
} | — | — · — | — |