プロトタイプ · プレビュー版:公式レジストリのすべてのサーバーを掲載し、30分ごとに同期しています。レビューとアカウント機能は今後のステップで始まります。
PopNx MCPAIを使う人のためのMCPサーバー · やさしい言葉で解説

hybridlog

作者:Imgrundバージョン 0.1.13i★ –iパソコンでもクラウドでも
レジストリ名io.github.Imgrund/hybridlog

インストール

概要

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

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

PopNx MCPの3つの柱

この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。

できること

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

  • 接続方法: パソコンでもクラウドでも
  • トランスポート: stdio, Streamable HTTP
  • カテゴリ: データベース・データセット
  • 入力が必要なもの:DATABASE_URL, APP_KEY

インストール

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

インストールの前に

「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。

必要なもの

どのアプリを使っていますか?

上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。

ウェブ、デスクトップ、モバイルのClaudeで使えます:

  1. Settings → Connectors を開く
  2. Add custom connector を押す
  3. 下のアドレスを貼り付けて Add を押す
  4. サインインを求められたら、作者のサービスにサインインする
SettingsConnectors1+ Add2https://…3
https://{hybridlog_host}/mcp/garmin

アドレスには、あなたしか知らない {…} の部分(アカウントなど)があるので、コピーして書き換えてください。

または、パソコンで動かす

Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます

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

ターミナルでこれを実行します

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

または、パソコンで動かす

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

動かす前に、空欄の値を入力してください。

アドレスには、あなたしか知らない {…} の部分(アカウントなど)があるので、コピーして書き換えてください。

または、設定を自分でコピーする

プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます

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

または、パソコンで動かす

Cursorで開く

または、設定を自分でコピーする

プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます

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

ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。

アドレスには、あなたしか知らない {…} の部分(アカウントなど)があるので、コピーして書き換えてください。

または、設定を自分でコピーする

プロジェクトの .vscode/mcp.json に貼り付けます

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

または、パソコンで動かす

VS Codeで開く

または、設定を自分でコピーする

プロジェクトの .vscode/mcp.json に貼り付けます

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

ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。

ChatGPTがつなげるのは、インターネット上のサーバーだけです:

  1. ウェブ版のChatGPTを開き → Settings → Connectors (Apps)
  2. Create または Add を押す(プランによっては、先に Advanced で Developer mode をオンにする必要があります)
  3. 下のアドレスを貼り付け、名前を付けて保存する
  4. サインインを求められたら、作者のサービスにサインインする
SettingsConnectors1+ Create2https://…3
https://{hybridlog_host}/mcp/garmin

アドレスには、あなたしか知らない {…} の部分(アカウントなど)があるので、コピーして書き換えてください。

メニューの名前は、プランや時期によって少し違うことがあります。

選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。

自分で入力する値

  • DATABASE_URL 秘密 必須 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 秘密 必須 env
    APP_KEY of the same hybridlog installation, so the container can read what that installation encrypted.

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

できること

このサーバーのツール一覧はまだ読み取っていません。エンドポイントは順番にチェックしています。

基本チェックi

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

  • ✓ 合格

    作者とリポジトリが一致

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

  • … 未チェック

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

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

  • … 未チェック

    ライセンスがある

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

  • – 対象外

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

    アドレスにあなた自身のアカウント情報が必要なため、代わりにチェックできません

  • – 対象外

    OAuthでサインイン

    アドレスにあなた自身のアカウント情報が必要なため、代わりにチェックできません

  • … 未チェック

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

    まだチェックしていません。エンドポイントをチェックするときにツール一覧を読み取ります

データベース・データセットのほかのサーバーとの比較i

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

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

よくある質問

hybridlogは安全ですか?

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

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

入力が必要なもの:DATABASE_URL, APP_KEY

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

どちらでも使えます。パソコンにインストールしても、クラウド版につないでもかまいません。

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

GitHubリポジトリの最終更新は–、最新バージョン(0.1.13)がレジストリに届いたのは2 か月前です。

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

Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。URLでつながるので、リモートMCPサーバーに対応したアプリ(開発者モードのChatGPTなど)でも使えます。

代わりに使えるものは?

同じカテゴリには:Supabase, MongoDB MCP Server, Elasticsearch MCP Server

代わりの候補

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

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

Supabase

作者:supabase

MCP server for interacting with the Supabase platform

パソコンでもクラウドでも★ 2,993Apache-2.0昨日更新
インストール

作者のREADME

READMEを開く

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

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

-

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

PopNxに聞く