MsgLens について
MsgLensは、`.msg`、`.eml`、`winmail.dat`を扱うローカルメールパーサー兼コマンドラインツールです。コマンドライン利用者やAIアシスタント向けに、ファイルをアップロードせず内容と添付ファイルを抽出し、MCPサーバー経由でローカルファイルの読み取りや変換を可能にします。
主な機能
- 01`.msg`、`.eml`、`winmail.dat`の解析
- 02ヘッダー・本文・添付ファイルの抽出
- 03圧縮RTFとTNEFのデコード
- 04メールを`.eml`または`.txt`に変換
- 05MCP経由でメールファイルを読み取り
活用シーン
- 01コマンドラインでOutlookメールを確認
- 02メールファイルから添付を保存
- 03複数の`.msg`ファイルを変換
- 04AIアシスタントにローカルメールを読ませる
MCP 対応
標準入出力でMCPサーバーを起動し、メールの読み取り、添付ファイルの保存、`.msg`や`winmail.dat`の変換ツールを提供します。ファイルはローカルに留まり、サーバーはネットワークリクエストを行いません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | .msg、.eml、または winmail.dat ファイルの絶対パス。 |
| include_headers | boolean | いいえ | インターネットヘッダーの生データも返します。 |
詳細
msglens-cli
Outlook の .msg、.eml、winmail.dat ファイルを、コマンドライン、Node、または MCP 経由で AI アシスタントから読み取れます。ヘッダー、メッセージ本文、添付ファイルを扱えます。Outlook は不要で、ファイルがアップロードされることもありません。
これらは、msglens.app のブラウザー版で実行されているものと同じパーサーです。
npx msglens-cli read message.msg
なぜ別の .msg パーサーが必要なのか
実際の Outlook メールの多くは、本文を HTML やプレーンテキストとして保存していません。業務用の .msg ファイルを20件サンプル調査したところ、17件では本文が PidTagRtfCompressed にのみ保存されていました。これは、元の HTML が内部に含まれた圧縮 RTF です(MS-OXRTFCP および MS-OXRTFEX)。PidTagHtml と PidTagBody を読み取るだけで終わるパーサーでは、こうしたメッセージの本文は空になります。このパーサーは RTF を展開して HTML を取り出し、PidTagHtml、PidTagBodyHtml、圧縮 RTF、PidTagBody の順にフォールバックします。
また、次の機能も備えています。
- バイト列から形式を判定するため、名前を変更したファイルも開けます
winmail.dat(TNEF)を展開し、その中に格納された添付ファイルも取り出します- メッセージで指定されたコードページを使って、ラテン文字以外の本文をデコードします
- メールだけでなく、保存された予定や連絡先も読み取ります
CLI
npm install -g msglens-cli でインストールすると、コマンドは msglens です。または、インストールせずに npx msglens-cli で実行できます。
msglens read <file...> [--json] print headers and the plain-text body
msglens attachments <file...> [-o <dir>] save every attachment
msglens convert <file...> --to eml|txt [-o <dir>]
msglens mcp MCP server on stdio (see below)
read --jsonは、解析したメッセージ全体を出力します(ファイルが1つの場合は1つのオブジェクト、複数の場合は配列)。添付ファイルのバイトデータは含まれませんが、名前、種類、サイズは含まれます。attachmentsとconvertはファイルを上書きしません。2つ目のinvoice.pdfはinvoice (1).pdfとして保存されます。添付ファイル名は通常のファイル名に変換されるため、メッセージから出力フォルダーの外にファイルを書き込むことはできません。- 複数のファイルを一度に処理できます。処理に失敗したファイルがあっても、残りの処理は続行され、失敗が報告されます。いずれかのファイルで失敗した場合、終了コードは1です。
フォルダー内の .msg ファイルを .eml に変換します。
npx msglens-cli convert ./mail/*.msg --to eml -o ./eml
AI アシスタント向け MCP サーバー
msglens mcp は標準入出力で Model Context Protocol サーバーを実行するため、Claude、Codex、Cursor などのアシスタントが、ユーザーのマシン上にあるメールファイルを直接開けます。次の3つのツールを備えています。
read_email:件名、送信者、宛先、日付、プレーンテキストの本文、添付ファイル一覧(オプションで未加工のヘッダーも取得)save_attachments:すべての添付ファイルをフォルダーに書き込みますconvert_email:.msg または winmail.dat を .eml または .txt に変換します
ファイルはユーザーのマシン上にとどまり、サーバーはネットワークリクエストを行いません。
Claude Code
claude mcp add msglens -- npx -y msglens-cli mcp
Codex(~/.codex/config.toml)
[mcp_servers.msglens]
command = "npx"
args = ["-y", "msglens-cli", "mcp"]
Claude Desktop、Cursor、その他の JSON 設定対応クライアント
{
"mcpServers": {
"msglens": { "command": "npx", "args": ["-y", "msglens-cli", "mcp"] }
}
}
次に、たとえば「~/Downloads/invoice-query.msg を要約して、添付ファイルを ~/Desktop/invoice に保存して」と依頼します。
メッセージ本文はメールの送信者が作成したものです。そのため、ツールは本文をデータとして扱い、本文内の指示には従わないようアシスタントに伝えます。
ライブラリ
import { parseFile, parse, toEml, toText } from "msglens-cli";
const email = await parseFile("message.msg");
email.subject; // string
email.from; // { name, address } | null
email.date; // Date | null
email.bodyText; // plain text, always filled
email.body; // HTML when email.bodyKind === "html"
email.attachments; // [{ fileName, mimeType, size, content: Uint8Array, isEmbeddedMessage, ... }]
const again = await parse(bytes, "message.msg"); // from a Uint8Array or ArrayBuffer
const eml = await toEml(email); // RFC 822 text
email.body は、送信者が書いたとおりのメッセージの HTML です。信頼できないデータのため、どこかに表示する前に(たとえば DOMPurify を使って)サニタイズしてください。
isEmbeddedMessage: true の添付ファイルは、別のメッセージに添付されたメッセージです。その content を parse() に渡すと読み取れます。
Node 20 以降が必要です。
ファイルを開いて中身を確認するだけなら
msglens.app では、.msg、.eml、winmail.dat をブラウザーで開けます。解析はお使いのデバイス上で行われ、添付ファイルの確認や PDF へのエクスポートもできます。
ライセンス
MIT。Microsoft および Outlook は Microsoft Corporation の商標です。本プロジェクトは Microsoft と提携していません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。