Poke HabitTracker
БесплатноНе проверенEnables Poke to read and update today's HabitTracker habits via Supabase, with tools for listing, completing, uncompleting habits, and viewing a dashboard summa
Описание
Enables Poke to read and update today's HabitTracker habits via Supabase, with tools for listing, completing, uncompleting habits, and viewing a dashboard summary.
README
This is Daniel's private Poke-compatible MCP server. The MVP lets Poke read and update today's HabitTracker habits directly through Supabase.
Architecture
Poke / Telegram / SMS
|
FastMCP server in this repo
|
Supabase HabitTracker tables
|
HabitTracker web/iOS clients
HabitTracker remains the source of truth. This server does not add API routes to HabitTracker and does not create schema migrations.
Current Tools
health(): returns safe server/config status without secrets.list_today_habits(): lists active habits for today with completion status.complete_habit(habit_name): marks today's matching habit complete.uncomplete_habit(habit_name): marks today's matching habit incomplete without deleting rows.get_today_dashboard(): returns completed/incomplete habit summary for today.- Body-weight metric tools (
get_latest_body_weight,get_body_weight_history,get_body_weight_trend,get_metric_summary) read importeddaily_metrics/metric_eventsdata.
Tasks and check-ins are not part of the current MCP surface. HabitTracker is habits-first and has no task concept; those tools will only be added if HabitTracker gains the schemas.
Environment
Create .env from the example:
Copy-Item .env.example .env
Fill the required HabitTracker Supabase values:
SUPABASE_URL=
SUPABASE_SERVICE_ROLE_KEY=
DANIEL_USER_ID=
Optional:
APP_ENV=development
APP_TIMEZONE=America/Chicago
MCP_HOST=127.0.0.1
MCP_PORT=8000
MCP_PATH=/mcp
POKE_MCP_API_KEY=
SUPABASE_SERVICE_ROLE_KEY must stay server-side. Every operation in this repo is scoped to DANIEL_USER_ID.
When POKE_MCP_API_KEY is set, the MCP endpoint requires FastMCP bearer auth:
Authorization: Bearer <POKE_MCP_API_KEY>
The /health HTTP route remains public and secret-safe for platform health checks.
Local Setup
python -m venv .venv
.\.venv\Scripts\python -m pip install -e ".[dev]"
Run Tests
Run unit tests and lint:
.\.venv\Scripts\python -m pytest
.\.venv\Scripts\python -m ruff check .
Run The Server
Run the MCP server locally:
.\.venv\Scripts\python -m poke_mcp.server
The default local MCP URL is:
http://127.0.0.1:8000/mcp
The server uses FastMCP HTTP transport at MCP_PATH, default /mcp.
Manual Smoke Tests
The smoke script uses an in-memory FastMCP client. It always checks tool registration and health(). It calls real Supabase read tools only when SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY, and DANIEL_USER_ID are present.
Read-only smoke test:
.\.venv\Scripts\python scripts\smoke_test.py
When env vars are present, the read-only smoke test calls:
health()list_today_habits()get_today_dashboard()
Intentional write smoke test:
.\.venv\Scripts\python scripts\smoke_test.py --write --habit "Creatine"
Write mode calls both complete_habit() and uncomplete_habit() against real Supabase. It chooses the order so the habit ends with the same visible completed/incomplete state it had at the start. If the habit starts incomplete, this may create a completed=false habit_logs row because this MVP intentionally does not delete logs.
Deploy To HTTPS
Use a host that can run Python 3.12 and expose HTTPS, such as Render, Railway, or Fly.io. This repo includes:
Dockerfile: production container image.render.yaml: Render Blueprint for a Docker web service.railway.toml: Railway config-as-code using the Dockerfile.fly.toml: Fly app config using the Dockerfile.
Runtime behavior:
- The server binds
MCP_HOST, default127.0.0.1. - The server uses
MCP_PORT; ifMCP_PORTis absent, platformPORTis accepted. - The MCP endpoint is mounted at
MCP_PATH, default/mcp. /healthis a plain HTTP health route for deployment checks. It is secret-safe and returns the same config booleans as thehealth()MCP tool.
Recommended deployment shape:
Build/install: python -m pip install -e .
Start: python -m poke_mcp.server
Environment:
APP_ENV=production
MCP_HOST=0.0.0.0
MCP_PORT=<numeric platform port; PORT is also accepted>
MCP_PATH=/mcp
SUPABASE_URL=<project url>
SUPABASE_SERVICE_ROLE_KEY=<server-side secret>
DANIEL_USER_ID=<Daniel's auth.users id>
Terminate TLS at the hosting provider and connect Poke to:
https://your-public-host.example.com/mcp
Do not expose the endpoint publicly without setting POKE_MCP_API_KEY or using a host/proxy rule that enforces equivalent bearer auth.
Render
Use render.yaml as a Blueprint, or create a Docker web service from the GitHub repo.
Set these secret/env values in Render:
APP_ENV=production
APP_TIMEZONE=America/Chicago
MCP_HOST=0.0.0.0
MCP_PATH=/mcp
SUPABASE_URL=<project url>
SUPABASE_SERVICE_ROLE_KEY=<server-side secret>
DANIEL_USER_ID=<Daniel's auth.users id>
Render provides PORT, so MCP_PORT is optional. Health check path: /health.
Railway
Railway will use railway.toml and the Dockerfile. Set the same production env vars as Render. Railway provides PORT, so MCP_PORT is optional. After deploy, create or use the public Railway domain and use:
https://your-railway-domain.up.railway.app/mcp
Fly.io
Edit fly.toml if the app name poke-mcp is unavailable, then set secrets and deploy:
fly secrets set SUPABASE_URL="<project url>" SUPABASE_SERVICE_ROLE_KEY="<server-side secret>" DANIEL_USER_ID="<Daniel's auth.users id>"
fly deploy
fly.toml sets MCP_PORT=8080 and maps Fly's public HTTPS service to internal port 8080. Health check path: /health.
Deployed Smoke-Test Checklist
After a deployment finishes:
- Confirm logs show the server starting on
0.0.0.0and the expected port. - Open
https://your-public-host.example.com/health. - Confirm the health payload has
status: "ok",supabase_configured: true, and no secret values. - Run a read-only remote MCP smoke test:
.\.venv\Scripts\python scripts\smoke_test.py --url https://your-public-host.example.com/mcp
If the remote MCP endpoint requires bearer auth, pass the key through FastMCP's HTTP auth path:
.\.venv\Scripts\python scripts\smoke_test.py --url https://your-public-host.example.com/mcp --api-key "<secret>"
- Confirm the smoke test lists tools and returns today's habit dashboard.
- Connect Poke to
https://your-public-host.example.com/mcp. - From Poke, ask "What habits do I have left today?"
- Only after read-only checks pass, intentionally test writes with a low-risk habit:
.\.venv\Scripts\python scripts\smoke_test.py --url https://your-public-host.example.com/mcp --api-key "<secret>" --write --habit "Creatine"
Connect From Poke
MCP URL:
https://your-public-host.example.com/mcp
Auth behavior in this MVP:
- If
POKE_MCP_API_KEYis set on the server,/mcprequiresAuthorization: Bearer <POKE_MCP_API_KEY>. scripts/smoke_test.py --api-keysends that exact header using FastMCP's HTTPauth=support.- Poke should be configured to send
Authorization: Bearer <POKE_MCP_API_KEY>when connecting to the MCP URL. health()reports whetherPOKE_MCP_API_KEYis configured, but it does not reveal the key.
Example Poke prompts:
- "What habits do I have left today?"
- "Show my habit dashboard."
- "Mark Creatine complete."
- "Mark Cardio incomplete for today."
- "Did I finish all my habits?"
HabitTracker Schema Assumptions
The MVP only uses:
habits:id,user_id,title,active_from,active_until,created_athabit_logs:habit_id,date,completed
Active habits are those where active_from <= today and active_until is null or after today. Missing active_from falls back to created_at, matching HabitTracker's app logic.
Known Limitations
- Task and check-in tools are intentionally not registered; HabitTracker has no task or check-in schema.
- No Google Calendar integration in this MVP.
uncomplete_habitupsertscompleted=false; HabitTracker web currently often represents incomplete as no log row.- Production remote auth should be finalized when Poke custom integration requirements are known.
Установка Poke HabitTracker
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/smoothiekanoble/poke-mcpFAQ
Poke HabitTracker MCP бесплатный?
Да, Poke HabitTracker MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Poke HabitTracker?
Нет, Poke HabitTracker работает без API-ключей и переменных окружения.
Poke HabitTracker — hosted или self-hosted?
Доступен hosted-вариант: Unyly запускает сервер в облаке, локальная установка не обязательна.
Как установить Poke HabitTracker в Claude Desktop, Claude Code или Cursor?
Открой Poke HabitTracker на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
GitHub
PRs, issues, code search, CI status
автор: GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
автор: mcpdotdirectCompare Poke HabitTracker with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development
