Skip to content

Back to the catalog

Show HN: Edi Life OS – self-hosted life dashboard with an MCP server for AI
github.comrepo

Show HN: Edi Life OS – self-hosted life dashboard with an MCP server for AI

Edi Life OS is a self-hosted dashboard (PHP 8.1+, MySQL, vanilla JavaScript) that combines focus timer, habits, goals, Kanban tasks, finances and notes in ten workspaces. It includes an optional Node.js MCP server that exposes 15 tools over stdio. The tools let Claude Desktop, Claude Code or Codex read the dashboard, create goals and tasks, log habits and record expenses. The MCP server calls only the app's bearer-token /api/v1 HTTP API and never touches the database or credentials. The README is candid about limits: the token has no scopes, there is no app-level rate limiting, and the secret-note flag is only a visibility setting, not encryption.

TL;DR Self-hosted PHP/MySQL life dashboard with an optional 15-tool stdio MCP server so Claude and other assistants can manage goals, habits, tasks and expenses via its token-protected API.
Document

What it claims

A single-owner, MIT-licensed life dashboard that runs on any PHP + MySQL host, including cheap shared hosting, with no frontend build step and no framework. Its optional MCP server is stdio-only; the page says "there is no hosted MCP endpoint", so the AI client must run on a machine that can reach your app's HTTPS API. Two hardcoded defaults matter if you are not the author: dates follow Asia/Tehran, and the weather card shows Qeshm Island via Open-Meteo, with a tide figure the page calls a modeled estimate.

How it works

flowchart LR
  B[Browser] -->|session sign-in| A[PHP app]
  C[Claude / Codex] -->|stdio| M[Node MCP server]
  M -->|Bearer token, /api/v1| A
  A --> D[(MySQL)]
  A --> F[Attachment files]
  • The browser sign-in and the API bearer token are separate credentials that both reach the same app.
  • Habits use dedicated tables. The other workspaces store JSON documents in a single app_state table.
  • Saves use revision checks, so a stale tab cannot silently overwrite newer data. API writes use transactions and row locks.
  • Data from older browser-only versions is imported once. Conflicting copies are archived as legacy_backup_* records.
  • A migration path exists from the author's earlier Habittify SQLite database.

How to use it

Docker. The app listens on localhost:8080. MySQL, the app and attachments each get their own volume, so after a git pull you upgrade with docker compose up -d --build.

git clone https://github.com/edrisranjbar/lifeos.git && cd lifeos
cp .env.example .env    # set your sign-in and passwords
docker compose up -d

Shared hosting. Extract lifeos-<version>.zip from the latest release into your hosting home directory. public_html/ becomes the web root and the backend sits above it. Then copy config.example.php to config.php and fill in your MySQL details.

Local. Requires PHP 8.1+ with pdo_mysql and mbstring, plus MySQL 8+ or MariaDB 10.4+. Tables are created on first use.

cp config.example.php config.php
php -S localhost:8000 -t public_html server.php

API token. Generate a token, then set it as api_token in config.php or as LIFEOS_API_TOKEN:

php -r "echo bin2hex(random_bytes(32));"
curl -H "Authorization: Bearer $LIFEOS_API_TOKEN" https://your-host/api/v1/dashboard

MCP server.

cd mcp
npm ci
cp .env.example .env   # set LIFEOS_BASE_URL and LIFEOS_API_TOKEN
npm start

Client configuration for Claude and Codex is in the repo's MCP guide, not on this page.

Limits

  • The app is built for one owner. There are no multi-user accounts.
  • The token has read and write access to every domain. Since there is no app-level rate limiting, the page tells you to set request limits at the hosting layer.
  • Use HTTPS anywhere other than localhost.
  • Secret notes are hidden from API reads by default, but they are not encrypted.
  • Backups must cover three things together: the database, the attachment files and the configuration. The database alone is not enough.
  • The timezone and weather location are fixed to the author's locale. The page does not say whether they can be configured. The example prompts also use Toman as the currency, so check localisation before you adopt it.
  • The repo has a tests/ directory (timer, API, MySQL, integration), but the page reports no test results.

Organisations named here

  • Claude Code
  • Edris Ranjbar

Technologies named here

  • Edi Life OS
  • Edi Life OS MCP server
  • Claude Desktop
  • Claude Code
  • Codex
  • Model Context Protocol
  • Docker Compose
  • Open-Meteo
  • Node.js
  • MySQL
  • Docker
  • JavaScript
  • PHP

Techniques named here

  • MCP server wrapping a token-protected HTTP API