Files
Mortdecai 421c3c9660 feat: initial MCP server for printing markdown to Epson TM-m30
Single tool `print(markdown, title?, timestamp?, qr_urls?, cut?)`. Hand-rolled
line-by-line markdown parser translates headings/bold/code/lists/blockquotes/
HR/links to ESC/POS, then sends raw bytes via TCP to 192.168.0.184:9100.

Mirrors mcp-gemma4 layout (stdio server, single server.py, mcp package).
2026-05-25 16:51:17 -04:00

1.3 KiB

mcp-pos-print

MCP server that prints markdown to the Epson TM-m30 receipt printer.

Start Here

Read the latest handoff first: .claude/handoffs/ (most recent file). It has session state, in-progress work, and ordered next steps.

Then check IDEA.md for the project brief and DECISIONS.md for settled choices.

Project Identity

Stdio MCP server exposing one tool, print, that takes a markdown string (plus optional title, timestamp, and QR URL list) and sends ESC/POS bytes to the TM-m30 at 192.168.0.184:9100. Mirrors the mcp-gemma4 layout — single server.py, stdio transport, registered in ~/.claude.json. The server owns markdown → ESC/POS translation; callers do not need to know any printer-specific schema.

Current State

  • Phase: building
  • Repo: git.sethpc.xyz/Seth/mcp-pos-print (planned)
  • Deploy target: invoked locally by Claude Code on whichever host has LAN access to 192.168.0.184 (typically steel141)
  • Status: initial scaffold

Conventions

  • See ~/bin/POS_PRINT.md for the printer reference (IP, port, Font B columns, native QR usage).
  • See ~/bin/mcp-gemma4/server.py for the MCP layout pattern to mirror.
  • Env overrides: POS_PRINTER_IP, POS_PRINTER_PORT, POS_PRINTER_TIMEOUT.
  • Always Font B (font='b', 57 cols) — Font A column math is wrong for 80mm paper at the default size.