Metadata-Version: 2.4
Name: granola-mcp
Version: 0.1.0
Summary: MCP server for Granola meeting notes and transcripts
Project-URL: Homepage, https://github.com/Primary-OS/granola-mcp
Project-URL: Issues, https://github.com/Primary-OS/granola-mcp/issues
Author: Primary Venture Partners
License: MIT
License-File: LICENSE
Keywords: claude,granola,mcp,meetings,transcripts
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: MacOS
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.10
Requires-Dist: mcp>=1.0.0
Requires-Dist: requests>=2.28.0
Description-Content-Type: text/markdown

# granola-mcp

MCP server for accessing [Granola](https://granola.so) meeting notes and transcripts in Claude.

## Requirements

- macOS (Granola is macOS-only)
- [Granola](https://granola.so) desktop app installed and logged in
- [uv](https://docs.astral.sh/uv/) for running the server

## Quick Start

### One-Line Install

```bash
curl -fsSL https://raw.githubusercontent.com/Primary-OS/granola-mcp/main/install.sh | bash
```

Then restart Claude Desktop.

### Manual Install

#### 1. Install uv (if needed)

```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```

#### 2. Configure Claude Desktop

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "granola": {
      "command": "uvx",
      "args": ["granola-mcp"]
    }
  }
}
```

#### 3. Restart Claude Desktop

## Tools

| Tool | Description |
|------|-------------|
| `find_recent_meetings` | List recent meetings with metadata |
| `search_meetings` | Search by title, attendee, or content |
| `get_transcript` | Get full meeting transcript |

## Usage Examples

Once installed, ask Claude:

- "What meetings did I have this week?"
- "Get the transcript from my call with [company]"
- "Search my meetings for discussions about pricing"
- "Summarize my meeting with John from yesterday"

## How It Works

This server reads authentication tokens from Granola's local config file:
`~/Library/Application Support/Granola/supabase.json`

If tokens are expired, it automatically opens Granola.app to refresh them.

## Troubleshooting

**"Granola config not found"**
- Make sure Granola is installed and you've logged in at least once

**"Token expired and auto-refresh failed"**
- Open Granola.app manually, then try again

**Server not appearing in Claude**
- Check that uvx is in your PATH: `which uvx`
- Restart Claude Desktop completely (quit and reopen)
- Check the Claude Desktop logs for errors

## Development

```bash
# Clone and install
git clone https://github.com/Primary-OS/granola-mcp
cd granola-mcp

# Run locally
uv run python -m granola_mcp

# Test with Claude Desktop (local dev)
# Add to claude_desktop_config.json:
{
  "mcpServers": {
    "granola-dev": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/granola-mcp", "python", "-m", "granola_mcp"]
    }
  }
}
```

## License

MIT
