PluginBench
MCP Server
Active
MIT

io.github.davidmosiah/google-health-mcp MCP Server

io.github.davidmosiah/google-health-mcp

Privacy-first MCP server for Google Health API v4 data—Fitbit, Pixel Watch, and partners—with local OAuth and zero token exposure.

What is the io.github.davidmosiah/google-health-mcp MCP server?

The Google Health MCP server is a local-first MCP connector that gives AI agents user-authorized access to Google Health API v4 data from Fitbit, Pixel Watch, and partner devices via OAuth. Tokens are stored locally and never transmitted; the server supports structured privacy modes, daily/weekly summaries, and read-only health data queries.

This MCP server bridges AI agents to Google Health API v4, enabling them to query health, sleep, activity, and heart-rate data from connected wearables. It prioritizes privacy by keeping OAuth tokens local, offering configurable data redaction modes (structured, summary, raw), and providing tools for setup verification, data inventory, and privacy audits. Designed for Claude Desktop, Cursor, ChatGPT Desktop, and other MCP clients.

How to install io.github.davidmosiah/google-health-mcp

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
Environment / auth
  • GOOGLE_HEALTH_CLIENT_ID

    Google Cloud OAuth client ID for Google Health API. Optional when configured with google-health-mcp-server setup.

  • GOOGLE_HEALTH_CLIENT_SECRET
    secret

    Google Cloud OAuth client secret. Prefer google-health-mcp-server setup so this secret is stored in ~/.google-health-mcp/config.json instead of MCP client config.

  • GOOGLE_HEALTH_REDIRECT_URI

    Redirect URI configured in the Google Cloud OAuth client. Optional when configured with google-health-mcp-server setup.

  • GOOGLE_HEALTH_TOKEN_PATH

    Optional local path for OAuth tokens. Defaults to ~/.google-health-mcp/tokens.json.

  • GOOGLE_HEALTH_PRIVACY_MODE

    Optional payload mode: summary, structured, or raw. Defaults to structured. raw means full Google Health API payloads, not continuous 24/7 raw sensor telemetry.

  • GOOGLE_HEALTH_CACHE

    Optional SQLite cache toggle. Set to true or sqlite to enable.

  • GOOGLE_HEALTH_CACHE_PATH

    Optional local SQLite cache path. Defaults to ~/.google-health-mcp/cache.sqlite.

  • GOOGLE_HEALTH_NO_CACHE

    Set to true to bypass the in-memory HTTP response cache (60s TTL for GET only). POST/PUT/DELETE and 4xx/5xx responses are never cached regardless.

~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "google-health-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "google-health-mcp-unofficial"
      ],
      "env": {
        "GOOGLE_HEALTH_CLIENT_ID": "<YOUR_GOOGLE_HEALTH_CLIENT_ID>",
        "GOOGLE_HEALTH_CLIENT_SECRET": "<YOUR_GOOGLE_HEALTH_CLIENT_SECRET>",
        "GOOGLE_HEALTH_REDIRECT_URI": "<YOUR_GOOGLE_HEALTH_REDIRECT_URI>",
        "GOOGLE_HEALTH_TOKEN_PATH": "<YOUR_GOOGLE_HEALTH_TOKEN_PATH>",
        "GOOGLE_HEALTH_PRIVACY_MODE": "<YOUR_GOOGLE_HEALTH_PRIVACY_MODE>",
        "GOOGLE_HEALTH_CACHE": "<YOUR_GOOGLE_HEALTH_CACHE>",
        "GOOGLE_HEALTH_CACHE_PATH": "<YOUR_GOOGLE_HEALTH_CACHE_PATH>",
        "GOOGLE_HEALTH_NO_CACHE": "<YOUR_GOOGLE_HEALTH_NO_CACHE>"
      }
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • google_health_connection_status — Check local config, token, scope and client readiness.
  • google_health_data_inventory — List supported domains, scopes, data type naming and agent flow.
  • google_health_data_type_coverage — Static coverage plan or explicit live read-only validation.
  • google_health_daily_summary — Daily summary from rollups and reconciled streams.
  • google_health_weekly_summary — Weekly review of health data.
  • google_health_privacy_audit — Audit what is stored locally and what is sent to Google.

