Skip to content

Repository files navigation

MeetScribe

License: MIT Node Platform: macOS

Record, transcribe, and extract action items from meetings - directly inside Claude Code. No subscriptions, no separate app. Bring your own API key and get structured meeting notes in seconds.

Think of it as your own Granola, running as a Claude Code plugin.

What it does

  1. Record - captures mic audio (+ system audio if BlackHole is installed) via ffmpeg
  2. Transcribe - streams to Deepgram in real time, or batch-transcribes with AssemblyAI or OpenAI Whisper
  3. Extract - MeetScribe pulls out action items, decisions, blockers, and a summary
  4. Save - writes everything to a clean markdown file in your project

One command to start, one to stop. Everything else is automatic.

Quick start

Prerequisites

  • macOS (recording uses ffmpeg's avfoundation; other platforms can still use meeting_import)
  • Node.js 18+
  • ffmpeg (brew install ffmpeg)
  • A transcription API key (any one of the three providers)

Install

# Clone the plugin
git clone https://github.com/qa-aman/meetscribe.git
cd meetscribe
npm install

# Add your API key
cp .env.example .env
# Edit .env and add your key

Connect to Claude Code

Option A - all projects (recommended). From the cloned folder, run:

npm run connect

That's it - no paths to figure out. It registers MeetScribe at user scope so it works in every project. Restart Claude Code, then verify with /mcp - meetscribe should be listed as connected.

Under the hood it runs:

claude mcp add meetscribe --scope user -- node "$(pwd)/src/index.js"

Option B - single project. Add to that project's .mcp.json with the absolute path:

{
  "mcpServers": {
    "meetscribe": {
      "command": "node",
      "args": ["/absolute/path/to/meetscribe/src/index.js"]
    }
  }
}

Either way, meeting notes always save into the project you run it from (<project>/meetscribe/), and the API key is read from the MeetScribe install directory - no per-project key setup.

Use it

You:     meeting_setup              # check prerequisites
You:     meeting_start "Sprint 14"  # start recording
         ... have your meeting ...
You:     meeting_stop               # stop, transcribe, extract, save

Your notes land in meetscribe/YYYY-MM-DD_Sprint-14/.

Tools

Tool What it does
meeting_setup Check prerequisites (ffmpeg, API keys, config)
meeting_start Start recording with a title
meeting_stop Stop recording and run the full pipeline
meeting_import Import an existing audio or transcript file
meeting_save Save extracted notes (called automatically)
meeting_list List all past meetings
meeting_config View current configuration

Transcription providers

Provider Free tier Speaker labels Streaming Languages
Deepgram (default) $200 credit Yes Yes (live) 60+
AssemblyAI $50 credit Yes No (batch) 6
OpenAI Whisper None (pay-as-you-go) No No (batch) 50+

Switch providers in meetscribe/config.yaml:

provider: assemblyai    # deepgram | assemblyai | whisper

Streaming vs batch

With Deepgram (the default), MeetScribe streams audio over WebSocket and writes the transcript in real time as you speak. meeting_stop returns extraction-ready text instantly.

For AssemblyAI and Whisper, audio is uploaded and transcribed after meeting_stop (batch mode). Streaming auto-falls-back to batch if the WebSocket connection fails.

Disable streaming explicitly in config.yaml:

streaming: false

Multi-language support

Set the language field in config.yaml:

language: en          # ISO code: en, hi, es, fr, de, ja, ...
# or
language: multi       # Deepgram auto-detects language per utterance

Import existing recordings

Already have an audio file or transcript? Import it directly:

meeting_import '/path/to/recording.m4a'
meeting_import '/path/to/transcript.txt'

Supported audio formats: .m4a, .mp3, .wav, .ogg, .flac, .aac Supported transcript formats: .txt, .srt, .vtt

Speaker mapping

Create a team.md file in your project root with your team members:

# Team

- Alice Chen - Engineering Lead
- Bob Park - Backend Developer
- Carol Liu - Product Manager

MeetScribe will map "Speaker 0", "Speaker 1" to real names using context from the conversation (who's addressed by name, who discusses what, role references).

Requirements:

  • Provider must return speaker labels - works with Deepgram and AssemblyAI, automatically skipped for Whisper
  • If team.md doesn't exist, mapping is skipped silently (no error)
  • Configure the path in meetscribe/config.yaml via team_file, or set to null to disable

Customizing extraction

Edit meetscribe/extract.md to change what gets extracted. The default template pulls:

  • Action items (owner, task, deadline)
  • Key decisions
  • Open questions and blockers
  • 3-sentence summary

System audio capture (optional)

To capture all meeting participants (not just your mic):

  1. Install BlackHole: brew install blackhole-2ch
  2. Open Audio MIDI Setup
  3. Create a Multi-Output Device combining your speakers + BlackHole

MeetScribe auto-detects BlackHole and switches to dual-capture mode.

Configuration

All config lives in meetscribe/config.yaml:

provider: deepgram          # deepgram | assemblyai | whisper
language: en                # ISO code, or "multi" for Deepgram auto-detection
streaming: true             # real-time transcription (deepgram only, auto-disabled for whisper/assemblyai)
output_dir: ./meetscribe    # where meeting folders are created
keep_audio: true            # keep audio files after transcription
extraction_prompt: ./meetscribe/extract.md
auto_extract: true          # run extraction automatically on meeting_stop
team_file: ./team.md        # path to team file, or null to skip

Safety features

  • Recordings auto-stop after 4 hours (ffmpeg hard cap)
  • Stale recording state auto-expires after 4h5m
  • Transcription API calls timeout after 5 minutes (10 min for AssemblyAI)
  • Orphaned ffmpeg processes are detected and cleaned up on restart
  • SIGKILL fallback if ffmpeg doesn't respond to graceful shutdown

Output structure

meetscribe/
  config.yaml
  extract.md
  2026-04-15_Sprint-14/
    2026-04-15_sprint-14.md     # final notes
    recording.m4a                # audio file
    transcript.txt               # raw transcript

Feedback

Found a bug? Have an idea? Want to share how you're using it?

License

MIT

Author

Aman Parmar

About

Record, transcribe, and extract action items from meetings inside Claude Code. Bring your own API key. macOS, Node 18+.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages