> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chroniclehq.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP setup

> Bring the power of Chronicle into your AI tools.

The Chronicle MCP server lets AI tools like Claude, ChatGPT, and Gemini access your Chronicle workspace to generate presentations directly.

## Quick reference

* Works with any AI tool that supports the MCP (Model Context Protocol).
* Available on Pro, Plus, and Max Chronicle plans. Generations charge credits.

## Installation

<Tabs>
  <Tab title="Claude.ai">
    <Steps>
      <Step title="Add Chronicle as a custom connector">
        In Claude.ai, open **Settings** → **Connectors**, then click **Add custom connector**.

        Fill in:

        * **Name**: `Chronicle`
        * **Remote MCP server URL**: `https://mcp.chroniclehq.com`

        Click **Add** to save.
      </Step>

      <Step title="Authenticate">
        On the Connectors page, click **Connect** next to Chronicle. A browser window opens — complete the Chronicle sign-in and the connector activates.
      </Step>

      <Step title="Create a presentation">
        Start a new chat and ask Claude to generate a presentation. Claude will call Chronicle automatically.

        For best results:

        * specify format (presentation, deck, proposal)
        * be specific about structure ("create a 10 slide sales proposal using the following transcript")
      </Step>
    </Steps>
  </Tab>

  <Tab title="Claude Code">
    <Steps>
      <Step title="Add the Chronicle MCP server">
        Run in your terminal:

        ```bash theme={null}
        claude mcp add --transport http chronicle https://mcp.chroniclehq.com
        ```

        Add `--scope user` if you want Chronicle available across every project on your machine.
      </Step>

      <Step title="Authenticate">
        Start Claude Code with `claude`, then ask anything that triggers a Chronicle tool (e.g. *"list my Chronicle workspaces"*). The first call opens a browser window — complete the Chronicle sign-in and the tool call resumes automatically.
      </Step>

      <Step title="Create a presentation">
        Claude Code can now create a presentation with Chronicle.

        For best results:

        * specify format (presentation, deck, proposal)
        * be specific about structure ("create a 10 slide sales proposal using the following transcript")
      </Step>
    </Steps>
  </Tab>
</Tabs>

***

## Using the MCP server

Once configured, your AI assistant can access Chronicle automatically when you prompt or paste a Chronicle link into chat.

You can get the link for any presentation by copying the url in your browser address bar.

If you call the REST API directly (for example to poll generation status), see [API scope and rate limits](/api-scope-rate-limits) for rate limits, retries, and polling guidance.

***

## Available tools

Every tool except `list_workspaces` takes `workspace_id` as input. Call `list_workspaces` first to discover which `workspace_id` to use.

