Prototyp · Vorschau: alle Server aus der offiziellen Registry, alle 30 Minuten synchronisiert. Bewertungen und Benutzerkonten folgen in einem späteren Schritt.
PopNx MCPMCP-Server für alle, die KI nutzen · in einfachen Worten erklärt

hybridlog

von ImgrundVersion 0.1.13i★ –iComputer oder Cloud
Name in der Registryio.github.Imgrund/hybridlog

Installieren

Überblick

Beschreibung vom Entwickler (englisches Original)

Reads your own Garmin mirror: readiness, training load, muscle freshness, and read-only SQL.

Die drei Säulen von PopNx MCP

Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.

Was du damit machen kannst

Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.

  • Verbindung: Computer oder Cloud
  • Transport: stdio, Streamable HTTP
  • Kategorie: Datenbanken & Datensätze
  • Das musst du eintragen: DATABASE_URL, APP_KEY

Installation

Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.

Bevor du installierst

  • Basischecks: 1 von 1 bestanden
  • Läuft auf dem Server des Entwicklers: Was du fragst, läuft über dessen Server.
  • Das trägst du selbst ein: DATABASE_URL, APP_KEY

Als geheim markierte Werte sind Schlüssel zu deinem Konto. Gib sie nie weiter und füge sie nie in einen Chat ein.

Du brauchst

Welche App nutzt du?

Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.

Funktioniert in Claude im Web, auf dem Desktop und auf dem Handy:

  1. Öffne Settings → Connectors
  2. Tippe auf Add custom connector
  3. Füge die Adresse unten ein und tippe auf Add
  4. Wenn eine Anmeldung verlangt wird, melde dich beim Dienst des Entwicklers an
SettingsConnectors1+ Add2https://…3
https://{hybridlog_host}/mcp/garmin

Die Adresse enthält {…}-Teile, die nur du kennst (etwa dein Konto), also kopier sie und trag die Werte ein.

Oder führ ihn auf deinem Computer aus

Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein

{
  "mcpServers": {
    "hybridlog": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "DATABASE_URL",
        "-e",
        "APP_KEY",
        "ghcr.io/imgrund/hybridlog:0.1.13",
        "php",
        "artisan",
        "mcp:start",
        "garmin"
      ],
      "env": {
        "DATABASE_URL": "your-value",
        "APP_KEY": "your-value"
      }
    }
  }
}

Führe das in deinem Terminal aus

claude mcp add --transport http hybridlog 'https://{hybridlog_host}/mcp/garmin'

Oder führ ihn auf deinem Computer aus

claude mcp add hybridlog --env DATABASE_URL=your-value --env APP_KEY=your-value -- docker run -i --rm -e DATABASE_URL -e APP_KEY ghcr.io/imgrund/hybridlog:0.1.13 php artisan mcp:start garmin

Trag die leeren Werte ein, bevor du ihn startest.

Die Adresse enthält {…}-Teile, die nur du kennst (etwa dein Konto), also kopier sie und trag die Werte ein.

Oder kopier die Einstellungen selbst

In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen

{
  "mcpServers": {
    "hybridlog": {
      "url": "https://{hybridlog_host}/mcp/garmin"
    }
  }
}

Oder führ ihn auf deinem Computer aus

In Cursor öffnen

Oder kopier die Einstellungen selbst

In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen

{
  "mcpServers": {
    "hybridlog": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "DATABASE_URL",
        "-e",
        "APP_KEY",
        "ghcr.io/imgrund/hybridlog:0.1.13",
        "php",
        "artisan",
        "mcp:start",
        "garmin"
      ],
      "env": {
        "DATABASE_URL": "your-value",
        "APP_KEY": "your-value"
      }
    }
  }
}

Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.

Die Adresse enthält {…}-Teile, die nur du kennst (etwa dein Konto), also kopier sie und trag die Werte ein.

Oder kopier die Einstellungen selbst

In .vscode/mcp.json in deinem Projekt einfügen

{
  "servers": {
    "hybridlog": {
      "type": "http",
      "url": "https://{hybridlog_host}/mcp/garmin"
    }
  }
}

Oder führ ihn auf deinem Computer aus

In VS Code öffnen

Oder kopier die Einstellungen selbst

In .vscode/mcp.json in deinem Projekt einfügen

