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.
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 existsvoicemail_transcript_fetch— the transcript of one message: flattened text plus per-segment text and confidencevoicemail_audio_fetch— the audio of one message (audio/amrfor carrier voicemail,audio/mp4for FaceTime audio messages)Where the data lives (verified on a live Mac with a populated store)
On macOS 26+, the
facetimemessagestoreddaemon mirrors carrier and FaceTime voicemails into a CoreData store atZSTOREDMESSAGEtable:ZFROM(sender),ZDATECREATED,ZDURATION,ZISREAD,ZMESSAGETYPE,ZMAILBOXTYPE,ZTRANSCRIPTIONSTATUS,ZDATEDELETED, and friends.ZTRANSCRIPTblobs:NSKeyedArchiver-encoded binary plists holding either aVMVoicemailTranscript(transcriptionString,confidence,confidenceRating,segments) or an array of segment dictionaries (text,confidence).Assetstree 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'sZRECORDUUID.Implementation notes
PhoneServiceinServerController.services, gated on the store's existence, so Macs without the macOS 26+ Phone app are unaffected.Data Storefolder when the default path isn't readable (the write-ahead log and theAssetstree sit beside the database, so the grant has to cover the folder).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.