← Discover MCPs and Agents
m
MCPAI & MLGitHub

meetscribe

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

Links

README

From the repo.

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

ToolWhat it does
meeting_setupCheck prerequisites (ffmpeg, API keys, config)
meeting_startStart recording with a title
meeting_stopStop recording and run the full pipeline
meeting_importImport an existing audio or transcript file
meeting_saveSave extracted notes (called automatically)
meeting_listList all past meetings
meeting_configView current configuration

Transcription providers

ProviderFree tierSpeaker labelsStreamingLanguages
Deepgram (default)$200 creditYesYes (live)60+
AssemblyAI$50 creditYesNo (batch)6
OpenAI WhisperNone (pay-as-you-go)NoNo (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

Collected info

  • 3 stars
  • Language: JavaScript
  • Source updated: 6/14/2026

Config for your environment

Replace {MCP_ENDPOINT_URL} with this MCP’s endpoint URL (from its repo or docs above). No API key — you connect directly.

Tool

OS

Config file: ~/.cursor/mcp.json

{
  "mcpServers": {
    "mcp-server": {
      "url": "{MCP_ENDPOINT_URL}"
    }
  }
}

Paste into mcpServers in the config file. Restart Cursor after saving.

If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.