{
  "servers": {
    "hybridlog": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "DATABASE_URL",
        "-e",
        "APP_KEY",
        "ghcr.io/imgrund/hybridlog:0.1.13",
        "php",
        "artisan",
        "mcp:start",
        "garmin"
      ],
      "env": {
        "DATABASE_URL": "your-value",
        "APP_KEY": "your-value"
      }
    }
  }
}

Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.

ChatGPT verbindet sich nur mit Servern im Internet:

  1. Öffne ChatGPT im Web → Settings → Connectors (Apps)
  2. Tippe auf Create oder Add (bei manchen Tarifen musst du zuerst Developer mode unter Advanced einschalten)
  3. Füge die Adresse unten ein, gib ihr einen Namen und speichere
  4. Wenn eine Anmeldung verlangt wird, melde dich beim Dienst des Entwicklers an
SettingsConnectors1+ Create2https://…3
https://{hybridlog_host}/mcp/garmin

Die Adresse enthält {…}-Teile, die nur du kennst (etwa dein Konto), also kopier sie und trag die Werte ein.

Menünamen können sich je nach Tarif und mit der Zeit leicht unterscheiden.

Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.

Werte, die du selbst einträgst

  • DATABASE_URL geheim erforderlich env
    PostgreSQL URL of the hybridlog database this server reads. The database is created and filled by a hybridlog installation, not by this image.
  • APP_KEY geheim erforderlich env
    APP_KEY of the same hybridlog installation, so the container can read what that installation encrypted.

Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.

Was er kann

Die Tool-Liste dieses Servers haben wir noch nicht gelesen; wir prüfen die Endpunkte reihum.

Basischecksi

Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 7. Nov. 2026

  • ✓ Bestanden

    Entwickler passt zum Repo

    Der Registry-Name wurde mit dem GitHub-Konto Imgrund bestätigt, dem das Repo gehört

  • … Noch nicht geprüft

    Wird noch gepflegt

    Dieses Repo haben wir noch nicht von GitHub gelesen

  • … Noch nicht geprüft

    Hat eine Lizenz

    Dieses Repo haben wir noch nicht von GitHub gelesen

  • – Nicht zutreffend

    Endpunkt antwortet

    Die Adresse braucht Werte aus deinem eigenen Konto, deshalb können wir sie nicht für dich prüfen

  • – Nicht zutreffend

    Anmeldung mit OAuth

    Die Adresse braucht Werte aus deinem eigenen Konto, deshalb können wir sie nicht für dich prüfen

  • … Noch nicht geprüft

    Keine versteckten Anweisungen in Tool-Beschreibungen

    Noch nicht geprüft; wir lesen die Tool-Liste, wenn wir den Endpunkt prüfen

Im Vergleich mit anderen in Datenbanken & Datensätzei

  • Mehr Sterne als 0 % der anderen 955 Server in dieser Kategorie
  • Neuer in der Registry veröffentlicht als 27 % der anderen 955 Server in dieser Kategorie
  • Basischecks gleich gut wie oder besser als bei 100 % der anderen 955 Server in dieser Kategorie

Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.

Häufige Fragen

Ist hybridlog sicher?

Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.

Welche Schlüssel oder Codes braucht er?

Das musst du eintragen: DATABASE_URL, APP_KEY

Läuft er auf meinem Computer oder in der Cloud?

Beides geht: Installiere ihn auf deinem Computer oder verbinde dich mit der Cloud-Version.

Wird er noch gepflegt?

Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.1.13) kam vor 2 Monaten in die Registry.

Welche Apps können ihn nutzen?

Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Er verbindet sich per URL, also funktionieren auch Apps, die Remote-MCP-Server akzeptieren, zum Beispiel ChatGPT im Entwicklermodus.

Was kann ich stattdessen nutzen?

In derselben Kategorie: Supabase, MongoDB MCP Server, Elasticsearch MCP Server

Alternativen

Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.

So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti

Supabase

von supabase

MCP server for interacting with the Supabase platform

Computer oder Cloud★ 2.993Apache-2.0Aktualisiert gestern
Installieren

MongoDB MCP Server

von mongodb-js

MongoDB Model Context Protocol Server

Läuft auf deinem Computer★ 1.157Apache-2.0Aktualisiert vor 3 Tagen
Installieren

README vom Entwickler

README öffnen

Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.

hybridlog

