๐๏ธ AI Calendar Assistant
Personal calendar management powered by local LLM (Ollama), Google Calendar API, and Model Context Protocol (MCP)
A lightweight, privacy-first AI calendar assistant that runs entirely on your local machine. Chat with your calendar using natural language, powered by Llama 3.2 running locally via Ollama - completely free, no API costs.
โจ Features
- ๐ค Local AI - Uses Ollama (llama3.2:3b) running on your machine
- ๐ Google Calendar Integration - Full read/write access via OAuth2
- ๐ฌ Natural Language - Ask questions in plain English
- โก Fast - Responses in 1-2 seconds
- ๐ Privacy-First - LLM runs locally, only calendar sync requires internet
- ๐ 100% Free - No API costs, no subscriptions
- ๐ MCP Compatible - Integrates with Claude Desktop and other MCP clients
- ๐จ Beautiful CLI - Rich terminal interface with color and formatting
๐๏ธ Architecture
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MCP Client for Ollama (ollmcp) โ
โ Terminal UI - Natural Language Interface โ
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ (MCP Protocol) โ (Ollama API)
โ โ
โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Calendar MCP Server โ โ Ollama โ
โ (calendar_server.py) โ โ Llama 3.2 3B โ
โ โ โ (Local LLM) โ
โ Exposes 7 Calendar Tools: โ โ โ
โ โข list_events โ โ Handles: โ
โ โข get_today_events โ โ โข Intent parsing โ
โ โข create_event โ โ โข Natural language โ
โ โข search_events โ โ โข Response generation โ
โ โข update_event โ โ โข Tool orchestration โ
โ โข delete_event โ โ โ
โ โข check_availability โ โ โ
โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ (Google Calendar API)
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ GoogleCalendarClient โ
โ โข OAuth2 Authentication โ
โ โข Event CRUD Operations โ
โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Google Calendar โ
โ (Cloud Storage) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Flow:
- You type natural language โ MCP Client (ollmcp)
- Ollama (Llama 3.2) understands intent and determines which MCP tools to call
- MCP Client calls appropriate calendar tools via MCP protocol
- Calendar MCP Server executes Google Calendar operations
- Response flows back through MCP โ Ollama โ formatted natural language response
๐ Quick Start
Prerequisites
- Python 3.8+
- macOS, Linux, or Windows
- Google account
- 4GB RAM (for local LLM)
Installation
-
Install Ollama
# macOS brew install ollama # Start Ollama service ollama serve # Pull the model (in a new terminal) ollama pull llama3.2:3b -
Clone & Setup
git clone https://github.com/othmane-zizi-pro/ai-calendar-assistant.git cd ai-calendar-assistant pip install -r requirements.txt -
Get Google Calendar Credentials
- Go to Google Cloud Console
- Create a new project
- Enable "Google Calendar API"
- Create OAuth 2.0 credentials (Desktop app)
- Download JSON and save as
credentials.json - See detailed setup guide
-
Install MCP Client for Ollama
pip install mcp-client-for-ollama -
Run - Start Natural Language Calendar Chat
# First run - authenticate with Google (this will open browser) python run_calendar_server.py # Test server once, then Ctrl+C # Start interactive MCP chat with Ollama ollmcp --servers-json ollmcp_config.json --model llama3.2:3b
๐ก Usage
Interactive MCP-Powered Chat
# Start the MCP client with Ollama
ollmcp --servers-json ollmcp_config.json --model llama3.2:3b
Example conversation:
You: What's on my calendar today?
AI: Let me check your calendar for today...
[Calls get_today_events tool via MCP]
You have 3 events scheduled today:
1. Team Standup at 9:00 AM
2. Client Meeting at 2:00 PM
3. Gym Session at 6:00 PM
You: Create a meeting tomorrow at 3pm for 1 hour called "Project Review"
AI: I'll create that event for you...
[Calls create_event tool via MCP]
โ
Done! Event "Project Review" scheduled for tomorrow 3:00 PM - 4:00 PM
You: Am I free on Friday afternoon?
AI: Let me check your availability...
[Calls check_availability tool via MCP]
Yes, you're free after 2:00 PM on Friday!
Available MCP Tools
The calendar MCP server exposes these tools (automatically used by Ollama through the MCP client):
- list_events - Get upcoming calendar events
- get_today_events - Retrieve today's schedule
- create_event - Create new calendar event
- search_events - Search events by keyword
- update_event - Modify existing event
- delete_event - Remove event from calendar
- check_availability - Check if time slot is free
Alternative: Use with Claude Desktop
If you prefer using Claude Desktop instead of the local Ollama setup:
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"calendar": {
"command": "python3",
"args": ["run_calendar_server.py"],
"cwd": "/path/to/ai-calendar-assistant"
}
}
}
Restart Claude Desktop - now Claude can access your calendar via MCP!
๐ ๏ธ Technical Stack
Core Technologies
| Component | Technology | Purpose |
|---|---|---|
| MCP Client | mcp-client-for-ollama (ollmcp) | Bridges Ollama with MCP servers, terminal UI |
| Local LLM | Ollama (Llama 3.2 3B) | Natural language understanding, intent parsing, tool orchestration |
| MCP Server | Model Context Protocol SDK | Exposes calendar tools via MCP protocol |
| Calendar API | Google Calendar API v3 | Event management, OAuth2 authentication |
| NLP | LangChain | Prompt engineering, chain-of-thought |
Key Features Implementation
1. MCP Server - Tool Exposure
# Expose calendar tools via MCP protocol
@app.list_tools()
async def list_tools():
return [
Tool(name="list_events", description="List upcoming calendar events", ...),
Tool(name="create_event", description="Create a new calendar event", ...),
Tool(name="search_events", description="Search events by keyword", ...),
Tool(name="get_today_events", ...),
Tool(name="update_event", ...),
Tool(name="delete_event", ...),
Tool(name="check_availability", ...)
]
@app.call_tool()
async def call_tool(name: str, arguments: Any):
client = get_calendar_client()
if name == "list_events":
events = client.list_events(...)
return [TextContent(type="text", text=formatted_output)]
2. OAuth2 Authentication
# Google Calendar OAuth2 flow
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json',
SCOPES=['https://www.googleapis.com/auth/calendar']
)
creds = flow.run_local_server(port=0)
3. MCP + Ollama Integration
# ollmcp connects Ollama to MCP servers
ollmcp --servers-json ollmcp_config.json --model llama3.2:3b
# User types: "What's on my calendar today?"
# โ Ollama (Llama 3.2) understands intent
# โ Calls get_today_events tool via MCP protocol
# โ Calendar server executes Google Calendar API call
# โ Response formatted and returned via MCP
# โ Ollama generates natural language response
๐ Performance
| Metric | Value |
|---|---|
| Response Time | 1-2 seconds (local LLM) |
| Memory Usage | ~4GB RAM (Llama 3.2 3B) |
| API Calls | Only for calendar sync (free tier: 1M requests/day) |
| Offline Capability | LLM works offline, calendar requires internet |
| Cost | $0/month (100% free) |
Model Comparison
| Model | Size | RAM | Speed | Quality | Use Case |
|---|---|---|---|---|---|
| llama3.2:3b | 2GB | 4GB | โกโกโก | โญโญโญโญ | Recommended |
| gemma:2b | 1.4GB | 3GB | โกโกโกโก | โญโญโญ | Faster, lower RAM |
| phi3:mini | 2.3GB | 4GB | โกโกโก | โญโญโญโญ | Better code understanding |
| mistral:7b | 4.1GB | 8GB | โกโก | โญโญโญโญโญ | Highest quality |
๐ง Project Structure
ai-calendar-assistant/
โโโ calendar_assistant/
โ โโโ mcp_server/
โ โ โโโ __init__.py
โ โ โโโ calendar_server.py # MCP server implementation
โ โโโ llm/
โ โ โโโ __init__.py
โ โ โโโ local_assistant.py # Ollama integration
โ โโโ utils/
โ โ โโโ __init__.py
โ โ โโโ google_calendar.py # Google Calendar API wrapper
โ โโโ __init__.py
โ โโโ cli.py # CLI interface
โโโ calendar_assistant.py # Main entry point
โโโ requirements.txt # Dependencies
โโโ verify_setup.py # Setup verification script
โโโ .env.example # Environment configuration template
โโโ .gitignore # Git ignore rules
โโโ README.md # This file
โโโ QUICKSTART.md # 5-minute setup guide
โโโ SETUP.md # Detailed setup instructions
โโโ LOCAL_LLM_SETUP.md # Ollama installation guide
๐ฏ MCP Tools Available
When integrated with Claude Desktop, the following tools are exposed:
| Tool | Description | Parameters |
|---|---|---|
list_events | Get upcoming calendar events | max_results, days_ahead |
get_today_events | Retrieve today's schedule | None |
create_event | Create a new calendar event | summary, start_time, end_time, description, location |
search_events | Search events by keyword | query, max_results |
update_event | Modify existing event | event_id, summary, start_time, end_time |
delete_event | Remove event from calendar | event_id |
check_availability | Check if time slot is free | start_time, end_time |
๐ Privacy & Security
- โ Local LLM - All AI processing happens on your machine
- โ OAuth2 - Secure Google authentication
- โ No Cloud LLM APIs - No data sent to OpenAI/Anthropic
- โ
Credentials Protected -
credentials.jsonandtoken.picklein.gitignore - โ Open Source - Full transparency, audit the code yourself
Data Flow:
- Your query โ Local LLM (Ollama) โ Intent extracted
- Calendar operation โ Google Calendar API (OAuth2)
- Response โ Local LLM โ Natural language response
๐ Documentation
- Quick Start Guide - Get running in 5 minutes
- Setup Guide - Detailed installation instructions
- Local LLM Setup - Ollama configuration
๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
- Ollama - Local LLM runtime
- Model Context Protocol - AI integration framework
- Google Calendar API - Calendar integration
- LangChain - LLM orchestration
- Rich - Beautiful terminal output
๐ง Contact
Othmane Zizi - othmane.zizi.pro@gmail.com
Project Link: https://github.com/othmane-zizi-pro/ai-calendar-assistant
โญ Star this repo if you found it helpful!