Prototipo · Versión preliminar: todos los servidores del registro oficial, sincronizados cada 30 minutos. Inicia sesión con Google para escribir reseñas.
PopNx MCPServidores MCP para quienes usan IA · explicados con palabras sencillas

Gaggiuino MCP

de ljclversión 6.0.0i★ 1iSe ejecuta en tu computadora
Nombre en el registroio.github.ljcl/gaggiuino-mcp

Cómo instalar

Resumen

Descripción del creador (original en inglés)

Remote MCP server for your Gaggiuino espresso machine's shots and profiles

Qué puedes hacer con él

Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.

  • Conexión: Se ejecuta en tu computadora
  • Transporte: Streamable HTTP
  • Categoría: Otros
  • Debes completar: MCP_OAUTH_SECRET, MCP_OAUTH_PASSPHRASE_HASH

Instalación

Elige la app de IA que usas y copia la configuración.

Pasó 2/2 revisiones · Funciona en tu computadora

Primero: ¿qué IA usas?

Elige tu app y los pasos aparecen abajo.

Funciona con Claude, pero hay que preparar algo antes

Necesitas una clave de Gaggiuino MCP (regístrate en el sitio del autor; puede tener costo) · Instala Docker en tu computadora primero (una sola vez) · Solo en la app de Claude para computadora (Windows o Mac), no en la web ni en el móvil

  1. Instala Docker

    Una sola vez; sirve para todos los servidores que necesitan Docker

    Abrir la página de descarga de Docker ↗

  2. Regístrate y crea una clave de Gaggiuino MCP

    Abre el sitio del autor, crea una cuenta y una clave de API para el siguiente paso. Puede tener costo.

    Abrir el sitio de Gaggiuino MCP ↗

  3. Abre el archivo de configuración de la app de Claude de escritorio

    SettingsDeveloperEdit Config

  4. Pega esta configuración y guarda el archivo

    {
      "mcpServers": {
        "gaggiuino": {
          "command": "docker",
          "args": [
            "run",
            "-i",
            "--rm",
            "-e",
            "GAGGIUINO_URL",
            "-e",
            "PORT",
            "-e",
            "HOST",
            "-e",
            "MCP_PUBLIC_URL",
            "-e",
            "MCP_OAUTH_SECRET",
            "-e",
            "MCP_OAUTH_PASSPHRASE_HASH",
            "-e",
            "MCP_OAUTH_ISSUER",
            "-e",
            "MCP_ALLOWED_ORIGINS",
            "-e",
            "MCP_ALLOWED_HOSTS",
            "-e",
            "LOG_LEVEL",
            "ghcr.io/ljcl/gaggiuino-mcp:6.0.0"
          ],
          "env": {
            "GAGGIUINO_URL": "your-value",
            "PORT": "your-value",
            "HOST": "your-value",
            "MCP_PUBLIC_URL": "your-value",
            "MCP_OAUTH_SECRET": "your-value",
            "MCP_OAUTH_PASSPHRASE_HASH": "your-value",
            "MCP_OAUTH_ISSUER": "your-value",
            "MCP_ALLOWED_ORIGINS": "your-value",
            "MCP_ALLOWED_HOSTS": "your-value",
            "LOG_LEVEL": "your-value"
          }
        }
      }
    }

    Pega la clave solo en el campo de la app; nunca en un chat ni se la envíes a nadie

  5. Cierra Claude y vuelve a abrirlo

  6. Pruébalo

    Usa Gaggiuino MCP y dime qué puedes hacer por mí; luego muéstrame una cosa

    ✓ Si Claude dice que está usando Gaggiuino MCP o muestra una herramienta de Gaggiuino MCP en la respuesta, ya está conectado

Nombres de menú comprobados con la ayuda de Anthropic el 11 nov 2026 · tu pantalla puede variar un poco según la versión

ChatGPT todavía no puede conectar Gaggiuino MCP

Gaggiuino MCP se instala en tu computadora, pero ChatGPT solo conecta servidores que funcionan en la web

