Skip to content

Feature request: Visual Voicemail service (list, transcripts, and audio for carrier and FaceTime voicemails) #252

Description

@bradhallett

Is your feature request related to a problem? Please describe.

macOS 26 ships a Phone app that syncs iPhone voicemail to the Mac. iMCP's Phone service exposes call history, but MCP clients currently have no way to see voicemails: who left them, when, their transcripts, or the audio itself. Anything voicemail-related still requires picking up the phone.

Describe the solution you'd like

A new Voicemail service with three read-only tools:

  • voicemails_fetch — list voicemail messages: sender, date, duration, read/unread, type (carrier voicemail / FaceTime audio message / FaceTime video message), and whether a transcript exists
  • voicemail_transcript_fetch — the transcript of one message: flattened text plus per-segment text and confidence
  • voicemail_audio_fetch — the audio of one message (audio/amr for carrier voicemail, audio/mp4 for FaceTime audio messages)

Where the data lives (verified on a live Mac with a populated store)

On macOS 26+, the facetimemessagestored daemon mirrors carrier and FaceTime voicemails into a CoreData store at

~/Library/Group Containers/group.com.apple.FaceTime/com.apple.facetimemessagestored/Data Store/FaceTimeMessageStore-local.sqlitedb
  • Voicemails are rows of the ZSTOREDMESSAGE table: ZFROM (sender), ZDATECREATED, ZDURATION, ZISREAD, ZMESSAGETYPE, ZMAILBOXTYPE, ZTRANSCRIPTIONSTATUS, ZDATEDELETED, and friends.
  • Transcripts are inline ZTRANSCRIPT blobs: NSKeyedArchiver-encoded binary plists holding either a VMVoicemailTranscript (transcriptionString, confidence, confidenceRating, segments) or an array of segment dictionaries (text, confidence).
  • Audio assets live in an Assets tree beside the database: Assets/<first two hex digits>/<UUID>.amr (carrier voicemail, GSM AMR), .../<UUID>.m4a (FaceTime audio message), and .../<UUID>.MOV (FaceTime video message), where <UUID> is the row's ZRECORDUUID.

Implementation notes

  • Register beside PhoneService in ServerController.services, gated on the store's existence, so Macs without the macOS 26+ Phone app are unaffected.
  • Follow the Phone/Messages access pattern: read-only SQLite with an immutable-URI fallback, plus a folder grant on the Data Store folder when the default path isn't readable (the write-ahead log and the Assets tree sit beside the database, so the grant has to cover the folder).
  • First version reads the live store only. Reading voicemail out of unencrypted iPhone backups (Library/Voicemail/voicemail.db) could be a follow-up for Macs that don't run the Phone app.

I'd be happy to put together a PR for this.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions