Canonsheet
Consistent prompts for one human character across image and video models. Paid per call, x402.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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-httpWhat it can do
Tool inventory
Tools (1)
🟡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
Evidence