プロトタイプ · プレビュー版:公式レジストリのすべてのサーバーを掲載し、30分ごとに同期しています。Google でログインするとレビューを書けます。
PopNx MCPAIを使う人のためのMCPサーバー · やさしい言葉で解説

Gaggiuino MCP

作者:ljclバージョン 6.0.0i★ 1iパソコンで動く
レジストリ名io.github.ljcl/gaggiuino-mcp

インストール方法

概要

作者による説明(英語の原文)

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

できること

このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。

  • 接続方法: パソコンで動く
  • トランスポート: Streamable HTTP
  • カテゴリ: その他
  • 入力が必要なもの:MCP_OAUTH_SECRET, MCP_OAUTH_PASSPHRASE_HASH

インストール

使っているAIアプリを選んで、設定をコピーしてください。

チェック 2/2 合格 · あなたのパソコンで動きます

まず:どの AI を使っていますか?

使っているアプリを選ぶと、下に手順が表示されます。

Claude につなげますが、先に準備が必要です

Gaggiuino MCP のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Docker を入れてください(1 回だけ) · パソコン版 Claude アプリ(Windows または Mac)のみ。Web やスマホでは使えません

  1. Docker を入れる

    1 回だけ。Docker が必要なすべてのサーバーで使えます

    Docker のダウンロードページを開く ↗

  2. Gaggiuino MCP に登録してキーを作る

    提供元のサイトで登録し、次の手順で使う API キーを作ります。費用がかかる場合があります。

    Gaggiuino MCP のサイトを開く ↗

  3. パソコン版 Claude アプリの設定ファイルを開く

    SettingsDeveloperEdit Config

  4. この設定を貼り付けて保存

    {
      "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"
          }
        }
      }
    }

    キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください

  5. Claude を終了してもう一度開く

  6. 試してみる

    Gaggiuino MCP を使って、私に何ができるか教えて、1 つやってみせて

    ✓ Claude が Gaggiuino MCP を使っていると言うか、回答に Gaggiuino MCP のツール名が出れば接続成功です

メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります

ChatGPT はまだ Gaggiuino MCP につなげません

Gaggiuino MCP はパソコンに入れて使うものですが、ChatGPT は Web 上で動くサーバーにしかつなげません

代わりにできること

A · Gaggiuino MCP につなげるアプリを使う

  • Gaggiuino MCP のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Docker を入れてください(1 回だけ) · パソコン版 Claude アプリ(Windows または Mac)のみ。Web やスマホでは使えません
  • Gaggiuino MCP のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Docker を入れてください(1 回だけ)
  • Gaggiuino MCP のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Docker を入れてください(1 回だけ)
  • Gaggiuino MCP のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Docker を入れてください(1 回だけ)

B · その他 の中で ChatGPT につなげる別のサーバー

同じカテゴリでよく使われているものから、キーなしでアドレスだけでつなげるものを選びました

Claude Code につなげますが、先に準備が必要です

Gaggiuino MCP のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Docker を入れてください(1 回だけ)

  1. Docker を入れる

    1 回だけ。Docker が必要なすべてのサーバーで使えます

    Docker のダウンロードページを開く ↗

  2. Gaggiuino MCP に登録してキーを作る

    提供元のサイトで登録し、次の手順で使う API キーを作ります。費用がかかる場合があります。

    Gaggiuino MCP のサイトを開く ↗

  3. ターミナルを開く

    Mac:Command+スペースで Terminal と入力 · Windows:PowerShell を開く

  4. このコマンドを貼り付けて 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

    Enter の前に「your-value」を自分のキーに書き換えてください

    キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください

  5. Claude Code で /mcp と入力

    Gaggiuino MCP が一覧にあり、接続済みと表示されれば OK です

  6. 試してみる

    Gaggiuino MCP を使って、私に何ができるか教えて、1 つやってみせて

    ✓ Claude Code が Gaggiuino MCP を使っていると言うか、回答に Gaggiuino MCP のツール名が出れば接続成功です

メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります

Cursor につなげますが、先に準備が必要です

Gaggiuino MCP のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Docker を入れてください(1 回だけ)

  1. Docker を入れる

    1 回だけ。Docker が必要なすべてのサーバーで使えます

    Docker のダウンロードページを開く ↗

  2. Gaggiuino MCP に登録してキーを作る

    提供元のサイトで登録し、次の手順で使う API キーを作ります。費用がかかる場合があります。

    Gaggiuino MCP のサイトを開く ↗

  3. このボタンで Cursor を開く

    Cursor で開く

    Cursor がインストールの確認をするので Install を押します

  4. キーを入力

    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 が空です。自分のキーを入れて保存します

    キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください

  5. Cursor の AI チャットを Agent モードで開く

  6. 試してみる

    Gaggiuino MCP を使って、私に何ができるか教えて、1 つやってみせて

    ✓ Cursor が Gaggiuino MCP を使っていると言うか、回答に Gaggiuino MCP のツール名が出れば接続成功です

