ต้นแบบ · รุ่นทดลอง: มีทุก server ในทะเบียนทางการ อัปเดตทุก 30 นาที รีวิวและบัญชีผู้ใช้จะมาในขั้นถัดไป
PopNx MCPที่รวม MCP สำหรับคนใช้ AI · อธิบายเป็นภาษาคน

Coach MCP

โดย snoozeliebรุ่น 1.4.0i★ –iรันบนเครื่อง
ชื่อใน registryio.github.snoozelieb/coach-mcp

ติดตั้ง

ภาพรวม

คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)

Adaptive AI training coach MCP server backed by Garmin Connect

สามเสาของ PopNx MCP

สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน

ใช้ทำอะไรได้

ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry

  • การเชื่อมต่อ: รันบนเครื่อง
  • ช่องทาง (transport): stdio
  • หมวด: อื่น ๆ
  • ต้องใส่ค่าเหล่านี้: GARMIN_EMAIL, GARMIN_PASSWORD

ติดตั้ง

เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง

ก่อนติดตั้ง

ค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต

ต้องเตรียมก่อน

  • PyPIติดตั้ง uv ของ Python (มีคำสั่ง uvx) ในเครื่อง

คุณใช้แอปไหน

เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”

เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json

{
  "mcpServers": {
    "coach": {
      "command": "uvx",
      "args": [
        "garmin-coach-mcp"
      ],
      "env": {
        "GARMIN_EMAIL": "ใส่ค่าของคุณ",
        "GARMIN_PASSWORD": "ใส่ค่าของคุณ",
        "COACH_DATA_DIR": "ใส่ค่าของคุณ"
      }
    }
  }
}

พิมพ์คำสั่งนี้ใน Terminal

claude mcp add coach --env GARMIN_EMAIL='ใส่ค่าของคุณ' --env GARMIN_PASSWORD='ใส่ค่าของคุณ' --env COACH_DATA_DIR='ใส่ค่าของคุณ' -- uvx garmin-coach-mcp

เติมค่าที่เว้นว่างไว้ก่อนรัน

เปิดใน Cursor

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json

