rovee-publisher-mcp
Official# Rovee Publisher MCP Server (`rovee-publisher-mcp`)
Servidor MCP (Model Context Protocol) local para **Rovee** que permite conectar cualquier cliente de IA (Claude Desktop, Antigravity, Cursor, Windsurf) para publicar contenido completo y subir archivos multimedia a Supabase.
---
## 🚀 Características
1. **Subida de Archivos Multimedia (`upload_media`)**:
- Soporta rutas locales en tu ordenador (`C:\Fotos\evento.jpg` o `d:\imagenes\poi.png`), strings Base64 y URLs remotas.
- Sube automáticamente al bucket `assets` de Supabase Storage en subcarpetas organizadas (`blog/`, `pois/`, `eventos/`, `guias/`, `negocios/`, `general/`).
- Devuelve la URL pública CDN lista para insertar en cualquier publicación.
2. **Artículos de Blog (`publish_blog_post`, `list_blog_posts`, `get_blog_post`)**:
- Publicación bilingüe simultánea (ES / EN).
- Generación de slugs, vinculación de taxonomías (categorías y tags) y metadatos SEO.
3. **Puntos de Interés / POIs (`publish_poi`, `list_pois`)**:
- Creación y actualización de POIs turísticos con coordenadas GPS, dirección, imagen principal y galería.
4. **Eventos (`publish_event`, `list_events`)**:
- Gestión de eventos con fechas de inicio/fin, localización, precios, cartel y venta de entradas.
5. **Negocios (`publish_business`, `list_businesses`)**:
- Registro de comercios locales con datos de contacto, horarios, categoría e imágenes.
6. **Guías Turísticas (`publish_guide`, `list_guides`)**:
- Creación de guías temáticas enlazando múltiples POIs, eventos y negocios recomendados.
---
## 🛠️ Instalación y Compilación
1. Entra al directorio del MCP:
```bash
cd d:\Proyectos\Personal\Rovee\rovee-publisher-mcp
```
2. Instala las dependencias:
```bash
npm install
```
3. Compila el código TypeScript:
```bash
npm run build
```
---
## ⚙️ Configuración
Solo necesitas **una** cosa: la `SUPABASE_SERVICE_ROLE_KEY`. `SUPABASE_URL` es
opcional (por defecto apunta al proyecto de Rovee).
> ⚠️ La service role key da acceso total a la base de datos saltándose RLS. No la
> subas al repo, no la pegues en chats y no la compartas por mensajería. Si se
> expone, rótala desde el panel de Supabase.
### Opción A — Bloque `env` en tu cliente de IA (recomendada)
Funciona con Claude Desktop, Cursor, Antigravity, Windsurf y cualquier cliente MCP.
No requiere clonar ni compilar nada:
```json
{
"mcpServers": {
"rovee-publisher": {
"command": "npx",
"args": ["-y", "github:Roveeapp/rovee-publisher-mcp"],
"env": {
"SUPABASE_SERVICE_ROLE_KEY": "TU_SERVICE_ROLE_KEY_AQUI"
}
}
}
}
```
En Windows, si tu cliente no resuelve `npx` directamente:
```json
"command": "cmd",
"args": ["/c", "npx", "-y", "github:Roveeapp/rovee-publisher-mcp"]
```
### Opción B — Un `.env` y olvidarte
Crea `~/.rovee/.env` (o `~/.config/rovee/.env`) con una sola línea:
```
SUPABASE_SERVICE_ROLE_KEY=tu_key
```
A partir de ahí la config MCP no necesita bloque `env`, y la CLI también funciona
desde cualquier carpeta. El orden de búsqueda es: `./.env` → `<paquete>/.env` →
`~/.rovee/.env` → `~/.config/rovee/.env`. Lo que venga en el entorno siempre gana.
### Comprobar que todo está bien
```bash
npx -y github:Roveeapp/rovee-publisher-mcp doctor
```
Verifica la clave, la URL, qué `.env` se ha cargado y la conexión real con Supabase.
---
## 🖥️ Uso como CLI (sin cliente MCP)
Publicar un artículo completo con sus imágenes, en un comando:
```bash
npx -y github:Roveeapp/rovee-publisher-mcp publish articulo.json --images ./img
```
Opciones:
| Flag | Efecto |
|---|---|
| `--images <dir>` | Carpeta de imágenes (por defecto `./img` junto al payload) |
| `--folder <name>` | Carpeta destino en el bucket `assets` (por defecto `blog`) |
| `--draft` | Publica como borrador en vez de `published` |
| `--dry-run` | Valida payload e imágenes sin escribir nada |
**Tokens de imagen.** En el payload puedes escribir `{{URL:nombre.jpg}}` en el
contenido, en `featured_image` o donde haga falta. El comando sube cada imagen y
sustituye su token por la URL CDN definitiva antes de publicar, así que el JSON
es portable y no depende de subir las fotos a mano primero.
```jsonc
{
"es": { "title": "…", "content": "<p><img src=\"{{URL:hero.jpg}}\"></p>" },
"en": { "title": "…", "content": "…" },
"featured_image": "{{URL:hero.jpg}}",
"status": "published"
}
```
---
## 💡 Ejemplo de Uso con tu IA
Una vez configurado, puedes hablarle a tu IA de forma natural:
> *"Sube la imagen que tengo en `C:\Fotos\restaurante.jpg` y luego crea un negocio para el Restaurante El Faro en Alicante con dirección Calle Mayor 12, teléfono 965123456 y asígnales esa foto."*
La IA usará primero `upload_media` para subir la foto a Supabase y obtener la URL, y después ejecutará `publish_business` pasando todos los datos estructurados.
TDQS
Scored across 12 tools
Each tool targets a distinct resource and action: upload_media for media, list_* for reading, publish_* for creating/updating content types, and get_blog_post for a specific lookup. No two tools overlap in purpose.
All tool names follow a consistent verb_noun pattern in snake_case: upload_media, list_blog_posts, publish_poi, etc. The verbs are uniform (upload, list, publish, get) and the nouns are clear and consistent.
12 tools is well within the ideal range for a content publishing server. Each tool represents a necessary operation for managing media, blog posts, POIs, events, businesses, and guides without redundancy.
The toolset covers the core publishing workflow: media upload, create/update for all main content types, and list operations for each. Missing delete tools and detailed get operations for POIs, events, businesses, and guides are minor gaps that can be worked around via list operations.