mcp kindle
MCP服务器,将markdown或HTML转换为EPUB,并通过Gmail SMTP将其发送到Kindle设备。
MCP工具
两个工具,一个Kindle:
send_to_kindle--降价→ EPUB → 电子邮件。用于散文风格的内容。send_html_to_kindle--HTML→ EPUB → 电子邮件。需要时使用
桌子与 rowspan/colspan, `, ,内联 , //`,或任何其他布局功能markdown都不能 快递。
两者都接受可选 title (摘录自 # heading / ` / 第一 ` 如果省略)。
这 data/ 文件夹——图像如何进入
这两个工具都通过一个共享的主机目录嵌入图像。图像字节数 切勿在MCP调用内移动(HTML工具的可选功能除外 data: URI通道——见下文)。文件夹是唯一的文件通道。
主机路径(绝对): /home/alex/projects/mcp-kindle/data/ 容器路径: /app/data/ (绑定从上面的主机路径装载 通过 ./data:/app/data 体积 )
主机路径为 在两个工具文档字符串中都硬编码 所以LLM代理 在调用MCP之前,确切地知道在哪里写入图像文件。如果你 将此仓库克隆到其他位置,更新两者中的路径 send_to_kindle 和 send_html_to_kindle 文档字符串在 backend/main.py (搜索 /home/alex/projects/mcp-kindle/data/),然后重建容器。
工作流程 对于每张图片:
- 将图像文件保存到
/home/alex/projects/mcp-kindle/data/. - 使用文件名约定
{YYYYMMDD_HHMMSS}_{8hex}.{ext}--例如。
20260512_143022_a1b2c3d4.png文件名对服务器不透明; 它只需要是唯一的,以避免代理运行之间的冲突。
- 参考人 裸文件名 从文档正文(无路径
前缀,无绝对路径,无URL): - Markdown:  - HTML: ``
支持的文件扩展名: png, jpg, jpeg, gif, webp.基于文件 SVG是 不 支持--对于矢量图形,使用内联 ` 在 HTML正文(见下文)。图像解析器受路径遍历保护: ../, 数据文件夹外的绝对路径、NUL字节, http(s)://` URL, 丢失的文件都悄无声息地掉了下来。
附加图像通道(仅限 send_html_to_kindle)
- 内联
data:统一资源标识符 — ``.
支持的MIME类型: image/png, image/jpeg, image/gif, image/webp. image/svg+xml 数据URI是 拒绝 (我们没有 净化SVG字节)。
- 内联
...在文档正文中--正确的方法
嵌入矢量图。SVG与其余部分一起进行消毒 HTML。
- 内联PlantUML --将图表源代码包装在
@startuml ... @enduml .服务器 通过以下方式将每个块渲染为PNG plantuml.jar 并替换为 ` 在转换时,代理编写一个自包含的 文件。逃脱 在街区内 < / > (PlantUML使用 ->, ).所有PlantUML 支持图表族(类、序列、活动、状态、, 用例、组件、部署、ER、思维导图、甘特图)。渲染失败 从工具中引发错误--修复源并重新发送。对于 序列图,首选 note over X : ... 过度自我信息 箭 X -> X` (自循环呈现得含糊不清)。
外部 http(s):// 不获取图像URL;这 src 被剥光了 因此,在查看时获取的渲染器不会泄露阅读器的IP。
Kindle是BW
目的地是一个黑白电子墨水显示器。在中渲染图像 灰度,依赖于着色、阴影、线条样式或标签 而不是颜色编码。
设置
1.Gmail应用程序密码
- 打开https://myaccount.google.com/apppasswords
- 登录并生成新的应用程序密码
- 在中使用生成的16个字符的密码
.env
2.环境
创建 .env 在项目根目录中:
SENDER_EMAIL=your_email@gmail.com
GMAIL_APP_PASS="your 16char app password"
RECIPIENT_EMAIL=your_kindle_email@kindle.com
MCP_TOKENS=your_secure_token_here
MCP_PUBLIC_BASE_URL=https://your-domain.example.com
MCP_PUBLIC_LINK_TOKEN=your_secure_token_here注:报价 GMAIL_APP_PASS 如果它包含空格。
3.Docker
./compose.sh健康检查: curl http://localhost:8018/health
4.Caddy(反向代理)
添加到您的Caddyfile:
handle /kindle* {
reverse_proxy mcp-kindle:8018
}MCP端点: https://your-domain.example.com/kindle//
例子
通过电子邮件发送文本文件
python examples/send_email.py编辑 examples/send_email.py 设置发件人电子邮件、应用程序密码、收件人和附件路径。
