This is a submission for the Notion MCP Challenge
What I Built
The challenge prompt asked us to use Notion to "scale side hustles or empires." Most MCP tools focus on internal administration—to-do lists, HR trackers, and sprint boards. I wanted to build something offensive.
I built the Competitive Intelligence War Room.
It is an autonomous, human-in-the-loop market intelligence system. It acts as a digital Chief Strategy Officer. It autonomously scrapes the live internet via DuckDuckGo, uses Google Gemini to identify emerging competitor threats in your industry, and pipelines them into a Notion database. It then pauses, waiting for a human to approve the threat. Once approved, it automatically generates a 500-word strategic counter-measure report and saves it to a Notion War Room.
Video Demo
Video Timestamps:
-
0:00 - The Generation: The system reads
industries.txt, and for each industry it uses DuckDuckGo to pull live web data and Gemini parses it into 3 distinct briefs. The MCP Tool instantly in a minute creates these 9 entries (3 for 3 industries) in the Notion "Idea Inbox" database with aPendingstatus. -
0:30 - Human-in-the-Loop: In the Notion UI, I manually review the entries. I change the status of an entry to
Approved. -
0:50 - The Execution: The scheduler/terminal detects the
Approvedstatus and triggers the strategic analysis. -
1:05 - The Result: The final report is saved inside the "Content Calendar" Notion database, and the original brief is marked
Processed.
Show us the code
How I Used Notion MCP
The Engineering Architecture
Unlike typical hackathon scripts, this project was engineered to strict enterprise standards. I treated Notion MCP not just as a database, but as the central state machine for a Domain-Driven Design (DDD) architecture.
1. Hexagonal Architecture (Ports and Adapters)
The FastMCP server knows absolutely nothing about Notion, Gemini, or DuckDuckGo. All external integrations are isolated behind interface Ports. The core Application Use Cases only interact with a BriefRepository and ReportRepository. This means Notion could theoretically be swapped out without touching a single line of core business logic.
2. Domain Invariants
In domain/models.py, the core entities (IntelBrief, StrategyReport) are mathematically pure. They utilize Python's __post_init__ to enforce domain invariants. Invalid data literally cannot exist in the domain layer, ensuring that the Notion API is never fed malformed strings or empty states.
3. Safe Notion Pagination (SRP)
Notion's API strictly limits text block children to 2000 characters and 100 blocks per request. To adhere to the Single Responsibility Principle (SRP), the Notion Adapter gracefully chunks the AI-generated strategy reports and executes recursive, batched API appends to safely bypass these limits without silent data truncation.
4. The "Human-in-the-Loop" State Machine
Notion acts as the visual transition layer. The AI is forbidden from generating expensive strategy reports until a human manually transitions a database row from Pending to Approved. Once the system executes the report, it calls a specific MCP tool to transition the Notion row to Processed.
This project proves that with Notion MCP and Clean Architecture, you can build an enterprise-grade empire-scaling engine in a single weekend.
Top comments (0)