# MCP tool reference

Look up the 10 tools of the offgen MCP server, their inputs and outputs, and the order assistants call them in.

Source: https://www.offgen.ai/docs/mcp-tools

The offgen MCP server has 10 tools: 5 for workflows and 5 for Library templates. Your assistant chooses and calls them on its own. Use this page to build an integration or to understand what an assistant did.

**Endpoint:** `https://api.offgen.ai/mcp` (Streamable HTTP, stateless) · **Auth:** sign in with offgen (OAuth), or an `offgen_` [API key](/docs/admin/api-keys) as `Authorization: Bearer` or `X-API-Key` · **Scope:** one organization per connection

To connect a client, see [Use offgen in AI assistants](/docs/mcp). The public server at `https://www.offgen.ai/mcp` is a different one: it only reads offgen product information and cannot create presentations.

## Workflow tools

| Tool                    | Inputs                                                             | Returns                                                                                                                               |
| ----------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- |
| `list_workflows`        | none                                                               | The workflows you can run: `id`, `name`, `description`. If there are none, `emptyReason` is `no_runnable_workflows`.                  |
| `describe_workflow`     | `workflowId`                                                       | The workflow's `inputs` (name, label, type, required, allowed values) and a JSON Schema `inputSchema`. Dates use `YYYY-MM-DD`.        |
| `generate_presentation` | `workflowId`, `inputs` (keyed by the `inputSchema` property names) | A `runId` with status `queued`. Invalid inputs return an error and start no run.                                                      |
| `get_result`            | `runId`                                                            | `status` (`queued`, `running`, `completed` or `failed`), `slidesEmitted`, `pollAgain` and `error`. When completed, the download link. |
| `download_presentation` | `runId`                                                            | The download link of a completed run, the same one `get_result` returns. Kept for older integrations.                                 |

## Generate from a workflow

1. `list_workflows`, then pick a workflow by its `id`. Names are display names only.
2. `describe_workflow` to learn the required inputs. Check the values against `inputSchema`.
3. `generate_presentation` returns a `runId` right away.
4. `get_result` with that `runId`. Each call waits up to 55 seconds. While `pollAgain` is `true`, call it again with the same `runId`.
5. When the status is `completed`, `get_result` returns the download link. Give it to the user. You don't need `download_presentation`.

The workflows are the ones your organization builds in offgen. See [Build a workflow](/docs/workflows).

## Library template tools

With these tools, the assistant writes every word itself and offgen assembles the slides from your [Library](/docs/library) templates. Shapes that are [locked](/docs/sharepoint/import#lock-shapes) keep their content.

| Tool                  | Inputs                                                                                                             | Returns                                                                                                                                                                                     |
| --------------------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `search_templates`    | `query` (optional, any language), `limit` (1 to 25, default 10)                                                    | Matching templates with `templateId`, `name`, `description`, `masterName`, `space` and the number of text and picture slots. Without a query, the newest templates.                         |
| `get_template`        | `templateIds` (1 to 10), `waitForAnalysis` (optional, waits up to 40 seconds)                                      | offgen's analysis of each template, its slots (`shapeId`, kind, role, guidance, current text, locked), its layout's placeholders, a preview image and links to the preview and the `.pptx`. |
| `compose_deck`        | `slides` (1 to 20), each with a `templateId` or `layoutOf`, plus `text`, `remove` and `images` keyed by `shapeId`  | One `.pptx`: a download link, a preview per slide and the result of the file check.                                                                                                         |
| `upload_presentation` | `base64` (under 4 MB), or nothing; `kind`: `pptx`, `png` or `jpeg`                                                 | An `uploadId`. Without `base64`, an upload URL and a ready `curl` command to send the file.                                                                                                 |
| `onboard_templates`   | `uploadId`, `slideNumbers` (optional, up to 30 per call), `space` (`organization` or `my`, default `organization`) | One template per slide with its `templateId` and the status `created` or `existing`.                                                                                                        |

## Build a deck from templates

1. `search_templates` with what the slide should show, for example "team overview with photos".
2. `get_template` for the candidates, to see their slots and previews.
3. `compose_deck` with the text and pictures for each `shapeId`. Use `layoutOf` for a new slide on a template's layout.
4. Check every preview. To fix something, call `compose_deck` again with the whole deck.
5. Give the user the download link.

For pictures, upload a PNG or JPEG with `upload_presentation` first, then put its `uploadId` in `images`.

## Add slides as templates

1. `upload_presentation` with the `.pptx`.
2. `onboard_templates` with the `uploadId`. The call is safe to repeat: slides that already exist come back as `existing`.
3. offgen names and analyzes each new template in 1 to 3 minutes. Call `get_template` with `waitForAnalysis: true` until it's done.

The `organization` space needs the Owner or Admin role. With `my`, the templates go to your personal library (**My**). See [Users, teams and roles](/docs/admin/members).

## Download links

* No tool returns file bytes. A finished deck comes as an MCP `resource_link`, a Markdown link and the fields `downloadUrl`, `suggestedFileName` and `mimeType`.
* The link carries a short-lived token for this one deck, so a browser opens it without signing in. When it expires, call the tool again for a fresh link.
* Clients on an MCP version older than 2025-06-18 get the same fields as JSON text.

## Errors and limits

* A tool error comes back with `isError` and a message that says what to do next, for example an unknown `runId` or a run that isn't finished.
* Missing or invalid credentials return `401` with a `WWW-Authenticate` header, so OAuth clients can start the sign-in. If a client calls a tool after losing access, for example with a revoked key or an inactive subscription, the tool returns a message that names the cause.

| Limit                               | Value                                                                        |
| ----------------------------------- | ---------------------------------------------------------------------------- |
| Inline upload (`base64`)            | under 4 MB; use the upload URL for larger files                              |
| Presentation size                   | 150 MB                                                                       |
| Slides per `onboard_templates` call | 30; call again for the rest                                                  |
| Slides per `compose_deck` call      | 20                                                                           |
| Pictures                            | PNG or JPEG, up to 10 MB each, 10 different pictures per `compose_deck` call |

## Related

* [Use offgen in AI assistants (MCP)](/docs/mcp): client setup and troubleshooting
* [Build a workflow](/docs/workflows): what `list_workflows` returns
* [Template library](/docs/library): where `search_templates` looks
* [offgen for developers](/en/developers) on offgen.ai
