Kaiord

io.github.pablo-albaladejo由 GitHub 帳號 pablo-albaladejo 發布v10.5.0更新於 Oct 30, 2026

Convert, validate, and inspect workout files (FIT, TCX, ZWO, Garmin Connect) for AI agents.

已驗證Streamable HTTP可網頁執行位置與生活檔案與儲存資料與分析

概覽

AI 產生的概覽

Kaiord 透過統一的 JSON 格式轉換、驗證、檢視與比對健身訓練檔案(FIT、TCX、ZWO、GCN、KRD),可作為遠端端點或本機 npm 伺服器執行。

可以做什麼
  • 列出支援的健身資料格式,並在撰寫文件前讀取 KRD 格式規格
  • 在 FIT、TCX、ZWO、GCN 與 KRD 之間轉換,FIT 輸出以 base64 文字回傳
  • 依 schema 驗證 KRD JSON,並對 FIT 到 KRD 再到 FIT 的往返轉換做容差檢查
  • 檢視健身檔案並給出可讀摘要、以 JSON 擷取其中的結構化訓練,以及比較兩個檔案的差異
適用情境
適合需要處理自行車、跑步或游泳訓練檔案的場合:在碼錶與訓練軟體格式之間轉換、檢查產生的訓練是否合法,或比對同一訓練的兩個版本。
執行需求
可使用 kaiord.com 的遠端端點,或透過 stdio 執行本機 npm 套件 @kaiord/mcp(需要 Node.js)。未宣告帳號、API 金鑰或環境變數。內容以內嵌方式傳入,FIT 需為 base64。
安裝前請注意
僅接受結構化訓練;在遠端端點上,ZWO 輸入只做格式良好性檢查,不依 XSD 驗證。FIT 輸出為 base64 文字,大檔案不便處理。FIT 轉換器尚未實作 training_peaks_tss 時長類型。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Kaiord,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.pablo-albaladejo%2Fkaiord/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "kaiord": {
      "type": "http",
      "url": "https://kaiord.com/mcp"
    }
  }
}

README

Kaiord — Open-Source Health & Fitness Data Framework

kaiord.com | Editor | npm

[License: MIT] [TypeScript]

[CI] [codecov] [npm version] [npm version] [MCP Registry] [Glama MCP server] [Sponsor]

Kaiord is an open-source framework for creating, converting, and managing health & fitness data.

It provides:

  • @kaiord/core: a TypeScript library with format adapters for .fit, .tcx, .zwo, and .krd (Kaiord) files, plus Garmin Connect API integration.
  • @kaiord/cli: a command-line tool to convert, validate, and compare files across formats.
  • @kaiord/mcp: an MCP server exposing Kaiord tools to AI agents (Claude Desktop, Claude Code, etc.). Published in the official MCP registry as io.github.pablo-albaladejo/kaiord.
  • Workout Editor: a web application to create and edit workout files visually.

✨ Features

  • Visual Workout Editor - Create and edit workouts in your browser
  • Unified JSON-based format .krd (Kaiord Representation Definition)
  • Schema validation (Zod)
  • Round-trip safe conversions between FIT / TCX / ZWO / GCN / KRD
  • Hexagonal architecture & fully typed API

Supported FIT Fields

Workout Metadata
  • Sub-sport categorization: Detailed sport types (trail running, indoor cycling, lap swimming, etc.)
  • Pool dimensions: Pool length and unit for swimming workouts
Workout Steps
  • Coaching notes: Instructional text for each step (max 256 characters)
  • Swimming equipment: Fins, kickboard, paddles, pull buoy, snorkel
Duration Types
  • Time & distance: Standard interval durations
  • Calorie-based: Steps ending after burning specified calories
  • Power-based: Steps ending based on power thresholds (watts)
  • Heart rate conditionals: Steps ending based on HR thresholds (bpm)
  • Repeat conditionals: Repeat blocks until time/distance/calories/HR/power targets reached

Known Limitations

  • Training Stress Score (TSS): The training_peaks_tss duration type is not yet implemented in the FIT converter. This is a TrainingPeaks-specific metric that requires additional mapping logic. Contributions welcome!

🔒 Local-first architecture

Kaiord is local-first: your data lives on your device, because there is no Kaiord server to send it to. There are no accounts and no backend.

  • Storage is your browser's IndexedDB. The Workout Editor persists every workout, template, profile, and setting in a local Dexie.js / IndexedDB database (new KaiordDatabase() in dexie-database.ts), and the UI reads it reactively through useLiveQuery. Nothing is written to a remote database — see the "Persisted data → Dexie" rule in State Management.
  • Conversions run entirely on your machine. FIT / TCX / ZWO / GCN ↔ KRD conversion happens in-process — client-side in the editor (import-workout-formats.ts, export-workout-formats.ts) or locally in the @kaiord/cli. Files never leave your device to be converted.
  • Sync is opt-in and goes to your cloud. Data leaves the device only if you connect Google Drive. The cloud-sync adapter uses the Google Identity Services drive.appdata scope, so synced data lands in your own Drive's app folder; the access token lives only in memory for the session and is never persisted by Kaiord.
  • Integrations use your logged-in session — no credential proxy. Garmin, WHOOP, and Train2Go connect through browser-extension "bridges" (garmin-bridge, whoop-bridge, train2go-bridge) that piggyback on your existing browser session. Per openspec/specs/adapter-contracts/spec.md, a bridge "SHALL NOT store, transmit, or manage user credentials"; authentication is "delegated entirely to the browser's cookie jar." No third-party server proxies your credentials or your data.
  • Works offline. Because all logic and storage are client-side, the editor keeps working with no network connection once loaded.