Lo que puedes hacer en su lugar

A · Usa una app que pueda conectar Gaggiuino MCP

  • Necesitas una clave de Gaggiuino MCP (regístrate en el sitio del autor; puede tener costo) · Instala Docker en tu computadora primero (una sola vez) · Solo en la app de Claude para computadora (Windows o Mac), no en la web ni en el móvil
  • Necesitas una clave de Gaggiuino MCP (regístrate en el sitio del autor; puede tener costo) · Instala Docker en tu computadora primero (una sola vez)
  • Necesitas una clave de Gaggiuino MCP (regístrate en el sitio del autor; puede tener costo) · Instala Docker en tu computadora primero (una sola vez)
  • Necesitas una clave de Gaggiuino MCP (regístrate en el sitio del autor; puede tener costo) · Instala Docker en tu computadora primero (una sola vez)

B · Otros en Otros que funcionan con ChatGPT

Elegidos entre los más usados de la misma categoría, solo los que se conectan con una dirección y sin clave

Funciona con Claude Code, pero hay que preparar algo antes

Necesitas una clave de Gaggiuino MCP (regístrate en el sitio del autor; puede tener costo) · Instala Docker en tu computadora primero (una sola vez)

  1. Instala Docker

    Una sola vez; sirve para todos los servidores que necesitan Docker

    Abrir la página de descarga de Docker ↗

  2. Regístrate y crea una clave de Gaggiuino MCP

    Abre el sitio del autor, crea una cuenta y una clave de API para el siguiente paso. Puede tener costo.

    Abrir el sitio de Gaggiuino MCP ↗

  3. Abre la Terminal

    Mac: pulsa Command+Espacio y escribe Terminal · Windows: abre PowerShell

  4. Pega este comando y pulsa Enter

    claude mcp add gaggiuino --env GAGGIUINO_URL=your-value --env PORT=your-value --env HOST=your-value --env MCP_PUBLIC_URL=your-value --env MCP_OAUTH_SECRET=your-value --env MCP_OAUTH_PASSPHRASE_HASH=your-value --env MCP_OAUTH_ISSUER=your-value --env MCP_ALLOWED_ORIGINS=your-value --env MCP_ALLOWED_HOSTS=your-value --env LOG_LEVEL=your-value -- docker run -i --rm -e GAGGIUINO_URL -e PORT -e HOST -e MCP_PUBLIC_URL -e MCP_OAUTH_SECRET -e MCP_OAUTH_PASSPHRASE_HASH -e MCP_OAUTH_ISSUER -e MCP_ALLOWED_ORIGINS -e MCP_ALLOWED_HOSTS -e LOG_LEVEL ghcr.io/ljcl/gaggiuino-mcp:6.0.0

    Cambia “your-value” por tu clave antes de pulsar Enter

    Pega la clave solo en el campo de la app; nunca en un chat ni se la envíes a nadie

  5. Escribe /mcp en Claude Code

    Deberías ver Gaggiuino MCP en la lista como conectado

  6. Pruébalo

    Usa Gaggiuino MCP y dime qué puedes hacer por mí; luego muéstrame una cosa

    ✓ Si Claude Code dice que está usando Gaggiuino MCP o muestra una herramienta de Gaggiuino MCP en la respuesta, ya está conectado

Nombres de menú comprobados con la ayuda de Anthropic el 11 nov 2026 · tu pantalla puede variar un poco según la versión

Funciona con Cursor, pero hay que preparar algo antes

