---
title: Conecta un agente
description: Da a un cliente MCP acceso a Hollware con un token personal o con OAuth, y elige qué puede hacer.
section: start
order: 3
---

# Conecta un agente

Cualquier cliente MCP puede escribir en Hollware. Se conecta a `/mcp` de tu Hollware, por HTTP, de una de dos formas.

## Con un token personal

Un token personal es un bearer token que empieza con `hw_pat_`. `hollware init` crea el primero; crea más con la CLI o en el admin, en Tokens:

```sh
npx hollware token create --label claude-code --scopes content:read,content:write
```

Un token lleva **scopes**, y nunca más que el rol de la persona que lo creó:

| Scope             | Le permite al agente                                     |
| ----------------- | -------------------------------------------------- |
| `content:read`    | leer entradas, borradores incluidos, y el sitio        |
| `content:write`   | crear y actualizar borradores                           |
| `content:publish` | publicar, despublicar y aprobar revisiones            |
| `schema:admin`    | cambiar la estructura del sitio, y las rutas propias del admin |

Entrégale el token al cliente en el encabezado `Authorization`:

```sh
claude mcp add --transport http hollware https://cms.example.com/mcp --header "Authorization: Bearer hw_pat_..."
```

`npx hollware mcp-config --url https://cms.example.com` imprime esa línea, y `--client cursor`, `--client vscode` o `--client json` el bloque de `.mcp.json` para cualquier otro cliente; ambos nombran una variable de entorno, `HOLLWARE_TOKEN`, en lugar del token.

::callout{type="tip"}
Un agente sin `content:publish` igual puede llamar a `publish`: la entrada espera en la cola de revisión del admin hasta que un editor la aprueba.
::

## Con OAuth

Los clientes que hablan OAuth, como los conectores de claude.ai, no necesitan token. Entrégales la URL de `/mcp`; la primera vez, Hollware te pide iniciar sesión con tu passkey y te pregunta qué puede hacer el cliente. Tú eliges los scopes, y el sitio cuando eres miembro de varios.

Un cliente tiene un Client ID Metadata Document, que Hollware obtiene por internet pública, o se registra solo. El autorregistro está desactivado salvo que tu configuración lo active:

```ts
export default defineConfig({
  auth: { dynamicClientRegistration: true },
  sites: { ... },
})
```

## Lo que ve el agente

Cuarenta herramientas, las mismas para todos los clientes, sin importar lo que puedan hacer: una herramienta revisa los scopes al ejecutarse, y una llamada sin ellos recibe un 403 que dice cuáles faltan. La [referencia de herramientas](/es/reference/mcp-tools/) las lista con su entrada.

Un prompt, `refresh_content`, guía a un agente desde lo que leen los lectores hasta una entrada actualizada: `content_stats`, `get_entry`, `search`, `update_draft` y `publish`, en ese orden. Elígelo en el menú de prompts de tu cliente. Necesita la [analítica](/es/docs/search-and-analytics/) del sitio conectada para saber qué leen los lectores.

Un agente con `schema:admin` también da forma al sitio: `get_structure`, `update_site`, `set_collection`, `create_site` y las demás de [Configura tu contenido](/es/docs/configure-your-content/).

Un agente que nunca debe publicar, tenga lo que tenga su token, envía su trabajo a una persona con `request_review` en vez de `publish`, y comenta una revisión con `comment_review`: así funcionan los [agentes](/es/docs/agents/) del propio Hollware.

## Sin un cliente MCP

`/mcp` es JSON-RPC simple sobre HTTP, así que `curl` también llega. No se necesita sesión: cada solicitud es independiente.

```sh
curl http://localhost:5199/mcp \
  -H "Authorization: Bearer hw_pat_..." \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"describe_site","arguments":{}}}'
```

La respuesta puede llegar como un server-sent event (`event: message`, luego `data: {...}`). La salida de la herramienta está en `result.structuredContent`, y de nuevo como texto en `result.content`.

Cada escritura sube la `version` de la entrada. `update_draft` y `publish` reciben la versión que leíste por última vez y responden con la nueva: después de que `create_draft` entrega la versión 1, `publish` con la versión 1 responde la versión 2.

La primera llamada de un buen agente es `describe_site`: entrega tus colecciones, sus esquemas como JSON Schema, sus rutas, sus componentes con ejemplos y tus guías de estilo.
