@ssemble/mcp-server 1.0.4 → 1.0.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 +29 -1
- package/package.json +2 -2
- package/server.json +3 -3
- package/src/api/client.js +3 -3
- package/src/tools/create-short.js +1 -0
- package/src/transports/stdio.js +1 -1
- package/src/utils/format.js +15 -2
package/README.md
CHANGED
|
@@ -9,6 +9,7 @@ Works with **Claude Desktop**, **Claude Code**, **Cursor**, **VS Code**, **Winds
|
|
|
9
9
|
This MCP server lets AI assistants create short-form video clips from YouTube videos using Ssemble's AI clipping engine. The AI can:
|
|
10
10
|
|
|
11
11
|
- **Create shorts** from YouTube URLs or uploaded files
|
|
12
|
+
- **Webhook callbacks** — get notified when processing completes (works with n8n, Zapier, Make)
|
|
12
13
|
- **Browse assets** — caption templates, background music, gameplay overlays, meme hooks
|
|
13
14
|
- **Track processing** — check progress and retrieve completed clips
|
|
14
15
|
- **Manage requests** — list history, get results, delete old requests
|
|
@@ -91,12 +92,39 @@ Add to your MCP settings:
|
|
|
91
92
|
|
|
92
93
|
## How Processing Works
|
|
93
94
|
|
|
94
|
-
Video processing takes 5-30 minutes.
|
|
95
|
+
Video processing takes 5-30 minutes. Two workflows available:
|
|
95
96
|
|
|
97
|
+
### Option A: Polling (manual check)
|
|
96
98
|
1. `create_short` — submits the job and returns instantly with a request ID
|
|
97
99
|
2. `get_status` — check progress anytime (queued → processing → completed)
|
|
98
100
|
3. `get_shorts` — retrieve the generated clips when done
|
|
99
101
|
|
|
102
|
+
### Option B: Webhook (automated)
|
|
103
|
+
1. `create_short` with `webhookUrl` — submits the job with a callback URL
|
|
104
|
+
2. When processing completes or fails, the API sends an HTTP POST to your URL with the results
|
|
105
|
+
3. No polling needed — ideal for n8n, Zapier, Make, and custom backend integrations
|
|
106
|
+
|
|
107
|
+
Webhook payload example:
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"event": "shorts.completed",
|
|
111
|
+
"requestId": "507f1f77bcf86cd799439011",
|
|
112
|
+
"status": "completed",
|
|
113
|
+
"timestamp": "2026-03-30T12:00:00.000Z",
|
|
114
|
+
"data": {
|
|
115
|
+
"shorts": [
|
|
116
|
+
{
|
|
117
|
+
"id": "...",
|
|
118
|
+
"title": "AI-Generated Title",
|
|
119
|
+
"video_url": "https://...",
|
|
120
|
+
"duration": 45,
|
|
121
|
+
"viral_score": 8.5
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
100
128
|
## Usage Examples
|
|
101
129
|
|
|
102
130
|
**Create shorts from a YouTube video:**
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ssemble/mcp-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"mcpName": "com.ssemble/mcp-server",
|
|
5
|
-
"description": "MCP server for Ssemble AI Clipping — create viral short-form videos from any AI assistant",
|
|
5
|
+
"description": "MCP server for Ssemble AI Clipping — create viral short-form videos from any AI assistant. Webhook callbacks for n8n, Zapier, and Make automation.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
8
|
"ssemble-mcp": "./src/transports/stdio.js"
|
package/server.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
3
|
"name": "com.ssemble/mcp-server",
|
|
4
4
|
"title": "Ssemble AI Clipping",
|
|
5
|
-
"description": "Create AI-powered short-form video clips from YouTube videos using any AI assistant.",
|
|
6
|
-
"version": "1.0.
|
|
5
|
+
"description": "Create AI-powered short-form video clips from YouTube videos using any AI assistant. Webhook callbacks for n8n, Zapier, and Make automation.",
|
|
6
|
+
"version": "1.0.6",
|
|
7
7
|
"websiteUrl": "https://www.ssemble.com",
|
|
8
8
|
"repository": {
|
|
9
9
|
"url": "https://github.com/ssembleinc/ssemble-mcp-server",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"registryType": "npm",
|
|
15
15
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
16
16
|
"identifier": "@ssemble/mcp-server",
|
|
17
|
-
"version": "1.0.
|
|
17
|
+
"version": "1.0.6",
|
|
18
18
|
"transport": {
|
|
19
19
|
"type": "stdio"
|
|
20
20
|
},
|
package/src/api/client.js
CHANGED
|
@@ -34,13 +34,13 @@ export class SsembleClient {
|
|
|
34
34
|
if (!this.apiKey) {
|
|
35
35
|
throw new SsembleApiError(401, {
|
|
36
36
|
code: 'missing_api_key',
|
|
37
|
-
message: 'Ssemble API key required. Pass via X-Ssemble-API-Key header when using the remote endpoint, or set SSEMBLE_API_KEY env var for local usage. Get your key at https://app.ssemble.com
|
|
37
|
+
message: 'Ssemble API key required. Pass via X-Ssemble-API-Key header when using the remote endpoint, or set SSEMBLE_API_KEY env var for local usage. Get your key at https://app.ssemble.com/api-keys',
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
40
|
if (!this.apiKey.startsWith('sk_ssemble_')) {
|
|
41
41
|
throw new SsembleApiError(401, {
|
|
42
42
|
code: 'invalid_api_key',
|
|
43
|
-
message: 'Invalid API key format. Must start with sk_ssemble_',
|
|
43
|
+
message: 'Invalid API key format. Must start with sk_ssemble_. Get your key at https://app.ssemble.com/api-keys',
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -60,7 +60,7 @@ export class SsembleClient {
|
|
|
60
60
|
const headers = {
|
|
61
61
|
'X-API-Key': this.apiKey,
|
|
62
62
|
'Content-Type': 'application/json',
|
|
63
|
-
'User-Agent': 'ssemble-mcp-server/1.0.
|
|
63
|
+
'User-Agent': 'ssemble-mcp-server/1.0.5',
|
|
64
64
|
};
|
|
65
65
|
|
|
66
66
|
const options = { method, headers };
|
|
@@ -28,6 +28,7 @@ const schema = {
|
|
|
28
28
|
musicName: z.string().describe('Exact track name from list_music (case-sensitive)').optional(),
|
|
29
29
|
musicVolume: z.number().min(0).max(100).default(10).describe('Music volume 0-100').optional(),
|
|
30
30
|
layout: z.enum(['auto', 'fill', 'fit', 'square']).default('auto').describe('Video framing layout').optional(),
|
|
31
|
+
webhookUrl: z.string().url().describe('Optional webhook URL for completion/failure notifications. Receives a POST with results when processing finishes.').optional(),
|
|
31
32
|
};
|
|
32
33
|
|
|
33
34
|
export function registerCreateShort(server, client) {
|
package/src/transports/stdio.js
CHANGED
|
@@ -11,7 +11,7 @@ import { createSsembleMcpServer } from '../index.js';
|
|
|
11
11
|
const apiKey = process.env.SSEMBLE_API_KEY;
|
|
12
12
|
if (!apiKey) {
|
|
13
13
|
console.error('Error: SSEMBLE_API_KEY environment variable is required.');
|
|
14
|
-
console.error('Get your API key at https://app.ssemble.com
|
|
14
|
+
console.error('Get your API key at https://app.ssemble.com/api-keys');
|
|
15
15
|
process.exit(1);
|
|
16
16
|
}
|
|
17
17
|
|
package/src/utils/format.js
CHANGED
|
@@ -171,11 +171,24 @@ export function formatDeleteResponse(result) {
|
|
|
171
171
|
|
|
172
172
|
export function formatError(error) {
|
|
173
173
|
if (error instanceof Error && error.code) {
|
|
174
|
-
let text = `**Error**: ${error.message}`;
|
|
175
|
-
if (error.code) text += ` (${error.code})`;
|
|
174
|
+
let text = `**Error**: ${error.message} (${error.code})`;
|
|
176
175
|
if (error.details) {
|
|
177
176
|
text += `\n\n**Details**: ${JSON.stringify(error.details, null, 2)}`;
|
|
178
177
|
}
|
|
178
|
+
|
|
179
|
+
// Add helpful guidance based on error code
|
|
180
|
+
const helpLinks = {
|
|
181
|
+
missing_api_key: '\n\n**Get your API key**: https://app.ssemble.com/api-keys\n**Setup guide**: https://www.npmjs.com/package/@ssemble/mcp-server',
|
|
182
|
+
invalid_api_key: '\n\n**Get a valid API key**: https://app.ssemble.com/api-keys\nAPI keys start with `sk_ssemble_` and are 43 characters long.',
|
|
183
|
+
subscription_required: '\n\n**Subscribe to a plan**: https://app.ssemble.com/pricing\nAn active subscription is required to use the API.',
|
|
184
|
+
insufficient_credits: '\n\n**Get credits**: https://app.ssemble.com/pricing\nEach short creation costs 1 credit.',
|
|
185
|
+
user_not_found: '\n\n**Create an account**: https://app.ssemble.com\nThen generate an API key at https://app.ssemble.com/api-keys',
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
if (helpLinks[error.code]) {
|
|
189
|
+
text += helpLinks[error.code];
|
|
190
|
+
}
|
|
191
|
+
|
|
179
192
|
if (error.rateLimits?.hourlyRemaining) {
|
|
180
193
|
text += formatRateLimits(error.rateLimits);
|
|
181
194
|
}
|