Nuevo paquete en mcp-server/ (TypeScript SDK, stdio) que envuelve la API HTTP de Story Studio y expone 36 tools con prefijo story_ para conducir todo el pipeline: proyectos, idea motriz, personajes (+assets de imagen), capítulos, guión, pre-escaleta, escaleta, prompts, fondos, imágenes, vídeos y render. Base URL configurable via STORY_STUDIO_URL (default localhost:3000). Excluido del build de Next (.dockerignore) — es una herramienta aparte, no se despliega con la app. Verificado end-to-end contra la app desplegada (list_projects, get_idea_motriz). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
76 lines
3.2 KiB
Markdown
76 lines
3.2 KiB
Markdown
# Story Studio MCP Server
|
|
|
|
Servidor **MCP** (Model Context Protocol) para controlar [Story Studio](https://story-studio.carlosnarro.com) desde agentes: crear proyectos y conducir todo el pipeline de producción de series animadas IA (idea motriz → personajes → capítulos → guión → escaleta → prompts → fondos → imágenes → vídeos → render).
|
|
|
|
Envuelve la **API HTTP** de la app; no accede a la BD directamente.
|
|
|
|
## Requisitos
|
|
|
|
- Node.js ≥ 18
|
|
- Una instancia de Story Studio accesible (local en `npm run dev`, o la desplegada).
|
|
|
|
## Instalar y compilar
|
|
|
|
```bash
|
|
cd mcp-server
|
|
npm install
|
|
npm run build # genera dist/
|
|
```
|
|
|
|
## Configuración
|
|
|
|
| Variable | Default | Descripción |
|
|
|----------|---------|-------------|
|
|
| `STORY_STUDIO_URL` | `http://localhost:3000` | Base URL de la app. Local: `http://localhost:3000`. Prod: `https://story-studio.carlosnarro.com`. |
|
|
|
|
> La app **no tiene autenticación**; el server hereda ese modelo. Apunta `STORY_STUDIO_URL` al entorno que quieras controlar.
|
|
|
|
## Uso con Claude Code / clientes MCP
|
|
|
|
Transporte **stdio**. Ejemplo de registro (`.mcp.json` o config del cliente):
|
|
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"story-studio": {
|
|
"command": "node",
|
|
"args": ["C:/Users/carlo/Proyectos/story-studio/mcp-server/dist/index.js"],
|
|
"env": { "STORY_STUDIO_URL": "http://localhost:3000" }
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
O en desarrollo con recarga: `command: "npx"`, `args: ["tsx", ".../src/index.ts"]`.
|
|
|
|
## Herramientas
|
|
|
|
Prefijo `story_`. Lectura (`readOnlyHint`) vs generación (efectos, LLM/imagen/vídeo).
|
|
|
|
**Proyecto e idea**: `story_list_projects`, `story_get_project`, `story_create_project`,
|
|
`story_get_idea_motriz`, `story_generate_idea_motriz`, `story_refine_idea_motriz`.
|
|
|
|
**Personajes**: `story_get_personajes`, `story_generate_personajes`, `story_add_personaje`,
|
|
`story_improve_personajes`, y assets de imagen: `story_get_character_assets`,
|
|
`story_generate_asset_prompts`, `story_generate_base_image`, `story_lock_base_image`,
|
|
`story_generate_all_variations`.
|
|
|
|
**Capítulo y pipeline**: `story_list_capitulos`, `story_create_capitulo`,
|
|
`story_get_guion` / `story_generate_guion`,
|
|
`story_get_pre_escaleta` / `story_generate_pre_escaleta`,
|
|
`story_get_escaleta` / `story_generate_escaleta`,
|
|
`story_get_prompts` / `story_generate_prompts`,
|
|
`story_get_fondos` / `story_refresh_fondos` / `story_generate_fondo` / `story_generate_all_fondos`,
|
|
`story_get_imagenes` / `story_generate_plano_image` / `story_generate_all_images`,
|
|
`story_get_videos` / `story_generate_plano_video`,
|
|
`story_render_chapter` / `story_get_render_status`.
|
|
|
|
## Orden típico del pipeline
|
|
|
|
1. `story_create_project` → `story_generate_idea_motriz` → `story_generate_personajes`
|
|
2. (opcional) assets de personaje: `story_generate_asset_prompts` → `story_generate_base_image` → `story_lock_base_image` → `story_generate_all_variations`
|
|
3. `story_create_capitulo` → `story_generate_guion` → `story_generate_pre_escaleta` → `story_generate_escaleta` → `story_generate_prompts`
|
|
4. `story_refresh_fondos` → `story_generate_all_fondos` → `story_generate_all_images` → `story_generate_plano_video` → `story_render_chapter`
|
|
|
|
Las tools de generación pueden tardar (LLM/imagen); el server usa timeouts amplios.
|