Bench Studio MCP Server
Bench Studio
Deja de alquilar el envoltorio. Sé dueño de la capa creativa.
Un estudio creativo local para imágenes, videos, sitios web, PDFs diseñados y flujos de trabajo de agentes de IA.
Inicio rápido · Consejos · Cómo funciona en profundidad · Qué cambió y por qué · Seguridad y privacidad

Bench Studio pone 73 rutas de imagen y video seleccionadas de 5 proveedores, refinamiento de prompts, controles conscientes de capacidades, custodia local de archivos y un registro de costos transparente detrás de una interfaz. El mismo sistema está disponible para Claude, Codex, Cursor y otros clientes compatibles a través de MCP.
Tus claves permanecen del lado del servidor en tu máquina. Tus prompts son editables antes de que gastes. Tus salidas se reflejan localmente. Tus costos se registran en unidades reales en lugar de desaparecer en créditos misteriosos.
[!NOTA] Esta es la distribución pública saneada. No incluye historial de generación, cargas, base de datos privada, rutas personales, credenciales ni artefactos de compilación local. Tu archivo comienza vacío.
📖 Guía de uso
Guía completa (página de inicio + paso a paso): https://inematds.github.io/bench-studio-en/guia/
Related MCP server: omnicinema-mcp
Por qué existe esto
La mayoría de los productos de IA creativa combinan cinco piezas útiles (acceso a modelos, pulido de prompts, enrutamiento, almacenamiento y facturación) y luego ocultan las uniones detrás de un plan mensual. Bench mantiene la comodidad mientras hace que cada unión sea inspeccionable.
En lugar de… | Bench te da… |
La hoja de ruta de modelos de un proveedor | Un registro seleccionado que puedes añadir o reemplazar |
Un cuadro de carga genérico | Controles derivados de las entradas aceptadas de cada endpoint |
Una reescritura invisible del prompt | Un borrador editable específico del modelo antes del envío |
Créditos abstractos | Una estimación previa y metadatos de gasto registrados |
Salidas atrapadas en una galería de cuenta | Archivos reflejados localmente y metadatos duraderos |
Un flujo de trabajo solo de interfaz | Las mismas capacidades a través de la interfaz y MCP |
Esperar la próxima función | Código fuente que puedes inspeccionar, cambiar y ampliar |
Bench no es dueño de los modelos subyacentes. Te da la propiedad de la capa portátil que conecta tus ideas, herramientas, proveedores, archivos y costos.
Ejecútalo en tres minutos
Lo que necesitas
Requerido
Node.js 22.5+; se recomienda Node 24, porque Bench usa
node:sqlite.npm.
Esa es toda la lista. Cada proveedor es opcional y se degrada por sí solo: una clave faltante hace que esos modelos aparezcan como no disponibles, con el motivo y cómo solucionarlo; el estudio aún se inicia. Trae al menos uno de estos para generar algo:
Proveedor | Modelos | Costo | Lo que necesitas |
37 | dólares, precios en vivo |
| |
26 | créditos del plan |
| |
4 | cero |
| |
4 | créditos |
| |
2 | cero (tu GPU) | un servidor local en ejecución |
Opcional, pero que vale la pena
Una clave de Google AI Studio o OpenRouter para el refinamiento de prompts. Sin un refinador, tu prompt se envía en bruto, lo que Agnes rechaza porque requiere inglés.
Google Chrome, para impresión de PDF y vista previa visual.
Un Codex o Claude Code con sesión iniciada, para compilaciones de sitios web y documentos impulsadas por agentes.
1. Clona e instala
git clone https://github.com/inematds/bench-studio-en.git
cd bench-studio-en
npm install2. Añade credenciales del lado del servidor
cp .env.example .envCompleta lo que tengas. .env.example documenta las 19 variables: qué desbloquea cada una, cómo factura y dónde crear la clave. Las claves permanecen del lado del servidor y nunca se envían al navegador; .env está en gitignore y se escribe con permisos de solo propietario.
Orden de lectura, primero el más alto:
exported in your shell > .env in the project > ~/.envO salta el archivo por completo: inicia el estudio y usa el botón Config en la esquina superior derecha. Muestra cada configuración (presente o faltante, de dónde proviene el valor y los últimos 4 caracteres), te permite probar cada proveedor y escribe .env por ti. Por seguridad, solo acepta escrituras desde la máquina que ejecuta el estudio.
3. Inicia el estudio
npm run devAbre http://localhost:5200.
Servicio | Dirección |
Estudio |
|
API local |
|
Resumen de salud y capacidades |
|
Si algún puerto está ocupado:
PORT=8790 BENCH_API_PORT=8790 BENCH_WEB_PORT=5201 npm run devAcceder desde otra máquina
Ambos puertos están vinculados a loopback, por lo que una instalación nueva solo te responde a ti. Abrir eso implica tres cosas: la interfaz escuchando en todas las interfaces, una regla de cortafuegos y recordar deshacer ambas. Un comando hace las tres:
./scripts/remote.sh open # publish the interface on this machine's IP
./scripts/remote.sh status # open or closed, and with what protection
./scripts/remote.sh close # back to local access onlyopen imprime la dirección para compartir, luego te dice que reinicies con npm run dev. close revierte exactamente lo que hizo open (leyendo un archivo de estado escrito en el momento de abrir, no adivinando) y deja la regla SSH intacta, porque eliminar eso es cómo la gente se bloquea de su propio servidor.
Dos banderas que vale la pena conocer:
./scripts/remote.sh open --ip 203.0.113.7 # only that address, not the internet
./scripts/remote.sh open --firewall # also enable ufw (SSH allowed first)open ofrece establecer una contraseña antes de abrir algo. Di que sí y pasa a npm run set-password; presiona Enter (o responde n) y el estudio se abre sin contraseña, que es el valor predeterminado documentado. La oferta está ahí por la asimetría a continuación: este es el último momento en que establecer una contraseña está a una pulsación de tecla.
La contraseña no se puede establecer ni cambiar desde la otra máquina, ni siquiera después de iniciar sesión. POST /api/config/password responde 403 a cualquier cosa que no provenga de loopback, sesión o no, y la pantalla de Config lo dice en lugar de mostrarte un campo inactivo. Esa regla evita que quien encuentre un puerto abierto establezca su propia contraseña y te bloquee el acceso a tu propio estudio. Por lo tanto:
npm run set-password # on the machine running the studio, over SSH or at the keyboardLo que open deliberadamente no hace: publicar la API. El puerto 8787 permanece en loopback (BENCH_API_HOST), por lo que el endpoint que escribe archivos y gasta dinero solo es accesible a través de la interfaz, en la propia máquina.
Esta es una postura de prueba, no un despliegue. El tráfico es HTTP plano y legible en tránsito. Para cualquier cosa que permanezca activa, lee la siguiente sección.
Dejarlo funcionando de forma segura
En orden aproximado de lo que realmente te protege:
Establece una contraseña en la instalación. En una máquina que será accesible, hazlo parte de la configuración:
npm install, luegonpm run set-password, luego./scripts/remote.sh open. Hacerlo en ese orden significa que el estudio nunca está abierto sin contraseña y nunca necesitas la pantalla de contraseña a la que no puedes acceder desde la red.Mantén la API en loopback. El valor predeterminado.
BENCH_API_HOST=0.0.0.0es una exclusión voluntaria que deberías tener una razón para usar.Limita quién puede acceder.
./scripts/remote.sh open --ip <tu-ip>es mejor que un puerto abierto. Una dirección de Tailscale es mejor que ambas y no necesita ningún puerto.Activa el cortafuegos.
./scripts/remote.sh open --firewallpermite SSH primero, luego habilita ufw. También revisa el panel de cortafuegos de tu proveedor de VPS: está delante de ufw y no responde a nadie en la máquina.Termina HTTPS al frente. Apunta un dominio a la máquina y coloca nginx o Caddy al frente con un certificado de Let's Encrypt, proxyando
/api,/media,/previews,/inputsy/projectsa127.0.0.1:8787y sirviendodist/denpm run buildcomo el sitio. Luego cierra el 5200 por completo. Si haces esto, haz que el proxy envíeX-Forwarded-For: la regla de solo máquina a continuación depende de ello.Ejecútalo como su propio usuario, no como root, bajo una unidad systemd, con
.enven600(que es como el estudio lo escribe).Ciérralo cuando termine la prueba.
./scripts/remote.sh close. Una exposición que olvidaste es la que te cuesta créditos de proveedor.
Consejos que te ahorran tiempo y dinero
Comienza con las rutas gratuitas. Agnes (4 modelos) e inemaimg (2, en tu propia GPU) no cuestan nada. En el catálogo de modelos, el interruptor Sin costo activa exactamente ese grupo. Úsalos para encontrar el prompt que funciona, luego gasta en el modelo que lo renderiza mejor.
Selecciona el catálogo una vez. 73 modelos son muchos para desplazarse. Filtra por proveedor, luego usa "Deshabilitar esos N" para ocultar lo que no usarás. La selección es una preferencia, no un bloque: oculta los modelos de los selectores, pero un Rehacer de un resultado antiguo aún funciona. Eliminar data/catalog-prefs.json restaura el estado de fábrica.
Refina antes de gastar. El prompt refinado es editable antes del envío. Léelo. Es el lugar más barato para detectar un malentendido; después de enviar, la solución cuesta otra ejecución.
Mantén dos refinadores configurados. La cadena es Gemini → OpenRouter → Codex local. Con uno solo, una cuota agotada deja todo el estudio fuera de servicio: el prompt pasa en bruto y Agnes rechaza el no inglés con un error que parece un problema de Agnes pero no lo es.
Rehacer en lugar de volver a escribir. Cada resultado lleva el modelo, los controles, el prompt refinado, la idea original y los archivos adjuntos. Rehacer restaura todo, para que puedas ajustar una cosa sin pagar por una reescritura.
El mismo modelo puede existir en dos rutas. Veo, Nano Banana, gpt-image y gemini-image aparecen a través de más de un proveedor, con diferentes facturas (dólares en fal, créditos del plan en Kling). El proveedor se muestra junto al nombre en el selector; es una elección real, no un duplicado.
Kling nunca reintenta automáticamente, a propósito. Cada trabajo de Kling se cobra, incluidos los fallos. No se reenvía nada a tus espaldas.
Vigila el disco, no la CPU. Cada archivo se refleja localmente porque las URL de los proveedores caducan (24h en Kling, temporal en Agnes). Aproximadamente 1.3 MB por imagen y 0.7–5 MB por video. El estudio está inactivo con 274 MB de RAM.
¿Construyendo un sitio web? Prefiere un agente. Codex y Claude Code escriben los archivos ellos mismos y corrigen sus propios errores. Los motores de modelo (Qwen local, OpenRouter) solo devuelven texto, por lo que no necesitan sandbox y no cuestan nada, pero necesitan más supervisión.
Apunta el constructor a una referencia que poseas. Establece un sitio o PDF tuyo en Config y el constructor calibra su acabado en función de él (tokens, fuentes, paleta, radios). Nunca copia marca, texto, estructura ni archivos.
Lo que puedes hacer
Espacio de trabajo | Lo que ofrece |
Crear | Imágenes y vídeos con referencias conscientes del modelo, controles, borradores de prompt editables, citas, progreso y resultados en línea. |
Catálogo de modelos | Rutas seleccionadas de texto a imagen, edición de imágenes, texto a vídeo, imagen a vídeo y vídeo de referencia. |
Resultados | Un archivo local que contiene el prompt enviado, el modelo, la URL del proveedor, el archivo local y el coste registrado. |
Sitios web | Sitios estáticos originales con código fuente editable, vista previa local y paquete descargable. |
Documentos | PDFs diseñados respaldados por HTML editable, impresión Chromium y verificación previa de desbordamiento. |
Conectar | Configuración MCP corregida por máquina y una habilidad portátil para agentes compatibles. |

