Skip to main content
Glama
Roveeapp

rovee-publisher-mcp

Official
by Roveeapp
README.md
# 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

A3.5/5.0

Scored across 12 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues