MCP 邮件服务
一个安全的模型上下文协议(MCP)服务器和客户端应用程序,用于发送电子邮件,具有后量子加密(CRYSTALS-Kyber、Falcon、SPHINCS+)、AES-256-GCM 加密以及基于 spaCy 的自然语言处理(NLP)功能,用于解析用户请求。该服务专为 Ubuntu Linux 设计,确保量子安全的通信和强大的电子邮件处理能力。
目录
- 功能
- 前提条件
- 环境设置
- 依赖安装
- 配置
- 安装
- 使用
- 使用示例
- 安全性
- 故障排除
- 贡献
- 许可证
功能
- 后量子加密:使用 CRYSTALS-Kyber 进行密钥交换,Falcon 用于数字签名,SPHINCS+ 作为备用签名算法。
- 安全加密:采用 AES-256-GCM 对消息进行认证加密。
- 自然语言处理:利用 spaCy(
en_core_web_sm
)对电子邮件请求进行稳健解析。
- 真实邮件发送:与 SMTP 服务器(如 Gmail)集成,实现实际邮件发送。
- 异步通信:基于
asyncio
构建,实现高效的服务器-客户端交互。
- Ubuntu Linux 支持:针对 Ubuntu 22.04+ 进行优化,并提供详细的设置说明。
前提条件
- 操作系统:Ubuntu Linux 22.04 或更高版本。
- Python:3.8 或更高版本。
- 网络连接:用于发送邮件和安装依赖。
- Git:用于克隆仓库。
- SMTP 账户:有效的电子邮件账户(如 Gmail,需生成应用密码)用于发送邮件。
环境设置
- 更新系统:
- 安装系统依赖:
- 克隆仓库:
依赖安装
该应用程序依赖于 Python 库,以及可选的后量子加密 C 库。所有依赖项通过提供的
setup.sh
脚本安装。Python 依赖
pqcrypto==0.1.1
:后量子加密(Kyber、Falcon、SPHINCS+)。
pyyaml==6.0.1
:YAML 配置解析。
spacy==3.7.2
:用于处理用户请求的 NLP。
cryptography==42.0.5
:AES-256-GCM 加密。
可选的 C 库
liboqs
:如果pqcrypto
的 wheel 文件不可用,则需要编译此库。安装脚本会在需要时自动编译。
安装步骤
- 运行安装脚本:
- 创建虚拟环境(
venv
)。 - 从
requirements.txt
安装 Python 依赖。 - 下载 spaCy 的
en_core_web_sm
模型。 - 如果
pqcrypto
安装失败,则编译liboqs
和liboqs-python
。 - 验证
pqcrypto
和cryptography
的安装。
该脚本会:
- 激活虚拟环境:
配置
- 服务器配置:
- 编辑
server/config.yaml
: - 邮件设置:
user
:您的电子邮件地址。password
:应用密码(对于 Gmail,请在 Google 账户设置中的“安全性”>“两步验证”>“应用密码”中生成)。server
和port
:您的 SMTP 服务器详细信息(例如,Gmail 使用smtp.gmail.com:587
)。
- 客户端配置:
- 编辑
client/config.yaml
: - 设置
host
和port
以匹配服务器的配置。
- 保护配置文件:
- 确保
server/config.yaml
受到保护(例如,使用chmod 600 server/config.yaml
),因为它包含敏感凭证。
安装
在设置环境和依赖项后:
- 验证虚拟环境:
- 测试配置:
- 确保
server/config.yaml
和client/config.yaml
配置正确。 - 验证对 SMTP 服务器的网络访问。
使用
- 启动应用程序:
- 这将在后台启动 MCP 服务器,并在前台启动客户端。
- 或者,单独运行:
- 与客户端交互:
- 客户端会提示输入自然语言请求。
- 输入类似以下内容的请求:“Send an email to user@example.com with subject Hello and message This is a test.”
- 输入
quit
退出。
- 服务器日志:
- 服务器将连接和错误信息打印到控制台。
- 检查日志以调试问题。
使用示例
客户端使用 spaCy 处理自然语言请求。以下是示例输入及其结果:
- 基本邮件:
- 向
john.doe@example.com
发送主题为“Default Subject”、内容为“Hello, how are you?”的邮件。
- 带主题的邮件:
- 向
jane@example.com
发送主题为“Meeting Tomorrow”、内容为“Let's meet at 10 AM.”的邮件。
- 复杂请求:
- 向
test@example.com
发送主题为“Project Update”、内容为“Please review the latest report.”的邮件。
- 无效邮件:
- 默认将邮件发送到
default@example.com
。
安全性
- 后量子加密:
- CRYSTALS-Kyber (ML-KEM):确保密钥交换的量子安全性。
- Falcon:提供主要的数字签名用于认证。
- SPHINCS+:作为备用签名算法,提供冗余。
- 对称加密:
- AES-256-GCM:使用从 Kyber 派生的密钥确保消息的机密性、完整性和真实性。
- 配置安全性:
- 保护
server/config.yaml
以保护邮件凭证。
- 网络安全:
- 在受信任的网络上运行服务器,或将其置于防火墙后。
- 考虑为 SMTP 连接启用 TLS(Gmail 已默认启用)。
故障排除
- 邮件发送失败:
- 验证
server/config.yaml
中的凭证和 SMTP 设置。 - 确保邮件提供商允许应用密码(对于 Gmail,需启用两步验证)。
- 检查服务器日志中的 SMTP 错误。
- pqcrypto 安装失败:
- 再次运行
setup.sh
以编译liboqs
和liboqs-python
。 - 确保已安装
cmake
和ninja-build
。
- spaCy 问题:
- 验证
en_core_web_sm
模型:python -m spacy download en_core_web_sm
。 - 检查是否有足够的内存(spaCy 需要约 200MB)。
- 连接错误:
- 确保
client/config.yaml
中的host
和port
与服务器配置匹配。 - 检查服务器是否正在运行(
ps aux | grep mcp_server.py
)。
- 一般调试:
- 分别运行服务器和客户端以隔离问题。
- 通过在
mcp_server.py
或mcp_client.py
中添加print
语句启用详细日志。
贡献
欢迎贡献!请按照以下步骤操作:
- Fork 仓库。
- 创建特性分支(
git checkout -b feature/your-feature
)。
- 提交更改(
git commit -m 'Add your feature'
)。
- 推送到分支(
git push origin feature/your-feature
)。
- 打开 Pull Request。
请确保代码遵循 PEP 8 规范,并在适用时包含测试。
许可证
本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。
- Author:waytomcp
- URL:https://www.waytomcp.com/article/NetworkNerd1337/rcs_quikmail
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!