メニュー名は 2026年11月11日 に Cursor のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります

VS Code につなげますが、先に準備が必要です

Gaggiuino MCP のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Docker を入れてください(1 回だけ)

  1. Docker を入れる

    1 回だけ。Docker が必要なすべてのサーバーで使えます

    Docker のダウンロードページを開く ↗

  2. Gaggiuino MCP に登録してキーを作る

    提供元のサイトで登録し、次の手順で使う API キーを作ります。費用がかかる場合があります。

    Gaggiuino MCP のサイトを開く ↗

  3. このボタンで VS Code を開く

    VS Code で開く

    VS Code がインストールの確認をするので Install を押します

  4. キーを入力

    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 が空です。自分のキーを入れて保存します

    キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください

  5. VS Code の AI チャットを Agent モードで開く

  6. 試してみる

    Gaggiuino MCP を使って、私に何ができるか教えて、1 つやってみせて

    ✓ VS Code が Gaggiuino MCP を使っていると言うか、回答に Gaggiuino MCP のツール名が出れば接続成功です

メニュー名は 2026年11月11日 に VS Code のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります

Windsurf、Zed、Gemini CLI など MCP を使える他のアプリは追加方法がそれぞれ違います。アプリ一覧で確認してください

MCP を使えるアプリをすべて見る →

JSON 設定は下の「開発者向け」にあります

つまずいたら?Gaggiuino MCP を使っている人に聞いてみましょう💬 ディスカッション →
開発者向け:ターミナルのコマンドと JSON 設定

パソコンにインストール

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"
      }
    }
  }
}

自分で入力する値

  • 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 秘密 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 秘密 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

この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。

ひと目でわかる

週あたりのダウンロードi
npm/PyPIにない
ライセンスi
ライセンスの記載なし
接続方法
パソコンで動く
トランスポート
streamable-http
最新バージョンi
6.0.0
カテゴリi
その他
レジストリ公開日i
2026年10月5日
コードの最終更新i
2026年11月9日
作者
ljcl
パッケージ
oci: ghcr.io/ljcl/gaggiuino-mcp:6.0.0
ウェブサイト
github.com
レジストリでの状態
有効

使えるアプリ

このサーバーのつなぎ方と、各アプリの公式ドキュメントに基づきます。2026年11月10日に確認。

パソコン上で動かせるアプリ

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

すべてのアプリと長所・短所 →

できること

パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。

基本チェックi

誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月11日にチェック

  • ✓ 合格

    作者とリポジトリが一致

    レジストリ名は、リポジトリを所有するGitHubアカウント ljcl で確認済みです

  • ✓ 合格

    今もメンテナンスされている

    コードの最終更新:3 日前

  • … 未チェック

    ライセンスがある

    このリポジトリはまだGitHubから読み取っていません

  • – 対象外

    エンドポイントが応答する

    これはパソコンで動くため、インターネット上のエンドポイントはありません

  • – 対象外

    OAuthでサインイン

    パソコンで動き、代わりにローカルの設定を使います

  • … 未チェック

    ツールの説明に隠れた指示がない

    パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです

話し合い

質問、コツの共有、使えないことの報告ができます。「役に立った」の多い順です。

まだ投稿はありません。最初の質問や共有をどうぞ。

ここの投稿は利用者によるもので、PopNx チームのものではありません。

Google でログインして投稿

ユーザーレビュー

まだレビューはありません

Google でログインしてレビューを書く

その他のほかのサーバーとの比較i

  • このカテゴリのほかの19204件のうち86%よりスターが多い
  • このカテゴリのほかの19204件のうち56%より最近レジストリに公開
  • 基本チェックの結果が、このカテゴリのほかの19204件のうち100%と同じかそれ以上

レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。

よくある質問

Gaggiuino MCPは安全ですか?

当てはまる基本チェック2項目のうち2項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。

どんなキーやコードが必要ですか?

入力が必要なもの:MCP_OAUTH_SECRET, MCP_OAUTH_PASSPHRASE_HASH

パソコンで動きますか、それともクラウドですか?

あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。

今もメンテナンスされていますか?

GitHubリポジトリの最終更新は3 日前、最新バージョン(6.0.0)がレジストリに届いたのは37 日前です。

どのアプリで使えますか?

Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにDockerも必要です。

代わりに使えるものは?

同じカテゴリには:World Monitor, Claude Flow, Tldraw

代わりの候補

同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。

カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i

World Monitor

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

作者:koala73広く使われている★ 9万6 日前更新

クラウドで動く✓ worldmonitor.app

Claude Flow

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

作者:ruvnet広く使われている↓ 1.4万/週★ 8.1万14 か月前更新

パソコンで動く

Tldraw

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

作者:tldraw広く使われている★ 5.1万8 か月前更新

クラウドで動く

作者のREADME

READMEを開く

作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。

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

冒頭だけを表示しています。続きはリポジトリで読めます