instantclips-mcp 1.2.0 → 1.3.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/README.es.md +121 -48
- package/README.md +114 -46
- package/README.zh-CN.md +100 -42
- package/manifest/instantclips-mcp.json +80 -60
- package/package.json +1 -1
package/README.es.md
CHANGED
|
@@ -2,11 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) · **Español** · [简体中文](README.zh-CN.md)
|
|
4
4
|
|
|
5
|
+
[](https://m8ven.ai/mcp/instantclips-mcp-1k56q7)
|
|
6
|
+
|
|
5
7
|
[InstantClips](https://instantclips.ai) convierte un producto de comercio electrónico en vídeos
|
|
6
8
|
verticales cortos para TikTok, Instagram Reels y Stories. Funciona como un **servidor MCP alojado**,
|
|
7
9
|
por lo que Claude Code, Codex, Cursor, VS Code, la aplicación de Claude, ChatGPT o cualquier otro
|
|
8
|
-
cliente MCP pueden hacer lo mismo que la aplicación web: importar un producto, preparar
|
|
9
|
-
|
|
10
|
+
cliente MCP pueden hacer lo mismo que la aplicación web: importar un producto, preparar el plan y
|
|
11
|
+
generar el vídeo.
|
|
12
|
+
|
|
13
|
+
**No es un generador de texto a vídeo.** InstantClips lee la página del producto (fotos, precio,
|
|
14
|
+
detalles) y construye el anuncio a partir de lo que realmente hay allí. El plan se escribe primero
|
|
15
|
+
y se te muestra; el vídeo sigue el plan. Por eso resulta lo bastante económico para recorrer un
|
|
16
|
+
catálogo entero, y por eso el resultado es el producto que vendes y no una suposición.
|
|
17
|
+
|
|
18
|
+
Gratis para empezar: los créditos de bienvenida cubren el primer vídeo y no hace falta introducir
|
|
19
|
+
ninguna tarjeta. Después, paquetes de créditos de pago único o una membresía Agency para quien
|
|
20
|
+
gestiona varias marcas. Consulta los [precios](https://instantclips.ai/#pricing).
|
|
21
|
+
|
|
22
|
+
- **Dónde encaja.** Junto a un programador de publicaciones (Postiz, Buffer) que publique lo que
|
|
23
|
+
se genera. Junto a una herramienta de atribución que te diga qué gancho funcionó. En lugar de un
|
|
24
|
+
editor cuando tienes una página de producto y ningún metraje.
|
|
25
|
+
- **Para qué no sirve.** Películas cinematográficas de marca. Un presentador leyendo tu guion.
|
|
26
|
+
4K horizontal. Productos sin página y sin fotos.
|
|
27
|
+
- **Pensado para.** Vendedores de Shopify, dropshippers, marcas y agencias que llevan las redes de
|
|
28
|
+
varias tiendas a la vez.
|
|
10
29
|
|
|
11
30
|
**El servidor del producto permanece alojado.** Este repositorio contiene su guía de conexión, los
|
|
12
31
|
metadatos de registro, un cliente HTTP de ejemplo y un pequeño adaptador stdio de código abierto
|
|
@@ -17,33 +36,41 @@ sigue siendo la fuente de verdad; la implementación del producto no se duplica
|
|
|
17
36
|
|
|
18
37
|
## Endpoint
|
|
19
38
|
|
|
20
|
-
| |
|
|
21
|
-
| ---------- |
|
|
22
|
-
| Endpoint | `https://app.instantclips.ai/mcp`
|
|
23
|
-
| Transporte | Streamable HTTP, sin estado
|
|
24
|
-
| Método | `POST`, JSON-RPC 2.0
|
|
25
|
-
| Auth | `Authorization: Bearer <token>`
|
|
39
|
+
| | |
|
|
40
|
+
| ---------- | ------------------------------------------------------------------------------------------------- |
|
|
41
|
+
| Endpoint | `https://app.instantclips.ai/mcp` |
|
|
42
|
+
| Transporte | Streamable HTTP, sin estado |
|
|
43
|
+
| Método | `POST`, JSON-RPC 2.0 |
|
|
44
|
+
| Auth | Inicio de sesión cuando el cliente lo pida (OAuth 2.1), o `Authorization: Bearer <token>` para procesos sin navegador |
|
|
45
|
+
|
|
46
|
+
Pega una sola dirección en tu asistente e inicia sesión cuando te lo pida. Esa es toda la
|
|
47
|
+
configuración. La primera vez que llama, el servidor te lleva a iniciar sesión en InstantClips y a
|
|
48
|
+
autorizar al asistente; no hay claves que copiar. Cada asistente que autorizas aparece en
|
|
49
|
+
**Aplicaciones autorizadas** dentro de los ajustes, donde puedes desconectarlo.
|
|
26
50
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
créditos gratuitos para empezar.
|
|
51
|
+
La conexión es con tu propia cuenta: las mismas marcas, productos, créditos y límites del plan que
|
|
52
|
+
en la aplicación web. Al iniciar sesión se crea una cuenta si todavía no tienes una, con créditos
|
|
53
|
+
para el primer vídeo.
|
|
31
54
|
|
|
32
|
-
Al abrir el endpoint en un navegador
|
|
33
|
-
|
|
55
|
+
Al abrir el endpoint en un navegador aparece la
|
|
56
|
+
[página de configuración](https://app.instantclips.ai/mcp) en lugar de un error de protocolo, con
|
|
57
|
+
botones de instalación de un clic para Cursor y VS Code.
|
|
34
58
|
|
|
35
59
|
## Instalación
|
|
36
60
|
|
|
37
|
-
Conéctate directamente al endpoint alojado siempre que tu cliente admita Streamable HTTP
|
|
38
|
-
|
|
39
|
-
|
|
61
|
+
Conéctate directamente al endpoint alojado siempre que tu cliente admita Streamable HTTP; te
|
|
62
|
+
guiará por el inicio de sesión la primera vez. Usa un token y el adaptador stdio (en «¿Sin
|
|
63
|
+
navegador?», más abajo) solo para scripts y procesos automatizados que no pueden abrir una página
|
|
64
|
+
de inicio de sesión.
|
|
40
65
|
|
|
41
66
|
### Claude Code
|
|
42
67
|
|
|
43
68
|
```bash
|
|
44
|
-
claude mcp add --transport http instantclips https://app.instantclips.ai/mcp
|
|
69
|
+
claude mcp add --transport http instantclips https://app.instantclips.ai/mcp
|
|
45
70
|
```
|
|
46
71
|
|
|
72
|
+
Después ejecuta `/mcp` dentro de Claude Code y elige InstantClips para iniciar sesión.
|
|
73
|
+
|
|
47
74
|
### Codex
|
|
48
75
|
|
|
49
76
|
Añade lo siguiente a `~/.codex/config.toml`; la configuración se aplica a la CLI, la aplicación y
|
|
@@ -52,13 +79,59 @@ la extensión del IDE:
|
|
|
52
79
|
```toml
|
|
53
80
|
[mcp_servers.instantclips]
|
|
54
81
|
url = "https://app.instantclips.ai/mcp"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Después ejecuta `codex mcp login instantclips` para iniciar sesión.
|
|
85
|
+
|
|
86
|
+
### Cursor y VS Code
|
|
87
|
+
|
|
88
|
+
La [página de configuración](https://app.instantclips.ai/mcp) incluye botones de instalación de un
|
|
89
|
+
clic. Abren la aplicación, añaden InstantClips y te piden iniciar sesión la primera vez.
|
|
90
|
+
|
|
91
|
+
### Aplicación de Claude y ChatGPT
|
|
92
|
+
|
|
93
|
+
Aplicación de Claude: añade un conector personalizado con esta dirección e inicia sesión cuando te
|
|
94
|
+
lo pida. ChatGPT en la web: activa el modo de desarrollador en Ajustes, Apps, Avanzado y añade la
|
|
95
|
+
dirección como conector; en un espacio de trabajo Business o Enterprise, un administrador la
|
|
96
|
+
publica como aplicación para todo el equipo. La aplicación de escritorio de ChatGPT acepta la misma
|
|
97
|
+
dirección en Ajustes, Servidores MCP, y la comparte con Codex.
|
|
98
|
+
|
|
99
|
+
### Cualquier otro cliente o agente MCP
|
|
100
|
+
|
|
101
|
+
OpenClaw, Hermes o un agente que hayas creado: conéctalo a la dirección mediante Streamable HTTP.
|
|
102
|
+
El servidor anuncia su flujo de inicio de sesión de la forma estándar, así que un cliente que siga
|
|
103
|
+
la especificación no necesita nada más. Lo que no pueda abrir una página de inicio de sesión usa un
|
|
104
|
+
token, como se explica a continuación.
|
|
105
|
+
|
|
106
|
+
### ¿Sin navegador? Usa un token de acceso
|
|
107
|
+
|
|
108
|
+
Los scripts, los trabajos de CI y los agentes que no pueden abrir una página de inicio de sesión se
|
|
109
|
+
autentican con un token de larga duración. Genera uno en
|
|
110
|
+
**[app.instantclips.ai/settings#ai-access](https://app.instantclips.ai/settings#ai-access)**. Da
|
|
111
|
+
acceso completo a tu cuenta, así que mantenlo fuera de cualquier cosa que subas a un repositorio.
|
|
112
|
+
|
|
113
|
+
Con un token, los mismos clientes quedan así:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Claude Code
|
|
117
|
+
claude mcp add --transport http instantclips https://app.instantclips.ai/mcp --header "Authorization: Bearer YOUR_TOKEN"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
```toml
|
|
121
|
+
# Codex, en ~/.codex/config.toml
|
|
122
|
+
[mcp_servers.instantclips]
|
|
123
|
+
url = "https://app.instantclips.ai/mcp"
|
|
55
124
|
http_headers = { Authorization = "Bearer YOUR_TOKEN" }
|
|
56
125
|
```
|
|
57
126
|
|
|
58
|
-
Para no guardar el token en el archivo, sustituye el encabezado por
|
|
59
|
-
`bearer_token_env_var = "INSTANTCLIPS_TOKEN"` y expórtalo como variable de entorno en tu shell.
|
|
127
|
+
Para no guardar el token en el archivo de Codex, sustituye el encabezado por
|
|
128
|
+
`bearer_token_env_var = "INSTANTCLIPS_TOKEN"` y expórtalo como variable de entorno en tu shell. La
|
|
129
|
+
aplicación de Claude acepta el token como encabezado de solicitud en el conector (los encabezados
|
|
130
|
+
de solicitud siguen en beta); los conectores de ChatGPT inician sesión mediante el flujo de inicio
|
|
131
|
+
de sesión en lugar de una clave pegada. Cualquier otro cliente envía un encabezado
|
|
132
|
+
`Authorization: Bearer`. El protocolo no contiene nada específico de InstantClips.
|
|
60
133
|
|
|
61
|
-
|
|
134
|
+
#### Clientes que solo admiten stdio y procesos sin interfaz
|
|
62
135
|
|
|
63
136
|
El paquete npm `instantclips-mcp` es un adaptador ligero de stdio a HTTPS. Sirve localmente la
|
|
64
137
|
inicialización y el descubrimiento de herramientas para arrancar rápido y sin credenciales; después
|
|
@@ -89,24 +162,15 @@ El token solo se acepta mediante `INSTANTCLIPS_TOKEN`, nunca como argumento de l
|
|
|
89
162
|
por lo que no aparece en la lista de procesos. Es obligatorio para llamar a una herramienta, pero
|
|
90
163
|
no para `initialize`, `ping` ni `tools/list`. Se requiere Node.js 20 o posterior.
|
|
91
164
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
La [página de configuración](https://app.instantclips.ai/settings#ai-access) incluye botones de
|
|
95
|
-
instalación de un clic. Una vez generado el token, los botones lo introducen por ti.
|
|
165
|
+
## Instrucciones para empezar
|
|
96
166
|
|
|
97
|
-
|
|
167
|
+
Cinco para arrancar. Sustituye el enlace o el nombre del producto.
|
|
98
168
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
### Cualquier otro cliente
|
|
106
|
-
|
|
107
|
-
OpenClaw, Hermes o un agente que hayas creado: conéctalo a la URL mediante Streamable HTTP con un
|
|
108
|
-
encabezado `Authorization: Bearer`. El protocolo no contiene nada específico de InstantClips, por
|
|
109
|
-
lo que cualquier cliente compatible con MCP ya puede comunicarse con el servidor.
|
|
169
|
+
1. «Haz un anuncio en vídeo para este producto: [URL]»
|
|
170
|
+
2. «Importa todos los productos de esta página de colección y prepara los planes de todos. No generes nada todavía.»
|
|
171
|
+
3. «Muéstrame el plan de [producto] y reescribe el gancho para que empiece por el precio.»
|
|
172
|
+
4. «Haz tres vídeos de [URL] con tres ganchos distintos, para que pueda probarlos.»
|
|
173
|
+
5. «¿A cuál de mis marcas pertenece este producto? Luego haz el vídeo.»
|
|
110
174
|
|
|
111
175
|
## Herramientas
|
|
112
176
|
|
|
@@ -115,14 +179,20 @@ El flujo de trabajo, en orden:
|
|
|
115
179
|
1. **Importar** — usa `import_product_from_url` para una página de tienda o
|
|
116
180
|
`create_product_from_images` cuando no haya una página que leer.
|
|
117
181
|
2. **Esperar el borrador** — consulta `get_product` periódicamente hasta que terminen la importación
|
|
118
|
-
y la preparación
|
|
119
|
-
3. **Revisarlo y orientarlo** —
|
|
120
|
-
formato, pautas de ejecución y restricciones. `update_video_direction` permite
|
|
182
|
+
y la preparación del plan.
|
|
183
|
+
3. **Revisarlo y orientarlo** — el plan se devuelve como texto: gancho, enfoque del contenido,
|
|
184
|
+
formato, pautas de ejecución y restricciones. `update_video_direction` permite editarlo y
|
|
121
185
|
`redraft_video_direction` propone otro enfoque.
|
|
122
|
-
4. **
|
|
186
|
+
4. **Generar** — usa `generate_video` pasando `expected_credit_cost`: el coste que se le indicó al
|
|
187
|
+
usuario, tal como lo informó `get_product`. Si no coincide, se rechaza sin cobrar.
|
|
123
188
|
5. **Recoger el resultado** — consulta `get_video` periódicamente para obtener el MP4 terminado y
|
|
124
189
|
un enlace público para compartirlo.
|
|
125
190
|
|
|
191
|
+
Otro vídeo del mismo producto sigue el mismo flujo sobre ese producto: editar o volver a preparar el
|
|
192
|
+
plan abre el borrador del siguiente vídeo, y `generate_video` sin borrador genera otra toma del último
|
|
193
|
+
plan. Un vídeo ya generado no se puede modificar. Cada respuesta de `get_product` incluye `next_step`:
|
|
194
|
+
qué hacer a continuación.
|
|
195
|
+
|
|
126
196
|
Las marcas funcionan de la misma manera: `list_brands`, `create_brand`, `set_product_brand`. Cada
|
|
127
197
|
vídeo se prepara con la voz de una marca; por eso, si el escaparate de un producto importado no
|
|
128
198
|
coincide con ninguna marca existente, el proceso se detiene y pregunta en lugar de adivinar.
|
|
@@ -136,15 +206,17 @@ quieras imprimir específicamente los esquemas actuales mediante HTTP.
|
|
|
136
206
|
|
|
137
207
|
## Créditos
|
|
138
208
|
|
|
139
|
-
Importar un producto, preparar
|
|
140
|
-
|
|
141
|
-
|
|
209
|
+
Importar un producto, preparar el plan y editarlo es **gratis**. `generate_video` es la única
|
|
210
|
+
herramienta que consume créditos y requiere tu autorización explícita; las herramientas indican
|
|
211
|
+
antes el coste, y `generate_video` recibe ese número como `expected_credit_cost`, rechazando un
|
|
212
|
+
lanzamiento cuyo coste haya cambiado. Un agente no puede acumular cargos sin avisarte. Consulta los
|
|
142
213
|
[precios](https://instantclips.ai/#pricing).
|
|
143
214
|
|
|
144
215
|
## example.py
|
|
145
216
|
|
|
146
217
|
Un cliente MCP sin dependencias: solo requiere Python 3.9 o posterior y la biblioteca estándar; no
|
|
147
|
-
hace falta ejecutar `pip install`.
|
|
218
|
+
hace falta ejecutar `pip install`. Se autentica con un token, porque un script no tiene navegador
|
|
219
|
+
con el que iniciar sesión.
|
|
148
220
|
|
|
149
221
|
```bash
|
|
150
222
|
export INSTANTCLIPS_TOKEN="your-token"
|
|
@@ -158,9 +230,10 @@ es lo que necesitas antes de automatizar el flujo de trabajo descrito arriba.
|
|
|
158
230
|
|
|
159
231
|
## Enlaces
|
|
160
232
|
|
|
161
|
-
- [instantclips.ai/automate](https://instantclips.ai/automate/) — qué
|
|
162
|
-
|
|
163
|
-
|
|
233
|
+
- [instantclips.ai/automate](https://instantclips.ai/automate/) — para qué sirve la
|
|
234
|
+
automatización: un resultado real hecho a partir de una página de tienda, instrucciones para
|
|
235
|
+
empezar, las herramientas en orden y las reglas. No repite la configuración; esa información está
|
|
236
|
+
en este archivo y en la página de configuración de la aplicación.
|
|
164
237
|
- [app.instantclips.ai/llms.txt](https://app.instantclips.ai/llms.txt) — descripción del producto y
|
|
165
238
|
de la secuencia de herramientas en un formato legible por máquinas.
|
|
166
239
|
- [Términos](https://app.instantclips.ai/terms) · [Privacidad](https://app.instantclips.ai/privacy)
|
package/README.md
CHANGED
|
@@ -2,10 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
**English** · [Español](README.es.md) · [简体中文](README.zh-CN.md)
|
|
4
4
|
|
|
5
|
+
[](https://m8ven.ai/mcp/instantclips-mcp-1k56q7)
|
|
6
|
+
|
|
5
7
|
[InstantClips](https://instantclips.ai) turns an e-commerce product into short-form vertical
|
|
6
8
|
video for TikTok, Instagram Reels and Stories. It runs a hosted **MCP server**, so Claude Code,
|
|
7
9
|
Codex, Cursor, VS Code, the Claude app, ChatGPT or any other MCP client can do what the web app
|
|
8
|
-
does: import a product, draft the
|
|
10
|
+
does: import a product, draft the plan, and generate the video.
|
|
11
|
+
|
|
12
|
+
**This is not a text-to-video generator.** InstantClips reads the product page — photos, price,
|
|
13
|
+
details — and builds the ad from what is actually there. The plan is written first and shown to
|
|
14
|
+
you; the video follows the plan. That is why it is cheap enough to run across a catalogue, and why
|
|
15
|
+
the result is the product you sell rather than a guess at it.
|
|
16
|
+
|
|
17
|
+
Free to start: the welcome credits cover the first video, and there is no card to enter. After
|
|
18
|
+
that, one-time credit packs, or an Agency membership for anyone running several brands. See
|
|
19
|
+
[pricing](https://instantclips.ai/#pricing).
|
|
20
|
+
|
|
21
|
+
- **Where it fits.** Beside a scheduler (Postiz, Buffer) that posts what comes back. Beside an
|
|
22
|
+
attribution tool that tells you which hook worked. Instead of an editor when you have a product
|
|
23
|
+
page and no footage.
|
|
24
|
+
- **Not for.** Cinematic hero films. A presenter reading your script. Horizontal 4K. Products with
|
|
25
|
+
no page and no photos.
|
|
26
|
+
- **Built for.** Shopify sellers, dropshippers, brands and agencies running social for several
|
|
27
|
+
stores at once.
|
|
9
28
|
|
|
10
29
|
**The product server stays hosted.** This repository contains its connection guide, registry
|
|
11
30
|
metadata, example HTTP client and a small open-source stdio adapter for clients that cannot connect
|
|
@@ -15,31 +34,38 @@ remains the source of truth; the product implementation is not duplicated here.
|
|
|
15
34
|
|
|
16
35
|
## Endpoint
|
|
17
36
|
|
|
18
|
-
| |
|
|
19
|
-
| ---------- |
|
|
20
|
-
| Endpoint | `https://app.instantclips.ai/mcp`
|
|
21
|
-
| Transport | Streamable HTTP, stateless
|
|
22
|
-
| Method | `POST`, JSON-RPC 2.0
|
|
23
|
-
| Auth | `Authorization: Bearer <token>`
|
|
37
|
+
| | |
|
|
38
|
+
| ---------- | --------------------------------------------------------------------------------- |
|
|
39
|
+
| Endpoint | `https://app.instantclips.ai/mcp` |
|
|
40
|
+
| Transport | Streamable HTTP, stateless |
|
|
41
|
+
| Method | `POST`, JSON-RPC 2.0 |
|
|
42
|
+
| Auth | Sign in when your client asks (OAuth 2.1), or `Authorization: Bearer <token>` for callers with no browser |
|
|
24
43
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
44
|
+
Paste one address into your assistant and sign in when it asks. That is the whole setup. The
|
|
45
|
+
first time it calls, the server sends you to sign in to InstantClips and approve the assistant;
|
|
46
|
+
there are no keys to copy. Every assistant you approve is listed under **Authorized apps** in
|
|
47
|
+
settings, where you can disconnect it.
|
|
28
48
|
|
|
29
|
-
|
|
30
|
-
|
|
49
|
+
The connection is to your own account: same brands, products, credits and plan limits as the web
|
|
50
|
+
app. Signing in creates an account if you do not have one, with credits for the first video.
|
|
51
|
+
|
|
52
|
+
Opening the endpoint in a browser returns the [setup page](https://app.instantclips.ai/mcp)
|
|
53
|
+
rather than a protocol error, with one-click install buttons for Cursor and VS Code.
|
|
31
54
|
|
|
32
55
|
## Install
|
|
33
56
|
|
|
34
|
-
Connect to the hosted endpoint directly whenever your client supports Streamable HTTP
|
|
35
|
-
|
|
57
|
+
Connect to the hosted endpoint directly whenever your client supports Streamable HTTP; it takes
|
|
58
|
+
you through sign-in on first use. Use a token and the stdio adapter (under "No browser?" below)
|
|
59
|
+
only for scripts and automated runners that cannot open a sign-in page.
|
|
36
60
|
|
|
37
61
|
### Claude Code
|
|
38
62
|
|
|
39
63
|
```bash
|
|
40
|
-
claude mcp add --transport http instantclips https://app.instantclips.ai/mcp
|
|
64
|
+
claude mcp add --transport http instantclips https://app.instantclips.ai/mcp
|
|
41
65
|
```
|
|
42
66
|
|
|
67
|
+
Then run `/mcp` inside Claude Code and choose InstantClips to sign in.
|
|
68
|
+
|
|
43
69
|
### Codex
|
|
44
70
|
|
|
45
71
|
Add to `~/.codex/config.toml`, which covers the CLI, the app and the IDE extension together:
|
|
@@ -47,13 +73,56 @@ Add to `~/.codex/config.toml`, which covers the CLI, the app and the IDE extensi
|
|
|
47
73
|
```toml
|
|
48
74
|
[mcp_servers.instantclips]
|
|
49
75
|
url = "https://app.instantclips.ai/mcp"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Then run `codex mcp login instantclips` to sign in.
|
|
79
|
+
|
|
80
|
+
### Cursor and VS Code
|
|
81
|
+
|
|
82
|
+
One-click install buttons are on the [setup page](https://app.instantclips.ai/mcp). They open
|
|
83
|
+
the app, add InstantClips, and sign you in on first use.
|
|
84
|
+
|
|
85
|
+
### Claude app and ChatGPT
|
|
86
|
+
|
|
87
|
+
Claude app: add a custom connector with this address and sign in when it asks. ChatGPT on the
|
|
88
|
+
web: turn on Developer mode under Settings, Apps, Advanced, then add the address as a connector;
|
|
89
|
+
on a Business or Enterprise workspace an admin publishes it as an app for everyone instead. The
|
|
90
|
+
ChatGPT desktop app takes the same address under Settings, MCP servers, and shares it with Codex.
|
|
91
|
+
|
|
92
|
+
### Any other MCP client or agent
|
|
93
|
+
|
|
94
|
+
OpenClaw, Hermes, or an agent you wrote yourself: point it at the address over Streamable HTTP.
|
|
95
|
+
The server announces its sign-in flow the standard way, so a client that follows the spec needs
|
|
96
|
+
nothing else. Anything that cannot open a sign-in page uses a token instead, below.
|
|
97
|
+
|
|
98
|
+
### No browser? Use an access token
|
|
99
|
+
|
|
100
|
+
Scripts, CI jobs and agents that cannot open a sign-in page authenticate with a long-lived token
|
|
101
|
+
instead. Mint one at
|
|
102
|
+
**[app.instantclips.ai/settings#ai-access](https://app.instantclips.ai/settings#ai-access)**. It
|
|
103
|
+
gives full access to your account, so keep it out of anything you commit.
|
|
104
|
+
|
|
105
|
+
With a token, the same clients look like this:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# Claude Code
|
|
109
|
+
claude mcp add --transport http instantclips https://app.instantclips.ai/mcp --header "Authorization: Bearer YOUR_TOKEN"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
```toml
|
|
113
|
+
# Codex, in ~/.codex/config.toml
|
|
114
|
+
[mcp_servers.instantclips]
|
|
115
|
+
url = "https://app.instantclips.ai/mcp"
|
|
50
116
|
http_headers = { Authorization = "Bearer YOUR_TOKEN" }
|
|
51
117
|
```
|
|
52
118
|
|
|
53
|
-
To keep the token out of the file, swap the header for `bearer_token_env_var = "INSTANTCLIPS_TOKEN"`
|
|
54
|
-
and export it in your shell instead.
|
|
119
|
+
To keep the token out of the Codex file, swap the header for `bearer_token_env_var = "INSTANTCLIPS_TOKEN"`
|
|
120
|
+
and export it in your shell instead. The Claude app takes a token as a request header on the
|
|
121
|
+
connector (request headers are still in beta); ChatGPT connectors sign in through the sign-in flow
|
|
122
|
+
rather than a pasted key. Any other client sends an `Authorization: Bearer` header. Nothing on the
|
|
123
|
+
wire is InstantClips-specific.
|
|
55
124
|
|
|
56
|
-
|
|
125
|
+
#### Stdio-only clients and headless runners
|
|
57
126
|
|
|
58
127
|
The `instantclips-mcp` npm package is a thin stdio-to-HTTPS adapter. It serves initialization and
|
|
59
128
|
tool discovery locally for a fast, credential-free cold start, then reads the token from the
|
|
@@ -83,23 +152,15 @@ The token is accepted only through `INSTANTCLIPS_TOKEN`, never as a command-line
|
|
|
83
152
|
does not appear in the process list. It is required for tool calls, but not for `initialize`,
|
|
84
153
|
`ping`, or `tools/list`. Node.js 20 or newer is required.
|
|
85
154
|
|
|
86
|
-
|
|
155
|
+
## Starter prompts
|
|
87
156
|
|
|
88
|
-
|
|
89
|
-
They fill in your token once you have minted one.
|
|
90
|
-
|
|
91
|
-
### Claude app and ChatGPT
|
|
157
|
+
Five to begin with. Swap in a link or a product name.
|
|
92
158
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
### Anything else
|
|
99
|
-
|
|
100
|
-
OpenClaw, Hermes, or an agent you wrote yourself: point it at the URL over streamable HTTP with an
|
|
101
|
-
`Authorization: Bearer` header. Nothing on the wire is InstantClips-specific, so a client that
|
|
102
|
-
speaks MCP already speaks this.
|
|
159
|
+
1. "Make a video ad for this product: [URL]"
|
|
160
|
+
2. "Import every product on this collection page and draft plans for all of them. Don't generate anything yet."
|
|
161
|
+
3. "Show me the plan for [product] and rewrite the hook to lead with the price."
|
|
162
|
+
4. "Make three videos for [URL] with three different hooks, so I can test them."
|
|
163
|
+
5. "Which of my brands is this product for? Then make the video."
|
|
103
164
|
|
|
104
165
|
## Tools
|
|
105
166
|
|
|
@@ -107,14 +168,19 @@ The workflow, in order:
|
|
|
107
168
|
|
|
108
169
|
1. **Import** — `import_product_from_url` for a store page, or `create_product_from_images` when
|
|
109
170
|
there is no page to read.
|
|
110
|
-
2. **Wait for the draft** — poll `get_product` until the import and the
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
171
|
+
2. **Wait for the draft** — poll `get_product` until the import and the plan have finished.
|
|
172
|
+
3. **Read and steer it** — the plan comes back as text: hook, content focus, format, execution
|
|
173
|
+
guidelines, restrictions. `update_video_direction` edits it, `redraft_video_direction` asks
|
|
174
|
+
for another angle.
|
|
175
|
+
4. **Generate** — `generate_video`, passing `expected_credit_cost`: the cost the user was told, as
|
|
176
|
+
`get_product` reported it. A mismatch is refused without charging.
|
|
116
177
|
5. **Collect** — poll `get_video` for the finished MP4 and a public share link.
|
|
117
178
|
|
|
179
|
+
Another video for the same product is the same flow on that product: editing or redrafting opens the
|
|
180
|
+
next video's draft, and `generate_video` with no draft renders another take of the last plan. A
|
|
181
|
+
generated video itself cannot be changed. Every `get_product` response carries `next_step`: what to
|
|
182
|
+
do now.
|
|
183
|
+
|
|
118
184
|
Brands work the same way: `list_brands`, `create_brand`, `set_product_brand`. Every video is
|
|
119
185
|
drafted in a brand's voice, so an import whose storefront matches no existing brand stops and asks
|
|
120
186
|
rather than guessing.
|
|
@@ -128,14 +194,15 @@ want to print the live schemas over HTTP.
|
|
|
128
194
|
|
|
129
195
|
## Credits
|
|
130
196
|
|
|
131
|
-
Importing a product, drafting the
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
[pricing](https://instantclips.ai/#pricing).
|
|
197
|
+
Importing a product, drafting the plan and editing it are all **free**. `generate_video` is the
|
|
198
|
+
only tool that spends credits, and it requires your explicit go-ahead — the tools report the cost
|
|
199
|
+
first, and `generate_video` takes that number back as `expected_credit_cost`, refusing a launch whose
|
|
200
|
+
cost has changed. An agent cannot quietly run up a bill. See [pricing](https://instantclips.ai/#pricing).
|
|
135
201
|
|
|
136
202
|
## example.py
|
|
137
203
|
|
|
138
|
-
A dependency-free MCP client — Python 3.9+, standard library only, no `pip install`.
|
|
204
|
+
A dependency-free MCP client — Python 3.9+, standard library only, no `pip install`. It
|
|
205
|
+
authenticates with a token, since a script has no browser to sign in with.
|
|
139
206
|
|
|
140
207
|
```bash
|
|
141
208
|
export INSTANTCLIPS_TOKEN="your-token"
|
|
@@ -149,8 +216,9 @@ is what you need before scripting the workflow above.
|
|
|
149
216
|
|
|
150
217
|
## Links
|
|
151
218
|
|
|
152
|
-
- [instantclips.ai/automate](https://instantclips.ai/automate/) — what the automation is
|
|
153
|
-
|
|
219
|
+
- [instantclips.ai/automate](https://instantclips.ai/automate/) — what the automation is for: a
|
|
220
|
+
real result made from a store page, starter prompts, the tools in order, and the rules. It does
|
|
221
|
+
not repeat the setup; this file and the app's setup page are where that lives.
|
|
154
222
|
- [app.instantclips.ai/llms.txt](https://app.instantclips.ai/llms.txt) — machine-readable
|
|
155
223
|
description of the product and the tool sequence
|
|
156
224
|
- [Terms](https://app.instantclips.ai/terms) · [Privacy](https://app.instantclips.ai/privacy)
|
package/README.zh-CN.md
CHANGED
|
@@ -2,10 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) · [Español](README.es.md) · **简体中文**
|
|
4
4
|
|
|
5
|
+
[](https://m8ven.ai/mcp/instantclips-mcp-1k56q7)
|
|
6
|
+
|
|
5
7
|
[InstantClips](https://instantclips.ai) 可将电商商品转化为适用于 TikTok、Instagram Reels 和
|
|
6
8
|
Stories 的竖屏短视频。它提供托管的 **MCP 服务器**,因此 Claude Code、Codex、Cursor、
|
|
7
9
|
VS Code、Claude 应用、ChatGPT 或其他任何 MCP 客户端都能完成网页应用中的工作:导入商品、
|
|
8
|
-
|
|
10
|
+
撰写视频方案并生成视频。
|
|
11
|
+
|
|
12
|
+
**这不是文本生成视频工具。** InstantClips 会读取商品页面(图片、价格、详情),基于页面上真实存在的
|
|
13
|
+
内容制作广告。方案先写好并展示给你,视频再按方案生成。正因如此,它便宜到可以跑完整个商品目录,
|
|
14
|
+
而且结果就是你在售的商品,而不是凭空猜测。
|
|
15
|
+
|
|
16
|
+
免费开始:赠送的算力足够生成第一条视频,无需绑定银行卡。之后可购买一次性算力包,或为同时运营
|
|
17
|
+
多个品牌的用户提供 Agency 会员。详见[价格](https://instantclips.ai/#pricing)。
|
|
18
|
+
|
|
19
|
+
- **适合搭配。** 搭配 Postiz、Buffer 之类的排期工具,直接发布生成的视频;搭配归因工具,看哪个
|
|
20
|
+
开场钩子有效;在只有商品页面、没有素材的情况下,替代剪辑师。
|
|
21
|
+
- **不适合。** 电影级品牌大片、照稿念词的出镜主持人、横屏 4K、既没有页面也没有图片的商品。
|
|
22
|
+
- **为谁而建。** Shopify 卖家、dropshipping 卖家、品牌,以及同时为多家店铺运营社媒的代理机构。
|
|
9
23
|
|
|
10
24
|
**产品服务器仍以托管方式运行。** 本仓库包含连接指南、注册表元数据、示例 HTTP 客户端,以及一个
|
|
11
25
|
面向无法直接连接远程服务器的客户端的小型开源 stdio 适配器。适配器通过生成的快照在本地响应
|
|
@@ -14,30 +28,36 @@ VS Code、Claude 应用、ChatGPT 或其他任何 MCP 客户端都能完成网
|
|
|
14
28
|
|
|
15
29
|
## 端点
|
|
16
30
|
|
|
17
|
-
| |
|
|
18
|
-
| -------- |
|
|
19
|
-
| 端点 | `https://app.instantclips.ai/mcp`
|
|
20
|
-
| 传输方式 | Streamable HTTP,无状态
|
|
21
|
-
| 方法 | `POST`,JSON-RPC 2.0
|
|
22
|
-
| 身份验证 | `Authorization: Bearer <token>`
|
|
31
|
+
| | |
|
|
32
|
+
| -------- | ---------------------------------------------------------------------------- |
|
|
33
|
+
| 端点 | `https://app.instantclips.ai/mcp` |
|
|
34
|
+
| 传输方式 | Streamable HTTP,无状态 |
|
|
35
|
+
| 方法 | `POST`,JSON-RPC 2.0 |
|
|
36
|
+
| 身份验证 | 客户端提示时登录(OAuth 2.1);无浏览器的调用方使用 `Authorization: Bearer <token>` |
|
|
37
|
+
|
|
38
|
+
把一个地址粘贴进你的助手,提示时登录即可。设置就这么多。第一次调用时,服务端会带你登录
|
|
39
|
+
InstantClips 并请你授权,无需复制任何密钥。你授权过的每个助手都列在设置里的**已授权应用**中,
|
|
40
|
+
可以随时断开。
|
|
23
41
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
账户,登录时会自动创建账户,并赠送可用于开始体验的免费点数。
|
|
42
|
+
连接的是你自己的账户:与网页应用相同的品牌、商品、算力和方案限额。如果你还没有账户,登录时会
|
|
43
|
+
自动创建账户,并赠送可用于第一条视频的算力。
|
|
27
44
|
|
|
28
|
-
|
|
45
|
+
在浏览器中打开端点时会显示[设置页面](https://app.instantclips.ai/mcp),而不是协议错误;页面上有
|
|
46
|
+
Cursor 和 VS Code 的一键安装按钮。
|
|
29
47
|
|
|
30
48
|
## 安装
|
|
31
49
|
|
|
32
|
-
如果客户端支持 Streamable HTTP
|
|
33
|
-
|
|
50
|
+
如果客户端支持 Streamable HTTP,请直接连接托管端点,首次使用时会引导你登录。只有脚本和无法打开
|
|
51
|
+
登录页的自动化运行环境,才需要使用令牌和下方“没有浏览器?”一节中的 stdio 适配器。
|
|
34
52
|
|
|
35
53
|
### Claude Code
|
|
36
54
|
|
|
37
55
|
```bash
|
|
38
|
-
claude mcp add --transport http instantclips https://app.instantclips.ai/mcp
|
|
56
|
+
claude mcp add --transport http instantclips https://app.instantclips.ai/mcp
|
|
39
57
|
```
|
|
40
58
|
|
|
59
|
+
然后在 Claude Code 里运行 `/mcp`,选择 InstantClips 登录。
|
|
60
|
+
|
|
41
61
|
### Codex
|
|
42
62
|
|
|
43
63
|
将以下配置添加到 `~/.codex/config.toml`。该配置同时适用于 CLI、应用和 IDE 扩展:
|
|
@@ -45,13 +65,53 @@ claude mcp add --transport http instantclips https://app.instantclips.ai/mcp --h
|
|
|
45
65
|
```toml
|
|
46
66
|
[mcp_servers.instantclips]
|
|
47
67
|
url = "https://app.instantclips.ai/mcp"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
然后运行 `codex mcp login instantclips` 登录。
|
|
71
|
+
|
|
72
|
+
### Cursor 和 VS Code
|
|
73
|
+
|
|
74
|
+
[设置页面](https://app.instantclips.ai/mcp)提供一键安装按钮。按钮会打开应用并添加 InstantClips,
|
|
75
|
+
首次使用时登录。
|
|
76
|
+
|
|
77
|
+
### Claude 应用和 ChatGPT
|
|
78
|
+
|
|
79
|
+
Claude 应用:用这个地址添加自定义连接器,按提示登录。网页版 ChatGPT:在 设置 › Apps › 高级 中
|
|
80
|
+
开启开发者模式,再把地址添加为连接器;Business 或 Enterprise 工作区则由管理员发布为全员可用的
|
|
81
|
+
应用。ChatGPT 桌面版在 设置 › MCP 服务器 中填入同一地址,并与 Codex 共享配置。
|
|
82
|
+
|
|
83
|
+
### 其他 MCP 客户端或智能体
|
|
84
|
+
|
|
85
|
+
OpenClaw、Hermes,或你自己写的 agent:通过 Streamable HTTP 指向这个地址。服务端按标准方式公布
|
|
86
|
+
登录流程,遵循规范的客户端无需其他配置。无法打开登录页的,改用下方的令牌。
|
|
87
|
+
|
|
88
|
+
### 没有浏览器?使用访问令牌
|
|
89
|
+
|
|
90
|
+
脚本、CI 任务和无法打开登录页的 agent,改用长期有效的令牌鉴权。前往
|
|
91
|
+
**[app.instantclips.ai/settings#ai-access](https://app.instantclips.ai/settings#ai-access)**
|
|
92
|
+
生成令牌。它拥有你账号的全部权限,请勿提交到代码仓库。
|
|
93
|
+
|
|
94
|
+
使用令牌时,同样的客户端配置如下:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# Claude Code
|
|
98
|
+
claude mcp add --transport http instantclips https://app.instantclips.ai/mcp --header "Authorization: Bearer YOUR_TOKEN"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
```toml
|
|
102
|
+
# Codex,位于 ~/.codex/config.toml
|
|
103
|
+
[mcp_servers.instantclips]
|
|
104
|
+
url = "https://app.instantclips.ai/mcp"
|
|
48
105
|
http_headers = { Authorization = "Bearer YOUR_TOKEN" }
|
|
49
106
|
```
|
|
50
107
|
|
|
51
|
-
|
|
52
|
-
`bearer_token_env_var = "INSTANTCLIPS_TOKEN"`,然后在 shell 中导出该环境变量。
|
|
108
|
+
如果不想把令牌写入 Codex 的配置文件,请将请求头配置替换为
|
|
109
|
+
`bearer_token_env_var = "INSTANTCLIPS_TOKEN"`,然后在 shell 中导出该环境变量。Claude 应用可在
|
|
110
|
+
连接器中以请求头的形式使用令牌(自定义请求头仍处于测试阶段);ChatGPT 连接器通过登录流程
|
|
111
|
+
鉴权,而不是粘贴密钥。其他任何客户端发送 `Authorization: Bearer` 请求头即可。传输协议中没有
|
|
112
|
+
InstantClips 专用内容。
|
|
53
113
|
|
|
54
|
-
|
|
114
|
+
#### 仅支持 stdio 的客户端和无界面自动化
|
|
55
115
|
|
|
56
116
|
`instantclips-mcp` npm 软件包是一个轻量的 stdio 到 HTTPS 适配器。它在本地提供初始化和工具发现,
|
|
57
117
|
从而无需凭据即可快速启动;随后从环境变量读取令牌,并将工具调用发送到 InstantClips:
|
|
@@ -79,23 +139,15 @@ INSTANTCLIPS_TOKEN="your-token" npx -y instantclips-mcp --check --json
|
|
|
79
139
|
令牌只能通过 `INSTANTCLIPS_TOKEN` 提供,不能作为命令行参数传入,因此不会出现在进程列表中。
|
|
80
140
|
工具调用需要令牌,但 `initialize`、`ping` 和 `tools/list` 不需要。需要 Node.js 20 或更高版本。
|
|
81
141
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
[设置页面](https://app.instantclips.ai/settings#ai-access)提供一键安装按钮。生成令牌后,按钮会自动
|
|
85
|
-
为你填入令牌。
|
|
142
|
+
## 入门提示语
|
|
86
143
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
这些客户端通过各自的连接器设置进行连接,而不是读取配置文件。将连接地址设为
|
|
90
|
-
`https://app.instantclips.ai/mcp`,并使用同一个令牌进行身份验证:Claude 使用请求头,ChatGPT
|
|
91
|
-
使用 API 密钥。Claude 的自定义请求头功能仍处于测试阶段,而 ChatGPT 需要开启开发者模式;具体
|
|
92
|
-
是否可用取决于你的账户和工作区政策。
|
|
144
|
+
先从这五句开始,替换成你的链接或商品名即可。
|
|
93
145
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
146
|
+
1. “给这个商品做一条视频广告:[URL]”
|
|
147
|
+
2. “把这个系列页面上的所有商品都导入,并为每一个起草方案。先不要生成。”
|
|
148
|
+
3. “给我看 [商品] 的方案,把开场钩子改成先说价格。”
|
|
149
|
+
4. “用三个不同的开场钩子,给 [URL] 做三条视频,方便我测试。”
|
|
150
|
+
5. “这个商品属于我的哪个品牌?确认后再做视频。”
|
|
99
151
|
|
|
100
152
|
## 工具
|
|
101
153
|
|
|
@@ -103,12 +155,17 @@ INSTANTCLIPS_TOKEN="your-token" npx -y instantclips-mcp --check --json
|
|
|
103
155
|
|
|
104
156
|
1. **导入** — 如果有店铺商品页面,使用 `import_product_from_url`;如果没有可读取的页面,则使用
|
|
105
157
|
`create_product_from_images`。
|
|
106
|
-
2. **等待草稿** — 轮询 `get_product
|
|
107
|
-
3. **查看并调整** —
|
|
158
|
+
2. **等待草稿** — 轮询 `get_product`,直到商品导入和方案起草完成。
|
|
159
|
+
3. **查看并调整** — 方案以文本返回,包含开场钩子、内容重点、形式、执行指南和限制条件。
|
|
108
160
|
使用 `update_video_direction` 进行编辑,或使用 `redraft_video_direction` 获取另一个方向。
|
|
109
|
-
4.
|
|
161
|
+
4. **生成** — 使用 `generate_video`,并传入 `expected_credit_cost`:即 `get_product` 报告并已告知用户的
|
|
162
|
+
算力费用。费用不一致时会拒绝执行,不会扣费。
|
|
110
163
|
5. **获取结果** — 轮询 `get_video`,获取完成的 MP4 文件和公开分享链接。
|
|
111
164
|
|
|
165
|
+
为同一商品制作另一个视频,走的是同一流程:编辑或重新起草会打开下一个视频的草稿;没有草稿时调用
|
|
166
|
+
`generate_video` 会按上一方案再生成一版。已生成的视频本身无法修改。每次 `get_product` 的响应都带有
|
|
167
|
+
`next_step`,说明下一步该做什么。
|
|
168
|
+
|
|
112
169
|
品牌的操作方式相同:`list_brands`、`create_brand`、`set_product_brand`。每个视频都会采用对应品牌
|
|
113
170
|
的表达风格进行起草。因此,当导入商品的店铺与任何现有品牌都不匹配时,流程会暂停并询问,而不是
|
|
114
171
|
自行猜测。
|
|
@@ -120,16 +177,16 @@ INSTANTCLIPS_TOKEN="your-token" npx -y instantclips-mcp --check --json
|
|
|
120
177
|
`npm run check:manifest` 会失败。如需通过 HTTP 输出实时 schema,请运行下方的
|
|
121
178
|
`python example.py tools`。
|
|
122
179
|
|
|
123
|
-
##
|
|
180
|
+
## 算力
|
|
124
181
|
|
|
125
|
-
|
|
126
|
-
|
|
182
|
+
导入商品、起草方案和编辑方案均为**免费**。只有 `generate_video` 会消耗算力,而且必须获得你的
|
|
183
|
+
明确许可;工具会事先报告费用,`generate_video` 再以 `expected_credit_cost` 接收这一数字,费用变动时拒绝执行。智能体无法在你不知情的情况下产生费用。详见
|
|
127
184
|
[价格](https://instantclips.ai/#pricing)。
|
|
128
185
|
|
|
129
186
|
## example.py
|
|
130
187
|
|
|
131
188
|
这是一个无第三方依赖的 MCP 客户端,仅需 Python 3.9 或更高版本和标准库,无需运行
|
|
132
|
-
`pip install
|
|
189
|
+
`pip install`。它使用令牌鉴权,因为脚本没有可用于登录的浏览器。
|
|
133
190
|
|
|
134
191
|
```bash
|
|
135
192
|
export INSTANTCLIPS_TOKEN="your-token"
|
|
@@ -142,8 +199,9 @@ python example.py call list_brands '{}' # 使用 JSON 参数调用一个工具
|
|
|
142
199
|
|
|
143
200
|
## 链接
|
|
144
201
|
|
|
145
|
-
- [instantclips.ai/automate](https://instantclips.ai/automate/) —
|
|
146
|
-
|
|
202
|
+
- [instantclips.ai/automate](https://instantclips.ai/automate/) — 介绍自动化的用途:一个由店铺页面
|
|
203
|
+
生成的真实结果、入门提示语、按顺序排列的工具,以及相关规则。该页面不会重复设置说明;设置方法
|
|
204
|
+
请参阅本文档和应用中的设置页面。
|
|
147
205
|
- [app.instantclips.ai/llms.txt](https://app.instantclips.ai/llms.txt) — 适合机器读取的产品说明和工具
|
|
148
206
|
调用顺序。
|
|
149
207
|
- [服务条款](https://app.instantclips.ai/terms) · [隐私政策](https://app.instantclips.ai/privacy)
|
|
@@ -162,7 +220,7 @@ npm 软件包中的 `mcpName` 必须与该注册表名称完全一致。仓库
|
|
|
162
220
|
使用 GitHub 身份验证。改用 GitHub 身份验证会强制使用 `io.github.instantstudioai/...`,从而失去
|
|
163
221
|
品牌命名空间。
|
|
164
222
|
|
|
165
|
-
|
|
223
|
+
先提升 `version` 并发布 npm 软件包,然后运行 `mcp-publisher publish` 重新发布同一注册表条目。
|
|
166
224
|
域名身份验证会保留品牌命名空间 `ai.instantclips`;请勿将其替换为 `io.github.*` 名称。签名密钥不
|
|
167
225
|
存放在仓库中:`.gitignore` 已忽略 `*.pem`,因为一旦提交私钥,就等于公开了私钥。
|
|
168
226
|
|
|
@@ -7,34 +7,34 @@
|
|
|
7
7
|
"serverInfo": {
|
|
8
8
|
"name": "instantclips",
|
|
9
9
|
"title": "InstantClips",
|
|
10
|
-
"version": "0.
|
|
10
|
+
"version": "0.4.0",
|
|
11
11
|
"websiteUrl": "https://instantclips.ai"
|
|
12
12
|
},
|
|
13
|
-
"instructions": "InstantClips turns a product into a short vertical marketing video.\n\nEvery video is drafted against a BRAND — a voice, a target market and a\nset of keywords. Getting the brand right matters more than anything else\nhere: a product drafted under the wrong company's voice renders perfectly\nand is still unusable. Never assume a product belongs to whatever brand\nthe account already has.\n\nStart by asking the user for their store's URL if you do not already know\nthe brand, and call `list_brands` to see what the account has. Unlike the\nwebsite, which takes a product link and gets out of the way, you can\nsimply ask — a short question here is cheaper than a wrongly branded\nvideo.\n\nThe workflow, in order:\n\n1. `import_product_from_url` with the product's page URL (or\n `create_product_from_images` with hosted image URLs). Both return\n immediately and import in the background.\n2. Poll `get_product` until `import_status` is \"imported\".\n - If it reports `brand_decision_required` with `drafting: false`, the\n storefront does not match any brand
|
|
13
|
+
"instructions": "InstantClips turns a product into a short vertical marketing video.\n\nEvery video is drafted against a BRAND — a voice, a target market and a\nset of keywords. Getting the brand right matters more than anything else\nhere: a product drafted under the wrong company's voice renders perfectly\nand is still unusable. Never assume a product belongs to whatever brand\nthe account already has.\n\nStart by asking the user for their store's URL if you do not already know\nthe brand, and call `list_brands` to see what the account has. Unlike the\nwebsite, which takes a product link and gets out of the way, you can\nsimply ask — a short question here is cheaper than a wrongly branded\nvideo.\n\nThe workflow, in order:\n\n1. `import_product_from_url` with the product's page URL (or\n `create_product_from_images` with hosted image URLs). Both return\n immediately and import in the background.\n2. Poll `get_product` until `import_status` is \"imported\".\n - If it reports `brand_decision_required` with `drafting: false`, the\n brand could not be settled: the storefront does not match any brand\n on the account, or (photos) there was no page to detect one from.\n Stop and put the choice to the user: create a brand for it\n (`create_brand`) or attach it to one they already have\n (`set_product_brand`). Do not choose for them. For a photos product\n nothing was detected, so `create_brand` needs the name from the\n user, and the voice, target market and keywords they can give you.\n No direction is drafted until this is settled.\n - Otherwise the import also drafts a video direction — a six-section\n creative plan (Hook / Content Focus / Format / Suggesting Visual\n Aesthetic / Execution Guidelines /\n Strict Guidelines & Restrictions) — so keep polling until\n `video_direction.drafting` is false.\n3. Show the drafted direction to the user. Edit it with\n `update_video_direction`, or roll a completely different angle with\n `redraft_video_direction`. The direction is optional: an empty one is\n valid and generation still works.\n4. `generate_video`, passing `expected_credit_cost` — this SPENDS THE\n USER'S CREDITS. Get the user's explicit go-ahead first, and tell\n them the credit cost that `get_product` reports; the launch is\n refused, uncharged, if that number no longer matches.\n5. Poll `get_video` until status is \"done\", then give the user\n `output_url` (the finished MP4) and `share_url` (a public page).\n On a free account the MP4 carries the InstantClips watermark\n (`watermarked` is true); buying credits removes it from every video\n on the account.\n\nEvery get_product response carries `next_step`: what to do now and the\ntool to do it with. Read it before choosing a tool — it covers the\nstates this list does not: a failed import, a failed or stalled\ndirection draft, photos the video model will not take, a failed\nrender, a balance short of the cost.\n\nA product whose video has been generated is not finished with, but a\ngenerated video cannot be changed: its direction locks the moment\ngeneration starts, and re-importing the same URL returns the same\nproduct rather than a fresh one. Editing or redrafting such a product\nopens its next video's draft, seeded from the last one (the response\nsays `opened_new_video: true`), and `generate_video` with no draft\nrenders another take of the last plan as a new video. Continue from\nstep 3 either way.\n\nA render takes a few minutes. Poll every 20-30 seconds rather than in a\ntight loop, and tell the user what you are waiting on.\n",
|
|
14
14
|
"tools": [
|
|
15
15
|
{
|
|
16
16
|
"name": "list_brands",
|
|
17
17
|
"title": "List the account's brands",
|
|
18
18
|
"description": "List the brands on this account, with the plan's brand limit and whether\nanother brand can be created.\n\nA brand carries the identity every video is drafted against: its voice,\nits target market and its keywords. A product must belong to the brand it\nactually comes from — a product drafted under another company's voice is\nwrong even though it renders fine.\n\nCall this before answering a `brand_decision_required` from\n`get_product`, and whenever the user needs to choose or name a brand.\n\nThis does not spend credits.\n",
|
|
19
19
|
"inputSchema": {
|
|
20
|
-
"
|
|
20
|
+
"type": "object",
|
|
21
21
|
"properties": {},
|
|
22
22
|
"required": [],
|
|
23
|
-
"
|
|
23
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema"
|
|
24
24
|
},
|
|
25
25
|
"annotations": {
|
|
26
|
+
"readOnlyHint": true,
|
|
26
27
|
"destructiveHint": false,
|
|
27
28
|
"idempotentHint": true,
|
|
28
|
-
"openWorldHint": false
|
|
29
|
-
"readOnlyHint": true
|
|
29
|
+
"openWorldHint": false
|
|
30
30
|
}
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
"name": "import_product_from_url",
|
|
34
34
|
"title": "Import a product from its page URL",
|
|
35
|
-
"description": "Start a new InstantClips product from a product page URL (a storefront\nlisting, e.g. a Shopify product page).\n\nReturns immediately with a product_id — the scrape, the image download\nand the first video-direction draft all run in the background. Poll\n`get_product` until `import_status` is \"imported\" and\n`video_direction.drafting` is false, which usually takes under a minute.\n\nPasting a URL that was already imported on this account returns that\nexisting product instead of creating a duplicate.\n\nIf the storefront name does not exactly match a brand this account has\nalready reviewed, the import stops on a brand decision instead of\nguessing: `get_product` will report `brand_decision_required`, and no\nvideo direction is drafted until it is resolved with `create_brand` or\n`set_product_brand`. Do not assume the account's existing brand — a\nproduct from a different company drafted under the wrong brand's voice\nis the failure this prevents. Pass `brand_id` only when the user has\ntold you which brand this product belongs to.\n\nThis does not spend credits. Only `generate_video` does.\n",
|
|
35
|
+
"description": "Start a new InstantClips product from a product page URL (a storefront\nlisting, e.g. a Shopify product page).\n\nReturns immediately with a product_id — the scrape, the image download\nand the first video-direction draft all run in the background. Poll\n`get_product` until `import_status` is \"imported\" and\n`video_direction.drafting` is false, which usually takes under a minute.\n\nPasting a URL that was already imported on this account returns that\nexisting product instead of creating a duplicate. If that import had\nfailed, pasting it again retries it (`retried` is true). If its video\nhas already been generated, editing or redrafting opens the next\nvideo's draft. Either way the response's `next_step` says what to do now.\n\nIf the storefront name does not exactly match a brand this account has\nalready reviewed, the import stops on a brand decision instead of\nguessing: `get_product` will report `brand_decision_required`, and no\nvideo direction is drafted until it is resolved with `create_brand` or\n`set_product_brand`. Do not assume the account's existing brand — a\nproduct from a different company drafted under the wrong brand's voice\nis the failure this prevents. Pass `brand_id` only when the user has\ntold you which brand this product belongs to.\n\nDirection drafting sends product facts, photos and brand context to\nan external AI service when the product is ready and its brand is settled.\n\nA store-domain ownership restriction refuses the import and sends a\nsupport notification containing account and store information.\n\nThis does not spend credits. Only `generate_video` does.\n",
|
|
36
36
|
"inputSchema": {
|
|
37
|
-
"
|
|
37
|
+
"type": "object",
|
|
38
38
|
"properties": {
|
|
39
39
|
"url": {
|
|
40
40
|
"type": "string",
|
|
@@ -48,21 +48,21 @@
|
|
|
48
48
|
"required": [
|
|
49
49
|
"url"
|
|
50
50
|
],
|
|
51
|
-
"
|
|
51
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema"
|
|
52
52
|
},
|
|
53
53
|
"annotations": {
|
|
54
|
-
"
|
|
54
|
+
"readOnlyHint": false,
|
|
55
|
+
"destructiveHint": true,
|
|
55
56
|
"idempotentHint": false,
|
|
56
|
-
"openWorldHint": true
|
|
57
|
-
"readOnlyHint": false
|
|
57
|
+
"openWorldHint": true
|
|
58
58
|
}
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
61
|
"name": "create_product_from_images",
|
|
62
62
|
"title": "Create a product from image URLs",
|
|
63
|
-
"description": "Start a new InstantClips product from hosted product photos, for a\nproduct that has no public page to scrape.\n\nImages must be publicly reachable URLs — this endpoint cannot read files\nfrom the caller's machine. Images larger than\n8MB are skipped; at most\n9 are used in a render.\n\nReturns immediately with a product_id; the downloads
|
|
63
|
+
"description": "Start a new InstantClips product from hosted product photos, for a\nproduct that has no public page to scrape.\n\nImages must be publicly reachable URLs — this endpoint cannot read files\nfrom the caller's machine. Images larger than\n8MB are skipped; at most\n9 are used in a render.\n\nReturns immediately with a product_id; the downloads run in the\nbackground. Poll `get_product` until `import_status` is \"imported\".\n\nPhotos carry no brand identity, so nothing can detect the brand here.\nWithout `brand_id` the product waits on a brand decision\n(`brand_decision_required` on the response and on `get_product`) and\nno video direction is drafted until it is settled with\n`set_product_brand` or `create_brand`. Ask the user which brand this\nis; do not pick for them.\n\nPrefer `import_product_from_url` when a product page exists — the scrape\nalso collects the name, description, price and brand identity, which\nmake for a far better direction draft than images alone.\n\nDirection drafting sends product facts, photos and brand context to\nan external AI service when the product is ready and its brand is settled.\n\nThis does not spend credits. Only `generate_video` does.\n",
|
|
64
64
|
"inputSchema": {
|
|
65
|
-
"
|
|
65
|
+
"type": "object",
|
|
66
66
|
"properties": {
|
|
67
67
|
"image_urls": {
|
|
68
68
|
"type": "array",
|
|
@@ -86,28 +86,28 @@
|
|
|
86
86
|
},
|
|
87
87
|
"brand_id": {
|
|
88
88
|
"type": "string",
|
|
89
|
-
"description": "
|
|
89
|
+
"description": "Optional, and only when the user has said which brand this product belongs to (from `list_brands`). Omit it and the product waits on a brand decision instead of falling through to the account's default brand."
|
|
90
90
|
}
|
|
91
91
|
},
|
|
92
92
|
"required": [
|
|
93
93
|
"image_urls",
|
|
94
94
|
"name"
|
|
95
95
|
],
|
|
96
|
-
"
|
|
96
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema"
|
|
97
97
|
},
|
|
98
98
|
"annotations": {
|
|
99
|
+
"readOnlyHint": false,
|
|
99
100
|
"destructiveHint": false,
|
|
100
101
|
"idempotentHint": false,
|
|
101
|
-
"openWorldHint": true
|
|
102
|
-
"readOnlyHint": false
|
|
102
|
+
"openWorldHint": true
|
|
103
103
|
}
|
|
104
104
|
},
|
|
105
105
|
{
|
|
106
106
|
"name": "get_product",
|
|
107
107
|
"title": "Get a product and its video direction",
|
|
108
|
-
"description": "Read a product: what the import found, the current video direction and\nsettings, and every video generated from it.\n\nUse this to poll after `import_product_from_url` or\n`create_product_from_images`. The product is ready to work with when\n`import_status` is \"imported\"
|
|
108
|
+
"description": "Read a product: what the import found, the current video direction and\nsettings, and every video generated from it.\n\nUse this to poll after `import_product_from_url` or\n`create_product_from_images`. The product is ready to work with when\n`import_status` is \"imported\", there is no `brand_decision_required`,\nAND `video_direction.drafting` is false. If a brand decision is present\nwith `drafting: false`, ask the user to choose a brand and resolve it\nwith `create_brand` or `set_product_brand` before waiting for a direction.\nPoll every 20-30 seconds while import or drafting is in progress.\n\n`import_status` values: \"pending\" and \"importing\" mean keep polling;\n\"imported\" means done; \"failed\" means it did not work and\n`import_failed_reason` says why.\n\n`video_direction.credit_cost` is what `generate_video` will charge for\nthe current settings.\n\nOnce generation has started the direction is locked and\n`video_direction.editable` is false. Editing or redrafting then opens\nthe next video's draft, and `next_step` says so.\n",
|
|
109
109
|
"inputSchema": {
|
|
110
|
-
"
|
|
110
|
+
"type": "object",
|
|
111
111
|
"properties": {
|
|
112
112
|
"product_id": {
|
|
113
113
|
"type": "string",
|
|
@@ -117,21 +117,21 @@
|
|
|
117
117
|
"required": [
|
|
118
118
|
"product_id"
|
|
119
119
|
],
|
|
120
|
-
"
|
|
120
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema"
|
|
121
121
|
},
|
|
122
122
|
"annotations": {
|
|
123
|
+
"readOnlyHint": true,
|
|
123
124
|
"destructiveHint": false,
|
|
124
125
|
"idempotentHint": true,
|
|
125
|
-
"openWorldHint": false
|
|
126
|
-
"readOnlyHint": true
|
|
126
|
+
"openWorldHint": false
|
|
127
127
|
}
|
|
128
128
|
},
|
|
129
129
|
{
|
|
130
130
|
"name": "create_brand",
|
|
131
131
|
"title": "Create a brand for a product",
|
|
132
|
-
"description": "Create a new brand
|
|
132
|
+
"description": "Create a new brand for a product that is waiting on\n`brand_decision_required`, and attach the product to it.\n\nUse this when the product belongs to a company the account has no brand\nfor yet — the usual case when someone brings a new store. For a product\nimported from a URL the brand's name, voice, target market and keywords\nare taken from what the storefront scrape drafted; the user can rename\nit with `name`. For a product created from photos nothing was detected\n(`detected_brand_name` is null), so `name` is required and `voice`,\n`target_market` and `keywords` should come from the user — ask them how\nthe brand sounds and who it sells to. Anything you pass overrides the\ndetected value.\n\nAsk the user before calling this. It consumes one of the plan's brand\nslots, and on a plan that has run out this fails with a brand-limit\nerror — at which point the choices are to attach the product to an\nexisting brand with `set_product_brand`, to re-point an existing brand\nat this identity with `set_product_brand` and `replace_identity: true`,\nor to upgrade.\n\nOnce this returns, the video direction starts drafting: poll\n`get_product` until `video_direction.drafting` is false.\n\nDirection drafting sends product facts, photos and brand context to\nan external AI service when the product is ready and its brand is settled.\n\nThis does not spend credits.\n",
|
|
133
133
|
"inputSchema": {
|
|
134
|
-
"
|
|
134
|
+
"type": "object",
|
|
135
135
|
"properties": {
|
|
136
136
|
"product_id": {
|
|
137
137
|
"type": "string",
|
|
@@ -139,27 +139,42 @@
|
|
|
139
139
|
},
|
|
140
140
|
"name": {
|
|
141
141
|
"type": "string",
|
|
142
|
-
"description": "
|
|
142
|
+
"description": "The brand's name. Optional when a storefront name was detected (it overrides it); required for a product created from photos."
|
|
143
|
+
},
|
|
144
|
+
"voice": {
|
|
145
|
+
"type": "string",
|
|
146
|
+
"description": "Optional. How the brand talks, in a sentence or two — the tone every video direction is drafted in."
|
|
147
|
+
},
|
|
148
|
+
"target_market": {
|
|
149
|
+
"type": "string",
|
|
150
|
+
"description": "Optional. Who the brand sells to, as \"Region, Language\" (e.g. \"US, English\"). Sets the market and spoken language of every video on the brand."
|
|
151
|
+
},
|
|
152
|
+
"keywords": {
|
|
153
|
+
"type": "array",
|
|
154
|
+
"items": {
|
|
155
|
+
"type": "string"
|
|
156
|
+
},
|
|
157
|
+
"description": "Optional. A few short keywords for the brand's themes and audience — generic enough to survive a different product."
|
|
143
158
|
}
|
|
144
159
|
},
|
|
145
160
|
"required": [
|
|
146
161
|
"product_id"
|
|
147
162
|
],
|
|
148
|
-
"
|
|
163
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema"
|
|
149
164
|
},
|
|
150
165
|
"annotations": {
|
|
166
|
+
"readOnlyHint": false,
|
|
151
167
|
"destructiveHint": false,
|
|
152
168
|
"idempotentHint": false,
|
|
153
|
-
"openWorldHint":
|
|
154
|
-
"readOnlyHint": false
|
|
169
|
+
"openWorldHint": true
|
|
155
170
|
}
|
|
156
171
|
},
|
|
157
172
|
{
|
|
158
173
|
"name": "set_product_brand",
|
|
159
174
|
"title": "Attach a product to an existing brand",
|
|
160
|
-
"description": "Attach a product waiting on `brand_decision_required` to one of the\naccount's existing brands. Use `list_brands` to see them.\n\nOnly do this when the user has confirmed the product really belongs to\nthat brand. Attaching a product to an unrelated brand is not a cosmetic\nmislabel: every video is drafted in that brand's voice, to its target\nmarket, with its keywords.\n\nBy default the brand's existing identity is left untouched. Pass\n`replace_identity: true` to instead overwrite that brand's voice, target\nmarket and keywords with the identity detected on this product — the\n\"re-point my brand at a different company\" move, for an account at its\nbrand limit. This rewrites a brand every other product on it shares, so\nconfirm it with the user explicitly first.\n\nOnce this returns, the video direction starts drafting: poll\n`get_product` until `video_direction.drafting` is false.\n\nThis does not spend credits.\n",
|
|
175
|
+
"description": "Attach a product waiting on `brand_decision_required` to one of the\naccount's existing brands. Use `list_brands` to see them.\n\nOnly do this when the user has confirmed the product really belongs to\nthat brand. Attaching a product to an unrelated brand is not a cosmetic\nmislabel: every video is drafted in that brand's voice, to its target\nmarket, with its keywords.\n\nBy default the brand's existing identity is left untouched. Pass\n`replace_identity: true` to instead overwrite that brand's voice, target\nmarket and keywords with the identity detected on this product — the\n\"re-point my brand at a different company\" move, for an account at its\nbrand limit. This rewrites a brand every other product on it shares, so\nconfirm it with the user explicitly first.\n\nOnce this returns, the video direction starts drafting: poll\n`get_product` until `video_direction.drafting` is false.\n\nReplacement also applies nonempty detected logo and colors, and can\nname an existing Default brand shell. Blank draft fields preserve saved\nvalues. An uploaded logo replaces the attached logo.\n\nDirection drafting sends product facts, photos and brand context to\nan external AI service when the product is ready and its brand is settled.\n\nThis does not spend credits.\n",
|
|
161
176
|
"inputSchema": {
|
|
162
|
-
"
|
|
177
|
+
"type": "object",
|
|
163
178
|
"properties": {
|
|
164
179
|
"product_id": {
|
|
165
180
|
"type": "string",
|
|
@@ -171,28 +186,28 @@
|
|
|
171
186
|
},
|
|
172
187
|
"replace_identity": {
|
|
173
188
|
"type": "boolean",
|
|
174
|
-
"description": "Optional, default false. Overwrite the brand's voice, target market and keywords with this product's detected identity. Affects every product on that brand — confirm with the user."
|
|
189
|
+
"description": "Optional, default false. Overwrite the brand's voice, target market and keywords with this product's detected identity. Also applies logo and colors; blank fields are preserved. Affects every product on that brand — confirm with the user."
|
|
175
190
|
}
|
|
176
191
|
},
|
|
177
192
|
"required": [
|
|
178
193
|
"product_id",
|
|
179
194
|
"brand_id"
|
|
180
195
|
],
|
|
181
|
-
"
|
|
196
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema"
|
|
182
197
|
},
|
|
183
198
|
"annotations": {
|
|
199
|
+
"readOnlyHint": false,
|
|
184
200
|
"destructiveHint": true,
|
|
185
201
|
"idempotentHint": false,
|
|
186
|
-
"openWorldHint":
|
|
187
|
-
"readOnlyHint": false
|
|
202
|
+
"openWorldHint": true
|
|
188
203
|
}
|
|
189
204
|
},
|
|
190
205
|
{
|
|
191
206
|
"name": "update_video_direction",
|
|
192
207
|
"title": "Edit the video direction and render settings",
|
|
193
|
-
"description": "Edit the creative direction and render settings for a product's next\nvideo. Only the fields you pass are changed; everything else keeps its\ncurrent value.\n\n`creative_direction` is the plan the render is built from. It is free\ntext, but the drafts follow a six-section shape that works well and is\nworth preserving when editing:\n\n Hook: ...\n Content Focus: ...\n Format: ...\n Execution Guidelines: ...\n Strict Guidelines & Restrictions: ...\n\nDo not invent a direction from nothing when one has not been drafted\nyet — call `redraft_video_direction` and edit what comes back. Leaving\nit empty is also valid: generation works without a direction.\n\n`creator_note` is different and smaller: the user's own short note to\nthe director (\"mention it is machine washable\", \"for Father's Day\"). It\nis carried through to the render verbatim, so put the user's words in\nit, not your paraphrase.\n\
|
|
208
|
+
"description": "Edit the creative direction and render settings for a product's next\nvideo. Only the fields you pass are changed; everything else keeps its\ncurrent value. Supplied text replaces the saved text; an empty creative\ndirection clears it. A target_market change updates the shared brand\nand affects future videos for its other products.\n\n`creative_direction` is the plan the render is built from. It is free\ntext, but the drafts follow a six-section shape that works well and is\nworth preserving when editing:\n\n Hook: ...\n Content Focus: ...\n Format: ...\n Suggesting Visual Aesthetic: ...\n Execution Guidelines: ...\n Strict Guidelines & Restrictions: ...\n\nDo not invent a direction from nothing when one has not been drafted\nyet — call `redraft_video_direction` and edit what comes back. Leaving\nit empty is also valid: generation works without a direction.\n\n`creator_note` is different and smaller: the user's own short note to\nthe director (\"mention it is machine washable\", \"for Father's Day\"). It\nis carried through to the render verbatim, so put the user's words in\nit, not your paraphrase.\n\nA target_market change after a direction exists gets a `next_step` in\nthe response: the direction's wording sets the spoken language, so it\nneeds a redraft (or an edit) to match the new market.\n\nA launched video cannot change: if the product's last video has\nalready launched, this opens the next video's draft (seeded from that\nvideo) and edits that; the response says `opened_new_video: true` and\ncarries the new video_request_id.\n\nThis does not spend credits.\n",
|
|
194
209
|
"inputSchema": {
|
|
195
|
-
"
|
|
210
|
+
"type": "object",
|
|
196
211
|
"properties": {
|
|
197
212
|
"product_id": {
|
|
198
213
|
"type": "string",
|
|
@@ -223,7 +238,7 @@
|
|
|
223
238
|
"720P",
|
|
224
239
|
"1080P"
|
|
225
240
|
],
|
|
226
|
-
"description": "1080P
|
|
241
|
+
"description": "1080P is available to credit-pack purchasers and eligible tiers; a pick above the account's ceiling becomes that ceiling (the response reports what was actually saved)."
|
|
227
242
|
},
|
|
228
243
|
"enable_audio": {
|
|
229
244
|
"type": "boolean",
|
|
@@ -237,21 +252,21 @@
|
|
|
237
252
|
"required": [
|
|
238
253
|
"product_id"
|
|
239
254
|
],
|
|
240
|
-
"
|
|
255
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema"
|
|
241
256
|
},
|
|
242
257
|
"annotations": {
|
|
243
|
-
"
|
|
258
|
+
"readOnlyHint": false,
|
|
259
|
+
"destructiveHint": true,
|
|
244
260
|
"idempotentHint": true,
|
|
245
|
-
"openWorldHint": false
|
|
246
|
-
"readOnlyHint": false
|
|
261
|
+
"openWorldHint": false
|
|
247
262
|
}
|
|
248
263
|
},
|
|
249
264
|
{
|
|
250
265
|
"name": "redraft_video_direction",
|
|
251
266
|
"title": "Draft a new creative direction",
|
|
252
|
-
"description": "Ask InstantClips to draft a fresh creative direction for this product's\nnext video, using the product's facts, its images and the brand's\nidentity. Use it to get a first draft, or to try a different angle when\nthe user does not like the current one.\n\nThis OVERWRITES the current direction — including any edits. Confirm with\nthe user before re-rolling a direction they have already worked on.\n\nThe draft runs in the background: this returns with `drafting` true, and\nyou poll `get_product` until `video_direction.drafting` is false (a few\nseconds). Rolling a fresh angle is the point, so calling it twice gives\ntwo different drafts, not the same one.\n\nThis does not spend credits.\n",
|
|
267
|
+
"description": "Ask InstantClips to draft a fresh creative direction for this product's\nnext video, using the product's facts, its images and the brand's\nidentity. Use it to get a first draft, or to try a different angle when\nthe user does not like the current one.\n\nThis OVERWRITES the current direction — including any edits. Confirm with\nthe user before re-rolling a direction they have already worked on.\n\nIf the product's last video has already launched, this opens the next\nvideo's draft (seeded from that video) and drafts into it; the response\nsays `opened_new_video: true` and carries the new video_request_id.\n\nThe draft runs in the background: this returns with `drafting` true, and\nyou poll `get_product` until `video_direction.drafting` is false (a few\nseconds). Rolling a fresh angle is the point, so calling it twice gives\ntwo different drafts, not the same one.\n\nDirection drafting sends product facts, photos and brand context to\nan external AI service when the product is ready and its brand is settled.\n\nThis does not spend credits.\n",
|
|
253
268
|
"inputSchema": {
|
|
254
|
-
"
|
|
269
|
+
"type": "object",
|
|
255
270
|
"properties": {
|
|
256
271
|
"product_id": {
|
|
257
272
|
"type": "string",
|
|
@@ -259,51 +274,56 @@
|
|
|
259
274
|
},
|
|
260
275
|
"format": {
|
|
261
276
|
"type": "string",
|
|
262
|
-
"description": "Optional. Pin a specific video format instead of letting the drafter pick one — e.g. \"
|
|
277
|
+
"description": "Optional. Pin a specific video format instead of letting the drafter pick one — e.g. \"asmr\", \"hands_demo\", \"pov\". Unknown values are ignored, so leave it out unless the user asked for a particular kind of video."
|
|
263
278
|
}
|
|
264
279
|
},
|
|
265
280
|
"required": [
|
|
266
281
|
"product_id"
|
|
267
282
|
],
|
|
268
|
-
"
|
|
283
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema"
|
|
269
284
|
},
|
|
270
285
|
"annotations": {
|
|
286
|
+
"readOnlyHint": false,
|
|
271
287
|
"destructiveHint": true,
|
|
272
288
|
"idempotentHint": false,
|
|
273
|
-
"openWorldHint": true
|
|
274
|
-
"readOnlyHint": false
|
|
289
|
+
"openWorldHint": true
|
|
275
290
|
}
|
|
276
291
|
},
|
|
277
292
|
{
|
|
278
293
|
"name": "generate_video",
|
|
279
294
|
"title": "Generate the video (spends credits)",
|
|
280
|
-
"description": "Render the video. THIS SPENDS THE USER'S CREDITS.\n\nAsk the user before calling this, every time. Tell them the cost first —\n`get_product` reports it as `video_direction.credit_cost`, and the\nuser's balance as `credits_remaining
|
|
295
|
+
"description": "Render the video. THIS SPENDS THE USER'S CREDITS.\nProduct photos, brand identity and direction are sent to external\ngeneration services. Results have public share pages; generation can\ntrigger account emails, including a first-generation welcome email.\n\nAsk the user before calling this, every time. Tell them the cost first —\n`get_product` reports it as `video_direction.credit_cost`, and the\nuser's balance as `credits_remaining` — and pass that cost as\n`expected_credit_cost`: if it no longer matches (settings changed, a\nresolution was clamped), nothing is charged and the response says the\ncurrent cost. Credits are charged at launch, not on completion; a\nfailed render is refunded automatically.\n\nShow the user the creative direction and let them approve or edit it\nbefore you call this. Do not call it to \"see what happens\", to retry a\nrender that is still in progress, or as part of a batch you decided on\nyour own.\n\nReturns as soon as the render is queued. Poll `get_video` with the\nreturned video_request_id every 20-30 seconds until its status is\n\"done\" (a few minutes), then give the user `output_url` and\n`share_url`.\n\nIf the account cannot afford it, nothing is charged and the response\nsays so — tell the user to top up at the credits page rather than\nretrying.\n\nIf the product's last video is finished (done or failed) and there is\nno draft, this renders another take of the same plan as a new video,\nat the same cost; the response says `opened_new_video: true`. While a\nrender is in flight it refuses.\n",
|
|
281
296
|
"inputSchema": {
|
|
282
|
-
"
|
|
297
|
+
"type": "object",
|
|
283
298
|
"properties": {
|
|
284
299
|
"product_id": {
|
|
285
300
|
"type": "string",
|
|
286
301
|
"description": "The product to render. Its current direction and settings are used as-is."
|
|
302
|
+
},
|
|
303
|
+
"expected_credit_cost": {
|
|
304
|
+
"type": "integer",
|
|
305
|
+
"description": "The credit cost you told the user — get_product's video_direction.credit_cost. It must still be the cost: if it has changed, nothing is charged and the response says the new number."
|
|
287
306
|
}
|
|
288
307
|
},
|
|
289
308
|
"required": [
|
|
290
|
-
"product_id"
|
|
309
|
+
"product_id",
|
|
310
|
+
"expected_credit_cost"
|
|
291
311
|
],
|
|
292
|
-
"
|
|
312
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema"
|
|
293
313
|
},
|
|
294
314
|
"annotations": {
|
|
295
|
-
"
|
|
315
|
+
"readOnlyHint": false,
|
|
316
|
+
"destructiveHint": true,
|
|
296
317
|
"idempotentHint": false,
|
|
297
|
-
"openWorldHint": true
|
|
298
|
-
"readOnlyHint": false
|
|
318
|
+
"openWorldHint": true
|
|
299
319
|
}
|
|
300
320
|
},
|
|
301
321
|
{
|
|
302
322
|
"name": "get_video",
|
|
303
323
|
"title": "Check a video's render status",
|
|
304
|
-
"description": "Check one video's render.\n\n`status` values:\n \"generating\" — still rendering, keep polling every 20-30 seconds.\n \"done\" — finished; `output_url` is the MP4 and `share_url` is a\n public page to send someone.\n \"failed\" — `failed_reason` says why. The credits
|
|
324
|
+
"description": "Check one video's render.\n\n`status` values:\n \"generating\" — still rendering, keep polling every 20-30 seconds.\n \"done\" — finished; `output_url` is the MP4 and `share_url` is a\n public page to send someone. `watermarked` is true when\n that MP4 carries the InstantClips watermark (free\n accounts); buying credits switches every video on the\n account to the clean file, nothing is re-rendered.\n \"failed\" — `failed_reason` says why and what to change. The credits\n were refunded automatically. To try again, make the change\n with `update_video_direction` or `redraft_video_direction`\n (either opens the next video's draft), then `generate_video`.\n \"insufficient_credit\" — never launched; nothing was charged.\n \"pending\" — not launched yet; call `generate_video`.\n\n`next_step` says which of those applies right now.\n\nA render normally takes a few minutes. Tell the user what you are\nwaiting on rather than polling silently in a tight loop.\n",
|
|
305
325
|
"inputSchema": {
|
|
306
|
-
"
|
|
326
|
+
"type": "object",
|
|
307
327
|
"properties": {
|
|
308
328
|
"video_request_id": {
|
|
309
329
|
"type": "string",
|
|
@@ -313,13 +333,13 @@
|
|
|
313
333
|
"required": [
|
|
314
334
|
"video_request_id"
|
|
315
335
|
],
|
|
316
|
-
"
|
|
336
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema"
|
|
317
337
|
},
|
|
318
338
|
"annotations": {
|
|
339
|
+
"readOnlyHint": true,
|
|
319
340
|
"destructiveHint": false,
|
|
320
341
|
"idempotentHint": true,
|
|
321
|
-
"openWorldHint": false
|
|
322
|
-
"readOnlyHint": true
|
|
342
|
+
"openWorldHint": false
|
|
323
343
|
}
|
|
324
344
|
}
|
|
325
345
|
]
|