---
title: MCP y sitios agent-ready
description: Qué es MCP, cómo funciona dentro de Plak CLI y cómo preparar y usar sitios con WP-MCP y wp-mcp-cli.
sidebar:
  label: MCP
  order: 0
---

MCP (Model Context Protocol) es el protocolo abierto que usan los asistentes de código (Claude, Codex, Cursor, OpenCode, Pi y otros) para **pedirle acciones a WordPress** en lugar de adivinar URLs o tocar la base de datos a mano. Plak CLI lo integra de serie: un sitio "agent-ready" expone sus capacidades por REST y el agente las ejecuta con `wp-mcp-cli`.

<Badge variant="accent">Comprobado con Plak CLI v0.4.66 y wp-mcp-cli v0.1.9</Badge>

## Qué es cada pieza

Un sitio agent-ready combina cuatro piezas. Conviene distinguirlas porque cada una falla de una forma distinta:

| Pieza | Qué es | Para qué sirve |
| --- | --- | --- |
| **WP-MCP** | Plugin de WordPress instalado en el sitio (desde `downloads.plak.io`) | Expone *abilities* (capacidades) por la REST API: leer y escribir ficheros, ejecutar WP-CLI, gestionar Gutenberg, memoria, formularios, SEO… |
| **HTML Editor** | Plugin acompañante (editor visual del bloque HTML) | Permite a editores y agentes componer HTML con previsualización y edición en contexto |
| **wp-mcp-cli** | CLI complementaria instalada junto a Plak | Habla con esas abilities por REST con usuario y contraseña de aplicación; es lo que el agente ejecuta en la terminal |
| **Perfil del sitio** | Credencial guardada por `wp-mcp auth login` bajo el nombre del sitio | Evita escribir usuario y contraseña en cada comando: `wp-mcp --site mi-sitio ...` ya sabe dónde y cómo autenticarse |

MCP como protocolo define el **cómo se piden las cosas** (herramientas con nombre, esquema de entrada y salida). WP-MCP es la **implementación para WordPress** (`wp_get_ability($name)->execute($input)` en el servidor). `wp-mcp-cli` es el **cliente de terminal** que usa Plak: misma ejecución en el servidor, pero por REST + Basic Auth en lugar de JSON-RPC, lo que funciona en cualquier terminal, CI o sesión SSH sin un cliente MCP persistente.

:::note
Añadir una ability nueva en el servidor (`wp_register_ability()` con `meta.show_in_rest => true`) la hace aparecer automáticamente por MCP, por REST y por la CLI, sin actualizar ningún cliente.
:::

## Cómo funciona dentro de Plak CLI

`plak install` instala `wp-mcp-cli` (y su dependencia `jq`) junto a la pila local. A partir de ahí, cada sitio WordPress nuevo **nace agent-ready por defecto cuando `wp-mcp-cli` está disponible**, sin que tengas que recordar ninguna bandera:

```bash
plak add mi-sitio              # agent-ready si wp-mcp-cli está instalado
plak add mi-sitio --no-agent   # opta por no prepararlo
plak add mi-sitio --agent      # fuérzalo de forma explícita
```

Con `--agent` (o por defecto), Plak ejecuta estos pasos en orden, y cada uno es **idempotente** (puedes repetirlo sin duplicar nada):

1. **Instala y activa los plugins**

    Descarga WP-MCP y HTML Editor desde `downloads.plak.io` (con el User-Agent `PlakCLI/<versión>`) y los activa con WP-CLI. Después comprueba que cada uno está realmente activo, no solo instalado.

2. **Repara la REST API**

    Fija una estructura de enlaces permanentes estándar (`/%postname%/`) solo si no hay ninguna, y regenera las reglas de reescritura. Sin esto, `/wp-json/...` lo renderiza el tema en lugar de llegar a la REST API y todas las llamadas fallarían.

3. **Activa las abilities**

    Habilita las abilities de WP-MCP (`wp_mcp_ai_abilities_enabled = 1`) y las vincula al dominio del sitio (`...localhost`). Sin este paso, descubrir funciona pero cada ejecución se rechaza con `wp_mcp_disabled`.

4. **Crea la credencial y el perfil**

    Genera una Application Password de WordPress del usuario `admin` con el nombre `Plak CLI (agent)` (rotando la anterior si existe, para no acumular credenciales), la envía por **variables de entorno** (nunca en `argv`, para que no salga en listados de procesos) a `wp-mcp auth login --name <sitio>` y verifica con `wp-mcp --site <sitio> discover` que las abilities se descubren de verdad.