| Tool                    | Input/s                                                                                                         | Description                                                                                                                                                                                                                                                                                                                                                                   |
| ----------------------- | --------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `list_workspaces`       | *(none)*                                                                                                        | Returns workspaces the authenticated user can target. Call this first to obtain `workspace_id` for every other tool. The response also includes `mcp_enabled`; if `false`, all subsequent tool calls are rejected with `MCP_NOT_ENABLED`.                                                                                                                                     |
| `get_templates`         | `workspace_id`                                                                                                  | Returns templates available to the workspace.                                                                                                                                                                                                                                                                                                                                 |
| `get_presentation`      | `workspace_id`, `presentation_id`                                                                               | Fetches an existing presentation.                                                                                                                                                                                                                                                                                                                                             |
| `create_presentation`   | `workspace_id`, `template_id`, `selected_section_ids` (optional)                                                | Creates a presentation from a template, no AI involved.                                                                                                                                                                                                                                                                                                                       |
| `create_upload_target`  | `workspace_id`, `file_name`, `content_type`, `declared_file_size`                                               | Issues a presigned S3 upload target for a file attachment. The host uploads the bytes directly, then references the file on `generate_presentation` or `send_followup_message`. See [Attachments](#attachments) below.                                                                                                                                                        |
| `generate_presentation` | `workspace_id`, `prompt`, `template_id` (optional), `selected_section_ids` (optional), `attachments` (optional) | Starts an AI generation and returns `status="generating"` immediately with a `generation_id`. Pass `template_id` to follow a known template, or omit it for the **Standalone** path where Chronicle drafts a storyline first, then slides. Pass `attachments[]` (from `create_upload_target`) to ground the generation on files. Poll `get_generation_status` until terminal. |
| `send_followup_message` | `workspace_id`, `generation_id`, `content`, `attachments` (optional)                                            | Replies to an in-flight generation that returned `awaiting_input`. Returns `status="generating"` immediately; poll `get_generation_status` until the next terminal state. Optional `attachments[]` lets the user introduce files mid-conversation.                                                                                                                            |
| `get_generation_status` | `workspace_id`, `generation_id`                                                                                 | Polls a generation's current state. Returns `generating`, `awaiting_input`, `completed`, or `failed`. Each call holds open for up to \~50 s server-side; if still non-terminal, call again.                                                                                                                                                                                   |

<Info>
  `generate_presentation` and `send_followup_message` return
  `status="generating"` immediately. The caller must then poll
  `get_generation_status` until the state is terminal (`completed`,
  `awaiting_input`, or `failed`). Each `get_generation_status` call holds open
  for up to \~50 s server-side, so consecutive calls cover long generations
  without keeping any single MCP request alive. Pass user prompts and follow-up
  answers through verbatim; Chronicle's AI will ask for missing context itself.
</Info>

***

## Attachments

Ground a generation on user files. Mention a file path in your chat (PDFs, decks, images, text) — your AI client handles the upload to Chronicle.

<Info>
  **Supported formats:** `.txt`, `.md`, `.pdf`, `.pptx`, `.jpg`, `.jpeg`,
  `.png`, `.gif`, `.webp`. Maximum **50 MB** per file.
</Info>

***

## Example prompts

For best results: specify format (presentation, deck, proposal), be specific about structure ("create a 10 slide sales proposal using the following transcript")

<AccordionGroup>
  <Accordion title="Generate with AI">
    ```text theme={null}
    Create a 10-slide pitch deck for a new festival management tool called Stagecraft.
    ```
  </Accordion>

  <Accordion title="Generate with a template">
    ```text theme={null}
    Use the YC Pitch Deck template to create a pitch for my AI startup.
    ```
  </Accordion>

  <Accordion title="Ground a generation on a file">
    ```text theme={null}
    Generate a Q1 review deck. Use this PDF for context: /Users/me/Downloads/q1-report.pdf
    ```
  </Accordion>
</AccordionGroup>

***

## Troubleshooting

<AccordionGroup>
  <Accordion title="Authentication failed">
    If you’re seeing authentication errors:

    * Try re-authenticating by reconnecting to the MCP server in your client
    * Check that you have the correct permissions for the project you’re trying to access
    * Make sure your browser session is active when authenticating
  </Accordion>

  <Accordion title="Presentation not found">
    Verify:

    * The component/page exists in your Chronicle workspace
    * The name or URL matches exactly
    * You have access to the presentation
  </Accordion>

  <Accordion title="Connection errors">
    If the MCP server is unreachable:

    * Check your internet connection
    * Verify the URL is `https://mcp.chroniclehq.com`
    * Reach out to the Chronicle team for support
  </Accordion>

  <Accordion title="Insufficient credits">
    Check your available credits via Settings → Billing in Chronicle. You can purchase more tokens or upgrade plan.
  </Accordion>
</AccordionGroup>

***

## FAQs

<AccordionGroup>
  <Accordion title="What can I do with Chronicle over MCP?">
    Chronicle’s MCP integration supports template discovery, presentation retrieval, presentation creation, and AI-powered generation workflows.

    It lets AI clients create and work with Chronicle presentations directly.
  </Accordion>

  <Accordion title="Why did the MCP generation flow return a question instead of a presentation?">
    Some requests need clarification before Chronicle can generate the right presentation.

    Your MCP client should present the question to the user and send the answer back before continuing.
  </Accordion>

  <Accordion title="Should I treat MCP generation as a single request?">
    No. Treat it as a multi-step workflow.

    A complete flow can include generation, polling, one or more follow-up messages, and final completion.
  </Accordion>

  <Accordion title="Can MCP generation time out?">
    Yes. Long-running generation flows can time out.

    Your client should handle timeouts gracefully and let the user retry when appropriate.
  </Accordion>

  <Accordion title="How should I authenticate MCP clients?">
    Follow the setup guide for your MCP client and use the Chronicle connection flow documented for that environment.

    Authentication steps can vary by client.
  </Accordion>

  <Accordion title="Can MCP generations ground on files?">
    Yes. Call `create_upload_target` to get a presigned S3 URL, upload the bytes from the host, then pass an entry in `attachments[]` on `generate_presentation` or `send_followup_message`. See [Attachments](#attachments) for the full flow and supported formats.
  </Accordion>
</AccordionGroup>

***

## Related posts

* [API reference](/api-reference)
* [Error codes](/error-codes)
* [Troubleshooting](/troubleshooting)
