A CLI tool and MCP server for accessing meeting transcriptions from MacWhisper's database.
This tool provides both command-line interface and MCP (Model Context Protocol) server for MacWhisper's SQLite database. It enables users to list and export meeting transcriptions in various formats, and allows AI assistants to search and retrieve transcriptions via the MCP protocol.
- List meetings with filtering by date range
- Search meetings by content keywords, title keywords, and date range
- Export transcriptions in multiple formats:
- Markdown (standard or extended with metadata)
- JSON (standard MacWhisper compatible or extended with metadata)
- Single session export or batch export
- Meeting start time estimation
- Search meetings by content keywords, title keywords, and date range
- Retrieve transcriptions as MCP resources or via tools (legacy mode)
- Extended Markdown format with timestamps and metadata
- Integration with AI assistants (e.g., Claude Desktop)
- Legacy mode support for older MCP clients that don't support Resources
The easiest way to install on macOS is via Homebrew:
brew install dayflower/tap/mac-whisper-toolThis will install the appropriate binary for your architecture (Intel or Apple Silicon).
Download the latest release for your macOS architecture from the Releases page:
- Intel Mac (x86_64): Download
mac-whisper-tool_*_darwin_x86_64.tar.gz - Apple Silicon (ARM64): Download
mac-whisper-tool_*_darwin_arm64.tar.gz
Extract and install:
# Extract the archive
tar -xzf mac-whisper-tool_*_darwin_*.tar.gz
# Move to a directory in your PATH (optional)
sudo mv mac-whisper-tool /usr/local/bin/go build -o mac-whisper-toolThe binary will be created in the current directory.
Display a list of sessions from the database. This includes every session type —
recorded meetings, system-audio recordings, voice memos, podcasts, downloaded/YouTube
media, and plain imported / folder-watched files. The Type column (and type JSON
field) shows which kind each session is.
# Show the most recent 20 sessions (default)
mac-whisper-tool list
# Show all sessions in JSON format (includes the "type" field)
mac-whisper-tool list -n -1 -f json
# Filter by date range
mac-whisper-tool list -s 2025-12-01 -e 2025-12-31
# Show only imported files (folder-watcher / drag-and-drop)
mac-whisper-tool list --type imported
# Estimate meeting start times (rounds to nearest 30 minutes)
mac-whisper-tool list --estimate-startOptions:
-d, --db <path>- Database file path (default:~/Library/Application Support/MacWhisper/Database/main.sqlite)-s, --start <datetime>- Filter by start date (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)-e, --end <datetime>- Filter by end date-n, --limit <n>- Maximum number of meetings (default: 20, negative for all)-f, --format <format>- Output format:tableorjson(default: table)--type <type>- Filter by session type:recorded-meeting,system-audio,voice-memo,podcast,youtube,download,imported(empty = all)--estimate-start- Estimate meeting start time from dateCreated and duration-v, --verbose- Enable verbose output to stderr
Search for specific meetings by keywords, title, or date range:
# Search by content keyword
mac-whisper-tool search -k "budget"
# Search by multiple keywords (AND condition)
mac-whisper-tool search -k "zoom" -k "meeting"
# Search by title keywords
mac-whisper-tool search -t "standup" -t "team"
# Search with date range
mac-whisper-tool search -k "project" -s 2025-01-01 -e 2025-03-31
# Limit results
mac-whisper-tool search -k "meeting" -n 10
# JSON output
mac-whisper-tool search -k "Q4" -f json
# Filter by session type (e.g. only voice memos mentioning "idea")
mac-whisper-tool search -k "idea" --type voice-memo
# Estimate start times
mac-whisper-tool search -k "zoom" --estimate-startOptions:
-k, --keywords <keyword>- Content keywords (repeatable, AND condition)-t, --title <keyword>- Title keywords (repeatable, AND condition)-s, --start <datetime>- Filter by start date (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)-e, --end <datetime>- Filter by end date-n, --limit <n>- Maximum number of results (default: 20, negative for all)-f, --format <format>- Output format:tableorjson(default: table)--type <type>- Filter by session type:recorded-meeting,system-audio,voice-memo,podcast,youtube,download,imported(empty = all)--estimate-start- Estimate meeting start time from dateCreated and duration-d, --db <path>- Database file path (inherited from global)-v, --verbose- Enable verbose output to stderr (inherited from global)
At least one search criterion (keywords, title, date range, or type) must be specified.
Export a single meeting transcription:
# Export to stdout in Markdown format (default)
mac-whisper-tool export <session-id>
# Export to a specific file
mac-whisper-tool export -o output.md <session-id>
# Export to a directory with auto-generated filename
mac-whisper-tool export -c ./exports <session-id>
# Export in JSON format (MacWhisper compatible)
mac-whisper-tool export -f json <session-id>
# Export in extended Markdown format with metadata and timestamps
mac-whisper-tool export -x <session-id>
# Export in extended JSON format with metadata and timestamps
mac-whisper-tool export -f json -x <session-id>
# Estimate start time (internal calculation only, doesn't affect output)
mac-whisper-tool export --estimate-start <session-id>
# Estimate start time with extended content
mac-whisper-tool export --estimate-start -x <session-id>Batch Export:
Export multiple meetings at once:
# Export the latest 10 meetings
mac-whisper-tool export -c ./exports -n 10
# Export meetings from a specific date range
mac-whisper-tool export -c ./exports -s 2025-12-01 -e 2025-12-31
# Export all meetings
mac-whisper-tool export -c ./exports -n -1Options:
-d, --db <path>- Database file path-f, --format <format>- Output format:markdown(ormd),json(default: markdown)-o, --output <file>- Output file path (single session only)-c, --output-dir <dir>- Output directory (filename auto-generated)-x, --extend- Output extended content (timestamps, metadata)--estimate-start- Estimate meeting start time from dateCreated and duration-v, --verbose- Enable verbose output to stderr
Batch export options:
-s, --start <datetime>- Filter by start date-e, --end <datetime>- Filter by end date-n, --limit <n>- Maximum number of meetings to export (negative for all)
-
Format (
--format,-f): Specifies the output formatmarkdown(ormd): Markdown format (default)json: JSON format
-
Content (
--extend,-x): Specifies whether to include extended content- Default: Standard content (MacWhisper compatible)
-x: Extended content (includes timestamps and metadata)
-
Start Time Estimation (
--estimate-start): Estimates meeting start time- Internal calculation only, doesn't affect output format
- When combined with
-x, timestamps are based on estimated start time
Standard format (default):
- **Speaker 1**: foo bar baz
- **Speaker 2**: hoge fugaExtended format (-x):
# Zoom Meeting
- **Date Started**: 2025-07-23T10:00:00.000
- **Date Created**: 2025-07-23T11:59:59.000
- **Duration**: 38m 52s
- 2025-07-23T10:00:00.000 **Speaker 1**: foo bar baz
- 2025-07-23T10:20:30.400 **Speaker 2**: hoge fugaStandard format (MacWhisper compatible):
[
{
"speaker": "Speaker 1",
"text": "foo bar baz"
},
{
"speaker": "Speaker 2",
"text": "hoge fuga"
}
]Extended format (-f json -x):
{
"title": "Zoom Meeting",
"dateStarted": "2025-07-23T10:00:00.000",
"dateCreated": "2025-07-23T11:59:59.000",
"duration": 2332.4,
"transcripts": [
{
"speaker": "Speaker 1",
"text": "foo bar baz",
"speakedAt": "2025-07-23T10:00:00.000"
},
{
"speaker": "Speaker 2",
"text": "hoge fuga",
"speakedAt": "2025-07-23T10:20:30.400"
}
]
}When using -c, --output-dir, filenames are automatically generated in the format:
{datetime} {title}.{ext}
Example: 2025-07-23T12:34:56.000 Zoom Meeting.md
Invalid filename characters are replaced with underscores.
The tool accepts the following datetime formats:
- Date only:
2025-07-23(treated as2025-07-23T00:00:00.000) - Date and time:
2025-07-23T11:22:33 - Date and time with milliseconds:
2025-07-23T11:22:33.000
When using --estimate-start, the tool estimates the meeting start time by:
- Subtracting the meeting duration from
dateCreated - Rounding to the nearest 30 minutes
For example:
- Calculated time: 11:55 → Rounded to: 12:00
- Calculated time: 13:10 → Rounded to: 13:00
The default database path is:
~/Library/Application Support/MacWhisper/Database/main.sqlite
You can specify a different database path using one of the following methods (in priority order):
-
Command-line flag (for one-time use, highest priority):
mac-whisper-tool list --db /path/to/custom/main.sqlite
-
Environment variable (for session-wide use):
export MAC_WHISPER_DB="/path/to/custom/main.sqlite"
-
Configuration file (for persistent use):
Create a configuration file at one of these locations:
~/.config/MacWhisperTool/config.json(recommended, XDG compliant)~/Library/Application Support/MacWhisperTool/config.json(macOS standard)
Configuration file format:
{ "database": { "path": "/path/to/custom/main.sqlite" } }Example:
# Create config directory mkdir -p ~/.config/MacWhisperTool # Create config file cat > ~/.config/MacWhisperTool/config.json <<EOF { "database": { "path": "~/custom/meeting.sqlite" } } EOF
Priority order:
--dbflag (highest)MAC_WHISPER_DBenvironment variable~/.config/MacWhisperTool/config.json~/Library/Application Support/MacWhisperTool/config.json- Default path (lowest)
Start the MCP server to enable AI assistant integration:
# Start MCP server with default database
mac-whisper-tool mcp
# Use custom database path
mac-whisper-tool mcp --db /path/to/custom.sqlite
# Enable verbose logging to stderr
mac-whisper-tool mcp --verbose
# Enable legacy mode for older MCP clients
mac-whisper-tool mcp --legacyOptions:
-d, --db <path>- Database file path (default:~/Library/Application Support/MacWhisper/Database/main.sqlite)-v, --verbose- Enable verbose output to stderr--legacy- Enable legacy mode for MCP clients that don't support Resources--estimate-start- Estimate meeting start time by subtracting duration from creation time
Add the following to your Claude Desktop configuration file (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"mac-whisper": {
"command": "/usr/local/bin/mac-whisper-tool",
"args": ["mcp"]
}
}
}If you installed the tool in a different location, adjust the command path accordingly.
The MCP server provides:
-
search_meetings tool: Search meeting transcriptions
- Search by content keywords (AND condition)
- Search by title keywords (AND condition)
- Filter by date range (after/before)
- Limit results (default: 10, max: 100)
- Returns JSON-formatted results with session metadata
- In normal mode: Also returns resource links for each meeting
- In legacy mode: Returns only JSON results (no resource links)
-
Resource access (normal mode only): Retrieve transcription content
- URI scheme:
macwhisper://localhost/session/{sessionID} - Returns extended Markdown format with timestamps and metadata
- Use search_meetings tool to discover session IDs
- URI scheme:
-
get_meeting tool (legacy mode only): Retrieve transcription by session ID
- Takes session ID as parameter
- Returns extended Markdown format with timestamps and metadata
- Alternative to Resources for older MCP clients
Legacy mode is designed for MCP clients that don't support the Resources feature. When running in legacy mode (--legacy):
search_meetingsreturns JSON-formatted results without resource linksget_meetingtool is available to retrieve transcriptions by session ID- Resources are not registered
Normal mode (default):
mac-whisper-tool mcp
# - search_meetings returns JSON + resource links
# - Resources are available
# - get_meeting tool is NOT availableLegacy mode:
mac-whisper-tool mcp --legacy
# - search_meetings returns JSON only (no resource links)
# - Resources are NOT available
# - get_meeting tool is available- Non-existent session ID: Error message to stderr, exit code 1
- Missing database file: Error message to stderr, exit code 1
- Missing output directory: Automatically created (exit code 1 on failure)
- Batch export without --output-dir: Error message to stderr, exit code 1
# List the latest 5 meetings with verbose output
mac-whisper-tool list -n 5 -v
# Export a specific meeting to a file with extended content
mac-whisper-tool export -x -o meeting.md abc123def456
# Batch export all meetings from December 2025 in extended JSON format
mac-whisper-tool export -c ./exports -f json -x -s 2025-12-01 -e 2025-12-31 -n -1
# Export using a custom database path with estimated start time
mac-whisper-tool export -d /path/to/custom.sqlite --estimate-start -x -c ./output sessionIDSee LICENSE file for details.
This tool is an experimental implementation. If you need modifications or additional features, please feel free to fork this repository and customize it for your own use.