Apple Voice Memo MCP Server
Provides programmatic access to Apple Voice Memos, enabling listing, retrieving details, audio, and transcripts of voice memos, as well as transcribing memos using Apple's SFSpeechRecognizer.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Apple Voice Memo MCP Serverlist my last 10 voice memos"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Apple Voice Memo MCP Server
An MCP (Model Context Protocol) server that provides programmatic access to Apple Voice Memos on macOS. Use this to let Claude and other AI assistants interact with your voice recordings.
Pairs well with whisper-mcp for local transcription.
Features
List voice memos - Browse all your voice memos with metadata
Get memo details - Retrieve detailed information about specific recordings
Get audio - Access the audio file path or base64-encoded audio data
Get transcripts - Extract transcripts from memos (stored by Apple in the audio file)
Transcribe memos - Generate transcripts using Apple's SFSpeechRecognizer
Related MCP server: macwhisper-mcp-server
Requirements
macOS Sonoma (14.0) or later (Sequoia recommended for transcription)
Node.js 18+
Full Disk Access permission (for accessing Voice Memos data)
Voice Memos app must have been opened at least once
Installation
npm install -g apple-voice-memo-mcpOr use directly with npx:
npx apple-voice-memo-mcpConfiguration
Claude Desktop
Add to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"apple-voice-memo-mcp": {
"command": "npx",
"args": ["-y", "apple-voice-memo-mcp"]
}
}
}After editing, restart Claude Desktop.
Claude Code (CLI)
For Claude Code, add to your project's .mcp.json file:
{
"mcpServers": {
"apple-voice-memo-mcp": {
"command": "npx",
"args": ["-y", "apple-voice-memo-mcp"]
}
}
}Or for user-wide configuration, add to ~/.claude/settings.json:
{
"mcpServers": {
"apple-voice-memo-mcp": {
"command": "npx",
"args": ["-y", "apple-voice-memo-mcp"]
}
}
}Tip: Use /mcp in Claude Code to verify the server is connected.
Local Development Setup
If running from source instead of npm:
{
"mcpServers": {
"apple-voice-memo-mcp": {
"command": "node",
"args": ["/path/to/apple-voice-memo-mcp/dist/index.js"]
}
}
}Permissions
Full Disk Access: Required to read the Voice Memos database
Go to System Settings > Privacy & Security > Full Disk Access
Add your terminal app or Claude Desktop
Speech Recognition (for transcription):
Required only if using the
transcribe_memotoolSystem will prompt when first used
MCP Tools
list_voice_memos
List all voice memos with metadata.
Parameters:
limit(optional): Maximum number of results (1-100, default: 50)offset(optional): Pagination offsetsearch(optional): Search term to filter by title
Example response:
{
"memos": [
{
"id": 1,
"title": "Meeting Notes",
"date": "2025-01-07T10:30:00.000Z",
"duration": 120.5,
"hasTranscript": true
}
],
"total": 15
}get_voice_memo
Get detailed metadata for a specific memo.
Parameters:
id(required): Memo ID
get_audio
Retrieve the audio file.
Parameters:
id(required): Memo IDformat(optional): "path" or "base64" (default: "path")
get_transcript
Extract transcript from a memo.
Parameters:
id(required): Memo IDformat(optional): "text", "json", or "timestamped"
transcribe_memo
Transcribe a memo using SFSpeechRecognizer.
Parameters:
id(required): Memo IDlanguage(optional): Language code (default: "en-US")
How It Works
Data Access
Voice Memos data is stored in:
Database:
~/Library/Group Containers/group.com.apple.VoiceMemos.shared/Recordings/CloudRecordings.dbAudio files: Same directory,
.m4aformat
Transcript Storage
Apple stores transcripts directly inside the .m4a audio files using a custom MPEG-4 atom called tsrp. This MCP server parses these atoms to extract transcripts - no separate transcript files exist.
Development
# Clone the repository
git clone https://github.com/jwulff/apple-voice-memo-mcp.git
cd apple-voice-memo-mcp
# Install dependencies
npm install
# Build
npm run build
# Run in development
npm run dev
# Test with MCP inspector
npm run inspectorTroubleshooting
"Voice Memos database not found"
Ensure you've opened the Voice Memos app at least once
Grant Full Disk Access to your terminal/application
Check if iCloud sync is enabled for Voice Memos
"No transcript available"
On macOS Sequoia+, open the memo in Voice Memos app to trigger automatic transcription
Older macOS versions don't have automatic transcription
Use the
transcribe_memotool to generate a transcript via SFSpeechRecognizer
Native module binding errors
If you see errors about missing better_sqlite3.node bindings:
npm rebuild better-sqlite3This recompiles the native module for your current Node.js version.
License
MIT
Available Tools
5 toolsget_audioA
Retrieve the audio file for a voice memo. Can return either the file path or base64-encoded audio data.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the voice memo | |
| format | No | Output format: 'path' returns file path, 'base64' returns encoded audio (default: path) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description reveals the key behavioral trait of offering two output formats. It implies a read-only operation but does not explicitly state it as such.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff, front-loading the core action and output options.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter tool with no output schema, the description covers the essential functionality. Missing error handling or behavior for invalid IDs, but still adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers both parameters fully. The description merely restates the format parameter's purpose, adding no new meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves audio for a voice memo and can return either a file path or base64-encoded data. It distinguishes itself from siblings like get_transcript (text) and list_voice_memos (listing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool vs alternatives, leaving it to inference. However, the purpose is clear enough for basic selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transcriptA
Extract and return the transcript from a voice memo. Transcripts are stored by Apple inside the audio file. Returns plain text, structured JSON, or timestamped segments.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the voice memo | |
| format | No | Output format: 'text' for plain text, 'json' for structured data, 'timestamped' for text with timestamps (default: text) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must bear the full burden. It discloses that transcripts are stored inside the audio file by Apple, adding some context. However, it does not mention prerequisites (e.g., whether all voice memos have transcripts), error behavior, or side effects. The output formats are described but not the underlying data structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence states the core function, and the second adds key detail about output formats and source. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two parameters and no output schema, the description covers the main purpose, source, and output formats. It could mention potential failure cases (e.g., no transcript available), but overall it is adequate for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context about the 'format' parameter values and the default ('text'), which is slightly beyond the schema's enum descriptions. However, it does not explain the 'id' parameter beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Extract and return the transcript from a voice memo.' It specifies the source (Apple inside the audio file) and three output formats, distinguishing it from siblings like transcribe_memo (which likely generates transcripts) and get_audio (which returns audio).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives. It implies that it works on existing Apple-stored transcripts, but there is no direct guidance excluding transcription generation or when to prefer other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_voice_memoA
Get detailed metadata for a specific voice memo by its ID. Returns title, date, duration, and transcript availability.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the voice memo to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes return fields but does not disclose behavior like (likely) read-only, or error handling if ID not found. Adds context about return values but not beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no waste, direct and clear. Front-loaded with the action and what it returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with one parameter and no output schema, the description lists key return fields. May not be exhaustive (e.g., could there be other metadata fields?), but given the simplicity, it seems adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with full schema description coverage (100%). The tool description does not add new meaning beyond the schema parameter description. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action ('Get detailed metadata') and target ('specific voice memo by ID'). Lists specific return fields (title, date, duration, transcript availability), distinguishing from siblings like get_audio, get_transcript, list_voice_memos, and transcribe_memo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage: you need the voice memo ID. But no explicit guidance on when to use this vs siblings like get_audio or get_transcript. No when-not conditions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_voice_memosA
List voice memos from Apple Voice Memos app with metadata. Returns memo IDs, titles, dates, durations, and whether they have transcripts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of memos to return (1-100, default: 50) | |
| offset | No | Number of memos to skip for pagination (default: 0) | |
| search | No | Search term to filter memos by title or custom label |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that it returns metadata fields, but does not mention side effects, authentication needs, or rate limits. For a simple read-only list tool, it is minimally adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. It efficiently conveys the tool's purpose and return value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides basic information but lacks details on pagination behavior, how search works, or any potential limitations. Given the siblings and no output schema, it is minimally complete for a list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the three parameters. The description adds no additional meaning beyond the schema beyond stating the return fields. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists voice memos with specific metadata fields. The verb 'list' and resource 'voice memos' are precise, and it distinguishes from siblings like 'get_voice_memo' which retrieves a single memo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly guide when to use this tool versus alternatives like 'get_audio', 'get_transcript', or 'transcribe_memo'. It implies usage for listing, but lacks explicit when-to or when-not-to guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_memoA
Transcribe a voice memo using Apple's SFSpeechRecognizer. This generates a transcript for memos that haven't been transcribed yet. Note: The transcript is returned but not saved to the original file. Requires Speech Recognition permission and downloaded language packs.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the voice memo to transcribe | |
| language | No | Language code for transcription (e.g., 'en-US', 'es-ES'). Default: 'en-US' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses crucial behavior: transcript returned but not saved. Also mentions permission requirements. However, without annotations, it should also cover error conditions and performance aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences plus a note, all front-loaded with essential information. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers main points but lacks details on return format and error handling. With no output schema, these would be helpful. Adequate for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters are documented in the schema (100% coverage), so description adds no extra parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Transcribe' and resource 'voice memo', and distinguishes from siblings like 'get_transcript' by specifying it generates new transcripts for untranscribed memos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context (for memos not yet transcribed) and prerequisites (permission and language packs). Lacks explicit alternatives or when-not-to-use, but the implication is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clear, non-overlapping purpose: listing memos, getting metadata, retrieving audio, retrieving existing transcripts, and generating new transcripts. No ambiguity between tools.
All tool names follow a consistent verb_noun pattern with lowercase and underscores (e.g., get_audio, list_voice_memos). Easy to predict and understand.
With 5 tools covering listing, metadata retrieval, audio retrieval, transcript retrieval, and transcript generation, the set is well-scoped for the domain of voice memo management.
Covers essential read operations and transcript generation. One minor gap: the transcribe_memo tool does not save the generated transcript back to the file, but it is returned to the user.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Your Plaud recordings in natural language: list recordings, read speaker-attributed transcripts and
Voice notes that organize themselves. Capture by Siri, AI auto-tags, semantic search retrieves.
Carbon Voice MCP serves as a bridge that connects AI assistants like ChatGPT, Claude, and Cursor to a user's Carbon Voice account, turning voice messages and conversations into a private, on-demand knowledge base. It provides 28 specialized tools for comprehensive voice messaging management, including creating and sending messages, accessing conversation history with instant transcription, running AI actions (summarization, TLDR generation, meeting notes), and managing workspace collaboration through folders, contacts, and team communications.
Memoket — access your recording transcripts, summaries, and key takeaways over MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to manage Apple Reminders lists and reminders on macOS, including creating, updating, completing, and deleting reminders.7615MIT
- AlicenseAqualityAmaintenanceEnables transcription, summarization, and action item extraction from audio files on your Mac using MacWhisper and Claude Desktop, all locally without any cloud APIs.72MIT
- AlicenseNot gradedqualityCmaintenanceEnables read-first interaction with Apple Voice Memos: search transcripts, review action candidates, mark reviewed, prepare tasks for Codex, and render digests.1Apache 2.0
- FlicenseAqualityCmaintenanceEnables seamless interaction with Voicenotes through natural language, allowing users to search, create, edit, tag, and organize their notes via an MCP client like Claude.144
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jwulff/apple-voice-memo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server