
GitHub - ashuio/livewall: A live status board your AI agent writes while it works. Send a JSON board spec over MCP, HTTP or the CLI; a browser renders it live over SSE.
Made an MCP server so my Hermes agent can draw its own progress board while it works
The pattern I kept hitting: agent goes off on a 20 minute task, comes back with a summary. I can't see the middle. I either wait, or I go read its logs.
So I had it build this. Livewall is a small service plus an MCP server. The agent calls a tool with a board spec, a browser renders it live over SSE.
11 tools, all the obvious ones: set_board, update_block, update_board, reset_board, delete_board, list_boards, get_board, get_config, set_config, describe_blocks, and a livewall_ping. The MCP layer validates against the same contract the HTTP API uses, so a malformed block comes back as a named refusal with the fix instead of a 400 the agent has to guess at.
The part that actually matters for an agent is that a board is data, not markup. The agent picks blocks per task:
{"id": "p", "type": "progress", "label": "Migration", "value": 340, "max": 900}
That's a progress bar. Change type to table and it's a table. line gives you a chart. 17 block types, one contract, so nothing to learn beyond the block names. describe_blocks returns the whole vocabulary at runtime if the agent wants to check.
Wiring it in is the normal mcp_servers block:
mcp_servers:
livewall:
command: /path/to/livewall/.venv/bin/python
args: ['/path/to/livewall/mcp/server.py']
env:
LIVEWALL_URL: http://127.0.0.1:8470
Couple of things I'd flag:
- Boards live in memory and are gone on restart. That's deliberate (no database, no migrations) but it will catch you out once.
- Auth is one shared bearer token, or off. Binds loopback by default. If you're going to expose it past your LAN, the token is the only thing in the way.
- Never load tested. Built for a few boards and a few viewers. I don't know where it falls over.
- It's 0.0.1.
Self-hosted, no cloud anything. The CLI is stdlib only, so cron or a systemd timer can push to a board without the agent being involved at all, which is useful for the "is this backup actually running" kind of question.
Client's only runtime deps are react and react-dom. The multi-series line chart is hand-rolled SVG because adding a charting library to draw two lines felt excessive.
Apache-2.0. Repo's in the link. Happy to answer anything about the MCP layer or the contract if you want to build something similar.