Canonsheet

Consistent prompts for one human character across image and video models. Paid per call, x402.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
88%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,150Tokens (tool definitions)
~13.3 KBTypical response size
Moderate attention impact (0.90% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "canonsheet": {
      "url": "https://canonsheet.kaneky.dev/mcp"
    }
  }
}

Remote endpoints

https://canonsheet.kaneky.dev/mcpstreamable-http

What it can do

Tool inventory

Tools (1)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡build_character_prompts(appearance, choices, custom_traits, has_reference, name, ...)

Build a consistent prompt set for one human character: a canonical image prompt with every appearance fact labelled, negative prompts that stop traits like glasses or a cane from vanishing, a video prompt, and optionally a contact sheet that holds everything fixed and walks one axis. Works with any image or video model. Text keeps wardrobe and framing stable; for the same FACE across images, generate the canonical frame once and pass it back as a reference image (has_reference). Paid per call over x402: the first attempt answers HTTP 402 with the price. Invalid arguments are refused before any payment.

Input Schema

{
  "type": "object",
  "properties": {
    "appearance": {
      "additionalProperties": false,
      "description": "The canon. Every prompt carries it verbatim. At least one field, or a trait, is required.",
      "properties": {
        "build": {
          "description": "height, frame, posture",
          "type": "string"
        },
        "distinguishing": {
          "description": "the one detail someone would describe first",
          "type": "string"
        },
        "eyes": {
          "description": "colour, shape, anything unusual",
          "type": "string"
        },
        "face": {
          "description": "features, apparent age, how they hold their expression",
          "type": "string"
        },
        "hair": {
          "description": "colour, length, style",
          "type": "string"
        },
        "held": {
          "description": "bag, phone, cup, tool — what the hands actually hold",
          "type": "string"
        },
        "outfit": {
          "description": "materials, colours, silhouette",
          "type": "string"
        },
        "skin": {
          "description": "tone, texture, freckles, scars, lines",
          "type": "string"
        }
      },
      "type": "object"
    },
    "choices": {
      "additionalProperties": false,
      "description": "The shot. Unset axes use neutral defaults.",
      "properties": {
        "action": {
          "description": "Action. One of: standing, squared, walking, turning, over-shoulder, seated, leaning, arms-crossed, reaching, crouched, speaking, still-profile, sitting-desk, hands-pockets, laughing — or free text of your own.",
          "type": "string"
        },
        "angle": {
          "description": "Camera angle. One of: eye, low, high, three-quarter-turn, profile, none",
          "enum": [
            "eye",
            "low",
            "high",
            "three-quarter-turn",
            "profile",
            "none"
          ],
          "type": "string"
        },
        "environment": {
          "description": "Environment. One of: seamless, neutral, interior, street, landscape, none — or free text of your own.",
          "type": "string"
        },
        "lens": {
          "description": "Lens. One of: 35, 50, 85, 135, none",
          "enum": [
            "35",
            "50",
            "85",
            "135",
            "none"
          ],
          "type": "string"
        },
        "lighting": {
          "description": "Lighting. One of: soft-key, rim, golden, overcast, low-key, practical, none",
          "enum": [
            "soft-key",
            "rim",
            "golden",
            "overcast",
            "low-key",
            "practical",
            "none"
          ],
          "type": "string"
        },
        "seed": {
          "description": "Hold it across a set; a contact sheet is only comparable with the seed fixed.",
          "type": "string"
        },
        "shot": {
          "description": "Shot size. One of: full, three-quarter, medium, close, extreme-close",
          "enum": [
            "full",
            "three-quarter",
            "medium",
            "close",
            "extreme-close"
          ],
          "type": "string"
        },
        "style": {
          "description": "Render style. One of: photo, cinematic, illustration, painterly, render3d, anime",
          "enum": [
            "photo",
            "cinematic",
            "illustration",
            "painterly",
            "render3d",
            "anime"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "custom_traits": {
      "items": {
        "additionalProperties": false,
        "description": "A trait not in the list.",
        "properties": {
          "description": {
            "description": "e.g. Red knit scarf, wrapped twice",
            "type": "string"
          },
          "name": {
            "description": "e.g. Scarf",
            "type": "string"
          }
        },
        "type": "object"
      },
      "maxItems": 6,
      "type": "array"
    },
    "has_reference": {
      "description": "True when a canonical image will be attached; the prompts then defer the face to it.",
      "type": "boolean"
    },
    "name": {
      "description": "What to call the character in the prompt. Optional.",
      "type": "string"
    },
    "traits": {
      "additionalProperties": false,
      "description": "Details models tend to drop. Include a key only if the character has it.",
      "properties": {
        "facial-hair": {
          "description": "style, length, how grey. Adds a negative prompt that stops it disappearing between generations.",
          "type": "string"
        },
        "glasses": {
          "description": "frame shape, colour, thickness, tint. Adds a negative prompt that stops it disappearing between generations.",
          "type": "string"
        },
        "headwear": {
          "description": "what it is, how it sits, how much hair it covers. Adds a negative prompt that stops it disappearing between generations.",
          "type": "string"
        },
        "ink": {
          "description": "where they are, what they show, how visible under clothing. Adds a negative prompt that stops it disappearing between generations.",
          "type": "string"
        },
        "mobility": {
          "description": "wheelchair, cane, crutches, prosthesis — type, material, which side. Adds a negative prompt that stops it disappearing between generations.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "video": {
      "additionalProperties": false,
      "description": "The clip.",
      "properties": {
        "ambient": {
          "description": "Ambient",
          "enum": [
            "still",
            "breeze",
            "dust",
            "flicker"
          ],
          "type": "string"
        },
        "camera": {
          "description": "Camera move",
          "enum": [
            "locked",
            "push-in",
            "push-out",
            "orbit"
          ],
          "type": "string"
        },
        "motion": {
          "description": "Motion",
          "enum": [
            "blink",
            "breathe",
            "weight",
            "turn-to",
            "look-away",
            "smile",
            "step",
            "speak",
            "hair"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "walk_axis": {
      "description": "Return a contact sheet: one prompt per option of this axis, everything else held.",
      "enum": [
        "action",
        "shot",
        "angle",
        "lens",
        "lighting",
        "environment",
        "style"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded1 tools