This is a submission for the Notion MCP Challenge
What I Built
MOMENTUM is an AI-powered personal accountability agent. It 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.
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: User Experience
- 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 Momentum 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" β Momentum 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. Momentum celebrates 7-day, 30-day, 100-day milestones and warns when streaks are at risk.
- Weekly analytics: Every Sunday, Momentum 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? Momentum adjusts β skip the outdoor walk, hit steps indoors.
-
Demo mode: Run
/demoin Telegram and Momentum 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
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/notion-mcp-server@1.9.1), 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_databasecalls 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.
Top comments (0)