📚 Documentation

Comprehensive documentation is available in the /docs directory:

  • Getting Started - Installation, basic usage, and quick examples for both library and CLI
  • Architecture - Hexagonal architecture, ports & adapters pattern, and design principles
  • Testing - Testing strategy, TDD workflow, and coverage requirements
  • Deployment - CI/CD pipeline, GitHub Pages deployment, and npm publishing
  • Contributing - Contribution guidelines, development workflow, and code standards
  • KRD Format - Complete specification of the Kaiord Representation Definition format
  • AI Agents - Guidance for AI-assisted development

🧩 Tech Stack

LayerTooling
CoreTypeScript, tsdown, Zod
CLIyargs
Web AppReact, Zustand, Tailwind, Radix UI
TestingVitest, Playwright
Package managerpnpm

🏗 Monorepo Layout

kaiord/├─ packages/│  ├─ core/                → domain types, schemas, ports & use cases│  ├─ fit/                 → Garmin FIT format adapter│  ├─ tcx/                 → Training Center XML adapter│  ├─ zwo/                 → Zwift ZWO format adapter│  ├─ garmin/              → Garmin Connect API adapter│  ├─ cli/                 → command-line interface│  ├─ mcp/                 → MCP server for AI/LLM integration│  └─ workout-spa-editor/  → web application (https://kaiord.com/app/)├─ docs/   → documentation├─ LICENSE├─ README.md└─ pnpm-workspace.yaml

🚀 Quick Start

Try the Web App

Launch Workout Editor →

Create and edit workouts visually in your browser. No installation required.

Use the Library

bash
pnpm installpnpm -r buildpnpm -r test
# Example usagepnpm kaiord --help

For detailed installation instructions and usage examples, see the Getting Started Guide.


🚀 CI/CD Pipeline

Kaiord uses GitHub Actions for continuous integration and deployment:

  • Automated Testing: Multi-version testing on Node.js 22.x (Maintenance LTS) and 24.x (Active LTS)
  • Code Quality: ESLint, Prettier, and TypeScript strict mode validation
  • Release Automation: Changesets for version management and npm publishing
  • Security: Weekly dependency vulnerability audits, CodeQL static analysis, and automated dependency updates

For complete CI/CD documentation, deployment guides, and npm publishing instructions, see Deployment.

Mechanical invariant guards

Beyond linting, the repo enforces its architecture and conventions with 60+ purpose-built guard scripts under scripts/, each with its own co-located test suite. They run on every commit (husky pre-commit) and in CI (pnpm test:scripts), and cover, among others:

  • Hexagonal architecture — layer purity, adapter isolation, and the packages/core/src/ directory allowlist (check-architecture.mjs)
  • Package dependency graph — every @kaiord/* dependency must match the spec table (check-package-deps.mjs)
  • Test conventions — should -prefixed titles and Arrange/Act/Assert structure on every test (check-test-title-should.mjs, check-test-aaa.mjs)
  • Privacy — no runtime values interpolated into toasts or console logs (check-no-pii-leakage.mjs)
  • State discipline — no Zustand store writes persistence directly (check-no-zustand-writethrough.mjs)
  • Spec hygiene — OpenSpec format, archive dates, and auto-generated indexes stay in sync (check-spec-format.mjs, check-archive-*.mjs)

If a rule matters here, a script enforces it — documentation describes the rules, but the guards are what make them true.

Contributing

To contribute to Kaiord:

  1. Fork and clone the repository
  2. Create a feature branch: git checkout -b feature/my-feature
  3. Make your changes following the code style guidelines
  4. Add a changeset: pnpm exec changeset (for version-worthy changes)
  5. Test locally: pnpm -r test and pnpm -r build
  6. Submit a PR: All checks must pass before merging

For detailed contribution guidelines, development workflow, and code standards, see Contributing.


📚 References & Resources

Format Specifications


❤️ Support

If you find Kaiord useful, consider supporting its development:

Your support helps maintain and improve Kaiord for the fitness community!

Built by Pablo Albaladejo


📜 License

MIT © 2025 Pablo Albaladejo See LICENSE for details.

來源:README.md,提交 9aa0caf

工具

8

kaiord_get_format_spec

Get the KRD format specification. Call this before creating or editing KRD documents.

無需輸入參數。

kaiord_list_formats

List all supported fitness data formats with capabilities

無需輸入參數。

kaiord_convert

Convert between fitness data formats (FIT, TCX, ZWO, GCN, KRD). FIT output is returned as base64 text unless output_file is given. On the remote endpoint, ZWO input is checked for well-formedness only, not against the XSD, and only structured workouts are accepted.

輸入參數ftpinput_formatinput_contentoutput_format必填

kaiord_validate

Validate a KRD JSON document against the schema On the remote endpoint, ZWO input is checked for well-formedness only, not against the XSD, and only structured workouts are accepted.

輸入參數input_content

kaiord_round_trip_validate

Validate round-trip FIT conversion (FIT → KRD → FIT) and report tolerance violations

輸入參數input_content

kaiord_inspect

Inspect a fitness file and return a human-readable summary

輸入參數input_formatinput_content

kaiord_extract_workout

Extract the structured workout from a fitness file as JSON

輸入參數input_formatinput_content

kaiord_diff

Compare two fitness files and show differences

輸入參數format1format2content1content2

版本歷史

3
  1. v10.5.0最新Oct 30, 2026
  2. v10.4.0Oct 29, 2026
  3. v10.0.0Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分