Necesitas una clave de Gaggiuino MCP (regístrate en el sitio del autor; puede tener costo) · Instala Docker en tu computadora primero (una sola vez)

  1. Instala Docker

    Una sola vez; sirve para todos los servidores que necesitan Docker

    Abrir la página de descarga de Docker ↗

  2. Regístrate y crea una clave de Gaggiuino MCP

    Abre el sitio del autor, crea una cuenta y una clave de API para el siguiente paso. Puede tener costo.

    Abrir el sitio de Gaggiuino MCP ↗

  3. Pulsa este botón para abrir Cursor

    Abrir en Cursor

    Cursor te pedirá confirmar; pulsa Install

  4. Escribe tu clave

    En la configuración de Gaggiuino MCP, GAGGIUINO_URL, PORT, HOST, MCP_PUBLIC_URL, MCP_OAUTH_SECRET, MCP_OAUTH_PASSPHRASE_HASH, MCP_OAUTH_ISSUER, MCP_ALLOWED_ORIGINS, MCP_ALLOWED_HOSTS, LOG_LEVEL está vacío; añade tu clave y guarda

    Pega la clave solo en el campo de la app; nunca en un chat ni se la envíes a nadie

  5. Abre el chat de IA de Cursor en modo Agent

  6. Pruébalo

    Usa Gaggiuino MCP y dime qué puedes hacer por mí; luego muéstrame una cosa

    ✓ Si Cursor dice que está usando Gaggiuino MCP o muestra una herramienta de Gaggiuino MCP en la respuesta, ya está conectado

Nombres de menú comprobados con la ayuda de Cursor el 11 nov 2026 · tu pantalla puede variar un poco según la versión

Funciona con VS Code, pero hay que preparar algo antes

Necesitas una clave de Gaggiuino MCP (regístrate en el sitio del autor; puede tener costo) · Instala Docker en tu computadora primero (una sola vez)

  1. Instala Docker

    Una sola vez; sirve para todos los servidores que necesitan Docker

    Abrir la página de descarga de Docker ↗

  2. Regístrate y crea una clave de Gaggiuino MCP

    Abre el sitio del autor, crea una cuenta y una clave de API para el siguiente paso. Puede tener costo.

    Abrir el sitio de Gaggiuino MCP ↗

  3. Pulsa este botón para abrir VS Code

    Abrir en VS Code

    VS Code te pedirá confirmar; pulsa Install

  4. Escribe tu clave

    En la configuración de Gaggiuino MCP, GAGGIUINO_URL, PORT, HOST, MCP_PUBLIC_URL, MCP_OAUTH_SECRET, MCP_OAUTH_PASSPHRASE_HASH, MCP_OAUTH_ISSUER, MCP_ALLOWED_ORIGINS, MCP_ALLOWED_HOSTS, LOG_LEVEL está vacío; añade tu clave y guarda

    Pega la clave solo en el campo de la app; nunca en un chat ni se la envíes a nadie

  5. Abre el chat de IA de VS Code en modo Agent

  6. Pruébalo

    Usa Gaggiuino MCP y dime qué puedes hacer por mí; luego muéstrame una cosa

    ✓ Si VS Code dice que está usando Gaggiuino MCP o muestra una herramienta de Gaggiuino MCP en la respuesta, ya está conectado

Nombres de menú comprobados con la ayuda de VS Code el 11 nov 2026 · tu pantalla puede variar un poco según la versión

Otras apps que usan MCP, como Windsurf, Zed o Gemini CLI, añaden servidores de forma distinta. Míralo en la lista de apps

Ver todas las apps que usan MCP →

La configuración JSON está en “Para desarrolladores”, abajo

¿Te atascaste? Pregunta a quien usa Gaggiuino MCP💬 Conversación →
Para desarrolladores: comandos de Terminal y configuración JSON

Instalado en tu computadora

Claude Code