El resultado queda marcado con un fichero `agent-ready` en el sitio, que es lo que muestran `plak list` y el [dashboard](/cli/dashboard). Si la preparación falla después de crear el sitio, **el sitio se conserva** y el error indica cómo repararlo (ver [Reparar](#reparar-un-sitio) más abajo): nunca se borra un WordPress válido porque falle un plugin del agente.

`--agent` exige WordPress y no se puede combinar con `--plain` (sitio estático) ni con `--multisite`. `plak import` y `plak clone` preparan igual los WordPress que crean (o te dicen cómo hacerlo), y `plak list` muestra la columna de estado.

## Cómo se utiliza

### 1. Descubrir qué puede hacer el sitio

```bash
wp-mcp --site mi-sitio --json discover
```

Devuelve la lista de abilities con su categoría, descripción y esquema. Es el equivalente a "¿qué herramientas tengo?". En un sitio Plak con Fluent Forms y Slim SEO instalados, verás unas 50 abilities entre `site`, `filesystem`, `code-execution`, `gutenberg`, `fluentforms`, `slimseo`, `memory` y otras (el catálogo exacto depende de lo instalado: ver [Temas, editores y plugins](/cli/mcp-plugins)).

### 2. Leer la ficha de una ability

```bash
wp-mcp --site mi-sitio describe wp-mcp/list-directory
```

Muestra el esquema de entrada (`input_schema`), la salida esperada y sus anotaciones (si es de solo lectura, si es destructiva, si es idempotente). Lee siempre esta ficha antes de ejecutar algo destructivo.

### 3. Ejecutar una ability

```bash
wp-mcp --site mi-sitio run wp-mcp/list-directory --input '{"path":"/"}'
wp-mcp --site mi-sitio run wp-mcp/run-wp-cli --input '{"args":["plugin","list","--format=json"]}' --yes
```

`--yes` confirma las operaciones destructivas (igual que en Plak CLI). `--json` fuerza salida JSON para scripts. La selección del sitio sigue este orden: `--site <nombre>`, variable `WPMCP_SITE`, o el único perfil si solo hay uno.

Otros comandos útiles:

```bash
wp-mcp sites list                    # perfiles guardados
wp-mcp auth status                   # perfil activo y resumen de credencial
wp-mcp doctor                        # diagnostica bash, jq, curl, config, credenciales y alcance
wp-mcp skill install opencode        # instala la skill oficial de wp-mcp para tu agente
```

`plak skill install` ya instala la skill de Plak **y** la de wp-mcp para cada agente (`codex`, `claude-code`, `opencode`, `hermes`, `pi`, `global`, `all`).

### Requisitos que suelen fallar

| Síntoma | Causa y solución |
| --- | --- |
| El sitio no responde | Debe estar servido y accesible (`plak reload`, comprueba `https://<sitio>.localhost`). La preparación espera hasta 10 intentos antes de rendirse. |
| `curl exit 60` en Linux | El curl de Homebrew no lee el almacén del sistema. Ejecuta `plak trust` para instalar la CA local de Caddy; Plak exporta el bundle automáticamente a `wp-mcp` cuando lo necesita. |
| `wp_mcp_disabled` | Las abilities están apagadas o vinculadas a otro dominio. Repara con `plak agent <sitio>`, que vuelve a habilitarlas y a fijar el dominio. |
| `site_required` | Hay varios perfiles y no se indicó cuál. Usa `--site <nombre>` o `WPMCP_SITE`. |

## Reparar un sitio

```bash
plak agent mi-sitio
plak agent mi-sitio --json
```

Hace exactamente lo mismo que la preparación inicial (instala y activa plugins, fija permalinks, habilita abilities, rota la Application Password, refresca el perfil y verifica), pero pensado para **reintentar** sobre un sitio existente. En modo `--json` el progreso va a STDERR y STDOUT queda como un único objeto (`{"success":true,"site":...,"profile":...,"url":...}`) para scripts.

## Qué puede hacer un agente con esto

Una vez listo, el agente ya no necesita adivinar llamadas REST: descubre, describe y ejecuta.

- **Ficheros:** `wp-mcp/read-file`, `write-file`, `edit-file`, `delete-file`, `list-directory`, `create-upload-link`, `disable-file`, `enable-file`.
- **Comandos:** `wp-mcp/run-wp-cli` (cualquier comando WP-CLI, síncrono o en segundo plano con `get-wp-cli-job`) y `wp-mcp/execute-php` (PHP arbitrario: úsalo con cuidado).
- **Contenido:** `gutenberg-get-content`, `gutenberg-write-content` y la cola de borradores (`create-pending-batch`, `add-pending-change`, `enable-batch-finalization`…) para componer con bloques reales en lugar de HTML crudo.
- **Formularios y SEO:** abilities dedicadas de Fluent Forms y Slim SEO cuando esos plugins están instalados (ver [Temas, editores y plugins](/cli/mcp-plugins)).
- **Memoria:** `memory-search|list|get|write|edit|delete|summarize` para guardar contexto entre sesiones (nunca secretos, tokens ni datos personales).
- **Acceso:** `create-admin-access-link` genera enlaces de acceso de un solo uso, igual que `plak login`.

:::warning
`run-wp-cli` y `execute-php` son destructivos por diseño: pueden cambiar o borrar datos. Piden `--yes` y registran `stdout`, `stderr` y `exit_code`. En el dashboard, la consola WP-CLI pasa cada argumento por separado para que nada del navegador llegue a una shell.
:::

Continúa en [Temas, editores y plugins](/cli/mcp-plugins) para saber qué integraciones tienen abilities dedicadas y cuáles se operan por la vía genérica, o en [Plugins](/plugins) para los plugins propios de Plak.
