Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,536Letters: 14Defects: 1,322counted 2 min ago
teppi

Server definition

Hash
sha256:1a3882055db897d2c79a103257dfeae2b0ff7165ba208258fe69cff46b66fd33
What it is
What a remote MCP server returned when asked what it offers: 14 tools

The blob, as servednamed by its sha256

{ "instructions": "Use DesignForYou tools for template discovery, generated visual assets, and DesignForYou account credit questions. For logo/design requests, call recommend_template or browse_templates first unless the user has already chosen a template_id, then call generate after the user selects a template. To make a reusable private template from a structured brief, call create_template; then use its returned template_id with get_text_fields and generate. The generate tool accepts model='minimax-h3-image-balanced' or model='minimax-h3-image-quality' (also 'h3 balanced'/'h3 quality') for MiniMax H3 stills; pass context_ids when the still should use prior designs as ordered visual references. To turn a story premise into a full interactive comic (5 pages of art, ambient motion, voice-over, readable at a public link), call create_comic, then poll comic_status until ready and share the reader_url. If the client wants to direct the comic with its own model, call comic_design_brief, author the PanelScript Story JSON client-side, then call comic_submit_design; for specific edits, call comic_revision_brief and comic_submit_revision so only affected art, motion, or voice nodes regenerate. When the user asks how many credits they have left, their credit balance, remaining credits, or usage in a DesignForYou context, call get_credits and report that result rather than answering from general ChatGPT billing knowledge.", "tools": [ { "description": "Browse the DesignForYou template catalog. Optionally filter by category (e.g. 'instagram', 'app-store', 'logo', 'living-panels'). Returns template IDs, names, and previews.", "inputSchema": { "properties": { "category": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Filter by category (e.g. 'instagram', 'app-store', 'logo')", "title": "Category" }, "subcategory": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Optional subcategory filter (e.g. 'lettermark', 'wordmark', 'app_icon')", "title": "Subcategory" } }, "required": [], "type": "object" }, "name": "browse_templates", "outputSchema": { "additionalProperties": true, "type": "object" } }, { "description": "Return the no-server-LLM Living Panels authoring brief: PanelScript instructions, schema, unit templates, and success criteria. Use this when the MCP client will do the creative direction with its own model, then call comic_submit_design with the authored Story JSON.", "inputSchema": { "properties": { "premise": { "description": "Premise the client will use to author the Living Panels PanelScript JSON itself.", "minLength": 10, "title": "Premise", "type": "string" } }, "required": [ "premise" ], "type": "object" }, "name": "comic_design_brief", "outputSchema": null }, { "description": "Return the current Story JSON, stale-write hash, allowed patch paths, and dirty-node contract for a client-authored Living Panels revision. Use this when the client will decide the edit with its own model, then call comic_submit_revision.", "inputSchema": { "properties": { "comic_id": { "description": "Comic id to revise.", "minLength": 1, "title": "Comic Id", "type": "string" } }, "required": [ "comic_id" ], "type": "object" }, "name": "comic_revision_brief", "outputSchema": null }, { "description": "Check asset-production progress for a comic created with create_comic: panels, motion clips, and voice lines done vs total, plus ready=true when the whole comic is live at its reader_url. Free to call.", "inputSchema": { "properties": { "comic_id": { "description": "Comic id returned by create_comic", "minLength": 1, "title": "Comic Id", "type": "string" } }, "required": [ "comic_id" ], "type": "object" }, "name": "comic_status", "outputSchema": null }, { "description": "Accept a client-authored Living Panels Story JSON and start artifact production without using a server story LLM. The client does direction; DesignForYou validates, saves, generates character sheets, panel/unit art, motion clips, voice-over, and assembles the public reader.", "inputSchema": { "properties": { "client_model": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Model or agent that authored the story, for provenance.", "title": "Client Model" }, "client_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Host app or client name, for provenance.", "title": "Client Name" }, "premise": { "description": "Original premise the client used while authoring the submitted PanelScript story.", "minLength": 10, "title": "Premise", "type": "string" }, "start_production": { "default": true, "description": "Start artifact generation immediately after validation.", "title": "Start Production", "type": "boolean" }, "story": { "additionalProperties": true, "description": "Client-authored Living Panels Story JSON. The server validates it, clears any producer-owned asset fields, then produces art, motion, and voices.", "title": "Story", "type": "object" } }, "required": [ "premise", "story" ], "type": "object" }, "name": "comic_submit_design", "outputSchema": null }, { "description": "Apply a client-authored Living Panels revision without using a server revision LLM. Targeted changes regenerate only inferred dirty producer nodes such as panel:<id>, motion:<id>, or tts:<bubble_id>.", "inputSchema": { "properties": { "base_story_hash": { "description": "Hash from comic_revision_brief. Prevents applying a patch over a stale story.", "minLength": 8, "title": "Base Story Hash", "type": "string" }, "changes": { "description": "Targeted changes. Prefer this over full story replacement for small edits.", "items": { "properties": { "path": { "description": "Allowed Story JSON path from comic_revision_brief, e.g. pages[0].panels[1].cells[0].art.", "title": "Path", "type": "string" }, "value": { "description": "Replacement value for the target path.", "title": "Value" } }, "required": [ "path", "value" ], "title": "ClientComicChangeInput", "type": "object" }, "title": "Changes", "type": "array" }, "client_model": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Model or agent that authored the revision, for provenance.", "title": "Client Model" }, "client_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Host app or client name, for provenance.", "title": "Client Name" }, "comic_id": { "description": "Comic id to revise.", "minLength": 1, "title": "Comic Id", "type": "string" }, "dirty_nodes": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "description": "Optional extra producer nodes, e.g. panel:p2u1, motion:p2u1, tts:p2u1a-b0.", "title": "Dirty Nodes" }, "start_production": { "default": true, "description": "Regenerate inferred dirty assets after saving.", "title": "Start Production", "type": "boolean" }, "story": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "description": "Optional full replacement Story JSON. Targeted changes are cheaper/faster when possible.", "title": "Story" }, "summary": { "default": "", "description": "Client-authored one-line revision summary.", "title": "Summary", "type": "string" } }, "required": [ "comic_id", "base_story_hash" ], "type": "object" }, "name": "comic_submit_revision", "outputSchema": null }, { "description": "Write and produce a Living Panels interactive comic from a one-paragraph premise. One call writes a complete 5-page comic (panels, dialogue, motion plan, voice casting) and starts generating every asset in the background: character sheet, ~13 panels of art with character consistency, ambient image-to-video motion for the liveliest panels, and per-line voice-over. Returns immediately with the story summary and a public reader_url where the comic can be read, watched live, and heard. Production takes several minutes — poll comic_status until ready, then share the reader_url.", "inputSchema": { "properties": { "premise": { "description": "The story premise, one paragraph is plenty: who, where, the hook, the tone. Example: 'A neo-noir time-loop short: a night-shift radio host takes a call from her own voice, one day ahead.'", "minLength": 10, "title": "Premise", "type": "string" } }, "required": [ "premise" ], "type": "object" }, "name": "create_comic", "outputSchema": null }, { "description": "Create a private reusable DesignForYou template from a structured brief. The returned template_id works immediately with get_text_fields and generate. This stores a user-owned template in the canonical catalog collection; it does not publish it to the anonymous gallery.", "inputSchema": { "properties": { "aspect_ratio": { "description": "One of 16:9, 1:1, 4:5, or 9:16.", "title": "Aspect Ratio", "type": "string" }, "base_prompt": { "description": "Visual subject, style, and data-rendering requirements; plain layout text only.", "maxLength": 6000, "minLength": 40, "title": "Base Prompt", "type": "string" }, "best_for": { "description": "Optional concise use-case labels.", "items": { "type": "string" }, "maxItems": 8, "title": "Best For", "type": "array" }, "category": { "description": "Supported category: Infographics, Instagram Posts, Instagram Stories, App Store Previews, Logos, Visual Novel, Cinematic Stills, Comic Panels, Living Panels Comics, Character References, Architecture Diagrams, or Developer Tools.", "maxLength": 60, "minLength": 3, "title": "Category", "type": "string" }, "height": { "description": "Canvas height in pixels, matching aspect_ratio.", "maximum": 4096, "minimum": 320, "title": "Height", "type": "integer" }, "layout_rules": { "description": "Stable layout hierarchy and chart/diagram rules; plain text only.", "maxLength": 3000, "minLength": 20, "title": "Layout Rules", "type": "string" }, "name": { "description": "Reusable template name; repeated identical names are idempotent.", "maxLength": 100, "minLength": 3, "title": "Name", "type": "string" }, "subcategory": { "anyOf": [ { "maxLength": 60, "type": "string" }, { "type": "null" } ], "description": "Optional narrower catalog label.", "title": "Subcategory" }, "text_fields": { "description": "Editable copy fields returned by get_text_fields.", "items": { "properties": { "default_value": { "description": "Default editable copy", "maxLength": 240, "minLength": 1, "title": "Default Value", "type": "string" }, "key": { "description": "Stable snake_case field key, e.g. headline", "maxLength": 40, "minLength": 1, "title": "Key", "type": "string" }, "label": { "description": "Human-readable field label", "maxLength": 60, "minLength": 2, "title": "Label", "type": "string" }, "max_length": { "default": 120, "description": "Maximum copy length for this field", "maximum": 240, "minimum": 1, "title": "Max Length", "type": "integer" } }, "required": [ "key", "label", "default_value" ], "title": "EditableTextFieldInput", "type": "object" }, "maxItems": 12, "minItems": 1, "title": "Text Fields", "type": "array" }, "width": { "description": "Canvas width in pixels, matching aspect_ratio.", "maximum": 4096, "minimum": 320, "title": "Width", "type": "integer" } }, "required": [ "name", "category", "aspect_ratio", "width", "height", "base_prompt", "layout_rules", "text_fields" ], "type": "object" }, "name": "create_template", "outputSchema": null }, { "description": "Generate one or more finished images from a template (get a template_id from recommend_template or browse_templates) plus a description. Use this after the user has selected or explicitly supplied a template_id; otherwise call `recommend_template` first so the visual gallery can collect the selection. Works for all categories (Instagram, logo, app-store, Visual Novel backgrounds/sprites, CG illustrations). Pass variants for multi-image output (expressions, time-of-day, etc.). Pass session_id to refine a prior result. Pass context_ids to ground a new image on prior designs (character consistency for VN CG scenes). Set model to 'minimax-h3-image-balanced' or 'minimax-h3-image-quality' (or use the 'h3 balanced'/'h3 quality' aliases) to render through the MiniMax H3 image service; context_ids are forwarded as ordered H3 reference images.", "inputSchema": { "properties": { "context_ids": { "description": "Design IDs of prior outputs to use as visual context. Use for CG scenes that should match a previously generated character.", "items": { "type": "string" }, "title": "Context Ids", "type": "array" }, "context_labels": { "description": "Optional human labels for each context_id, in the SAME order. When the edit routes to a multi-reference model (gpt-image-2), an ordered legend ('reference image 1 = <label>, ...') is appended to the prompt so the model binds each named subject to its own reference instead of blending identities. Ignored for single-reference edits.", "items": { "type": "string" }, "title": "Context Labels", "type": "array" }, "description": { "description": "What you want - describe the scene, asset, or design in as much detail as needed", "minLength": 1, "title": "Description", "type": "string" }, "edit_tier": { "anyOf": [ { "pattern": "^(fast|pro|expert)$", "type": "string" }, { "type": "null" } ], "description": "Quality tier when reference images (context_ids) are supplied. 'expert' routes the edit to gpt-image-2 for high-fidelity output; 'fast'/'pro' use Gemini. Ignored when no references are present.", "title": "Edit Tier" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Optional image model override, such as grok-imagine-image-quality, gemini-3.1-flash-image, gpt-image-2, minimax-h3-image-balanced, or minimax-h3-image-quality. H3 aliases are 'h3 balanced' and 'h3 quality'.", "enum": [ "grok-imagine-image-quality", "gemini-3.1-flash-image", "gpt-image-2", "minimax-h3-image-balanced", "minimax-h3-image-quality", "h3 balanced", "h3 quality" ], "title": "Model" }, "reference_labels": { "description": "Optional labels aligned with reference_urls.", "items": { "type": "string" }, "maxItems": 6, "title": "Reference Labels", "type": "array" }, "reference_roles": { "description": "Optional roles aligned with reference_urls, such as identity or location.", "items": { "type": "string" }, "maxItems": 6, "title": "Reference Roles", "type": "array" }, "reference_urls": { "description": "Optional ordered inline or HTTPS image references for direct image-model grounding. Use with reference_labels and reference_roles when supplying cast or location images.", "items": { "type": "string" }, "maxItems": 6, "title": "Reference Urls", "type": "array" }, "session_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Pass the session_id from a prior generate call to continue refining. The model will edit the previous image instead of generating from scratch.", "title": "Session Id" }, "skip_prompt_merge": { "default": false, "description": "Skip the smart prompt-merge step (which compresses to ~150 words) and send the description through verbatim, with the template's base prompt concatenated for style. Use when the description is already complete and precise — e.g. a multi-character scene where each subject's outfit and a reference->subject legend must survive intact. Ignored on refines.", "title": "Skip Prompt Merge", "type": "boolean" }, "template_id": { "description": "Template ID from browse_templates", "minLength": 1, "title": "Template Id", "type": "string" }, "variants": { "default": [ "default" ], "description": "For character sheets: expression names e.g. ['neutral','smile','angry']. For backgrounds: time variants e.g. ['day','sunset','night']. For single images: omit or pass ['default'].", "items": { "type": "string" }, "title": "Variants", "type": "array" } }, "required": [ "template_id", "description" ], "type": "object" }, "name": "generate", "outputSchema": { "additionalProperties": true, "type": "object" } }, { "description": "Return the authenticated user's current credit balance, usage, and Stripe subscription status. Free to call.", "inputSchema": { "properties": {}, "required": [], "type": "object" }, "name": "get_credits", "outputSchema": null }, { "description": "List a template's editable text fields (headline, subhead, CTA, etc.) with their current values. Free. Use right after a template is chosen and BEFORE `generate` when you want to fill the template's fields precisely instead of relying on a freeform description.", "inputSchema": { "properties": { "template_id": { "description": "The template ID to get text fields for", "minLength": 1, "title": "Template Id", "type": "string" } }, "required": [ "template_id" ], "type": "object" }, "name": "get_text_fields", "outputSchema": null }, { "description": "Recommend the best matching templates for any use case. Describe what you need and the system auto-detects the category and ranks templates by relevance. Return the recommendations so the user can pick a template from the visual gallery; do not call `generate` in the same turn unless the user explicitly names a template_id or asks you to skip selection.", "inputSchema": { "properties": { "category": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Optional category override. Auto-detected from use_case if not provided.", "title": "Category" }, "needs": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "description": "Optional explicit needs such as favicon, navbar, og-image", "title": "Needs" }, "subcategory": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Optional subcategory constraint such as lettermark or app_icon", "title": "Subcategory" }, "use_case": { "description": "Describe what you need the template for (e.g. 'Instagram post for a restaurant daily special', 'logo for a fitness brand')", "minLength": 1, "title": "Use Case", "type": "string" } }, "required": [ "use_case" ], "type": "object" }, "name": "recommend_template", "outputSchema": { "additionalProperties": true, "type": "object" } }, { "description": "Generate one fixed-grid visual-novel character sprite sheet, crop it into cell assets, remove the chroma-key background, validate transparent sprites, and return a VN Creator-ready manifest. Base cost: 3 credits. Optional quality.hi_res_cells=true adds a reference-grounded per-cell re-render at full native resolution (fixes cells being limited to ~1/N of the sheet resolution) and bills +2 credits per cell re-rendered. quality.hi_res_model optionally routes the hi-res pass to a specific model (e.g. gpt-image-2 for fabric fidelity).", "inputSchema": { "properties": { "cells": { "items": { "properties": { "camera": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Camera" }, "direction": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Direction" }, "expression": { "minLength": 1, "title": "Expression", "type": "string" }, "id": { "minLength": 1, "title": "Id", "type": "string" }, "notes": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Notes" }, "pose": { "minLength": 1, "title": "Pose", "type": "string" }, "props": { "items": { "type": "string" }, "title": "Props", "type": "array" } }, "required": [ "id", "pose", "expression" ], "title": "VNSpriteCell", "type": "object" }, "minItems": 1, "title": "Cells", "type": "array" }, "character": { "properties": { "age_range": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Age Range" }, "description": { "additionalProperties": { "type": "string" }, "title": "Description", "type": "object" }, "id": { "minLength": 1, "title": "Id", "type": "string" }, "name": { "minLength": 1, "title": "Name", "type": "string" }, "role": { "minLength": 1, "title": "Role", "type": "string" } }, "required": [ "id", "name", "role" ], "title": "VNSpriteCharacter", "type": "object" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Image model override for the source sheet, e.g. gemini-3.1-flash-image.", "title": "Model" }, "output": { "properties": { "format": { "const": "png", "default": "png", "title": "Format", "type": "string" }, "include_alpha_sprites": { "default": true, "title": "Include Alpha Sprites", "type": "boolean" }, "include_contact_sheets": { "default": true, "title": "Include Contact Sheets", "type": "boolean" }, "include_crops": { "default": true, "title": "Include Crops", "type": "boolean" }, "include_source_sheet": { "default": true, "title": "Include Source Sheet", "type": "boolean" } }, "title": "VNSpriteOutputOptions", "type": "object" }, "provider": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Image provider override for the source sheet, e.g. gemini, grok, or a known model alias.", "title": "Provider" }, "quality": { "properties": { "generation_quality": { "default": "high", "title": "Generation Quality", "type": "string" }, "hi_res_cells": { "default": false, "description": "Opt-in: after cropping each cell from the consistency grid, run a reference-grounded image-to-image re-render of that cell at full native model resolution (the crop is the identity/pose reference). Fixes cells being limited to ~1/N of the sheet resolution. Billed as an extra image call per cell (+2 credits each).", "title": "Hi Res Cells", "type": "boolean" }, "hi_res_model": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Optional model override for the per-cell hi-res re-render, e.g. gpt-image-2 for fabric fidelity. Defaults to the source sheet's provider/model. Accepts gemini, grok, and gpt-image-2 aliases.", "title": "Hi Res Model" }, "regenerate_on_validation_failure": { "default": false, "title": "Regenerate On Validation Failure", "type": "boolean" }, "validate_cells": { "default": true, "title": "Validate Cells", "type": "boolean" } }, "title": "VNSpriteQualityOptions", "type": "object" }, "sheet": { "properties": { "background": { "properties": { "color": { "default": "#00ff00", "title": "Color", "type": "string" }, "mode": { "const": "chroma_key", "default": "chroma_key", "title": "Mode", "type": "string" } }, "title": "VNSpriteBackground", "type": "object" }, "cell_height": { "minimum": 32, "title": "Cell Height", "type": "integer" }, "cell_width": { "minimum": 32, "title": "Cell Width", "type": "integer" }, "full_body": { "default": true, "title": "Full Body", "type": "boolean" }, "layout": { "default": "3x2", "enum": [ "2x2", "3x2", "4x2" ], "title": "Layout", "type": "string" }, "padding": { "default": "generous", "title": "Padding", "type": "string" } }, "required": [ "cell_width", "cell_height" ], "title": "VNSpriteSheetConfig", "type": "object" }, "style": { "properties": { "consistency_reference_asset_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Consistency Reference Asset Id" }, "consistency_reference_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Consistency Reference Url" }, "preset": { "minLength": 1, "title": "Preset", "type": "string" }, "rendering": { "minLength": 1, "title": "Rendering", "type": "string" } }, "required": [ "preset", "rendering" ], "title": "VNSpriteStyle", "type": "object" } }, "required": [ "character", "style", "sheet", "cells" ], "type": "object" }, "name": "vn_generate_sprite_sheet", "outputSchema": { "additionalProperties": true, "type": "object" } }, { "description": "Return a fixed, no-cost DesignForYou widget payload for ChatGPT Apps debugging. Use this only to verify the template gallery/result iframe renders correctly; it does not generate images, use an LLM, or charge credits.", "inputSchema": { "properties": { "mode": { "default": "templates", "description": "Which widget payload shape to return without generation.", "pattern": "^(templates|recommendations|designs)$", "title": "Mode", "type": "string" } }, "required": [], "type": "object" }, "name": "widget_diagnostic", "outputSchema": { "additionalProperties": true, "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:1a3882055db897d2c79a103257dfeae2b0ff7165ba208258fe69cff46b66fd33 | sha256sum