Skip to main content
Glama
README.md
# `mcp-ToseaAI`

Official MCP server for ToseaAI document-to-presentation workflows.

This server wraps the production ToseaAI HTTP contract at `/api/mcp/v1` and exposes a stable MCP tool surface for Claude Code, Cursor, Codex, and other MCP clients.

- API keys stay server-side and are never echoed back to the agent.
- Long-running operations use `presentation_id` plus polling, not raw SSE.
- Mutating tools support explicit idempotency keys where the backend supports them.
- Export-capable tools accept an optional `export_filename` so downstream clients can receive a friendly attachment name.
- File uploads stay local until the MCP server streams them to ToseaAI over HTTPS.

## Why a separate repo

This repository should stay independent from the main application repository.

- Release cadence is different from the backend.
- Breaking changes to tool names and prompts must be versioned separately.
- Nested git repos or submodules add unnecessary operational friction for MCP users.

## Install

```bash
npm install
npm run build
```

## Required environment variables

```bash
TOSEA_API_KEY=sk_...
TOSEA_API_BASE_URL=https://tosea.ai
```

Optional:

- `TOSEA_TIMEOUT_MS`
- `TOSEA_MAX_RETRIES`
- `TOSEA_MAX_TOOL_CONCURRENCY`
- `TOSEA_MAX_MUTATING_CONCURRENCY`
- `TOSEA_MAX_PENDING_TOOL_REQUESTS`
- `TOSEA_POLL_INTERVAL_MS`
- `TOSEA_MAX_POLL_MS`
- `TOSEA_LOG_LEVEL`

## Claude Code example

```json
{
  "mcpServers": {
    "tosea": {
      "command": "node",
      "args": ["C:/new/mcp-ToseaAI/dist/src/index.js"],
      "env": {
        "TOSEA_API_KEY": "sk_...",
        "TOSEA_API_BASE_URL": "https://tosea.ai"
      }
    }
  }
}
```

Client-specific examples live in [examples/README.md](/C:/new/mcp-ToseaAI/examples/README.md).

## Cursor example

Use [examples/cursor.mcp.json](/C:/new/mcp-ToseaAI/examples/cursor.mcp.json) as the starting point for your local `mcp.json`.

## OpenAI Agents SDK example

OpenAI's Agents SDK supports stdio MCP servers, so this repo can be used directly as a local subprocess MCP without needing a hosted HTTP wrapper. See [examples/openai-agents-typescript.ts](/C:/new/mcp-ToseaAI/examples/openai-agents-typescript.ts).

If you later need OpenAI Responses API hosted remote MCP mode, add a separate Streamable HTTP transport wrapper instead of changing this stdio package in place.

## Tool summary

- `tosea_health`
- `tosea_get_permissions_summary`
- `tosea_get_quota_status`
- `tosea_list_presentations`
- `tosea_get_presentation_full_data`
- `tosea_switch_template`
- `tosea_create_document_parse`
- `tosea_get_document_parse`
- `tosea_wait_for_document_parse`
- `tosea_get_document_parse_result`
- `tosea_parse_pdf`
- `tosea_generate_outline`
- `tosea_edit_outline_page`
- `tosea_render_slides`
- `tosea_edit_slide_page`
- `tosea_export_presentation`
- `tosea_pdf_to_presentation`
- `tosea_wait_for_job`
- `tosea_list_exports`
- `tosea_list_export_files`
- `tosea_redownload_export`

## Reliability model

