# whosaid

Transcribes recordings with speaker diarization locally on Apple Silicon and searches meeting transcripts without sending audio to the cloud.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 6
- Author: sblattj
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/sblattj/whosaid
- Updated: 2026-10-23
- HTML: https://affpapa.org/en/nevibecode/mcp/whosaid

## What it does

The server pairs Whisper speech-to-text with on-device speaker diarization. Instead of returning raw walls of text, it breaks down calls, meetings, or interviews into timed turns attributed to distinct people. An initial voice enrollment allows assigning actual human names instead of generic identifiers, keeping voiceprints in a private registry across future audio runs.

Exposing the tool through MCP gives an assistant access to transcription, speaker relabeling, environment checks, and search across recorded workspace transcripts. Diarization processes audio longer than 15 minutes across parallel slices, keeping processing fast. Everything runs offline: network requests to Anthropic happen solely if Claude is deliberately specified as the transcript summarization engine in the configuration.

The tool functions strictly on Apple Silicon Macs and stops if it cannot locate FFmpeg alongside Python 3.11 or newer.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `WHOSAID_WORKSPACE` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env WHOSAID_WORKSPACE=<WHOSAID_WORKSPACE> --transport stdio whosaid -- uvx whosaid
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from whosaid <command>

### Codex

**Platform CLI**
```bash
codex mcp add whosaid --env WHOSAID_WORKSPACE=<WHOSAID_WORKSPACE> -- uvx whosaid
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from whosaid <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "whosaid": {
            "command": "uvx",
            "args": [
                "whosaid"
            ],
            "env": {
                "WHOSAID_WORKSPACE": "<WHOSAID_WORKSPACE>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from whosaid <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "whosaid": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "whosaid"
            ],
            "env": {
                "WHOSAID_WORKSPACE": "<WHOSAID_WORKSPACE>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from whosaid <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e WHOSAID_WORKSPACE=<WHOSAID_WORKSPACE> whosaid uvx whosaid
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from whosaid <command>

## When to use it
- separate meeting audio into turns labeled by speaker
- search previous call transcripts for commitments and context
- transcribe recorded audio fully offline on Apple Silicon
- recognize enrolled voices and assign real names to dialogue lines

## Example prompts
- Transcribe `meeting.m4a` and list all speakers with their timestamps.
- Search the meeting index for any mentions of launch deadlines.
- Relabel `SPEAKER_01` in the latest transcript as Alex.

## Similar
- [MCP Toolbox for Databases](https://affpapa.org/en/nevibecode/mcp/googleapis-mcp-toolbox-for-databases.md) — MCP server · ★ 16730
- [labelhead-artist-momentum](https://affpapa.org/en/nevibecode/mcp/labelhead-artist-momentum.md) — MCP server · ★ 107701
- [Agent Skills Search Server](https://affpapa.org/en/nevibecode/mcp/agent-skills-search-server.md) — MCP server · ★ 26673
- [Skyvern](https://affpapa.org/en/nevibecode/mcp/skyvern.md) — MCP server · ★ 23283
- [Nhost](https://affpapa.org/en/nevibecode/mcp/nhost.md) — MCP server · ★ 9369
- [PraisonAI](https://affpapa.org/en/nevibecode/mcp/praisonai.md) — MCP server · ★ 9298

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
