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 (2)
Really love this idea, the execution and thought behind it is genuinely impressive.I’m a fellow participant in the challenge. I built DueIt, which might look like a simple to-do list on the surface, but it goes a lot deeper into planning, structuring, and actually helping users get things done.I’m currently planning DueIt v2, and while reading about MOMENTUM, I felt like some of the concepts you’ve explored could fit really well as a feature or inspiration inside my app. Would love to connect and maybe explore a collaboration if you’re open to it — I think there’s some really interesting overlap here.
Some comments may only be visible to logged-in visitors. Sign in to view all comments.