decksmith
Generates slide images through the OpenAI image API using configured models and quality settings, with prompt previews before paid generation and archiving of generated images and metadata.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@decksmithProcess input/deck.md as a new deck and show me the slide plan for approval."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Decksmith
Turn a Markdown brief into a reviewed slide plan, then into consistent, on-brand slide visuals — with a human approval gate before anything costs money.
Built as an MCP server for Claude Code. Claude does the planning and writes the visual briefs; the server enforces the workflow, tracks state on disk, and refuses to spend on images until you have seen exactly what will be generated. Visual identity is pluggable: pick from three shipped visual systems or add your own in one Markdown file.
Why this exists
Generating slide images with an AI model is easy. Generating a deck's worth of images that share one visual language, say only what the source material supports, and don't burn API credits on unreviewed prompts is not. This project encodes the discipline:
Plan first. The model proposes a full slide plan from your source and stops. You review it as a table, correct it, and approve a specific content hash.
Brief every image. Each visual gets a structured brief: one approved layout pattern, 3–7 elements, the exact strings allowed inside the image, and what to avoid.
See the bill before paying. A preview step writes every final prompt to disk and returns the exact number of paid calls plus a one-time approval token.
Regenerate surgically. Change one brief, and only that slide is pending. Everything else keeps its image. Previous versions are archived, never overwritten.
Stay on-brand. Every prompt embeds a visual system — colour tokens, form language, typography, anti-style, and a quality gate. Swap the system, and the same brief renders in a different identity.
Related MCP server: ai-slides-mcp
One brief, three visual systems
The same brief — examples/demo-deck/briefs/quality-gate-before-after.json, a before_after pattern from the demo deck — rendered under each shipped system. Nothing changed between runs except the visual system name passed to the CLI. The exact in-image text (Today, Manual review, Quality gate, Automated checks, Humans maintain the rules) is fixed by the brief; the identity comes from the system.
|
|
|
|
|
|
Each PNG sits next to a .json with the full prompt, model, and settings that produced it. The images are shown unedited, including their flaws — the workflow's review step exists precisely because a model does not always honour every constraint on the first attempt.
uv run decksmith visual examples/demo-deck/briefs/quality-gate-before-after.json \
--visual-system minimal-mono --output-dir examples/demo-deck/images/minimal-mono \
--generate --confirm "GENERATE IMAGE"How it works
flowchart LR
A[input/deck.md] -->|initialize_deck| B(SOURCE_CAPTURED)
B -->|submit_deck_plan| C(PLAN_REVIEW)
C -->|approve_plan<br/>hash + APPROVE PLAN| D(PLAN_APPROVED)
D -->|submit_slide_briefs| E(BRIEFS_REVIEW)
E -->|preview_deck_generation<br/>prompts + token| F(GENERATION_REVIEW)
F -->|generate_deck_images<br/>token + GENERATE IMAGES| G(COMPLETE)
G -.->|edit a brief or<br/>mark_slide_for_regeneration| E
C -.->|any correction| CEvery transition is persisted to output/<deck>/manifest.json. Any change to the plan, a brief, or the visual system invalidates prior approval and forces a fresh review. Chat memory is never the source of truth; the manifest is.
Stage | What you can inspect | Paid calls |
| Copied source, manifest with chosen visual system | 0 |
|
| 0 |
| Approved plan hash | 0 |
| One JSON brief per visual | 0 |
| Final prompts on disk, pending count, approval token | 0 |
| Partial progress, resumable on failure | Yes |
| PNGs and per-image reproducibility metadata | Done |
Quickstart
Requirements: Python 3.11+, uv, Claude Code, and an OpenAI API key with image access.
git clone <this-repo> && cd decksmith
uv sync
cp .env.example .env # then set OPENAI_API_KEY
uv run decksmith setup # pick a default visual system and image settings
claude # Claude Code picks up .mcp.json automaticallyWrite your source material to input/<deck-name>.md (see templates/INPUT_TEMPLATE.md or examples/demo-deck/source.md), then tell Claude:
Process
input/<deck-name>.mdas a new presentation. Follow CLAUDE.md and stop to show me the complete slide plan before creating briefs or images.
Claude will ask which visual system to use if you did not name one, show you the plan, and wait. After corrections:
Approved, hash
<the hash it showed>.
It writes the briefs, previews the prompts, and reports how many paid calls the batch will make. Then:
Authorize the batch.
Images land in output/<deck-name>/images/. Titles stay out of the images by design; you place them in your slide tool.
Visual systems
A visual system is one Markdown file at visual-systems/<name>/system.md describing colour tokens and their semantics, form language, composition rules, typography, an anti-style list, and a quality gate. It is embedded verbatim in every prompt for that deck.
Name | Character | Good for |
| Flat-vector consulting-deck infographics, navy outlines, orange for change, green only for validation | Executive and stakeholder decks (default) |
| Near-monochrome monoline diagrams, one violet accent used on at most two elements | Engineering reviews, technical audiences |
| Cream paper, terracotta and olive, softly rounded hand-drawn-then-cleaned shapes | Narrative, people, and product-story decks |
Pick one per deck (initialize_deck(..., visual_system="minimal-mono")) or set the default in decksmith.toml. The chosen system is recorded in the deck's manifest and folded into the approval token, so switching it mid-deck correctly requires re-review.
Add your own: create visual-systems/<your-name>/system.md. Start from corporate-blue/system.md and keep the same section headings — the first # heading becomes its title and the first paragraph its summary in list_visual_systems. Run uv run decksmith systems to confirm it is picked up. No code changes needed.
Keep one private: name the folder visual-systems/local-<name>/. It works exactly like the others but is git-ignored, so an employer's brand guidelines can live next to the public systems without ever being committed.
Layout patterns (transformation, pipeline, before_after, …) are shared across systems and live in templates/VISUAL_PATTERNS.md; a brief uses exactly one.
Configuration
decksmith.toml at the project root:
[project]
default_visual_system = "corporate-blue"
input_dir = "input"
output_dir = "output"
visual_systems_dir = "visual-systems"
patterns_file = "templates/VISUAL_PATTERNS.md"
[image]
model = "gpt-image-2"
quality = "high"
size = "1536x1024"OPENAI_IMAGE_MODEL, OPENAI_IMAGE_QUALITY, and OPENAI_IMAGE_SIZE override the [image] section. The API key is read only from OPENAI_API_KEY and never written anywhere by this project. uv run decksmith setup regenerates the file interactively; uv run decksmith config prints the resolved values.
Regenerating one slide
Two paths, neither of which touches the other slides or requires editing state by hand:
The brief needs to change — resubmit the full batch with
submit_slide_briefs. Briefs whose content is unchanged keep their image; changed ones become pending. Works fromCOMPLETE.Same brief, another attempt —
mark_slide_for_regeneration(deck, slide).
Either way, preview_deck_generation then reports pending_count (say, 1 of 8) and a fresh token. On generation the previous PNG is archived as <slide>.v1.png, <slide>.v2.png, … alongside its metadata.
MCP tools
Tool | Purpose | Paid |
| Available systems with title, summary, and which is default | No |
| Create | No |
| Validate and persist a plan; returns its hash | No |
| Approve exactly that hash; needs confirmation | No |
| Save the full brief batch; reports kept vs pending slides | No |
| Queue a generated slide for another attempt | No |
| Write final prompts; return pending count and approval token | No |
| Generate pending slides only; needs token + | Yes |
| Full manifest plus pending list — use it whenever state is unclear | No |
| Render one brief's prompt under any system, outside a deck | No |
CLAUDE.md instructs Claude Code how and when to call these, including where it must stop and wait for you.
CLI
The CLI is for setup and diagnostics; the guided workflow runs through MCP.
uv run decksmith setup # interactive config
uv run decksmith systems # list visual systems
uv run decksmith config # resolved settings
uv run decksmith init input/deck.md --visual-system warm-editorial
uv run decksmith status deck # manifest + pending slides
uv run decksmith visual examples/parallel-sessions-brief.json --dry-run --visual-system minimal-monoProject layout
decksmith.toml project configuration
CLAUDE.md workflow contract for Claude Code
.mcp.json registers the MCP server with Claude Code
visual-systems/<name>/system.md
templates/
VISUAL_PATTERNS.md the seven approved layout patterns
INPUT_TEMPLATE.md suggested structure for a source file
slide-brief.schema.json
examples/
demo-deck/source.md a fictional, complete input to try the flow on
parallel-sessions-brief.json standalone parallel_1n1 brief for preview_slide_prompt / the CLI
input/ your source decks (git-ignored)
output/<deck>/ per-deck workspace (git-ignored)
source.md manifest.json slide-plan.json briefs/ prompts/ images/
src/decksmith/
config.py root discovery, TOML, visual-system resolution
models.py Pydantic models: DeckPlan, SlideBrief, Element
core.py prompt composition and the one paid call
pipeline.py the state machine
mcp_server.py tool surface
cli.py
tests/ offline tests for the state machine, hashing, config, promptsDevelopment
uv sync --group dev
uv run pytestTests run without network access — the image call is stubbed. They cover the approval gates, token invalidation on tampering, partial-failure recovery, the keep-unchanged-images logic, and reading manifests written by earlier versions.
When not to use this
Be honest about the ceremony. Seven stages and two confirmation strings are tuned for decks that go in front of people who will question every number. They are overkill when:
You need one image, not a deck. Use
preview_slide_promptor thevisualCLI command directly and skip the state machine.The deck is three slides for your own team. The plan-approval step buys you little; consider letting Claude present plan and briefs in one pass and approving once.
Cost is your only concern. At current image prices the "cost gate" guards cents. Its real value is forcing you to read the exact in-image text before rendering — if you would not read it anyway, the gate is friction.
You want finished slides. This produces images and metadata. Layout, titles, and assembly stay in your presentation tool by design.
Where it pays for itself: a deck of 6–12 visuals that must share one visual language, whose content you will be asked to defend, and which you expect to revise once or twice after feedback.
Design notes
Hashes, not trust. The plan hash covers
slide-plan.jsonbyte for byte. The generation token covers the deck slug, plan hash, visual system name, and every final prompt. Editing anything on disk after preview yields a stale token.No invented facts. The workflow contract forbids Claude from adding metrics, claims, or logos not present in the source, and requires uncertainty to be recorded under
assumptions/open_questionsin the plan.Minimal in-image text. Slide titles are never rendered into images. If a label can live in the slide tool, the brief leaves it out.
Nothing assembled. The output is images plus metadata. Deck assembly stays in your presentation tool where you control layout.
License
MIT — see LICENSE.
Available Tools
10 toolsapprove_planB
Approve an unchanged plan after explicit user review. Requires confirmation APPROVE PLAN.
| Name | Required | Description | Default |
|---|---|---|---|
| plan_hash | Yes | ||
| confirmation | Yes | ||
| presentation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses guard conditions (plan must be unchanged, exact confirmation value), which is useful, but says nothing about the consequences of approval, permissions required, or reversibility of an operation that clearly triggers downstream work.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the action and its hard requirement are front-loaded where an agent will see them first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a guarded approval action with no annotations, no output schema, and 0% parameter coverage, the description leaves too much open: the role of 'presentation', the meaning of plan_hash, and the effect of approval are all unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all three required params. The description effectively explains only 'confirmation' (value APPROVE PLAN) and hints at plan_hash via 'unchanged plan', while 'presentation' is entirely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (approve) and resource (plan), with an added qualifier ('unchanged plan') that scopes the action. It is distinguishable from sibling mutations like submit_deck_plan, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear invocation condition ('after explicit user review') and a hard precondition (confirmation string). It does not state when NOT to use it or point to a sibling for changed plans, but the context for use is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_deck_imagesA
Make paid image API calls for pending slides only. Requires confirmation GENERATE IMAGES.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmation | Yes | ||
| presentation | Yes | ||
| approval_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose two important traits: the call is paid (monetary side effect) and it is gated behind a literal confirmation value 'GENERATE IMAGES'. It leaves out what happens to existing images, whether spend is bounded, and what the call returns, so it is good but not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the cost and scope constraint front-loaded and the confirmation requirement second. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations mean the description is the only source of behavioral detail, and it covers cost and the confirmation gate adequately. However, it omits prerequisites for obtaining approval_token, the expected result (e.g., a job identifier for status polling), and failure modes, leaving real gaps for a 3-required-param mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters have 0% schema description coverage, so the description must compensate. It explains only the confirmation parameter's required value; presentation and approval_token (where it comes from, what it authorizes) are left entirely undocumented in both schema and prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (make paid image API calls) against a specific resource (slides in a deck), and scopes it to 'pending slides only'. That is enough for an agent to distinguish it from generation-preview siblings, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'pending slides only' clause implies the precondition for calling it, and the required confirmation string hints at a gated workflow, but there is no explicit statement of when to choose this over preview_deck_generation or mark_slide_for_regeneration. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deck_statusB
Return the persisted stage, paths, and pending slides for a presentation. No API call.
| Name | Required | Description | Default |
|---|---|---|---|
| presentation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and 'No API call' is genuinely useful behavioral context: it signals a local/persisted read with no external side effects. However, it stops short of stating side effects, permissions, or whether it mutates state, leaving gaps for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the returned content before the 'No API call' qualifier. Nothing is wasted, though it is arguably terse to the point of omitting needed context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Low-complexity read tool with no output schema and no annotations. The description usefully pre-announces the return fields (stage, paths, pending slides), which partly substitutes for the missing output schema, but it does not explain the presentation identifier or expected return shape fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate, but it only restates 'for a presentation' while the single parameter is literally named 'presentation'. The parameter is self-descriptive, so the marginal loss is small, but the description adds no format or identifier detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Return') and names the concrete payload (persisted stage, paths, pending slides) scoped to a presentation. This clearly reads as the status-inspection tool among siblings that otherwise initialize, submit, approve, or generate. It lacks an explicit sibling call-out but the resource and scope are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'No API call' hints at when this is appropriate (cheap local/persisted reads), but there is no explicit when-to-use or when-not-to-use guidance and no named alternative. Usage is implied by the purpose rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
initialize_deckA
Create an isolated output workspace from one Markdown file under input/.
visual_system selects a folder under visual-systems/; omit it to use the project default.
No API call.
| Name | Required | Description | Default |
|---|---|---|---|
| input_path | Yes | ||
| visual_system | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It usefully discloses that the result is an 'isolated' workspace and that there is 'No API call' (a non-obvious, valuable trait). It does not say what happens on a name collision, whether it is idempotent, what files/directories it writes, or what identifier is returned for later tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and resource in one sentence, followed by a short parameter note and a behavioral aside. Every sentence carries information, though the block layout (indented parameter note plus trailing sentence fragment) is slightly choppy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description is the only source of truth. It explains creation and scoping but never says what the tool returns (a workspace id/path?) or how that value feeds the downstream deck tools, which an agent needs to chain calls correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: `visual_system` is explained as selecting a folder under visual-systems/ with an explicit default when omitted, and `input_path` is constrained to 'one Markdown file under input/'. What is missing is the exact format/expectations for input_path (relative vs absolute, extension).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Create an isolated output workspace from one Markdown file under input/.' That is far more precise than the bare tool name, and it conveys the pipeline role. It does not name or differentiate itself from siblings (e.g., 'call this before submit_deck_plan'), so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'create ... workspace' and the per-parameter note about `visual_system`, suggesting this is the entry point of the deck workflow. However, there is no explicit statement of when to call it versus siblings like `list_visual_systems`, nor any prerequisite (does a plan need to exist? must it be called once per deck?). Guidance is inferred, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_visual_systemsA
List the visual systems available in this project, marking the default. No API call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one meaningful behavioral trait: 'No API call,' implying local/cached data with no side effects, credentials, or network cost. It says nothing further about ordering, caching semantics, or failure modes, but for a parameterless read that is a reasonable amount of disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core purpose first and the behavioral note ('No API call') appended. Nothing could be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool with an output schema present, the description does not need to explain return values. It covers purpose, scope, and the key behavioral fact, leaving only usage ordering unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to document; the baseline of 4 applies. The description correctly adds no redundant parameter talk.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List the visual systems') and adds useful scope ('available in this project') plus an output trait ('marking the default'). No sibling tool concerns visual systems, so no differentiation is needed, but the statement is crisp and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance or reference to alternatives. An agent can infer this is a lookup to run before selecting a visual system, but nothing states that, nor whether it should be called before generate_deck_images or preview_slide_prompt.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_slide_for_regenerationB
Queue one already-generated slide for another attempt with the same brief. No API call.
| Name | Required | Description | Default |
|---|---|---|---|
| slide | Yes | ||
| presentation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses 'No API call,' signaling this is a local/queued mutation rather than a network operation, but it omits permissions, reversibility, and what happens to the slide's existing state once queued.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with zero waste: the action is stated first and the behavioral caveat follows.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter queue operation this is mostly adequate, but with no annotations, no output schema, and no parameter documentation, an agent lacks the identifier semantics and the post-queue workflow detail needed to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and both required parameters ('presentation', 'slide') are bare strings. The description adds no meaning about their format, identifiers, or relationship, so it fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: it queues an already-generated slide for another attempt with the same brief. The phrase 'already-generated slide' implicitly distinguishes it from fresh-generation siblings like generate_deck_images, though it doesn't name any alternative directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'another attempt with the same brief' suggests when to use it, but there is no explicit when/when-not guidance and no reference to sibling tools such as generate_deck_images or preview_slide_prompt.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_deck_generationC
Write every final prompt and return pending image count plus an approval token. No API call.
| Name | Required | Description | Default |
|---|---|---|---|
| presentation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that no API call is made and that it returns a pending image count and an approval token, which suggests a dry-run gated by approval. But it is ambiguous whether 'write every final prompt' mutates stored state or is purely in-memory, and no permission or idempotency behavior is described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the action and its outputs are front-loaded before the 'No API call' qualifier. Slight terseness borders on under-specification rather than waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the description rightly reports what is returned (pending image count, approval token). It is nevertheless incomplete for a workflow-gating tool: the meaning of the sole input and the relationship to approve_plan / generate_deck_images are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single required parameter 'presentation', so the description must compensate and does not. An agent cannot tell from either source whether 'presentation' is an ID, a title, a slug, or an inline document structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete action ('write every final prompt') and its outputs (pending image count, approval token), which is more specific than the tool name alone. However, it never states the resource it operates on or how it differs from close siblings like generate_deck_images or preview_slide_prompt, so an agent must infer that this is a pre-generation dry run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'No API call' hints this is a non-executing preview step, which implies it should precede generate_deck_images, but the relationship is never made explicit. There is no when-to-use / when-not-to-use statement and no mention of any prerequisite (e.g., an approved plan or submitted briefs).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_slide_promptC
Validate one brief and return its prompt under a visual system without generating.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | Yes | ||
| visual_system | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does state a key behavioral trait: no generation occurs. It does not explain what validation checks are performed, whether the operation is read-only, error behavior, or any rate limits, but the explicit 'without generating' is a meaningful boundary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded with the core action and contains no filler words. It is efficient, though arguably too terse given the complexity of the input schema and the absence of annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a richly nested input schema, 0% schema description coverage, no annotations, and an output schema present, this one-sentence description is insufficient. It conveys the non-generative preview nature but leaves the agent without guidance on the brief's many required fields, validation behavior, or how visual_system affects output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate but does almost nothing: it mentions 'one brief' and 'a visual system' only in passing, adding no meaning about structure, format, or expected content beyond what the schema already defines. The nested SlideBrief and Element types are entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific compound action: validate a single brief and return its prompt under a visual system, without generating. It clearly distinguishes itself from generation tools via 'without generating,' though it does not explicitly name or compare against siblings like preview_deck_generation or generate_deck_images.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without generating' implies the tool is used when a preview is desired but image generation is not, offering implicit usage context. However, there is no explicit guidance on when to choose this over preview_deck_generation or how it fits into the sibling workflow, leaving usage largely inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_deck_planB
Validate and save a proposed slide plan for user review. No API call.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | ||
| presentation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and 'No API call' is a genuinely useful disclosure that this is a local validation rather than a remote mutation. However, it does not explain what validation is performed, what happens to invalid plans, or whether the save is durable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and followed by the one behavioral fact worth knowing. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a required free-form nested object, zero schema description coverage, and no output schema, the description is too thin — it never explains what a valid plan looks like or what the validation returns. The 'No API call' note helps but does not close the structural gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the plan parameter is a free-form nested object with additionalProperties, so the schema gives an agent almost nothing. The description does not describe the plan structure or what the presentation identifier refers to, leaving a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (validate and save) and resource (proposed slide plan), plus the workflow purpose (user review). It is clear what the tool does, but it does not distinguish itself from close siblings like approve_plan or submit_slide_briefs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for user review' faintly implies this is a hand-off step before approval, but no alternatives are named and no when/when-not guidance is given. Given siblings like approve_plan and submit_slide_briefs, an agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_slide_briefsB
Validate and save the full batch of visual briefs.
Accepted after plan approval and again after generation: briefs whose content is unchanged keep their existing image, changed ones become pending. No API call.
| Name | Required | Description | Default |
|---|---|---|---|
| briefs | Yes | ||
| presentation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose genuinely useful behavior: no API call, unchanged briefs retain their existing image, and changed briefs become pending. However it says nothing about failure modes for invalid briefs, whether saving is reversible, permission requirements, or how 'changed' is determined.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action in the first sentence and then adds the timing/behavioral detail compactly with no filler. The second sentence is dense but each clause carries information about the update semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description covers when to call it and the diff behavior, which is the most important part. It omits the structure of the nested brief payload and any indication of what the call returns or reports back, leaving a real gap for a two-required-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and both parameters are required, yet the description explains neither the shape of a brief object nor what 'presentation' refers to (ID, name, slug). 'Full batch' does imply all briefs must be submitted rather than a delta, which is a useful semantic hint, but it does not compensate for the fully opaque schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (validate and save) and resource (the full batch of visual briefs), which is clearly distinct from sibling tools like submit_deck_plan, approve_plan, and generate_deck_images. It never names those siblings explicitly, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Accepted after plan approval and again after generation' gives explicit timing windows for when the tool should be called, which is unusually concrete. It stops short of stating what to do instead when those preconditions are unmet (e.g., call approve_plan first) or naming an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v4.0.0- First observed
approve_plan - First observed
generate_deck_images - First observed
get_deck_status - First observed
initialize_deck - First observed
list_visual_systems - First observed
mark_slide_for_regeneration - First observed
preview_deck_generation - First observed
preview_slide_prompt - First observed
submit_deck_plan - First observed
submit_slide_briefs
TDQS
Scored across 10 tools
Each tool targets a distinct pipeline stage (init, plan, approve, briefs, preview, generate, status, regenerate), which makes most boundaries clear. The one overlap is preview_deck_generation vs preview_slide_prompt — one previews all prompts and returns an approval token, the other previews a single brief — but the descriptions distinguish them well enough.
The set follows a consistent verb_noun snake_case pattern throughout: list_visual_systems, initialize_deck, submit_deck_plan, approve_plan, submit_slide_briefs, mark_slide_for_regeneration, preview_deck_generation, generate_deck_images, get_deck_status, preview_slide_prompt. No mixed conventions or stray camelCase.
10 tools is well within the ideal range and each maps to a concrete step in a deck-generation workflow. None appear redundant or trivial filler.
The surface covers the full lifecycle from initialization through plan approval, brief submission, preview, paid generation, status inspection, and per-slide regeneration. Minor gaps remain — no explicit finalize/export of the assembled deck and no cancel/cleanup operation — but core workflows are covered.
Maintenance
Related MCP Connectors
Build decks in your own brand, from the AI agent you already use. Then edit them yourself.
Deterministic, fully editable PowerPoint from typed slide intents. 200+ layouts, brand templates.
- emplusxOAuthcom.emplusx
Finished, on-brand .pptx and .docx from a brief - quality-gated by an agentic consulting team.
Create polished slide decks from text or YouTube links in seconds. Fetch video transcripts to tran…
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables creation and management of Marp presentation projects with academic themes and structured slide layouts. Supports project initialization, slide generation with 6 layout templates, and integration with AI-powered editors like Claude Code and Cursor.321 npm12MIT
- FlicenseBqualityDmaintenanceGenerates images through ChatGPT's web backend and assembles them into full-bleed, branded PowerPoint decks with slide styling and reference-based design.63-
- AlicenseAqualityDmaintenanceEnables AI-powered slide deck creation using natural language, allowing users to generate, edit, and manage presentations through MCP clients like Cursor and Claude Code.1411 npmMIT
- FlicenseNot gradedqualityDmaintenanceCreates AI-powered slide decks directly from Claude Desktop with live progress and QA scores.-


