GranolaAI MCP Server
Bridges Granola.ai meeting intelligence with Claude Desktop, enabling natural language access to meeting transcripts, notes, and insights.
README
GranolaAI MCP Server
🎙️ AI-Powered Meeting Intelligence for Claude Desktop
An experimental Model Context Protocol (MCP) server that bridges Granola.ai meeting intelligence with Claude Desktop. Access your meeting transcripts, notes, and insights directly through natural language conversations.
✨ Features
- 🔍 Meeting Search — Search meetings by title, content, participants, and transcript content
- 📋 Meeting Details — Get comprehensive meeting metadata with local timezone display
- 📝 Full Transcript Access — Retrieve complete meeting conversations with speaker identification
- 📄 Rich Document Content — Access actual meeting notes, summaries, and structured content
- 📊 Pattern Analysis — Analyze patterns across meetings (participants, frequency, topics)
- 🌍 Timezone Intelligence — All timestamps automatically display in your local timezone
- 🔒 100% Local Processing — No external API calls; all data stays on your machine
🏗️ Architecture
flowchart TB
subgraph Client["👤 Client Layer"]
CD[Claude Desktop]
end
subgraph MCP["🔌 MCP Protocol Layer"]
MCP_STDIO[MCP stdio Transport]
end
subgraph Server["⚙️ Granola MCP Server"]
GMCS[GranolaMCPServer]
subgraph Handlers["Request Handlers"]
LIST[list_tools]
CALL[call_tool]
end
subgraph Tools["Available Tools"]
SEARCH[search_meetings]
DETAILS[get_meeting_details]
TRANSCRIPT[get_meeting_transcript]
DOCS[get_meeting_documents]
ANALYZE[analyze_meeting_patterns]
end
subgraph Cache["Cache Management"]
LOAD[_load_cache]
PARSE[_parse_cache_data]
EXTRACT[_extract_document_panel_content]
end
end
subgraph Data["💾 Data Layer"]
CACHE_FILE[(Granola Cache<br/>cache-v*.json)]
MODELS[Pydantic Models<br/>MeetingMetadata<br/>MeetingDocument<br/>MeetingTranscript]
end
CD -->|stdio| MCP_STDIO
MCP_STDIO -->|MCP Protocol| GMCS
GMCS --> LIST
GMCS --> CALL
CALL --> SEARCH
CALL --> DETAILS
CALL --> TRANSCRIPT
CALL --> DOCS
CALL --> ANALYZE
GMCS --> LOAD
LOAD --> PARSE
PARSE --> EXTRACT
PARSE -->|reads| CACHE_FILE
PARSE --> MODELS
Data Flow
sequenceDiagram
participant User as 👤 User
participant Claude as 🤖 Claude Desktop
participant Server as ⚙️ MCP Server
participant Cache as 💾 Granola Cache
User->>Claude: "Search for meetings about quarterly planning"
Claude->>Server: MCP: search_meetings(query)
Server->>Cache: Read cache file
Cache-->>Server: Raw JSON data
Server->>Server: Parse & validate with Pydantic
Server->>Server: Search across titles, participants, transcripts
Server-->>Claude: Matching meetings with metadata
Claude-->>User: Formatted meeting results
User->>Claude: "Get transcript from yesterday's meeting"
Claude->>Server: MCP: get_meeting_transcript(id)
Server->>Server: Lookup transcript in cache
Server-->>Claude: Full transcript with speakers
Claude-->>User: Readable conversation format
🛠️ Tech Stack
| Component | Technology |
|---|---|
| Language | Python 3.12+ |
| MCP SDK | mcp>=1.0.0 |
| Data Validation | Pydantic 2.x |
| Package Manager | uv (recommended) or pip |
| Build System | Hatchling |
| Release Automation | python-semantic-release |
📦 Installation
Prerequisites
- uv package manager
- macOS with Granola.ai installed
Claude Desktop
Add to your claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"granola": {
"command": "uvx",
"args": ["granola-mcp-server"]
}
}
}
Then restart Claude Desktop.
Claude Code
claude mcp add granola -- uvx granola-mcp-server
Cursor
Updating
uvx caches the package after first run. To update to the latest version:
uvx --refresh granola-mcp-server
Then restart your MCP client.
Manual installation (alternative)
If you prefer to install from source:
cd ~
git clone https://github.com/proofgeist/granola-mcp-server
cd granola-mcp-server
uv sync
Then configure your MCP client to run the server directly:
{
"mcpServers": {
"granola": {
"command": "uv",
"args": ["--directory", "/Users/YOUR_USERNAME/granola-mcp-server", "run", "granola-mcp-server"]
}
}
}
To update a source install: git pull && uv sync
pip (alternative)
pip install granola-mcp-server
Then configure your MCP client to run granola-mcp-server.
Environment Variables
| Variable | Description | Default |
|---|---|---|
GRANOLA_PARSE_PANELS |
Enable parsing of document panels for rich notes | 1 (enabled) |
TZ |
Override local timezone detection | Auto-detected |
Set GRANOLA_PARSE_PANELS=0 to disable document panel parsing if you encounter issues.
🚀 Usage
Once configured, restart Claude Desktop and start interacting with your Granola meetings using natural language:
Search & Discovery
- "Search for meetings about quarterly planning"
- "Show me yesterday's meetings"
- "Find meetings with David from this week"
- "List all my recent standup meetings"
Transcript Access
- "Get the transcript from yesterday's IA meeting"
- "What was discussed in the Float rollback planning meeting?"
- "Show me the full conversation from the David Tanner meeting"
Content Analysis
- "Analyze participant patterns from last month"
- "What documents are associated with the product review meeting?"
- "Search for mentions of 'schema labeling' in meeting transcripts"
Available Tools
| Tool | Description | Parameters |
|---|---|---|
search_meetings |
Search meetings by title, content, participants | query (string), limit (int, optional) |
get_meeting_details |
Get detailed information about a meeting | meeting_id (string) |
get_meeting_transcript |
Get full transcript with speaker identification | meeting_id (string) |
get_meeting_documents |
Get documents and notes associated with a meeting | meeting_id (string) |
analyze_meeting_patterns |
Analyze patterns across meetings | pattern_type (enum: topics/participants/frequency), date_range (optional) |
🧪 Development
Running Tests
# Run panel parsing test
uv run python test_server.py
# Test with real cache file
uv run python test_real_cache.py
Running the Server Directly
uv run granola-mcp-server
Or using the run script:
uv run python run_server.py
Project Structure
granola-mcp-server/
├── granola_mcp_server/
│ ├── __init__.py # Package initialization
│ ├── server.py # Main MCP server implementation (~750 lines)
│ └── models.py # Pydantic data models
├── .github/
│ └── workflows/
│ └── release.yml # Semantic release automation
├── tests/
│ ├── test_server.py # Unit tests with synthetic cache
│ └── test_real_cache.py # Integration tests with real data
├── pyproject.toml # Python package configuration + semantic-release config
├── run_server.py # Entry point wrapper
├── INSTALL.md # Detailed installation guide
├── LICENSE # MIT License
└── README.md # This file
🔒 Security & Privacy
| Feature | Status |
|---|---|
| 100% Local Processing | ✅ All data stays on your machine |
| No External API Calls | ✅ No data sent to external services |
| Granola Permissions Respected | ✅ Uses existing Granola.ai access controls |
| Read-Only Access | ✅ Server only reads from Granola's cache |
📊 Performance
- Fast Loading: Sub-2 second cache loading for hundreds of meetings
- Rich Content: Extracts 25,000+ character transcripts and meeting notes
- Efficient Search: Multi-field search across titles, content, participants, and transcripts
- Memory Optimized: Lazy loading with intelligent content parsing
- Production Ready: Successfully processes real Granola data (11.7MB cache files)
- Scalable: Handles large datasets with 500+ transcript segments per meeting
🐛 Troubleshooting
Common Issues
"Cache file not found"
# Ensure Granola.ai is installed and has processed some meetings
ls -la ~/Library/Application\ Support/Granola/cache-v*.json
"uv command not found"
# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
Server not appearing in Claude Desktop
- Check Claude Desktop logs:
~/Library/Logs/Claude/mcp-server-granola.log - Restart Claude Desktop after config changes
Meeting notes appear empty
- Granola sometimes stores rich notes inside
documentPanelsrather thannotes_plain - This server reads those panels by default; set
GRANOLA_PARSE_PANELS=0to disable
Manual installation issues
These apply only if you installed from source (git clone) rather than via uvx.
"Permission denied" or "Operation not permitted"
- This happens when the server is installed in
~/Documentsor other protected macOS folders - Move the installation to your home directory:
Then update the path inmv ~/Documents/granola-mcp-server ~/granola-mcp-server cd ~/granola-mcp-server uv syncclaude_desktop_config.json - Or grant Claude Desktop Full Disk Access in System Settings > Privacy & Security
"Current directory does not exist"
- This error occurs when using
uv runwith the--directoryflag - Ensure the path in your Claude config points to the actual clone location
"Failed to spawn process" or "No such file or directory"
- Run
uv syncin the project directory to rebuild the venv - Verify the script exists:
ls -la ~/granola-mcp-server/.venv/bin/granola-mcp-server
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please ensure your code follows the existing style and includes appropriate tests.
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
Copyright (c) 2025 Proof+Geist
🙏 Acknowledgments
- Granola.ai for the amazing meeting intelligence app
- Anthropic for Claude and the Model Context Protocol
- Astral for the uv package manager
⚠️ Disclaimer: This is an experimental project. Granola's cache format may change without notice. Use at your own risk.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。