@runapi.ai/seedance-mcp 0.1.4 → 0.1.6

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/README.md CHANGED
@@ -13,7 +13,7 @@
13
13
  <a href="https://github.com/runapi-ai/seedance-mcp"><img src="https://img.shields.io/badge/GitHub-runapi--ai%2Fseedance--mcp-24292f?style=flat-square" alt="GitHub repository"></a>
14
14
  <a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache_2.0-blue?style=flat-square" alt="Apache-2.0 license"></a>
15
15
  <img src="https://img.shields.io/badge/Type-MCP_Server-blue?style=flat-square" alt="MCP Server">
16
- <img src="https://img.shields.io/badge/Models-6-16a34a?style=flat-square" alt="6 models">
16
+ <img src="https://img.shields.io/badge/Models-7-16a34a?style=flat-square" alt="7 models">
17
17
  </p>
18
18
 
19
19
  <p align="center">
@@ -30,7 +30,7 @@
30
30
  ## Why This Package?
31
31
 
32
32
  `@runapi.ai/seedance-mcp` is a focused Model Context Protocol server for the **Seedance** model line on RunAPI.
33
- It gives MCP-compatible assistants direct access to 1 endpoint and 6 model variants without loading the full RunAPI catalog.
33
+ It gives MCP-compatible assistants direct access to 1 endpoint and 7 model variants without loading the full RunAPI catalog.
34
34
 
35
35
  Use this per-model server when an agent should stay scoped to Seedance. Use [`@runapi.ai/mcp`](https://github.com/runapi-ai/mcp) when one assistant should discover every RunAPI model line.
36
36
 
@@ -57,14 +57,14 @@ Codex, Cursor, Windsurf, VS Code, Roo Code, and other MCP hosts can use the same
57
57
  "mcpServers": {
58
58
  "seedance": {
59
59
  "command": "npx",
60
- "args": ["-y", "@runapi.ai/seedance-mcp"],
61
- "env": { "RUNAPI_API_KEY": "${RUNAPI_API_KEY}" }
60
+ "args": ["-y", "@runapi.ai/seedance-mcp"]
62
61
  }
63
62
  }
64
63
  }
65
64
  ```
66
65
 
67
- Create an API key at [runapi.ai](https://runapi.ai) and expose it as `RUNAPI_API_KEY`. `check_pricing` can run without a key; task creation and status polling require one.
66
+ `check_pricing` works before sign-in. For task creation and status polling, ask your assistant to call the `login` tool. It opens a browser login and saves credentials to `~/.config/runapi/config.json`, the same file used by `runapi login`.
67
+ Headless and CI hosts can still set `RUNAPI_API_KEY` before starting the MCP host.
68
68
 
69
69
  Ready-made examples are in [`examples/`](examples/) for Claude, Cursor, Windsurf, VS Code, and Roo Code.
70
70
 
@@ -82,11 +82,11 @@ Ready-made examples are in [`examples/`](examples/) for Claude, Cursor, Windsurf
82
82
 
83
83
  ## Models
84
84
 
85
- Seedance covers 6 model variants across 1 endpoint. Each tool accepts the models listed for it:
85
+ Seedance covers 7 model variants across 1 endpoint. Each tool accepts the models listed for it:
86
86
 
87
87
  | Tool | Models |
88
88
  |---|---|
89
- | `text_to_video` | `seedance-1.5-pro`, `seedance-2.0`, `seedance-2.0-fast`, `seedance-v1-lite`, `seedance-v1-pro`, `seedance-v1-pro-fast` |
89
+ | `text_to_video` | `seedance-1.5-pro`, `seedance-2-mini`, `seedance-2.0`, `seedance-2.0-fast`, `seedance-v1-lite`, `seedance-v1-pro`, `seedance-v1-pro-fast` |
90
90
 
91
91
  Model availability can change between releases. Use `check_pricing` or the [Seedance model page](https://runapi.ai/models/seedance) for the current catalog view.
92
92
 
@@ -124,12 +124,13 @@ The assistant calls `check_pricing` and can link to the [Seedance model page](ht
124
124
 
125
125
  ## Configuration
126
126
 
127
- The server reads the API key in this order:
127
+ The server resolves auth in this order:
128
128
 
129
- 1. `RUNAPI_API_KEY` environment variable
130
- 2. `~/.config/runapi/config.json`
129
+ 1. `RUNAPI_API_KEY` environment variable, useful for headless and CI hosts
130
+ 2. `~/.config/runapi/config.json`, created by the MCP `login` tool or `runapi login`
131
+ 3. No key, which still allows `check_pricing`
131
132
 
132
- Example config file:
133
+ The config file is normally managed by login. A pre-provisioned headless config can use:
133
134
 
134
135
  ```json
