Notion Assist
AI-powered project lifecycle manager: from PRD review to TRD to tickets, all inside Notion. (Bye Bye PMs)
What It Does
Notion Assist takes your PRD, reviews it against your existing workspace context (business logic, RCAs, issues, engineering DB). Writes a Technical Requirements Document and creates a full tickets dashboard in one flow, all living in Notion.
Share a PRD link. One button later, you have three production-ready artifacts:
- PRD Review — structured analysis with gaps, strengths, and completeness score
- TRD — full technical doc with architecture, APIs, data models, edge cases
- Tickets Dashboard — Notion database pre-populated with all tasks (type, priority, description)
The Problem
Every product team does this manually:
- Write PRD → share with team for review
- Engineers write TRD from PRD
- Someone breaks TRD into tickets
That's 3 context switches, 3 docs to write, and the information rarely stays connected. By the time tickets are created, half the PRD context is lost.
The Flow
You: "Review my PRD for the billing upgrade flow."
↓
Claude searches the Notion workspace (via MCP)
Claude reads PRD + related docs + known issues
Claude outputs: Summary → Gaps → Strengths → Score
↓
[ → Build TRD + Tickets in Notion ] ← one button
↓
TRD page created in Notion
↓
Tickets database created in Notion (pre-populated)
The sidebar tracks live progress and shows ↗ view links to each artifact as they're created.
How It Works — Notion MCP
This branch uses the Anthropic Messages API mcp-client-2025-04-04 beta. One API call gives Claude native access to your entire Notion workspace — no tool definitions, no proxy for chat, no MCP client code.
fetch("https://api.anthropic.com/v1/messages", {
headers: {
"x-api-key": ANTHROPIC_API_KEY,
"anthropic-version": "2023-06-01",
"anthropic-beta": "mcp-client-2025-04-04",
"anthropic-dangerous-direct-browser-access": "true",
},
body: JSON.stringify({
model: "claude-sonnet-4-20250514",
max_tokens: 8096,
system: SYSTEM_PROMPT,
messages: [...],
mcp_servers: [{
type: "url",
url: "https://mcp.notion.com/sse",
headers: { Authorization: `Bearer ${NOTION_TOKEN}` },
name: "notion",
}],
}),
});
Claude gets access to notion-search, notion-fetch, notion-create-pages, notion-create-database, and more — automatically. It decides which tools to call, reads multiple pages, cross-references issues, and creates artifacts. Zero routing logic on our end.
Session storage
Project state (name, stage, timestamps) is stored in a Notion database that the app creates automatically on first run (notion-assist-sessions-v1). This uses the Notion REST API via a Next.js server-side proxy to avoid CORS.
Browser → Anthropic API + mcp_servers (chat, CORS allowed via beta header)
Browser → /api/notion (Next.js proxy) (session storage only)
↕
Notion Workspace
Tech Stack
-
Next.js 16 (App Router) — frontend +
/api/notionproxy for session storage - Tailwind CSS v4 — dark terminal-style UI
-
Anthropic API — Claude Sonnet with Notion MCP (
mcp-client-2025-04-04) -
Notion MCP —
mcp.notion.com/sse— full workspace read/write via Claude - react-markdown — AI response rendering
No backend. No database. Everything lives in Notion.
Architecture
Browser
├── Anthropic API (Claude + Notion MCP) ← chat, PRD review, TRD, tickets
│ Claude ↔ mcp.notion.com ↔ Notion workspace
│
└── /api/notion (Next.js proxy) ← session/project tracking only
↕
notion-assist-sessions-v1/
└── Projects DB
Getting Started
1. Get an Anthropic API key
Sign up at console.anthropic.com. Key starts with sk-ant-.
2. Create a Notion integration
Go to notion.so/my-integrations, create an integration, copy the token (ntn_...). Share your workspace pages with it.
3. Run
npm install
npm run dev
Open http://localhost:3000, enter your keys, and paste a PRD link to start.
What's Next
- Retrospective stage — AI reads closed tickets and writes a retro doc
- Slack integration — post PRD review summary to a channel
- Real streaming — SSE streaming once MCP beta supports it
- Multi-user — shared project state via the Notion DB (already there)
Branches
| Branch | LLM | Notion access |
|---|---|---|
anthropic-api (this) |
Claude via Anthropic API | Notion MCP — native, zero tool code |
main |
Gemini/Claude via OpenRouter (free) | Direct Notion REST API + custom tools |
Use main if you don't have an Anthropic key — it works with a free OpenRouter account.
Links
- GitHub: github.com/Harshal141/notion_assist
- Built for the Notion MCP Hackathon

Top comments (3)
This is best.
Very cool.
Very useful