Meeting Chief Lite
# Meeting Chief Lite
Minimal meeting transcript sync and search MCP. Downloads meetings from Otter.ai, stores them in SQLite, and provides semantic search via MCP tools.
## Features
- **Otter.ai Sync**: Download meeting transcripts automatically
- **Semantic Search**: Find relevant transcript chunks using embeddings
- **Keyword Search**: Fallback for exact text matching
- **MCP Tools**: 3 focused tools for Claude/Cursor integration
## Tools
| Tool | Description |
|------|-------------|
| `meetings` | List, get, and browse meeting transcripts |
| `search` | Semantic and keyword search across transcripts |
| `status` | System health, sync status, and management |
## Quick Start
### 1. Configure Environment
```bash
cp .env.example .env
# Edit .env with your credentials:
# - OTTER_EMAIL
# - OTTER_PASSWORD
# - OPENROUTER_API_KEY
```
### 2. Run with Docker
```bash
# Build and run
docker compose up -d
# Or run directly
docker run -it \
-e OTTER_EMAIL=your@email.com \
-e OTTER_PASSWORD=yourpassword \
-e OPENROUTER_API_KEY=sk-or-v1-xxx \
-v meeting-chief-data:/data \
ghcr.io/smcdonnell7/meeting-chief-lite
```
### 3. Configure MCP Client
**Cursor (`~/.cursor/mcp.json`):**
```json
{
"mcpServers": {
"meeting-chief-lite": {
"command": "docker",
"args": ["run", "-i", "--rm",
"-e", "OTTER_EMAIL",
"-e", "OTTER_PASSWORD",
"-e", "OPENROUTER_API_KEY",
"-v", "meeting-chief-data:/data",
"ghcr.io/smcdonnell7/meeting-chief-lite"
]
}
}
}
```
**Claude Desktop (`~/Library/Application Support/Claude/claude_desktop_config.json`):**
```json
{
"mcpServers": {
"meeting-chief-lite": {
"command": "docker",
"args": ["run", "-i", "--rm",
"-e", "OTTER_EMAIL=your@email.com",
"-e", "OTTER_PASSWORD=yourpassword",
"-e", "OPENROUTER_API_KEY=sk-or-v1-xxx",
"-v", "meeting-chief-data:/data",
"ghcr.io/smcdonnell7/meeting-chief-lite"
]
}
}
}
```
## Usage Examples
```
# List recent meetings
meetings operation:list limit:10
# Get specific meeting
meetings operation:get id:meeting_123
# Search transcripts
search query:"API migration" mode:semantic
# Search with date filter
search query:"budget" after:2026-01-01
# Check system status
status operation:health
# Sync from Otter.ai
status operation:run_sync sync_days:30
# Generate embeddings for new meetings
status operation:generate_embeddings
```
## Database
SQLite database with 7 tables:
- `meetings` - Meeting metadata and transcripts
- `transcript_chunks` - Parsed transcript segments
- `transcript_vectors` - Embeddings for semantic search
- `embedding_jobs` - Embedding generation queue
- `sync_runs` - Sync audit log
- `speakers` - People roster
- `app_settings` - Configuration
## Development
```bash
# Install dependencies
npm install
# Build
npm run build
# Run locally
npm start
```
## License
MIT
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose with no overlap: 'meetings' handles browsing and retrieving transcripts, 'search' focuses on finding content within transcripts, and 'status' manages system health and operations. The descriptions clearly differentiate these domains, eliminating any ambiguity for agent selection.
All tool names follow a consistent, simple noun-based pattern ('meetings', 'search', 'status') that is readable and predictable. There are no deviations in style or convention, making the set easy to navigate and understand.
With 3 tools, the count is slightly low but reasonable for a 'lite' server focused on meeting transcripts. It covers core operations (browse, search, status), though it might benefit from additional tools for actions like updating or deleting data, but it's well-scoped for its apparent purpose.
The tool set provides good coverage for browsing, searching, and managing meeting transcripts, with no obvious dead ends. Minor gaps exist, such as lack of explicit update or delete operations for transcripts, but agents can likely work around this given the server's focus on retrieval and search.