Use cases

  • Query daily and weekly health summaries from Fitbit or Pixel Watch without exposing tokens to prompts.
  • Verify OAuth setup and data scope authorization before running agent workflows.
  • Audit local privacy settings and confirm location redaction is working as expected.
  • Retrieve activity, sleep, and heart-rate data for health-trend analysis by an AI agent.
  • Validate Google Health API v4 connectivity and data availability in a local environment.

io.github.davidmosiah/google-health-mcp MCP server FAQ

What is the Google Health MCP server?

It is a local-first MCP connector that gives AI agents read-only access to Google Health API v4 data (Fitbit, Pixel Watch, etc.) via user-authorized OAuth, with tokens stored locally and never exposed to the agent or cloud.

Is it free?

Yes. The server is open-source (MIT license) and free to use. You need a Google Cloud project with OAuth credentials and the Google Health API enabled.

How do I install it in Claude Desktop or Cursor?

Install via npm: `npx -y google-health-mcp-unofficial setup`, then authenticate with `npx -y google-health-mcp-unofficial auth`. Add the server to your Claude Desktop or Cursor config pointing to the installed binary. See the README for full integration steps.

What authentication is required?

You must create a Google Cloud OAuth client, enable the Google Health API, and set the redirect URI to `http://127.0.0.1:3000/callback`. The server then handles local OAuth flow; tokens are stored at `~/.google-health-mcp/tokens.json` with restricted permissions.

Does it send my health data to external servers?

No. Tokens and data stay on your machine. The server only contacts Google Health API v4 when you explicitly call a tool, and it redacts location, identity, and secret keys by default in structured mode.

What privacy modes are available?

Three modes: `structured` (default, redacts location and identity), `summary` (structured + numeric flattening), and `raw` (unfiltered upstream payload, requires explicit user intent). You can audit what is redacted with `google_health_privacy_audit`.

README (reference)

Source of truth, from the repository.

<!-- delx-wellness header v2 --> <h1 align="center">Google Health MCP</h1> <div align="center"> <img src="assets/banner.png" alt="Google Health MCP — Google Health MCP for AI agents" width="85%" /> </div> <h3 align="center"> Read user-authorized Google Health API v4 data &mdash; Fitbit, Pixel Watch and partners &mdash; locally via OAuth. <strong>Beta</strong>.<br> Local-first MCP server &mdash; <strong>tokens never leave your machine</strong>. </h3> <p align="center"> <a href="https://www.npmjs.com/package/google-health-mcp-unofficial"><img src="https://img.shields.io/npm/v/google-health-mcp-unofficial?style=for-the-badge&labelColor=0F172A&color=10B981&logo=npm&logoColor=white" alt="npm version" /></a> <a href="https://github.com/davidmosiah/google-health-mcp/releases/latest"><img src="https://img.shields.io/github/v/release/davidmosiah/google-health-mcp?style=for-the-badge&labelColor=0F172A&color=2563EB&logo=github" alt="GitHub release" /></a> <a href="https://www.npmjs.com/package/google-health-mcp-unofficial"><img src="https://img.shields.io/npm/dm/google-health-mcp-unofficial?style=for-the-badge&labelColor=0F172A&color=0EA5A3&logo=npm&logoColor=white" alt="npm downloads" /></a> <a href="https://github.com/davidmosiah/google-health-mcp/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/davidmosiah/google-health-mcp/ci.yml?branch=main&style=for-the-badge&labelColor=0F172A&label=CI" alt="CI" /></a> <a href="LICENSE"><img src="https://img.shields.io/badge/LICENSE-MIT-22C55E?style=for-the-badge&labelColor=0F172A" alt="License MIT" /></a> <a href="https://wellness.delx.ai/connectors/google-health"><img src="https://img.shields.io/badge/SITE-wellness.delx.ai-0EA5A3?style=for-the-badge&labelColor=0F172A" alt="Site" /></a> </p> <p align="center"> <a href="https://github.com/davidmosiah/google-health-mcp/stargazers"><img src="https://img.shields.io/github/stars/davidmosiah/google-health-mcp?style=for-the-badge&labelColor=0F172A&color=FBBF24&logo=github" alt="GitHub stars" /></a> <a href="https://modelcontextprotocol.io"><img src="https://img.shields.io/badge/BUILT_FOR-MCP-7C3AED?style=for-the-badge&labelColor=0F172A" alt="Built for MCP" /></a> <a href="https://github.com/davidmosiah/delx-wellness/blob/main/docs/release-index.md"><img src="https://img.shields.io/badge/VERIFIED-release_index-0EA5A3?style=for-the-badge&labelColor=0F172A" alt="Verified release index" /></a> <a href="https://github.com/davidmosiah/delx-wellness-hermes"><img src="https://img.shields.io/badge/HERMES-one--command_setup-10B981?style=for-the-badge&labelColor=0F172A" alt="Hermes one-command setup" /></a> <a href="https://github.com/davidmosiah/delx-wellness"><img src="https://img.shields.io/badge/Google%20Health-4285F4?style=for-the-badge&labelColor=0F172A&logoColor=white" alt="Google Health" /></a> </p>