135
136
  {
@@ -137,7 +138,7 @@ Example config file:
137
138
  }
138
139
  ```
139
140
 
140
- Do not commit real API keys. Get one at [runapi.ai](https://runapi.ai).
141
+ Do not commit real API keys.
141
142
 
142
143
  ---
143
144
 
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "catalog_models": [
3
3
  "seedance-1.5-pro",
4
+ "seedance-2-mini",
4
5
  "seedance-2.0",
5
6
  "seedance-2.0-fast",
6
7
  "seedance-v1-lite",
@@ -13,6 +14,7 @@
13
14
  "endpoint": "text_to_video",
14
15
  "models": [
15
16
  "seedance-1.5-pro",
17
+ "seedance-2-mini",
16
18
  "seedance-2.0",
17
19
  "seedance-2.0-fast",
18
20
  "seedance-v1-lite",
@@ -21,7 +23,17 @@
21
23
  ],
22
24
  "fields_by_model": {
23
25
  "seedance-1.5-pro": {
26
+ "prompt": {
27
+ "type": "string"
28
+ },
29
+ "model": {
30
+ "type": "string"
31
+ },
32
+ "callback_url": {
33
+ "type": "string"
34
+ },
24
35
  "aspect_ratio": {
36
+ "type": "string",
25
37
  "enum": [
26
38
  "1:1",
27
39
  "4:3",
@@ -31,23 +43,101 @@
31
43
  "21:9"
32
44
  ]
33
45
  },
46
+ "output_resolution": {
47
+ "type": "string",
48
+ "enum": [
49
+ "480p",
50
+ "720p",
51
+ "1080p"
52
+ ]
53
+ },
34
54
  "duration_seconds": {
55
+ "type": "integer",
35
56
  "max": 12,
36
57
  "min": 4,
37
- "type": "integer",
38
58
  "required": true
39
59
  },
60
+ "generate_audio": {
61
+ "type": "boolean"
62
+ },
63
+ "enable_safety_checker": {
64
+ "type": "boolean"
65
+ },
66
+ "source_image_urls": {
67
+ "type": "array"
68
+ },
69
+ "lock_camera": {
70
+ "type": "boolean"
71
+ }
72
+ },
73
+ "seedance-2-mini": {
74
+ "prompt": {
75
+ "type": "string"
76
+ },
77
+ "model": {
78
+ "type": "string"
79
+ },
80
+ "callback_url": {
81
+ "type": "string"
82
+ },
83
+ "aspect_ratio": {
84
+ "type": "string",
85
+ "enum": [
86
+ "1:1",
87
+ "4:3",
88
+ "3:4",
89
+ "16:9",
90
+ "9:16",
91
+ "21:9",
92
+ "auto"
93
+ ]
94
+ },
40
95
  "output_resolution": {
96
+ "type": "string",
41
97
  "enum": [
42
98
  "480p",
43
- "720p",
44
- "1080p"
99
+ "720p"
45
100
  ]
46
101
  },
47
- "source_image_urls": {}
102
+ "duration_seconds": {
103
+ "type": "integer",
104
+ "max": 15,
105
+ "min": 4
106
+ },
107
+ "generate_audio": {
108
+ "type": "boolean"
109
+ },
110
+ "first_frame_image_url": {
111
+ "type": "string"
112
+ },
113
+ "last_frame_image_url": {
114
+ "type": "string"
115
+ },
116
+ "reference_image_urls": {
117
+ "type": "array"
118
+ },
119
+ "reference_video_urls": {
120
+ "type": "array"
121
+ },
122
+ "reference_audio_urls": {
123
+ "type": "array"
124
+ },
125
+ "web_search": {
126
+ "type": "boolean"
127
+ }
48
128
  },
49
129
  "seedance-2.0": {
130
+ "prompt": {
131
+ "type": "string"
132
+ },
133
+ "model": {
134
+ "type": "string"
135
+ },
136
+ "callback_url": {
137
+ "type": "string"
138
+ },
50
139
  "aspect_ratio": {
140
+ "type": "string",
51
141
  "enum": [
52
142
  "1:1",
53
143
  "4:3",
@@ -58,26 +148,56 @@
58
148
  "auto"
59
149
  ]
60
150
  },
61
- "duration_seconds": {
62
- "max": 15,
63
- "min": 4,
64
- "type": "integer"
65
- },
66
151
  "output_resolution": {
152
+ "type": "string",
67
153
  "enum": [
68
154
  "480p",
69
155
  "720p",
70
156
  "1080p"
71
157
  ]
72
158
  },
73
- "last_frame_image_url": {},
74
- "reference_audio_urls": {},
75
- "reference_image_urls": {},
76
- "reference_video_urls": {},
77
- "first_frame_image_url": {}
159
+ "duration_seconds": {
160
+ "type": "integer",
161
+ "max": 15,
162
+ "min": 4
163
+ },
164
+ "generate_audio": {
165
+ "type": "boolean"
166
+ },
167
+ "enable_safety_checker": {
168
+ "type": "boolean"
169
+ },
170
+ "first_frame_image_url": {
171
+ "type": "string"
172
+ },
173
+ "last_frame_image_url": {
174
+ "type": "string"
175
+ },
176
+ "reference_image_urls": {
177
+ "type": "array"
178
+ },
179
+ "reference_video_urls": {
180
+ "type": "array"
181
+ },
182
+ "reference_audio_urls": {
183
+ "type": "array"
184
+ },
185
+ "web_search": {
186
+ "type": "boolean"
187
+ }
78
188
  },
79
189
  "seedance-2.0-fast": {
190
+ "prompt": {
191
+ "type": "string"
192
+ },
193
+ "model": {
194
+ "type": "string"
195
+ },
196
+ "callback_url": {
197
+ "type": "string"
198
+ },
80
199
  "aspect_ratio": {
200
+ "type": "string",
81
201
  "enum": [
82
202
  "1:1",
83
203
  "4:3",
@@ -88,25 +208,55 @@
88
208
  "auto"
89
209
  ]
90
210
  },
91
- "duration_seconds": {
92
- "max": 15,
93
- "min": 4,
94
- "type": "integer"
95
- },
96
211
  "output_resolution": {
212
+ "type": "string",
97
213
  "enum": [
98
214
  "480p",
99
215
  "720p"
100
216
  ]
101
217
  },
102
- "last_frame_image_url": {},
103
- "reference_audio_urls": {},
104
- "reference_image_urls": {},
105
- "reference_video_urls": {},
106
- "first_frame_image_url": {}
218
+ "duration_seconds": {
219
+ "type": "integer",
220
+ "max": 15,
221
+ "min": 4
222
+ },
223
+ "generate_audio": {
224
+ "type": "boolean"
225
+ },
226
+ "enable_safety_checker": {
227
+ "type": "boolean"
228
+ },
229
+ "first_frame_image_url": {
230
+ "type": "string"
231
+ },
232
+ "last_frame_image_url": {
233
+ "type": "string"
234
+ },
235
+ "reference_image_urls": {
236
+ "type": "array"
237
+ },
238
+ "reference_video_urls": {
239
+ "type": "array"
240
+ },
241
+ "reference_audio_urls": {
242
+ "type": "array"
243
+ },
244
+ "web_search": {
245
+ "type": "boolean"
246
+ }
107
247
  },
108
248
  "seedance-v1-lite": {
249
+ "prompt": {
250
+ "type": "string"
251
+ },
252
+ "model": {
253
+ "type": "string"
254
+ },
255
+ "callback_url": {
256
+ "type": "string"
257
+ },
109
258
  "aspect_ratio": {
259
+ "type": "string",
110
260
  "enum": [
111
261
  "1:1",
112
262
  "4:3",
@@ -116,25 +266,50 @@
116
266
  "9:21"
117
267
  ]
118
268
  },
269
+ "output_resolution": {
270
+ "type": "string",
271
+ "enum": [
272
+ "480p",
273
+ "720p",
274
+ "1080p"
275
+ ]
276
+ },
119
277
  "duration_seconds": {
278
+ "type": "integer",
120
279
  "enum": [
121
280
  5,
122
281
  10
123
282
  ],
124
283
  "required": true
125
284
  },
126
- "output_resolution": {
127
- "enum": [
128
- "480p",
129
- "720p",
130
- "1080p"
131
- ]
285
+ "enable_safety_checker": {
286
+ "type": "boolean"
132
287
  },
133
- "last_frame_image_url": {},
134
- "first_frame_image_url": {}
288
+ "lock_camera": {
289
+ "type": "boolean"
290
+ },
291
+ "first_frame_image_url": {
292
+ "type": "string"
293
+ },
294
+ "last_frame_image_url": {
295
+ "type": "string"
296
+ },
297
+ "seed": {
298
+ "type": "integer"
299
+ }
135
300
  },
136
301
  "seedance-v1-pro": {
302
+ "prompt": {
303
+ "type": "string"
304
+ },
305
+ "model": {
306
+ "type": "string"
307
+ },
308
+ "callback_url": {
309
+ "type": "string"
310
+ },
137
311
  "aspect_ratio": {
312
+ "type": "string",
138
313
  "enum": [
139
314
  "1:1",
140
315
  "4:3",
@@ -144,37 +319,65 @@
144
319
  "21:9"
145
320
  ]
146
321
  },
322
+ "output_resolution": {
323
+ "type": "string",
324
+ "enum": [
325
+ "480p",
326
+ "720p",
327
+ "1080p"
328
+ ]
329
+ },
147
330
  "duration_seconds": {
331
+ "type": "integer",
148
332
  "enum": [
149
333
  5,
150
334
  10
151
335
  ],
152
336
  "required": true
153
337
  },
338
+ "enable_safety_checker": {
339
+ "type": "boolean"
340
+ },
341
+ "lock_camera": {
342
+ "type": "boolean"
343
+ },
344
+ "first_frame_image_url": {
345
+ "type": "string"
346
+ },
347
+ "seed": {
348
+ "type": "integer"
349
+ }
350
+ },
351
+ "seedance-v1-pro-fast": {
352
+ "prompt": {
353
+ "type": "string"
354
+ },
355
+ "model": {
356
+ "type": "string"
357
+ },
358
+ "callback_url": {
359
+ "type": "string"
360
+ },
154
361
  "output_resolution": {
362
+ "type": "string",
155
363
  "enum": [
156
- "480p",
157
364
  "720p",
158
365
  "1080p"
159
366
  ]
160
367
  },
161
- "first_frame_image_url": {}
162
- },
163
- "seedance-v1-pro-fast": {
164
368
  "duration_seconds": {
369
+ "type": "integer",
165
370
  "enum": [
166
371
  5,
167
372
  10
168
373
  ],
169
374
  "required": true
170
375
  },
171
- "output_resolution": {
172
- "enum": [
173
- "720p",
174
- "1080p"
175
- ]
376
+ "enable_safety_checker": {
377
+ "type": "boolean"
176
378
  },
177
379
  "first_frame_image_url": {
380
+ "type": "string",
178
381
  "required": true
179
382
  }
180
383
  }
package/data/pricing.json CHANGED
@@ -21,6 +21,25 @@
21
21
  }
22
22
  }
23
23
  },
24
+ "seedance-2-mini/text_to_video": {
25
+ "unit_price_cents": 57,
26
+ "billing_config": {
27
+ "keys": [
28
+ "pricing_input_mode",
29
+ "output_resolution"
30
+ ],
31
+ "matrix": {
32
+ "standard": {
33
+ "480p": 19,
34
+ "720p": 41
35
+ },
36
+ "reference": {
37
+ "480p": 27,
38
+ "720p": 56.25
39
+ }
40
+ }
41
+ }
42
+ },
24
43
  "seedance-2.0/text_to_video": {
25
44
  "unit_price_cents": 102,
26
45
  "billing_config": {
@@ -1,5 +1,5 @@
1
1
  export declare const META: {
2
2
  readonly name: "@runapi.ai/seedance-mcp";
3
- readonly version: "0.1.4";
3
+ readonly version: "0.1.6";
4
4
  readonly lineSlug: "seedance";
5
5
  };
package/dist/src/meta.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export const META = {
2
2
  name: "@runapi.ai/seedance-mcp",
3
- version: "0.1.4",
3
+ version: "0.1.6",
4
4
  lineSlug: "seedance"
5
5
  };
6
6
  //# sourceMappingURL=meta.js.map
@@ -5,10 +5,7 @@
5
5
  "args": [
6
6
  "-y",
7
7
  "@runapi.ai/seedance-mcp"
8
- ],
9
- "env": {
10
- "RUNAPI_API_KEY": "${RUNAPI_API_KEY}"
11
- }
8
+ ]
12
9
  }
13
10
  }
14
11
  }
@@ -5,10 +5,7 @@
5
5
  "args": [
6
6
  "-y",
7
7
  "@runapi.ai/seedance-mcp"
8
- ],
9
- "env": {
10
- "RUNAPI_API_KEY": "${RUNAPI_API_KEY}"
11
- }
8
+ ]
12
9
  }
13
10
  }
14
11
  }
@@ -5,10 +5,7 @@
5
5
  "args": [
6
6
  "-y",
7
7
  "@runapi.ai/seedance-mcp"
8
- ],
9
- "env": {
10
- "RUNAPI_API_KEY": "${RUNAPI_API_KEY}"
11
- }
8
+ ]
12
9
  }
13
10
  }
14
11
  }
@@ -6,10 +6,7 @@
6
6
  "args": [
7
7
  "-y",
8
8
  "@runapi.ai/seedance-mcp"
9
- ],
10
- "env": {
11
- "RUNAPI_API_KEY": "${RUNAPI_API_KEY}"
12
- }
9
+ ]
13
10
  }
14
11
  }
15
12
  }
@@ -5,10 +5,7 @@
5
5
  "args": [
6
6
  "-y",
7
7
  "@runapi.ai/seedance-mcp"
8
- ],
9
- "env": {
10
- "RUNAPI_API_KEY": "${RUNAPI_API_KEY}"
11
- }
8
+ ]
12
9
  }
13
10
  }
14
11
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@runapi.ai/seedance-mcp",
3
- "version": "0.1.4",
4
- "description": "RunAPI Seedance MCP server for video generation: create tasks, poll results, and check pricing across 6 model variants from Claude Code, Codex, Cursor, and VS Code.",
3
+ "version": "0.1.6",
4
+ "description": "RunAPI Seedance MCP server for video generation: create tasks, poll results, and check pricing across 7 model variants from Claude Code, Codex, Cursor, and VS Code.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
7
7
  "bin": {
@@ -55,7 +55,7 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "@modelcontextprotocol/sdk": "^1.29.0",
58
- "@runapi.ai/mcp-core": "0.1.3",
58
+ "@runapi.ai/mcp-core": "0.1.5",
59
59
  "zod": "^3.25.76"
60
60
  },
61
61
  "devDependencies": {
package/server.json CHANGED
@@ -6,19 +6,19 @@
6
6
  "url": "https://github.com/runapi-ai/seedance-mcp",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.1.4",
9
+ "version": "0.1.6",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@runapi.ai/seedance-mcp",
14
- "version": "0.1.4",
14
+ "version": "0.1.6",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
18
18
  "environmentVariables": [
19
19
  {
20
- "description": "RunAPI API key. Create one at https://runapi.ai",
21
- "isRequired": true,
20
+ "description": "Optional RunAPI API key for headless hosts. Interactive MCP hosts can use the login tool, which writes shared RunAPI config.",
21
+ "isRequired": false,
22
22
  "format": "string",
23
23
  "isSecret": true,
24
24
  "name": "RUNAPI_API_KEY"