Zenith MCP Server
# Zenith MCP Server
A personal habit tracking MCP server built for an AuDHD + PDA brain.
Tracks the 6 daily non-negotiables of a 90-day mission — connected to Supabase. No UI. No friction. Just a tool your AI can call.
## Tools
| Tool | What it does |
|---|---|
| `log_habit` | Log a habit as done today |
| `get_today_status` | Full dashboard of today's habits |
| `get_streak` | Consecutive day streak for any habit |
| `get_mission_overview` | Full 90-day progress stats |
## Habits tracked
- `prayer_before_phone`
- `cold_shower`
- `box_breathing`
- `pullup_gtg` (multi-session, tracks reps)
- `a25_block`
- `video_published`
> No negative habit tracking. Pink Elephant rule enforced.
## Stack
- [FastMCP](https://github.com/jlowin/fastmcp) — MCP server framework
- [Supabase](https://supabase.com) — Postgres database (free tier)
- [uv](https://github.com/astral-sh/uv) — Python package manager
## Setup
```bash
# 1. Clone and install
git clone https://github.com/YOUR_USERNAME/zenith-mcp
cd zenith-mcp
uv sync
# 2. Add your credentials
cp .env.example .env
# Edit .env with your Supabase URL and secret key
# 3. Run the DB migration in Supabase SQL Editor
# (paste contents of setup_db.sql)
# 4. Run the server
uv run server.py
```
## Day 26/90
Built in public. AuDHD developer. Varna, Bulgaria.
TDQS
Scored across 4 tools
Each tool serves a clearly distinct purpose: logging a completion, viewing today's dashboard, checking a specific habit's streak, and viewing overall mission progress. There is no overlap or ambiguity between them.
All tool names follow a consistent verb_noun pattern: log_habit, get_today_status, get_streak, get_mission_overview. The verbs are consistent ('log' and 'get'), and the nouns clearly describe the target.
With 4 tools, the set is concise and well-scoped for a habit-tracking mission server. Each tool covers a necessary interaction (log and three read views), and the count is within the ideal range.
The server covers core logging and status views, but lacks a way to list available habits or manage them (create/update/delete). An agent cannot discover valid habit names, which could cause failures when calling log_habit or get_streak.