MOMENTUM – AIccountability, Vision Board Tracker using Notion MCP

This is a submission for the Notion MCP Challenge

What I Built

MOMENTUM is an AI-powered personal accountability agent. You tell it your goals in plain language — “10k steps daily, gym 5x/week, drink a gallon of water, take my meds” — and it does everything else.

No templates. No configuration. No manual logging.

These aren’t hypothetical goals — I built MOMENTUM to track my own fitness and health. Real Garmin step data, real gym sessions, real streaks.

Video Demo

Momentum – Notion MCP Challenge: https://youtu.be/YnaauSkPRok

Show us the code

GitHub Repo: https://github.com/schezfaz/momentum

The loop:

Write goals in Notion (or just chat in Telegram) → Momentum interprets them with Claude → Creates databases, dashboard, and schedules → Pulls fitness data automatically from Garmin/Strava → Sends personalized coaching via Telegram → Logs everything back to Notion → Generates weekly analytics → Repeat — ALL USING THE NOTION MCP

Key Features

  • Zero-config onboarding: Two paths — fill a Notion table or just chat with Momo on Telegram. Both produce the same fully-built infrastructure.
  • AI goal classification: Claude analyzes each goal to determine what to track, where data comes from, how often to nudge, and when to sync — no hardcoded rules.
  • Auto-generated Notion dashboard: Color-coded goal cards, daily score out of 100, streak heatmaps, weekly completion bars, motivational quotes — all created dynamically based on YOUR goals.
  • Automated fitness sync: Steps from Garmin, runs from Strava — pulled automatically at intelligent times (morning + evening for steps, evening for workouts).
  • Claude-powered coaching: Morning motivation, midday check-ins, evening scorecards — all personalized with your real data, streaks, and local weather. Kind and encouraging, never guilt-tripping.
  • Natural language logging: Text “drank 2 bottles of water” or “just took my meds” — Momo understands and logs it. Or tap inline YES/NO buttons for quick confirmation.
  • Streak tracking with milestones: Current and longest streaks per goal with heatmap calendars. Momo celebrates 7-day, 30-day, 100-day milestones and warns when streaks are at risk.
  • Weekly analytics: Every Sunday, Momo generates a new Notion page with completion rates, trends, streak summaries, and AI-generated insights.
  • Notion-driven scheduling: Briefing times are read from the User Profile page in Notion — change “Morning Briefing” to “8:45 PM” and the scheduler adapts. Notion as config, not just storage.
  • Weather-aware coaching: Raining? Momo adjusts — skip the outdoor walk, hit steps indoors.
  • Demo mode: Run /demo in Telegram and Momo creates a fully populated demo workspace — 30 days of realistic data across all goals, complete with dashboard, streaks, charts, and analytics. Judges can see the full experience in 60 seconds.
  • Graceful degradation: If Garmin is down, the briefing still sends — it just notes the missing data.

Tech Stack

  • Python 3.14 with full async/await
  • Notion MCP (@notionhq/notion-mcp-server) as the sole backend — no external database
  • Claude API (Anthropic) for all intelligence
  • python-telegram-bot v21+ for the user interface
  • APScheduler for goal-driven job scheduling
  • Garmin Connect, Strava, OpenWeatherMap integrations

Momentum uses Claude to interpret your goals, then creates your entire Notion workspace from scratch using Notion MCP — databases, dashboard, streak tracking, analytics pages — and runs an automated daily coaching loop through Telegram.

How I Used Notion MCP

Notion MCP isn’t just a storage layer in MOMENTUM — it’s the backbone of the entire system. The agent communicates with Notion exclusively through the MCP stdio protocol (@notionhq/[email protected]), never through REST.

Here’s what makes this a deep MCP integration:

1. The Agent Creates the Workspace (Not the User)

Most Notion integrations read from pre-existing databases. MOMENTUM creates the entire workspace from scratch based on the user’s goals:

  • 5 databases (Goals/Tums, Daily Log, Streaks, Weekly Summary, Briefing Log) — all created via MCP create_database calls with dynamic schemas
  • A live dashboard page with inline database views, color-coded callout blocks, streak leaderboards, and progress indicators — built block-by-block through MCP
  • Weekly analytics pages with toggle lists, dividers, embedded views, and AI-generated content

Different goals produce different infrastructure. Track 3 goals? You get 3 rows, 3 streak records, and a 3-column dashboard. Track 7? Everything scales.

2. Bidirectional Data Flow Through MCP

Every data movement in MOMENTUM flows through Notion MCP:

READ:  Goals from onboarding page → classify with Claude
WRITE: Create databases, dashboard, streak records
READ:  Current daily values → generate briefings
WRITE: Synced fitness data → Daily Log
READ:  Streaks + history → evening evaluation
WRITE: Updated scores, streaks → all databases
READ:  Week of data → weekly analytics
WRITE: New analytics page with AI insights
READ:  User Profile → briefing schedule times

This isn’t “read once, write once” — it’s a continuous read-write loop running multiple times per day across 5 databases.

3. Notion as the Single Source of Truth

There is no external database. No SQLite, no Redis, no JSON files. Every piece of state lives in Notion:

  • Goal configuration and targets
  • Daily logged values (manual + auto-synced)
  • Streak records (current + longest)
  • Briefing history and schedule preferences
  • Weekly analytics
  • The dashboard itself

The Notion workspace IS the application state. If you look at a user’s Notion after a week with MOMENTUM, you see their complete accountability history — beautifully organized, fully searchable, and entirely created by the agent.

4. MCP Tool Usage Across the Lifecycle

Phase MCP Operations
Onboarding search (find workspace), create_database x5, create_page (goals, streaks, dashboard), append_block_children (dashboard layout)
Daily sync query_database (get today’s log), create_page or update_page (upsert values)
Briefings query_database x3 (goals, daily log, streaks) → Claude generates message → create_page (briefing log)
Evaluation query_database x2 → score calculation → update_page (streaks), create_page (daily summary)
Analytics query_database x4 (full week) → Claude analyzes → create_page with rich block content
Config get_block_children (read User Profile) → parse briefing schedule → register jobs

On a typical day with 5 goals, MOMENTUM makes 40+ MCP tool calls — reads, writes, queries, and page creation — all orchestrated by the agent without any user intervention.

Architecture (~4,800 lines of Python)

main.py              Entry point — wires Telegram bot + Notion MCP + scheduler

agent/               Intelligence layer (all Claude API calls)
  onboarding.py      Goal classification, DB creation, dashboard building
  briefing.py        Morning/midday/evening message generation
  evaluator.py       Daily scoring, streak tracking, milestone detection
  analytics.py       Weekly analytics page generation
  prompts.py         System prompts for Claude

bot/
  telegram_bot.py    Commands + inline keyboards + NL message parsing

integrations/
  notion_client.py   All Notion ops via MCP stdio subprocess
  garmin_sync.py     Garmin Connect integration
  strava_sync.py     Strava OAuth + activity sync
  weather.py         OpenWeatherMap integration

scheduler/
  jobs.py            APScheduler — 7 job types registered from goal config

scripts/
  demo.py            30-day mock data generator for demo mode

Built for the Notion MCP Challenge. MOMENTUM proves that Notion + MCP + AI can replace purpose-built accountability apps — no extra infrastructure needed.