claude mcp add gaggiuino --env GAGGIUINO_URL=your-value --env PORT=your-value --env HOST=your-value --env MCP_PUBLIC_URL=your-value --env MCP_OAUTH_SECRET=your-value --env MCP_OAUTH_PASSPHRASE_HASH=your-value --env MCP_OAUTH_ISSUER=your-value --env MCP_ALLOWED_ORIGINS=your-value --env MCP_ALLOWED_HOSTS=your-value --env LOG_LEVEL=your-value -- docker run -i --rm -e GAGGIUINO_URL -e PORT -e HOST -e MCP_PUBLIC_URL -e MCP_OAUTH_SECRET -e MCP_OAUTH_PASSPHRASE_HASH -e MCP_OAUTH_ISSUER -e MCP_ALLOWED_ORIGINS -e MCP_ALLOWED_HOSTS -e LOG_LEVEL ghcr.io/ljcl/gaggiuino-mcp:6.0.0

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "gaggiuino": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GAGGIUINO_URL",
        "-e",
        "PORT",
        "-e",
        "HOST",
        "-e",
        "MCP_PUBLIC_URL",
        "-e",
        "MCP_OAUTH_SECRET",
        "-e",
        "MCP_OAUTH_PASSPHRASE_HASH",
        "-e",
        "MCP_OAUTH_ISSUER",
        "-e",
        "MCP_ALLOWED_ORIGINS",
        "-e",
        "MCP_ALLOWED_HOSTS",
        "-e",
        "LOG_LEVEL",
        "ghcr.io/ljcl/gaggiuino-mcp:6.0.0"
      ],
      "env": {
        "GAGGIUINO_URL": "your-value",
        "PORT": "your-value",
        "HOST": "your-value",
        "MCP_PUBLIC_URL": "your-value",
        "MCP_OAUTH_SECRET": "your-value",
        "MCP_OAUTH_PASSPHRASE_HASH": "your-value",
        "MCP_OAUTH_ISSUER": "your-value",
        "MCP_ALLOWED_ORIGINS": "your-value",
        "MCP_ALLOWED_HOSTS": "your-value",
        "LOG_LEVEL": "your-value"
      }
    }
  }
}

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "gaggiuino": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GAGGIUINO_URL",
        "-e",
        "PORT",
        "-e",
        "HOST",
        "-e",
        "MCP_PUBLIC_URL",
        "-e",
        "MCP_OAUTH_SECRET",
        "-e",
        "MCP_OAUTH_PASSPHRASE_HASH",
        "-e",
        "MCP_OAUTH_ISSUER",
        "-e",
        "MCP_ALLOWED_ORIGINS",
        "-e",
        "MCP_ALLOWED_HOSTS",
        "-e",
        "LOG_LEVEL",
        "ghcr.io/ljcl/gaggiuino-mcp:6.0.0"
      ],
      "env": {
        "GAGGIUINO_URL": "your-value",
        "PORT": "your-value",
        "HOST": "your-value",
        "MCP_PUBLIC_URL": "your-value",
        "MCP_OAUTH_SECRET": "your-value",
        "MCP_OAUTH_PASSPHRASE_HASH": "your-value",
        "MCP_OAUTH_ISSUER": "your-value",
        "MCP_ALLOWED_ORIGINS": "your-value",
        "MCP_ALLOWED_HOSTS": "your-value",
        "LOG_LEVEL": "your-value"
      }
    }
  }
}

VS Code (mcp.json)

{
  "servers": {
    "gaggiuino": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GAGGIUINO_URL",
        "-e",
        "PORT",
        "-e",
        "HOST",
        "-e",
        "MCP_PUBLIC_URL",
        "-e",
        "MCP_OAUTH_SECRET",
        "-e",
        "MCP_OAUTH_PASSPHRASE_HASH",
        "-e",
        "MCP_OAUTH_ISSUER",
        "-e",
        "MCP_ALLOWED_ORIGINS",
        "-e",
        "MCP_ALLOWED_HOSTS",
        "-e",
        "LOG_LEVEL",
        "ghcr.io/ljcl/gaggiuino-mcp:6.0.0"
      ],
      "env": {
        "GAGGIUINO_URL": "your-value",
        "PORT": "your-value",
        "HOST": "your-value",
        "MCP_PUBLIC_URL": "your-value",
        "MCP_OAUTH_SECRET": "your-value",
        "MCP_OAUTH_PASSPHRASE_HASH": "your-value",
        "MCP_OAUTH_ISSUER": "your-value",
        "MCP_ALLOWED_ORIGINS": "your-value",
        "MCP_ALLOWED_HOSTS": "your-value",
        "LOG_LEVEL": "your-value"
      }
    }
  }
}

