# Servidor MCP

> Mariner incluye un servidor MCP local para que Claude Code, Cursor, Windsurf o VS Code lean tus colecciones, resuelvan entornos y ejecuten peticiones — con los mismos datos locales y sin que ninguna API key salga de tu Mac.

## Activarlo

1. Abre <kbd>⌘,</kbd> → **MCP** y activa **Enable MCP server**. La línea de estado dice *Listening on 127.0.0.1:7654* (cambia el puerto ahí si el 7654 está ocupado; los puertos hasta el 1024 se rechazan).
2. En **Clients**, escribe un nombre — `Claude Code`, `Cursor` — y pulsa **Add client**. Mariner muestra un token **una sola vez**; cópialo ahora.
3. En **Reachable workspaces**, marca los workspaces que el agente puede ver. Nada es alcanzable hasta que lo marcas, y los workspaces sin marcar ni siquiera se listan, así que un agente nunca sabe que existen.
4. Pulsa **Self-test** para confirmar que el servidor responde. La lista **Activity** del final muestra las últimas llamadas, por nombre de cliente y herramienta.

El servidor escucha solo en la dirección de loopback y se detiene cuando Mariner se cierra. Toda petición debe llevar el token como cabecera bearer; sin él, el servidor responde 401.

<figure class="shot">
<img src="/docs/es/mcp.webp" alt="Ajustes → MCP: el servidor activado y escuchando en 127.0.0.1:7654, y la autoprueba informando 25 tools disponibles" width="1600" height="1000" loading="lazy">
<figcaption>AJUSTES → MCP · sólo loopback, y la autoprueba demuestra que responde</figcaption>
</figure>

## Conectar un cliente

**Claude Code**

```bash
claude mcp add --transport http mariner http://127.0.0.1:7654/mcp --header "Authorization: Bearer <TOKEN>"
```

**Cursor, Windsurf, VS Code** — añade a `mcp.json`:

```json
{
  "mcpServers": {
    "mariner": {
      "url": "http://127.0.0.1:7654/mcp",
      "headers": { "Authorization": "Bearer <TOKEN>" }
    }
  }
}
```

Ambos fragmentos están también en Ajustes con un botón **Copy**. Claude Desktop no tiene transporte HTTP propio — apúntalo a la misma URL a través del puente `mcp-remote`.

## Qué puede hacer un agente

Leer y ejecutar:

| Herramienta | Propósito |
|---|---|
| `list_workspaces` | Los workspaces que marcaste |
| `list_collections` | Colecciones y las peticiones que contienen |
| `get_request` | Configuración completa de una petición — credenciales censuradas |
| `send_request` | Ejecuta una petición con el entorno activo; las reglas de captura aplican |
| `run_collection` | Ejecuta una colección en orden (hasta 50 peticiones) e informa pasa/falla |

Entornos:

| Herramienta | Propósito |
|---|---|
| `list_environments` | Entornos y variables, secretos enmascarados, el activo marcado |
| `set_variable` · `add_variable` · `rename_variable` · `remove_variable` | Edita variables **no secretas**; cada llamada devuelve lo que reemplazó |
| `audit_environments` | Cruza los entornos entre sí y contra las peticiones: claves que faltan, variables sin uso, `{{refs}}` sin definir, valores que parecen credenciales |
| `clone_environment` | Copia un entorno, con los huecos secretos vacíos |
| `set_active_environment` | Cambia el entorno activo del workspace abierto |

Bodies y contratos:

| Herramienta | Propósito |
|---|---|
| `list_body_variants` · `set_body_variant` · `activate_body_variant` | Los payloads con nombre que guarda una petición («Default», «missing email», «422»). Cada escritura devuelve lo que reemplazó; nunca se borra nada |
| `get_contract` · `set_contract` | Leer el [contrato](/es/docs/contracts) que promete una petición, o guardar uno — con `derive_from_response: true` envía una vez y lo deriva |
| `check_contract` | Enviar y comprobar contra el contrato. `variants: "all"` prueba cada payload guardado por turno y deja activo el que lo estaba |
| `check_collection_contracts` | «¿Cambió esta API?» para una colección entera; las peticiones sin contrato se informan como no comprobadas |

Crear:

| Herramienta | Propósito |
|---|---|
| `create_collection` · `add_requests` | Colecciones y peticiones nuevas; las existentes se informan, nunca se sobrescriben |
| `create_environment` | Un entorno de workspace nuevo con variables no secretas |
| `import_openapi` · `import_curl` | Los mismos importadores que usas desde el menú File |

Deliberadamente **no hay herramienta que modifique o borre** una colección o una petición. Un agente puede añadir y ejecutar; remodelar lo que construiste sigue siendo trabajo humano.

## Los secretos se quedan en casa

- Las variables marcadas como secretas se devuelven como *set* o *empty*, nunca con su valor.
- Cabeceras, valores de query y campos JSON del body cuya clave parece una credencial vuelven como `<redacted>`.
- Un agente no puede escribir un secreto: las herramientas rechazan valores que parecen credenciales y piden un hueco vacío que rellenas tú.
- Los bodies de respuesta que se entregan al agente se cortan a 32.000 caracteres.

## Para los agentes que leen esto

Esta documentación también es legible por máquinas: [`/llms.txt`](/llms.txt) es un índice de enlaces, [`/llms-full.txt`](/llms-full.txt) trae todas las páginas en un solo archivo, y cualquier página es Markdown plano añadiendo `.md` a su URL — esta es [`/es/docs/mcp.md`](/es/docs/mcp.md). Apunta a tu agente al índice y podrá leer la lista de herramientas y los pasos de conexión sin raspar HTML.

<aside class="callout" data-label="PRO">
El servidor MCP es parte de <a href="/es/docs/free-and-pro">Mariner Pro</a>, mes gratis incluido: sin suscripción el interruptor lo explica en vez de abrir el puerto. La puerta está en <code>start()</code> — todas las vías de entrada aterrizan ahí, no solo el interruptor de los ajustes —, y un servidor que ya esté corriendo se detiene cuando caduca una suscripción.
</aside>

---
Source: https://marinerhttp.dev/es/docs/mcp · Mariner docs
