@clipwright/mcp-server 0.11.0 → 0.12.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 ADDED
@@ -0,0 +1,335 @@
1
+ # Changelog
2
+
3
+ The four client packages — `@clipwright/core`, `@clipwright/sdk`,
4
+ `@clipwright/cli` and `@clipwright/mcp-server` — are released together and always
5
+ share one version, so each section below covers all four. The format follows
6
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). The HTTP API reports its
7
+ contract version in the `X-Clipwright-Contract` response header and in the
8
+ `contract_version` field of a quote. Entries marked **Breaking:** require a change
9
+ on the client side. Entries marked *Server-side* changed the API itself: every
10
+ client version sees them from the day the API was deployed, not from the package
11
+ release they are listed under.
12
+
13
+ ## [0.12.0] - 2026-09-13
14
+
15
+ ### Changed
16
+
17
+ - **Breaking:** *Server-side:* quote and run refuse a key that is not part of
18
+ the contract with 400 `unknown_field`, before any charge. Such keys were
19
+ dropped silently before, so a misspelled field fell back to its default:
20
+ `aspectRatio: "16:9"` rendered 9:16 without a warning. `fields` names each
21
+ unknown key, and the message suggests the matching field (`aspect_ratio`).
22
+ Fix the key name. The contract version moved to `2026-09-13`.
23
+ (clipwright#166)
24
+ - *Server-side:* the duration estimate for a Cyrillic script uses 2.3 words a
25
+ second instead of 2.6, measured on `eleven_v3`. A Russian script now
26
+ quotes and reserves about 13% more credits, closer to what the run is
27
+ charged. Other scripts keep 2.6. (clipwright#164)
28
+ - A stress mark (U+0301) at the start of a word is no longer counted as its
29
+ first letter, so a capital right after the mark stays a capital. A capital
30
+ vowel later in the same word still marks stress. (clipwright#164)
31
+ - Each package ships this changelog as `CHANGELOG.md`. (clipwright#102)
32
+
33
+ ### Added
34
+
35
+ - Quote returns `tts_model`, the speech model the run will use.
36
+ (clipwright#164)
37
+ - `@clipwright/core` exports `unknownFields`, `unknownFieldError`,
38
+ `unknownFieldBody` and `ACCEPTED_UGC_FIELDS`, and `unknown_field` is part of
39
+ `API_ERROR_CODES`. (clipwright#166)
40
+
41
+ ### Fixed
42
+
43
+ - *Server-side:* a body with an empty key name gets 400 `unknown_field`
44
+ instead of 500 `internal_error`. (clipwright#167)
45
+
46
+ ## [0.11.0] - 2026-09-13
47
+
48
+ ### Removed
49
+
50
+ - **Breaking:** `eleven_multilingual_v2` is no longer a valid `tts_model`. Quote
51
+ and run refuse it with 400 before any charge. Pass `eleven_v3`,
52
+ `eleven_flash_v2_5` or `eleven_turbo_v2_5`, or omit the field. Runs stored with
53
+ the old value still read. (clipwright#145)
54
+
55
+ ### Changed
56
+
57
+ - **Breaking:** every voice preset and a raw `voice_id` now speak on `eleven_v3`.
58
+ Before, four of five presets and a raw `voice_id` used `eleven_multilingual_v2`,
59
+ with a 10,000-character script ceiling. The default ceiling is now 5,000
60
+ characters. A script of 5,001–10,000 characters that passed before is refused;
61
+ send it with `tts_model: "eleven_flash_v2_5"` or `"eleven_turbo_v2_5"` (10,000
62
+ each). The refusal names these models when the script fits them. The voices
63
+ sound different, and the samples from `list_voices` were re-recorded.
64
+ (clipwright#145)
65
+ - **Breaking:** on `eleven_v3`, a single capital vowel after the first letter of a
66
+ Cyrillic word marks stress: `потОм` is sent as `пото́м` (lowercase vowel plus
67
+ U+0301). A script that used such a capital for another reason is now spoken
68
+ differently; write that word in lowercase. A capital at the start of a word, a
69
+ word in capitals, and a word with a second capital stay as written. Stress marks
70
+ count toward the character limit. (clipwright#145)
71
+ - The contract version moved from `2026-08` to `2026-09`. (clipwright#145)
72
+
73
+ ### Added
74
+
75
+ - `tts_model` accepts `eleven_flash_v2_5` and `eleven_turbo_v2_5`, 10,000
76
+ characters each. (clipwright#145)
77
+ - *Server-side:* quote and run return a warning when a script with stress marks or
78
+ in Cyrillic goes to a 2.5 model. The default path stays silent. (clipwright#145)
79
+ - `@clipwright/core` exports the stress helpers (`STRESS_MARK`,
80
+ `stressMarksFromCapitals`, `speechTextFor`) and the run preflight schema
81
+ (`runPreflight`, `parseRunPreflight`). (clipwright#145, clipwright#146)
82
+
83
+ ### Fixed
84
+
85
+ - *Server-side:* for a body with `image`, the 202 response of a run and the quote
86
+ now return the same `warnings[]`. Warnings that depend on a network probe no
87
+ longer disappear when a run fails. (clipwright#146)
88
+
89
+ ## [0.10.0] - 2026-09-11
90
+
91
+ ### Added
92
+
93
+ - MCP tool `get_account`, SDK `getAccount()` and CLI `clipwright account`. All
94
+ three read `GET /v1/account` (balance, debt, holds, grants) and spend nothing.
95
+ (clipwright#135)
96
+ - *Server-side:* quote adds a warning when a run with the same input would be
97
+ refused with `account_not_admitted`, `debt_outstanding` or
98
+ `insufficient_credits`. The warning carries the same numbers as the refusal.
99
+ (clipwright#134)
100
+ - `@clipwright/core` exports `API_ENDPOINTS`, `QUICKSTART_ENDPOINTS`,
101
+ `endpointLabel` and `NODE_MIN_MAJOR` (the Node.js major the clients require).
102
+ (clipwright#135, clipwright#129)
103
+
104
+ ### Fixed
105
+
106
+ - *Server-side:* the `error` of a failed run in `GET /v1/runs/{id}` no longer
107
+ contains stack frames or internal file paths. (clipwright#133)
108
+ - *Server-side:* when our wait for the avatar vendor times out, the run is charged
109
+ nothing, and its warning says what happened. (clipwright#150)
110
+
111
+ ## [0.9.0] - 2026-09-09
112
+
113
+ ### Added
114
+
115
+ - Each voice in `GET /v1/voices`, `list_voices` and `listVoices()` carries
116
+ `preview_url` and `preview_expires_at`: a signed link to a sample recorded with
117
+ that voice and its model. The link is valid for one hour. A voice without a
118
+ sample has neither field. A 0.8.0 client drops both fields. (clipwright#147)
119
+ - CLI `clipwright voices` prints the sample link on its own line. (clipwright#147)
120
+
121
+ ## [0.8.0] - 2026-09-09
122
+
123
+ ### Added
124
+
125
+ - Actor library: `GET /v1/actors`, MCP tool `list_actors`, SDK `listActors()` and
126
+ CLI `clipwright actors`. Each actor has a stable `actor_id`, a name, a gender,
127
+ an approximate age, a version and verified image variants. (clipwright#120)
128
+ - `actor_id` input on quote and run, and CLI `--actor-id` on `make` and `quote`.
129
+ Do not combine it with `image` or `person`. (clipwright#120)
130
+ - Quote and run responses carry `actor`: the selected `actor_id`, `version` and
131
+ `gender`; `{gender}` for the default actor; `null` when you pass your own
132
+ `image`. (clipwright#64, clipwright#120)
133
+
134
+ ## [0.7.0] - 2026-09-09
135
+
136
+ ### Removed
137
+
138
+ - **Breaking:** `daily_remaining_credits` is gone from `GET /v1/account` and from
139
+ the `account` schema in `@clipwright/core`. The per-account daily spend cap it
140
+ reported was removed. A client that read the field now gets `undefined`; read
141
+ `balance_credits`, and `debt_credits` for a block. The contract version was not
142
+ moved for this change: it stayed `2026-08` until 0.11.0, so the header gave no
143
+ signal. (clipwright#139)
144
+ - **Breaking:** `@clipwright/core` no longer exports `MAX_SCRIPT_WORDS` or
145
+ `SCRIPT_SECONDS_BASIS`. Code that imports them fails; use `TTS_MODEL_CHAR_CAP`
146
+ or `MAX_SCRIPT_CHARS`. (clipwright#128)
147
+ - *Server-side:* the refusal `daily_cap_exceeded` is no longer produced. Runs
148
+ refused before keep it in their history. (clipwright#139)
149
+ - *Server-side:* the refusal `global_cap_exceeded` is no longer produced. The
150
+ service-wide daily spend cap became an internal alert. (clipwright#141)
151
+
152
+ ### Changed
153
+
154
+ - The 180-word script ceiling is replaced by a character limit per speech model:
155
+ `eleven_v3` 5,000, `eleven_multilingual_v2` 10,000. Length is counted as
156
+ JavaScript `.length`, spaces and audio tags included; an emoji may count as two.
157
+ Longer scripts than before are accepted. The refusal text changed from
158
+ `script is ~N words; ceiling is 180 words` to
159
+ `script has N characters; <model> allows at most N characters`; update code
160
+ that matches on it. (clipwright#128)
161
+ - **Breaking:** *Server-side:* quote and run refuse a script whose text contains
162
+ U+FFFD with 400 `script_encoding_lost`, before any charge. Such a script was
163
+ accepted before and billed for about a second of speech. The bytes were lost
164
+ before the request left the client: send the script as valid UTF-8.
165
+ (clipwright#131)
166
+ - *Server-side:* a run whose speech is impossibly short for its script fails with
167
+ `speech_too_short_for_script` and is charged nothing, instead of succeeding.
168
+ Retrying rarely helps. (clipwright#131)
169
+ - *Server-side:* a new sign-up gets an admitted account with zero credits, so it
170
+ is no longer refused with `account_not_admitted` until the owner admits it.
171
+ (clipwright#112)
172
+
173
+ ## [0.6.0] - 2026-09-06
174
+
175
+ ### Added
176
+
177
+ - `@clipwright/cli` installs a second binary, `clipwright-cli`, next to
178
+ `clipwright`. An unrelated npm package also ships a `clipwright` binary; the
179
+ second name avoids that collision. `core`, `sdk` and `mcp-server` have no
180
+ changes in this release and moved to keep one version. (clipwright#105)
181
+
182
+ ## [0.5.0] - 2026-09-06
183
+
184
+ ### Added
185
+
186
+ - `POST /v1/uploads` takes a local PNG or JPEG of up to 10 MB and returns
187
+ `upload_id`, `url`, `media_type`, `bytes`, `width`, `height` and `expires_at`.
188
+ Pass the https `url` as `image`. The url is valid for 24 hours and the object is
189
+ kept for 7 days. An account may upload 20 images a day. New refusal codes:
190
+ `invalid_image`, `unsupported_media_type`, `upload_cap_exceeded`.
191
+ (clipwright#99)
192
+ - MCP tool `upload_image`, SDK `uploadImage()`, CLI `clipwright upload <path>`, and
193
+ `--image`, `--image-file`, `--aspect-ratio`, `--resolution` on CLI `make` and
194
+ `quote`. (clipwright#99)
195
+ - `tts_model` input (`eleven_v3` or `eleven_multilingual_v2`) and CLI
196
+ `--tts-model`. Without it the preset's model is used. Each voice in the catalog
197
+ names its `model`. A script over the model's character limit (v3 5,000, v2
198
+ 10,000) is refused before any charge, in addition to the 180-word ceiling.
199
+ (clipwright#101)
200
+ - MCP `tools/list` describes `image`, `aspect_ratio`, `resolution`, `voice` and
201
+ `voice_id`; the descriptions were empty before. (clipwright#99)
202
+
203
+ ### Changed
204
+
205
+ - *Server-side:* the `owner_ru_clone` preset speaks on `eleven_v3`. All presets
206
+ used `eleven_multilingual_v2` before. (clipwright#101)
207
+
208
+ ## [0.4.0] - 2026-08-28
209
+
210
+ ### Changed
211
+
212
+ - **Breaking:** the default API address in the SDK, CLI and MCP server moved to
213
+ `https://api.clipwright.io`. The old address
214
+ `https://api-production-7e69.up.railway.app` still answers, so older clients
215
+ keep working. If your network allowlists hosts, add `api.clipwright.io`, or pin
216
+ the old address with `CLIPWRIGHT_API_URL` or the SDK `baseUrl` option. (US-613)
217
+
218
+ ## [0.3.0] - 2026-08-28
219
+
220
+ ### Removed
221
+
222
+ - **Breaking:** `@clipwright/core` no longer exports `MAX_SCRIPT_SECONDS`. Code
223
+ that imports it fails; `SCRIPT_SECONDS_BASIS` holds the value (and was removed
224
+ in turn in 0.7.0).
225
+
226
+ ### Changed
227
+
228
+ - **Breaking:** the CLI and the MCP server refuse a `CLIPWRIGHT_API_URL` that is
229
+ not `https`. Loopback addresses may stay `http`. Point the variable at an https
230
+ address. (clipwright#85)
231
+ - **Breaking:** every URL field of the input is limited to 2,048 characters
232
+ (`MAX_URL_LENGTH`). A longer URL is refused with 400. Pass a URL of at most
233
+ 2,048 characters, for example by hosting the file at a shorter address.
234
+ (clipwright#85)
235
+ - **Breaking:** SDK requests now have deadlines. `requestTimeoutMs` (per client,
236
+ default 30 s) bounds every request, and `maxWaitMs` (per `makeUgc` call, default
237
+ 10 min) bounds the whole call, including the request in flight. A call that used
238
+ to hang now rejects. A start request cut off mid-flight throws
239
+ `ClipwrightResponseError` with `mayHaveTakenEffect: true`: check the run before
240
+ retrying with a new idempotency key. Raise `requestTimeoutMs` behind a slow
241
+ proxy.
242
+ - **Breaking:** *Server-side:* a run from an account not admitted to the beta is
243
+ refused with 403 `account_not_admitted` before any charge. Topping up does not
244
+ lift it. The clients parse this refusal from 0.3.0 on. (US-620)
245
+ - The voice catalog is in English, and the SDK validates the `GET /v1/voices`
246
+ response. Each voice has `name`, `language`, `gender` and `description`.
247
+ (clipwright#85)
248
+ - The MCP server checks the shape of `run_id` in `get_run`. (clipwright#85)
249
+ - *Server-side:* the video link in a finished run is signed for 7 days instead of
250
+ 1. (clipwright#22)
251
+ - *Server-side:* a failed run is charged only if the vendor accepted the work that
252
+ produces the clip. A run that paid only for speech is charged nothing.
253
+ (clipwright#46)
254
+ - *Server-side:* credits bought while an account has debt pay the debt first; only
255
+ the rest reaches the balance. (US-611)
256
+
257
+ ### Fixed
258
+
259
+ - *Server-side:* 401 and validation refusals use the declared error body.
260
+ Validation errors return `invalid_request` and list each problem as
261
+ `field: reason`, up to 12. Before, clients reported these bodies as "not a
262
+ Clipwright error object". (US-616)
263
+ - *Server-side:* the 202 response of a run carries its `warnings[]`; it always
264
+ returned an empty list before. (clipwright#64)
265
+
266
+ ## [0.2.0] - 2026-07-29
267
+
268
+ ### Added
269
+
270
+ - `@clipwright/cli` is published for the first time, under MIT. Commands:
271
+ `quote`, `make`, `runs <id>`, `voices`. `make` takes `--script`, `--person`,
272
+ `--captions`, `--voice`, `--voice-id` and `--retry`. (US-622)
273
+ - *Server-side:* `GET /v1/account` returns `account_id`, `balance_credits`,
274
+ `debt_credits`, `holds_credits`, `daily_remaining_credits` and `grants`.
275
+ (US-602)
276
+ - `@clipwright/core` exports the refusal schemas and the retry policy:
277
+ `parseApiFailure`, `isRetryableFailure`, `retryDelayMs`, `agentFailureReport`,
278
+ `apiError`, the 402 and 429 bodies, the rate-limit header names, `account` and
279
+ `creditGrant`. (US-622)
280
+ - *Server-side:* a service-wide daily spend cap; a run past it is refused with
281
+ `global_cap_exceeded`. (US-603)
282
+
283
+ ### Changed
284
+
285
+ - **Breaking:** *Server-side:* a run reserves credits before rendering. Without
286
+ enough balance the API answers 402 `insufficient_credits`; with unpaid debt, 402
287
+ `debt_outstanding`, whatever the balance. Buy credits to lift either. (US-602)
288
+ - **Breaking:** *Server-side:* rate limits per account: 60 requests a minute for
289
+ starting runs, 300 for quote, voices, run status and account. Over the limit
290
+ the API answers 429 `rate_limited` with `Retry-After` and `X-RateLimit-*`
291
+ headers; wait and repeat the same call. At most 3 renders run at once per
292
+ account; a fourth queues and still returns 202. (US-605)
293
+ - **Breaking:** the SDK throws `ClipwrightApiError` or `ClipwrightResponseError`
294
+ (both extend `Error`) instead of a plain `Error`, and reads the status before
295
+ the body. Code that parsed the message text should read the error's status and
296
+ code instead. `makeUgc` now waits out 429 and 5xx while polling; money refusals
297
+ and other 4xx still throw at once. `attempt` must be a positive safe integer and
298
+ is checked before any request. (US-622)
299
+ - **Breaking:** MCP tools return a refusal as a JSON report inside the text block,
300
+ with `isError: true`, instead of one sentence. Agents should branch on its
301
+ `retryable` field, not on prose. (US-622)
302
+ - The MCP server starts when `~/.clipwright` is read-only; only `make_ugc`
303
+ refuses, naming the variable that fixes it. (US-622)
304
+ - `SKILL.md` inside `@clipwright/mcp-server` is in English. (US-622)
305
+ - *Server-side:* idempotency keys are scoped to the account, so two accounts can
306
+ use the same key. (US-604)
307
+
308
+ ## [0.1.0] - 2026-07-26
309
+
310
+ ### Added
311
+
312
+ - First publication of `@clipwright/core`, `@clipwright/sdk` and
313
+ `@clipwright/mcp-server` under MIT. `@clipwright/cli` was not published.
314
+ - API: quote (`POST /v1/skills/make_ugc/quote`), run
315
+ (`POST /v1/skills/make_ugc/run`, `Idempotency-Key` required), run status
316
+ (`GET /v1/runs/{id}`), voice catalog (`GET /v1/voices`). Requests carry a
317
+ `cw_*` bearer token. (US-205, US-516, US-550)
318
+ - MCP tools `quote_ugc`, `make_ugc`, `get_run`, `list_voices`. `make_ugc` returns
319
+ a `run_id` at once, and the agent polls `get_run`. (US-206, US-512, US-516)
320
+ - SDK `ClipwrightClient` with `quoteUgc`, `startUgc`, `makeUgc`, `getRun` and
321
+ `listVoices`. The idempotency key comes from the input and
322
+ `CLIPWRIGHT_CLIENT_ID`; `attempt` starts a deliberate new run. (US-201, US-202)
323
+ - Input: `script` (up to 180 words), `voice`, `voice_id`, `image`,
324
+ `aspect_ratio` (default 9:16, 16:9 supported), `resolution`, `captions`,
325
+ `disclosure_overlay`. Parameters that are not honoured come back in
326
+ `warnings[]`; `webhook_url` is refused with 400. (US-533, US-535, US-539)
327
+ - Quote returns `credits_estimate`, `duration_estimate_sec`, `warnings`,
328
+ `contract_version`, `source` and `resolved_aspect_ratio`. A source whose aspect
329
+ ratio differs from the request by more than 15% is refused before any charge;
330
+ up to 15% it is snapped with a warning. (US-525)
331
+ - Credits: 30 per second of video, reserved at start and charged on the measured
332
+ duration. *Server-side:* a per-account daily spend cap refuses runs with
333
+ `daily_cap_exceeded`. (US-538, US-537)
334
+ - Contract version `2026-08` in `X-Clipwright-Contract` and `contract_version`.
335
+ (US-533)
package/README.md CHANGED
@@ -27,6 +27,7 @@ Any MCP host works — the server speaks JSON-RPC over stdio.
27
27
  ## Tools
28
28
 
29
29
  - `list_voices` — voice catalog. Free, spends no credits.
30
+ - `list_actors` — ready-made faces with stable ids and verified formats. Free.
30
31
  - `quote_ugc` — estimated duration and price, plus a warning when `make_ugc`
31
32
  with the same input would be refused for money or access. Free.
32
33
  - `get_account` — balance, debt and holds of the account. Free.
@@ -44,4 +45,5 @@ rejected up front instead of being accepted and ignored.
44
45
  Bumping the `attempt` field starts a **new paid render**. It is the way to retry
45
46
  a failed run on purpose, not a free refresh.
46
47
 
47
- `SKILL.md` ships inside the package with the full operating instructions.
48
+ `SKILL.md` ships inside the package with the full operating instructions, and
49
+ `CHANGELOG.md` next to it says what changed in each release and what was removed.
package/SKILL.md CHANGED
@@ -9,6 +9,10 @@ The package `@clipwright/mcp-server` (`bin: clipwright-mcp`) is published to npm
9
9
  under the MIT license, so you do NOT need the repository to install it — `npx` is
10
10
  enough. Building from source is kept below as the development path.
11
11
 
12
+ What changed in each version — above all what was removed or changed
13
+ incompatibly — is in `CHANGELOG.md`, shipped next to this file. Read its
14
+ **Breaking:** entries before you move to a newer version.
15
+
12
16
  Four client-side packages — `@clipwright/core`, `@clipwright/sdk`,
13
17
  `@clipwright/mcp-server` and `@clipwright/cli` — are MIT; the service itself
14
18
  (REST API, render pipeline, dashboard) is closed. That split is deliberate, not
@@ -268,6 +272,7 @@ is spent:
268
272
  | `source` | dimensions of the selected actor variant, a probed `image`, or the default actor (432×768) |
269
273
  | `actor` | selected `actor_id`, `version` and `gender`; default `{gender}` when no face is selected; `null` for caller-supplied `image` |
270
274
  | `resolved_aspect_ratio` | the aspect ratio that will ACTUALLY be rendered for this input |
275
+ | `tts_model` | the speech model this run will use; the script's character ceiling depends on it |
271
276
  | `warnings[]` | which of the parameters you passed will not be honoured |
272
277
  | `contract_version` | which contract version this price was quoted under |
273
278
 
@@ -276,6 +281,12 @@ construction** — both surfaces call the same function. If quote returns 400, t
276
281
  run returns the same 400; if quote showed `resolved_aspect_ratio: "9:16"` for a
277
282
  requested `1:1`, then 9:16 is what gets rendered.
278
283
 
284
+ **Unknown fields are refused, not ignored.** A key the contract does not have —
285
+ `aspectRatio`, `aspect`, `ttsModel` — gets 400 `unknown_field` before any charge.
286
+ `fields` names each key, and the message suggests the matching field
287
+ (`aspect_ratio`). Until clipwright#166 such keys were dropped silently, so a
288
+ misspelled `aspect_ratio` rendered the default 9:16.
289
+
279
290
  **Rejected fields — do not try to pass them.** They are not declared in the tool
280
291
  schema, and the server answers 400 `rejected_field` before a run is even created:
281
292
 
@@ -550,7 +561,7 @@ So:
550
561
  change the text or the voice instead;
551
562
  - **bump `attempt` only for a refusal that looks temporary** (vendor timeout, 5xx,
552
563
  a dropped connection);
553
- - **no daily cap stands between you and your credits (0.8.0).** Not on your
564
+ - **no daily cap stands between you and your credits (0.7.0).** Not on your
554
565
  account, and not on the service either: `global_cap_exceeded` is no longer
555
566
  produced. What still stops a run before any paid call is your own balance, an
556
567
  unpaid debt, and our killswitch.
@@ -740,7 +751,7 @@ Before you start, make sure of two different things.
740
751
 
741
752
  Tell two classes of failure apart, because they are fixed differently:
742
753
 
743
- - **`rejected_field`, `aspect_conflict`** — a contract doing its job, not a
754
+ - **`rejected_field`, `unknown_field`, `aspect_conflict`** — a contract doing its job, not a
744
755
  defect. Read the error text: it names both the reason and the replacement;
745
756
  - **everything else** (timeout, 5xx, empty response, tool not found) — a candidate
746
757
  for a real defect. Here, run the same two curl commands from section 6: if curl
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clipwright/mcp-server",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "MCP server for Clipwright: generate UGC videos from your coding agent",
5
5
  "keywords": [
6
6
  "mcp",
@@ -17,7 +17,8 @@
17
17
  },
18
18
  "files": [
19
19
  "dist",
20
- "SKILL.md"
20
+ "SKILL.md",
21
+ "CHANGELOG.md"
21
22
  ],
22
23
  "engines": {
23
24
  "node": ">=20"
@@ -28,8 +29,8 @@
28
29
  "dependencies": {
29
30
  "@modelcontextprotocol/sdk": "^1.29.0",
30
31
  "zod": "^4.4.3",
31
- "@clipwright/core": "0.11.0",
32
- "@clipwright/sdk": "0.11.0"
32
+ "@clipwright/core": "0.12.0",
33
+ "@clipwright/sdk": "0.12.0"
33
34
  },
34
35
  "devDependencies": {
35
36
  "@types/node": "^26.1.1"