mcpField
M
MsgLens

MsgLens

本地服务
msglens.app通信协作01 周前更新

关于 MsgLens

MsgLens 是本地邮件解析器和命令行工具,可处理 `.msg`、`.eml` 和 `winmail.dat` 文件,适用于命令行用户和 AI 助手。它无需上传文件即可提取邮件内容和附件;其 MCP 服务让助手在本机读取和转换文件。

主要功能

  1. 01解析 `.msg`、`.eml` 和 `winmail.dat`
  2. 02提取邮件头、正文和附件
  3. 03解码压缩 RTF 和 TNEF
  4. 04将邮件转换为 `.eml` 或 `.txt`
  5. 05通过 MCP 读取邮件文件

适用场景

  1. 01在命令行查看 Outlook 邮件
  2. 02保存邮件文件中的附件
  3. 03批量转换 `.msg` 文件
  4. 04让 AI 助手读取本地邮件

MCP 相关

通过标准输入输出运行 MCP 服务,提供读取邮件、保存附件以及转换 `.msg` 或 `winmail.dat` 文件的工具。文件保留在本机,服务不会发起网络请求。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"andyliu0427-msglens": {
"command": "npx",
"args": [
"-y",
"msglens-cli"
]
}
}
}
启动命令npx -y msglens-cli

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmsglens-cli0.2.1

工具

3

收录的工具列表 · 更新于 2 周前

参数类型必填说明
pathstring是.msg、.eml 或 winmail.dat 文件的绝对路径。
include_headersboolean否同时返回原始 Internet 标头。

详细介绍

msglens-cli

从命令行、Node 或通过 MCP 使用的 AI 助手中读取 Outlook .msg、.eml 和 winmail.dat 文件。包含邮件头、邮件正文和附件,无需 Outlook,也不会上传任何内容。

这些解析器与 msglens.app 浏览器版使用的是同一套。

npx msglens-cli read message.msg

为什么还要开发另一个 .msg 解析器

大多数真实的 Outlook 邮件不会将正文存储为 HTML 或纯文本。在抽取的 20 个商务 .msg 文件中,有 17 个只在 PidTagRtfCompressed 中保存了正文:压缩 RTF,原始 HTML 包含在其中(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 会打印完整的解析结果(单个文件返回一个对象,多个文件返回数组)。不包含附件字节;会保留名称、类型和大小。
  • attachments 和 convert 不会覆盖文件:第二个 invoice.pdf 会保存为 invoice (1).pdf。附件名称会被转换为普通文件名,因此邮件无法在输出文件夹之外写入文件。
  • 可以一次处理多个文件;某个文件处理失败时会报告错误,但不会停止处理其余文件。只要有任何文件处理失败,退出代码就是 1。

将文件夹中的 .msg 文件转换为 .eml:

npx msglens-cli convert ./mail/*.msg --to eml -o ./eml

面向 AI 助手的 MCP 服务

msglens mcp 会通过 stdio 运行 Model Context Protocol 服务,让 Claude、Codex、Cursor 和其他助手自行打开你计算机上的邮件文件。它提供三个工具:

  • 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 无关。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。