Gaggiuino MCP Server
gaggiuino-mcp
Servidor MCP de Gaggiuino. Este es un servidor ligero de Protocolo de Contexto de Modelo (MCP) diseñado para Gaggiuino , el controlador de código abierto para la máquina de café expreso Gaggia Classic. Está diseñado para integrar fácilmente clientes de IA que deseen visualizar o analizar datos del sistema Gaggiuino en tiempo real.
Este es un artículo que escribí sobre este proyecto https://medium.com/@a.klement.w/dialing-in-espresso-using-mcp-server-0207819fe93a
Permite a los clientes conectados:
Recuperar el estado actual de la máquina
Acceda a la última identificación de la toma
Obtener datos de disparos para una identificación específica
Related MCP server: meticulous-mcp
Características
📊 Acceso en tiempo real a la telemetría de disparos
🌐 Diseñado para acceso a red local
Cómo utilizar
Uso de Claude Desktop
{
"mcpServers": {
"gaggiuino": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/PARENT/FOLDER/gaggiuino-mcp",
"run",
"gaggiuino.py"
]
}
}
}Conjuntos de herramientas disponibles
Conjunto de herramientas | Descripción |
| Obtenga la identificación de la última toma de espresso |
| Obtener datos de la dosis de espresso para un ID. Argumentos: ID: ID de la dosis |
| Obtener el estado de la máquina de espresso |
Ejemplo
Usuario:
Analizar los últimos datos de la toma de espresso
Claude:
Recuperaré y analizaré los datos de la última dosis de espresso. Primero, comprobaré el estado de su máquina de espresso y luego obtendré la información de la última dosis. getStatus Ahora obtendré el ID de la última dosis de espresso: getLatestShotId Recuperaré los datos de la dosis n.° 188: getShotData Con base en los datos recuperados, analizaré su última dosis de espresso (ID n.° 188). Este es mi análisis:
Estado de la máquina y resumen de la toma. Su máquina está actualmente inactiva a 57,2 °C con una presión de -0,1 bar. La toma analizada se tomó el 19 de abril de 2025 (según la marca de tiempo), con una duración total de 26,5 segundos (265 puntos de datos a intervalos de 0,1 s).
Información del perfil: Utilizaste el perfil "Leva 9 LR v0.5", un perfil multifásico con presión decreciente que busca una salida de 40 g. El perfil tiene
Una preinfusión con control de flujo a 7 ml/s
Reducir el flujo a 3,5 ml/s
Preextracción a un flujo de 1,5 ml/s con restricción de presión de 3 bar
Rampa de presión a 9 bar durante 2 segundos
Una serie de pasos de presión que disminuyen gradualmente (8,8→6,0 bar)
Análisis de la inyección: fases de preinfusión y extracción
Preinfusión (0-5 s): se inicia con un caudal alto (6-7 ml/s) con una presión mínima (0,3-0,6 bar), lo que permite que el disco se sature.
Primer aumento de presión (5-10 s): la presión aumentó gradualmente hasta ~2,5 bar mientras el flujo disminuía a ~1,5 ml/s.
Fase de perfil de presión (10-15 s): presión mantenida alrededor de 3 bar con flujo reducido a ~0,8 ml/s.
Rampa de presión (15-20 s): la presión aumentó de 3 a 8,9 bar durante ~5 segundos siguiendo el perfil programado.
Fase de presión descendente (20-26,5 s): la presión disminuyó gradualmente de ~8,5 a 6,4 bar siguiendo los pasos del perfil.
Medidas clave
Rendimiento final: 38 g (según el peso del disparo final)
Relación de preparación: No se puede determinar (no se proporciona la dosis de café)
Estabilidad de temperatura: Excelente: se mantiene a 92,8-94,1 °C durante toda la extracción.
Primeras gotas: aparecieron alrededor de los 11-12 segundos (aproximadamente el 75 % de la preinfusión).
Caudal máximo: 7,2 ml/s (al inicio)
Presión máxima: 8,9 bar (a ~20 segundos)
Dinámica de extracción
Caudal: comenzó alto (7 ml/s), disminuyó a 3,5 ml/s y luego a 1,5 ml/s durante la preinfusión según lo programado, luego se estabilizó en ~2,8 ml/s durante la extracción.
Suministro de agua: El agua total bombeada fue de 87,7 ml, con 38 g en la taza, lo que sugiere una retención de agua significativa en el disco.
Perfil de presión: La curva de presión muestra una excelente progresión desde la preinfusión hasta la extracción, con una transición suave hacia una presión decreciente.
Evaluación del rendimiento Este parece ser un tiro técnicamente bien ejecutado con buena adherencia al perfil programado:
Control de temperatura: Excelente estabilidad alrededor de 93-94°C
Curva de presión: sigue el perfil programado con transiciones suaves
Flujo de extracción: constante durante la fase de extracción principal
Peso de salida: Se lograron 38 g (cerca del objetivo de 40 g)
¿Te gustaría que te dé recomendaciones más específicas sobre algún aspecto de esta toma, o hay algún parámetro en particular que te gustaría que analice con más detalle?
Available Tools
3 toolsgetLatestShotIdB
Get latest espresso shot id.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool does but doesn't add context on traits like whether it's read-only, requires authentication, has rate limits, or what the return format might be. This leaves significant gaps for an agent to understand how to invoke it correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with zero waste, front-loading the essential information. It's appropriately sized for a simple tool with no parameters, making it highly efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., the format of the shot ID or any error cases), which is crucial for an agent to use it effectively. For a tool with no structured output documentation, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is 100%, so there's no need for parameter details in the description. The baseline for this scenario is 4, as the description doesn't need to compensate for any parameter gaps, and it efficiently avoids unnecessary information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('latest espresso shot id'), making the purpose specific and understandable. However, it doesn't differentiate from sibling tools like 'getShotData' or 'getStatus', which might retrieve related information, so it doesn't reach the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'getShotData' or 'getStatus'. The description implies it's for retrieving the latest shot ID, but there's no explicit context, exclusions, or comparisons to help an agent choose appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getShotDataC
Get espresso shot data for an id.
Args:
id: Shot id
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'Get' which implies a read operation, but doesn't disclose behavioral traits such as error handling, data format, permissions needed, or rate limits. This is a significant gap for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the main purpose, followed by a parameter explanation. It avoids unnecessary words, but the structure could be improved by integrating the parameter info more seamlessly or adding context in a single coherent sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and low schema coverage, the description is incomplete. It lacks details on return values, error cases, or how it interacts with sibling tools. For a tool with one parameter but undefined behavior, this is inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, but the description adds meaning by specifying that 'id' is a 'Shot id'. This clarifies the parameter's purpose beyond the schema's basic type. However, it doesn't detail format, constraints, or examples, so it only partially compensates for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get espresso shot data') and the resource ('for an id'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'getLatestShotId' or 'getStatus', which might retrieve related data, so it doesn't reach the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'getLatestShotId' or 'getStatus'. The description only states what it does, without context on prerequisites, scenarios, or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getStatusB
Get espresso machine status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Get') but doesn't clarify what 'status' entails (e.g., operational state, error codes, maintenance info), response format, or any side effects like rate limits or authentication needs. This leaves significant gaps for a tool with no structured safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—a single sentence with no wasted words. It front-loads the core purpose ('Get espresso machine status') effectively, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the 'status' return value includes (e.g., JSON structure, possible states), which is critical for an agent to use the tool correctly. For a tool with no structured output, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate here, and it implies no inputs are required, aligning with the schema. A baseline of 4 is given since no parameters exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('espresso machine status'), making the purpose specific and understandable. It doesn't explicitly distinguish from sibling tools like 'getLatestShotId' or 'getShotData', but the resource focus is clear enough for basic differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'getLatestShotId' or 'getShotData'. It lacks context about prerequisites, timing, or exclusions, leaving the agent to infer usage based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v1.0.0- First observed
getLatestShotId - First observed
getShotData - First observed
getStatus
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: getLatestShotId retrieves the most recent shot identifier, getShotData fetches detailed data for a specific shot ID, and getStatus provides machine status information. There is no overlap or ambiguity between these functions.
All three tools follow a consistent verb_noun pattern with camelCase naming (getLatestShotId, getShotData, getStatus). The naming is predictable and uniform throughout the set.
With only 3 tools, the set feels thin for an espresso machine control server. There are obvious gaps in functionality, such as tools to start/stop shots, adjust settings, or manage profiles, which limits the server's utility for comprehensive machine interaction.
The tool surface is severely incomplete for an espresso machine domain. It only provides read-only operations (getLatestShotId, getShotData, getStatus) with no ability to control the machine (e.g., start_shot, set_temperature), update configurations, or manage other critical aspects like brewing profiles or maintenance.
Maintenance
Related MCP Connectors
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Real-time planetary signal engine and Model Context Protocol (MCP) server for autonomous AI agents.
- mcp-serverOAuthio.klokin
MCP server exposing klokin time-tracking operations (employees, time entries, stores) to AI clients.
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
Related MCP Servers
- AlicenseBqualityAmaintenanceLocal-first MCP server that connects AI agents to your Withings body, sleep, activity and heart data.23112 npm5MIT
- AlicenseAqualityDmaintenanceMCP server for controlling Meticulous espresso machines via Claude and other AI clients.2286 npmMIT
- AlicenseAqualityDmaintenanceAn MCP server for Gaggiuino-modified espresso machines, enabling monitoring, shot analysis, and profile management.49 npm1MIT
- AlicenseNot gradedqualityAmaintenanceA remote MCP server for integrating Gaggiuino espresso machines with AI tools. It enables checking machine status, analyzing shot data, managing profiles, and receiving dial-in guidance.1MIT