Dare MCP Server
Servidor MCP que permite a Claude generar video e imágenes con IA a través de Dare (Seedance 2.5, Veo 3.1, Kling, Hailuo), facturado a tus propios créditos de Dare.
Documentación
dare-mcp-server
Genera video e imágenes desde Claude, facturado a tus propios créditos de Dare.
Pídele a Claude una toma y él la crea — Seedance 2.5, Seedance 2.0, Veo 3.1, Kling 3.0 Pro, Hailuo 2.3 para video, Nano Banana 2, GPT Image 2 y Seedream 5 Pro para imágenes fijas. Sin nueva suscripción, sin clave API que comprar: gasta los créditos de Dare que ya tienes.
> make me a 10 second 720p cinematic shot of rain on a neon Tokyo street, 16:9
Estimated 110 credits (you have 4,280). Generating…
Done: https://storage.trydare.com/…/rain-tokyo.mp4
Funciona con Claude Code, la aplicación de escritorio de Claude y Cowork.
[!IMPORTANT] Dare no publica una API para desarrolladores. Este servidor habla con el mismo endpoint privado que usa la aplicación web de Dare, con tu sesión iniciada mediante tu propia sesión de navegador. Funciona hoy — cada herramienta aquí ha sido probada contra los servidores en vivo de Dare, incluyendo una generación completa hasta el final — pero Dare puede cambiar ese contrato sin previo aviso, y su uso puede estar fuera de los términos de servicio de Dare. Tu cuenta, tus créditos, tu decisión.
Instalación
Necesitas Node.js 20 o más reciente. Verifica con node --version; si eso
da error, instala la versión LTS desde nodejs.org (en una Mac, brew install node también funciona).
Luego ejecuta un comando en tu terminal:
npx dare-mcp-server setup
Eso es toda la instalación. El asistente:
- te muestra dónde encontrar tu token de Dare (cuatro clics en tu navegador),
- lo verifica contra Dare e imprime tu saldo de créditos,
- lo guarda en
~/.dare-mcp/config.jsoncon permisos solo para el propietario, - añade Dare a Claude Code y/o a la aplicación de escritorio de Claude por ti.
Reinicia Claude cuando termine. En Claude Code, /mcp debería listar ahora dare.
npx dare-mcp setup también funciona — dare-mcp es un
alias corto que reenvía al mismo paquete.
Aplicación de escritorio de Claude, sin terminal: descarga dare-mcp-server-0.2.0.mcpb desde la
versión mcpb-0.2.0, ábrela
y pega tu token de Dare cuando se te pida. También está listado en el
Registro oficial de MCP
como io.github.avi-aggarwal14/dare-mcp-server.
Paso 2 en detalle: encontrar tu token de Dare
El servidor inicia sesión como tú, usando la cookie de larga duración __client de Clerk desde tu navegador.
Genera un token de sesión nuevo de 60 segundos para cada llamada, exactamente como hace la aplicación web de Dare.
- Inicia sesión en https://trydare.com en Chrome, Edge, Arc o Brave.
- Abre DevTools — Cmd+Option+I en macOS, F12 en Windows y Linux.
- Ve a la pestaña Application → Storage → Cookies →
https://clerk.trydare.com. (En Firefox y Safari la pestaña se llama Storage en su lugar.) - Encuentra la fila llamada
__clienty copia su Valor — una cadena larga que comienza coneyJ. Copia el valor, no el nombre. - Pégalo en el asistente. Tu terminal no lo mostrará de vuelta.
La cookie es válida durante aproximadamente un año, así que este es un paso único a menos que cierres sesión en Dare.
Trátala como una contraseña. Otorga acceso completo a tu cuenta de Dare y puede gastar tus
créditos. El asistente la guarda en un solo archivo con permisos 0600 y deliberadamente no
la escribe en tu configuración de Claude, para que tus ajustes de Claude sean seguros de sincronizar o compartir.
¿Prefieres hacerlo a mano?
Claude Code
claude mcp add dare --scope user -- npx -y dare-mcp-server
Aplicación de escritorio de Claude — edita el archivo de configuración:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"dare": {
"command": "npx",
"args": ["-y", "dare-mcp-server"]
}
}
}
Luego cierra y vuelve a abrir la aplicación.
Ambos leen tu token desde ~/.dare-mcp/config.json. Si prefieres pasarlo como una
variable de entorno (CI, contenedores, una máquina compartida), configura DARE_CLIENT_TOKEN en su lugar — tiene
prioridad sobre el archivo almacenado. Consulta Configuración.
Ejecutar desde el código fuente
git clone https://github.com/avi-aggarwal14/dare-mcp-server.git
cd dare-mcp-server
npm install # builds automatically
npm run setup # same wizard
Apunta Claude a node /absolute/path/to/dare-mcp-server/dist/cli.js en lugar de npx.
Verifica que funciona
npx dare-mcp-server check
Genera un token, lee tu saldo, lista algunos elementos de la biblioteca. Ejecútalo cada vez que las herramientas empiecen a fallar — es la forma más rápida de distinguir una cookie caducada de una interrupción de Dare.
Primeras cosas para probar
Una vez que Claude se haya reiniciado, solo pregunta en lenguaje natural:
> how many Dare credits do I have?
> what video models can I use, and what do they cost?
> make a 5 second clip of a paper boat going down a rain gutter, cinematic, 16:9
> use ~/shots/hero.png as a reference and animate the character walking toward camera
> what's in my Dare library from this week?
Claude te dará una estimación de créditos antes de gastar nada, y siempre puedes pedirle que haga una prueba en seco primero.
Herramientas
| Herramienta | Gasta créditos | Qué hace |
|---|---|---|
dare_list_models | no | Modelos con duraciones, calidades, relaciones de aspecto, límites de referencias |
dare_estimate_cost | no | Estimación local de créditos antes de comprometerte |
dare_get_credit_balance | no | Saldo actual |
dare_generate_video | sí | Texto a video, Seedance 2.5 por defecto; medios de referencia opcionales. dry_run: true previsualiza la especificación y el precio de forma gratuita |
dare_generate_image | sí | Imágenes fijas mediante Nano Banana 2, GPT Image 2, Seedream 5 Pro. Admite dry_run |
dare_get_generation | no | Consulta el estado, obtiene la URL de salida |
dare_list_generations | no | Listado paginado de la biblioteca |
dare_cancel_generation | no | Detiene un trabajo en curso |
dare_delete_generation | no | Elimina de la biblioteca (destructivo) |
dare_upload_media | no | Sube una imagen/clip/audio de referencia, devuelve un storage_key |
dare_list_uploads | no | Referencias subidas anteriormente |
dare_delete_upload | no | Elimina una referencia subida (destructivo) |
dare_list_projects | no | Tus proyectos de Dare |
CLI
| Comando | Qué hace |
|---|---|
npx dare-mcp-server setup | Asistente interactivo de primera ejecución |
npx dare-mcp-server check | Verifica las credenciales, imprime el saldo de créditos |
npx dare-mcp-server | Inicia el servidor MCP en stdio (Claude lo ejecuta por ti) |
npx dare-mcp-server http | Transporte HTTP opcional para autoalojamiento |
npx dare-mcp-server --help | Todo lo anterior |
Configuración
Las credenciales se leen en este orden, gana la primera coincidencia:
DARE_CLIENT_TOKENen el entorno~/.dare-mcp/config.json(escrito porsetup)
El archivo almacenado es JSON plano, así que puedes editarlo directamente:
{
"clientToken": "eyJ...",
"maxCreditsPerCall": 500,
"uploadRoots": ["/Users/you/Movies", "/Users/you/Pictures"]
}
Todo lo demás son variables de entorno:
| Variable | Predeterminado | Propósito |
|---|---|---|
DARE_CLIENT_TOKEN | de la configuración almacenada | La cookie __client de clerk.trydare.com. Requerida de una forma u otra. |
DARE_CONFIG_DIR | ~/.dare-mcp | Dónde vive la configuración almacenada. |
DARE_MAX_CREDITS_PER_CALL | 500 | Rechaza cualquier generación individual estimada por encima de esta cantidad de créditos. 0 lo desactiva. |
DARE_UPLOAD_ROOTS | — (bloqueado) | Directorios separados por comas desde los que dare_upload_media puede leer archivos locales. Vacío significa que las lecturas de archivos locales se rechazan. |
DARE_ALLOW_URL_UPLOADS | true | Permite subir desde una URL pública. Las direcciones privadas y de enlace local siempre se rechazan. |
DARE_MAX_UPLOAD_BYTES | 536870912 | Mayor carga aceptada. |
DARE_SESSION_TOKEN | — | Un JWT de sesión de 60s ya preparado. Solo para pruebas. |
DARE_SESSION_ID | auto | Fija un id de sess_... específico en lugar de autodetectarlo. |
DARE_REQUEST_TIMEOUT_MS | 120000 | Tiempo de espera por solicitud. |
DARE_SERVER_URL | https://api.trydare.com | Base RPC de Dare. |
DARE_CLERK_FAPI_URL | https://clerk.trydare.com | Base de la API Frontend de Clerk. |
DARE_MAX_CREDITS_PER_CALL es un interruptor de circuito del lado del cliente contra un modelo que se convence
a sí mismo de un lote de 10 variaciones de 30 segundos (3,200 créditos). El valor predeterminado de 500 permite cualquier
clip individual de Seedance 2.5 mientras bloquea lotes descontrolados; súbelo deliberadamente cuando quieras un lote.
La estimación es conservadora en el único lugar donde no puede ser exacta: un video de referencia cuya
duración Dare no puede informar se cotiza a 30 segundos, que es la propia suposición de Dare. La protección falla de forma segura: si
la duración de un clip de referencia no se puede leer, la generación se rechaza en lugar de enviarse con
una estimación adivinada.
DARE_UPLOAD_ROOTS es una lista de permitidos, no una conveniencia. Sin ella, dare_upload_media
rechaza rutas locales por completo — de lo contrario, un modelo con inyección de prompt podría pedirle al servidor que
subiera tu entorno de shell o la configuración de Claude, ambos contienen DARE_CLIENT_TOKEN.
Apunta a las carpetas que realmente contienen tu metraje fuente.
Costos de créditos
Dare cotiza cada trabajo como costo del proveedor en dólares, multiplicado por 1.5, convertido a 750 créditos por $49.99, redondeado hacia arriba al 1, 5 o 10 créditos más cercano. El servidor reproduce esa fórmula exactamente; fue verificada contra cargos reales (un clip de Seedance 2.5 de 4s a 480p facturado a 20 créditos, como se predijo). Cifras típicas:
| Trabajo | Créditos |
|---|---|
| Seedance 2.5, 4s, 480p | 20 |
| Seedance 2.5, 8s, 720p | 90 |
| Seedance 2.5, 10s, 720p | 110 |
| Seedance 2.5, 30s, 480p | 150 |
| Seedance 2.5, 30s, 720p | 320 |
| Seedance 2.0 Fast, 5s, 480p | 15 |
| Seedance 2.0, 15s, 4K | 530 |
| Veo 3.1, 8s, 1080p | 80 |
| Kling 3.0 Pro, 5s | 20 |
| Hailuo 2.3 Pro (fijo 6s) | 15 |
| Imagen Nano Banana 2, 2K | 4 |
| GPT Image 2, 1:1 | 5 |
Adjuntar una referencia de video aplica un multiplicador de 0.6x en los modelos Seedance, y en Seedance 2.5 los segundos propios del clip de referencia se facturan además. Las referencias de imagen y audio no cambian el precio.
Siempre verifica con dare_estimate_cost antes de un lote.
Generación basada en referencias
1. dare_upload_media { file_path: "/Users/you/shots/hero.png" }
-> storage_key: "uploads/abc123..."
2. dare_generate_video {
prompt: "the character from the reference walks toward camera through fog",
reference_storage_keys: ["uploads/abc123..."],
duration_seconds: 8
}
Seedance 2.5 acepta hasta 50 referencias (30 imágenes, 10 videos, 10 audios), cada clip de 2–30s, 30 segundos combinados por tipo. Con una referencia de video adjunta, deriva la duración y la relación de aspecto automáticamente. Los modelos Seedance 2.0 aceptan 12 (9/3/3), 15s combinados, y necesitan una referencia visual junto con cualquier referencia de audio. Veo 3.1 acepta hasta 3 imágenes y se fija entonces en 8 segundos. Kling y Hailuo no aceptan referencias en absoluto.
HTTP remoto (opcional)
Se incluye un punto de entrada HTTP transmisible sin estado para alojar el servidor detrás de una URL:
DARE_CLIENT_TOKEN='eyJ...' \
DARE_MCP_BEARER_TOKEN="$(openssl rand -hex 32)" \
PORT=3000 npx dare-mcp-server http
POST /mcp, verificación de salud en /health. El servidor se niega a iniciar sin un token de portador
de al menos 24 caracteres, ya que estas herramientas gastan dinero real. La protección contra rebinding de DNS está activada por
defecto y limitada a localhost; amplíala con DARE_ALLOWED_HOSTS / DARE_ALLOWED_ORIGINS cuando
implementes detrás de un dominio. Las cargas de archivos locales y las cargas por URL están ambas deshabilitadas en este transporte
independientemente de la configuración.
Solución de problemas
DARE_UNAUTHORIZED — la cookie __client falta, está caducada, o cerraste sesión en Dare en
ese navegador. Ejecuta npx dare-mcp-server setup de nuevo con un valor fresco.
DARE_UNKNOWN_PROCEDURE — Dare cambió su RPC interno. Los nombres de los procedimientos viven en
src/dare.ts; compáralos con una captura fresca de la pestaña de red de la aplicación web.
DARE_INSUFFICIENT_CREDITS — el error informa de los créditos requeridos frente a los disponibles.
DARE_COST_GUARD — tu propio límite de DARE_MAX_CREDITS_PER_CALL se activó. Funciona como se esperaba.
DARE_REFERENCE_UNKNOWN — una clave de almacenamiento de referencia no se pudo resolver, por lo que el costo no
se pudo estimar. Verifica que la clave provenga de dare_upload_media o dare_list_uploads.
DARE_UPLOAD_FORBIDDEN — el archivo está fuera de DARE_UPLOAD_ROOTS, o estás en el transporte
HTTP donde las lecturas locales están deshabilitadas.
Notas de seguridad
- El token
__clientes acceso a nivel de cuenta. Cualquier cosa que pueda leerlo puede gastar tus créditos.setuppor lo tanto lo almacena en~/.dare-mcp/config.jsonen0600en lugar de en tu configuración de Claude, que a menudo se sincroniza, respalda o se confirma. - Las llamadas a
dare_generate_*nunca se reintentan automáticamente después de un fallo de autenticación. El endpoint de creación de Dare no tiene clave de idempotencia, por lo que un reintento ciego podría cobrarte dos veces. - Subir desde una URL resuelve el host primero, rechaza loopback, privado, enlace local, CGNAT, multicast y formas IPv4-mapeadas/6to4/NAT64 de esos, fija la conexión a la dirección verificada para que el rebinding de DNS no pueda competir con la verificación, y vuelve a verificar cada salto de redirección.
Cómo funciona
Claude Code / desktop / Cowork
│ MCP (stdio)
▼
dare-mcp-server
│ 1. POST clerk.trydare.com/v1/client/sessions/{id}/tokens (__client cookie)
│ -> 60s session JWT, cached 45s
│ 2. POST api.trydare.com/rpc/{procedure} (Bearer JWT)
│ oRPC envelope: { json, meta }
▼
Dare backend
Las cargas son tres pasos: storage.generateUploadUrl -> PUT al almacenamiento firmado -> uploads.create.
Procedimientos utilizados
| Procedimiento | Entrada |
|---|---|
generations.create | { spec, count, projectId?, metaEventId, timezone } |
generations.get / cancel / delete | { id } |
generations.getMediaInfo | { storageKey } |
libraryItems.list, uploads.list | { cursor, limit } |
storage.generateUploadUrl | { contentType, fileExtension } |
uploads.create | { storageKey, name, prompt, projectId, timezone } |
uploads.delete | { id } |
credits.getBalance, projects.list | sin entrada |
spec lleva solo las claves que declara el modelo elegido, exactamente como lo construye el compositor de Dare:
Los modelos Seedance envían { tool, prompt, model, audioEnabled, aspectRatio, duration, quality, context? },
Kling omite quality, Hailuo envía { tool, prompt, model } y nada más, GPT Image 2 no tiene
quality. duration es una cadena como "8s", context es { mediaStorageKeys, webLinkIds }, y
cada archivo adjunto también se referencia en el prompt como @<storageKey>. Usa dry_run: true en
cualquiera de las herramientas de generación para ver la especificación de cualquier combinación sin enviarla.
Los errores se mapean para que un agente pueda actuar sobre ellos: un registro faltante es DARE_NOT_FOUND, un procedimiento
renombrado DARE_UNKNOWN_PROCEDURE, un desajuste de esquema DARE_BAD_REQUEST con los problemas
a nivel de campo incluidos.
Estados de generación observados en la práctica: queued y processing mientras se ejecuta, succeeded
o failed al final. El archivo terminado está en generation.outputAsset.storageUrl. Cualquier cosa
no reconocida se trata como aún en ejecución, por lo que un estado renombrado en progreso nunca se confunde
con uno terminado.
Desinstalación
claude mcp remove dare --scope user # Claude Code
rm -rf ~/.dare-mcp # your stored token
Para la aplicación de escritorio, elimina la entrada "dare" de claude_desktop_config.json. Nada más
está instalado — npx no deja el paquete atrás.
Contribuciones
Las incidencias y las solicitudes de extracción son bienvenidas, especialmente si:
- Dare cambió un nombre de procedimiento o la forma de la especificación y algo se rompió
- los precios se desviaron de la tabla anterior
- se añadió o eliminó un modelo del compositor de Dare
git clone https://github.com/avi-aggarwal14/dare-mcp-server.git
cd dare-mcp-server
npm install
npm run build
npm run check # needs a real token
npm run inspect # MCP Inspector against a local build
Consulta CONTRIBUTING.md. Por favor, nunca pegues un token __client en una incidencia,
un registro o un fixture de prueba — es una credencial activa.
Autor
Creado por Avi Aggarwal en Londres. También dirijo hypjam, una agencia de UGC para startups.
Licencia
MIT. No afiliado, respaldado ni apoyado por Dare. "Dare", "Seedance", "Veo", "Kling" y "Hailuo" pertenecen a sus respectivos propietarios.