Deterministic, non-generative image transformation MCP server: reproducible recipes, immutable originals. Pure recipe DSL (crop, resize, rotate, tone, LUT, mask, layers) with byte-identical output.
Strong foundation with 13 well-named, verb-led tools (import_asset, inspect_image, detect_tilt, etc.). All tools have descriptions (avg ~180 chars, within 10-1024 baseline). Input schemas present with type definitions and parameter descriptions. However, output schemas are NOT documented in the visible code, critical gap for LLM planning. Parameter descriptions are in Japanese, reducing accessibility for English-speaking agents. Some parameters lack explicit constraints (e.g., max_blocks 1..=128 is stated but not in schema enum). Error handling guidance is minimal, no recovery hints or actionable error messages visible.
Run a recipe at full resolution, producing a new immutable revision. Pass either `revision_id` (one image) or `revision_ids` (a batch of up to 64) - exactly one of the two. The same input revision plus the same recipe always yields the same revision (deterministic, byte-identical output). Returns the new revision ID(s) and recipe hash.
Show two revisions side by side or stacked inline, or layout="diff" for a difference heatmap plus mean/max/changed-ratio statistics. Use this to visually verify that a recipe produced the expected result.
Read-only: detect the dominant quadrilateral (paper, screen, whiteboard) in the image. Returns the four corner points and a ready-to-paste perspective operation. Null quad means "do not correct". Use this as the first step for document/receipt/slide photography before applying perspective correction.
Read-only: detect text-like blocks in reading order. Returns the median line height, recommended crop bands for legible preview at different scales, and per-block bounding boxes. Use this to understand text layout before rendering a preview or applying OCR.
Read-only: scan for tilt (rotation angle) using Hough transform. Returns the most likely angle in degrees (positive = clockwise), confidence score, and optionally the full score curve across the search range. A null angle means "do not correct". Use this as the first step before applying a rotate operation.
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., what does inspect_image return? revision_id? dimensions? exif_summary?). This forces agents to guess or make exploratory calls.
Parameter descriptions are in Japanese only. English-speaking LLMs and agents cannot reliably parse constraints, ranges, or intent. Descriptions like '対象 revision ID("rev_...")' are inaccessible to non-Japanese models.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2025-06-18+ | v2 |
Full reference for one operation or preset: parameter table, examples, and gotchas. Call this when you need to understand how to use an operation or what a preset expands to.
Copy a revision out of the workspace to a local directory. Pass either `revision_id` (one file) or `revision_ids` (a batch of up to 64) - exactly one of the two. Refuses to overwrite unless overwrite=true. Never writes inside the workspace store.
Generate a grayscale mask revision from an image (e.g., text detection, edge detection, or custom threshold). The mask can then be attached to any tone/filter operation via the `mask` parameter to apply local adjustments. Check coverage with render_preview overlay="mask".
Import a local image file into the workspace and issue an immutable revision. Pass either `path` (one file) or `paths` (a batch of up to 64; one bad file does not abort the batch, it lands in `failed`) - exactly one of the two. Idempotent: importing the same bytes again returns the existing revision. If the imported bytes are already the output of a recipe held in this workspace, the result carries a warning plus `already_derived_from` so the same recipe is not applied twice.
Inspect an image revision: dimensions, format, EXIF summary, GPS/PII flag, byte size, histogram statistics, and perceptual hash. Pass `include_exif: true` to get the full EXIF dump (default false for privacy: GPS coordinates and personal data are only returned when explicitly requested).
Review the ledger: list all revisions in the workspace with their lineage, recipes, and sizes. Use this to understand what has been imported and transformed.
List all available operations (name, category) and built-in preset names. Start here to discover the recipe vocabulary. Call explain_operation to read the full parameter table, examples, and gotchas for one operation or preset.
Run a candidate recipe at low resolution and get an inline JPEG preview (long edge 768 by default, up to 1568 via `long_edge`) plus a file path. Use this to check composition cheaply before applying the full recipe. Supports optional overlays (grid, thirds, horizon, or mask visualization) for composition guidance.
Numeric constraints stated in descriptions but not enforced in schema. E.g., detect_tilt max_abs_angle '0.5..=45' and include_score_curve 'max 300 points' are prose, not JSON Schema constraints (no minimum/maximum/enum). LLMs may pass invalid values.
No error handling guidance visible. Tools declare risk levels (WRITE, READ_ONLY) but provide no recovery hints. E.g., if import_asset fails on a bad file, what should the agent do? Retry? Skip? Call a different tool?
Mutually exclusive parameters (path vs paths, revision_id vs revision_ids, recipe vs preset) documented in descriptions but not formally declared in schema. LLMs may pass both, causing ambiguous failures.