{
  "mcpServers": {
    "coach": {
      "command": "uvx",
      "args": [
        "garmin-coach-mcp"
      ],
      "env": {
        "GARMIN_EMAIL": "ใส่ค่าของคุณ",
        "GARMIN_PASSWORD": "ใส่ค่าของคุณ",
        "COACH_DATA_DIR": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

เปิดใน VS Code

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .vscode/mcp.json ของโปรเจกต์

{
  "servers": {
    "coach": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "garmin-coach-mcp"
      ],
      "env": {
        "GARMIN_EMAIL": "ใส่ค่าของคุณ",
        "GARMIN_PASSWORD": "ใส่ค่าของคุณ",
        "COACH_DATA_DIR": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น

ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี

ค่าที่ต้องใส่เอง

  • GARMIN_EMAIL จำเป็น env
    Garmin Connect account email
  • GARMIN_PASSWORD ความลับ จำเป็น env
    Garmin Connect account password
  • COACH_DATA_DIR env
    Directory for athlete data files (defaults to the git-checkout data/ dir when run from a checkout, otherwise a per-user data directory)

ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README

ทำอะไรได้บ้าง

รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง

ผลตรวจเบื้องต้นi

เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 8 พ.ย. 2569

  • ✓ ผ่าน

    ตัวตนผู้ทำตรงกับ repo

    ชื่อใน registry ยืนยันด้วยบัญชี GitHub snoozelieb ซึ่งเป็นเจ้าของ repo

  • … ยังไม่ตรวจ

    ยังมีคนดูแล

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • … ยังไม่ตรวจ

    มีสัญญาอนุญาต (license)

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • – ไม่เกี่ยว

    endpoint ตอบ

    ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต

  • – ไม่เกี่ยว

    ล็อกอินแบบ OAuth

    ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน

  • … ยังไม่ตรวจ

    คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง

    รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต

เทียบกับตัวอื่นในหมวด อื่น ๆi

  • ดาวมากกว่า 0% ของอีก 18365 ตัวในหมวดนี้
  • ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 96% ของอีก 18365 ตัวในหมวดนี้
  • ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 18365 ตัวในหมวดนี้

เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo

คำถามที่พบบ่อย

Coach MCP ปลอดภัยไหม?

จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น

ต้องใช้กุญแจหรือรหัสอะไรบ้าง?

ต้องใส่ค่าเหล่านี้: GARMIN_EMAIL, GARMIN_PASSWORD

ตัวนี้รันบนเครื่องหรือบนคลาวด์?

รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)

ยังมีคนดูแลอยู่ไหม?

repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.4.0) เข้า registry เมื่อวาน

ใช้กับโปรแกรมไหนได้บ้าง?

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย

มีตัวไหนใช้แทนได้บ้าง?

ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Funooy Krillion Reference

ตัวที่ใช้แทนได้

server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว

อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi

Spec Driven Development

โดย formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

รันบนเครื่อง★ 440MITอัปเดต 14 เดือนที่ผ่านมา
ติดตั้ง

Remote Desktop Commander

โดย desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

รันบนคลาวด์★ 211อัปเดต เมื่อวานซืน
ติดตั้ง

Funooy Krillion Reference

โดย funooy.com

Funooy trivia references in six languages, with rules and fixed scoring. No daily spoilers.

รันบนคลาวด์อัปเดต วันนี้
ติดตั้ง

README จากผู้ทำ

เปิดอ่าน README

ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ

coach-mcp

An opinionated AI training coach as an MCP server. It pulls your real data from Garmin Connect and prescribes with authority — science-based load management (ACWR), code-enforced injury gates (the server rejects plans that violate an active injury restriction, no matter what the LLM says), and persistent coaching memory so decisions, rationale, and your adaptation patterns survive between conversations. It will tell you "no" when your enthusiasm exceeds your capacity.

All health data and credentials stay on your machine — see Security & Privacy.

Quickstart

You need Python 3.12+, a free Garmin Connect account, and an MCP client (Claude Code, Claude Desktop, or Cursor).

Option A: uvx (recommended)

No install step — your MCP client runs the server on demand:

uvx garmin-coach-mcp

Jump to Connect your MCP client and use uvx as the command.

Option B: from source
git clone https://github.com/snoozelieb/coach-mcp.git

cd coach-mcp

python -m venv .venv

Linux/macOS:

source .venv/bin/activate

Windows:

.venv\Scripts\activate

pip install -r requirements.txt cp .env.example .env # then edit: GARMIN_EMAIL, GARMIN_PASSWORD python server.py

Connect your MCP client

The server needs two environment variables: GARMIN_EMAIL and GARMIN_PASSWORD. Optional: COACH_DATA_DIR (where your coaching data lives); COACH_TOKEN_DIR, COACH_TRANSPORT and COACH_CODE_MODE are covered under Security & Privacy and Advanced. From a source checkout, a .env file works too.

After one successful login the server runs from the stored Garmin tokens (garmin-coach-login performs that login, MFA included), so a client that cannot expand variables in its config can leave GARMIN_PASSWORD out.

To run the server or the helpers from a terminal, set the two variables in that shell first. PowerShell and bash quote differently:

$env:GARMIN_EMAIL = "you@example.com"

$env:GARMIN_PASSWORD = "your-password"

export GARMIN_EMAIL=you@example.com GARMIN_PASSWORD=your-password
Claude Code
claude mcp add coach-mcp \

--env GARMIN_EMAIL=you@example.com \ --env GARMIN_PASSWORD=your_garmin_password \ -- uvx garmin-coach-mcp

Or in .mcp.json (Claude Code expands ${VAR} from your shell environment, so a committed file holds no secret):

{

"mcpServers": { "coach-mcp": { "command": "uvx", "args": ["garmin-coach-mcp"], "env": { "GARMIN_EMAIL": "you@example.com", "GARMIN_PASSWORD": "${GARMIN_PASSWORD}", "COACH_DATA_DIR": "/path/to/your/coach-data" } } } }

Running from source instead: claude mcp add coach-mcp -- python /full/path/to/coach-mcp/server.py

Claude Desktop

In claude_desktop_config.json (Settings → Developer → Edit Config):

{

"mcpServers": { "coach-mcp": { "command": "uvx", "args": ["garmin-coach-mcp"], "env": { "COACH_DATA_DIR": "/path/to/your/coach-data" } } } }

Claude Desktop reads this file as written (no variable expansion), so keep the Garmin password out of it: run garmin-coach-login once in a terminal with GARMIN_EMAIL and GARMIN_PASSWORD set for that command, and the server logs in from the stored tokens from then on. When they expire the tools say so; run the login again.

Cursor

In .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):

{

"mcpServers": { "coach-mcp": { "command": "uvx", "args": ["garmin-coach-mcp"], "env": { "GARMIN_EMAIL": "you@example.com", "GARMIN_PASSWORD": "${env:GARMIN_PASSWORD}", "COACH_DATA_DIR": "/path/to/your/coach-data" } } } }

If you installed with pip install garmin-coach-mcp instead of uvx, use "command": "garmin-coach-mcp" with no args in any of the blocks above.

First run

  1. Create your profile. Run the interactive wizard (installed copies have the console script; a source checkout can run the script):
   garmin-coach-setup                 # pip / uvx install

python scripts/setup_wizard.py # source checkout

Until a profile exists the server runs in setup mode: plan, program and push writes answer setup_required and name the data directory they looked in.

It creates your athlete profile, training config, and empty plan/memory files in the data directory. Alternatively, create the two required files by hand and let the coach fill in the rest via conversation:

   echo '{"personal":{"name":null},"injury_history":[],"life_constraints":{}}' > data/athlete.json

echo '{"events":[],"current_block":{"phase":"base"}}' > data/training_config.json

  1. Pull your Garmin baseline. In your MCP client, say:

"Run refresh_athlete_baseline and set up my training."

The coach pulls your name, weight, age, HR data, and training capacity from Garmin, then starts the onboarding conversation — goals, constraints, injury history, race calendar.

  1. Garmin MFA / expired session. Garmin logins are token-cached. If tools start returning AUTH_REQUIRED, recover with:
   garmin-coach-login                 # pip / uvx install

python scripts/garmin_login.py # source checkout

It does a fresh credential login, prompts for the MFA code if Garmin asks, and saves new tokens. Restart the MCP server afterwards.

How it works

  1. Snapshot first — every coaching conversation starts from get_coaching_snapshot(): current time context, 7-day week grid (rest days explicit), fitness metrics, plan adherence, open anomalies, injuries, sleep gate.
  2. Load hierarchy before prescribing — overall ACWR (injury gate, 0.8–1.3 sweet spot), then sport-specific ACWR (spike detection), then sport-specific CTL (race readiness).
  3. Hard gates are code, not vibes — update_weekly_plan and push_plan_to_garmin reject sessions that violate an active injury's restricted activities, and every non-rest session must carry a purpose or the save is refused. Multi-week programs (training_program) are rejected if their starting capacity contradicts your actual history.
  4. Grounded in what you've actually done — prescriptions are anchored to your demonstrated per-sport capacity from recent sessions, not template numbers; a weekly plan that outruns that history comes back with grounding_warnings.
  5. Curiosity with memory — planned-vs-actual anomalies (missed session, type mismatch, activity on a rest day) register once with a lifecycle (open → asked → resolved); the coach asks you what happened instead of silently assuming.
  6. Everything persists — decisions, approvals, adaptation patterns, and season lifecycle (race debriefs, phase transitions) live in local JSON and carry across sessions.

MCP surface

54 tools — you don't call them directly; the coach uses them during conversation:

CategoryTools
Coaching coreget_coaching_snapshot (canonical, sectioned), get_compliance_report, get_coaching_score
Planningget_weekly_plan, update_weekly_plan, preview_workout (render one session the way the watch will show it, or fetch the session contract), push_plan_to_garmin (preview with the step tree per session, then confirm), training_program (action=get/set; multi-week programs, capacity-anchored and injury-gated), get_week_constraints, get_weekly_prescription, get_periodization_status, update_phase
Garmin dataquery_metrics (kind=fitness/sport_history/intensity/daily/readiness/personal_records), get_activities_range
Athleteget_athlete, update_athlete, set_ftp, set_threshold_pace, analyze_ftp_test, refresh_athlete_baseline, refresh_fitness_history, backfill_history, get_onboarding_guide
Methodologyget_methodology, update_methodology
Racesraces (action=list/add/update/research), remove_race
Strengthsync_strength_session, get_strength_baseline, approve_progression, set_exercise_preference, generate_strength_workout, add_exercise
Injuriesdiagnose_injury, research_injury, update_injury_status
Researchresearch_exercise, list_exercises, research_sport
Memorylog_coaching_decision, get_active_decisions, update_decision_status, record_athlete_response, get_response_patterns, resolve_anomaly
Approvalspropose_coaching_action, list_pending_approvals, approve_proposal, reject_proposal
Weatherget_weather_outlook (wind, gusts, rain and daylight at the profile location — Open-Meteo, no key), set_location
Interactivegenerate_smart_brief, interactive_check_in

Every tool carries MCP annotations (read-only / destructive / idempotent / open-world), enforced by tests.

7 prompts: weekly_planning, morning_brief, injury_assessment, week_review, onboarding, race_program, author_session.

7 resources: coach://athlete/profile, coach://plan/current, coach://config/training, coach://coaching/decisions, coach://context/now, coach://coaching/doctrine (the long-form coaching doctrine), coach://authoring/contract (the generated session contract).

Security & Privacy

Everything stays on your machine:

  • Credentials: GARMIN_EMAIL/GARMIN_PASSWORD live in your MCP client config or a local .env. Garmin OAuth tokens are cached in a local token store (.garth/ in a source checkout, a per-user garmin-tokens directory for installed copies; override with COACH_TOKEN_DIR).
  • Health data: all coaching data (profile, plans, fitness history, sleep, coaching memory) is local JSON in your data directory. There is no backend, no telemetry, no analytics.
  • What leaves your machine: requests to Garmin's own API (your credentials/tokens, sent only to Garmin); whatever your MCP client sends to its LLM as part of the conversation; optional public web-page fetches when the coach researches a race, injury, or exercise. Nothing else: the FastMCP startup banner that would check PyPI for updates is disabled.
  • Network exposure: stdio by default, nothing listens. The HTTP transports need COACH_HTTP_TOKEN and validate Host/Origin on every request; research fetches go only to public https addresses, pinned to the address that passed the check.
  • Single athlete per data directory by design. For multiple athletes, run separate server instances with separate COACH_DATA_DIRs.

See SECURITY.md for details and how to report issues.

Data directory

Resolution order: COACH_DATA_DIR env var → data/ in a source checkout → a per-user data directory (created on first run for installed packages). The only file shipped with the package is methodology.json (safety rules, race templates, personas); everything personal is created locally and never committed.

Advanced

# HTTP transport instead of stdio: a bearer token is required (clients send

"Authorization: Bearer "); Host and Origin headers are checked on

every request. COACH_HTTP_INSECURE=1 waives the token on 127.0.0.1 only.

COACH_HTTP_TOKEN="$(python -c 'import secrets; print(secrets.token_urlsafe(32))')" COACH_TRANSPORT=http FASTMCP_PORT=8000 garmin-coach-mcp

Code Mode (search/execute meta-tools instead of 52 individual tools)

pip install fastmcp[code-mode] COACH_CODE_MODE=1 garmin-

ตัดมาแค่ช่วงต้น อ่านต่อใน repo

ถาม PopNx