【ITニュース解説】WhatsApp + MCP: automatic audio transcription
2025年09月30日に「Dev.to」が公開したITニュース「WhatsApp + MCP: automatic audio transcription」について初心者にもわかりやすく解説しています。
ITニュース概要
MCPはAIエージェントと外部システムを繋ぐ標準プロトコルだ。本記事では、WhatsAppの音声メモを自動文字起こしするMCPサーバーの構築例を紹介する。ローカルのWhatsApp音声データをAI(Whisper)で文字起こしし、AIエージェント(Cursor)が活用できる仕組みだ。
ITニュース解説
最近のAI技術の進化は目覚ましいが、AIが私たちの身の回りにある特定のデータやシステムに直接アクセスして作業を行うには、特別な仕組みが必要になることがある。今回の記事では、AIエージェントが個人のデータ、具体的にはWhatsAppの音声メモを自動で文字起こしするシステムを例に、その「特別な仕組み」であるMCP(Model Context Protocol)について解説する。この技術を理解することで、AIがよりパーソナルな情報にアクセスし、私たちの日常的なタスクを自動化できる可能性が見えてくるだろう。
MCPは、AIエージェントと外部システムを安全かつ効率的に接続するための標準的なルール、つまり「接続標準」だ。これは、例えばパソコンとプリンターを接続するUSBケーブルのようなもので、AIエージェントが外部のプログラムやデータとやり取りするための共通の言葉を提供する。MCPにはサーバーとクライアントという二つの役割があり、それぞれが特定の方式で通信する。一つは「stdio(標準入出力)」という、プログラムが情報を受け取ったり送ったりする一般的な方法だ。もう一つは「SSE(Server-Sent Events)」という、サーバーからクライアントへ一方的にデータを継続して送るHTTPの仕組みだ。今回のプロジェクトでは、後述する理由からstdioが使われる。
MCPを使ったシステムは、主に三つの部分で構成される。一つ目の「ホスト」は、AIエージェント本体であり、例えばCursorのようなAIプログラミングアシスタントがこれに当たる。ホストはAIの脳となり、ユーザーの指示を理解し、MCPクライアントを動かして結果を表示する役割を担う。二つ目の「MCPクライアント」は、ホストの内部に組み込まれたプログラムで、MCPのルールに従ってサーバーと接続し、リクエストを送信したりデータを受け取ったりする。そして三つ目の「MCPサーバー」は、私たちが開発する部分だ。これは、特定の機能(この場合は音声文字起こし)を提供するプログラムで、クライアントからの指示に基づいて実際のアクションを実行し、その結果をクライアントに返す。この記事のプロジェクトでは、MCPサーバーが音声ファイルを文字起こしするという「ツール」機能を提供する。
このプロジェクトの目的は、macOS版WhatsAppデスクトップアプリに保存されている音声メモを自動で文字起こしすることだ。開発するMCPサーバーは、WhatsAppのデータベースから音声ファイルのパスを見つけ出し、それらの音声ファイルをオープンAIのWhisperという音声認識モデルを使ってテキストに変換し、その結果をAIエージェント(Cursor)に送り返す。これにより、ユーザーはAIエージェントに「誰それの最新の音声メモを文字起こしして」と尋ねるだけで、簡単に音声の内容をテキストで確認できるようになる。
MCPサーバーを構築する際、まず考えるのは通信方法だ。このプロジェクトでは、MCPサーバーがローカル環境で動作するため、「stdio(標準入出力)」が採用されている。stdioは、特別なネットワークポートを開く必要がなく、ファイアウォールやCORS(異なるドメイン間の通信制限)の問題も発生しないため、デスクトップ環境やコマンドラインツールで最も安定していてシンプルな通信手段だ。サーバーはstdioを通じてクライアントからのリクエストを受け取り、stdioを通じて結果を返す。
MCPサーバーは、capabilitiesという設定を通じて、どのような機能を提供できるかをクライアントに伝える。このプロジェクトでは「ツール」、つまり特定のアクションを実行する機能が中心となる。具体的には、三つのツールが設計されている。一つ目は「getRecentAudio(contactName, count?)」だ。これは特定の連絡先の最新の音声ファイルパスを取得するためのツールだ。二つ目は「searchAudios(query, date?)」で、履歴が多い場合に、名前や日付で音声ファイルを絞り込むために使う。これにより、WhatsAppのデータベースを直接操作しなくてもフィルタリングが可能になる。そして三つ目は「transcribeAudio(audioPath)」だ。これが文字起こしのメイン機能で、指定された音声ファイルのパスを受け取り、その内容をテキストに変換して返す。これらのツールは、それぞれが「音声ファイルの発見」「絞り込み」「文字起こし」という一連の処理の中で明確な役割を担っている。各ツールがどのような入力(パラメータ)を必要とするかは、「JSON Schema」という形式で定義されており、これによってクライアント(Cursor)は適切な情報をサーバーに送ることができる。
WhatsAppデスクトップアプリ(macOS版)は、そのデータを特定の場所に保存している。チャット履歴はSQLiteという種類のデータベースファイルに、音声や画像などのメディアファイルは別のフォルダに保存されている。MCPサーバーは、これらの決められたパスにアクセスし、SQLiteデータベースから連絡先情報と関連するメッセージデータを取り出す。さらに、メディアファイルが保存されているフォルダを探索し、.opusや.m4aといった音声ファイルの拡張子を持つファイルを探し出す。これにより、どの音声ファイルがどの連絡先と関連しているかを特定し、文字起こしの対象となるファイルパスを特定する。
WhatsAppが使用する音声形式はOpusという種類だが、OpenAIのWhisperモデルはMP3形式を好む。そのため、文字起こしの前に音声ファイルの形式変換が必要になる。ここで利用されるのが「FFmpeg」というツールだ。FFmpegは、様々な音声・動画ファイルを変換できる強力なツールで、入力されたOpus形式の音声ファイルを、Whisperが処理できるMP3形式に変換する。変換された一時的なMP3ファイルは、次にOpenAIのWhisper SDK(ソフトウェア開発キット)を使って文字起こしされる。Whisper SDKは、APIキーを使ってOpenAIの音声認識サービスにアクセスし、変換されたMP3ファイルを送信して、その内容のテキストデータを受け取る。このテキストデータが、最終的にAIエージェントに返される文字起こし結果となる。
開発したMCPサーバーをAIエージェントであるCursorで利用するには、Cursorの設定ファイル(~/.cursor/mcp.json)にサーバーの情報を追加する。具体的には、サーバーを起動するためのコマンドや、OpenAIのAPIキーなどの環境変数を設定する。この設定を行うことで、CursorはMCPサーバーの存在を認識し、必要に応じてサーバーのツールを呼び出すことが可能になる。
例えば、ユーザーがCursorに「エリヤンさんの最新の音声メモを文字起こしして」と指示すると、CursorはまずMCPサーバーのgetRecentAudioツールを呼び出し、エリヤンさんの最新の音声ファイルのパスを受け取る。次に、そのパスを使ってtranscribeAudioツールを呼び出し、音声ファイルの文字起こしを依頼する。MCPサーバーは受け取った音声ファイルをFFmpegでMP3に変換し、Whisperで文字起こしを行い、その結果のテキストをCursorに返す。Cursorはそのテキストをユーザーに表示したり、さらに要約したりして、ユーザーの要求に応える。
このWhatsApp音声文字起こしプロジェクトは、MCPがAIエージェントと個人のデータ、さらには独自のツールを連携させる強力な手段であることを示している。AIエージェントが直接アクセスできない情報も、MCPサーバーを介することで利用可能になる。現在のところmacOSに限定されるなどいくつかの制約はあるが、AIが単なる情報検索ツールに留まらず、私たちのパソコン上にあるファイルや、特定のプログラムの機能と連携して、より複雑でパーソナルなタスクを自動化できる可能性を秘めている。stdioを話すことができるあらゆるプログラムがMCPサーバーになり得るという事実は、AIとの連携のアイデアを大きく広げるものだ。AIに「これにアクセスできたら便利なのに」と感じる時、MCPを使ってその「橋」を構築できるかもしれない。