presentations-ai
This server generates, exports, and tracks AI-designed presentations and single slides from topics, text, or uploaded documents.
Create full decks from a topic/brief with configurable slide count, tone, audience, language, branding domain, export format, and optional webhook callback.
Generate a single AI-designed slide for hero visuals, social graphics, or one-off visuals.
Turn raw text, notes, articles, transcripts, reports, or outlines into presentations using enhance, preserve, summarize, or instruction modes.
Convert uploaded PDF, Word, PowerPoint, text, markdown, or RTF files into presentations via base64 (max 5 MB encoded).
Export outputs as PPT/PPTX, PDF, images, HTML render, or shareable viewer links.
Poll async job status to retrieve completed results (document URL/ID, optional thumbnail/animated URL) or failure errors.
This server has a remotely hosted endpoint. Open its connector listing for connection details, authentication requirements, and setup instructions:
Presentations.AI MCP Server
Official Model Context Protocol server for Presentations.AI. Create designed slide decks from a topic or your notes, apply your brand, then share or download them, from any MCP client.
Endpoint
https://api.presentations.ai/mcpProperty | Value |
Transport | Streamable HTTP |
Authentication | OAuth 2.1 with PKCE and dynamic client registration, or an API key |
A Presentations.AI account is required. Most clients open a browser to sign in the first time they connect. Clients without OAuth support can send an API key instead:
Authorization: Bearer pai_live_...Create a key at api.presentations.ai.
Related MCP server: Alai
Tools
Tool | Use it to |
| Generate a deck from a prompt, pasted text, or an edited outline, with optional audience, slide count, and brand kit. |
| Draft an outline to review and edit before generating. Spends credits: 10 per slide. |
| Wait up to 60 s per call for generation to finish. |
| A download link for the finished file, valid for 15 minutes. |
| A public link anyone can open, created when the user asks to share. |
| Find a brand to apply via |
| Identity, workspace, plan, and credit balance. |
| Find and inspect existing work. |
| Rename, move, change visibility or content version, or delete a deck. |
| Share a deck with a person by email. |
Source material goes in inline as text. File upload, admin, and usage operations are REST-only; see the API docs.
Clients that support the MCP Skills extension
also get two skills, create-presentation and manage-presentations.
Full reference: docs.presentations.ai/docs/agents.
Example prompts
Make a 10-slide deck on our product roadmap for the leadership team.
Turn these meeting notes into a short deck: <paste notes>
Show me an outline first, then build the deck with the Presentations.AI brand kit.
Find my onboarding deck and give me a fresh download link.
Share my "Q3 results" deck with teammate@example.com as a viewer.Connect from your MCP client
Claude (claude.ai and Claude Desktop): docs/clients/claude-desktop.md
Claude Code: docs/clients/claude-code.md
ChatGPT: docs/clients/chatgpt.md
Cursor: docs/clients/cursor.md
VS Code: docs/clients/vs-code.md
Visual Studio: docs/clients/visual-studio.md
Kiro: docs/clients/kiro.md
Cline: docs/clients/cline.md
Gemini CLI: docs/clients/gemini-cli.md
Stdio wrapper
For clients that only run local servers, src/index.js forwards stdio to the hosted
endpoint with an API key. It needs Node.js 22 or later:
git clone https://github.com/slidecraft-in/presentations-ai-mcp-server
cd presentations-ai-mcp-server && npm ci{
"mcpServers": {
"presentations-ai": {
"command": "node",
"args": ["/path/to/presentations-ai-mcp-server/src/index.js"],
"env": { "PRESENTATIONSAI_API_KEY": "pai_live_..." }
}
}
}The client's config file then holds the key, so keep it private.
Or with Docker: docker build -t presentations-ai-mcp ., then
docker run -i --rm --init -e PRESENTATIONSAI_API_KEY presentations-ai-mcp, which passes
the key from your environment.
Without a key, the wrapper lists the tools from src/snapshot.json and tool calls return
an error asking for one. To refresh the snapshot from the live server, set
PRESENTATIONSAI_API_KEY in your environment and run npm run snapshot. Set
PRESENTATIONSAI_MCP_URL to read a different https endpoint.
Data and security
The server acts as the signed-in account, or the owner of the API key, within that account's permissions and the scopes the sign-in or key grants. Tools a connection isn't allowed to use are hidden.
Seven tools only read. The other six change or share work and carry MCP's
destructiveHintannotation, so clients can ask before running them:create_presentationandcreate_outlinespend credits,share_deckcreates a public link,patch_deckcan change who can open a deck,create_grantshares a deck by email, anddelete_deckmoves a deck to trash.Download links from
get_exportandget_deckwork without signing in and expire after 15 minutes, so share them only with people who should have the file.Treat an API key like a password: keep it out of chats, code, and shared config files. If a key is exposed, revoke it in the API keys dashboard or with
DELETE /api-keys/current, then create a new one.
See the privacy policy and terms of service.
Troubleshooting
Problem | What to do |
The client asks you to sign in again, or calls fail with 401 | Sign in from the client: |
Claude won't add another custom connector | Free plans allow one custom connector. |
ChatGPT won't add the server | Workspace policies can restrict custom MCP servers. Ask your workspace admin. |
A deck is still generating | A deck usually takes a few minutes. The agent checks progress with |
A download link stopped working | Links expire after 15 minutes. Ask for the file again and |
The stdio wrapper lists tools but every call fails | Set |
Related repos
presentations-ai-skills: the
create-presentationandmanage-presentationsAgent Skillspresentations-ai-gemini-extension: Gemini CLI extension with this server and both skills
Support
Email support@presentations.ai with the client you use, the tool that failed, when it
happened, and the error message. Never include an API key or an Authorization header.
More help: docs.presentations.ai/docs/support.
License
MIT, see LICENSE.
Available Tools
13 toolscreate_grantCreate GrantADestructiveIdempotentInspect
Share a deck with one person, by user ID or email address, at the given role.
If they already have access, their role is replaced, which can lower it.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | Access level to grant. | |
| deck_id | Yes | ||
| subject | Yes | A user id, or an email address (creates an `EMAIL` grant). |
Output Schema
| Name | Required | Description |
|---|---|---|
| role | Yes | Per-deck grant role for sharing decks independently of project membership. |
| deck_id | Yes | |
| subject | Yes | |
| subject_email | Yes | Email the deck was shared with; null when shared by user id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds the crucial reason: an existing grant is replaced, and that replacement can lower the recipient's access. That is real value beyond the structured fields and directly explains the destructive flag. It stops short of covering required permissions or whether the recipient is notified.
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 zero filler: the action and its scope come first, and the destructive edge case follows as a warning. Every clause carries information an agent needs.
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?
With an output schema present, the description needn't describe return values, and annotations cover mutability and openness; the description closes the remaining behavioral gap by explaining the role-replacement effect. It is slightly thin on prerequisites and on how it differs from 'share_deck', which keeps it from a 5.
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 67%, and the schema already documents 'subject' (user id or email creating an EMAIL grant) and 'role' (access level enum). The description reinforces that subject accepts an ID or email and adds that only a single subject is accepted, but contributes nothing for the undocumented 'deck_id'. Baseline 3 is appropriate given the schema does most of the work.
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 concrete verb and resource ('Share a deck'), scoped to exactly one recipient ('one person, by user ID or email address') at a specified role, so an agent knows precisely what the call does. However, it never distinguishes itself from the sibling tool 'share_deck', so the agent must guess which of the two performs which sharing operation.
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: the phrase 'one person' suggests this is the single-recipient path versus some broader sharing path, but no alternative is named and no preconditions (ownership/admin rights on the deck) are stated. The caveat about replacing an existing role is genuinely useful context, but it describes an effect rather than when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_outlineCreate OutlineADestructiveInspect
Generate a stateless outline from a prompt and/or extracted files.
No deck, session, or generation request is persisted. Referenced files must belong to the caller's workspace and have completed extraction before this request.
Bills the outline's slides at the Standard rate (10 credits per slide), once, before it is
returned; an empty balance is a 402. Send an Idempotency-Key to retry safely: a key that
already paid is a 409.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | No | Topic and instructions for the presentation, or pasted content to build from. | |
| sources | No | Inline text and/or references to files uploaded through POST /files. | |
| language | No | Output language as an English name (e.g. `French`); `auto` follows the language of the prompt and sources. | English |
| slide_count | No | Slides including the cover, each number 1-50: `N` exact, `N-M` a range, `N+` at least N, `auto` or omitted lets the writer decide. | |
| Idempotency-Key | No | ||
| accept-language | No | ||
| level_of_detail | No | Text density per content item, case-insensitive. Omitted: adapted to the topic and content. |
Output Schema
| Name | Required | Description |
|---|---|---|
| outline | Yes | Generated outline; edit it and pass it as `outline` to `POST /decks`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Strong disclosure beyond the annotations: statelessness (nothing persisted), the 10-credits-per-slide charge taken once before return, a 402 on empty balance, and 409 semantics for reused idempotency keys. The retry-safety note is consistent with idempotentHint=false, and nothing contradicts destructiveHint=true, though the description never explains what the destructive flag actually refers to for a tool that persists nothing.
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?
Three short paragraphs, purpose front-loaded, then prerequisites, then billing/retry. Every sentence carries distinct operational information (persistence, extraction readiness, price, error codes) with 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?
Return values are covered by the existing output schema, and the description supplies the side-effect, cost and retry facts an agent needs before calling. The only gap is the accept-language header parameter, which is undocumented in both schema and description.
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?
With 71% schema coverage, the schema already documents prompt, sources, language, slide_count and level_of_detail in detail. The description adds genuine meaning only for the undocumented Idempotency-Key (retry safety, 409 on a key that already paid); accept-language gets no explanation anywhere, so it neither fully compensates nor adds much beyond the baseline.
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 ("Generate a stateless outline") plus its input modes (prompt and/or extracted files), and the word "stateless" plus "No deck... is persisted" cleanly separates it from the create_presentation sibling. An agent can tell what this produces without opening the schema.
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?
It gives real entry conditions (referenced files must be in the caller's workspace and already extracted) but never names an alternative sibling or states when to pick create_presentation versus create_outline, leaving the main routing decision to inference. Prerequisites are covered; exclusions are not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_presentationCreate PresentationADestructiveIdempotentInspect
Create a finished, designed presentation from a prompt, text, or an outline.
Use it when the user asks for a presentation, deck, slides, a pitch, or a PowerPoint. The deck is saved in the user's Presentations.AI workspace and can be exported as PPTX, PDF or slide images, or shared by link.
deck takes the same fields as POST /decks: e.g. prompt, sources
({"type": "text", "content": ...}), slide_count, audience,
level_of_detail, deck_purpose, brand_kit_id (find one with
search_brand_kits), or an edited outline from create_outline.
Retrying an identical call returns the same deck; pass a new request_id to
generate another copy.
Generation spends credits and takes a few minutes in the background: poll
task_id with get_task, then fetch the file with get_export, or a public
link with share_deck when the user asks for one.
| Name | Required | Description | Default |
|---|---|---|---|
| deck | Yes | `POST /decks` input; the outline schema is enforced on submit, not spelled out here. | |
| request_id | No | Optional idempotency key. Omitted: retrying an identical request returns the same deck; after a FAILED run, or once that deck is deleted, it starts a new one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | Lifecycle state of an async task: CREATED (queued), RUNNING, then COMPLETED or FAILED. |
| deck_id | Yes | |
| task_id | Yes | |
| deck_url | Yes | Opens the deck in the PresentationsAI app; requires signing in as a member with access. Not a public link: use `share_deck` for one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations it discloses that generation is asynchronous (a few minutes, poll task_id), consumes credits, saves into the workspace, and that an identical retry returns the same deck while a new request_id makes another copy — all non-obvious and not in the structured fields. It does not explain failure handling or what a spent-credit failed run leaves behind, so the mutation lifecycle is only partly covered.
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 purpose and trigger, then input construction, then the asynchronous follow-up path — a sensible order for a complex tool. A few parentheticals (e.g. the sources example object) are borderline redundant with the 100%-covered schema, but nothing is wasted enough to hurt.
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 20+ nested deck fields, no output-schema explanation is needed, and the description instead supplies the piece an agent actually needs: the generate-then-poll-then-export/share workflow. Combined with the full schema coverage, an agent has enough to call it correctly and handle the result.
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 100%, so the baseline is 3; the description adds real routing value by pointing brand_kit_id at search_brand_kits and outline at create_outline's output, and by enumerating representative deck fields (prompt, sources, slide_count, audience, level_of_detail, deck_purpose). It stops short of explaining the outline-vs-prompt mutual exclusivity enforced by the oneOf, which the agent must infer from the 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?
The first sentence gives a specific verb and resource with scope: 'Create a finished, designed presentation from a prompt, text, or an outline.' The second sentence lists the user phrasings that should trigger it (presentation, deck, slides, pitch, PowerPoint), which separates it cleanly from create_outline (outline only) and get_deck (retrieval).
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?
Explicit trigger language ('Use it when the user asks for...') plus routing to siblings: create_outline for the outline input, search_brand_kits for brand_kit_id, get_task/get_export/share_deck for the post-generation steps. The user's request for a public link is named as the condition that selects share_deck.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_deckDelete DeckBDestructiveIdempotentInspect
Soft-delete a deck; the operation is idempotent for an already deleted deck.
| Name | Required | Description | Default |
|---|---|---|---|
| deck_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so restating idempotency adds little. The one genuine addition is 'soft-delete', which tells the agent data is not physically purged, but the description leaves out whether the deck becomes inaccessible, whether shares/grants cascade, and whether there is any undo path.
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?
A single short sentence, front-loaded with the operative term 'soft-delete'. The second clause repeats the idempotentHint annotation, so it is slightly wasteful but harmless.
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 one-parameter destructive mutation with no output schema, the description covers the core action but omits consequences an agent should know before calling: effect on existing shares/grants, whether the deck disappears from list_decks, and recoverability. Annotations carry the safety profile, so this is adequate rather than complete.
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%, but the single parameter is a self-describing UUID deck_id whose type and format are already declared in the schema. The description adds no meaning about accepted identifier forms or behavior on unknown IDs, so it neither compensates nor misleads.
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+resource ('Soft-delete a deck'), and 'soft' meaningfully distinguishes it from a hard delete or from patch_deck in the sibling list. It does not explicitly name a sibling it should be preferred over, which keeps it from 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?
There is no when-to-use guidance: nothing says when to delete versus patch_deck, whether deletion is reversible by the user, or what preconditions apply. The only usage-adjacent information is that repeat calls on an already-deleted deck are safe.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deckGet DeckARead-onlyIdempotentInspect
Fetch deck metadata, latest generation status, and existing export artifacts.
Over MCP, export download URLs open without a key and expire after 15 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| deck_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| flags | Yes | The user's own flags on the deck. |
| status | Yes | Status of the deck's latest generation; null when it was never generated. |
| exports | Yes | |
| version | Yes | Content version the deck shows: v1, v2, or null when authored in the app. |
| deck_url | No | Opens the deck in the PresentationsAI app; requires signing in as a member with access. Not a public link: use `share_deck` for one. |
| project_id | Yes | |
| visibility | Yes | Who can open the deck. |
| has_share_link | Yes | Whether a public share link is active for the deck. |
| origin_version | Yes | Version the deck was migrated from; when it differs from `version`, `patch_deck` can switch back to it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the description's added value is the export-URL caveat: download links open without a key and expire in 15 minutes. That is a genuine operational fact an agent could not obtain from the structured fields.
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 returned payload listed first and the expiry caveat second. Nothing could be removed 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?
An output schema exists, so return-value detail is not required, and the tool is simple (one required id, read-only). The description still covers the payload and the URL expiry, leaving only minor gaps such as behavior when the deck_id does not exist.
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?
Only one parameter, deck_id, with 0% schema description coverage, but its name and uuid format make it self-explanatory. The description adds nothing about the identifier's source (e.g. from list_decks), so it sits at an adequate baseline rather than excelling.
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?
Names a specific verb ('Fetch') and the exact payload: deck metadata, latest generation status, and export artifacts. That distinguishes it from list_decks (enumeration), get_task, and get_export, though it never explicitly contrasts itself with those siblings.
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 statement of when to call this versus get_export, get_task, or list_decks, and no preconditions. Usage is only inferable from the required deck_id and the payload description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_exportGet ExportBRead-onlyInspect
Latest export artifact for a deck, with a short-lived download URL.
| Name | Required | Description | Default |
|---|---|---|---|
| deck_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| format | Yes | Export artifact format: PPTX, PDF, or IMAGE (a ZIP with one image per slide). |
| deck_id | Yes | |
| download_url | Yes | Anonymous download link; it expires after 15 minutes, so call `get_export` again for a fresh one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint/destructiveHint/openWorldHint annotations already establish that this is a safe, closed-world read. The description does add one genuinely useful operational fact, that the download URL is short-lived, which an agent must know to use it promptly. It does not say whether a missing export yields an error or an empty result, which is the main remaining behavioral gap.
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?
A single front-loaded sentence with no wasted words; the essential facts (latest artifact, download URL) come first. It is a sentence fragment rather than a full clause, which slightly weakens readability but does not obscure meaning.
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?
With an output schema present, the description need not document return fields, and annotations cover the safety profile. For a simple single-parameter read, the remaining gap is the no-export/pending-export case and URL expiry timing, which would materially change how an agent sequences its calls.
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?
There is one parameter, deck_id, and schema description coverage is 0%, so the schema itself says nothing about it. The description implies deck_id identifies the deck whose export is wanted, which is marginal added meaning beyond the name, but does not clarify format expectations, error behavior for unknown IDs, or export scope (slides vs. assets).
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 specific resource and scope: the latest export artifact for a single deck, plus the fact that a download URL comes back. It does not use an explicit verb ('retrieve'/'fetch') and does not name a sibling, but no sibling in the list deals with exports, so an agent can still distinguish it easily.
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 guidance on when to call this versus other tools, and no mention of what to do if the deck has not been exported or an export is still in progress. The agent must infer both the trigger condition and the fallback behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskGet TaskARead-onlyInspect
Status of an async task (e.g. a presentation generation).
With wait_time=0, returns an immediate snapshot. With wait_time>0 (capped at
60s), waits until the task reaches COMPLETED/FAILED or the window elapses,
then returns the latest status. Once a generation is COMPLETED, get_export
returns its file.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| wait_time | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | Task type — determines which Restate handler to invoke. |
| error | Yes | |
| status | Yes | Lifecycle state of an async task: CREATED (queued), RUNNING, then COMPLETED or FAILED. |
| task_id | Yes | |
| subject_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds real behavioral detail on top: the call can block, the wait is capped at 60s, and it terminates early on COMPLETED/FAILED. It does not enumerate the full status vocabulary or say what happens if the task_id is unknown/expired, which are the remaining behavioral gaps.
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?
Three short sentences, front-loaded with what the tool returns, then the wait_time semantics, then the handoff to get_export. Nothing is redundant with the schema or annotations, and every sentence carries information an agent needs.
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?
An output schema exists, so return values need no prose, and the polling/blocking model plus the get_export handoff cover the core of a two-parameter read tool. The only shortfall is not stating the provenance of task_id or the full set of terminal/non-terminal statuses an agent might branch on.
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 carry both parameters. It does this well for wait_time (0 vs >0, 60s cap, terminal-state early exit), but task_id is never explained — no statement of where it comes from or its lifetime. Half the parameters are covered, so this lands at adequate rather than strong.
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 and resource: retrieves the status of an async task, with a concrete example (presentation generation). It also names the natural follow-up tool, get_export, so an agent can place it among siblings like get_deck and get_export without opening any schema.
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 explicit branching guidance: wait_time=0 for an immediate snapshot, wait_time>0 to block until COMPLETED/FAILED or the window elapses, and points at get_export once a generation is COMPLETED. It stops short of saying when to prefer polling versus waiting in a given workflow, and never says where task_id originates (presumably create_presentation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_decksList DecksARead-onlyIdempotentInspect
List accessible decks with project, flag, sort, search, and pagination filters.
Decks that have no slides yet (generation still running, or never completed) are omitted; fetch those by id.
| Name | Required | Description | Default |
|---|---|---|---|
| flag | No | ||
| page | No | ||
| sort | No | Ordering for the deck list query. | |
| limit | No | ||
| search | No | ||
| project_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Items on this page. |
| page | Yes | 1-based page number returned. |
| limit | Yes | Maximum items per page. |
| total | Yes | Items matching the filters across all pages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds a genuinely non-obvious behavior beyond them: decks whose generation is still running or never completed are silently omitted from results, which would otherwise look like missing data.
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. The core capability comes first and the exclusion caveat follows immediately where it is most useful.
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?
An output schema exists, so return-value explanation is unnecessary, and the key trap (empty decks omitted) is disclosed. Minor gaps remain around pagination result shape and what the search string matches, but nothing that would cause an incorrect call.
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 only 17%, so the description has to carry weight; it names the filter categories (project, flag, sort, search, pagination) which map onto project_id, flag, sort, search, page, and limit. It adds no detail on search matching semantics, flag values, or sort ordering beyond what the schema enums already state, so it only partially compensates.
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 and resource ("List accessible decks") and enumerates the filter dimensions (project, flag, sort, search, pagination). The closing clause routes the agent to the id-based sibling (get_deck), so it is distinguishable from siblings without opening a schema.
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 concrete usage rule: decks with no slides are excluded from this listing and must be fetched by id instead. That is a real when-to-use/when-not-to-use distinction, though it does not cover choices against other list-style siblings such as list_projects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList ProjectsARead-onlyIdempotentInspect
List projects, or folders with kind=FOLDER (optionally one container's children).
top_level=true keeps the caller's top level: no parent, or a parent they
cannot reach. Not with parent_id. A project-bound key sees its project and
the folders below it, with that project as its top.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | What a project row is: a knowledge-bearing project or a plain folder. | |
| page | No | ||
| limit | No | ||
| parent_id | No | ||
| top_level | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Items on this page. |
| page | Yes | 1-based page number returned. |
| limit | Yes | Maximum items per page. |
| total | Yes | Items matching the filters across all pages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered; the description adds genuinely non-obvious access semantics instead — that a project-bound key sees only its project and descendant folders, and that 'top level' includes parents the caller cannot reach. That visibility/auth scoping is real behavioral context beyond the structured fields.
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?
Dense and front-loaded: the listing mode comes first, then the top-level rule, then the permission scope. Minor friction from mid-sentence line breaks that split 'parent they / cannot reach' and 'folders below it, / with that project as its top', but no sentence 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?
An output schema exists, so return-value detail is rightly omitted, and the access-scoping notes cover the trickiest behavior. Still, for a 5-parameter listing tool at 20% schema coverage, the absence of any pagination guidance (`page`/`limit` defaults and the 200 cap) leaves a gap an agent could stumble on.
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 only 20% (only `kind` is documented), so the description must compensate — and it partly does, explaining `kind=FOLDER`, `parent_id` as 'one container's children', and `top_level` semantics plus its conflict with `parent_id`. However, `page` and `limit` get no mention, leaving two of five parameters undefined in both places.
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?
Opens with a specific verb+resource ('List projects') and immediately clarifies the dual mode via `kind=FOLDER`. It also scopes the listing to 'optionally one container's children', so an agent knows this is a filtered enumerator rather than a global dump. It does not name a sibling to contrast with (e.g. list_decks), which keeps it from 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?
Gives an explicit incompatibility rule: 'Not with `parent_id`' when `top_level=true`, which is exactly the kind of when-not guidance agents need. It also defines what `top_level=true` preserves. It stops short of stating when to prefer this over other listing tools, but the constraint guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
patch_deckPatch DeckADestructiveIdempotentInspect
Rename a deck, change who can open it, or move it to another project.
It can also switch which content version the deck shows. Changing visibility can make the deck public or remove other people's access. It doesn't start generation or create an export.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name; omitted keeps it. | |
| deck_id | Yes | ||
| version | No | Content version to render; must be one the deck has content for. | |
| project_id | No | Move the deck to this project; omitted or null keeps it. | |
| visibility | No | New visibility; omitted keeps it. Changing it needs share-manage permission. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| flags | Yes | The user's own flags on the deck. |
| version | Yes | Content version the deck shows: v1, v2, or null when authored in the app. |
| deck_url | No | Opens the deck in the PresentationsAI app; requires signing in as a member with access. Not a public link: use `share_deck` for one. |
| project_id | Yes | |
| visibility | Yes | Who can open the deck. |
| has_share_link | Yes | Whether a public share link is active for the deck. |
| origin_version | Yes | Version the deck was migrated from; when it differs from `version`, `patch_deck` can switch back to it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, so the safety profile is partly covered; the description adds real value by spelling out the concrete consequence — changing visibility can make the deck public or strip other people's access. It does not mention the share-manage permission requirement, which lives only in the schema, but the material risk is disclosed in prose.
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?
Three short sentences, front-loaded with the primary operations before the caveats. The middle sentence about switching content version could have been folded into the opening list, but there is no filler or repetition.
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?
With annotations covering safety, a rich schema, and an output schema to describe returns, the description only needs to establish scope and risk. It does both: it enumerates all four patchable dimensions and warns about the visibility side effect, leaving nothing an agent needs before calling it.
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 80%, so the baseline is 3. The description names every optional parameter's effect at a high level (rename, visibility, project move, version switch) but adds no semantics beyond what the schema already states, such as the constraint that version must be one the deck has content for.
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 leads with specific verbs and the resource: rename a deck, change who can open it, move it to another project, and switch the rendered content version. It distinguishes itself from create_presentation and get_export through explicit negatives ('doesn't start generation or create an export'), though it never clarifies its boundary against the sibling share_deck.
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 the operation list plus the exclusions ('doesn't start generation or create an export'), which tells the agent what this tool is not for. However, no alternative is named for the overlapping case — an agent wanting to grant access could plausibly pick either this tool or share_deck, and the description offers no rule to choose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_brand_kitsSearch Brand KitsARead-onlyIdempotentInspect
Search the brand kits you can style a deck with.
Use a result's id as brand_kit_id when creating a deck. Includes published brands, your
workspace's kits and your own unshared kits. A brand limited to approved email domains appears
only when your verified email domain is one of them.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Brand name or domain to search for. | |
| page | No | ||
| type | No | Only catalog brands, or only your workspace's kits. | |
| limit | No | ||
| domain | No | Exact brand domain, e.g. `acme.com`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Items on this page. |
| page | Yes | 1-based page number returned. |
| limit | Yes | Maximum items per page. |
| total | Yes | Items matching the filters across all pages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so safety needs no restating. The description adds genuinely non-obvious visibility semantics: published catalog brands, workspace kits, and the caller's own unshared kits are all returned, and domain-restricted brands appear only when the verified email domain matches. That is real behavioral context an agent could not infer from the schema.
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?
Three short sentences, front-loaded with purpose, followed by integration and visibility rules. No filler or repetition of annotation data.
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?
An output schema exists, so return-shape explanation is correctly omitted, and the description covers the two things an agent could not derive elsewhere: visibility rules and id reuse. The remaining gap is parameter-level guidance for filtering and paging in a tool that returns up to 100 results.
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?
Five parameters, 60% schema description coverage, and the description says nothing about `q`, `page`, `limit`, `type`, or `domain` semantics. Its mention of approved email domains concerns result visibility, not the `domain` filter parameter, and the `type` enum values (CATALOG/WORKSPACE/PERSONAL) go unmentioned despite being the main way to narrow scope.
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 opens with a specific verb and resource ('Search the brand kits you can style a deck with') and immediately narrows the scope to kits usable for deck styling. It does not need to distinguish itself from a competing brand-kit sibling because none exist in the sibling list, so it lands just short of the top mark.
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?
It gives concrete follow-on usage: take a result's `id` and pass it as `brand_kit_id` when creating a deck, which tells the agent how this tool chains into `create_presentation`. It stops short of explicit when-not-to-use guidance or stating that pagination/filters should be used to narrow large result sets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiWhoamiARead-onlyInspect
Show the connected account's email, workspace, role, plan, and credit balance.
Use it when the user asks which account is connected, its plan, or its credits left.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | Yes | The workspace's plan; it decides which features are available. |
| Yes | ||
| workspace_name | Yes | |
| workspace_role | Yes | |
| credits_balance | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is fully covered. The description usefully adds that the result spans identity plus plan and credit balance, but says nothing about auth assumptions or what happens if no account is connected.
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 sentences, no filler. The what-it-returns statement comes first and the when-to-use guidance second, which is the correct front-loading for a zero-arg tool.
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?
An output schema exists, so return-value structure need not be explained. For a zero-parameter, read-only identity call with full annotation coverage, the description supplies everything an agent needs to decide and invoke.
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 nothing for the description to disambiguate; baseline 4 applies. The enumeration of returned fields gives a hint of what the call surfaces without needing input semantics.
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 resource (the connected account) and enumerates exactly what is reported: email, workspace, role, plan, credit balance. None of the sibling tools (deck/project/task/brand-kit management) overlap with this identity lookup, so an agent can select it unambiguously.
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 second sentence gives clear triggering conditions: when the user asks which account is connected, what plan they're on, or how many credits remain. It does not name an alternative, but no sibling offers account or billing information, so there is little ambiguity to resolve.
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.
18 tool updates
v1.1.0- Removed
check_job_status - Added
create_grant - Added
create_outline - Added
create_presentation - Removed
create_presentation_from_content - Removed
create_presentation_from_file - Removed
create_presentation_from_topic - Removed
create_single_slide - Added
delete_deck - Added
get_deck - Added
get_export - Added
get_task - Added
list_decks - Added
list_projects - Added
patch_deck - Added
search_brand_kits - Added
share_deck - Added
whoami
5 tool updates
v1.0.0- First observed
check_job_status - First observed
create_presentation_from_content - First observed
create_presentation_from_file - First observed
create_presentation_from_topic - First observed
create_single_slide
TDQS
Scored across 13 tools
Tools mostly have distinct resource-action boundaries: deck creation, task polling, export retrieval, sharing, and deck management are clearly separated. Minor potential confusion exists between get_task and get_deck (both report generation status) and between get_export and share_deck (both provide deck access), but the descriptions clarify the differences.
Most tools follow a predictable verb_noun pattern such as create_presentation, get_task, list_decks, delete_deck, and patch_deck. whoami is the only clear outlier, using a conventional but non-verb_noun name.
The 13 tools are well-scoped for a presentation-generation service, covering creation, discovery, async status, export, sharing, and deck lifecycle operations. Each tool appears to earn its place without excessive surface area.
The set covers the main deck lifecycle: brand discovery, outline generation, presentation creation, task polling, export, sharing, listing, fetching, updating, and deleting decks. Minor gaps exist around project/folder management and generation cancellation or retry, but core workflows are well supported.
Maintenance
Related MCP Connectors
Generate, edit, and export AI presentations to PDF, PPTX, or a shareable link.
Generate polished PowerPoint presentations from text prompts, YouTube videos, or structured outlin…
Generate professional PowerPoint presentations from text, YouTube videos, or structured JSON data.…
Free AI presentation maker: create and edit decks, export PowerPoint and PDF, Arabic right-to-left
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceCreates professional PowerPoint presentations from Markdown or JSON with intelligent layout recommendations, rich content support including tables and images, and automatic template selection based on content analysis.7Apache 2.0
- MIT
- FlicenseNot gradedqualityDmaintenanceGenerates PowerPoint presentations from templates using AI, injecting text and images based on schema definitions.1-
- FlicenseNot gradedqualityDmaintenanceEnables AI-powered generation of PowerPoint presentations with dynamic content, themes, and tones. Supports custom topics, audience, and slide count via the generate_ppt tool.-