@runapi.ai/suno-mcp 0.1.2 → 0.1.4

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
@@ -1,40 +1,56 @@
1
- # @runapi.ai/suno-mcp
1
+ <h1 align="center">RunAPI Suno MCP Server</h1>
2
2
 
3
- RunAPI MCP server for the **Suno** model line. Create tasks,
4
- poll their status, and check pricing through a single RunAPI API key.
3
+ <p align="center">
4
+ <strong>Suno API access for AI agents: create multimodal generation tasks, poll results, and check pricing through one focused MCP server.</strong>
5
+ </p>
5
6
 
6
- ## Tools
7
+ <p align="center">
8
+ <sub>Works with Claude Code, Codex, Cursor, Windsurf, VS Code, Roo Code, and any MCP-compatible host.</sub>
9
+ </p>
7
10
 
8
- - `cover_audio` — create a Suno task (cover audio) and (optionally) poll until it reaches a terminal status. Returns the task id, status, output URLs, and a price snapshot. Models: `suno-v4`, `suno-v4.5`, `suno-v4.5-all`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5`.
9
- - `create_mashup` — create a Suno task (create mashup) and (optionally) poll until it reaches a terminal status. Returns the task id, status, output URLs, and a price snapshot. Models: `suno-v4`, `suno-v4.5`, `suno-v4.5-all`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5`.
10
- - `extend_music` — create a Suno task (extend music) and (optionally) poll until it reaches a terminal status. Returns the task id, status, output URLs, and a price snapshot. Models: `suno-v4`, `suno-v4.5`, `suno-v4.5-all`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5`.
11
- - `text_to_music` — create a Suno task (text to music) and (optionally) poll until it reaches a terminal status. Returns the task id, status, output URLs, and a price snapshot. Models: `suno-v4`, `suno-v4.5`, `suno-v4.5-all`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5`.
12
- - `text_to_sound` — create a Suno task (text to sound) and (optionally) poll until it reaches a terminal status. Returns the task id, status, output URLs, and a price snapshot. Models: `suno-v4`, `suno-v4.5`, `suno-v4.5-all`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5`.
13
- - `get_task` — fetch the current status and latest payload for a task.
14
- - `check_pricing` — look up pricing for a model in this line.
11
+ <p align="center">
12
+ <a href="https://www.npmjs.com/package/@runapi.ai/suno-mcp"><img src="https://img.shields.io/npm/v/%40runapi.ai/suno-mcp?style=flat-square&color=blue" alt="npm version"></a>
13
+ <a href="https://github.com/runapi-ai/suno-mcp"><img src="https://img.shields.io/badge/GitHub-runapi--ai%2Fsuno-mcp-24292f?style=flat-square" alt="GitHub repository"></a>
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
+ <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">
17
+ </p>
15
18
 
16
- ## Configuration
19
+ <p align="center">
20
+ <a href="#install">Install</a> |
21
+ <a href="#tools">Tools</a> |
22
+ <a href="#models">Models</a> |
23
+ <a href="#agent-prompts">Agent Prompts</a> |
24
+ <a href="#configuration">Configuration</a> |
25
+ <a href="#links">Links</a>
26
+ </p>
17
27
 
18
- Set a RunAPI API key via the `RUNAPI_API_KEY` environment variable, or write
19
- it to `~/.config/runapi/config.json`:
28
+ ---
20
29
 
21
- ```bash
22
- mkdir -p ~/.config/runapi
23
- echo '{"api_key":"YOUR_KEY"}' > ~/.config/runapi/config.json
24
- ```
30
+ ## Why This Package?
25
31
 
26
- Get an API key at https://runapi.ai. Pricing is listed at
27
- https://runapi.ai/pricing.
32
+ `@runapi.ai/suno-mcp` is a focused Model Context Protocol server for the **Suno** model line on RunAPI.
33
+ It gives MCP-compatible assistants direct access to 6 endpoints and 6 model variants without loading the full RunAPI catalog.
28
34
 
29
- ## Usage
35
+ Use this per-model server when an agent should stay scoped to Suno. Use [`@runapi.ai/mcp`](https://github.com/runapi-ai/mcp) when one assistant should discover every RunAPI model line.
30
36
 
31
- Run the server over stdio:
37
+ ---
38
+
39
+ ## Install
40
+
41
+ Add it to Claude Code:
32
42
 
33
43
  ```bash
34
- npx -y @runapi.ai/suno-mcp
44
+ claude mcp add suno -s user -- npx -y @runapi.ai/suno-mcp
35
45
  ```
36
46
 
37
- Add it to an MCP client (see `examples/` for per-client configs):
47
+ Use project scope when the server should be shared with a repository:
48
+
49
+ ```bash
50
+ claude mcp add suno -s project -- npx -y @runapi.ai/suno-mcp
51
+ ```
52
+
53
+ Codex, Cursor, Windsurf, VS Code, Roo Code, and other MCP hosts can use the same stdio command:
38
54
 
39
55
  ```json
