@clipwright/mcp-server 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -10,6 +10,90 @@ on the client side. Entries marked *Server-side* changed the API itself: every
10
10
  client version sees them from the day the API was deployed, not from the package
11
11
  release they are listed under.
12
12
 
13
+ Entries marked *Dashboard:* changed the web app (the dashboard or a public page of the site)
14
+ and no package. This file is also the public changelog at /changelog, so they are listed here:
15
+ a customer reading it should not miss what appeared in the product. Like *Server-side* entries,
16
+ they are live from the day the web app was deployed, not from the package release they are
17
+ listed under.
18
+
19
+ ## [0.15.0] - 2026-09-14
20
+
21
+ ### Changed
22
+
23
+ - *Server-side:* in `GET /v1/voices`, a catalog voice carries `preview_url` and
24
+ `preview_expires_at` once its sample is recorded: a short clip of that voice on
25
+ `eleven_v3`, in the voice's own language. The link is signed by us and
26
+ expires like a preset's. A voice without a recorded sample for its current
27
+ model and sample text still has neither field, and the list never links to
28
+ the vendor. The sample texts outside English and Russian are machine
29
+ translations that no native speaker has checked. (clipwright#164)
30
+ - *Server-side:* without `voice` or `voice_id`, the voice follows the actor's
31
+ gender: a woman from `actor_id` speaks `sarah`, a man speaks `george`. The
32
+ default actor still speaks `george`, and an explicit voice always wins.
33
+ (clipwright#183)
34
+ - *Server-side:* a request with `image` and no voice gets a warning that the
35
+ male `george` voice is used, naming `voice` and `actor_gender` as the fix.
36
+ `GET /v1/runs/{id}` derives it from the stored input, so runs started before
37
+ this change show it too. A request with `actor_gender` next to `voice` or
38
+ `voice_id` gets a warning that the hint changed nothing. (clipwright#183)
39
+ - *Server-side:* the contract version moved to `2026-09-14`. (clipwright#183)
40
+ - *Dashboard:* `/actors` says that an actor without a chosen voice speaks the
41
+ default voice of their gender. (clipwright#183)
42
+
43
+ ### Added
44
+
45
+ - `actor_gender` (`female` or `male`) in the `make_ugc` input: next to `image`
46
+ it picks the default voice of that gender. It is refused with `actor_id` and
47
+ without `image`, and the remote fetch killswitch turns it off together with
48
+ `image`. The REST API accepts it from the day the API is deployed; the MCP
49
+ tool schema, the SDK types and the CLI flag `--actor-gender` arrive with this
50
+ release. (clipwright#183)
51
+
52
+ - *Dashboard:* `/actors` shows the actor library as a gallery: every published portrait with
53
+ its `actor_id` to copy, next to gender, approximate age, description and version. A person
54
+ can pick a face without calling `GET /v1/actors` first. (clipwright#148)
55
+ - *Dashboard:* `/videos` lists the finished videos of the account. Each one is a still frame
56
+ taken from the delivered file, with the length of the clip and the day it finished, and a
57
+ tile with a frame plays the video. Runs that are still going or that failed stay on the
58
+ Balance page. (clipwright#138)
59
+ - *Dashboard:* `/changelog` renders this file as a public page, so the release notes are
60
+ readable without installing a package. (clipwright#102)
61
+
62
+ ## [0.14.0] - 2026-09-13
63
+
64
+ ### Changed
65
+
66
+ - **Breaking:** *Server-side:* `GET /v1/voices` lists the catalog voices after
67
+ the five presets, by language and then by rank; a voice retired from the
68
+ catalog is not listed. Every entry gains `kind` (`preset` or `catalog`) and
69
+ `supported_models`, the contract models that know the voice's language. A
70
+ catalog voice also carries `verified_models` and whichever of `locale`,
71
+ `accent`, `gender`, `age` and `use_case` the catalog has. The response gains
72
+ `models`: each contract model with its `char_limit` and `languages`. Only a
73
+ preset carries `preview_url`; a catalog voice has no sample yet. Clients
74
+ 0.11.0 and 0.12.0 cannot read this response and fail in `listVoices()`,
75
+ `list_voices` and `clipwright voices`: upgrade to 0.13.0 or later. The
76
+ contract version moved to `2026-09-13.2`. (clipwright#164)
77
+ - *Server-side:* `GET /v1/voices` takes the filters `language`, `gender`, `age`,
78
+ `use_case` and `model`. `model` keeps the voices whose language the model
79
+ knows. A voice without a label matches no value of that filter. An unknown
80
+ value gets 400 `invalid_request` that names the allowed values, and an
81
+ unknown query key gets 400 `unknown_field`; neither returns an empty list.
82
+ (clipwright#164)
83
+ - `listVoices()` takes the same filters as an object, MCP `list_voices` as
84
+ arguments, and `clipwright voices` as `--language`, `--gender`, `--age`,
85
+ `--use-case` and `--model`. `clipwright voices` prints age and use case next
86
+ to language and gender, and cuts a description longer than 100 characters.
87
+ (clipwright#164)
88
+
89
+ ### Added
90
+
91
+ - `@clipwright/core` exports `voicesQuery`, `voicesQueryShape`, `VoicesQuery`
92
+ and `VOICES_QUERY_FIELDS`. `unknownFields` takes an optional list of accepted
93
+ keys, and `UnknownFieldHit.suggestion` is typed `string`. The subpath
94
+ `@clipwright/core/voice-listing` exports `listVoices`, `serverVoicesQuery`
95
+ and `serverVoicesQueryFor`. (clipwright#164)
96
+
13
97
  ## [0.13.0] - 2026-09-13
14
98
 
15
99
  ### Changed
package/README.md CHANGED
@@ -26,7 +26,9 @@ Any MCP host works — the server speaks JSON-RPC over stdio.
26
26
 
27
27
  ## Tools
28
28
 
29
- - `list_voices` — voice catalog. Free, spends no credits.
29
+ - `list_voices` — voices for `voice`: the presets and the catalog, with
30
+ filters by language, gender, age, use case and model, and a short audio
31
+ sample per voice. Free, spends no credits.
30
32
  - `list_actors` — ready-made faces with stable ids and verified formats. Free.
31
33
  - `quote_ugc` — estimated duration and price, plus a warning when `make_ugc`
32
34
  with the same input would be refused for money or access. Free.
package/SKILL.md CHANGED
@@ -296,7 +296,7 @@ schema, and the server answers 400 `rejected_field` before a run is even created
296
296
  | `webhook_url` | poll `get_run` — webhooks are not delivered at all |
297
297
  | `segments`, `broll_url` | a single `script`; segmented clips are not available yet |
298
298
  | `disclosure_overlay` | nothing: the AI disclosure is already in the run response and in the file |
299
- | `image` with the killswitch off | omit it — the render runs on the default actor |
299
+ | `image` and `actor_gender` with the killswitch off | omit both — the render runs on the default actor |
300
300
 
301
301
  **The aspect ratio can be refused.** Requesting `aspect_ratio: "1:1"` without an
302
302
  `image` or `actor_id` returns a refusal: the default actor is vertical (432×768), and a square
@@ -320,10 +320,11 @@ them here would mean offering what the server punishes you for (section 3).
320
320
  TTS model, as reported by `tools/list`: `eleven_v3` allows 5000 characters,
321
321
  `eleven_flash_v2_5` and `eleven_turbo_v2_5` allow 10000. Spaces, audio tags and stress
322
322
  marks count; emoji may count as two characters. There is no word-count limit or fixed
323
- duration implied by it), `tts_model` (every preset speaks `eleven_v3`, the most
323
+ duration implied by it), `tts_model` (every preset and catalog voice speaks `eleven_v3`, the most
324
324
  expressive model; `eleven_flash_v2_5` and `eleven_turbo_v2_5` cost less and suit
325
325
  languages other than Russian), optionally `person` OR
326
- `image` (a public `https` URL), plus `name`, `captions` (defaults to `false` —
326
+ `image` (a public `https` URL) with `actor_gender` (`female`/`male`, only next to
327
+ `image`), plus `name`, `captions` (defaults to `false` —
327
328
  **captions are opt-in, ASK THE USER FIRST**), `caption_style`
328
329
  (`hormozi`/`tiktok`/`minimal`), `look` (`natural`/`commercial`/`raw_iphone`),
329
330
  `aspect_ratio` (`9:16`/`1:1`, with NO default — silence and an explicit choice
@@ -391,21 +392,43 @@ reaches a terminal state. Do not tell the user the video is ready until you have
391
392
 
392
393
  Two mutually exclusive optional fields in the `make_ugc` input:
393
394
 
394
- - `voice` — the name of a **curated preset**. **The recommended path.** The list
395
- comes from the free `list_voices` tool: `owner_ru_clone`, `sarah`, `george`,
396
- `eric`, `daria_ru_female`. Validated at the boundary: an unknown name returns
397
- 400 immediately and no paid call is made.
395
+ - `voice` — the `name` of a voice from the free `list_voices` tool: one of the
396
+ presets (`owner_ru_clone`, `sarah`, `george`, `eric`, `daria_ru_female`) or a
397
+ catalog voice. **The recommended path.** Validated at the boundary: an unknown
398
+ or retired name returns 400 immediately and no paid call is made. The two
399
+ refusals differ: a retired voice's message names the date it left the catalog.
398
400
  - `voice_id` — a **raw ElevenLabs id** (20 characters), an escape hatch for voices
399
401
  OUTSIDE the catalog, cloned ones included. It is checked for free against the
400
402
  account at the start of the run (not during `quote`): a non-existent id fails the
401
403
  run BEFORE any paid call.
402
- - **The default voice matches the default actor.** Selecting another actor does
403
- not automatically change the voice. Read both catalogs when the user requests
404
- a new face and voice; preserve any explicit voice choice.
404
+ - **The default voice follows the actor's gender.** Without `voice` or `voice_id`,
405
+ a woman speaks `sarah` and a man speaks `george`. The gender comes from the
406
+ `actor_id` catalog entry, or from `actor_gender` next to `image`. The default
407
+ actor speaks `george`. An explicit voice always wins.
408
+ - **With `image`, pass `actor_gender` or a `voice`.** Clipwright does not detect
409
+ gender from the photo. Without either, the voice is `george` and `warnings[]`
410
+ says so. `actor_gender` next to `actor_id`, or without `image`, returns 400
411
+ before any charge.
405
412
  - **Read `actor` in the quote before rendering.** It describes the selected
406
- actor (`null` means the client sent `image`). Compare its gender with the voice
407
- metadata when choosing a pair. The API honors the two selections independently;
408
- a difference in gender labels does not silently replace either choice.
413
+ actor (`null` means the client sent `image`). An explicit voice is used as
414
+ requested whatever the actor's gender; `actor_gender` next to it changes nothing,
415
+ and a warning says so.
416
+
417
+ **How to pick a voice when the user asks for one:**
418
+
419
+ 1. Call `list_voices` with the filters the user gave: `language`, `gender`,
420
+ `age`, `use_case`. Language is a filter only: any voice speaks any supported
421
+ language, so a Spanish script can use an English voice.
422
+ 2. Play the `preview_url` of two or three candidates to the user. A catalog
423
+ voice's sample is in its native language.
424
+ 3. Pass the chosen `name` as `voice` to `quote_ugc` and then `make_ugc`.
425
+ 4. Next time, reuse that same `name`. A name always means the same voice.
426
+
427
+ When the user sends a photo and asks for no particular voice, pass the gender of
428
+ the person in it as `actor_gender`. Ask the user only when you cannot tell.
429
+
430
+ For a Russian script, keep `eleven_v3` and mark stress with a capital vowel
431
+ (see **Russian stress marks** above).
409
432
 
410
433
  ### `get_run` — status polling
411
434
 
@@ -475,23 +498,44 @@ Pass `actor_id` to both `quote_ugc` and `make_ugc`. It cannot be combined with
475
498
  work; it never substitutes the default face. Existing runs retain the selected
476
499
  version and image hash even if the catalog changes later.
477
500
 
478
- ### `list_voices` — free, no input
501
+ ### `list_voices` — free, optional filters
502
+
503
+ Returns the voices for the `voice` field of `make_ugc`: the presets first, then
504
+ the catalog voices, by language and then by rank. Costs nothing and creates no run.
505
+
506
+ All filters are optional:
507
+
508
+ - `language` — the voice's native language. It is a filter, not a limit: any
509
+ voice speaks any supported language.
510
+ - `gender` — `female` or `male`.
511
+ - `age` and `use_case` — labels as the entries print them, such as `young` or
512
+ `narrative_story`.
513
+ - `model` — keeps the voices whose language that speech model supports.
514
+
515
+ A voice without a label matches no value of that filter. An unknown value is
516
+ refused with the allowed values, and an unknown filter name with
517
+ `unknown_field`; neither returns an empty list.
479
518
 
480
- Returns the curated preset catalog for the `voice` field of `make_ugc`
481
- (`inputSchema: {}` — it takes no arguments). Costs nothing and creates no run.
519
+ Each entry carries `name`, `kind` (`preset` or `catalog`), `language`,
520
+ `description`, `model` (its default speech model) and `supported_models`. A
521
+ catalog voice also carries `verified_models` and whichever of `locale`,
522
+ `accent`, `gender`, `age` and `use_case` the catalog has. The tool returns
523
+ `{ "voices": [...] }` only. REST `GET /v1/voices` also returns `models`, and the
524
+ script limit of each model is in `tools/list`.
482
525
 
483
526
  There is still a network call: the tool hits OUR `/v1/voices` and needs a working
484
- `CLIPWRIGHT_API_KEY`, like the other three. Nobody calls the vendor — the presets
485
- live in `packages/core/src/voices.ts` and the samples in our own bucket, so this
486
- surface needs no vendor key.
527
+ `CLIPWRIGHT_API_KEY`, like the other three. Nobody calls the vendor — the list
528
+ lives in `@clipwright/core` and the samples in our own bucket, so this surface
529
+ needs no vendor key.
487
530
 
488
- Call it before `make_ugc` when the user asks for "a different voice": a preset
489
- name is preferable to a raw `voice_id`, because a preset survives a change of
531
+ Call it before `make_ugc` when the user asks for "a different voice": a voice
532
+ name is preferable to a raw `voice_id`, because a name survives a change of
490
533
  vendor and an identifier does not.
491
534
 
492
- **Let the user HEAR the voice before paying for it.** Every entry carries
493
- `preview_url`: a short sample spoken by that voice with that voice's own model,
494
- so it matches what the render will sound like. Descriptions convey neither
535
+ **Let the user HEAR the voice before paying for it.** Every voice with a recorded
536
+ sample carries `preview_url`: a short clip spoken by that voice with its own
537
+ model, so it matches what the render will sound like. A catalog voice speaks its
538
+ sample in its native language. Descriptions convey neither
495
539
  diction nor accent nor pace; the owner caught a voice-face mismatch by ear, on a
496
540
  finished clip. Offer the sample whenever the user asks for a different voice.
497
541
 
package/dist/server.js CHANGED
@@ -8,7 +8,7 @@ import { z } from "zod";
8
8
  // `rejected` не должны предлагаться вызывателю, которого мы за их использование
9
9
  // накажем четырёхсотым (блокер B4). Множество выводится из реестра диспозиций,
10
10
  // поэтому смена решения по полю переносит его между поверхностями одной строкой.
11
- import { offeredUgcInputShape, SCRIPT_LENGTH_DESCRIPTION, agentRetryShape, runId, MAKE_UGC_DESCRIPTION, MAKE_UGC_AGENT_PROTOCOL, UPLOAD_IMAGE_DESCRIPTION, UPLOAD_MAX_BYTES, sniffUploadMediaType, } from "@clipwright/core";
11
+ import { offeredUgcInputShape, CATALOG_LANGUAGES, SCRIPT_LENGTH_DESCRIPTION, voicesQueryShape, agentRetryShape, runId, MAKE_UGC_DESCRIPTION, MAKE_UGC_AGENT_PROTOCOL, UPLOAD_IMAGE_DESCRIPTION, UPLOAD_MAX_BYTES, sniffUploadMediaType, } from "@clipwright/core";
12
12
  import { formatGetRun, withFailureReport } from "./format.js";
13
13
  // Версия — из манифеста: литерал расходился с ним молча, а импорт JSON не проходит `rootDir`.
14
14
  const packageVersion = () => createRequire(import.meta.url)("../package.json").version;
@@ -95,25 +95,26 @@ export function createServer(client) {
95
95
  };
96
96
  }));
97
97
  server.registerTool("list_voices", {
98
- description: "List the curated voice catalog available for make_ugc's `voice` field. Presets are the " +
99
- "RECOMMENDED path: pick one by name (e.g. voice=\"george\"). `voice_id` is an escape hatch for " +
100
- "voices OUTSIDE this catalog, including cloned voices — pass a raw vendor voice id there instead " +
101
- "of `voice`. The current avatar already has a matched default voice; do NOT change it unless the " +
102
- "user explicitly asks for a different one. This catalog is CURATED BY DESIGN, not the vendor's " +
103
- "full voice list: the paid vendor's full catalog is intentionally not proxied here, so its API " +
104
- "key does not need to leave the worker process. Each voice carries `preview_url` — a short-lived " +
105
- "audio sample spoken by that voice with that model; play it to the user before a paid render " +
106
- "instead of judging a voice by its description. It expires at `preview_expires_at`: call this " +
107
- "tool again for a fresh link, never store it. " + SCRIPT_LENGTH_DESCRIPTION,
108
- inputSchema: {},
109
- }, async () => withFailureReport(async () => {
110
- // Каталог статический (US-513 core), тула лишь ретранслирует /v1/voices —
111
- // без сети к вендору, без ключа вендора на этой поверхности (§5).
112
- const voices = await client.listVoices();
98
+ description: "List the voices for make_ugc's `voice` field: the presets first, then catalog voices in " +
99
+ `${CATALOG_LANGUAGES.length} languages. Filter by \`language\` (the voice's native language; any voice ` +
100
+ "speaks any supported language), `gender`, `age`, `use_case` and `model`; an unknown filter value is " +
101
+ "refused with the allowed values. Pick a voice by `name` (e.g. voice=\"george\"); a name always means " +
102
+ "the same voice. `voice_id` is an escape hatch for a raw vendor voice id that is not listed, such as a " +
103
+ "cloned voice. Without voice or voice_id the default voice follows the actor's gender: sarah for a " +
104
+ "woman, george for a man, taken from actor_id or from actor_gender next to image. With image and no " +
105
+ "actor_gender the voice is george and a warning says so: pass the gender of the person in the photo as " +
106
+ "actor_gender (ask the user only when you cannot tell), or pick a voice here. Keep any voice the user chose. A voice with `preview_url` has a short-lived audio sample " +
107
+ "spoken by that voice with that model; play it to the user before a paid render instead of judging a " +
108
+ "voice by its description. It expires at `preview_expires_at`: call this tool again for a fresh link, " +
109
+ "never store it. A voice without `preview_url` has no sample yet. Free. " + SCRIPT_LENGTH_DESCRIPTION,
110
+ inputSchema: voicesQueryShape,
111
+ }, async (filters) => withFailureReport(async () => {
112
+ // Тула ретранслирует /v1/voices: без сети к вендору и без его ключа на этой поверхности.
113
+ const voices = await client.listVoices(filters);
113
114
  return { content: [{ type: "text", text: JSON.stringify({ voices }) }] };
114
115
  }));
115
116
  server.registerTool("list_actors", {
116
- description: "List saved Clipwright actors with stable IDs, gender, age and verified image formats. Choose actor_id for quote_ugc and make_ugc. Preview URLs expire; actor IDs remain reusable. Do not combine actor_id with image or person.",
117
+ description: "List saved Clipwright actors with stable IDs, gender, age and verified image formats. Choose actor_id for quote_ugc and make_ugc. Preview URLs expire; actor IDs remain reusable. Do not combine actor_id with image, person or actor_gender. Without voice, the actor speaks the default voice of their gender.",
117
118
  inputSchema: {},
118
119
  }, async () => withFailureReport(async () => ({
119
120
  content: [{ type: "text", text: JSON.stringify({ actors: await client.listActors() }) }],
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,oFAAoF;AACpF,4EAA4E;AAC5E,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,iFAAiF;AACjF,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,eAAe,EACf,KAAK,EACL,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE9D,8FAA8F;AAC9F,MAAM,cAAc,GAAG,GAAW,EAAE,CACjC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAyB,CAAC,OAAO,CAAC;AAErF;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,MAAwB;IACnD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;IAEhF,iFAAiF;IACjF,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,WAAW,EAAE,GAAG,oBAAoB,IAAI,uBAAuB,EAAE;QACjE,4EAA4E;QAC5E,wEAAwE;QACxE,2EAA2E;QAC3E,+DAA+D;QAC/D,gDAAgD;QAChD,WAAW,EAAE,EAAE,GAAG,oBAAoB,EAAE,GAAG,eAAe,EAAE;KAC7D,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,iBAAiB,CAAC,KAAK,IAAI,EAAE;QAC3B,6EAA6E;QAC7E,8EAA8E;QAC9E,2EAA2E;QAC3E,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;QACnC,kFAAkF;QAClF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACtD,2EAA2E;QAC3E,qEAAqE;QACrE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,WAAW,EACT,6FAA6F;YAC7F,+FAA+F;YAC/F,mGAAmG;QACrG,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;KAC/B,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CACnB,iBAAiB,CAAC,KAAK,IAAI,EAAE;QAC3B,yEAAyE;QACzE,wEAAwE;QACxE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,WAAW,EACX;QACE,WAAW,EACT,wEAAwE;YACxE,qEAAqE;QACvE,4EAA4E;QAC5E,+EAA+E;QAC/E,sGAAsG;QACtG,WAAW,EAAE,oBAAoB;KAClC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,iBAAiB,CAAC,KAAK,IAAI,EAAE;QAC3B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACtE,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EAAE,wBAAwB;QACrC,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qDAAqD,CAAC;SACxF;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,iBAAiB,CAAC,KAAK,IAAI,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,SAAS,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,GAAG,gBAAgB,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,IAAI;gBAChB,CAAC,CAAC,GAAG,IAAI,qEAAqE;gBAC9E,CAAC,CAAC,GAAG,IAAI,OAAO,KAAK,CAAC,UAAU,0BAA0B,gBAAgB,EAAE,CAC/E,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC1D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,GAAG,MAAM;wBACT,WAAW,EACT,mFAAmF;4BACnF,2BAA2B,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,wBAAwB;4BAChF,GAAG,MAAM,CAAC,UAAU,6BAA6B;qBACpD,CAAC;iBACH;aACF;YACD,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC,CAAC,CACL,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,WAAW,EACT,yFAAyF;YACzF,gGAAgG;YAChG,kGAAkG;YAClG,kGAAkG;YAClG,gGAAgG;YAChG,gGAAgG;YAChG,kGAAkG;YAClG,8FAA8F;YAC9F,+FAA+F;YAC/F,+CAA+C,GAAG,yBAAyB;QAC7E,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE,CACT,iBAAiB,CAAC,KAAK,IAAI,EAAE;QAC3B,0EAA0E;QAC1E,kEAAkE;QAClE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3E,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;QACjC,WAAW,EAAE,iOAAiO;QAC9O,WAAW,EAAE,EAAE;KAChB,EAAE,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC;KACzF,CAAC,CAAC,CAAC,CAAC;IAEL,yFAAyF;IACzF,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;QACjC,WAAW,EACT,4FAA4F;YAC5F,yFAAyF;YACzF,4FAA4F;YAC5F,4FAA4F;YAC5F,gGAAgG;QAClG,WAAW,EAAE,EAAE;KAChB,EAAE,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;KAC7E,CAAC,CAAC,CAAC,CAAC;IAEL,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clipwright/mcp-server",
3
- "version": "0.13.0",
3
+ "version": "0.15.0",
4
4
  "description": "MCP server for Clipwright: generate UGC videos from your coding agent",
5
5
  "keywords": [
6
6
  "mcp",
@@ -29,8 +29,8 @@
29
29
  "dependencies": {
30
30
  "@modelcontextprotocol/sdk": "^1.29.0",
31
31
  "zod": "^4.4.3",
32
- "@clipwright/core": "0.13.0",
33
- "@clipwright/sdk": "0.13.0"
32
+ "@clipwright/core": "0.15.0",
33
+ "@clipwright/sdk": "0.15.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "^26.1.1"