Offline meeting transcription for macOS — auto-detects meetings, transcribes locally, saves to Claude Desktop via MCP
Project description
trnscrb
Lightweight, fully offline meeting transcription for Claude Desktop. A native macOS alternative to Granola — no cloud, no subscription.
What it does
- Auto-detects meetings (Google Meet, Zoom, Slack Huddle, Teams, and more)
- Records your meeting audio (mic + system audio via BlackHole)
- Transcribes locally with Whisper (
smallmodel, Apple Silicon Metal) - Identifies speakers with pyannote diarization
- Reads your calendar to auto-name meetings
- Saves every transcript as a plain
.txtfile in~/meeting-notes/ - Exposes everything to Claude Desktop via MCP so Claude can search, read, and enrich your notes
Requirements
- macOS 13+
- Python 3.11+
- Apple Silicon recommended (M1/M2/M3) for fast local transcription
Install
# One-liner bootstrap:
bash <(curl -fsSL https://raw.githubusercontent.com/ajayrmk/trnscrb/main/install.sh)
# Or if already cloned:
trnscrb install
The installer checks and optionally installs:
- BlackHole 2ch audio driver (via Homebrew)
- Python packages (faster-whisper, pyannote, rumps, sounddevice, mcp, …)
- HuggingFace token (for pyannote speaker diarization)
- Whisper
smallmodel (~500 MB, downloaded once) - Claude Desktop MCP config entry
- Launch-at-login agent
Usage
Menu bar app
trnscrb start
A mic icon appears in your menu bar with Auto-transcribe on by default — it will automatically start and stop transcribing when it detects a meeting.
Or manually: click → Start Transcribing / Stop Transcribing.
From Claude Desktop
Once the MCP server is configured (done by trnscrb install), Claude has access to:
| Tool | What it does |
|---|---|
start_recording |
Begin capturing audio |
stop_recording |
Stop, transcribe, save |
recording_status |
Check progress |
get_last_transcript |
Most recent transcript |
list_transcripts |
All saved meetings |
get_transcript |
Full text of one meeting |
get_calendar_context |
Current calendar event |
enrich_transcript |
Summary + action items via Claude API |
CLI
trnscrb list # list all transcripts
trnscrb show <id> # print a transcript
trnscrb enrich <id> # run Claude LLM pass (needs ANTHROPIC_API_KEY)
trnscrb mic-status # live mic activity monitor (debug)
trnscrb devices # list audio input devices
System audio (BlackHole setup)
After installing BlackHole:
- Open Audio MIDI Setup (Spotlight → "Audio MIDI Setup")
- Click + → Create Multi-Output Device
- Check both BlackHole 2ch and MacBook Pro Speakers
- Go to System Settings → Sound → Output → select the Multi-Output Device
Transcript format
Meeting: Weekly Standup
Date: 2024-01-15 10:00
Duration:23:14
============================================================
[SPEAKER_00]
00:12 Good morning everyone, let's get started.
[SPEAKER_01]
00:18 Morning! I finished the auth PR yesterday.
After running trnscrb enrich <id>, speaker labels are replaced with inferred names
and a summary + action items block is appended.
Privacy
All audio processing happens on your device. No data leaves your machine except:
- If you run
enrich, the transcript text is sent to Claude API (Anthropic) - Calendar access uses AppleScript locally — no network calls
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file trnscrb-0.1.0.tar.gz.
File metadata
- Download URL: trnscrb-0.1.0.tar.gz
- Upload date:
- Size: 26.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35f8cd251f7fa003f66d80188b8119db49427f39656b894b30c521c995387e3e
|
|
| MD5 |
da2262d99012e61709d78599b42436fc
|
|
| BLAKE2b-256 |
9d163b7850876b6c66da58cdc8cd6c0f73704ef09567adf0a2ec3c351882a250
|
File details
Details for the file trnscrb-0.1.0-py3-none-any.whl.
File metadata
- Download URL: trnscrb-0.1.0-py3-none-any.whl
- Upload date:
- Size: 29.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
972fef1f927dafe98e0c77107207d6544251ae6ce12daad8ccf102e8d2a3a72b
|
|
| MD5 |
54b2c22c942ba78b259c75543744f5ac
|
|
| BLAKE2b-256 |
96025e6f4552f22fb85d7fa96266b6c4241bbce5cac408bc4f543d2e0414d507
|