@felores/kie-ai-mcp-server 3.0.1 → 3.2.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/dist/index.js +467 -276
- package/dist/kie-ai-client.d.ts +3 -2
- package/dist/kie-ai-client.js +141 -80
- package/dist/types.d.ts +292 -177
- package/dist/types.js +141 -74
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, ListResources
|
|
|
5
5
|
import { KieAiClient } from "./kie-ai-client.js";
|
|
6
6
|
import { TaskDatabase } from "./database.js";
|
|
7
7
|
import { z } from "zod";
|
|
8
|
-
import { NanoBananaImageSchema, Veo3GenerateSchema, SunoGenerateSchema, ElevenLabsTTSSchema, ElevenLabsSoundEffectsSchema, ByteDanceSeedanceVideoSchema, ByteDanceSeedreamImageSchema, QwenImageSchema, RunwayAlephVideoSchema,
|
|
8
|
+
import { NanoBananaImageSchema, Veo3GenerateSchema, SunoGenerateSchema, ElevenLabsTTSSchema, ElevenLabsSoundEffectsSchema, ByteDanceSeedanceVideoSchema, ByteDanceSeedreamImageSchema, QwenImageSchema, RunwayAlephVideoSchema, Wan27VideoSchema, MidjourneyGenerateSchema, GptImage2Schema, FluxKontextImageSchema, RecraftRemoveBackgroundSchema, IdeogramReframeSchema, KlingVideoSchema, HailuoVideoSchema, SoraVideoSchema, Flux2ImageSchema, WanAnimateSchema, ZImageSchema, GrokImagineSchema, InfiniTalkSchema, KlingAvatarSchema, TopazUpscaleImageSchema, HappyHorseVideoSchema, } from "./types.js";
|
|
9
9
|
class KieAiMcpServer {
|
|
10
10
|
server;
|
|
11
11
|
client;
|
|
@@ -17,7 +17,7 @@ class KieAiMcpServer {
|
|
|
17
17
|
"nano_banana_image",
|
|
18
18
|
"bytedance_seedream_image",
|
|
19
19
|
"qwen_image",
|
|
20
|
-
"
|
|
20
|
+
"gpt_image_2",
|
|
21
21
|
"flux_kontext_image",
|
|
22
22
|
"flux2_image",
|
|
23
23
|
"z_image",
|
|
@@ -33,6 +33,7 @@ class KieAiMcpServer {
|
|
|
33
33
|
"bytedance_seedance_video",
|
|
34
34
|
"wan_video",
|
|
35
35
|
"wan_animate",
|
|
36
|
+
"happyhorse_video",
|
|
36
37
|
"hailuo_video",
|
|
37
38
|
"kling_video",
|
|
38
39
|
"runway_aleph_video",
|
|
@@ -53,7 +54,7 @@ class KieAiMcpServer {
|
|
|
53
54
|
constructor() {
|
|
54
55
|
this.server = new Server({
|
|
55
56
|
name: "kie-ai-mcp-server",
|
|
56
|
-
version: "3.0
|
|
57
|
+
version: "3.2.0",
|
|
57
58
|
});
|
|
58
59
|
// Initialize client with config from environment
|
|
59
60
|
this.config = {
|
|
@@ -614,66 +615,92 @@ class KieAiMcpServer {
|
|
|
614
615
|
},
|
|
615
616
|
{
|
|
616
617
|
name: "bytedance_seedance_video",
|
|
617
|
-
description: "Generate videos
|
|
618
|
+
description: "Generate videos with ByteDance Seedance 2.0 — multimodal inputs (image/video/audio references), native audio generation, standard and fast modes",
|
|
618
619
|
inputSchema: {
|
|
619
620
|
type: "object",
|
|
620
621
|
properties: {
|
|
621
622
|
prompt: {
|
|
622
623
|
type: "string",
|
|
623
|
-
description: "Text prompt for video generation (
|
|
624
|
-
minLength:
|
|
625
|
-
maxLength:
|
|
624
|
+
description: "Text prompt for video generation (3-20000 characters)",
|
|
625
|
+
minLength: 3,
|
|
626
|
+
maxLength: 20000,
|
|
626
627
|
},
|
|
627
|
-
|
|
628
|
+
mode: {
|
|
629
|
+
type: "string",
|
|
630
|
+
description: "Generation mode — standard (seedance-2, higher quality) or fast (seedance-2-fast, iterative workflows)",
|
|
631
|
+
enum: ["standard", "fast"],
|
|
632
|
+
default: "standard",
|
|
633
|
+
},
|
|
634
|
+
first_frame_url: {
|
|
628
635
|
type: "string",
|
|
629
|
-
description: "URL of
|
|
636
|
+
description: "URL of image to use as the first frame (optional)",
|
|
630
637
|
format: "uri",
|
|
631
638
|
},
|
|
632
|
-
|
|
639
|
+
last_frame_url: {
|
|
633
640
|
type: "string",
|
|
634
|
-
description: "
|
|
635
|
-
|
|
636
|
-
|
|
641
|
+
description: "URL of image to use as the last frame (optional)",
|
|
642
|
+
format: "uri",
|
|
643
|
+
},
|
|
644
|
+
reference_image_urls: {
|
|
645
|
+
type: "array",
|
|
646
|
+
description: "Reference images for style/subject guidance (up to 9)",
|
|
647
|
+
items: { type: "string", format: "uri" },
|
|
648
|
+
maxItems: 9,
|
|
649
|
+
},
|
|
650
|
+
reference_video_urls: {
|
|
651
|
+
type: "array",
|
|
652
|
+
description: "Reference videos for motion/style guidance (up to 3)",
|
|
653
|
+
items: { type: "string", format: "uri" },
|
|
654
|
+
maxItems: 3,
|
|
655
|
+
},
|
|
656
|
+
reference_audio_urls: {
|
|
657
|
+
type: "array",
|
|
658
|
+
description: "Reference audio for sound-guided generation (up to 3)",
|
|
659
|
+
items: { type: "string", format: "uri" },
|
|
660
|
+
maxItems: 3,
|
|
637
661
|
},
|
|
638
662
|
aspect_ratio: {
|
|
639
663
|
type: "string",
|
|
640
664
|
description: "Aspect ratio of the generated video",
|
|
641
|
-
enum: [
|
|
665
|
+
enum: [
|
|
666
|
+
"1:1",
|
|
667
|
+
"9:16",
|
|
668
|
+
"16:9",
|
|
669
|
+
"4:3",
|
|
670
|
+
"3:4",
|
|
671
|
+
"21:9",
|
|
672
|
+
"9:21",
|
|
673
|
+
"adaptive",
|
|
674
|
+
],
|
|
642
675
|
default: "16:9",
|
|
643
676
|
},
|
|
644
677
|
resolution: {
|
|
645
678
|
type: "string",
|
|
646
|
-
description: "Video resolution
|
|
647
|
-
enum: ["480p", "720p"
|
|
679
|
+
description: "Video resolution — 480p for faster, 720p for balance",
|
|
680
|
+
enum: ["480p", "720p"],
|
|
648
681
|
default: "720p",
|
|
649
682
|
},
|
|
650
683
|
duration: {
|
|
651
|
-
type: "string",
|
|
652
|
-
description: "Duration of video in seconds (2-12)",
|
|
653
|
-
pattern: "^[2-9]|1[0-2]$",
|
|
654
|
-
default: "5",
|
|
655
|
-
},
|
|
656
|
-
camera_fixed: {
|
|
657
|
-
type: "boolean",
|
|
658
|
-
description: "Whether to fix the camera position",
|
|
659
|
-
default: false,
|
|
660
|
-
},
|
|
661
|
-
seed: {
|
|
662
684
|
type: "integer",
|
|
663
|
-
description: "
|
|
664
|
-
minimum:
|
|
665
|
-
maximum:
|
|
666
|
-
default:
|
|
685
|
+
description: "Duration of video in seconds (4-15)",
|
|
686
|
+
minimum: 4,
|
|
687
|
+
maximum: 15,
|
|
688
|
+
default: 5,
|
|
667
689
|
},
|
|
668
|
-
|
|
690
|
+
generate_audio: {
|
|
669
691
|
type: "boolean",
|
|
670
|
-
description: "
|
|
692
|
+
description: "Generate native audio for the video",
|
|
671
693
|
default: true,
|
|
672
694
|
},
|
|
673
|
-
|
|
674
|
-
type: "
|
|
675
|
-
description: "
|
|
676
|
-
|
|
695
|
+
web_search: {
|
|
696
|
+
type: "boolean",
|
|
697
|
+
description: "Enable web search to enhance prompt understanding",
|
|
698
|
+
default: false,
|
|
699
|
+
},
|
|
700
|
+
nsfw_checker: {
|
|
701
|
+
type: "boolean",
|
|
702
|
+
description: "Enable NSFW content filtering",
|
|
703
|
+
default: false,
|
|
677
704
|
},
|
|
678
705
|
callBackUrl: {
|
|
679
706
|
type: "string",
|
|
@@ -1211,70 +1238,41 @@ class KieAiMcpServer {
|
|
|
1211
1238
|
},
|
|
1212
1239
|
},
|
|
1213
1240
|
{
|
|
1214
|
-
name: "
|
|
1215
|
-
description: "Generate images using
|
|
1241
|
+
name: "gpt_image_2",
|
|
1242
|
+
description: "Generate images using GPT Image 2 (text-to-image and image-to-image with up to 16 reference images)",
|
|
1216
1243
|
inputSchema: {
|
|
1217
1244
|
type: "object",
|
|
1218
1245
|
properties: {
|
|
1219
1246
|
prompt: {
|
|
1220
1247
|
type: "string",
|
|
1221
|
-
description: "Text prompt describing the desired image (max
|
|
1222
|
-
maxLength:
|
|
1248
|
+
description: "Text prompt describing the desired image (max 20000 characters)",
|
|
1249
|
+
maxLength: 20000,
|
|
1223
1250
|
},
|
|
1224
|
-
|
|
1251
|
+
input_urls: {
|
|
1225
1252
|
type: "array",
|
|
1226
|
-
description: "Array of up to
|
|
1227
|
-
items: {
|
|
1228
|
-
|
|
1229
|
-
format: "uri",
|
|
1230
|
-
},
|
|
1231
|
-
maxItems: 5,
|
|
1253
|
+
description: "Array of up to 16 image URLs for image-to-image mode. Omit for text-to-image.",
|
|
1254
|
+
items: { type: "string", format: "uri" },
|
|
1255
|
+
maxItems: 16,
|
|
1232
1256
|
},
|
|
1233
|
-
|
|
1257
|
+
aspect_ratio: {
|
|
1234
1258
|
type: "string",
|
|
1235
1259
|
description: "Image aspect ratio",
|
|
1236
|
-
enum: ["1:1", "
|
|
1237
|
-
default: "
|
|
1238
|
-
},
|
|
1239
|
-
nVariants: {
|
|
1240
|
-
type: "string",
|
|
1241
|
-
description: "Number of image variations to generate",
|
|
1242
|
-
enum: ["1", "2", "4"],
|
|
1243
|
-
default: "4",
|
|
1260
|
+
enum: ["auto", "1:1", "9:16", "16:9", "4:3", "3:4"],
|
|
1261
|
+
default: "auto",
|
|
1244
1262
|
},
|
|
1245
|
-
|
|
1263
|
+
resolution: {
|
|
1246
1264
|
type: "string",
|
|
1247
|
-
description: "
|
|
1248
|
-
|
|
1265
|
+
description: "Output resolution",
|
|
1266
|
+
enum: ["1K", "2K", "4K"],
|
|
1267
|
+
default: "1K",
|
|
1249
1268
|
},
|
|
1250
1269
|
callBackUrl: {
|
|
1251
1270
|
type: "string",
|
|
1252
1271
|
description: "Optional: URL for task completion notifications (uses KIE_AI_CALLBACK_URL env var if not provided)",
|
|
1253
1272
|
format: "uri",
|
|
1254
1273
|
},
|
|
1255
|
-
isEnhance: {
|
|
1256
|
-
type: "boolean",
|
|
1257
|
-
description: "Enable prompt enhancement for specialized scenarios like 3D renders",
|
|
1258
|
-
default: false,
|
|
1259
|
-
},
|
|
1260
|
-
uploadCn: {
|
|
1261
|
-
type: "boolean",
|
|
1262
|
-
description: "Route uploads via China servers",
|
|
1263
|
-
default: false,
|
|
1264
|
-
},
|
|
1265
|
-
enableFallback: {
|
|
1266
|
-
type: "boolean",
|
|
1267
|
-
description: "Enable automatic fallback to backup models if GPT-4o is unavailable",
|
|
1268
|
-
default: true,
|
|
1269
|
-
},
|
|
1270
|
-
fallbackModel: {
|
|
1271
|
-
type: "string",
|
|
1272
|
-
description: "Backup model to use when fallback is enabled",
|
|
1273
|
-
enum: ["GPT_IMAGE_1", "FLUX_MAX"],
|
|
1274
|
-
default: "FLUX_MAX",
|
|
1275
|
-
},
|
|
1276
1274
|
},
|
|
1277
|
-
required: [],
|
|
1275
|
+
required: ["prompt"],
|
|
1278
1276
|
},
|
|
1279
1277
|
},
|
|
1280
1278
|
{
|
|
@@ -1349,57 +1347,135 @@ class KieAiMcpServer {
|
|
|
1349
1347
|
},
|
|
1350
1348
|
{
|
|
1351
1349
|
name: "wan_video",
|
|
1352
|
-
description: "Generate videos using Alibaba Wan 2.
|
|
1350
|
+
description: "Generate videos using Alibaba Wan 2.7 (text-to-video, image-to-video, reference-to-video, video-edit with native audio support)",
|
|
1353
1351
|
inputSchema: {
|
|
1354
1352
|
type: "object",
|
|
1355
1353
|
properties: {
|
|
1354
|
+
mode: {
|
|
1355
|
+
type: "string",
|
|
1356
|
+
description: "Generation mode: text-to-video (default), image-to-video, reference-to-video, or video-edit. Auto-detected from parameters if omitted.",
|
|
1357
|
+
enum: [
|
|
1358
|
+
"text-to-video",
|
|
1359
|
+
"image-to-video",
|
|
1360
|
+
"reference-to-video",
|
|
1361
|
+
"video-edit",
|
|
1362
|
+
],
|
|
1363
|
+
},
|
|
1356
1364
|
prompt: {
|
|
1357
1365
|
type: "string",
|
|
1358
|
-
description: "Text prompt for video generation (max
|
|
1366
|
+
description: "Text prompt for video generation (max 5000 characters)",
|
|
1359
1367
|
minLength: 1,
|
|
1360
|
-
maxLength:
|
|
1368
|
+
maxLength: 5000,
|
|
1361
1369
|
},
|
|
1362
|
-
|
|
1370
|
+
negative_prompt: {
|
|
1371
|
+
type: "string",
|
|
1372
|
+
description: "Negative prompt to describe content to avoid (max 500 characters)",
|
|
1373
|
+
maxLength: 500,
|
|
1374
|
+
},
|
|
1375
|
+
audio_url: {
|
|
1363
1376
|
type: "string",
|
|
1364
|
-
description: "URL
|
|
1377
|
+
description: "Audio URL for text-to-video with audio (T2V mode only)",
|
|
1365
1378
|
format: "uri",
|
|
1366
1379
|
},
|
|
1367
|
-
|
|
1380
|
+
first_frame_url: {
|
|
1368
1381
|
type: "string",
|
|
1369
|
-
description: "
|
|
1370
|
-
|
|
1371
|
-
|
|
1382
|
+
description: "URL of first frame image for image-to-video mode",
|
|
1383
|
+
format: "uri",
|
|
1384
|
+
},
|
|
1385
|
+
last_frame_url: {
|
|
1386
|
+
type: "string",
|
|
1387
|
+
description: "URL of last frame image for image-to-video mode",
|
|
1388
|
+
format: "uri",
|
|
1389
|
+
},
|
|
1390
|
+
first_clip_url: {
|
|
1391
|
+
type: "string",
|
|
1392
|
+
description: "URL of first video clip for image-to-video mode",
|
|
1393
|
+
format: "uri",
|
|
1394
|
+
},
|
|
1395
|
+
driving_audio_url: {
|
|
1396
|
+
type: "string",
|
|
1397
|
+
description: "Audio URL to drive facial expressions (I2V mode)",
|
|
1398
|
+
format: "uri",
|
|
1399
|
+
},
|
|
1400
|
+
reference_image: {
|
|
1401
|
+
type: "array",
|
|
1402
|
+
description: "Reference images for reference-to-video mode (up to 5)",
|
|
1403
|
+
items: { type: "string", format: "uri" },
|
|
1404
|
+
maxItems: 5,
|
|
1405
|
+
},
|
|
1406
|
+
reference_video: {
|
|
1407
|
+
type: "array",
|
|
1408
|
+
description: "Reference videos for reference-to-video mode (up to 5)",
|
|
1409
|
+
items: { type: "string", format: "uri" },
|
|
1410
|
+
maxItems: 5,
|
|
1411
|
+
},
|
|
1412
|
+
reference_voice: {
|
|
1413
|
+
type: "string",
|
|
1414
|
+
description: "Voice reference URL for R2V mode",
|
|
1415
|
+
format: "uri",
|
|
1416
|
+
},
|
|
1417
|
+
first_frame: {
|
|
1418
|
+
type: "string",
|
|
1419
|
+
description: "First frame image URL for R2V mode",
|
|
1420
|
+
format: "uri",
|
|
1421
|
+
},
|
|
1422
|
+
video_url_edit: {
|
|
1423
|
+
type: "string",
|
|
1424
|
+
description: "Video URL to edit (video-edit mode)",
|
|
1425
|
+
format: "uri",
|
|
1426
|
+
},
|
|
1427
|
+
reference_image_edit: {
|
|
1428
|
+
type: "string",
|
|
1429
|
+
description: "Reference image URL for video-edit mode",
|
|
1430
|
+
format: "uri",
|
|
1431
|
+
},
|
|
1432
|
+
audio_setting: {
|
|
1433
|
+
type: "string",
|
|
1434
|
+
description: "Audio handling for video-edit: auto or origin",
|
|
1435
|
+
enum: ["auto", "origin"],
|
|
1372
1436
|
},
|
|
1373
1437
|
resolution: {
|
|
1374
1438
|
type: "string",
|
|
1375
|
-
description: "Video resolution
|
|
1439
|
+
description: "Video resolution",
|
|
1376
1440
|
enum: ["720p", "1080p"],
|
|
1377
1441
|
default: "1080p",
|
|
1378
1442
|
},
|
|
1379
|
-
|
|
1443
|
+
ratio: {
|
|
1380
1444
|
type: "string",
|
|
1381
|
-
description: "
|
|
1382
|
-
enum: ["
|
|
1383
|
-
default: "
|
|
1445
|
+
description: "Aspect ratio of the generated video",
|
|
1446
|
+
enum: ["16:9", "9:16", "1:1", "4:3", "3:4"],
|
|
1447
|
+
default: "16:9",
|
|
1384
1448
|
},
|
|
1385
|
-
|
|
1386
|
-
type: "
|
|
1387
|
-
description: "
|
|
1388
|
-
|
|
1389
|
-
|
|
1449
|
+
duration: {
|
|
1450
|
+
type: "integer",
|
|
1451
|
+
description: "Duration in seconds (2-15)",
|
|
1452
|
+
minimum: 2,
|
|
1453
|
+
maximum: 15,
|
|
1454
|
+
default: 5,
|
|
1390
1455
|
},
|
|
1391
|
-
|
|
1456
|
+
prompt_extend: {
|
|
1392
1457
|
type: "boolean",
|
|
1393
|
-
description: "
|
|
1458
|
+
description: "Enable prompt rewriting using LLM for better results",
|
|
1394
1459
|
default: true,
|
|
1395
1460
|
},
|
|
1461
|
+
watermark: {
|
|
1462
|
+
type: "boolean",
|
|
1463
|
+
description: "Add watermark to generated video",
|
|
1464
|
+
default: false,
|
|
1465
|
+
},
|
|
1396
1466
|
seed: {
|
|
1397
1467
|
type: "integer",
|
|
1398
|
-
description: "Random seed for reproducible results",
|
|
1468
|
+
description: "Random seed for reproducible results (0-2147483647)",
|
|
1469
|
+
minimum: 0,
|
|
1470
|
+
},
|
|
1471
|
+
nsfw_checker: {
|
|
1472
|
+
type: "boolean",
|
|
1473
|
+
description: "Enable NSFW content filter",
|
|
1474
|
+
default: false,
|
|
1399
1475
|
},
|
|
1400
1476
|
callBackUrl: {
|
|
1401
1477
|
type: "string",
|
|
1402
|
-
description: "Optional: URL for task completion notifications
|
|
1478
|
+
description: "Optional: URL for task completion notifications",
|
|
1403
1479
|
format: "uri",
|
|
1404
1480
|
},
|
|
1405
1481
|
},
|
|
@@ -1762,6 +1838,89 @@ class KieAiMcpServer {
|
|
|
1762
1838
|
required: ["video_url", "image_url"],
|
|
1763
1839
|
},
|
|
1764
1840
|
},
|
|
1841
|
+
{
|
|
1842
|
+
name: "happyhorse_video",
|
|
1843
|
+
description: "Generate videos using Alibaba HappyHorse 1.0 (text-to-video, image-to-video, reference-to-video with up to 9 images, video-edit with native audio)",
|
|
1844
|
+
inputSchema: {
|
|
1845
|
+
type: "object",
|
|
1846
|
+
properties: {
|
|
1847
|
+
mode: {
|
|
1848
|
+
type: "string",
|
|
1849
|
+
description: "Generation mode: text-to-video (default), image-to-video, reference-to-video, or video-edit. Auto-detected from parameters if omitted.",
|
|
1850
|
+
enum: [
|
|
1851
|
+
"text-to-video",
|
|
1852
|
+
"image-to-video",
|
|
1853
|
+
"reference-to-video",
|
|
1854
|
+
"video-edit",
|
|
1855
|
+
],
|
|
1856
|
+
},
|
|
1857
|
+
prompt: {
|
|
1858
|
+
type: "string",
|
|
1859
|
+
description: "Text prompt for video generation (max 5000 characters)",
|
|
1860
|
+
minLength: 1,
|
|
1861
|
+
maxLength: 5000,
|
|
1862
|
+
},
|
|
1863
|
+
image_urls: {
|
|
1864
|
+
type: "array",
|
|
1865
|
+
description: "Input image URL for image-to-video mode (max 1)",
|
|
1866
|
+
items: { type: "string", format: "uri" },
|
|
1867
|
+
maxItems: 1,
|
|
1868
|
+
},
|
|
1869
|
+
reference_image: {
|
|
1870
|
+
type: "array",
|
|
1871
|
+
description: "Reference images for reference-to-video mode (up to 9)",
|
|
1872
|
+
items: { type: "string", format: "uri" },
|
|
1873
|
+
maxItems: 9,
|
|
1874
|
+
},
|
|
1875
|
+
video_url: {
|
|
1876
|
+
type: "string",
|
|
1877
|
+
description: "Video URL to edit (video-edit mode)",
|
|
1878
|
+
format: "uri",
|
|
1879
|
+
},
|
|
1880
|
+
reference_image_edit: {
|
|
1881
|
+
type: "array",
|
|
1882
|
+
description: "Reference images for video-edit mode (up to 5)",
|
|
1883
|
+
items: { type: "string", format: "uri" },
|
|
1884
|
+
maxItems: 5,
|
|
1885
|
+
},
|
|
1886
|
+
audio_setting: {
|
|
1887
|
+
type: "string",
|
|
1888
|
+
description: "Audio handling for video-edit: auto or origin",
|
|
1889
|
+
enum: ["auto", "origin"],
|
|
1890
|
+
},
|
|
1891
|
+
resolution: {
|
|
1892
|
+
type: "string",
|
|
1893
|
+
description: "Video resolution",
|
|
1894
|
+
enum: ["720p", "1080p"],
|
|
1895
|
+
default: "1080p",
|
|
1896
|
+
},
|
|
1897
|
+
aspect_ratio: {
|
|
1898
|
+
type: "string",
|
|
1899
|
+
description: "Aspect ratio of the generated video",
|
|
1900
|
+
enum: ["16:9", "9:16", "1:1", "4:3", "3:4"],
|
|
1901
|
+
default: "16:9",
|
|
1902
|
+
},
|
|
1903
|
+
duration: {
|
|
1904
|
+
type: "integer",
|
|
1905
|
+
description: "Duration in seconds (3-15)",
|
|
1906
|
+
minimum: 3,
|
|
1907
|
+
maximum: 15,
|
|
1908
|
+
default: 5,
|
|
1909
|
+
},
|
|
1910
|
+
seed: {
|
|
1911
|
+
type: "integer",
|
|
1912
|
+
description: "Random seed for reproducible results (0-2147483647)",
|
|
1913
|
+
minimum: 0,
|
|
1914
|
+
},
|
|
1915
|
+
callBackUrl: {
|
|
1916
|
+
type: "string",
|
|
1917
|
+
description: "Optional: URL for task completion notifications",
|
|
1918
|
+
format: "uri",
|
|
1919
|
+
},
|
|
1920
|
+
},
|
|
1921
|
+
required: ["prompt"],
|
|
1922
|
+
},
|
|
1923
|
+
},
|
|
1765
1924
|
{
|
|
1766
1925
|
name: "sora_video",
|
|
1767
1926
|
description: "Generate videos using OpenAI's Sora 2 models (unified tool for text-to-video, image-to-video, and storyboard generation with standard/high quality)",
|
|
@@ -1856,14 +2015,16 @@ class KieAiMcpServer {
|
|
|
1856
2015
|
return await this.handleKlingAvatar(args);
|
|
1857
2016
|
case "midjourney_generate":
|
|
1858
2017
|
return await this.handleMidjourneyGenerate(args);
|
|
1859
|
-
case "
|
|
1860
|
-
return await this.
|
|
2018
|
+
case "gpt_image_2":
|
|
2019
|
+
return await this.handleGptImage2(args);
|
|
1861
2020
|
case "flux_kontext_image":
|
|
1862
2021
|
return await this.handleFluxKontextImage(args);
|
|
1863
2022
|
case "runway_aleph_video":
|
|
1864
2023
|
return await this.handleRunwayAlephVideo(args);
|
|
1865
2024
|
case "wan_video":
|
|
1866
2025
|
return await this.handleWanVideo(args);
|
|
2026
|
+
case "happyhorse_video":
|
|
2027
|
+
return await this.handleHappyHorseVideo(args);
|
|
1867
2028
|
case "topaz_upscale_image":
|
|
1868
2029
|
return await this.handleTopazUpscaleImage(args);
|
|
1869
2030
|
case "recraft_remove_background":
|
|
@@ -1928,9 +2089,9 @@ class KieAiMcpServer {
|
|
|
1928
2089
|
},
|
|
1929
2090
|
},
|
|
1930
2091
|
{
|
|
1931
|
-
uri: "kie://models/
|
|
1932
|
-
name: "
|
|
1933
|
-
description: "
|
|
2092
|
+
uri: "kie://models/gpt-image-2",
|
|
2093
|
+
name: "GPT Image 2",
|
|
2094
|
+
description: "Text-to-image and image-to-image with up to 16 reference images",
|
|
1934
2095
|
mimeType: "text/markdown",
|
|
1935
2096
|
annotations: {
|
|
1936
2097
|
audience: ["assistant"],
|
|
@@ -1960,8 +2121,8 @@ class KieAiMcpServer {
|
|
|
1960
2121
|
},
|
|
1961
2122
|
{
|
|
1962
2123
|
uri: "kie://models/bytedance-seedance",
|
|
1963
|
-
name: "ByteDance Seedance",
|
|
1964
|
-
description: "
|
|
2124
|
+
name: "ByteDance Seedance 2.0",
|
|
2125
|
+
description: "Multimodal video generation with native audio, image/video/audio references, standard and fast modes",
|
|
1965
2126
|
mimeType: "text/markdown",
|
|
1966
2127
|
annotations: {
|
|
1967
2128
|
audience: ["assistant"],
|
|
@@ -1970,8 +2131,18 @@ class KieAiMcpServer {
|
|
|
1970
2131
|
},
|
|
1971
2132
|
{
|
|
1972
2133
|
uri: "kie://models/wan-video",
|
|
1973
|
-
name: "Wan
|
|
1974
|
-
description: "
|
|
2134
|
+
name: "Wan 2.7 Video",
|
|
2135
|
+
description: "Multi-mode video generation: T2V, I2V, R2V, video-edit with audio",
|
|
2136
|
+
mimeType: "text/markdown",
|
|
2137
|
+
annotations: {
|
|
2138
|
+
audience: ["assistant"],
|
|
2139
|
+
priority: 0.6,
|
|
2140
|
+
},
|
|
2141
|
+
},
|
|
2142
|
+
{
|
|
2143
|
+
uri: "kie://models/happyhorse-video",
|
|
2144
|
+
name: "HappyHorse 1.0 Video",
|
|
2145
|
+
description: "Multi-mode video: T2V, I2V, R2V (up to 9 refs), video-edit with audio",
|
|
1975
2146
|
mimeType: "text/markdown",
|
|
1976
2147
|
annotations: {
|
|
1977
2148
|
audience: ["assistant"],
|
|
@@ -2431,25 +2602,6 @@ class KieAiMcpServer {
|
|
|
2431
2602
|
errorMessage = apiData.failMsg;
|
|
2432
2603
|
}
|
|
2433
2604
|
}
|
|
2434
|
-
else if (localTask?.api_type === "openai-4o-image") {
|
|
2435
|
-
// OpenAI 4o Image-specific status mapping
|
|
2436
|
-
const successFlag = apiData.successFlag;
|
|
2437
|
-
if (successFlag === 1)
|
|
2438
|
-
status = "completed";
|
|
2439
|
-
else if (successFlag === 2)
|
|
2440
|
-
status = "failed";
|
|
2441
|
-
else if (successFlag === 0)
|
|
2442
|
-
status = "processing";
|
|
2443
|
-
// Extract result URLs from OpenAI 4o response
|
|
2444
|
-
if (apiData.response?.result_urls &&
|
|
2445
|
-
apiData.response.result_urls.length > 0) {
|
|
2446
|
-
resultUrl = apiData.response.result_urls[0]; // Use first image URL
|
|
2447
|
-
}
|
|
2448
|
-
// Extract error message for OpenAI 4o
|
|
2449
|
-
if (apiData.errorMessage) {
|
|
2450
|
-
errorMessage = apiData.errorMessage;
|
|
2451
|
-
}
|
|
2452
|
-
}
|
|
2453
2605
|
else if (localTask?.api_type === "flux-kontext-image") {
|
|
2454
2606
|
// Flux Kontext Image-specific status mapping
|
|
2455
2607
|
const successFlag = apiData.successFlag;
|
|
@@ -2594,7 +2746,7 @@ class KieAiMcpServer {
|
|
|
2594
2746
|
"nano-banana-image",
|
|
2595
2747
|
"bytedance-seedream-image",
|
|
2596
2748
|
"qwen-image",
|
|
2597
|
-
"
|
|
2749
|
+
"gpt-image-2",
|
|
2598
2750
|
"flux-kontext-image",
|
|
2599
2751
|
"topaz-upscale",
|
|
2600
2752
|
"recraft-remove-background",
|
|
@@ -2612,6 +2764,7 @@ class KieAiMcpServer {
|
|
|
2612
2764
|
"kling-3.0-video",
|
|
2613
2765
|
"bytedance-seedance-video",
|
|
2614
2766
|
"wan-video",
|
|
2767
|
+
"happyhorse-video",
|
|
2615
2768
|
"hailuo",
|
|
2616
2769
|
"runway-aleph-video",
|
|
2617
2770
|
];
|
|
@@ -3029,10 +3182,8 @@ class KieAiMcpServer {
|
|
|
3029
3182
|
request.callBackUrl = this.getCallbackUrl(request.callBackUrl);
|
|
3030
3183
|
const response = await this.client.generateByteDanceSeedanceVideo(request);
|
|
3031
3184
|
if (response.code === 200 && response.data?.taskId) {
|
|
3032
|
-
|
|
3033
|
-
const
|
|
3034
|
-
const mode = isImageToVideo ? "Image-to-Video" : "Text-to-Video";
|
|
3035
|
-
const quality = request.quality || "lite";
|
|
3185
|
+
const mode = request.mode || "standard";
|
|
3186
|
+
const hasFrameInput = !!request.first_frame_url;
|
|
3036
3187
|
// Store task in database
|
|
3037
3188
|
await this.db.createTask({
|
|
3038
3189
|
task_id: response.data.taskId,
|
|
@@ -3046,24 +3197,35 @@ class KieAiMcpServer {
|
|
|
3046
3197
|
text: JSON.stringify({
|
|
3047
3198
|
success: true,
|
|
3048
3199
|
task_id: response.data.taskId,
|
|
3049
|
-
message: `ByteDance Seedance ${mode} generation task created successfully`,
|
|
3200
|
+
message: `ByteDance Seedance 2.0 ${mode} generation task created successfully`,
|
|
3050
3201
|
parameters: {
|
|
3051
|
-
mode
|
|
3052
|
-
quality: quality,
|
|
3202
|
+
mode,
|
|
3053
3203
|
prompt: request.prompt.substring(0, 100) +
|
|
3054
3204
|
(request.prompt.length > 100 ? "..." : ""),
|
|
3055
3205
|
aspect_ratio: request.aspect_ratio || "16:9",
|
|
3056
3206
|
resolution: request.resolution || "720p",
|
|
3057
|
-
duration: request.duration ||
|
|
3058
|
-
|
|
3059
|
-
...(
|
|
3060
|
-
|
|
3207
|
+
duration: request.duration || 5,
|
|
3208
|
+
generate_audio: request.generate_audio !== false,
|
|
3209
|
+
...(hasFrameInput && {
|
|
3210
|
+
first_frame_url: request.first_frame_url,
|
|
3211
|
+
}),
|
|
3212
|
+
...(request.last_frame_url && {
|
|
3213
|
+
last_frame_url: request.last_frame_url,
|
|
3214
|
+
}),
|
|
3215
|
+
...(request.reference_image_urls?.length && {
|
|
3216
|
+
reference_images: request.reference_image_urls.length,
|
|
3217
|
+
}),
|
|
3218
|
+
...(request.reference_video_urls?.length && {
|
|
3219
|
+
reference_videos: request.reference_video_urls.length,
|
|
3220
|
+
}),
|
|
3221
|
+
...(request.reference_audio_urls?.length && {
|
|
3222
|
+
reference_audios: request.reference_audio_urls.length,
|
|
3061
3223
|
}),
|
|
3062
3224
|
},
|
|
3063
3225
|
next_steps: [
|
|
3064
3226
|
"Use get_task_status to check generation progress",
|
|
3065
3227
|
"Task completion will be sent to the provided callback URL",
|
|
3066
|
-
`${mode} generation typically takes 2-5 minutes depending on
|
|
3228
|
+
`${mode} mode generation typically takes 2-5 minutes depending on duration and complexity`,
|
|
3067
3229
|
],
|
|
3068
3230
|
}, null, 2),
|
|
3069
3231
|
},
|
|
@@ -3078,26 +3240,28 @@ class KieAiMcpServer {
|
|
|
3078
3240
|
catch (error) {
|
|
3079
3241
|
if (error instanceof z.ZodError) {
|
|
3080
3242
|
return this.formatError("bytedance_seedance_video", error, {
|
|
3081
|
-
prompt: "Required: Text prompt for video generation (
|
|
3082
|
-
|
|
3083
|
-
|
|
3243
|
+
prompt: "Required: Text prompt for video generation (3-20000 characters)",
|
|
3244
|
+
mode: 'Optional: Generation mode — "standard" or "fast" (default: standard)',
|
|
3245
|
+
first_frame_url: "Optional: URL of image to use as first frame",
|
|
3246
|
+
last_frame_url: "Optional: URL of image to use as last frame",
|
|
3247
|
+
reference_image_urls: "Optional: Reference images for style guidance (up to 9)",
|
|
3248
|
+
reference_video_urls: "Optional: Reference videos for motion guidance (up to 3)",
|
|
3249
|
+
reference_audio_urls: "Optional: Reference audio for sound-guided generation (up to 3)",
|
|
3084
3250
|
aspect_ratio: "Optional: Video aspect ratio (default: 16:9)",
|
|
3085
|
-
resolution:
|
|
3086
|
-
duration: "Optional: Video duration in seconds
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
callBackUrl: "Optional: URL for task completion notifications (uses KIE_AI_CALLBACK_URL env var if not provided)",
|
|
3251
|
+
resolution: 'Optional: Video resolution — "480p" or "720p" (default: 720p)',
|
|
3252
|
+
duration: "Optional: Video duration in seconds 4-15 (default: 5)",
|
|
3253
|
+
generate_audio: "Optional: Generate native audio (default: true)",
|
|
3254
|
+
web_search: "Optional: Enable web search for prompt enhancement (default: false)",
|
|
3255
|
+
nsfw_checker: "Optional: Enable NSFW content filtering (default: false)",
|
|
3256
|
+
callBackUrl: "Optional: URL for task completion notifications",
|
|
3092
3257
|
});
|
|
3093
3258
|
}
|
|
3094
3259
|
return this.formatError("bytedance_seedance_video", error, {
|
|
3095
|
-
prompt: "Required: Text prompt for video generation
|
|
3096
|
-
|
|
3097
|
-
quality: "Optional: Model quality - lite or pro",
|
|
3260
|
+
prompt: "Required: Text prompt for video generation",
|
|
3261
|
+
mode: 'Optional: "standard" or "fast"',
|
|
3098
3262
|
aspect_ratio: "Optional: Video aspect ratio",
|
|
3099
|
-
resolution:
|
|
3100
|
-
duration: "Optional:
|
|
3263
|
+
resolution: 'Optional: "480p" or "720p"',
|
|
3264
|
+
duration: "Optional: Duration in seconds 4-15",
|
|
3101
3265
|
callBackUrl: "Optional: URL for task completion notifications",
|
|
3102
3266
|
});
|
|
3103
3267
|
}
|
|
@@ -3653,28 +3817,18 @@ class KieAiMcpServer {
|
|
|
3653
3817
|
});
|
|
3654
3818
|
}
|
|
3655
3819
|
}
|
|
3656
|
-
async
|
|
3820
|
+
async handleGptImage2(args) {
|
|
3657
3821
|
try {
|
|
3658
|
-
const request =
|
|
3659
|
-
// Use intelligent callback URL fallback
|
|
3822
|
+
const request = GptImage2Schema.parse(args);
|
|
3660
3823
|
request.callBackUrl = this.getCallbackUrl(request.callBackUrl);
|
|
3661
|
-
const response = await this.client.
|
|
3824
|
+
const response = await this.client.generateGptImage2(request);
|
|
3662
3825
|
if (response.code === 200 && response.data?.taskId) {
|
|
3663
|
-
|
|
3664
|
-
|
|
3665
|
-
|
|
3666
|
-
const hasMask = !!request.maskUrl;
|
|
3667
|
-
let modeDisplay = "Text-to-Image";
|
|
3668
|
-
if (hasMask && hasImages) {
|
|
3669
|
-
modeDisplay = "Image Editing";
|
|
3670
|
-
}
|
|
3671
|
-
else if (hasImages && !hasMask) {
|
|
3672
|
-
modeDisplay = "Image Variants";
|
|
3673
|
-
}
|
|
3674
|
-
// Store task in database
|
|
3826
|
+
const mode = request.input_urls?.length
|
|
3827
|
+
? "Image-to-Image"
|
|
3828
|
+
: "Text-to-Image";
|
|
3675
3829
|
await this.db.createTask({
|
|
3676
3830
|
task_id: response.data.taskId,
|
|
3677
|
-
api_type: "
|
|
3831
|
+
api_type: "gpt-image-2",
|
|
3678
3832
|
status: "pending",
|
|
3679
3833
|
});
|
|
3680
3834
|
return {
|
|
@@ -3684,32 +3838,85 @@ class KieAiMcpServer {
|
|
|
3684
3838
|
text: JSON.stringify({
|
|
3685
3839
|
success: true,
|
|
3686
3840
|
task_id: response.data.taskId,
|
|
3687
|
-
message: `
|
|
3841
|
+
message: `GPT Image 2 ${mode} task created successfully`,
|
|
3688
3842
|
parameters: {
|
|
3689
|
-
mode
|
|
3690
|
-
prompt: request.prompt
|
|
3691
|
-
|
|
3692
|
-
|
|
3693
|
-
|
|
3694
|
-
|
|
3695
|
-
|
|
3696
|
-
is_enhance: request.isEnhance || false,
|
|
3697
|
-
enable_fallback: request.enableFallback !== false,
|
|
3698
|
-
fallback_model: request.fallbackModel || "FLUX_MAX",
|
|
3699
|
-
...(hasImages && {
|
|
3700
|
-
files_url: request.filesUrl,
|
|
3701
|
-
}),
|
|
3702
|
-
...(hasMask && {
|
|
3703
|
-
mask_url: request.maskUrl,
|
|
3843
|
+
mode,
|
|
3844
|
+
prompt: request.prompt.substring(0, 100) +
|
|
3845
|
+
(request.prompt.length > 100 ? "..." : ""),
|
|
3846
|
+
aspect_ratio: request.aspect_ratio || "auto",
|
|
3847
|
+
resolution: request.resolution || "1K",
|
|
3848
|
+
...(request.input_urls && {
|
|
3849
|
+
input_urls: request.input_urls,
|
|
3704
3850
|
}),
|
|
3705
3851
|
},
|
|
3706
3852
|
next_steps: [
|
|
3707
3853
|
`Use get_task_status with task_id: ${response.data.taskId} to check progress`,
|
|
3708
3854
|
'Generated images will be available when status is "completed"',
|
|
3709
3855
|
],
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3856
|
+
}, null, 2),
|
|
3857
|
+
},
|
|
3858
|
+
],
|
|
3859
|
+
};
|
|
3860
|
+
}
|
|
3861
|
+
else {
|
|
3862
|
+
throw new Error(response.msg || "Failed to create GPT Image 2 task");
|
|
3863
|
+
}
|
|
3864
|
+
}
|
|
3865
|
+
catch (error) {
|
|
3866
|
+
if (error instanceof z.ZodError) {
|
|
3867
|
+
return this.formatError("gpt_image_2", error, {
|
|
3868
|
+
prompt: "Required: Text prompt describing the desired image (max 20000 chars)",
|
|
3869
|
+
input_urls: "Optional: Array of up to 16 image URLs for image-to-image mode",
|
|
3870
|
+
aspect_ratio: "Optional: auto, 1:1, 9:16, 16:9, 4:3, 3:4 (default: auto)",
|
|
3871
|
+
resolution: "Optional: 1K, 2K, 4K (default: 1K)",
|
|
3872
|
+
});
|
|
3873
|
+
}
|
|
3874
|
+
return this.formatError("gpt_image_2", error, {
|
|
3875
|
+
prompt: "Required: Text prompt describing the desired image (max 20000 chars)",
|
|
3876
|
+
input_urls: "Optional: Array of up to 16 image URLs for image-to-image mode",
|
|
3877
|
+
aspect_ratio: "Optional: auto, 1:1, 9:16, 16:9, 4:3, 3:4 (default: auto)",
|
|
3878
|
+
resolution: "Optional: 1K, 2K, 4K (default: 1K)",
|
|
3879
|
+
});
|
|
3880
|
+
}
|
|
3881
|
+
}
|
|
3882
|
+
async handleHappyHorseVideo(args) {
|
|
3883
|
+
try {
|
|
3884
|
+
const request = HappyHorseVideoSchema.parse(args);
|
|
3885
|
+
request.callBackUrl = this.getCallbackUrl(request.callBackUrl);
|
|
3886
|
+
const response = await this.client.generateHappyHorseVideo(request);
|
|
3887
|
+
if (response.code === 200 && response.data?.taskId) {
|
|
3888
|
+
const mode = request.mode ||
|
|
3889
|
+
(request.video_url
|
|
3890
|
+
? "video-edit"
|
|
3891
|
+
: request.reference_image?.length
|
|
3892
|
+
? "reference-to-video"
|
|
3893
|
+
: request.image_urls?.length
|
|
3894
|
+
? "image-to-video"
|
|
3895
|
+
: "text-to-video");
|
|
3896
|
+
await this.db.createTask({
|
|
3897
|
+
task_id: response.data.taskId,
|
|
3898
|
+
api_type: "happyhorse-video",
|
|
3899
|
+
status: "pending",
|
|
3900
|
+
});
|
|
3901
|
+
return {
|
|
3902
|
+
content: [
|
|
3903
|
+
{
|
|
3904
|
+
type: "text",
|
|
3905
|
+
text: JSON.stringify({
|
|
3906
|
+
success: true,
|
|
3907
|
+
task_id: response.data.taskId,
|
|
3908
|
+
message: `HappyHorse 1.0 ${mode} task created successfully`,
|
|
3909
|
+
parameters: {
|
|
3910
|
+
mode,
|
|
3911
|
+
prompt: request.prompt.substring(0, 100) +
|
|
3912
|
+
(request.prompt.length > 100 ? "..." : ""),
|
|
3913
|
+
resolution: request.resolution || "1080p",
|
|
3914
|
+
aspect_ratio: request.aspect_ratio || "16:9",
|
|
3915
|
+
duration: request.duration || 5,
|
|
3916
|
+
},
|
|
3917
|
+
next_steps: [
|
|
3918
|
+
`Use get_task_status with task_id: ${response.data.taskId} to check progress`,
|
|
3919
|
+
'Video will be available when status is "completed"',
|
|
3713
3920
|
],
|
|
3714
3921
|
}, null, 2),
|
|
3715
3922
|
},
|
|
@@ -3717,35 +3924,22 @@ class KieAiMcpServer {
|
|
|
3717
3924
|
};
|
|
3718
3925
|
}
|
|
3719
3926
|
else {
|
|
3720
|
-
throw new Error(response.msg || "Failed to create
|
|
3927
|
+
throw new Error(response.msg || "Failed to create HappyHorse task");
|
|
3721
3928
|
}
|
|
3722
3929
|
}
|
|
3723
3930
|
catch (error) {
|
|
3724
3931
|
if (error instanceof z.ZodError) {
|
|
3725
|
-
return this.formatError("
|
|
3726
|
-
prompt: "
|
|
3727
|
-
|
|
3728
|
-
|
|
3729
|
-
|
|
3730
|
-
|
|
3731
|
-
callBackUrl: "Optional: Webhook URL for completion notifications",
|
|
3732
|
-
isEnhance: "Optional: Enable prompt enhancement for specialized scenarios (default: false)",
|
|
3733
|
-
uploadCn: "Optional: Route uploads via China servers (default: false)",
|
|
3734
|
-
enableFallback: "Optional: Enable automatic fallback to backup models (default: true)",
|
|
3735
|
-
fallbackModel: "Optional: Backup model choice (GPT_IMAGE_1, FLUX_MAX, default: FLUX_MAX)",
|
|
3932
|
+
return this.formatError("happyhorse_video", error, {
|
|
3933
|
+
prompt: "Required: Text prompt for video generation (max 5000 chars)",
|
|
3934
|
+
mode: "Optional: text-to-video, image-to-video, reference-to-video, video-edit",
|
|
3935
|
+
image_urls: "I2V: Single image URL",
|
|
3936
|
+
reference_image: "R2V: Up to 9 reference image URLs",
|
|
3937
|
+
video_url: "Video Edit: Video URL to edit",
|
|
3736
3938
|
});
|
|
3737
3939
|
}
|
|
3738
|
-
return this.formatError("
|
|
3739
|
-
prompt: "
|
|
3740
|
-
|
|
3741
|
-
size: "Required: Image aspect ratio (1:1, 3:2, 2:3, default: 1:1)",
|
|
3742
|
-
nVariants: "Optional: Number of image variations (1, 2, 4, default: 4)",
|
|
3743
|
-
maskUrl: "Optional: Mask image URL for precise editing (black=edit, white=preserve)",
|
|
3744
|
-
callBackUrl: "Optional: Webhook URL for completion notifications",
|
|
3745
|
-
isEnhance: "Optional: Enable prompt enhancement for specialized scenarios (default: false)",
|
|
3746
|
-
uploadCn: "Optional: Route uploads via China servers (default: false)",
|
|
3747
|
-
enableFallback: "Optional: Enable automatic fallback to backup models (default: true)",
|
|
3748
|
-
fallbackModel: "Optional: Backup model choice (GPT_IMAGE_1, FLUX_MAX, default: FLUX_MAX)",
|
|
3940
|
+
return this.formatError("happyhorse_video", error, {
|
|
3941
|
+
prompt: "Required: Text prompt for video generation (max 5000 chars)",
|
|
3942
|
+
mode: "Optional: text-to-video, image-to-video, reference-to-video, video-edit",
|
|
3749
3943
|
});
|
|
3750
3944
|
}
|
|
3751
3945
|
}
|
|
@@ -3915,16 +4109,20 @@ class KieAiMcpServer {
|
|
|
3915
4109
|
}
|
|
3916
4110
|
async handleWanVideo(args) {
|
|
3917
4111
|
try {
|
|
3918
|
-
const request =
|
|
3919
|
-
// Use intelligent callback URL fallback
|
|
4112
|
+
const request = Wan27VideoSchema.parse(args);
|
|
3920
4113
|
request.callBackUrl = this.getCallbackUrl(request.callBackUrl);
|
|
3921
4114
|
const response = await this.client.generateWanVideo(request);
|
|
3922
4115
|
if (response.code === 200 && response.data?.taskId) {
|
|
3923
|
-
|
|
3924
|
-
|
|
3925
|
-
|
|
3926
|
-
|
|
3927
|
-
|
|
4116
|
+
const mode = request.mode ||
|
|
4117
|
+
(request.video_url_edit
|
|
4118
|
+
? "video-edit"
|
|
4119
|
+
: request.reference_image?.length || request.reference_video?.length
|
|
4120
|
+
? "reference-to-video"
|
|
4121
|
+
: request.first_frame_url ||
|
|
4122
|
+
request.last_frame_url ||
|
|
4123
|
+
request.first_clip_url
|
|
4124
|
+
? "image-to-video"
|
|
4125
|
+
: "text-to-video");
|
|
3928
4126
|
await this.db.createTask({
|
|
3929
4127
|
task_id: response.data.taskId,
|
|
3930
4128
|
api_type: "wan-video",
|
|
@@ -3937,27 +4135,18 @@ class KieAiMcpServer {
|
|
|
3937
4135
|
text: JSON.stringify({
|
|
3938
4136
|
success: true,
|
|
3939
4137
|
task_id: response.data.taskId,
|
|
3940
|
-
message: `
|
|
4138
|
+
message: `Wan 2.7 ${mode} task created successfully`,
|
|
3941
4139
|
parameters: {
|
|
3942
|
-
mode
|
|
4140
|
+
mode,
|
|
3943
4141
|
prompt: request.prompt.substring(0, 100) +
|
|
3944
4142
|
(request.prompt.length > 100 ? "..." : ""),
|
|
3945
|
-
resolution: resolution,
|
|
3946
|
-
|
|
3947
|
-
|
|
3948
|
-
...(request.seed !== undefined && { seed: request.seed }),
|
|
3949
|
-
...(isImageToVideo && {
|
|
3950
|
-
image_url: request.image_url,
|
|
3951
|
-
duration: request.duration || "5",
|
|
3952
|
-
}),
|
|
3953
|
-
...(!isImageToVideo && {
|
|
3954
|
-
aspect_ratio: request.aspect_ratio || "16:9",
|
|
3955
|
-
}),
|
|
4143
|
+
resolution: request.resolution || "1080p",
|
|
4144
|
+
ratio: request.ratio || "16:9",
|
|
4145
|
+
duration: request.duration || 5,
|
|
3956
4146
|
},
|
|
3957
4147
|
next_steps: [
|
|
3958
|
-
|
|
3959
|
-
|
|
3960
|
-
`${mode} generation typically takes 2-6 minutes depending on resolution and complexity`,
|
|
4148
|
+
`Use get_task_status with task_id: ${response.data.taskId} to check progress`,
|
|
4149
|
+
'Video will be available when status is "completed"',
|
|
3961
4150
|
],
|
|
3962
4151
|
}, null, 2),
|
|
3963
4152
|
},
|
|
@@ -3965,29 +4154,23 @@ class KieAiMcpServer {
|
|
|
3965
4154
|
};
|
|
3966
4155
|
}
|
|
3967
4156
|
else {
|
|
3968
|
-
throw new Error(response.msg || "Failed to create Wan 2.
|
|
4157
|
+
throw new Error(response.msg || "Failed to create Wan 2.7 video task");
|
|
3969
4158
|
}
|
|
3970
4159
|
}
|
|
3971
4160
|
catch (error) {
|
|
3972
4161
|
if (error instanceof z.ZodError) {
|
|
3973
4162
|
return this.formatError("wan_video", error, {
|
|
3974
|
-
prompt: "Required: Text prompt for video generation (max
|
|
3975
|
-
|
|
3976
|
-
|
|
3977
|
-
|
|
3978
|
-
|
|
3979
|
-
|
|
3980
|
-
enable_prompt_expansion: "Optional: Enable prompt rewriting using LLM (default: true)",
|
|
3981
|
-
seed: "Optional: Random seed for reproducible results",
|
|
3982
|
-
callBackUrl: "Optional: URL for task completion notifications (uses KIE_AI_CALLBACK_URL env var if not provided)",
|
|
4163
|
+
prompt: "Required: Text prompt for video generation (max 5000 chars)",
|
|
4164
|
+
mode: "Optional: text-to-video, image-to-video, reference-to-video, video-edit",
|
|
4165
|
+
first_frame_url: "I2V: First frame image URL",
|
|
4166
|
+
last_frame_url: "I2V: Last frame image URL",
|
|
4167
|
+
reference_image: "R2V: Up to 5 reference image URLs",
|
|
4168
|
+
video_url_edit: "Video Edit: Video URL to edit",
|
|
3983
4169
|
});
|
|
3984
4170
|
}
|
|
3985
4171
|
return this.formatError("wan_video", error, {
|
|
3986
4172
|
prompt: "Required: Text prompt for video generation",
|
|
3987
|
-
|
|
3988
|
-
aspect_ratio: "Optional: Video aspect ratio",
|
|
3989
|
-
resolution: "Optional: Video resolution",
|
|
3990
|
-
callBackUrl: "Optional: URL for task completion notifications",
|
|
4173
|
+
mode: "Optional: text-to-video, image-to-video, reference-to-video, video-edit",
|
|
3991
4174
|
});
|
|
3992
4175
|
}
|
|
3993
4176
|
}
|
|
@@ -4617,6 +4800,12 @@ class KieAiMcpServer {
|
|
|
4617
4800
|
category: "video",
|
|
4618
4801
|
quality: "standard",
|
|
4619
4802
|
},
|
|
4803
|
+
{
|
|
4804
|
+
name: "happyhorse_video",
|
|
4805
|
+
status: "available",
|
|
4806
|
+
category: "video",
|
|
4807
|
+
quality: "standard",
|
|
4808
|
+
},
|
|
4620
4809
|
{
|
|
4621
4810
|
name: "runway_aleph",
|
|
4622
4811
|
status: "available",
|
|
@@ -4636,7 +4825,7 @@ class KieAiMcpServer {
|
|
|
4636
4825
|
quality: "professional",
|
|
4637
4826
|
},
|
|
4638
4827
|
{
|
|
4639
|
-
name: "
|
|
4828
|
+
name: "gpt_image_2",
|
|
4640
4829
|
status: "available",
|
|
4641
4830
|
category: "image",
|
|
4642
4831
|
quality: "professional",
|
|
@@ -4850,10 +5039,10 @@ The system automatically detects user intent:
|
|
|
4850
5039
|
## 🔧 Intelligent Parameter Selection
|
|
4851
5040
|
|
|
4852
5041
|
### **Video Parameters**
|
|
4853
|
-
- **ByteDance Seedance**:
|
|
4854
|
-
- Default: \`
|
|
4855
|
-
-
|
|
4856
|
-
-
|
|
5042
|
+
- **ByteDance Seedance 2.0**:
|
|
5043
|
+
- Default: \`mode: "standard"\`, \`resolution: "720p"\`, \`generate_audio: true\`
|
|
5044
|
+
- Fast/Iterative: \`mode: "fast"\`, \`resolution: "480p"\`
|
|
5045
|
+
- Higher Quality: \`mode: "standard"\`, \`resolution: "720p"\`
|
|
4857
5046
|
|
|
4858
5047
|
- **Veo3**:
|
|
4859
5048
|
- Default: \`model: "veo3_fast"\`
|
|
@@ -5001,7 +5190,7 @@ These guidelines ensure optimal balance between quality requirements and cost ma
|
|
|
5001
5190
|
| Model | Max Resolution | Quality Modes | Duration | Speed | Key Strengths |
|
|
5002
5191
|
|-------|---------------|---------------|----------|-------|---------------|
|
|
5003
5192
|
| **Google Veo3** | 1080p | veo3/veo3_fast | Default | Medium | Premium cinematic quality, 1080p support |
|
|
5004
|
-
| **ByteDance Seedance** |
|
|
5193
|
+
| **ByteDance Seedance 2.0** | 720p | standard/fast | 4-15s | Medium | Multimodal refs, native audio, adaptive aspect |
|
|
5005
5194
|
| **Wan Video 2.5** | 1080p | Single | 5-10s | Fast | Quick generation, social media |
|
|
5006
5195
|
| **Runway Aleph** | 1080p | Single | Source | Medium | Video-to-video editing, style transfer |
|
|
5007
5196
|
|
|
@@ -5009,32 +5198,33 @@ These guidelines ensure optimal balance between quality requirements and cost ma
|
|
|
5009
5198
|
|
|
5010
5199
|
### Default Settings (Cost-Effective)
|
|
5011
5200
|
- **Resolution**: 720p (unless user requests high quality)
|
|
5012
|
-
- **Quality Mode**:
|
|
5013
|
-
- **Model**: ByteDance Seedance
|
|
5201
|
+
- **Quality Mode**: standard/fast (unless user requests "fast" explicitly)
|
|
5202
|
+
- **Model**: ByteDance Seedance 2.0 standard as default
|
|
5014
5203
|
|
|
5015
5204
|
### High Quality Upgrades
|
|
5016
|
-
- **User says "high quality"**:
|
|
5017
|
-
- **User says "high quality in 720p"**: Pro models + 720p
|
|
5205
|
+
- **User says "high quality"**: Standard mode + 720p (already default)
|
|
5018
5206
|
- **User says "cinematic"**: Veo3 model
|
|
5019
|
-
- **User says "fast/quick"**:
|
|
5207
|
+
- **User says "fast/quick"**: Seedance fast mode + 480p
|
|
5020
5208
|
|
|
5021
5209
|
## Use Case Recommendations
|
|
5022
5210
|
|
|
5023
5211
|
- **Cinematic/Premium Content**: Veo3 (model: "veo3")
|
|
5024
|
-
- **Professional/Commercial**: ByteDance Seedance (
|
|
5025
|
-
- **Social Media/Fast**:
|
|
5212
|
+
- **Professional/Commercial**: ByteDance Seedance 2.0 (mode: "standard")
|
|
5213
|
+
- **Social Media/Fast**: ByteDance Seedance 2.0 fast or Wan Video 2.5
|
|
5214
|
+
- **Multimodal (refs + audio)**: ByteDance Seedance 2.0 with reference URLs
|
|
5026
5215
|
- **Video Editing**: Runway Aleph (existing video transformation)
|
|
5027
5216
|
|
|
5028
5217
|
## Parameter Mapping
|
|
5029
5218
|
|
|
5030
5219
|
### Input Methods
|
|
5031
5220
|
- **Text-to-Video**: All models (prompt only)
|
|
5032
|
-
- **Image-to-Video**: Veo3 (imageUrls),
|
|
5221
|
+
- **Image-to-Video**: Veo3 (imageUrls), Seedance (first_frame_url), Wan (image_url)
|
|
5033
5222
|
- **Video-to-Video**: Runway Aleph (videoUrl)
|
|
5223
|
+
- **Multimodal Refs**: Seedance 2.0 (reference_image/video/audio_urls)
|
|
5034
5224
|
|
|
5035
5225
|
### Quality Control
|
|
5036
5226
|
- **Veo3**: model selection (veo3 vs veo3_fast)
|
|
5037
|
-
- **
|
|
5227
|
+
- **Seedance 2.0**: mode (standard vs fast) + resolution
|
|
5038
5228
|
- **Wan**: resolution parameter only
|
|
5039
5229
|
- **Runway**: implicit (no quality settings)
|
|
5040
5230
|
|
|
@@ -5053,7 +5243,7 @@ These guidelines ensure optimal balance between quality requirements and cost ma
|
|
|
5053
5243
|
### **CRITICAL COST CONTROL RULES**
|
|
5054
5244
|
- **Resolution**: ALWAYS use \`"720p"\` unless user explicitly requests high quality
|
|
5055
5245
|
- **Quality Level**: ALWAYS use **lite/fast** versions unless user requests "high quality"
|
|
5056
|
-
- **Model Selection**: bytedance_seedance_video with \`
|
|
5246
|
+
- **Model Selection**: bytedance_seedance_video with \`mode: "standard"\` as default
|
|
5057
5247
|
|
|
5058
5248
|
### **Quality Upgrade Logic**
|
|
5059
5249
|
|
|
@@ -5151,15 +5341,16 @@ These guidelines ensure optimal balance between quality requirements and cost ma
|
|
|
5151
5341
|
"bytedance-seedream": "bytedance_seedream-v4-text-to-image.md",
|
|
5152
5342
|
"qwen-image": "qwen_text-to-image.md",
|
|
5153
5343
|
"flux-kontext": "flux_kontext_image.md",
|
|
5154
|
-
"
|
|
5344
|
+
"gpt-image-2": "gpt_image-2.md",
|
|
5155
5345
|
"nano-banana": "google_nano-banana.md",
|
|
5156
5346
|
"topaz-upscale": "topaz_image-upscale.md",
|
|
5157
5347
|
"recraft-bg-removal": "recraft_remove_background.md",
|
|
5158
5348
|
"ideogram-reframe": "ideogram_reframe_image.md",
|
|
5159
5349
|
// Video models
|
|
5160
5350
|
veo3: "google_veo3-text-to-image.md",
|
|
5161
|
-
"bytedance-seedance": "bytedance_seedance-
|
|
5162
|
-
"wan-video": "wan_2-
|
|
5351
|
+
"bytedance-seedance": "bytedance_seedance-2.md",
|
|
5352
|
+
"wan-video": "wan_2-7-text-to-video.md",
|
|
5353
|
+
"happyhorse-video": "happyhorse_text-to-video.md",
|
|
5163
5354
|
"runway-aleph": "runway_aleph_video.md",
|
|
5164
5355
|
"kling-v2-1": "kling_v2-1-pro.md",
|
|
5165
5356
|
"kling-v2-5": "kling_v2-5-turbo-text-to-video-pro.md",
|