{
  "slug": "io-github-ljcl-gaggiuino-mcp",
  "name": "io.github.ljcl/gaggiuino-mcp",
  "title": "gaggiuino-mcp",
  "description": "Remote MCP server for your Gaggiuino espresso machine's shots and profiles",
  "version": "6.0.0",
  "publishedAt": "2026-10-05T09:09:37.319858Z",
  "updatedAt": "2026-10-05T09:09:37.319858Z",
  "repoUrl": "https://github.com/ljcl/gaggiuino-mcp",
  "websiteUrl": "https://github.com/ljcl/gaggiuino-mcp#readme",
  "namespace": {
    "type": "github",
    "owner": "ljcl"
  },
  "kind": "local",
  "packages": [
    {
      "registryType": "oci",
      "identifier": "ghcr.io/ljcl/gaggiuino-mcp:6.0.0",
      "version": null,
      "transport": "streamable-http",
      "runtimeHint": "docker"
    }
  ],
  "remotes": [],
  "envVars": [
    {
      "name": "GAGGIUINO_URL",
      "isSecret": false,
      "isRequired": false,
      "description": "Gaggiuino machine URL (default http://gaggiuino.local)"
    },
    {
      "name": "PORT",
      "isSecret": false,
      "isRequired": false,
      "description": "Server port (default 8000)"
    },
    {
      "name": "HOST",
      "isSecret": false,
      "isRequired": false,
      "description": "Bind address (default 0.0.0.0)"
    },
    {
      "name": "MCP_PUBLIC_URL",
      "isSecret": false,
      "isRequired": false,
      "description": "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 URL entered in the client exactly"
    },
    {
      "name": "MCP_OAUTH_SECRET",
      "isSecret": true,
      "isRequired": false,
      "description": "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"
    },
    {
      "name": "MCP_OAUTH_PASSPHRASE_HASH",
      "isSecret": true,
      "isRequired": false,
      "description": "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 passphrase itself"
    },
    {
      "name": "MCP_OAUTH_ISSUER",
      "isSecret": false,
      "isRequired": false,
      "description": "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_OAUTH_SECRET or MCP_OAUTH_PASSPHRASE_HASH"
    },
    {
      "name": "MCP_ALLOWED_ORIGINS",
      "isSecret": false,
      "isRequired": false,
      "description": "Comma-separated browser origins allowed to call /mcp, or * to allow any (unsafe). Requests with no Origin header are unaffected"
    },
    {
      "name": "MCP_ALLOWED_HOSTS",
      "isSecret": false,
      "isRequired": false,
      "description": "Comma-separated Host header values to accept on /mcp. Empty disables host validation"
    },
    {
      "name": "LOG_LEVEL",
      "isSecret": false,
      "isRequired": false,
      "description": "Log verbosity: debug, info, warn, error, or silent (default info). Logs are one JSON object per line on stderr"
    }
  ],
  "category": "other",
  "subcategory": "more",
  "company": "",
  "categoryAuto": true,
  "checks": [
    {
      "id": "source-linked",
      "label": "Source repository linked",
      "result": "pass",
      "detail": "https://github.com/ljcl/gaggiuino-mcp"
    },
    {
      "id": "version-pinned",
      "label": "Version pinned",
      "result": "pass",
      "detail": "Every package has an explicit version"
    },
    {
      "id": "secrets-requested",
      "label": "Secrets requested",
      "result": "info",
      "detail": "Asks for 2 secrets: MCP_OAUTH_SECRET, MCP_OAUTH_PASSPHRASE_HASH"
    },
    {
      "id": "known-registry",
      "label": "Known package registry",
      "result": "pass",
      "detail": "All packages come from npm, PyPI, OCI, NuGet or MCPB"
    },
    {
      "id": "namespace",
      "label": "Namespace ownership",
      "result": "info",
      "detail": "Name verified via GitHub account ljcl"
    },
    {
      "id": "meta-text",
      "label": "Registry text aimed at the AI",
      "result": "pass",
      "detail": "Description and settings contain no hidden characters or instructions to the AI"
    },
    {
      "id": "code-flags",
      "label": "Code red flags",
      "result": "info",
      "detail": "oci packages are not read yet"
    }
  ],
  "scannedAt": "2026-10-29",
  "level": "Scanned",
  "install": [
    {
      "label": "Claude Desktop (oci)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"gaggiuino-mcp\": {\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\",\n        \"-i\",\n        \"--rm\",\n        \"ghcr.io/ljcl/gaggiuino-mcp:6.0.0\"\n      ]\n    }\n  }\n}"
    }
  ],
  "curated": true,
  "stars": 1,
  "archived": false,
  "pushedAt": "2026-10-25T22:18:09Z",
  "health": {
    "score": 57,
    "parts": {
      "popularity": 0.06998985735858865,
      "activity": 1,
      "issues": 0.6242774566473989,
      "security": 1
    },
    "fail": 0,
    "warn": 0,
    "raw": {
      "stars": 1,
      "forks": 0,
      "downloads": null,
      "hn": null,
      "issuesOpen": 65,
      "issuesClosed": 108,
      "prsMerged": 109,
      "commits90": 69,
      "release": "2026-10-05T09:07:03Z",
      "pushed": "2026-10-25T22:18:09Z",
      "growth": null,
      "growthDays": null,
      "archived": false
    },
    "at": "2026-10-31T07:35:52.424Z"
  }
}
