Merge pull request #207 from Madhuvod/new-mcp-proj

Added new Demo: Notion MCP Agent with Agno
This commit is contained in:
Shubham Saboo
2025-05-20 18:26:43 -05:00
committed by GitHub
3 changed files with 238 additions and 0 deletions

View File

@@ -0,0 +1,112 @@
# Notion MCP Agent with Agno
A terminal-based Notion Agent for interacting with your Notion pages using natural language through the Notion MCP (Model Context Protocol) server.
## Features
- Interact with Notion pages via a command-line interface
- Perform update, insert, retrieve operations on your Notion pages
- Create and edit blocks, lists, tables, and other Notion structures
- Add comments to blocks
- Search for specific information
- Remembers conversation context for multi-turn interactions
- Session management for persistent conversations
## Prerequisites
- Python 3.9+
- A Notion account with admin permissions
- A Notion Integration token
- An OpenAI API key
## Installation
1. Clone the repository
2. Install the required Python packages:
```bash
pip install -r requirements.txt
```
3. Install the Notion MCP server (will be done automatically when you run the app)
## Setting Up Notion Integration
### Creating a Notion Integration
1. Go to [Notion Integrations](https://www.notion.so/my-integrations)
2. Click "New integration"
3. Name your integration (e.g., "Notion Assistant")
4. Select the capabilities needed (Read & Write content)
5. Submit and copy your "Internal Integration Token"
### Sharing Your Notion Page with the Integration
1. Open your Notion page
2. Click the three dots (⋮) in the top-right corner of the page
3. Select "Add connections" from the dropdown menu
4. Search for your integration name in the search box
5. Click on your integration to add it to the page
6. Confirm by clicking "Confirm" in the dialog that appears
Alternatively, you can also share via the "Share" button:
1. Click "Share" in the top right
2. In the sharing dialog, search for your integration name (preceded by "@")
3. Click on your integration to add it
4. Click "Invite" to grant it access to your page
Both methods will grant your integration full access to the page and its content.
### Finding Your Notion Page ID
1. Open your Notion page in a browser
2. Copy the URL, which looks like:
`https://www.notion.so/workspace/Your-Page-1f5b8a8ba283...`
3. The ID is the part after the last dash and before any query parameters
Example: `1f5b8a8bad058a7e39a6`
## Configuration
You can configure the agent using environment variables:
- `NOTION_API_KEY`: Your Notion Integration token
- `OPENAI_API_KEY`: Your OpenAI API key
- `NOTION_PAGE_ID`: The ID of your Notion page
Alternatively, you can set these values directly in the script.
## Usage
Run the agent from the command line:
```bash
python notion_mcp_agent.py
```
When you start the agent, it will prompt you to enter your Notion page ID. You can:
1. Enter your page ID at the prompt
2. Press Enter without typing anything to use the default page ID (if set)
3. Provide the page ID directly as a command-line argument (bypassing the prompt):
```bash
python notion_mcp_agent.py your-page-id-here
```
### Conversation Flow
Each time you start the agent, it creates a unique user ID and session ID to maintain conversation context. This allows the agent to remember previous interactions and continue coherent conversations even after you close and restart the application.
You can exit the conversation at any time by typing `exit`, `quit`, `bye`, or `goodbye`.
## Example Queries
- "What's on my Notion page?"
- "Add a new paragraph saying 'Meeting notes for today'"
- "Create a bullet list with three items: Apple, Banana, Orange"
- "Add a comment to the first paragraph saying 'This looks good!'"
- "Search for any mentions of meetings"
- "Summarize our conversation so far"
## License
MIT

View File

@@ -0,0 +1,122 @@
import asyncio
import json
import os
import sys
import uuid
from textwrap import dedent
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.mcp import MCPTools
from agno.memory.v2 import Memory
from mcp import StdioServerParameters
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
NOTION_TOKEN = os.getenv("NOTION_API_KEY")
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
async def main():
print("\n========================================")
print(" Notion MCP Terminal Agent")
print("========================================\n")
# Get configuration from environment or use defaults
notion_token = NOTION_TOKEN
openai_api_key = OPENAI_API_KEY
# Prompt for page ID first
if len(sys.argv) > 1:
# Use command-line argument if provided
page_id = sys.argv[1]
print(f"Using provided page ID from command line: {page_id}")
else:
# Ask the user for the page ID
print("Please enter your Notion page ID:")
print("(You can find this in your page URL, e.g., https://www.notion.so/workspace/Your-Page-1f5b8a8ba283...)")
print("The ID is the part after the last dash and before any query parameters")
user_input = input("> ")
# If user input is empty, use default
if user_input.strip():
page_id = user_input.strip()
print(f"Using provided page ID: {page_id}")
else:
print(f"Using default page ID: {page_id}")
# Generate unique user and session IDs for this terminal session
user_id = f"user_{uuid.uuid4().hex[:8]}"
session_id = f"session_{uuid.uuid4().hex[:8]}"
print(f"User ID: {user_id}")
print(f"Session ID: {session_id}")
print("\nConnecting to Notion MCP server...\n")
# Configure the MCP Tools
server_params = StdioServerParameters(
command="npx",
args=["-y", "@notionhq/notion-mcp-server"],
env={
"OPENAPI_MCP_HEADERS": json.dumps(
{"Authorization": f"Bearer {notion_token}", "Notion-Version": "2022-06-28"}
)
}
)
# Start the MCP Tools session
async with MCPTools(server_params=server_params) as mcp_tools:
print("Connected to Notion MCP server successfully!")
# Create the agent
agent = Agent(
name="NotionDocsAgent",
model=OpenAIChat(id="gpt-4o", api_key=openai_api_key),
tools=[mcp_tools],
description="Agent to query and modify Notion docs via MCP",
instructions=dedent(f"""
You are an expert Notion assistant that helps users interact with their Notion pages.
IMPORTANT INSTRUCTIONS:
1. You have direct access to Notion documents through MCP tools - make full use of them.
2. ALWAYS use the page ID: {page_id} for all operations unless the user explicitly provides another ID.
3. When asked to update, read, or search pages, ALWAYS use the appropriate MCP tool calls.
4. Be proactive in suggesting actions users can take with their Notion documents.
5. When making changes, explain what you did and confirm the changes were made.
6. If a tool call fails, explain the issue and suggest alternatives.
Example tasks you can help with:
- Reading page content
- Searching for specific information
- Adding new content or updating existing content
- Creating lists, tables, and other Notion blocks
- Explaining page structure
- Adding comments to specific blocks
The user's current page ID is: {page_id}
"""),
markdown=True,
show_tool_calls=True,
retries=3,
memory=Memory(), # Use Memory v2 for better multi-session support
add_history_to_messages=True, # Include conversation history
num_history_runs=5, # Keep track of the last 5 interactions
)
print("\n\nNotion MCP Agent is ready! Start chatting with your Notion pages.\n")
print("Type 'exit' or 'quit' to end the conversation.\n")
# Start interactive CLI session with memory and proper session management
await agent.acli_app(
user_id=user_id,
session_id=session_id,
user="You",
emoji="🤖",
stream=True,
markdown=True,
exit_on=["exit", "quit", "bye", "goodbye"]
)
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -0,0 +1,4 @@
agno
python-dotenv
mcp
openai