El sistema en 30 segundos
flowchart LR
Idea["Your idea"] --> Client{"How do you want to work?"}
Client -->|Create manually| UI["React studio"]
Client -->|Delegate to an agent| MCP["MCP server"]
UI --> API["Local API"]
MCP --> API
API --> Prompt["Editable prompt refinement"]
API --> Router["Capability-aware router"]
API --> Quote["Quote and pricing engine"]
Prompt --> Router
Router --> Prov["fal · Kling · Agnes · kie · inemaimg"]
Prov --> Mirror["Local media mirror"]
API --> Projects["Website and PDF runner"]
Projects --> Archive["Inspectable project source"]
Quote --> Ledger[("Local SQLite ledger")]
Mirror --> Ledger
Archive --> LedgerEl navegador nunca recibe los secretos del proveedor. Se comunica con un servicio local que valida las cargas útiles específicas del modelo, posee las credenciales, transmite el progreso, replica los artefactos y registra metadatos duraderos.
Elige la estrategia de conexión adecuada
Bench utiliza un agregador porque un único modelo de autenticación y cola es la forma práctica de admitir un catálogo grande e intercambiable. Esa no es la única arquitectura válida.
flowchart TB
Need{"What do you actually need?"}
Need -->|One stable model| Direct["Use its first-party API"]
Need -->|Many interchangeable models| Bench["Use Bench + an aggregator"]
Direct --> D1["Potentially lowest route price"]
Direct --> D2["One integration per provider"]
Direct --> D3["Best for a narrow workflow"]
Bench --> B1["One authentication and queue model"]
Bench --> B2["Consistent controls and records"]
Bench --> B3["Best for a flexible studio"]Un agregador puede no ser siempre la ruta más barata. Bench hace explícita esa compensación en lugar de llamarla «margen cero».
Una solicitud, desde la idea hasta el recibo
sequenceDiagram
participant U as User or agent
participant B as Bench
participant R as Capability router
participant F as fal.ai
participant L as Local archive
U->>B: Describe the result
B->>R: Select a model and inspect accepted inputs
R-->>B: Controls, limits, and pricing unit
B-->>U: Editable prompt and preflight estimate
U->>B: Approve generation
B->>F: Validated model-specific payload
F-->>B: Queue progress and output URL
B->>L: Mirror media and write metadata
B-->>U: Local result, provider result, and recorded costBench registra lo que se envió. Nunca afirma que una referencia adjunta influyó en un resultado simplemente porque una API aceptó el campo; la fidelidad creativa aún requiere revisión humana.
Inteligencia del modelo, no un menú desplegable lleno de URL
Cada endpoint tiene suposiciones diferentes. Algunos aceptan una imagen, otros una lista, algunos requieren un fotograma de inicio y otros no aceptan referencias. Bench mantiene el descubrimiento separado de la admisión de producción:
flowchart LR
Catalog["Live provider catalog"] --> Discover["Discovery snapshot"]
Discover --> Evidence["Schema and pricing evidence"]
Evidence --> Review{"Safe for production?"}
Review -->|Not yet| Observe["Keep observable"]
Review -->|Yes| Registry["Curated registry"]
Registry --> UI["Relevant UI controls"]
Registry --> MCP["Validated MCP inputs"]Esto evita que un modelo recién publicado, renombrado o subespecificado rompa silenciosamente un flujo de trabajo de pago.
El refinamiento del prompt permanece visible
Escribe una solicitud creativa normal.
Bench añade la estructura que el modelo seleccionado probablemente entienda.
Revisa el prompt reescrito como un borrador editable.
Cámbialo o recházalo antes de gastar nada.
Almacena el prompt final enviado junto con el resultado.
Si no hay ninguna clave de Google configurada, el prompt original pasa sin cambios y la interfaz informa que el refinamiento está desactivado.
Transparencia de costes sin matemáticas de marketing
Antes del envío, Bench estima el coste a partir de la unidad de precio del modelo y los parámetros solicitados. Una vez completado, registra el importe facturado cuando el proveedor expone suficientes datos del recibo.
flowchart LR
Params["Model + duration + resolution + quantity"] --> Estimate["Preflight estimate"]
Estimate --> Approval["Explicit approval"]
Approval --> Run["Provider execution"]
Run --> Record["Recorded cost + confidence"]Los precios cambian. Las estimaciones no son garantías. Bench distingue los valores estimados, medidos y registrados en lugar de presentar los tres como el mismo hecho.
Tu límite de datos local
El repositorio comienza sin un directorio data/. Bench lo crea en la primera ejecución:
data/
├── bench.db # generations, assets, spend, and projects
├── inputs/ # mirrored uploads
├── outputs/ # mirrored generations
├── previews/ # local video posters
└── projects/ # website and document source filesTodo el directorio es ignorado por Git. Eliminar un resultado borra su registro local en la base de datos y los archivos replicados. No afirma eliminar copias retenidas por un proveedor de modelos externo.
flowchart LR
Browser["Browser UI\nno provider keys"] --> Local["Loopback API\nkeys + validation"]
Agent["Local MCP client"] --> Local
Local --> Provider["External model provider"]
Local --> Disk["Local SQLite + files"]Úsalo desde Claude, Codex o Cursor
Inicia Bench, abre Conectar, elige tu cliente y copia la configuración generada. Bench inserta la ruta absoluta correcta para la máquina actual; el repositorio en sí mismo no incluye el directorio personal de ningún usuario.
El servidor MCP expone once herramientas enfocadas para:
descubrir modelos e inspeccionar contratos de capacidad;
subir medios de referencia locales;
generar imágenes y vídeos;
leer resultados, vistas previas y gastos;
crear y consultar proyectos de sitios web o documentos;
recuperar artefactos de proyectos locales.
La habilidad incluida en integrations/skills/bench-studio/ proporciona juicio y orientación sobre el flujo de trabajo. MCP proporciona la capa de ejecución en vivo.
Mapa del proyecto
bench-studio-public/
├── src/ # React interface
├── server/
│ ├── server.mjs # loopback API and orchestration
│ ├── mcp.mjs # stdio MCP server
│ ├── registry.json # curated production roster
│ ├── capabilities.json # accepted-input contracts
│ ├── profiles/ # prompt and pricing intelligence
│ └── mcp-app/ # embedded MCP interface
├── integrations/
│ ├── skills/bench-studio/ # portable agent workflow skill
│ └── macos/ # optional launch-agent templates
├── tests/ # contracts, persistence, API, a11y, and E2E
├── docs/ # public README media
├── .env.example # placeholders only
└── package.jsonDocumentación
Documento | Lo que cubre |
Cómo funciona el sistema internamente: el contrato del proveedor, las trampas medidas por proveedor, las clases de coste, disponibilidad vs curación, la cadena de refinamiento, el constructor y el modelo de seguridad | |
Acceso remoto y configuración VPS: por qué la contraseña va antes del puerto, qué toca | |
Todo lo construido sobre el kit original y cada error encontrado — separando los que ya estaban de los introducidos en el camino | |
Versión por versión | |
Los 19 ajustes, qué desbloquea cada uno y dónde obtener la clave | |
Modelo de amenazas e informes |
Comandos útiles
Comando | Propósito |
| Inicia la API local y la interfaz web. |
| Construye la aplicación web de producción. |
| Reconstruye el registro de modelos seleccionados. |
| Reconstruye el manifiesto de capacidades. |
| Actualiza el descubrimiento de proveedores y la evidencia de precios. |
| Inicia el servidor MCP stdio. |
| Establece o cambia la contraseña del estudio ( |
| Publica la interfaz en la IP de esta máquina, incluyendo la regla de cortafuegos. |
| Lo deshace — de vuelta al acceso solo local. |
| Abierto o cerrado, en qué puerto, con o sin contraseña. |
| Ejecuta pruebas de API, persistencia y contratos de modelo. |
| Prueba de humo del descubrimiento MCP y el comportamiento de medios. |
| Ejecuta recorridos del navegador y comprobaciones de accesibilidad (necesita |
| Ejecuta la puerta de lanzamiento completa. |
Seguridad y privacidad
Postura predeterminada. Ambos puertos se vinculan a loopback y no hay contraseña — hablar con tu propia máquina no debería requerir una. Nada sale de tu máquina excepto las llamadas que haces a los proveedores que configuraste.
Claves. Se leen del lado del servidor, nunca se devuelven a la interfaz de usuario. La pantalla de Configuración muestra presencia, origen y los últimos 4 caracteres — nunca el valor. .env se escribe con permisos solo del propietario (600) y está en gitignore.
Contraseña opcional. Establece BENCH_PASSWORD y la API requiere una sesión:
npm run set-password # asks for it, without echoing
npm run set-password -- --removeAlmacenada como un hash scrypt, para que nadie lea tu contraseña del archivo. Establecerla o cambiarla cierra la sesión de todos los demás inmediatamente. ¿La olvidaste? Elimina la línea de .env y reinicia — ese es el camino de recuperación, a propósito, porque quien tenga ese archivo ya tiene las claves dentro.
La contraseña protege la API y tus archivos generados. El shell de la interfaz aún se sirve a cualquiera que llegue al puerto, pero sin una sesión no muestra nada. Ocultar también el shell es trabajo de un proxy inverso, no de este proceso.
Escribir ajustes es solo desde la máquina. Incluso con una sesión válida, se rechaza POST a los endpoints de configuración desde la red — cambiar las claves requiere estar en la máquina. Esto sobrevive al proxy de desarrollo: la API solo confía en un origen reenviado cuando el socket ya es loopback, por lo que una solicitud desde la red no puede falsificarlo.
Exponerlo. ./scripts/remote.sh open publica la interfaz y abre el puerto; close deshace ambos. Consulta Alcanzarlo desde otra máquina y Dejarlo funcionando de forma segura. Prefiere Tailscale o un proxy inverso protegido con contraseña en lugar de un puerto abierto.
Los medios generados pueden ser retenidos por un proveedor externo según los términos de ese proveedor.
La creación de sitios web y documentos puede invocar un agente de codificación autenticado localmente. Revisa el código fuente generado antes de implementarlo.
Lee SECURITY.md antes de exponer, modificar o redistribuir el servicio.
Límites honestos
Bench es una herramienta local para un solo usuario, no un producto SaaS alojado multiinquilino.
El registro se selecciona intencionalmente; la presencia en el catálogo no garantiza la admisión en producción.
Las entradas aceptadas no garantizan fidelidad creativa.
La salida del sitio web es estática por diseño.
La creación de PDF depende de una instalación local de Chrome.
La disponibilidad y los precios de los modelos pueden cambiar después de una sincronización del catálogo.
Ser dueño de la capa significa mantener una pequeña pieza de software.
Confianza en el lanzamiento
La puerta de lanzamiento cubre compilaciones de producción, contratos de API y base de datos, descubrimiento MCP, recorridos del navegador, accesibilidad, contención responsiva, estados de fallo, transiciones de modelo y capturas de pantalla visuales.
npm run test:releaseLicencia
Bench Studio Public está disponible bajo la Licencia MIT.
Los modelos hacen el trabajo pesado. Bench hace visible la capa que los rodea—y la tuya.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceLocal-first MCP image generation server supporting OpenAI and Google Gemini models for generating and editing images, with an embedded interactive studio.201ISC
- Alicense-qualityCmaintenanceLocal MCP server that plans, generates, and assembles production assets (images, audio, video) through multi-agent personas and official APIs, with free-tier budget guard.MIT
- AlicenseBqualityCmaintenanceA brand-neutral, self-hostable MCP server for generating and editing images using natural language, with support for reference images and multiple providers.1MIT
- Alicense-qualityBmaintenanceMCP server for OfflineCreator Studio that enables image and video generation, including model listing, credit management, generation tasks, and output downloads.530MIT
Related MCP Connectors
MCP server for Luma Dream Machine AI video generation
MCP server for Google Veo AI video generation
MCP server for Wan AI video generation
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/inematds/bench-studio-en'
If you have feedback or need assistance with the MCP directory API, please join our Discord server