Skip to main content

mcp-show-on-kindle

MCP server with one tool, show(file_path). Copies a file to a Kindle running KOReader and opens it on screen.

It finds the Kindle on the LAN by its KOReader SSH banner, copies the file over the SSH plugin, then tells KOReader to open it through the HTTP inspector plugin. The inspector is called over the same SSH connection, so only SSH is on the wire.

Kindle setup

Enable the SSH server (port 2222) and HTTP inspector (port 8080) plugins in KOReader, on autostart.

Install a key:

ssh-keygen -t ed25519 -N "" -f ~/.config/mcp-show-on-kindle/id_ed25519
cat ~/.config/mcp-show-on-kindle/id_ed25519.pub | \
  ssh -p 2222 root@KINDLE "cat >> /mnt/us/koreader/settings/SSH/authorized_keys"

The inspector has no authentication. Block it from the network:

ssh -p 2222 root@KINDLE "iptables -I INPUT 1 -p tcp --dport 8080 ! -i lo -j DROP"

Put the same line near the top of /mnt/us/koreader/koreader.sh so it survives a reboot.

Client setup

{
  "mcpServers": {
    "show_on_kindle": {
      "command": "uvx",
      "args": ["--from", "mcp-show-on-kindle==2026.10.15.202733",
               "--refresh-package", "mcp-show-on-kindle", "mcp-show-on-kindle"],
      "env": {
        "KINDLE_ALLOWED_DIRECTORIES": "/some/dir"
      }
    }
  }
}

Or run it as a service with --transport streamable-http --port 7004 and use

{"mcpServers": {"show_on_kindle": {"type": "http", "url": "http://localhost:7004/mcp"}}}

From a checkout: uv sync, then "command": "uv", "args": ["run", "--directory", "/path/to/checkout", "mcp-show-on-kindle"].

Configuration

KINDLE_ALLOWED_DIRECTORIES  directories show() may read from. Required.
KINDLE_HOST                 Kindle IP. Default: scan the /24, cache the result.
KINDLE_SSH_PORT             default 2222
KINDLE_HTTP_PORT            default 8080
KINDLE_DIR                  target directory, default /mnt/us/documents/llm
KINDLE_SSH_KEY              private key to use. Default: whatever ssh picks.
KINDLE_KNOWN_HOSTS          pinned host key, default ~/.config/mcp-show-on-kindle/known_hosts

Notes

The Kindle's wifi sleeps hard, so the subnet scan runs twice; the first pass mostly just wakes it up. Dropbear has no scp, so the file goes over stdin with cat. Opening a document restarts KOReader's UI, and the inspector with it, so the open request always fails; the server polls afterwards to see what is open.

The banner only finds the Kindle. What authenticates it is the SSH host key, pinned on first contact under a fixed alias. Reads are limited to KINDLE_ALLOWED_DIRECTORIES, filenames are reduced to [A-Za-z0-9._-] before they go into a remote command, and with the iptables rule the Kindle exposes nothing but ssh.

Tests

make tests-run

ssh and sockets are mocked.

My Other LLM Projects

  • MCP Alchemy - Connect Claude Desktop to databases for exploring schema and running SQL.
  • MCP Redmine - Let Claude Desktop manage your Redmine projects and issues.
  • MCP Notmuch Sendmail - Email assistant for Claude Desktop using notmuch.
  • Diffpilot - Multi-column git diff viewer with file grouping and tagging.
  • Claude Local Files - Access local files in Claude Desktop artifacts.

License

MPL 2.0

Metadata

Release files for mcp-show-on-kindle 2026.10.15.202733

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mcp-show-on-kindle 2026.10.15.202733
File Size Uploaded
mcp_show_on_kindle-2026.10.15.202733.tar.gz 82.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mcp-show-on-kindle 2026.10.15.202733
File Interpreter ABI Platform
mcp_show_on_kindle-2026.10.15.202733-py3-none-any.whl Python 3 none any Details

Total release size: 94.3 kB

Release files / mcp_show_on_kindle-2026.10.15.202733.tar.gz

Download URL mcp_show_on_kindle-2026.10.15.202733.tar.gz
Size 82.0 kB
Tags Source
SHA-256 checksum
How to use checksums
8f9882d920d1b4691dd8347bc8993a16c6d2a9c39e3f4837c73d609939533732
BLAKE2b-256 checksum
How to use checksums
2dfe9189f1bebf6cc922e2d7c01b44eb44e81dc6e62d49ab25f29ff5fce2cf93
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.6.12

Release files / mcp_show_on_kindle-2026.10.15.202733-py3-none-any.whl

Download URL mcp_show_on_kindle-2026.10.15.202733-py3-none-any.whl
Size 12.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2b0400bb7a8becd3d3d817429ce063a5ee3d1c0d068d9c4dfe22f521dc559166
BLAKE2b-256 checksum
How to use checksums
ae8060db52aecf7afe88e1a92e17148c38bad51955d4aef65cde84cf2089d44b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.6.12

Release history Release notifications | RSS feed

This release

2026.10.15.202733 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page