⚡ One-command install with Delx Wellness for Hermes: npx -y delx-wellness-hermes setup — preconfigures this connector and the other 8 in a dedicated Hermes profile.

Or wire it standalone into Claude Desktop / Cursor / ChatGPT Desktop — see the install section below.

What's new in 0.7.3 (2026-08-03): headless OAuth (auth --manual) for SSH / containers / WSL · real-account rollup/filter fixes from external testers · opt-in clinical scopes for ECG/IRN · pins live in Hermes/living-body. Full notes in CHANGELOG.md.

Highest-leverage contribution — real-account coverage

If you have Fitbit, Pixel Watch, Android health data or Google Health API v4 access, the most useful help is a redacted coverage report:

npx -y google-health-mcp-unofficial coverage --live --json

Review the output, remove anything you do not want public, then post the report on issue #2 (or a new issue). The timed proof loop on #21 closed 1/2 — see docs/proof-loop-status.md. The command is read-only and is designed to omit OAuth secrets, local paths and raw health measurements. A static preflight is available before OAuth with coverage --json.

Other ways to help (no account required)

ActionLink
Star if the project earned itstargazers
Docs GFI — headless auth walkthrough#22
Compose with other wearablesdelx-living-body
One-command Hermes packdelx-wellness-hermes
Full registrydelx-wellness

HTTP (v2 stateless)

Default is stdio. Optional Streamable HTTP — no session id, JSON responses, loopback only:

npx -y google-health-mcp-unofficial --http
# GET  http://127.0.0.1:3000/health
# POST http://127.0.0.1:3000/mcp   (sessionless)

Env: GOOGLE_HEALTH_MCP_HOST, GOOGLE_HEALTH_MCP_PORT, GOOGLE_HEALTH_MCP_TRANSPORT=http.

<!-- /delx-wellness header v2 -->

Google Health MCP

Local-first MCP server that gives your AI agent user-authorized Google Health API v4 data — Fitbit, Pixel Watch and partners — over OAuth.

  • Install one connector — npx -y google-health-mcp-unofficial setup
  • Run it in Claude · Cursor · ChatGPT · Hermes · OpenClaw — see the client examples.
  • Local-first — your tokens never leave your machine (privacy).
  • Which connector should I use? — see the front-door guide.

Beta status: Google Health API v4 is live for builders but still evolving. Google's release notes show scope and data-type changes continuing after launch, so this connector stays in early beta and points testers to safe read-only validation paths before public production use.

Unofficial project. Not affiliated with, endorsed by or supported by Google, Fitbit or Alphabet. Not a medical device. Not medical advice.

Why this exists

Google Health API is the successor to Fitbit Web API: new OAuth, new base URL, v4 endpoint schema, standardized data types, reconciled streams and rollups.

This MCP gives agents a clean way to discover the API, check setup, authenticate locally and query data without pasting tokens into prompts or agent configs.

Quickstart in 60 seconds

Create a Google Cloud OAuth client, enable the Google Health API, and add the redirect http://127.0.0.1:3000/callback. Then:

npx -y google-health-mcp-unofficial setup --scope-preset full   # writes local config
npx -y google-health-mcp-unofficial auth                        # OAuth, tokens saved locally
npx -y google-health-mcp-unofficial doctor                      # verifies you're ready

