Skip to main content
Glama
aryan0078

storykit-mcp

by aryan0078
README.md
# storykit-mcp

Give an AI structured data and get back a hosted StoryKit widget — or drive the **full Studio** (images, media, brands, canvases, assets, series, workflows) with a personal API key.

1. **Public widgets (no key)** — `find_widgets` → `render_widget` → opaque hosted URL.
2. **Studio tools (`STORYKIT_API_KEY`)** — full owner surface under plan limits (~69 remote tools).

Mint a key + paste-ready LLM prompt: **[asset.storykit.space/ai](https://asset.storykit.space/ai)**

## CRITICAL: which endpoint?

| URL | Auth | Tools |
| --- | --- | --- |
| **`https://asset.storykit.space/api/v1/studio-mcp`** | `Bearer sk_live_…` | Full Studio (images included) |
| `https://asset.storykit.space/api/v1/mcp` | none | **Only** widgets (3 tools) — **no images** |

If `tools/list` lacks `generate_image`, you are on the wrong server.

## Connect

### Remote Studio (HTTP — preferred for images)

```bash
export STORYKIT_API_KEY="sk_live_…"
# Claude / Cursor / any streamable-HTTP MCP client:
# URL:  https://asset.storykit.space/api/v1/studio-mcp
# Header: Authorization: Bearer $STORYKIT_API_KEY
```

```bash
claude mcp add --transport http storykit-studio https://asset.storykit.space/api/v1/studio-mcp \
  --header "Authorization: Bearer ${STORYKIT_API_KEY}"
```

### Remote public widgets only

```bash
claude mcp add --transport http storykit https://asset.storykit.space/api/v1/mcp
```

### Local stdio (widgets always; Studio when key is set)

```bash
export STORYKIT_API_KEY="sk_live_…"   # required for image/studio tools
claude mcp add storykit -- npx -y storykit-mcp@3.3.0
```

Stdio tool names are prefixed with `studio_` (e.g. `studio_generate_image` → remote `generate_image`).

## HARD RULES for agents

1. **Never invent images** with DALL·E, Midjourney, Gemini image, built-in `image_gen`, Unsplash, etc.
2. **Never invent ids** — call `list_*` / `get_*` first.
3. After `generate_image` / `edit_image`, poll `get_image_job` until **SUCCEEDED**; return platform `outputUrl` only.

## Public tools (no key)

| Tool | Spec |
| --- | --- |
| `find_widgets` | `{ intent, domain?, dataFields?, kind?, page?, size? }` → schemas only |
| `render_widget` | `{ widgetId, data[], theme?, ttlDays? }` → expiring hosted URL (treat as secret) |
| `list_widget_themes` | `{}` palettes |

Consent before personal/health data. Max 200 rows. Default TTL 30 days.

## Studio tools (`STORYKIT_API_KEY`)

Call `studio_get_account` or `studio_get_usage` first.

### Account & image status

| Tool | Spec |
| --- | --- |
| `studio_get_account` | `{}` identity, plan, quotas |
| `studio_get_usage` | `{}` full limits snapshot |
| `studio_get_image_status` | `{}` queue, aspects, remaining |

### Media library

| Tool | Spec |
| --- | --- |
| `studio_upload_media` | `{ imageBase64, contentType?, filename? }` → mediaId |
| `studio_list_media` | `{ query?, kind?, trash? }` |
| `studio_get_media` | `{ id }` |
| `studio_get_media_content` | `{ id }` base64 ≤2MB |
| `studio_update_media` | `{ id, title?, tags? }` |
| `studio_star_media` | `{ id, starred }` |
| `studio_trash_media` / `studio_restore_media` / `studio_delete_media` | `{ id }` |

### Image AI

| Tool | Aliases | Spec |
| --- | --- | --- |
| `studio_generate_image` | `studio_image_generate`, `studio_img_generate` | `{ prompt, aspect?, qualityMode?, brandKitId?, referenceMediaIds?, count?, magicPrompt?, caption?, mode? }` |
| `studio_edit_image` | `studio_image_edit`, `studio_img_edit` | `{ prompt, referenceMediaIds[1..5], maskMediaId?, aspect?, count? }` |
| `studio_list_images` | | `{ query?, state? }` |
| `studio_get_image_job` | | `{ jobId? }` or `{ id? }` — poll until SUCCEEDED |
| `studio_cancel_image_job` / `retry` / `delete` | | `{ jobId }` |
| `studio_describe_image` | | `{ mediaId? }` or `{ generationId? }` |
| `studio_publish_image` / `unpublish` | | `{ id }` numeric generation id |
| `studio_save_image_as_kit` | | `{ jobId }` |
| `studio_batch_generate_images` | | PRO: `{ prompts[], aspect?, brandKitId?, qualityMode? }` |

**Aspects:** `square` `portrait` `poster` `story` `landscape` `banner`  
**qualityMode:** `fast` | `quality`

#### Image workflow

1. `studio_get_account`  
2. Optional `studio_upload_media` → mediaId  
3. `studio_generate_image` or `studio_edit_image`  
4. Loop `studio_get_image_job` until SUCCEEDED  
5. Return platform `outputUrl` only  

### Prompt / vision

| Tool | Spec |
| --- | --- |
| `studio_compile_prompt` | `{ draft }` → caption for generate_image.caption |
| `studio_analyze_image_to_prompt` | `{ imageBase64, contentType?, aspect?, layout? }` |
| `studio_get_vision_job` | `{ jobId, apply? }` |

### Brands

| Tool | Spec |
| --- | --- |
| `studio_list_brand_kits` | `{ query?, page?, size? }` |
| `studio_get_brand_kit` | `{ id }` |
| `studio_extract_brand_kit` | `{ imagesBase64:[{base64,contentType?}], prompt?, md? }` |
| `studio_refine_brand_kit` | `{ id, feedback }` |
| `studio_rename_brand_kit` | `{ id, name }` |
| `studio_duplicate_brand_kit` | `{ id, name? }` |
| `studio_delete_brand_kit` | `{ id }` |
| `studio_publish_brand_kit` / `unpublish` | `{ id }` |
| `studio_brand_showcase` | `{ id, count? }` |

### Canvases

| Tool | Spec |
| --- | --- |
| `studio_list_canvases` | `{}` |
| `studio_get_canvas` | `{ id }` includes doc |
| `studio_create_canvas` | `{ title?, aspect? }` |
| `studio_save_canvas` | `{ id, title?, aspect?, doc?, thumbnailMediaId? }` |
| `studio_duplicate_canvas` / `studio_delete_canvas` | `{ id }` |

### Studio assets (commissioned widgets)

| Tool | Spec |
| --- | --- |
| `studio_list_studio_assets` | `{}` |
| `studio_get_studio_asset` | `{ id }` no source code |
| `studio_commission_studio_asset` | `{ prompt, kind?, purpose?, sourceMd? }` |
| `studio_iterate_studio_asset` | `{ id, feedback }` |
| `studio_rename_studio_asset` | `{ id, title }` |
| `studio_trash_studio_asset` / `restore` | `{ id }` |
| `studio_list_folders` / `studio_create_folder` | create: `{ name }` |

### Series & workflows

| Tool | Spec |
| --- | --- |
| `studio_list_series` / `get` / `create` / `series_next` / `series_extend` / `delete` | see input schemas |
| `studio_list_workflows` / `get` / `create` / `update` / `run` / `delete` / `list_workflow_runs` | |

Remote names drop the `studio_` prefix. Full list: `tools/list` on studio-mcp.

Track usage at [storykit.space/me](https://storykit.space/me).

## Environment

| Variable | Purpose |
| --- | --- |
| `STORYKIT_API_BASE` | API host (default `https://asset.storykit.space`) |
| `STORYKIT_API_KEY` | Personal `sk_live_…` for Studio tools |
| `STORYKIT_STUDIO_MCP` | Override Studio MCP URL |

MIT. Created with love by [Story Kit](https://storykit.space).

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct function: bundle URL generation, asset retrieval, embedding, and various listing/search operations. No overlapping purposes.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with lowercase underscores (bundle_url, get_asset, list_chart_families, etc.), making naming predictable.

Tool Count5/5

7 tools cover key operations without redundancy, suitable for a design library and bundle generation service.

Completeness4/5

Covers retrieval, search, and bundle creation for assets, but lacks tools for creating, updating, or managing assets, which may be intentional but leaves some gaps.

Maintenance

ActivityStale
ResponsivenessNo issues