Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"granola": {
"args": [
"granola-mcp-server"
],
"command": "uvx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
🎙️ AI-Powered Meeting Intelligence for Claude Desktop
Run this in your terminal to verify the server starts. Then let us know if it worked — your result helps other developers.
uvx 'granola-mcp-server' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
Checked granola-mcp-server against OSV.dev.
Click any tool to inspect its schema.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in productivity / ai-ml
Persistent memory using a knowledge graph
Dynamic problem-solving through sequential thought chains
Workspace template + MCP server for Claude Code, Codex CLI, Cursor & Windsurf. Multi-agent knowledge engine (ag-refresh / ag-ask) that turns any codebase into a queryable AI assistant.
mini cli search engine for your docs, knowledge bases, meeting notes, whatever. Tracking current sota approaches while being all local
MCP Security Weekly
Get CVE alerts and security updates for Granola Mcp Server and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
🎙️ 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.
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
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
| 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 |