DEV Community

member_26847952
member_26847952 Subscriber

Posted on

I Built an AI PM That Creates PRDs & Sprint Plans Directly in Notion

Notion MCP Challenge Submission 🧠

This is a submission for the Notion MCP Challenge

What I Built

AutoPM is an AI-powered product management assistant that turns a single product idea
into a fully structured Notion workspace β€” PRDs, task breakdowns, daily standups, and
sprint plans β€” in seconds.

No more context-switching between AI tools and your Notion workspace. Just describe your
product idea, and AutoPM:

  1. Generates a full PRD β€” problem statement, goals, user personas, user stories, and out-of-scope items
  2. Breaks it into Epics & Tasks β€” with priorities, story points, and a ready-to-go Sprint 1 plan (~20 story points)
  3. Writes everything directly to Notion via Notion MCP
  4. Reads your workspace via MCP to generate context-aware daily standups and sprint plans from your real backlog

πŸ”— Live demo: autopm-two.vercel.app

πŸ”— GitHub: github.com/himanshu748/dev-challenge-1

AutoPM Dashboard

Video Demo

Show us the code

AutoPM β€” AI Product Manager

AI-powered product management assistant that creates PRDs, task breakdowns, standups, and sprint plans directly in Notion β€” built with HuggingFace Inference API + Notion MCP.

Built for the dev.to Notion MCP Challenge.

Live demo: autopm-two.vercel.app

Dashboard Screenshot

What It Does

Enter a product idea and AutoPM:

  1. Generates a full PRD via HuggingFace AI (problem, goals, personas, user stories, scope)
  2. Creates an Epics & Tasks breakdown with priorities and story points
  3. Writes everything to Notion via Notion MCP (stdio transport)
  4. Reads your workspace via MCP to generate context-aware standups and sprint plans

How I Used Notion MCP

AutoPM uses @notionhq/notion-mcp-server via stdio transport for ALL Notion operations:

  • Reads β€” API-post-search to scan workspace pages, API-get-block-children to read task data
  • Writes β€” API-post-page to create PRD pages, task breakdowns, standup reports, sprint plans
  • Auth check β€” API-get-self to verify MCP connectivity on health check

The MCP server…

How I Used Notion MCP

Notion MCP is the backbone of AutoPM β€” every single Notion interaction goes through it,
zero direct REST calls.

I spin up @notionhq/notion-mcp-server as a stdio child process per request, managed
by the Python mcp SDK's ClientSession:

from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

async with stdio_client(StdioServerParameters(
    command="npx",
    args=["-y", "@notionhq/notion-mcp-server"],
    env={"NOTION_TOKEN": token},
)) as (read, write):
    async with ClientSession(read, write) as session:
        await session.initialize()
        await session.call_tool("API-post-page", {...})
Enter fullscreen mode Exit fullscreen mode

MCP tools used

Tool Purpose
API-get-self Health check β€” verify MCP connectivity on startup
API-post-search Scan workspace for existing pages before generating standups
API-get-block-children Read task data from Notion for context-aware generation
API-post-page Create PRD pages, task breakdowns, standup reports, sprint plans

What Notion MCP actually unlocks

Without MCP, AutoPM would be a one-way pipe β€” generate content, dump it somewhere.
With MCP, it becomes bidirectional: it reads your existing workspace state before
generating anything. The standup and sprint planner aren't making things up β€” they're
grounded in your actual Notion data. That's the real unlock.

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Browser (UI)   │────▢│  FastAPI Backend      │────▢│  Notion MCP Server   β”‚
β”‚  Vanilla HTML   β”‚     β”‚  (Python)             β”‚     β”‚  (stdio transport)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚  npx @notionhq/      β”‚
                                 β”‚                    β”‚  notion-mcp-server   β”‚
                                 β–Ό                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚
                        β”‚  HuggingFace     β”‚                    β–Ό
                        β”‚  Inference API   β”‚           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚  (Qwen 72B)      β”‚           β”‚  Notion API     β”‚
                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Enter fullscreen mode Exit fullscreen mode

Flow: HuggingFace (Qwen 2.5 72B) generates structured PM content β†’ FastAPI formats
Notion blocks β†’ MCP writes/reads Notion workspace

Tech Stack

  • Backend: FastAPI (Python)
  • AI: HuggingFace Inference API β€” Qwen/Qwen2.5-72B-Instruct (free tier!)
  • Notion: @notionhq/notion-mcp-server via stdio transport
  • MCP SDK: Python mcp package β€” ClientSession + StdioServerParameters
  • Frontend: Vanilla HTML/CSS/JS, glassmorphism dark theme
  • Deployed on: Vercel

Top comments (0)