npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

apple-voice-memos-mcp

v2.0.2

Published

MCP server for Apple Voice Memos on macOS — AssemblyAI diarization, whisper.cpp fallback, auto-saved transcripts, bundled app + one-command setup

Readme

apple-voice-memos-mcp

MCP server for Apple Voice Memos (Memo Vocali) on macOS — with speaker diarization (AssemblyAI), whisper.cpp fallback, auto-saved transcripts and a one-command setup.

Quick start

1. Add to your MCP config

{
  "mcpServers": {
    "apple-voice-memos": {
      "command": "npx",
      "args": ["apple-voice-memos-mcp"],
      "env": {
        "ASSEMBLYAI_API_KEY": "your-assemblyai-key"
      }
    }
  }
}

AssemblyAI is optional but recommended: it provides speaker diarization. Without a key, transcription falls back to whisper.cpp (local, no diarization). You can also put the key in ~/Library/apple-voice-memos-mcp/config.json instead of env: {"assemblyai": {"apiKey": "..."}}

2. First run — auto setup

npx apple-voice-memos-mcp --setup

The setup:

  1. Installs the bundled app — VoiceMemosMCP.app ships inside the npm package (pre-built, pre-signed, self-contained: no compilation, no Homebrew node dependency). It is extracted to ~/Library/apple-voice-memos-mcp/.
  2. Registers the LaunchAgent daemon — a small TCP daemon (127.0.0.1:8917) that spawns the MCP server per-connection inside the app, so it inherits the Full Disk Access.
  3. Opens the Full Disk Access panel automatically and waits for you — poll every 5s and confirms the moment you grant it.

The only manual step macOS requires: drag VoiceMemosMCP.app into Full Disk Access (~10 seconds, once). This is a hard macOS privacy requirement for Voice Memos data — no MCP can bypass it.

3. Use it

Restart your MCP client (or /reload). Tools:

| Tool | Description | |---|---| | list_voice_memos | list memos (limit/offset/search) | | get_voice_memo | full metadata of one memo | | get_audio | audio file (path or base64) | | get_transcript | Apple's embedded transcript, if present | | transcribe_memo | full transcription with diarization, auto-saved |

Transcription pipeline

transcribe_memo uses the first available provider:

  1. AssemblyAI (if ASSEMBLYAI_API_KEY set) → speaker-labeled transcript (utterances with speaker, text, timestamps)
  2. whisper.cpp (fallback, local) → plain transcript with timestamps (needs brew install whisper-cpp + model, see below)
  3. Apple SFSpeechRecognizer helper (legacy, VOICE_MEMO_TRANSCRIBER_PATH)

Results are auto-saved in the transcripts folder as:

  • YYYY-MM-DD - <title> (id-N).md — readable diarized transcript
  • YYYY-MM-DD - <title> (id-N).json — structured utterances

Pass "noSave": true to skip saving. Default folder: ~/Documents/VoiceMemosTranscripts (change via VOICE_MEMOS_TRANSCRIPTS_DIR env or config.json → transcripts.dir).

whisper.cpp fallback setup (optional)

brew install whisper-cpp
mkdir -p ~/.cache/whisper.cpp
curl -L -o ~/.cache/whisper.cpp/ggml-small.bin \
  https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.bin

Configuration reference

~/Library/apple-voice-memos-mcp/config.json:

{
  "assemblyai": { "apiKey": "..." },
  "transcripts": { "dir": "~/Documents/VoiceMemosTranscripts" },
  "whisper": { "cliPath": "/opt/homebrew/bin/whisper-cli", "modelPath": "~/.cache/whisper.cpp/ggml-small.bin" }
}

Environment variables (higher precedence): ASSEMBLYAI_API_KEY, VOICE_MEMOS_TRANSCRIPTS_DIR, VOICE_MEMO_TRANSCRIBER_PATH.

Status & troubleshooting

npx apple-voice-memos-mcp --status
  • "unable to open database file" → Full Disk Access missing: run npx apple-voice-memos-mcp --setup (it reopens the panel)
  • daemon not running → launchctl load ~/Library/LaunchAgents/it.otomatik.voicememosmcp.plist
  • after a package update the permission is lost → new app version = new code signature; re-run --setup and re-grant once

Why the daemon + bundled app?

macOS TCC evaluates the responsible process for privacy checks. A plain node child of your MCP client inherits the client's permissions (none for Voice Memos). The LaunchAgent runs the server inside the signed, user-authorized VoiceMemosMCP.app, which makes the permission stick reliably.

Requirements

  • macOS 14+ (Voice Memos opened at least once)
  • Node.js 18+ (any version — the daemon app ships its own runtime)
  • Xcode CLT not required (launcher is prebuilt in the package)

Credits

Server core forked from jwulff/apple-voice-memo-mcp, with:

  • Node 26 compatibility fix (better-sqlite3 13, prebuilds)
  • TCC/LaunchAgent architecture with bundled pre-signed app
  • AssemblyAI diarization + whisper.cpp fallback + transcript auto-save

License

MIT