Skip to main content
Glama
NimbleBrainInc

Granola MCP Server

README.md
> [!WARNING]
> **This repository is archived and no longer maintained.**
>
> This MCP server has been removed from the [mpak registry](https://mpak.dev). Granola now provides a native remote MCP endpoint — use that instead.

---

# Granola MCP Server

[![CI](https://github.com/NimbleBrainInc/mcp-granola/actions/workflows/ci.yml/badge.svg)](https://github.com/NimbleBrainInc/mcp-granola/actions/workflows/ci.yml)
[![Python 3.13+](https://img.shields.io/badge/python-3.13%2B-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
[![MCPB](https://img.shields.io/badge/mcpb-v0.3-purple.svg)](https://github.com/modelcontextprotocol/mcpb)
[![mpak](https://img.shields.io/badge/mpak-@nimblebraininc/granola-orange.svg)](https://mpak.dev)

MCP server for searching your local [Granola](https://granola.ai) meeting notes.

- Search across notes, titles, and AI summaries
- Filter by date range or attendee
- Pull transcripts when available
- Read AI panels (summaries, action items) when available
- Supports Granola cache v3 through v6
- Reloads automatically when Granola updates its cache

## Installation

### With mpak

```bash
mpak bundle run @nimblebraininc/granola
```

### Local Development

```bash
uv sync --dev
uv run python -m mcp_granola.server
```

## Tools

| Tool                | Description                                                 |
| ------------------- | ----------------------------------------------------------- |
| `search_meetings`   | Search notes by keyword with optional date/attendee filters |
| `get_meeting`       | Get full meeting details including notes and AI panels      |
| `list_meetings`     | List meetings with pagination and filtering                 |
| `search_by_person`  | Find all meetings with a specific person                    |
| `get_transcript`    | Get transcript segments with timestamps                     |
| `get_meeting_stats` | Get statistics about your meeting data                      |

## Data Source

Auto-detects the newest Granola cache file (`cache-v6.json` through `cache-v3.json`) from `~/Library/Application Support/Granola/` (macOS only). Cached in memory, reloads when the file changes.

## Development

```bash
make check          # Run all checks (format, lint, typecheck, test)
make test           # Run tests
make test-cov       # Run tests with coverage
make format         # Format code
make lint           # Lint code
make typecheck      # Type check with ty
```

## License

MIT

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation3/5

Most tools are distinct, but `list_meetings` and `search_by_person` both return lists of meetings with attendee filters, creating potential confusion. Descriptions help differentiate but overlap exists.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., `list_meetings`, `get_meeting`, `search_meetings`). No mixed conventions or vague verbs.

Tool Count5/5

8 tools is well-scoped for a meeting notes query server. Each tool serves a clear purpose without unnecessary bloat or insufficiency.

Completeness4/5

Covers core querying needs: retrieve, list, search, summarize, extract action items, stats. Missing update/delete (likely out of scope) and a combined view of all action items, but minor gaps agents can work around.

Maintenance

ActivityInactive
ResponsivenessNo issues