Self-hosted MCP server on your own Garmin data. It mirrors everything Garmin answers into a database you control, computes the models the watch does not (training load, muscle freshness, readiness in context), and hands all of it to a language model over stdio or HTTP, so the things Garmin cannot measure can be dictated into the chat instead of typed into a form. A dashboard comes with it: the body map, the training load, and the login the connector authenticates against. There is no hosted instance, and that is the point: it is a health record, and the model reads it through a role that can only read.

Running, lifting or both on the same day: the models do not care which. Sessions that alternate running with station work get a lap-by-lap breakdown of their own, which is the shape of a HYROX race.

There is a demo to walk through before installing anything: sign in as demo@example.com with the password demo-demo-demo. It runs on generated data and puts itself back every night.

Every number in these three is generated by fetcher/seed_demo.py. The interface is English and ships a German translation; it follows the browser language unless the profile says otherwise.

Read this before you rely on it. The fetcher talks to Garmin

Connect's *unofficial* web API. Garmin can change or close it without

notice. This project is not affiliated with or endorsed by Garmin.

Nothing it computes is a medical statement: readiness, HRV bands, load

ratios and the coach texts are training aids, not diagnoses. It is a

personal project published in the hope it is useful, with no promise of

support or a stable interface.

What it is

  • MCP server: thirteen tools and one prompt over laravel/mcp, in two transports. Local (stdio) for Claude Code and Claude Desktop, hosted (streamable HTTP with OAuth 2.1, PKCE and dynamic client registration) for claude.ai, ChatGPT, Mistral's Le Chat (renamed Vibe), LM Studio and anything else that speaks it.
  • Dashboard: Laravel + Alpine + Chart.js. It draws the body map and the training load, and it is also the login the connector authenticates against and the place where you set what the chat may see.
  • Fetcher: Python (fetcher/), pulls daily metrics and activities via python-garminconnect into one athlete's schema of a PostgreSQL database, which both of the above read through a connection that may only read it, and only that athlete's. Each answer is also kept whole beside the columns read out of it, so a field nobody has built a column for is still there to be asked about, and a day Garmin Connect no longer serves is still in the mirror.

What *no hosted instance* means in practice: the Garmin session sits in a schema of your own database that no reader role can reach, so the SQL a model writes cannot ask for it, and no operator but you holds it. Past Garmin itself, two optional things reach out at all: the weather, which takes a pair of coordinates you fill in yourself, and notifications, where the push service is woken by an empty POST and never carries what it was about.

The tools

Thirteen tools and one prompt. The right-hand column is the switch at /connect that gates each one; everything is on by default.

