kindlemcp
Allows sending documents (Markdown, PDF, EPUB) directly to a Kindle device via Amazon's Send-to-Kindle email service.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kindlemcpsend the file report.md to my Kindle"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
kindlemcp
Send any document straight to your Kindle, via Amazon's Send-to-Kindle email service. Ships as both a command-line tool and an MCP server, so you can send from a shell or straight from an AI assistant (Claude Desktop, Claude Code, etc.).
Markdown is converted to EPUB with pandoc; PDF and EPUB files are sent as-is.
No secrets live in the code — the Gmail SMTP credential and your Kindle address are read from the environment or from local config files that are gitignored.
Requirements
Python 3.10+
pandoc(only needed for Markdown input) —brew install pandoc.pandocis an external binary, not a Python dependency.A Gmail account with an App Password (for SMTP).
Your Send-to-Kindle email address, and the Gmail sender added to your Amazon approved senders list (Amazon → Preferences → Personal Document Settings → Approved Personal Document E-mail List). This is a one-time step; documents from any other sender are silently dropped by Amazon.
Related MCP server: Pandoc Bridge
Install
pipx install kindlemcp # installs `kindlemcp` (MCP) and `kindlemcp-send` (CLI)
# or run without installing:
uvx --from kindlemcp kindlemcp-send --title "Note" report.mdFor local development from a checkout:
python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"Configuration
Both values can come from the environment or a config file. Copy the examples:
cp .env.example .env # fill in SMTP_URL
cp kindle.conf.example kindle.conf # fill in KINDLE_ADDR (or use ~/.kindle.conf).env:
SMTP_URL=smtp://you%40gmail.com:your_app_password@smtp.gmail.com:587kindle.conf (or ~/.kindle.conf):
KINDLE_ADDR=you_xxxxxx@kindle.comBoth files are gitignored and never committed.
Config resolution order
Setting | Looked up in order |
| env var → |
| env var → |
CLI usage
# Markdown -> EPUB -> Kindle
kindlemcp-send --title "My Report" report.md
# PDF or EPUB, sent as-is
kindlemcp-send --title "My Report" report.pdf
# Markdown from stdin
echo "# Hello" | kindlemcp-send --title "Quick Note"--title becomes the email subject, which Amazon uses as the document name on
the Kindle.
The old ./kindle_send.py script still works — it is now a thin shim that calls
the package.
MCP server
The kindlemcp command runs an MCP server over stdio exposing a single tool:
send_to_kindle(title, content?, file_path?)— provide exactly one ofcontent(Markdown text, converted to EPUB) orfile_path(an existing.md/.pdf/.epubfile). Returns a human-readable status string.
Claude Desktop / .mcp.json
Add this to your MCP client config (Claude Desktop claude_desktop_config.json,
or a project .mcp.json for Claude Code):
{
"mcpServers": {
"kindlemcp": {
"command": "uvx",
"args": ["--from", "kindlemcp", "kindlemcp"],
"env": {
"SMTP_URL": "smtp://you%40gmail.com:your_app_password@smtp.gmail.com:587",
"KINDLE_ADDR": "you_xxxxxx@kindle.com"
}
}
}
}If you installed with pipx, use the installed command directly instead:
{
"mcpServers": {
"kindlemcp": {
"command": "kindlemcp",
"env": {
"SMTP_URL": "smtp://you%40gmail.com:your_app_password@smtp.gmail.com:587",
"KINDLE_ADDR": "you_xxxxxx@kindle.com"
}
}
}
}You can omit the env block and rely on the config files above instead. Either
way, the Gmail sender in SMTP_URL must be on your Amazon approved-senders
list, and pandoc must be on PATH for Markdown conversion.
Development
pip install -e ".[dev]"
python -m pytest # tests mock SMTP — they never send a real email
ruff check .License
MIT
Available Tools
1 toolsend_to_kindleA
Send a document to the configured Kindle via Amazon Send-to-Kindle email.
Provide exactly one of content or file_path:
file_path— path to an existing .md, .pdf, or .epub file to send.content— Markdown text; it is written to a temp file, converted to EPUB with pandoc, and sent.
title becomes the email subject, which Amazon uses as the document name
on the Kindle. Returns a human-readable success or error message.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| content | No | ||
| file_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It discloses the conversion pipeline (content written to temp file, converted to EPUB with pandoc), that 'title' becomes the email subject/document name, and that a human-readable success/error message is returned. Minor gaps: no mention of prerequisites beyond 'configured Kindle' or potential side effects, but the description is substantially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear first sentence followed by a concise bulleted list. Every sentence adds distinct value: purpose, exclusion rule, per-parameter semantics, conversion detail, and return behavior. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters, one required, and a mutual-exclusion constraint, the description covers all necessary operational details: how each parameter works, the file types accepted, the conversion step, and the return value. An output schema exists for the return message, but the description still summarizes it appropriately. No missing information that would hinder correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. It does: 'file_path' is specified as an existing .md/.pdf/.epub file, 'content' is markdown text that gets converted, and 'title' is the email subject/document name. The mutual exclusivity constraint is also clearly explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Send'), resource ('document to the configured Kindle'), and mechanism ('Amazon Send-to-Kindle email'). Even without siblings, the purpose is immediately clear and the action is distinguished from other potential operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs the agent to provide exactly one of 'content' or 'file_path', and explains when each is appropriate: existing file vs. markdown text to be converted. This leaves no ambiguity about how to choose between the two mutually exclusive inputs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.2.0- First observed
send_to_kindle
TDQS
Scored across 1 tool
There is only one tool, so there is no possibility of confusing it with another tool or selecting the wrong one. Its purpose is clearly distinct by default.
The single tool name `send_to_kindle` follows a clear, conventional verb_noun pattern. With only one tool, naming consistency is inherently maintained.
One tool is slightly below the typical well-scoped range, but it is reasonable for a narrowly focused server whose entire purpose is sending documents to a Kindle. The count does not feel excessive or wasteful.
The tool covers the full apparent domain: it accepts both file paths and raw markdown content, handles conversion, and sends to the configured Kindle. No essential operation for this narrow scope appears missing.
Maintenance
Related MCP Connectors
Convert Markdown, HTML, and web pages to high-quality PDF with Prince.
Generate PDF, Word (.docx) and PowerPoint (.pptx) documents from Markdown over MCP.
Convert files, HTML, and Markdown to PDF via the FileToPDF API. Bring your own API key.
The document publishing layer for AI tools. Convert markdown to 6 destinations, 62 templates.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables document format conversion between various formats (Markdown, HTML, PDF, DOCX, LaTeX, EPUB, and more) using Pandoc, preserving formatting and structure while supporting both direct content transformation and file-based conversions.1MIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables document format conversion between 40+ formats including Markdown, HTML, LaTeX, DOCX, and PDF using Pandoc, with support for both text and file-based conversions.1MIT
- AlicenseAqualityDmaintenanceConverts between Markdown and Word documents using pandoc, with support for conversion options, pandoc installation check, and listing supported formats.41MIT
- FlicenseNot gradedqualityDmaintenanceEnables sending Markdown or EPUB content to a Kindle device via MCP. Users can send documents to their Kindle directly from Claude or any MCP client.334 npm-