Gaggiuino MCP Server
加吉诺-MCP
Gaggiuino MCP 服务器:这是为Gaggiuino构建的轻量级模型上下文协议 (MCP) 服务器。Gaggiuino 是 Gaggia Classic 的开源意式浓缩咖啡机控制器。它旨在轻松集成需要实时显示或分析 Gaggiuino 系统数据的 AI 客户端。
这是我写的关于这个项目的一篇文章https://medium.com/@a.klement.w/dialing-in-espresso-using-mcp-server-0207819fe93a
允许连接的客户端:
检索当前机器状态
获取最新镜头 ID
获取指定 ID 的镜头数据
Related MCP server: meticulous-mcp
特征
📊 实时访问镜头遥测
🌐 专为本地网络访问而设计
如何使用
使用 Claude Desktop
{
"mcpServers": {
"gaggiuino": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/PARENT/FOLDER/gaggiuino-mcp",
"run",
"gaggiuino.py"
]
}
}
}可用工具集
工具集 | 描述 |
| 获取最新的浓缩咖啡冲泡 ID |
| 获取指定 ID 的浓缩咖啡冲泡数据。参数:id:冲泡 ID |
| 获取浓缩咖啡机状态 |
例子
用户:
分析最新的浓缩咖啡数据
克劳德:
我将为您检索并分析最新的浓缩咖啡冲泡数据。首先,我会检查您的浓缩咖啡机的状态,然后获取最新的冲泡信息。getStatus 现在,我将获取最新一杯浓缩咖啡的 ID: getStatus让我检索第 188 getLatestShotId咖啡的数据: getShotData根据检索到的数据,我现在将分析您最新的一杯浓缩咖啡(ID 为 188)。以下是我的分析:
机器状态和镜头概览:您的机器当前处于闲置状态,温度为 57.2°C,压力为 -0.1 bar。分析的镜头拍摄于 2025 年 4 月 19 日(基于时间戳),总时长为 26.5 秒(265 个数据点,间隔为 0.1 秒)。
配置文件信息您使用了“Leva 9 LR v0.5”配置文件,这是一个多相配置文件,压力逐渐下降,目标输出量为 40g。该配置文件具有
7 ml/s 的流量控制预注入
流量降至 3.5 ml/s
以 1.5 ml/s 的流速进行预萃取,压力限制为 3 bar
压力在 2 秒内上升至 9 bar
一系列逐渐下降的压力步骤(8.8→6.0 bar)
预浸和萃取阶段的分析
预浸泡(0-5 秒):以高流速(6-7 毫升/秒)和最小压力(0.3-0.6 巴)开始,使咖啡饼饱和。
第一次压力上升(5-10 秒):压力逐渐增至约 2.5 巴,而流量下降至约 1.5 毫升/秒。
压力曲线阶段(10-15秒):压力保持在3巴左右,流量减少至约0.8毫升/秒。
压力斜坡(15-20 秒):按照编程的曲线,压力在约 5 秒内从 3 巴增加到 8.9 巴。
压力下降阶段(20-26.5秒):压力按照剖面步骤逐渐从~8.5巴下降到6.4巴。
关键测量
最终产量:38克(基于最终射击重量)
冲泡比例:无法确定(未提供咖啡剂量)
温度稳定性:极佳 - 整个提取过程保持在 92.8-94.1°C
第一滴:出现约 11-12 秒(预浸泡约 75%)
峰值流速:7.2 ml/s(开始时)
峰值压力:8.9 巴(约 20 秒)
萃取动力学
流速:开始时较高(7 ml/s),按照程序在预浸泡期间降至 3.5 ml/s,然后降至 1.5 ml/s,然后在提取期间稳定在 ~2.8 ml/s。
供水量:泵送的总水量为 87.7 毫升,其中杯中水量为 38 克,表明冰球中保留了大量水分。
压力曲线:压力曲线显示出从预浸泡到萃取的良好进展,并平稳过渡到压力下降。
性能评估这似乎是一次技术上执行良好的射击,并且很好地遵循了编程的配置文件:
温度控制:93-94°C 左右稳定性极佳
压力曲线:遵循编程的曲线,过渡平稳
提取流程:在主要提取阶段保持一致
重量输出:达到38克(接近40克的目标)
您希望我针对此镜头的任何方面提供更具体的建议吗?或者您希望我更详细地分析某个特定参数吗?
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