- `GET` requests use bounded retries with backoff and jitter.
- Read-only tools use `singleflight` coalescing for identical in-flight requests, so repeated concurrent calls like the same `list_presentations` query are collapsed into one upstream request.
- All tools use bounded local concurrency inside one MCP server process; once the local queue is full, the MCP server returns a retryable backpressure error instead of letting requests pile up until transport-level failure.
- Mutating tools are locally gated with bounded concurrency, and writes for the same `presentation_id` are serialized inside one MCP server process.
- Upload-creating endpoints (`pdf-parse`, `pdf-to-presentation`) accept `idempotency_key`, but the MCP server still avoids silent auto-retries for large uploads by default.
- `outline edit`, `slide edit`, and `export` support `idempotency_key`; reuse the same value only when retrying the same logical action.
- `tosea_export_presentation` and `tosea_pdf_to_presentation` accept optional `export_filename` when the visible exported attachment name matters.
- `tosea_create_document_parse` is the standalone Markdown/asset extraction facade. It returns `document_parse_id` and still uses the backend's existing auth, quota, and billing rules.
- `tosea_parse_pdf` remains the staged presentation parse step for workflows that continue into outline generation and slide rendering.
- `wait_for_job` follows nested `data.job.status` when the backend reports a separate export/full job, and falls back to top-level presentation status when no nested job exists.
- `html_zip` export is supported for HTML-mode decks and remains a free export on the backend.
- Stdio lifecycle is tied to the host process: the server shuts down on `stdin` close, `SIGINT`, and `SIGTERM`, and unexpected transport failures are surfaced as retryable host-transport errors instead of opaque raw exceptions.

## Attachment delivery

If an MCP client downloads a finished export and then relays it through OpenClaw, WeChat, email, or another chat surface:

- pass `export_filename` when the user cares about the final visible attachment name
- preserve filename, extension, and `Content-Type` when re-uploading the artifact
- do not repackage the file as an anonymous binary attachment, or downstream clients may show only a generic attachment label

## Asset file_id inputs

- `logo_file_id` is the `file_id` of a previously confirmed uploaded logo asset. It is not a local path.
- `template_file_id` is the `file_id` of a previously confirmed uploaded PPTX/PDF custom-template asset. It is not a source document path.
- `template_file_id` is valid only with `slide_mode="image"`.
- When `template_file_id` is present, the backend treats the request as `custom_template` automatically.
- This MCP package does not mint those asset IDs itself yet. Reuse IDs created through the scripts-first skill or another upload-capable product flow.

## Upload constraints

- `page_count_range` must be one of `4-8`, `8-12`, `12-16`, `16-20`, `20-30`, `30-40`, `40-50`, or `50-100`.
- Source-file count and total source-page limits are enforced by backend tier policy.
- The current default/free backend policy is `1` source file and `60` total source pages unless the server-side policy overrides it.

## Image mode decision rule

- keep `slide_mode="html"` by default
- use `slide_mode="image"` only when the user explicitly wants image-mode rendering or image-first slide composition
- when using image mode, pass `image_model` if the user cares about image quality or regeneration consistency
- use `output_format="pptx_image"` when the user wants a pure image-based PPTX export
- use `output_format="pdf"` for image-mode review handoff
- do not use `output_format="html_zip"` for image-mode decks

## Security notes

- API keys must start with `sk_`.
- The server redacts bearer secrets from surfaced errors.
- The MCP tool layer does not expose JWT-only account operations.
- Export history only exposes user-visible files returned by the backend.

## Smoke test

This repository includes a non-billing smoke test that checks auth, health, permissions, and list access without creating presentations:

```bash
npm run smoke
```

Optional flags:

- `--feature-key outline_generate`
- `--expect-tier pro`
- `--list-limit 5`

TDQS

B3.3/5.0

Scored across 21 tools

Disambiguation5/5

Each tool targets a distinct action or resource (e.g., creating a parse vs. editing slides vs. exporting). Descriptions clearly differentiate similar-sounding tools like tosea_create_document_parse, tosea_parse_pdf, and tosea_pdf_to_presentation.

Naming Consistency5/5

All tools follow a consistent 'tosea_verb_noun' pattern using underscores and lowercase. The naming convention is uniform across the entire set, with only minor variations like 'pdf_to_presentation' which still adheres to the pattern.

Tool Count4/5

21 tools is slightly above the ideal 3-15 range, but each tool serves a specific purpose within the presentation lifecycle. The count is reasonable for the comprehensive functionality offered.

Completeness4/5

The toolset covers the full workflow from upload to export, including editing, template switching, and job polling. Minor gaps exist (e.g., no tool to delete a presentation or export), but core operations are well-covered.

Maintenance

ActivityNo data
ResponsivenessSyncing