Graphics Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Graphics Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Unified MCP server for raster image inspection, conversion, and manipulation.
Version: 0.1.2 Status: Internal Bodai integration component
Crackerjack is the standard quality-control and CI/CD gate for Graphics MCP changes. Local verification should mirror the Crackerjack workflow used across the Bodai ecosystem.
______________________________________________________________________
Graphics MCP exposes common image operations through a FastMCP server. It gives agents a bounded way to inspect image metadata, convert formats, resize, crop, rotate, flip, thumbnail, and apply filters while keeping filesystem access constrained to configured directories.
The current implementation uses the Pillow backend. The settings model already reserves flags for ImageMagick and GIMP backends, but those should be treated as future or optional surfaces unless validated for the target deployment.
Implemented tool surface:
/health and /healthz for MCP client and process supervision checksgit clone https://github.com/lesleslie/graphics-mcp.git
cd graphics-mcp
uv sync --group devuv run graphics-mcp start
uv run graphics-mcp healthThe default HTTP bind is 127.0.0.1:3040.
export GRAPHICS_ALLOWED_DIRECTORIES="/tmp,/Users/les/Pictures,/Users/les/Downloads"
uv run graphics-mcp startThe CLI is built with mcp-common and provides the standard lifecycle command surface used by Bodai MCP servers.
uv run graphics-mcp start # Start the HTTP MCP server
uv run graphics-mcp stop # Stop the managed server process
uv run graphics-mcp restart # Restart the managed server process
uv run graphics-mcp status # Show process status
uv run graphics-mcp health # Run the local health probeAdd the server to an MCP client configuration:
{
"mcpServers": {
"graphics": {
"command": "uv",
"args": ["run", "graphics-mcp", "start"],
"cwd": "/Users/les/Projects/graphics-mcp",
"env": {
"GRAPHICS_ALLOWED_DIRECTORIES": "/tmp,/Users/les/Pictures,/Users/les/Downloads"
}
}
}
}curl http://127.0.0.1:3040/health
curl http://127.0.0.1:3040/healthz| Tool | Purpose | Required Inputs |
|---|---|---|
get_image_info | Inspect image metadata | image_path |
convert_image | Convert an image to another format | image_path, output_format |
resize_image | Resize an image by width, height, and mode | image_path, width or height |
crop_image | Crop an image to pixel boundaries | image_path, left, top, right, bottom |
apply_filter | Apply a raster filter effect | image_path, filter_type |
rotate_image | Rotate an image by degrees | image_path, degrees |
flip_image | Flip horizontally or vertically | image_path |
create_thumbnail | Create a thumbnail within max dimensions | image_path, width, height |
list_available_filters | List supported filter names | none |
list_allowed_directories | Show configured filesystem guardrails | none |
list_supported_formats | Show supported image formats | none |
Tool responses follow a consistent ToolResponse shape:
{
"success": true,
"message": "Image converted successfully",
"data": {},
"error": null,
"next_steps": []
}Committed defaults live in settings/graphics.yaml. Runtime overrides should come from environment variables or a local .env file that is not committed.
| Setting | Environment Variable | Default |
|---|---|---|
| Default backend | GRAPHICS_DEFAULT_BACKEND | pillow |
| Enable Pillow | GRAPHICS_ENABLE_PILLOW | true |
| Enable ImageMagick | GRAPHICS_ENABLE_IMAGEMAGICK | false |
| Enable GIMP | GRAPHICS_ENABLE_GIMP | false |
| Allowed directories | GRAPHICS_ALLOWED_DIRECTORIES | /tmp, ~/Pictures, ~/Downloads |
| Max file size | GRAPHICS_MAX_FILE_SIZE_MB | 100 |
| Allowed formats | GRAPHICS_ALLOWED_FORMATS | JPEG, PNG, GIF, BMP, WEBP, TIFF |
| HTTP host | GRAPHICS_HTTP_HOST | 127.0.0.1 |
| HTTP port | GRAPHICS_HTTP_PORT | 3040 |
| Log level | GRAPHICS_LOG_LEVEL | INFO |
| JSON logs | GRAPHICS_LOG_JSON | true |
graphics_mcp/
backends/ # Backend interface and Pillow implementation
cli.py # mcp-common lifecycle CLI
config.py # Pydantic settings and logging
models.py # Typed image operation models
server.py # FastMCP application factory
tools/ # Universal and raster MCP tools
settings/
graphics.yaml # Committed defaults
tests/uv sync --group dev
uv run pytest
uv run ruff check graphics_mcp tests
uv run ruff format graphics_mcp tests
uv run mypy graphics_mcpUse targeted tests when isolating a backend or tool behavior:
uv run pytest tests -k resize -vGRAPHICS_ALLOWED_DIRECTORIES.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.