Valores que debes completar

  • GAGGIUINO_URL env
    Gaggiuino machine URL (default http://gaggiuino.local)
  • PORT env
    Server port (default 8000)
  • HOST env
    Bind address (default 0.0.0.0)
  • MCP_PUBLIC_URL env
    Public https origin clients reach this server on, with no path (e.g. https://box.tailnet.ts.net). Set with MCP_OAUTH_SECRET to enable OAuth; it is advertised as the OAuth resource and must match the…
  • MCP_OAUTH_SECRET secreto env
    Signing key for self-issued OAuth access and refresh tokens, at least 32 characters (openssl rand -hex 32). Keep it stable across restarts so clients stay signed in
  • MCP_OAUTH_PASSPHRASE_HASH secreto env
    scrypt hash of the passphrase you type on the OAuth consent page, in the form scrypt$N$r$p$salt$hash. Required whenever OAuth is enabled. Generate with `bun run hash-passphrase` — never store the pas…
  • MCP_OAUTH_ISSUER env
    External OAuth issuer URL to delegate token issuing to (e.g. a Keycloak or Authentik realm). Puts the server in resource-server-only mode; requires MCP_PUBLIC_URL and refuses to start alongside MCP_O…
  • MCP_ALLOWED_ORIGINS env
    Comma-separated browser origins allowed to call /mcp, or * to allow any (unsafe). Requests with no Origin header are unaffected
  • MCP_ALLOWED_HOSTS env
    Comma-separated Host header values to accept on /mcp. Empty disables host validation
  • LOG_LEVEL env
    Log verbosity: debug, info, warn, error, or silent (default info). Logs are one JSON object per line on stderr

Esta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.

De un vistazo

Descargas por semanai
No está en npm/PyPI
Licenciai
Sin licencia indicada
Conexión
Se ejecuta en tu computadora
Transporte
streamable-http
Última versióni
6.0.0
Categoríai
Otros
Publicado en el registroi
5 oct 2026
Último cambio de códigoi
9 nov 2026
Creador
ljcl
Paquetes
oci: ghcr.io/ljcl/gaggiuino-mcp:6.0.0
Sitio web
github.com
Estado en el registro
Activo

Qué apps pueden usarlo

Según cómo se conecta este servidor y la documentación de cada app, comprobado el 10 nov 2026.

Se ejecutan en tu computadora en

ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast

Todas las apps, con ventajas y desventajas →

Qué puede hacer

Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.

Revisiones básicasi

Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 11 nov 2026

  • ✓ Superada

    El creador coincide con el repo

    El nombre en el registro se verificó con la cuenta de GitHub ljcl, dueña del repo

  • ✓ Superada

    Sigue en mantenimiento

    Último cambio de código: anteayer

  • … Aún sin revisar

    Tiene licencia

    Todavía no hemos leído este repo en GitHub

  • – No aplica

    El endpoint responde

    Este se ejecuta en tu computadora; no hay endpoint en internet

  • – No aplica

    Inicio de sesión con OAuth

    Se ejecuta en tu computadora y usa ajustes locales en su lugar

  • … Aún sin revisar

    Sin instrucciones ocultas en las descripciones de herramientas

    Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet

Conversación

Pregunta, comparte un consejo o avisa de que no funciona. Ordenado por lo que la gente marcó como útil.

Aún no hay publicaciones. Sé la primera persona en preguntar o compartir.

Lo publicado aquí lo escriben usuarios, no el equipo de PopNx.

Inicia sesión con Google para publicar

Reseñas de usuarios

Aún no hay reseñas

Inicia sesión con Google para escribir una reseña

Comparado con otros en Otrosi

  • Más estrellas que el 86% de los otros 19162 servidores de esta categoría
  • Publicado en el registro más recientemente que el 56% de los otros 19162 servidores de esta categoría
  • Revisiones básicas iguales o mejores que el 100% de los otros 19162 servidores de esta categoría

Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.

Preguntas frecuentes

¿Es seguro Gaggiuino MCP?

Superó 2 de 2 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.

¿Qué claves o códigos necesita?

Debes completar: MCP_OAUTH_SECRET, MCP_OAUTH_PASSPHRASE_HASH

¿Se ejecuta en mi computadora o en la nube?

Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).

¿Sigue en mantenimiento?

El repo de GitHub cambió por última vez anteayer, y la última versión (6.0.0) llegó al registro hace 37 días.

¿Qué apps pueden usarlo?

Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Docker en tu computadora.

¿Qué puedo usar en su lugar?

En la misma categoría: World Monitor, Claude Flow, Tldraw

Alternativas

Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.

Cómo leer una tarjeta:↓ Descargas por semanai★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi

World Monitor

Real-time global intelligence on conflict, markets, energy, trade, shipping and cyber. 102 tools.

de koala73Muy usado★ 90,5 milActualizado hace 6 días

Se ejecuta en la nube✓ worldmonitor.app

Claude Flow

AI orchestration with hive-mind swarms, neural networks, and 87 MCP tools for enterprise dev.

de ruvnetMuy usado↓ 13,5 mil/sem★ 81,4 milActualizado hace 14 meses

Se ejecuta en tu computadora

Tldraw

Draw and visually collaborate with your agents on tldraw's canvas.

de tldrawMuy usado★ 51,4 milActualizado hace 8 meses

Se ejecuta en la nube

README del creador

Abrir el README

Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.

Gaggiuino MCP Server

A Remote MCP server for integrating a Gaggiuino espresso machine with AI tools. Ask your AI assistant to check machine status, analyze shot data, and get dial-in guidance.

Features

MCP Tools

Shot Analysis

  • get_status - Current machine status (temperature, pressure, weight, water level)
  • get_latest_shot_id - Most recent shot, id and headline numbers in one call
  • list_recent_shots - The last few shots summarised, for trends over a session
  • get_shot_data - Structured shot summary with metrics
  • get_shot_raw_data - Complete time-series data
  • view_shot_graph - Interactive shot graph, shown in hosts that support MCP Apps (other hosts get the text summary only) (pressure, flow, weight over time with target overlays and optional shot comparison)

Profiles and Settings

  • list_profiles - Profiles on the machine, merged with this server's documentation
  • get_profile_info - Everything known about one profile
  • get_machine_settings - Boiler, steam, and scale configuration as the machine reports it
  • get_maintenance_status - Descale and backflush history the machine tracks itself, with shots since each
  • get_dial_in_guidance - Expert guidance for analyzing espresso shots
  • select_profile - Switch the active profile (changes the machine; requires an authenticated server)
  • upload_profile - Save a new brew profile to the machine (changes the machine; requires an authenticated server). Creates only — it never updates, and the machine assigns a fresh id every time, so uploading twice leaves two profiles
  • delete_profile - Delete a profile from the machine (destructive and irreversible; requires an authenticated server). It demands the profile's exact name back as confirmation, refuses to delete the currently selected profile, and always prompts for approval in the host — even under a stored "always allow"

MCP Prompts - workflow templates your host surfaces as slash commands or menu items:

  • dial_in_new_bag - first shots on a coffee you have not pulled before (bean, and optionally roast level, dose, and what you want in the cup)
  • diagnose_last_shot - read the shot you just pulled against how it tasted (what was wrong, and optionally what you changed)
  • choose_profile - pick a profile the machine actually holds for a coffee (roast level, and optionally drink and notes)
  • espresso_shot_analyst - the dial-in guidance as a system prompt (same content as get_dial_in_guidance)

Each workflow prompt lays out the tools to call in order, so the analysis starts from the machine's own data rather than a guess.

MCP Resources - gaggiuino://profiles and gaggiuino://profiles/{id} for profile data

Quick Start

The server is published as a multi-arch image (linux/amd64, linux/arm64) at ghcr.io/ljcl/gaggiuino-mcp, so there is nothing to clone or build. It is also listed in the MCP Registry as io.github.ljcl/gaggiuino-mcp.

1. Download and Configure
mkdir gaggiuino-mcp && cd gaggiuino-mcp

curl -O https://raw.githubusercontent.com/ljcl/gaggiuino-mcp/main/docker-compose.yml curl -o .env https://raw.githubusercontent.com/ljcl/gaggiuino-mcp/main/.env.example

Edit .env with your Gaggiuino machine's address:

# Use the IP directly (recommended)

GAGGIUINO_URL=http://192.168.1.100

Or if mDNS works on your network

GAGGIUINO_URL=http://gaggiuino.local

2. Start the Server
docker compose up -d
3. Verify
curl http://localhost:8000/health

The server is available at http:// :8000/mcp.

Choosing a Version

The compose file tracks latest, which is always the newest release. To pin one instead, set GAGGIUINO_MCP_TAG in .env:

GAGGIUINO_MCP_TAG=5.0    # newest 5.0.x patch

GAGGIUINO_MCP_TAG=5.0.0 # exact release

Builds of unreleased main are published as edge (and main- ). They can carry a breaking change that no release has announced yet, so use them only to try a fix before it ships.

Upgrade with:

docker compose pull && docker compose up -d

Configuration

Environment Variables
VariableDefaultDescription
GAGGIUINO_URLhttp://gaggiuino.localURL of your Gaggiuino machine
PORT8000Port for the MCP server
HOST0.0.0.0Host to bind to
MCP_PUBLIC_URL_(unset)_Public https origin clients reach this server on, with no path (e.g. https://box.tailnet.ts.net). Set together with MCP_OAUTH_SECRET to enable OAuth. It is advertised as the OAuth resource, so it must match the URL you enter in the client exactly.
MCP_OAUTH_SECRET_(unset)_Signing key for self-issued OAuth tokens, at least 32 characters (openssl rand -hex 32). Keep it stable across restarts so clients stay signed in. Setting only one of these two fails at startup.
MCP_OAUTH_PASSPHRASE_HASH_(unset)_scrypt hash of the passphrase you type on the consent page when connecting a client. Required whenever the built-in authorization server is on — without it the consent page would grant a token to anyone who reached it, so the server refuses to start. Generate with cd apps/server && bun run hash-passphrase; never store the passphrase itself.
MCP_OAUTH_ISSUER_(unset)_Delegate token issuing to an identity provider you already run (Authentik, Keycloak, Authelia, Zitadel, Kanidm, tsidp). Set it and this server serves no OAuth endpoints of its own, verifying RS256/ES256 tokens against the issuer's JWKS instead. Requires MCP_PUBLIC_URL; refuses to start alongside MCP_OAUTH_SECRET or MCP_OAUTH_PASSPHRASE_HASH. See Using an external identity provider.
MCP_ALLOWED_ORIGINS_(empty)_Comma-separated browser origins allowed to call /mcp. * allows any (unsafe).
MCP_ALLOWED_HOSTS_(empty)_Comma-separated Host header values to accept. Empty disables the check.
LOG_LEVELinfodebug, info, warn, error, or silent. Logs are one JSON object per line on stderr.
Health and logs

GET /health returns JSON:

{

"status": "ok", "version": "3.2.0", "uptimeSec": 3412, "machine": { "url": "http://gaggiuino.local", "state": "unreachable", "lastCheckedAt": "2026-07-27T21:11:15.274Z", "lastError": "Unable to connect. Is the computer able to access the url?", "versions": { "coreVersion": "a06f97fd", "frontVersion": "a06f97fd", "staticVersion": "a06f97fd" } } }

It answers 200 whenever the process is alive, including while the machine is unreachable — your espresso machine is off most of the day, and the container healthcheck reads the status code. machine.state is ok, unreachable, or unknown, observed from the requests the server already makes rather than from a probe, so /health puts no extra load on the machine. machine.versions is observed the same way — remembered the first time anything reads the machine's settings (get_machine_settings), never fetched by /health itself — so null there means "this server has not read the settings yet", not "the machine reports no version". Only those three documented fields are published: /health is unauthenticated, so anything a future firmware adds under versions stays out of it until someone decides otherwise.

Logs are one JSON object per line, so you can pick out what you need:

docker compose logs -f | jq -c 'select(.event == "tool.call" and .outcome != "ok")'
Securing the endpoint

Turn on OAuth before exposing this server beyond your LAN. Every tunnel option below puts /mcp on the public internet, and without authentication anyone who learns the URL gets the full tool surface against a machine in your kitchen. The server prints a warning at startup while nothing is configured.

Three variables, all required together:

# 1. The public origin clients will reach the server on — no path, https only.

This is advertised as the OAuth resource, so it must match the URL you

type into Claude exactly.

MCP_PUBLIC_URL=https://your-machine.tail-scale.ts.net

2. The key your tokens are signed with. Keep it stable across restarts, or

every restart signs you out of your phone.

openssl rand -hex 32

3. The passphrase you will type on the consent page. Store the hash, never

the passphrase — this prompts and prints the whole line to paste in.

cd apps/server && bun run hash-passphrase >> ../../.env

Then recreate the container — a plain restart is not enough:

docker compose up -d --force-recreate

Compose tracks the *list* of env_file paths, not their contents, so editing .env and running docker compose up -d (or restart) can reuse the existing container along with the environment it was created with. The new variables never reach the process and the server comes up unauthenticated exactly as if you had not set them — with no error, because from its point of view nothing is configured. Check what actually arrived:

docker inspect gaggiuino-mcp --format '{{range .Config.Env}}{{println .}}{{end}}' | grep MCP_

Setting only some of them fails at startup and names the missing one. That is deliberate: silently falling back to an open endpoint is how somebody exposes a tunnel believing it is protected. The corollary is worth knowing when diagnosing: a server that is *running* and unauthenticated has seen none of the three — if you believe you set them, the container is stale, not the config wrong.

Why OAuth and not a shared token

OAuth is the only credential this server accepts, because it is the only one a Claude connector can present. A connector is added at the account level so one entry has to work on claude.ai, Claude Desktop and iOS, and on a personal plan the "Add custom connector" dialog offers an OAuth Client ID and Secret and no request-header field. A local stdio bridge is not a way around it either — it cannot run on iOS. A shared-secret header would sit in .env with no client able to send it, leaving the write tools permanently refused on exactly the deployment this project is built for. (If a long-lived .env still carries MCP_AUTH_TOKEN from a pre-2.0 install, delete the line: nothing reads it, and it does not gate /mcp.)

When you connect, Claude discovers the endpoint, sends you to a consent page served by this server, and you type the passphrase. There is nothing to register and no client secret to store.

What each part protects

/health and the /.well-known/* discovery documents are deliberately unauthenticated — the container's healthcheck presents no credential, and a document a client fetches *in order to* authenticate cannot itself require authentication.

select_profile, upload_profile and delete_profile — the tools that change the machine — need the espresso:write scope. A token without it gets a 403 that prompts Claude to ask you for the extra permission rather than failing silently. With nothing configured at all they refuse to run and say so, which is why an open server is a defensible default for a LAN and a machine-control tool on one is not.

Requests carrying an Origin header are rejected unless the origin is listed in MCP_ALLOWED_ORIGINS. This is what stops any web page you happen to visit from POSTing to a server running on your own network — a token does not help there, because the browser sends it for you. Requests with no Origin (Claude Desktop, curl, anything that is not a browser) are unaffected, so the default empty list is the right setting for almost everyone.

Listing an origin also makes /mcp answer

Solo se muestra el principio; lee el resto en el repo