doctor --live calls safe Google Health identity/profile/settings endpoints after auth to prove the API is reachable — the connection proof for this beta. That does not prove Claude Desktop can invoke tools: Desktop validates outputSchema as JSON Schema 2020-12. Use google-health-mcp-unofficial@0.7.6+ (see #23). Full install details (scope presets, MFA, recovery) are in the Install section below.

Try it with your agent

Three things to ask first, based on tools this connector actually ships:

Use google_health_connection_status to check setup, then run
google_health_data_inventory. Tell me which Google Health domains
and scopes I have authorized.
Call google_health_daily_summary for today, then google_health_weekly_summary.
Separate observed data from suggestions and stay non-medical.
Run google_health_privacy_audit, then summarize exactly what is stored
locally and what would be sent to Google on the next call.

Tools

Start here:

  • google_health_connection_status — local config, token, scope and client readiness
  • google_health_data_inventory — supported domains, scopes, data type naming and agent flow
  • google_health_data_type_coverage — static coverage plan, or explicit live read-only validation for issue #21
  • google_health_daily_summary — daily beta summary from rollups and reconciled streams
  • google_health_weekly_summary — weekly beta review
  • google_health_privacy_audit — what is stored locally and what is sent to Google

The full tool catalog — Google Health API methods, agent manifest, diagnostics and data-type naming notes (kebab-case endpoints, snake_case filters, source families) — lives in docs/tools.md.

Privacy & what runs offline

  • OAuth tokens are stored locally at ~/.google-health-mcp/tokens.json with 0600 permissions.

  • Secrets can live in ~/.google-health-mcp/config.json or GOOGLE_HEALTH_* environment variables.

  • Tools never return access tokens, refresh tokens or client secrets.

  • GOOGLE_HEALTH_PRIVACY_MODE=structured is the default; raw mode is explicit and should be used only for debugging or deep analysis. An agent asking for privacy_mode=raw is refused unless it passes explicit_user_intent=true; setting GOOGLE_HEALTH_PRIVACY_MODE=raw yourself is your own call and needs no per-call intent.

  • Structured mode preserves complete upstream physiological fields and future v4 additions while removing identity, location and secret-bearing values.

  • "Location redaction" means a concrete key list, not a slogan. Coordinate-bearing leaf keys, always dropped in structured and summary (matched ignoring case, _ and -, so latitude_e7 and latitudeE7 are the same key):

    <!-- gps-redacted-keys:start -->

    startLatitude, startLongitude, start_latlng, endLatitude, endLongitude, end_latlng, latitude, longitude, lat, lon, lng, latlng, coordinates, coordinate, gps, gpx, geoPolylineDTO, map, polyline, summary_polyline, activities-tracker-gps, latitudeE7, longitudeE7, latE7, lngE7, lonE7, startLatitudeE7, startLongitudeE7, endLatitudeE7, endLongitudeE7, lat_deg, lng_deg, lon_deg, latitudeDegrees, longitudeDegrees

    <!-- gps-redacted-keys:end -->

    Location container keys, dropped as a whole object — with their address/city/placeId siblings and any coordinate spelling this list never anticipated — whenever they hold a place record (an object, or an array containing objects). A container holding only scalars is a label, not a place, and survives: location: ["gym", "home"] stays, location: { latitudeE7: … } does not.

    <!-- gps-redacted-containers:start -->

    location, locations, geoLocation, geoLocations, geo, geoJson, route, routes, position, positions, waypoint, waypoints, trackPoint, trackPoints, placeVisit

    <!-- gps-redacted-containers:end -->

    google_health_privacy_audit returns both live lists in gps_redacted_keys and gps_redacted_container_keys, and gps_redaction_default is measured at call time by pushing a synthetic record through both non-raw modes and scanning the output by key and by coordinate value — it is not a hardcoded true. npm run test:redaction-docs fails the build if these two blocks stop matching the code, so the published promise cannot drift from the enforcement list again. Google Health API v4 does not currently document a location/route data type, so this is a forward-compatible guard rather than a patch for an observed leak.

  • Limits of that promise, stated instead of implied. Every line below is proved by a behavioural test (npm run test:declared-limits) that fails if the behaviour changes; a line marked NOT VERIFIED is a statement no test backs, labelled instead of left to read as a guarantee. A limit written here without a test fails the build:

    <!-- declared-limits:start -->
    • default_mode_is_structured — with no privacy_mode argument and no GOOGLE_HEALTH_PRIVACY_MODE, every read runs in structured.
    • raw_requires_explicit_user_intent — an agent asking for privacy_mode=raw is refused with USER_ACTION_REQUIRED unless it also passes explicit_user_intent=true.
    • local_raw_default_needs_no_per_call_intent — GOOGLE_HEALTH_PRIVACY_MODE=raw in your own config or environment is honoured on every call with no per-call intent; the gate is about agent escalation, not about the machine owner.
    • raw_is_an_unfiltered_passthrough — raw returns the upstream payload unchanged; redaction is a property of structured and summary, never of raw.
    • structured_drops_identity_and_secret_keys — tokens, authorization, e-mail, names and avatars are dropped at any depth in structured, while physiology and provenance survive.
    • summary_is_never_less_restrictive_than_structured — summary strips first and summarizes after, so nothing structured drops can reappear in summary.
    • summary_flattens_numeric_leaves_to_depth_2 — summary promotes numeric leaves down to depth 2 of the data-type payload into value; anything deeper is not reported at all.
    • summary_promotes_unlisted_coordinate_keys — a coordinate key outside the lists above is promoted by summary, not hidden. The key list is the boundary, not the mode.
    • altitude_and_elevation_are_not_location — altitude is an official v4 data type (activity_and_fitness) and survives redaction, as does elevation; an altitude alone does not localize a user.
    • altitude_inside_a_place_container_is_dropped — the same altitude inside a redacted location container dies with the container.
    • location_guard_never_observed_upstream — NOT VERIFIED: Google Health API v4 documents no location/route data type, so no test here has ever seen a real Google payload carrying coordinates. The key list is a forward-compatible guard derived from Google's own encodings, not a measured fix for an observed leak.
    <!-- declared-limits:end -->
  • Daily rollups use validated civil YYYY-MM-DD ranges; general rollups preserve exact timezone-aware ISO date-times. Invalid or reversed ranges fail before HTTP.

  • support --redacted prints a copy-paste support bundle for GitHub issues without tokens, secrets, local paths or health measurements.

  • support --feedback --json prints an anonymous setup-feedback bundle for beta testers and MCP client reports.

  • coverage --live --json prints only redacted data-type status and point-count buckets; it never includes raw Google Health payloads.

Authorization model & trust boundary

Google OAuth controls which Google account and health scopes this connector can access. It does not authorize individual MCP callers or tools. The intended deployment is one local user running one trusted MCP host; callers that can reach the same process share its tool catalog and local OAuth grant.

There is currently no per-user, per-agent, API-key or per-tool RBAC layer. The optional HTTP transport binds to 127.0.0.1 by default and must not be exposed publicly without standards-compliant MCP authentication, isolated per-user Google credentials and an explicit authorization policy. See the full authorization model.

See the full agent demo →

Want to see an agent actually reason over this connector alongside the rest of the stack? The shared, reproducible demo answers the anchor question "Should I train hard today?":

npx -y delx-living-body demo

delx-living-body composes whatever connectors it detects locally with rule-based (offline) synthesis — readiness-first and non-medical. For this connector specifically, npx -y google-health-mcp-unofficial doctor --live is the local proof that your Google Health auth is wired correctly.

Beta Testers Wanted

The highest-leverage contribution right now is real setup feedback from Fitbit, Pixel Watch, Android and Google Health API v4 users.

If you can test with a real account:

  • Run npx -y google-health-mcp-unofficial doctor and confirm the OAuth flow is clear.
  • Run npx -y google-health-mcp-unofficial support --feedback --json and paste the anonymous bundle into issue #4.
  • Run npx -y google-health-mcp-unofficial coverage --json for the static coverage plan.
  • After OAuth, run npx -y google-health-mcp-unofficial coverage --live --json and paste the reviewed, redacted report into issue #2.
  • Try google_health_connection_status, google_health_data_inventory and google_health_daily_summary from your MCP client.
  • Open an issue for missing data types, confusing setup steps, client-specific friction or privacy concerns.
  • Do not paste OAuth tokens, client secrets, local paths or personal health measurements into public issues.

Useful links:

Install

Create a Google Cloud OAuth client, enable the Google Health API, and add the local redirect:

http://127.0.0.1:3000/callback

Then run:

npx -y google-health-mcp-unofficial setup --scope-preset full
npx -y google-health-mcp-unofficial auth
npx -y google-health-mcp-unofficial doctor

Headless hosts (servers, SSH, containers, WSL)

auth normally opens a browser and catches the redirect on 127.0.0.1. On a host with no browser that cannot work. When it detects a headless host — SSH, or no DISPLAY / WAYLAND_DISPLAY — it switches to pasting the redirect back in:

npx -y google-health-mcp-unofficial auth --manual

Non-interactive provisioning:

npx -y google-health-mcp-unofficial auth --print-url
npx -y google-health-mcp-unofficial auth --code "http://127.0.0.1:3000/callback?code=..."

See docs/oauth.md for --local-callback, SSH tunnel notes, and GOOGLE_HEALTH_HEADLESS.

Scope presets keep OAuth consent easier to reason about — basic, activity, sleep and full. The full preset list, the exact read-only scope URLs and the OAuth endpoints live in docs/oauth.md.

If setup gets stuck:

npx -y google-health-mcp-unofficial doctor --fix       # repairs local config/token permissions (chmod 600 where supported)
npx -y google-health-mcp-unofficial doctor --live      # calls safe identity/profile/settings endpoints to prove the API is reachable
npx -y google-health-mcp-unofficial coverage --live --json # redacted read-only data-type coverage for issue #21
npx -y google-health-mcp-unofficial support --redacted # copy-paste support bundle, no tokens/secrets/measurements
npx -y google-health-mcp-unofficial support --feedback --json # anonymous setup feedback for issue #4

Standalone MCP config:

{
  "mcpServers": {
    "google_health": {
      "command": "npx",
      "args": ["-y", "google-health-mcp-unofficial"]
    }
  }
}

Hermes

npx -y google-health-mcp-unofficial setup --client hermes --no-auth
npx -y google-health-mcp-unofficial auth
npx -y google-health-mcp-unofficial doctor --client hermes --fix
npx -y google-health-mcp-unofficial doctor --client hermes --live
hermes mcp test google_health

After config changes, use /reload-mcp or hermes mcp test google_health. Do not restart the gateway for normal data access.

Development

git clone https://github.com/davidmosiah/google-health-mcp.git
cd google-health-mcp
npm install
npm test

Links

<!-- delx-wellness see-also -->

See also

The full Delx Wellness connector library:

ProviderPackageRepo
WHOOPwhoop-mcp-unofficialwhoop-mcp
Ouraoura-mcp-unofficialouramcp
Garmingarmin-mcp-unofficialgarmin-mcp
Stravastrava-mcp-unofficialstrava-mcp
Fitbitfitbit-mcp-unofficialfitbitmcp
Withingswithings-mcp-unofficialwithingsmcp
Apple Healthapple-health-mcp-unofficialapple-health-mcp
Polarpolar-mcp-unofficialpolarmcp
Nourish (nutrition)wellness-nourishwellness-nourish

One-command setup for Hermes — preconfigures every connector above plus wellness skills + onboarding: delx-wellness-hermes.

<!-- /delx-wellness see-also -->

📧 Contact & Support

License

MIT - see LICENSE. Code of Conduct.

Agent-ready yardstick: mcp-scorecard — aim ≥90 on CI.

Skill or MCP

Same package, two doors. MCP registers tools on stdio/HTTP. The skill can drive the same tools through the CLI when the client has no MCP:

npx -y google-health-mcp-unofficial call google_health_connection_status --json '{}'

Copy skill/SKILL.md into your agent skills dir.

Related MCP servers

Agent-readiness scorecard for any MCP server: 10 checks, 0-100 score, actionable findings.

0
TypeScript
MIT
View repository →

Privacy-first, unofficial Oura MCP server for AI health, sleep, activity and heart-rate agents.

0
TypeScript
MIT
View repository →

Privacy-first unofficial Polar AccessLink v4 MCP server for AI health, sleep and training agents.

1
TypeScript
MIT
View repository →

Unofficial local-first MCP server for Samsung Health personal-data CSV/ZIP exports.

3
TypeScript
MIT
View repository →

Provider-neutral short-form AI video toolkit for agents: Sora, Gemini Veo, xAI/Grok, Seedance.

0
JavaScript
MIT
View repository →

Privacy-first MCP server for Strava activities, streams, routes and training.

1
TypeScript
MIT
View repository →