@bestimmaa/posprint-mcp
This server lets you print markdown content to a POS (point-of-sale) receipt printer via a CUPS URI, using a two-step confirmation flow.
Preview before printing: Call the
printtool withmode=previewto get a preview snippet, line count, and a confirmation token — without sending anything to the printer yet. Receive an excessive length warning if the markdown exceeds 80 lines.Confirm and print: Call the
printtool again withmode=confirmand theconfirmationTokento actually send the job to the printer.Target specific printers: Provide a CUPS/IPP printer URI, or omit it if a default is configured via the
PRINTER_URIenvironment variable.Control print options: Optionally specify the number of copies and a timeout (in milliseconds) for the print job.
Receive job metadata: Upon successful confirmation, get details like the printer URI, duration, timestamp, and an optional job ID.
Error handling: Returns specific error codes for validation, printer, or timeout issues.
Remote access: Can run as an HTTP server with an authentication token for remote clients, plus an unauthenticated health check endpoint.
Click on "Install 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., "@@bestimmaa/posprint-mcpprint receipt for order #123"
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.
@bestimmaa/posprint-mcp
MCP server for POS printer receipts using @bestimmaa/posprint.
The tool is intentionally named print so clients can map natural user phrasing such as "print receipt", "hard copy", or "print this out" to the same operation.
Requirements
Node.js 20+
A printer reachable via a CUPS URI supported by
@bestimmaa/posprint
Related MCP server: Yamato Printer MCP Server
MCP Client Configuration
Add this to your MCP client config. No separate installation step is required — npx fetches the package on first run.
{
"mcpServers": {
"posprint": {
"command": "npx",
"args": ["-y", "@bestimmaa/posprint-mcp"]
}
}
}Global Install (optional)
npm install -g @bestimmaa/posprint-mcpAfter global installation, you can use the shorter form in your MCP client config:
{
"mcpServers": {
"posprint": {
"command": "posprint-mcp"
}
}
}Docker (remote MCP server)
For clients that can only talk to a remote MCP server (e.g. Notion custom agents), run posprint-mcp in a Docker container over HTTP instead of stdio. The image defaults to MCP_TRANSPORT=http.
Configuration via .env
Copy .env.example to .env and fill in your values — .env is gitignored, so real tokens/URIs never get committed.
cp .env.example .env
# edit .env: set POSPRINT_AUTH_TOKEN (e.g. `openssl rand -hex 32`) and PRINTER_URI
docker compose up -d --builddocker-compose.yml reads .env automatically (both for the container's env vars and the host port mapping). To run without Compose, pass the same file to docker run directly:
docker build -t posprint-mcp .
docker run -d --name posprint-mcp -p 3000:3000 --env-file .env posprint-mcpThe server listens on POST /mcp (MCP Streamable HTTP transport, stateless) and GET /healthz (unauthenticated health check). It refuses to start if POSPRINT_AUTH_TOKEN is unset, since an unauthenticated remote endpoint would let anyone on the network print to your printer.
Point your remote MCP client at http://<host>:3000/mcp with header-based auth:
Authorization: Bearer <POSPRINT_AUTH_TOKEN>Note: the container needs network access to your printer's CUPS/IPP endpoint (typically on your LAN), so run it on a network that can reach it (e.g. --network host, or a bridge network with routing to the printer's subnet).
.local (mDNS) hostnames will not resolve inside the container — most base images (including this one) have no mDNS support, so a PRINTER_URI like ipp://myprinter.local:631/... will fail to connect. Use one of:
The printer's static/reserved IP address, or
A regular DNS name if your router provides one (e.g. many Fritz!Box routers also expose LAN devices as
<name>.fritz.box, which resolves via normal DNS and works fine in containers).
Environment variables
Variable | Applies to | Description |
| both |
|
|
| Port to listen on. Defaults to |
|
| Bearer token required on every |
| both | Default CUPS printer URI. When set, the |
Development
npm install
npm run build
npm testRun the local server from source:
npm run devRun the built server:
npm startTool: print
Input:
printerUri?: string(optional if the server has a default configured via thePRINTER_URIenvironment variable)markdown: stringmode: "preview" | "confirm"confirmationToken?: string(required whenmode="confirm")options?: { copies?: number; timeoutMs?: number }
Two-step confirmation flow
Call
printwithmode: "preview".Show the returned snippet to the user and ask for confirmation.
Call
printagain withmode: "confirm"and the returnedconfirmationToken.
Preview response includes:
requiresConfirmation: trueconfirmationTokenpreview.lineCountpreview.snippetpreview.excessiveLengthWarning(present when markdown is more than 80 lines)
Confirm response shape:
{ "ok": true, "meta": { "printerUri": "...", "durationMs": 20, "printedAt": "...", "jobId": "optional" } }Error codes:
VALIDATION_ERRORPRINTER_ERRORTIMEOUT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that enables users to print markdown tasklists, Notion tasks with QR codes, and arbitrary images directly to ESC/POS thermal printers over USB. It includes specialized tools for task processing, automated card generation, and printer diagnostics.Last updated71MIT
- Flicense-qualityDmaintenanceEnables printing of Yamato B2 Cloud shipping label PDFs to a thermal label printer through a Raspberry Pi-based MCP server.Last updated

polydoc-mcpofficial
Alicense-qualityBmaintenanceMCP server that converts HTML or URLs to PDF, captures screenshots, and generates EU-compliant e-invoices (Factur-X/ZUGFeRD).Last updated13MIT- Flicense-qualityDmaintenanceA cross-platform MCP server that enables AI assistants to manage printers, query printer status, and print files on Windows, macOS, and Linux.Last updated12
Related MCP Connectors
A paid remote MCP for hosted MCP server, built to return verdicts, receipts, usage logs, and audit-r
A paid remote MCP for CLI tool MCP, built to return verdicts, receipts, usage logs, and audit-ready
MCP server for Meitre restaurant reservations.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bestimmaa/posprint-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server