MCP server for webcam access - capture photos and video for LLM agents
The Webcam MCP Server defines 2 tools with basic structure but significant quality gaps. Both tools have descriptions and are registered via FastMCP decorators, but parameter documentation is sparse and output schemas are not explicitly documented. The descriptions are present but minimal (under 100 chars), and neither tool has a parameter schema visible in the source. take_photo() has an empty input object `{}`, and record_video() has only one parameter (duration_seconds) with a basic description and default. The server uses FastMCP framework with HTTP transport via fastmcp.utilities.types.Image return type, but lacks structured error handling guidance, input validation rules, and clear composition patterns. This is a functional but basic implementation typical of community MCP servers scoring in the 45-60 range.
Record video from webcam. Returns up to 50 frames as JPEG images. Captures video frames at the camera's native framerate, then samples up to 50 frames evenly distributed across the duration.
Capture a high-resolution photo from the webcam. Uses server configuration for resolution and quality settings. Returns JPEG image data that can be displayed or processed by LLMs.
take_photo() has empty input schema `{}` with no documented parameters. Per HARD SCORING RULES, schema score must be 0 when no meaningful schema is present.
Output schema not documented for either tool. take_photo() returns Image(data=<bytes>, format='jpeg') and record_video() returns List[Image(...)], but no structured output documentation exists to guide LLM downstream planning.
Error handling is generic (raises WebcamError). No actionable recovery guidance in docstrings. Per pattern:recovery-guide, errors must tell the LLM what to do next (e.g., 'Camera unavailable. Ensure permissions are granted in System Settings.').
record_video() parameter duration_seconds lacks range constraints. Description says '(default: 5.0 seconds)' but does not specify min/max values (e.g., 0.1 - 60).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 42 | - | v1 |
take_photo() description states 'Uses server configuration for resolution and quality settings' but does not explain what those defaults are (photo_width, photo_height, jpeg_quality values). LLMs need explicit limits and defaults to reason about tool behavior.
Both tools refer to camera_index (configurable via ServerConfig) but expose no parameter to override it. If multiple cameras exist, the LLM cannot request a specific one.
No pagination or sampling limit documented in record_video(). The docstring says 'returns up to 50 frames', but the description is buried in the docstring, not repeated for the LLM in the tool description field.