ToolWhat it answersNeeds
get-health-summary-toolthe current picture in one call: readiness, sleep, load, data freshnessRead health data
get-insights-toolthe app's own verdict per body system, with the recommendation and the early illness patternRead health data, Read body metrics
get-muscle-map-toolper-zone freshness, weekly volume per zone, what to train todayRead health data
get-training-load-toolCTL/ATL/TSB, the acute:chronic ratio, the weekly stimulus splitRead health data
get-strength-progress-toolweek by week per exercise category: reps, tonnage where it was recorded, top weights, what has not movedRead health data
get-race-splits-toolone session lap by lap: running vs. station work, pace per lap, how far the pace driftedRead health data
get-activity-detail-toolone session in depth: zone minutes and shares against the athlete's zone floors, laps, sets, the heart-rate curve, and how it compares with earlier sessions of its kindRead health data
describe-schema-toolthe mirror's tables and columns, so the model can write its own queryRead health data, Read body metrics
query-health-data-tooleverything else, as one read-only SELECT with a 500-row capRead health data, Read body metrics
refresh-data-toolsyncs today and yesterday from Garmin (the header button's job, narrowed to two days) and waits for itStart a fetch
log-symptom-toola strain mentioned in passing, as a marker on the body mapLog how you feel
delete-symptom-tooltakes one off again once it has healedLog how you feel
give-feedback-toola correction that becomes a standing guideline for the connectorProcess feedback
weekly-report (prompt)drives the Sunday review; the report is the conversation's answer and is stored nowhereRead health data

Most of them answer a question the app was built around. Two do not: describe-schema hands the model the mirror's own tables with the comments that say what each column means, and query-health-data runs the SELECT it writes from that. It is the difference between a set of reports and a database somebody can think in, and it is what makes keeping the raw answers worth the disk: a field nobody has promoted to a column is still one question away.

Reading is the whole of it, with one documented exception. Symptoms are the only thing the chat may write, and they go to the app's own schema, never into the Garmin mirror. Free-form SQL runs through app/Garmin/ReadOnlyGarminQuery: a single SELECT or WITH, a keyword blocklist, a read-only transaction, a row cap, on a connection switched into a role that holds SELECT on one athlete's schema and nothing else.

Quickstart (Docker, demo data, no Garmin account)

git clone https://github.com/Imgrund/hybridlog.git

cd hybridlog cp .env.example .env docker compose up -d

That brings up PostgreSQL, the dashboard, a queue worker and a scheduler. The published image covers amd64 and arm64, so the first start downloads rather than compiles. After a git pull, plain up -d keeps running the image it already has: the new code arrives only with --build.

Then fill the mirror with 120 days of plausible data, create the account you log in with, and open the dashboard:

docker compose exec app /opt/fetcher/bin/python fetcher/seed_demo.py

docker compose exec app php artisan app:create-user you@example.com --admin open http://localhost:8080

There is no sign-up page, on purpose: a login nobody can register at has no surface to attack. For anybody but yourself, hand over a link instead of a password:

docker compose exec app php artisan app:invite them@example.com --name="Them"

It prints a one-time link, good for seven days (--days), on which they set their own password. --admin marks the installation owner, who is the account the local stdio transport acts for. Every account keeps its own profile, permissions, symptom log, Garmin sign-in, notifications and mirror, and sees none of anybody else's.

DEMO_MODE=true turns an installation into a shop window instead: one shared account, everything that would reach out of it closed (the Garmin sign-in above all), and php artisan demo:reset putting it back nightly.

A shop window is also the one place worth counting visitors in, and UMAMI_SCRIPT_URL plus UMAMI_WEBSITE_ID render the script tag of an Umami instance you host yourself: page views without a cookie and without an identifier that follows anyone off the site. Both lines are needed, and with either empty, which is the default, nothing is rendered at all and no page requests a host but this one. It is not tied to DEMO_MODE, so a private installation stays free of outside scripts by simply leaving them alone.

Connect an AI

The server reads the same mirror the dashboard draws from, so a chat and the page never disagree. What the page cannot do is answer a question it was not built for: how this week stands against the one before, whether today is a rest day, what a niggle means for tomorrow.

[!IMPORTANT]

This hands a language model your health record. It reads through a role

that may only read, and only your own schema, but it reads all of it.

Which parts is yours to set at /connect, per switch, and the switches

take effect on the next tool call rather than the next reconnect.

One address, the same for every client:

https://<your-domain>/mcp/garmin

Claude, ChatGPT, Langdock, Le Chat and LM Studio all take it and run OAuth against the dashboard's own login, so no client ever sees a password and /connect can cut any of them off again. Claude Code and Claude Desktop can skip the deployment entirely and talk to the repository over stdio. docs/connect-ai.md has the steps per client.

Whichever way it connects, it gets the same thirteen tools and the same switches.

Things worth asking, once it is connected:

How did my training week compare with the one before?

Am I ready for a hard session, or do I need a rest day?

Which muscles are fresh, and what should I train today?

Where did my pace go in Saturday's race, and how much of the clock was

station work?

My left knee hurt on the box jumps.

Setup with your own Garmin account

Sign in under *Garmin* in the account menu, or at /connect/garmin: email, password, and the MFA code if Garmin asks for one. What is stored is an OAuth token pair, never the password. The sign-in runs on a queue worker, so one has to be up.

A first sign-in fills the mirror by itself: a ninety-day backfill on the queue, roughly a quarter of an hour, with the page filling in as the history lands. Ninety days is about the minimum for the models to say anything, since the HRV baseline needs three weeks of nights and the load ratios a rolling six weeks. From then on the scheduler fetches three times a day and the *Fetch from Garmin* button fetches on demand.

Every command works on one athlete (--tenant , the owner where left out). Details, backfills and the manual login are in docs/install.md; how to record so the data is worth reading is in docs/recording.md.

Documentation

  • docs/install.md: installing without Docker, deploying to a platform, backup.
  • docs/connect-ai.md: every client's steps, OAuth and discovery, running the MCP server on a public host.
  • docs/recording.md: recording rules, weather, notifications.

Architecture notes

-

Nur der Anfang wird gezeigt; den Rest findest du im Repo

PopNx fragen