kindle-dashboard
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., "@kindle-dashboard Update the Kindle dashboard weather region to show Lisbon, 21°C, partly cloudy."
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.
Kindle MCP Dashboard
An MCP-controlled, server-rendered e-ink dashboard for the Amazon Kindle Paperwhite EY21 (Paperwhite 1, 2012). The renderer targets its 758×1024, 16-level grayscale display and deliberately sends the Kindle a simple PNG.
The Kindle is a display client, not the MCP host:
Claude / Pi / another MCP client
│ MCP tools
▼
dashboard state + renderer ──── HTTP ────► Kindle EY21This separation keeps API keys and integrations off the old device. MCP clients can design screens and push weather, hardware, home automation, or agent-control plane state. Live host time and hardware utilization are resolved when the PNG is rendered.
Features
Named screens with an active-screen switch
Regions positioned on a normalized 1000×1000 canvas
text,metric,status,progress,list, and localimagewidgetsBuilt-in monochrome icons:
weather/cloud,cpu,memory,disk,agentAtomic JSON persistence shared by the MCP and HTTP processes
Live sources:
system.time,system.date,system.hostname,system.cpu_percent,system.memory_percent,system.disk_percent,system.load, andsystem.uptimeBrowser mode with cache-free periodic refresh
Optional jailbroken-device
wget+eipsrefresh script
Related MCP server: Send to Kindle MCP Server
Install and run
cd kindle-mcp-dashboard
python -m venv .venv
.venv/bin/pip install -e .
.venv/bin/kindle-dashboard init
.venv/bin/kindle-dashboard preview
.venv/bin/kindle-dashboard serve --host 0.0.0.0 --port 8787 --refresh 60Port 8787 is the direct dashboard-server port. Find the computer's LAN address
with ip -br address. Most clients can open this plain-HTTP URL in the
Experimental Browser:
http://COMPUTER_LAN_IP:8787/kindleFor the first-generation EY21 on firmware 5.6.1.1, the Experimental Browser and the jailbroken device client were tested successfully through standard HTTP port 80 instead. Configure a reverse proxy from port 80 to the dashboard's 8787 port, then use:
http://COMPUTER_LAN_IP/kindleStore connectivity and Amazon registration are not required. The browser only needs working local Wi-Fi. If the browser itself cannot open local HTTP pages, use the optional jailbroken client described below.
Connect an MCP client
The MCP server uses stdio. Example Claude Code registration:
claude mcp add kindle-dashboard -- \
/absolute/path/to/kindle-mcp-dashboard/.venv/bin/kindle-dashboard-mcpExample Codex registration:
codex mcp add kindle-dashboard -- \
/absolute/path/to/kindle-mcp-dashboard/.venv/bin/kindle-dashboard-mcpEquivalent generic MCP client configuration:
{
"mcpServers": {
"kindle-dashboard": {
"command": "/absolute/path/to/kindle-mcp-dashboard/.venv/bin/kindle-dashboard-mcp"
}
}
}Then ask the agent, for example:
Update the Kindle overview weather region to show Lisbon, 21 °C, partly cloudy. Replace the agent list with Codex running, Claude idle, and CI healthy.
The MCP tools are:
get_dashboardlist_screensactivate_screenupsert_screenupdate_regionpush_updatesrender_preview
For layout changes, use upsert_screen. Coordinates are normalized: {x: 0, y: 0, w: 500, h: 500} is the top-left quarter regardless of device pixels.
Content-only updates should use update_region or atomic push_updates.
Image regions use an absolute local file path in their image field; the image
must be available on the machine running the renderer. Set trim: true to
remove white margins before fitting a logo or other scanned asset.
Example update arguments:
{
"screen_id": "overview",
"updates": [
{
"region_id": "weather",
"fields": {"value": "21 °C · partly cloudy", "icon": "cloud"}
},
{
"region_id": "agents",
"fields": {
"items": [
{"text": "Codex · running tests", "status": "running"},
{"text": "Claude · idle", "status": "idle"},
{"text": "CI · healthy", "status": "healthy"}
]
}
}
]
}Optional jailbroken EY21 mode
This device is confirmed as firmware 5.6.1.1, build 2689890035. See the firmware-specific deployment notes. Its B024 serial prefix confirms the Wi-Fi Paperwhite 1 variant. The current KindleModding compatibility data selects WinterBreak2 for this model and firmware, without a registration or lock-screen-ad prerequisite.
B024 is a non-unique model-family prefix used only for compatibility lookup;
the dashboard never needs or stores a complete Kindle serial number. Users with
a different device should select or create a matching profile rather than
publishing their full serial.
Once the EY21 is already jailbroken with shell access, copy
kindle/refresh.sh to it, make it executable, and change DASHBOARD_URL to the
server's LAN address. For this firmware, use the port-80 /screen.png URL from
the supplied dashboard.conf; the direct :8787 endpoint was not reliable on
the device. The script disables the screensaver, downloads the current PNG, and
draws it using the Kindle's built-in eips command.
The original Paperwhite is also supported by the legacy kindle build of
KOReader, which can be useful as a launcher on an already-jailbroken device.
State and operation
State defaults to:
~/.local/state/kindle-mcp-dashboard/dashboard.jsonOverride it for both processes with KINDLE_DASHBOARD_STATE. Run the HTTP
server and MCP server under the same Unix user so they share the same file.
The browser refresh interval defaults to 60 seconds. E-ink panels ghost when updated too often, so intervals below 30 seconds are discouraged. The HTTP server enforces a minimum browser refresh of 10 seconds.
The HTTP display server has no authentication. When bound to 0.0.0.0, its
screen image and /api/state are readable by other devices that can reach the
port. Run it only on a trusted LAN or restrict access with a host firewall.
Development
.venv/bin/pip install pytest
.venv/bin/pytestAvailable Tools
7 toolsactivate_screenB
Make a configured screen visible on the Kindle.
Inputs: screen_id (required). Returns: object
get_dashboardB
Return the complete dashboard configuration and current content.
Inputs: no named parameters. Returns: object
list_screensA
List screens, their names, region IDs, and which screen is active.
Inputs: no named parameters. Returns: result
push_updatesB
Atomically apply content updates. Each item needs region_id and fields.
Inputs: updates (required), screen_id (required). Returns: object
render_previewA
Render the current screen to a 758x1024 PNG and return its absolute path.
Inputs: output_path. Returns: object
update_regionC
Update region content such as value, label, items, status, icon, unit, size or invert.
Inputs: fields (required), region_id (required), screen_id (required). Returns: object
upsert_screenB
Create or replace a screen. Region coordinates use a normalized 1000x1000 canvas.
Inputs: screen (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Most tools are clearly distinct, covering screen management, activation, preview, and content updates. The main ambiguity is between update_region and push_updates, but their descriptions clarify single-region vs atomic batch updates.
All tool names follow a consistent verb_noun snake_case pattern: update, push, render, get, list, activate, upsert. There are no mixed conventions or vague placeholder names.
Seven tools is well-scoped for a Kindle dashboard server, covering screen CRUD, content updates, preview, and activation without unnecessary bloat. Each tool appears necessary to the workflow.
The core dashboard lifecycle is covered: create/replace screens, update regions, push updates, preview, list, and activate. A delete_screen tool is the most obvious missing operation, but it is not a blocking gap for typical dashboard management.
Maintenance
Related MCP Connectors
A remote MCP server to convert HTML documents (URL or raw source) to PDF or screenshots
Pingstack monitors cron jobs and scheduled tasks with heartbeat checks, and checks websites, TCP ports, DNS records, SSL certificates and domain expiry. This MCP server lets your agent create, update, pause and delete checks, build dashboards and publish them as status pages, manage notification groups, and read incidents with their causes, uptime, run history and latency. Pause, delete and unpublish stay off until you turn them on. Browser sign-in, no API key needed.
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
Screenshots, PDFs, image editing, QR codes, email validation and more through one hosted MCP server.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server for accessing local Kindle library data, exposing tools to query profile, health, and book metadata.MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that allows Claude Desktop to send documents directly to your Kindle e-reader.2MIT
- AlicenseAqualityFmaintenanceEnables AI agents to build freeform dashboards for e-ink panels by listing widgets and devices, laying out a canvas, rendering a preview, and pushing to the panel.18AGPL 3.0
- FlicenseNot gradedqualityCmaintenanceEnables pushing text from an AI conversation to a low-cost BLE e-ink shelf label via an MCP tool, with rich-text markup, card-style letter layouts, and real-time SSE delivery to a phone control page. Also lets clients check current screen content, update time, push history, and whether a phone is online.-