40
56
  {
@@ -48,6 +64,105 @@ Add it to an MCP client (see `examples/` for per-client configs):
48
64
  }
49
65
  ```
50
66
 
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.
68
+
69
+ Ready-made examples are in [`examples/`](examples/) for Claude, Cursor, Windsurf, VS Code, and Roo Code.
70
+
71
+ ---
72
+
73
+ ## Tools
74
+
75
+ | Tool | Auth | Purpose |
76
+ |---|---|---|
77
+ | `cover_audio` | Yes | Create a Suno cover audio task and optionally wait for a terminal status. Returns the task id, status, output URLs, and pricing snapshot. |
78
+ | `create_mashup` | Yes | Create a Suno create mashup task and optionally wait for a terminal status. Returns the task id, status, output URLs, and pricing snapshot. |
79
+ | `extend_music` | Yes | Create a Suno extend music task and optionally wait for a terminal status. Returns the task id, status, output URLs, and pricing snapshot. |
80
+ | `generate_lyrics` | Yes | Create a Suno generate lyrics task and optionally wait for a terminal status. Returns the task id, status, output URLs, and pricing snapshot. |
81
+ | `text_to_music` | Yes | Create a Suno text to music task and optionally wait for a terminal status. Returns the task id, status, output URLs, and pricing snapshot. |
82
+ | `text_to_sound` | Yes | Create a Suno text to sound task and optionally wait for a terminal status. Returns the task id, status, output URLs, and pricing snapshot. |
83
+ | `get_task` | Yes | Fetch the current status and latest payload for an existing task. |
84
+ | `check_pricing` | No | Look up the current pricing snapshot for a Suno model and endpoint. |
85
+
86
+ ---
87
+
88
+ ## Models
89
+
90
+ Suno covers 6 model variants across 6 endpoints. Each tool accepts the models listed for it:
91
+
92
+ | Tool | Models |
93
+ |---|---|
94
+ | `cover_audio` | `suno-v4`, `suno-v4.5`, `suno-v4.5-all`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5` |
95
+ | `create_mashup` | `suno-v4`, `suno-v4.5`, `suno-v4.5-all`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5` |
96
+ | `extend_music` | `suno-v4`, `suno-v4.5`, `suno-v4.5-all`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5` |
97
+ | `generate_lyrics` | _no model parameter_ |
98
+ | `text_to_music` | `suno-v4`, `suno-v4.5`, `suno-v4.5-all`, `suno-v4.5-plus`, `suno-v5`, `suno-v5.5` |
99
+ | `text_to_sound` | `suno-v5`, `suno-v5.5` |
100
+
101
+ Model availability can change between releases. Use `check_pricing` or the [Suno model page](https://runapi.ai/models/suno) for the current catalog view.
102
+
103
+ ---
104
+
105
+ ## Agent Prompts
106
+
107
+ Ask your assistant in natural language; it can inspect pricing, create the task, and return the task id plus output URLs.
108
+
109
+ ### Create a task
110
+
111
+ ```text
112
+ Run a Suno cover audio task with RunAPI.
113
+ ```
114
+
115
+ The assistant can call `check_pricing`, then `cover_audio`, and return the task id, status, and output URLs.
116
+
117
+ ### Submit without waiting
118
+
119
+ ```text
120
+ Create the task but don't wait for it to finish.
121
+ ```
122
+
123
+ The assistant calls the create tool with `wait: false` and returns the task id. Check on it later with `get_task`.
124
+
125
+ ### Check pricing before creating
126
+
127
+ ```text
128
+ Check current Suno pricing, then create the task if it matches my request.
129
+ ```
130
+
131
+ The assistant calls `check_pricing` and can link to the [Suno model page](https://runapi.ai/models/suno) for the canonical catalog entry.
132
+
133
+ ---
134
+
135
+ ## Configuration
136
+
137
+ The server reads the API key in this order:
138
+
139
+ 1. `RUNAPI_API_KEY` environment variable
140
+ 2. `~/.config/runapi/config.json`
141
+
142
+ Example config file:
143
+
144
+ ```json
145
+ {
146
+ "apiKey": "your_runapi_key"
147
+ }
148
+ ```
149
+
150
+ Do not commit real API keys. Get one at [runapi.ai](https://runapi.ai).
151
+
152
+ ---
153
+
154
+ ## Links
155
+
156
+ | Resource | URL |
157
+ |---|---|
158
+ | Suno model page | [https://runapi.ai/models/suno](https://runapi.ai/models/suno) |
159
+ | npm package | [@runapi.ai/suno-mcp](https://www.npmjs.com/package/@runapi.ai/suno-mcp) |
160
+ | GitHub repository | [runapi-ai/suno-mcp](https://github.com/runapi-ai/suno-mcp) |
161
+ | RunAPI MCP overview | [runapi.ai/mcp](https://runapi.ai/mcp) |
162
+ | RunAPI docs | [runapi.ai/docs](https://runapi.ai/docs) |
163
+
164
+ ---
165
+
51
166
  ## License
52
167
 
53
- Apache-2.0
168
+ Licensed under the [Apache License, Version 2.0](LICENSE).
@@ -19,6 +19,47 @@
19
19
  "suno-v5",
20
20
  "suno-v5.5"
21
21
  ],
22
+ "rules": [
23
+ {
24
+ "when": {
25
+ "vocal_mode": "auto_lyrics"
26
+ },
27
+ "required": [
28
+ "prompt"
29
+ ],
30
+ "forbidden": [
31
+ "lyrics",
32
+ "style",
33
+ "title"
34
+ ]
35
+ },
36
+ {
37
+ "when": {
38
+ "vocal_mode": "exact_lyrics"
39
+ },
40
+ "required": [
41
+ "lyrics",
42
+ "style",
43
+ "title"
44
+ ],
45
+ "forbidden": [
46
+ "prompt"
47
+ ]
48
+ },
49
+ {
50
+ "when": {
51
+ "vocal_mode": "instrumental"
52
+ },
53
+ "required": [
54
+ "style",
55
+ "title"
56
+ ],
57
+ "forbidden": [
58
+ "prompt",
59
+ "lyrics"
60
+ ]
61
+ }
62
+ ],
22
63
  "fields_by_model": {
23
64
  "suno-v4": {
24
65
  "model": {
@@ -26,47 +67,6 @@
26
67
  "required": true,
27
68
  "description": "Model slug."
28
69
  },
29
- "rules": [
30
- {
31
- "when": {
32
- "vocal_mode": "auto_lyrics"
33
- },
34
- "required": [
35
- "prompt"
36
- ],
37
- "forbidden": [
38
- "lyrics",
39
- "style",
40
- "title"
41
- ]
42
- },
43
- {
44
- "when": {
45
- "vocal_mode": "exact_lyrics"
46
- },
47
- "required": [
48
- "lyrics",
49
- "style",
50
- "title"
51
- ],
52
- "forbidden": [
53
- "prompt"
54
- ]
55
- },
56
- {
57
- "when": {
58
- "vocal_mode": "instrumental"
59
- },
60
- "required": [
61
- "style",
62
- "title"
63
- ],
64
- "forbidden": [
65
- "prompt",
66
- "lyrics"
67
- ]
68
- }
69
- ],
70
70
  "style": {
71
71
  "type": "string",
72
72
  "description": "Music style."
@@ -145,47 +145,6 @@
145
145
  "required": true,
146
146
  "description": "Model slug."
147
147
  },
148
- "rules": [
149
- {
150
- "when": {
151
- "vocal_mode": "auto_lyrics"
152
- },
153
- "required": [
154
- "prompt"
155
- ],
156
- "forbidden": [
157
- "lyrics",
158
- "style",
159
- "title"
160
- ]
161
- },
162
- {
163
- "when": {
164
- "vocal_mode": "exact_lyrics"
165
- },
166
- "required": [
167
- "lyrics",
168
- "style",
169
- "title"
170
- ],
171
- "forbidden": [
172
- "prompt"
173
- ]
174
- },
175
- {
176
- "when": {
177
- "vocal_mode": "instrumental"
178
- },
179
- "required": [
180
- "style",
181
- "title"
182
- ],
183
- "forbidden": [
184
- "prompt",
185
- "lyrics"
186
- ]
187
- }
188
- ],
189
148
  "style": {
190
149
  "type": "string",
191
150
  "description": "Music style."
@@ -264,47 +223,6 @@
264
223
  "required": true,
265
224
  "description": "Model slug."
266
225
  },
267
- "rules": [
268
- {
269
- "when": {
270
- "vocal_mode": "auto_lyrics"
271
- },
272
- "required": [
273
- "prompt"
274
- ],
275
- "forbidden": [
276
- "lyrics",
277
- "style",
278
- "title"
279
- ]
280
- },
281
- {
282
- "when": {
283
- "vocal_mode": "exact_lyrics"
284
- },
285
- "required": [
286
- "lyrics",
287
- "style",
288
- "title"
289
- ],
290
- "forbidden": [
291
- "prompt"
292
- ]
293
- },
294
- {
295
- "when": {
296
- "vocal_mode": "instrumental"
297
- },
298
- "required": [
299
- "style",
300
- "title"
301
- ],
302
- "forbidden": [
303
- "prompt",
304
- "lyrics"
305
- ]
306
- }
307
- ],
308
226
  "style": {
309
227
  "type": "string",
310
228
  "description": "Music style."
@@ -383,47 +301,6 @@
383
301
  "required": true,
384
302
  "description": "Model slug."
385
303
  },
386
- "rules": [
387
- {
388
- "when": {
389
- "vocal_mode": "auto_lyrics"
390
- },
391
- "required": [
392
- "prompt"
393
- ],
394
- "forbidden": [
395
- "lyrics",
396
- "style",
397
- "title"
398
- ]
399
- },
400
- {
401
- "when": {
402
- "vocal_mode": "exact_lyrics"
403
- },
404
- "required": [
405
- "lyrics",
406
- "style",
407
- "title"
408
- ],
409
- "forbidden": [
410
- "prompt"
411
- ]
412
- },
413
- {
414
- "when": {
415
- "vocal_mode": "instrumental"
416
- },
417
- "required": [
418
- "style",
419
- "title"
420
- ],
421
- "forbidden": [
422
- "prompt",
423
- "lyrics"
424
- ]
425
- }
426
- ],
427
304
  "style": {
428
305
  "type": "string",
429
306
  "description": "Music style."
@@ -502,47 +379,6 @@
502
379
  "required": true,
503
380
  "description": "Model slug."
504
381
  },
505
- "rules": [
506
- {
507
- "when": {
508
- "vocal_mode": "auto_lyrics"
509
- },
510
- "required": [
511
- "prompt"
512
- ],
513
- "forbidden": [
514
- "lyrics",
515
- "style",
516
- "title"
517
- ]
518
- },
519
- {
520
- "when": {
521
- "vocal_mode": "exact_lyrics"
522
- },
523
- "required": [
524
- "lyrics",
525
- "style",
526
- "title"
527
- ],
528
- "forbidden": [
529
- "prompt"
530
- ]
531
- },
532
- {
533
- "when": {
534
- "vocal_mode": "instrumental"
535
- },
536
- "required": [
537
- "style",
538
- "title"
539
- ],
540
- "forbidden": [
541
- "prompt",
542
- "lyrics"
543
- ]
544
- }
545
- ],
546
382
  "style": {
547
383
  "type": "string",
548
384
  "description": "Music style."
@@ -621,47 +457,6 @@
621
457
  "required": true,
622
458
  "description": "Model slug."
623
459
  },
624
- "rules": [
625
- {
626
- "when": {
627
- "vocal_mode": "auto_lyrics"
628
- },
629
- "required": [
630
- "prompt"
631
- ],
632
- "forbidden": [
633
- "lyrics",
634
- "style",
635
- "title"
636
- ]
637
- },
638
- {
639
- "when": {
640
- "vocal_mode": "exact_lyrics"
641
- },
642
- "required": [
643
- "lyrics",
644
- "style",
645
- "title"
646
- ],
647
- "forbidden": [
648
- "prompt"
649
- ]
650
- },
651
- {
652
- "when": {
653
- "vocal_mode": "instrumental"
654
- },
655
- "required": [
656
- "style",
657
- "title"
658
- ],
659
- "forbidden": [
660
- "prompt",
661
- "lyrics"
662
- ]
663
- }
664
- ],
665
460
  "style": {
666
461
  "type": "string",
667
462
  "description": "Music style."
@@ -747,6 +542,47 @@
747
542
  "suno-v5",
748
543
  "suno-v5.5"
749
544
  ],
545
+ "rules": [
546
+ {
547
+ "when": {
548
+ "vocal_mode": "auto_lyrics"
549
+ },
550
+ "required": [
551
+ "prompt"
552
+ ],
553
+ "forbidden": [
554
+ "lyrics",
555
+ "style",
556
+ "title"
557
+ ]
558
+ },
559
+ {
560
+ "when": {
561
+ "vocal_mode": "exact_lyrics"
562
+ },
563
+ "required": [
564
+ "lyrics",
565
+ "style",
566
+ "title"
567
+ ],
568
+ "forbidden": [
569
+ "prompt"
570
+ ]
571
+ },
572
+ {
573
+ "when": {
574
+ "vocal_mode": "instrumental"
575
+ },
576
+ "required": [
577
+ "style",
578
+ "title"
579
+ ],
580
+ "forbidden": [
581
+ "prompt",
582
+ "lyrics"
583
+ ]
584
+ }
585
+ ],
750
586
  "fields_by_model": {
751
587
  "suno-v4": {
752
588
  "model": {
@@ -754,47 +590,6 @@
754
590
  "required": true,
755
591
  "description": "Model slug."
756
592
  },
757
- "rules": [
758
- {
759
- "when": {
760
- "vocal_mode": "auto_lyrics"
761
- },
762
- "required": [
763
- "prompt"
764
- ],
765
- "forbidden": [
766
- "lyrics",
767
- "style",
768
- "title"
769
- ]
770
- },
771
- {
772
- "when": {
773
- "vocal_mode": "exact_lyrics"
774
- },
775
- "required": [
776
- "lyrics",
777
- "style",
778
- "title"
779
- ],
780
- "forbidden": [
781
- "prompt"
782
- ]
783
- },
784
- {
785
- "when": {
786
- "vocal_mode": "instrumental"
787
- },
788
- "required": [
789
- "style",
790
- "title"
791
- ],
792
- "forbidden": [
793
- "prompt",
794
- "lyrics"
795
- ]
796
- }
797
- ],
798
593
  "style": {
799
594
  "type": "string",
800
595
  "description": "Music style."
@@ -869,47 +664,6 @@
869
664
  "required": true,
870
665
  "description": "Model slug."
871
666
  },
872
- "rules": [
873
- {
874
- "when": {
875
- "vocal_mode": "auto_lyrics"
876
- },
877
- "required": [
878
- "prompt"
879
- ],
880
- "forbidden": [
881
- "lyrics",
882
- "style",
883
- "title"
884
- ]
885
- },
886
- {
887
- "when": {
888
- "vocal_mode": "exact_lyrics"
889
- },
890
- "required": [
891
- "lyrics",
892
- "style",
893
- "title"
894
- ],
895
- "forbidden": [
896
- "prompt"
897
- ]
898
- },
899
- {
900
- "when": {
901
- "vocal_mode": "instrumental"
902
- },
903
- "required": [
904
- "style",
905
- "title"
906
- ],
907
- "forbidden": [
908
- "prompt",
909
- "lyrics"
910
- ]
911
- }
912
- ],
913
667
  "style": {
914
668
  "type": "string",
915
669
  "description": "Music style."
@@ -984,47 +738,6 @@
984
738
  "required": true,
985
739
  "description": "Model slug."
986
740
  },
987
- "rules": [
988
- {
989
- "when": {
990
- "vocal_mode": "auto_lyrics"
991
- },
992
- "required": [
993
- "prompt"
994
- ],
995
- "forbidden": [
996
- "lyrics",
997
- "style",
998
- "title"
999
- ]
1000
- },
1001
- {
1002
- "when": {
1003
- "vocal_mode": "exact_lyrics"
1004
- },
1005
- "required": [
1006
- "lyrics",
1007
- "style",
1008
- "title"
1009
- ],
1010
- "forbidden": [
1011
- "prompt"
1012
- ]
1013
- },
1014
- {
1015
- "when": {
1016
- "vocal_mode": "instrumental"
1017
- },
1018
- "required": [
1019
- "style",
1020
- "title"
1021
- ],
1022
- "forbidden": [
1023
- "prompt",
1024
- "lyrics"
1025
- ]
1026
- }
1027
- ],
1028
741
  "style": {
1029
742
  "type": "string",
1030
743
  "description": "Music style."
@@ -1099,47 +812,6 @@
1099
812
  "required": true,
1100
813
  "description": "Model slug."
1101
814
  },
1102
- "rules": [
1103
- {
1104
- "when": {
1105
- "vocal_mode": "auto_lyrics"
1106
- },
1107
- "required": [
1108
- "prompt"
1109
- ],
1110
- "forbidden": [
1111
- "lyrics",
1112
- "style",
1113
- "title"
1114
- ]
1115
- },
1116
- {
1117
- "when": {
1118
- "vocal_mode": "exact_lyrics"
1119
- },
1120
- "required": [
1121
- "lyrics",
1122
- "style",
1123
- "title"
1124
- ],
1125
- "forbidden": [
1126
- "prompt"
1127
- ]
1128
- },
1129
- {
1130
- "when": {
1131
- "vocal_mode": "instrumental"
1132
- },
1133
- "required": [
1134
- "style",
1135
- "title"
1136
- ],
1137
- "forbidden": [
1138
- "prompt",
1139
- "lyrics"
1140
- ]
1141
- }
1142
- ],
1143
815
  "style": {
1144
816
  "type": "string",
1145
817
  "description": "Music style."
@@ -1214,47 +886,6 @@
1214
886
  "required": true,
1215
887
  "description": "Model slug."
1216
888
  },
1217
- "rules": [
1218
- {
1219
- "when": {
1220
- "vocal_mode": "auto_lyrics"
1221
- },
1222
- "required": [
1223
- "prompt"
1224
- ],
1225
- "forbidden": [
1226
- "lyrics",
1227
- "style",
1228
- "title"
1229
- ]
1230
- },
1231
- {
1232
- "when": {
1233
- "vocal_mode": "exact_lyrics"
1234
- },
1235
- "required": [
1236
- "lyrics",
1237
- "style",
1238
- "title"
1239
- ],
1240
- "forbidden": [
1241
- "prompt"
1242
- ]
1243
- },
1244
- {
1245
- "when": {
1246
- "vocal_mode": "instrumental"
1247
- },
1248
- "required": [
1249
- "style",
1250
- "title"
1251
- ],
1252
- "forbidden": [
1253
- "prompt",
1254
- "lyrics"
1255
- ]
1256
- }
1257
- ],
1258
889
  "style": {
1259
890
  "type": "string",
1260
891
  "description": "Music style."
@@ -1329,47 +960,6 @@
1329
960
  "required": true,
1330
961
  "description": "Model slug."
1331
962
  },
1332
- "rules": [
1333
- {
1334
- "when": {
1335
- "vocal_mode": "auto_lyrics"
1336
- },
1337
- "required": [
1338
- "prompt"
1339
- ],
1340
- "forbidden": [
1341
- "lyrics",
1342
- "style",
1343
- "title"
1344
- ]
1345
- },
1346
- {
1347
- "when": {
1348
- "vocal_mode": "exact_lyrics"
1349
- },
1350
- "required": [
1351
- "lyrics",
1352
- "style",
1353
- "title"
1354
- ],
1355
- "forbidden": [
1356
- "prompt"
1357
- ]
1358
- },
1359
- {
1360
- "when": {
1361
- "vocal_mode": "instrumental"
1362
- },
1363
- "required": [
1364
- "style",
1365
- "title"
1366
- ],
1367
- "forbidden": [
1368
- "prompt",
1369
- "lyrics"
1370
- ]
1371
- }
1372
- ],
1373
963
  "style": {
1374
964
  "type": "string",
1375
965
  "description": "Music style."
@@ -2052,6 +1642,47 @@
2052
1642
  "suno-v5",
2053
1643
  "suno-v5.5"
2054
1644
  ],
1645
+ "rules": [
1646
+ {
1647
+ "when": {
1648
+ "vocal_mode": "auto_lyrics"
1649
+ },
1650
+ "required": [
1651
+ "prompt"
1652
+ ],
1653
+ "forbidden": [
1654
+ "lyrics",
1655
+ "style",
1656
+ "title"
1657
+ ]
1658
+ },
1659
+ {
1660
+ "when": {
1661
+ "vocal_mode": "exact_lyrics"
1662
+ },
1663
+ "required": [
1664
+ "lyrics",
1665
+ "style",
1666
+ "title"
1667
+ ],
1668
+ "forbidden": [
1669
+ "prompt"
1670
+ ]
1671
+ },
1672
+ {
1673
+ "when": {
1674
+ "vocal_mode": "instrumental"
1675
+ },
1676
+ "required": [
1677
+ "style",
1678
+ "title"
1679
+ ],
1680
+ "forbidden": [
1681
+ "prompt",
1682
+ "lyrics"
1683
+ ]
1684
+ }
1685
+ ],
2055
1686
  "fields_by_model": {
2056
1687
  "suno-v4": {
2057
1688
  "model": {
@@ -2059,47 +1690,6 @@
2059
1690
  "required": true,
2060
1691
  "description": "Model slug."
2061
1692
  },
2062
- "rules": [
2063
- {
2064
- "when": {
2065
- "vocal_mode": "auto_lyrics"
2066
- },
2067
- "required": [
2068
- "prompt"
2069
- ],
2070
- "forbidden": [
2071
- "lyrics",
2072
- "style",
2073
- "title"
2074
- ]
2075
- },
2076
- {
2077
- "when": {
2078
- "vocal_mode": "exact_lyrics"
2079
- },
2080
- "required": [
2081
- "lyrics",
2082
- "style",
2083
- "title"
2084
- ],
2085
- "forbidden": [
2086
- "prompt"
2087
- ]
2088
- },
2089
- {
2090
- "when": {
2091
- "vocal_mode": "instrumental"
2092
- },
2093
- "required": [
2094
- "style",
2095
- "title"
2096
- ],
2097
- "forbidden": [
2098
- "prompt",
2099
- "lyrics"
2100
- ]
2101
- }
2102
- ],
2103
1693
  "style": {
2104
1694
  "type": "string",
2105
1695
  "description": "Music style."
@@ -2181,47 +1771,6 @@
2181
1771
  "required": true,
2182
1772
  "description": "Model slug."
2183
1773
  },
2184
- "rules": [
2185
- {
2186
- "when": {
2187
- "vocal_mode": "auto_lyrics"
2188
- },
2189
- "required": [
2190
- "prompt"
2191
- ],
2192
- "forbidden": [
2193
- "lyrics",
2194
- "style",
2195
- "title"
2196
- ]
2197
- },
2198
- {
2199
- "when": {
2200
- "vocal_mode": "exact_lyrics"
2201
- },
2202
- "required": [
2203
- "lyrics",
2204
- "style",
2205
- "title"
2206
- ],
2207
- "forbidden": [
2208
- "prompt"
2209
- ]
2210
- },
2211
- {
2212
- "when": {
2213
- "vocal_mode": "instrumental"
2214
- },
2215
- "required": [
2216
- "style",
2217
- "title"
2218
- ],
2219
- "forbidden": [
2220
- "prompt",
2221
- "lyrics"
2222
- ]
2223
- }
2224
- ],
2225
1774
  "style": {
2226
1775
  "type": "string",
2227
1776
  "description": "Music style."
@@ -2303,47 +1852,6 @@
2303
1852
  "required": true,
2304
1853
  "description": "Model slug."
2305
1854
  },
2306
- "rules": [
2307
- {
2308
- "when": {
2309
- "vocal_mode": "auto_lyrics"
2310
- },
2311
- "required": [
2312
- "prompt"
2313
- ],
2314
- "forbidden": [
2315
- "lyrics",
2316
- "style",
2317
- "title"
2318
- ]
2319
- },
2320
- {
2321
- "when": {
2322
- "vocal_mode": "exact_lyrics"
2323
- },
2324
- "required": [
2325
- "lyrics",
2326
- "style",
2327
- "title"
2328
- ],
2329
- "forbidden": [
2330
- "prompt"
2331
- ]
2332
- },
2333
- {
2334
- "when": {
2335
- "vocal_mode": "instrumental"
2336
- },
2337
- "required": [
2338
- "style",
2339
- "title"
2340
- ],
2341
- "forbidden": [
2342
- "prompt",
2343
- "lyrics"
2344
- ]
2345
- }
2346
- ],
2347
1855
  "style": {
2348
1856
  "type": "string",
2349
1857
  "description": "Music style."
@@ -2425,47 +1933,6 @@
2425
1933
  "required": true,
2426
1934
  "description": "Model slug."
2427
1935
  },
2428
- "rules": [
2429
- {
2430
- "when": {
2431
- "vocal_mode": "auto_lyrics"
2432
- },
2433
- "required": [
2434
- "prompt"
2435
- ],
2436
- "forbidden": [
2437
- "lyrics",
2438
- "style",
2439
- "title"
2440
- ]
2441
- },
2442
- {
2443
- "when": {
2444
- "vocal_mode": "exact_lyrics"
2445
- },
2446
- "required": [
2447
- "lyrics",
2448
- "style",
2449
- "title"
2450
- ],
2451
- "forbidden": [
2452
- "prompt"
2453
- ]
2454
- },
2455
- {
2456
- "when": {
2457
- "vocal_mode": "instrumental"
2458
- },
2459
- "required": [
2460
- "style",
2461
- "title"
2462
- ],
2463
- "forbidden": [
2464
- "prompt",
2465
- "lyrics"
2466
- ]
2467
- }
2468
- ],
2469
1936
  "style": {
2470
1937
  "type": "string",
2471
1938
  "description": "Music style."
@@ -2547,47 +2014,6 @@
2547
2014
  "required": true,
2548
2015
  "description": "Model slug."
2549
2016
  },
2550
- "rules": [
2551
- {
2552
- "when": {
2553
- "vocal_mode": "auto_lyrics"
2554
- },
2555
- "required": [
2556
- "prompt"
2557
- ],
2558
- "forbidden": [
2559
- "lyrics",
2560
- "style",
2561
- "title"
2562
- ]
2563
- },
2564
- {
2565
- "when": {
2566
- "vocal_mode": "exact_lyrics"
2567
- },
2568
- "required": [
2569
- "lyrics",
2570
- "style",
2571
- "title"
2572
- ],
2573
- "forbidden": [
2574
- "prompt"
2575
- ]
2576
- },
2577
- {
2578
- "when": {
2579
- "vocal_mode": "instrumental"
2580
- },
2581
- "required": [
2582
- "style",
2583
- "title"
2584
- ],
2585
- "forbidden": [
2586
- "prompt",
2587
- "lyrics"
2588
- ]
2589
- }
2590
- ],
2591
2017
  "style": {
2592
2018
  "type": "string",
2593
2019
  "description": "Music style."
@@ -2669,47 +2095,6 @@
2669
2095
  "required": true,
2670
2096
  "description": "Model slug."
2671
2097
  },
2672
- "rules": [
2673
- {
2674
- "when": {
2675
- "vocal_mode": "auto_lyrics"
2676
- },
2677
- "required": [
2678
- "prompt"
2679
- ],
2680
- "forbidden": [
2681
- "lyrics",
2682
- "style",
2683
- "title"
2684
- ]
2685
- },
2686
- {
2687
- "when": {
2688
- "vocal_mode": "exact_lyrics"
2689
- },
2690
- "required": [
2691
- "lyrics",
2692
- "style",
2693
- "title"
2694
- ],
2695
- "forbidden": [
2696
- "prompt"
2697
- ]
2698
- },
2699
- {
2700
- "when": {
2701
- "vocal_mode": "instrumental"
2702
- },
2703
- "required": [
2704
- "style",
2705
- "title"
2706
- ],
2707
- "forbidden": [
2708
- "prompt",
2709
- "lyrics"
2710
- ]
2711
- }
2712
- ],
2713
2098
  "style": {
2714
2099
  "type": "string",
2715
2100
  "description": "Music style."
@@ -1,5 +1,5 @@
1
1
  export declare const META: {
2
2
  readonly name: "@runapi.ai/suno-mcp";
3
- readonly version: "0.1.2";
3
+ readonly version: "0.1.3";
4
4
  readonly lineSlug: "suno";
5
5
  };
package/dist/src/meta.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export const META = {
2
2
  name: "@runapi.ai/suno-mcp",
3
- version: "0.1.2",
3
+ version: "0.1.3",
4
4
  lineSlug: "suno"
5
5
  };
6
6
  //# sourceMappingURL=meta.js.map
@@ -2,7 +2,6 @@ import { z } from "zod";
2
2
  import { createModelServer, findModelForAction, findModels, friendlyError, jsonText, priceForModel, RunApiClient, taskStatus } from "@runapi.ai/mcp-core";
3
3
  import { readContract, readPricing } from "./data.js";
4
4
  import { META } from "./meta.js";
5
- const RESERVED_FIELDS = new Set(["model", "rules"]);
6
5
  function lineService(contract) {
7
6
  return Object.keys(contract.actions)[0]?.split("/")[0] ?? META.lineSlug;
8
7
  }
@@ -22,34 +21,8 @@ function lineModels(contract) {
22
21
  }
23
22
  return [...seen];
24
23
  }
25
- // No-model endpoints (models: []) carry their fields under the "_" roster.
26
- function rostersForAction(action) {
27
- return action.models.length > 0 ? action.models : ["_"];
28
- }
29
- function fieldsForAction(action) {
30
- const fields = {};
31
- for (const model of rostersForAction(action)) {
32
- const roster = action.fields_by_model[model] ?? {};
33
- for (const [name, field] of Object.entries(roster)) {
34
- if (RESERVED_FIELDS.has(name)) {
35
- continue;
36
- }
37
- if (!(name in fields)) {
38
- fields[name] = field;
39
- }
40
- }
41
- }
42
- return fields;
43
- }
44
24
  function rulesForAction(action) {
45
- for (const model of rostersForAction(action)) {
46
- const roster = action.fields_by_model[model] ?? {};
47
- const rules = roster.rules;
48
- if (Array.isArray(rules) && rules.length > 0) {
49
- return rules;
50
- }
51
- }
52
- return [];
25
+ return action.rules ?? [];
53
26
  }
54
27
  function buildTools(contract) {
55
28
  const tools = [];
@@ -62,8 +35,7 @@ function buildTools(contract) {
62
35
  description: `Create a ${action.model} task on RunAPI (${endpoint.replace(/_/g, " ")}). Returns a task id, status, and output URLs.`,
63
36
  service,
64
37
  action: endpoint,
65
- models: action.models,
66
- inputSchema: fieldsForAction(action)
38
+ models: action.models
67
39
  });
68
40
  inputRules[endpoint] = rulesForAction(action);
69
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@runapi.ai/suno-mcp",
3
- "version": "0.1.2",
4
- "description": "RunAPI MCP server for one model line: create tasks, poll status, and check pricing with one API key.",
3
+ "version": "0.1.4",
4
+ "description": "RunAPI Suno MCP server for multimodal generation: create tasks, poll results, and check pricing across 6 model variants from Claude Code, Codex, Cursor, and VS Code.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
7
7
  "bin": {
@@ -25,13 +25,29 @@
25
25
  },
26
26
  "keywords": [
27
27
  "runapi",
28
+ "runapi-ai",
28
29
  "mcp",
30
+ "mcp-server",
29
31
  "model-context-protocol",
30
- "ai"
32
+ "ai-agents",
33
+ "claude-code",
34
+ "cursor",
35
+ "vscode",
36
+ "suno",
37
+ "suno-mcp",
38
+ "suno-api",
39
+ "music-generation",
40
+ "ai-music",
41
+ "audio-generation",
42
+ "ai-audio",
43
+ "cover-audio",
44
+ "create-mashup",
45
+ "extend-music",
46
+ "generate-lyrics"
31
47
  ],
32
48
  "author": "RunAPI",
33
49
  "license": "Apache-2.0",
34
- "homepage": "https://runapi.ai",
50
+ "homepage": "https://runapi.ai/models/suno",
35
51
  "repository": {
36
52
  "type": "git",
37
53
  "url": "git+https://github.com/runapi-ai/suno-mcp.git"
@@ -44,7 +60,7 @@
44
60
  },
45
61
  "dependencies": {
46
62
  "@modelcontextprotocol/sdk": "^1.29.0",
47
- "@runapi.ai/mcp-core": "0.1.1",
63
+ "@runapi.ai/mcp-core": "0.1.2",
48
64
  "zod": "^3.25.76"
49
65
  },
50
66
  "devDependencies": {
package/server.json CHANGED
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
3
  "name": "io.github.runapi-builder/suno-mcp",
4
- "description": "RunAPI MCP server for Suno: create tasks, poll status, and check pricing.",
4
+ "description": "RunAPI MCP server for Suno: create tasks, poll status, check pricing.",
5
5
  "repository": {
6
6
  "url": "https://github.com/runapi-ai/suno-mcp",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.1.2",
9
+ "version": "0.1.4",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "@runapi.ai/suno-mcp",
14
- "version": "0.1.2",
14
+ "version": "0.1.4",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },
18
18
  "environmentVariables": [
19
19
  {
20
- "description": "RunAPI API key. Get one at https://runapi.ai",
20
+ "description": "RunAPI API key. Create one at https://runapi.ai",
21
21
  "isRequired": true,
22
22
  "format": "string",
23
23
  "isSecret": true,