Command Palette

Search for a command to run...

UnylyUnyly
Весь каталог

Life Hub

БесплатноНе проверен

Enables deployment of a remote MCP server on Cloudflare Workers without authentication, allowing connection to AI Playground or Claude Desktop.

GitHubEmbed

Описание

Enables deployment of a remote MCP server on Cloudflare Workers without authentication, allowing connection to AI Playground or Claude Desktop.

README

A personal remote MCP server (Cloudflare Worker) that lets Claude log and read structured life-tracking data — starting with nutrition — into an Obsidian vault.

You type a freeform meal in Claude ("3 eggs, oatmeal, a chicken breast, rice"); the model parses it and estimates macros, then calls a tool; the Worker writes one immutable event file to Cloudflare R2; Obsidian (via the Remotely Save plugin) pulls those files into a vault folder, where a Dataview dashboard summarizes them.

Nutrition is the first tracker; the design generalizes to future entry types (journal, workout, etc.) via a shared envelope + a typed body.

How it works

Claude app ──parse+estimate──▶ MCP tool ──▶ Worker ──write──▶ R2 (one file per meal)
                                                                  │
                                              Remotely Save ◀──sync┘
                                                    │
                                                    ▼
                                          Obsidian vault + Dataview dashboard

Storage model

  • One immutable event file per submission. Never a read-modify-write of a shared daily note.
  • Daily/weekly totals are derived at read time (and in the dashboard), never stored.
  • R2 key mirrors the vault subpath, keyed by logical date so "last 7 days" is a cheap prefix-list:
    Trackers/Nutrition/entries/2026-06-23/2026-06-23-190712.md
    
  • Filename stem {logical_date}-{HHMMSS} is the idempotency key. A ULID lives inside the file as a stable internal id.

Entry format

Each entry is markdown: a YAML frontmatter envelope (common to all types) + a typed body + a human-readable line.

---
id: 01J8XQ2K7E9...
type: nutrition-entry
date: 2026-06-23           # logical date (6am-Toronto rule)
logged_at: 2026-06-23T23:07:12Z
source: claude
meal: dinner
calories: 820             # derived from items
protein_g: 63
confidence: medium
input_text: "3 eggs, oatmeal, a chicken breast, rice"  # raw user text, kept for audit
items:
  - { name: eggs, qty: 3, calories: 210, protein_g: 18 }
  # ...
---

Dinner — 3 eggs, oatmeal, a chicken breast, rice

Logical-date rule

Timezone America/Toronto; a "day" runs 6:00am → 6:00am, so a meal logged at 12:30am belongs to the previous calendar date. Conversion goes through the IANA timezone (DST-aware), never a fixed offset. An explicit date passed by the user is used verbatim.

Tools

Tool Kind Purpose
log_meal write Log a meal as one nutrition entry; totals derived from per-unit macros × qty.
log_weight write Log a bodyweight measurement (weight_lbs, optional waist/body-fat/notes).
edit_meal write Correct a nutrition entry by its key; recomputes totals. date moves the entry.
edit_weight write Correct a bodyweight entry by its key. date moves the entry.
get_entries read Fetch entries in a date range as compact JSON. Omit type for all types; pass it to narrow.
delete_entry read Delete an entry by its key + type (delete carries no fields, so it stays generic).
get_daily_totals read Per-day nutrition macro rollups for trend questions.

Writes are typed (one log_X/edit_X per entry type, so each tool's schema shows exactly that type's fields); reads are generic over the shared envelope. New entry types are added as an adapter in src/registry.ts — see the Adapter interface (type, folder, tags, zod input shapes, toBody/applyEdit/bodyLine).

Stack

  • Cloudflare Workers + TypeScript
  • Cloudflare R2 (env.BUCKET) for storage
  • MCP over streamable HTTP, built on the agents SDK
  • GitHub OAuth via @cloudflare/workers-oauth-provider, gated to an allowlist of GitHub logins
  • Obsidian + Dataview for the dashboard (frontmatter properties, not inline fields)

Development

npm install          # installs deps and the lefthook pre-commit hook
npm run dev          # wrangler dev (local R2 via Miniflare)
npm run check        # lint + format check + type-check
npm run lint:fix     # apply lint fixes
npm run format       # apply formatting

Tools can be exercised locally against the /mcp endpoint with the MCP Inspector or any MCP client.

Deployment

Bindings (R2 bucket life-hub, KV namespace OAUTH_KV) are declared in wrangler.jsonc.

Secrets (set via npx wrangler secret put <NAME>):

  • GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET — from a GitHub OAuth App whose callback is https://<worker-url>/callback
  • COOKIE_ENCRYPTION_KEY — e.g. openssl rand -hex 32
npx wrangler deploy

Then add https://<worker-url>/mcp as a custom connector in Claude and authenticate via GitHub. Only GitHub logins in ALLOWED_USERNAMES (in src/index.ts) can use the tools.

from github.com/mkadiya20/life-hub-mcp

Установка Life Hub

У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.

▸ github.com/mkadiya20/life-hub-mcp

FAQ

Life Hub MCP бесплатный?

Да, Life Hub MCP бесплатный — установка в пару кликов через Unyly без оплаты.

Нужен ли API-ключ для Life Hub?

Нет, Life Hub работает без API-ключей и переменных окружения.

Life Hub — hosted или self-hosted?

Доступен hosted-вариант: Unyly запускает сервер в облаке, локальная установка не обязательна.

Как установить Life Hub в Claude Desktop, Claude Code или Cursor?

Открой Life Hub на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.

Похожие MCP

Compare Life Hub with

Не уверен что выбрать?

Найди свой стек за 60 секунд

Автор?

Embed-бейдж для README

Похожее

Все в категории ai