printagent
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., "@printagentprint the PDF file ~/documents/report.pdf to the default printer"
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.
PrintAgent
Tiếng Việt · English
Agent in ấn chạy trên máy local, mở API cho hệ thống khác gọi tới để in. Nhận file PDF in thẳng, hoặc nhận template + biến JSON rồi tự render PDF phía agent trước khi in.
Bốn cách điều khiển:
Giao diện | Địa chỉ | Dùng cho |
REST API |
| Ứng dụng web, backend, POS |
WebSocket |
| Ứng dụng cần nhận sự kiện job theo thời gian thực |
MCP |
| Claude Code, Claude Desktop, agent AI |
Web UI |
| Cài đặt, quét máy in, quản lý template, xem hàng đợi |
Yêu cầu
Node.js >= 20
macOS/Linux: CUPS (
lp,lpstat- có sẵn trên macOS)Windows: khuyến nghị cài SumatraPDF để in PDF im lặng
Chromium:
yarn installtự tải bản Chrome của Puppeteer, wizard cài đặt sẽ tải lại nếu thiếu. Nếu máy đã có Chrome, có thể trỏrender.chromePathvào đó; agent cũng tự dò Chrome hệ thống khi bản Puppeteer lỗi.
Màn hình cài đặt trong web UI (và lệnh printagent setup) kiểm tra hết các yêu cầu trên, tự cài thứ còn thiếu, nên không cần dựng tay từng phần.
Related MCP server: MCP Printer Server
Cài đặt
Quy trình giống nhau trên macOS, Windows và Linux.
Cách nhanh nhất, cài từ npm:
npm install -g @hyydev/printagent
printagent start # agent chạy ngay, lần đầu tự mở giao diện cài đặtChạy một lần không cài đặt:
npx @hyydev/printagent startHoặc chạy từ mã nguồn, máy đã có Node >= 20:
git clone https://github.com/huy97/printagent.git
cd printagent
yarn install
yarn start # agent chạy ngay, lần đầu tự mở giao diện cài đặtMáy trắng chưa có Node thì dùng script bootstrap, nó tự cài Node LTS rồi làm nốt phần trên:
# Windows (PowerShell)
powershell -ExecutionPolicy Bypass -File install.ps1# macOS / Linux
bash install.shGiao diện web luôn lên trước. Lần đầu chạy, trình duyệt mở thẳng màn hình cài đặt: bấm Cài đặt tự động một lần, các bước chạy tuần tự và hiện tiến độ ngay trên màn hình. Không cần đụng tới terminal.
Trình cài đặt tự sửa những gì sửa được, không bắt người dùng đi cài tay. Chỉ dừng khi một bước bắt buộc vẫn hỏng sau khi đã thử sửa; các bước còn lại chỉ cảnh báo và agent vẫn khởi động.
Bước | Bắt buộc | Tự xử lý khi thiếu |
Node.js >= 20 | có | cài qua nvm (macOS/Linux) hoặc winget/choco (Windows), rồi tự chạy lại bằng Node mới |
Thư mục | có | tạo thư mục, kiểm tra quyền ghi |
Driver in | không | Linux: cài |
Máy in | không | dò máy in IPP qua mDNS ( |
Chromium | không | tải bản Puppeteer, không được thì cài Google Chrome qua brew/winget/apt |
SumatraPDF (Windows) | không | cài qua winget/choco, ghi vào |
API key | có | tự tạo khoá |
Tunnel | không | cài cloudflared/ngrok nếu |
Chạy nền | không | đăng ký dịch vụ nếu chọn |
Việc cài gói dùng trình quản lý gói có sẵn: brew trên macOS, winget/choco trên Windows, apt-get/dnf/pacman/zypper/apk trên Linux (dùng sudo -n, chỉ hỏi mật khẩu khi đang chạy trong terminal).
Chạy không tương tác (CI, script cài đặt hàng loạt):
node bin/printagent.js setup --service # đăng ký luôn dịch vụ nền
node bin/printagent.js setup --no-service # bỏ qua dịch vụ nền
node bin/printagent.js setup --no-download # không tự tải Chromium
node bin/printagent.js start --no-open # không tự mở trình duyệtLệnh setup chạy đúng các bước đó trong terminal và trả mã thoát 1 khi một bước bắt buộc thất bại, nên dùng được trong script. Lệnh start không bao giờ chặn: agent lên trước, phần cài đặt còn thiếu để người dùng bấm trên web UI.
Địa chỉ giao diện là http://127.0.0.1:7788. Dữ liệu (config, template, job, log) nằm ở ~/.printagent (đổi bằng biến môi trường PRINTAGENT_DATA_DIR), kết quả lần setup gần nhất nằm ở ~/.printagent/setup.json (xem bằng printagent doctor).
Lệnh CLI
node bin/printagent.js setup [--service|--no-service|--no-download]
node bin/printagent.js start [--port 7788] [--host 0.0.0.0] [--no-open]
node bin/printagent.js service [status|install|uninstall]
node bin/printagent.js doctor # kết quả kiểm tra lần setup gần nhất
node bin/printagent.js printers # liệt kê máy in đang kết nối
node bin/printagent.js test --printer "Ten_May_In"
node bin/printagent.js key # xem API key
node bin/printagent.js config set-default-printer "Ten_May_In"
node bin/printagent.js tunnel check # kiểm tra cloudflared/ngrok
node bin/printagent.js mcp # chạy MCP server qua stdioNgôn ngữ
Agent nói được tiếng Việt và tiếng Anh.
Giao diện web: nút đổi ngữ trên thanh tiêu đề, cạnh nút Làm mới. Lựa chọn lưu riêng theo từng trình duyệt.
Màn hình cài đặt lần đầu: nút đổi ngữ ngay góc trên bên trái. Ngôn ngữ chọn ở đây trở thành
agent.localevà quyết định bộ template mẫu được tạo.Wizard trong terminal:
printagent setuphỏi ngôn ngữ trước tiên rồi lưu vào cấu hình.API: mỗi request chọn ngôn ngữ theo header
x-locale, query?lang=, headeraccept-language, rồiagent.localetrong cấu hình (mặc địnhvi). Response kèm headercontent-language, mỗi lỗi kèm trườngkeyổn định để client tự dịch nếu muốn.CLI, log và màn cài đặt trong terminal: biến môi trường
PRINTAGENT_LANG, không có thì theoagent.locale(đổi được trong tab Cài đặt).Tài liệu: README.en.md và llms.en.txt; agent đang chạy phục vụ
GET /llms.txt?lang=en.
PRINTAGENT_LANG=en node bin/printagent.js printers
curl -H "x-locale: en" http://127.0.0.1:7788/api/printersXác thực
Agent sinh sẵn một API key khi chạy lần đầu (node bin/printagent.js key). Gửi kèm mỗi request:
x-api-key: pa_xxxhoặc Authorization: Bearer pa_xxx, hoặc ?apiKey=pa_xxx (dùng cho WebSocket).
Mặc định request từ chính máy đang chạy agent được miễn key (auth.allowLocalhostWithoutKey). Ngoại lệ này chỉ áp dụng khi thoả đồng thời bốn điều kiện, mỗi điều kiện độc lập nhau nên phá được một cái vẫn chưa đủ:
kết nối TCP tới từ địa chỉ loopback (
127.0.0.1,::1);header
Hostlà loopback - request qua tunnel luôn mang tên miền công khai nên bị loại ngay, kể cả khi kẻ tấn công cố tình không gửi header proxy nào;không có header proxy nào (
cf-connecting-ip,x-forwarded-for,x-real-ip,cf-ray, ...);Sec-Fetch-Sitelàsame-originhoặcnone, vàOrigin(nếu có) là chính agent - chặn kịch bản một website bất kỳ gọi ngầm tới agent trên máy người dùng, kể cả bằng thẻ<img>/<script>vốn không gửiOrigin.
Ba header trên do trình duyệt tự đặt và trang web không sửa được; công cụ dòng lệnh trên chính máy local không gửi chúng nên vẫn được miễn key như trước.
Các thiết lập quyết định binary được agent chạy hoặc tắt xác thực (render.chromePath, printing.sumatraPath, printing.allowLocalFilePath, printing.allowedFileRoots, auth.enabled, auth.allowLocalhostWithoutKey, tunnel.*.binPath) chỉ sửa được từ máy local; request từ xa gửi các trường này sẽ bị bỏ qua và liệt kê trong rejectedFields.
Giới hạn nguồn tài liệu
filePath(in file có sẵn trên máy chạy agent) mặc định tắt. Bật bằngprinting.allowLocalFilePath = truevà nên khai báoprinting.allowedFileRootsđể giới hạn thư mục.urlchỉ nhậnhttp/https, chặn địa chỉ loopback và dải mạng nội bộ (bật lại bằngprinting.allowPrivateNetworkUrl), giới hạn dung lượng theoprinting.maxDownloadMb(mặc định 64MB).CORS mặc định không cho phép origin nào; thêm domain vào
server.corsOriginsnếu web app của bạn gọi trực tiếp từ trình duyệt. WebSocket cũng áp dụng cùng danh sách này, kèm ngoại lệ cho chính trang do agent phục vụ (kể cả khi mở qua tunnel, vì khi đóOrigintrùngHost).
Bảo vệ khi mở ra Internet
Sai API key 10 lần trong một phút thì địa chỉ đó bị chặn 5 phút, trả HTTP 429 kèm
retry-after. Bộ đếm dùng chung cho cả REST và WebSocket, nên không dò key được bằng cách mở lại kết nối WebSocket. Địa chỉ lấy từcf-connecting-ip/x-real-ip/x-forwarded-fornên mỗi client qua tunnel bị tính riêng; một lần xác thực đúng sẽ xoá bộ đếm. Request từ máy local không bị tính.Không bật được tunnel khi
auth.enabled = falsehoặc khi chưa có API key nào - agent từ chối với thông báo nêu rõ việc cần làm.Không tắt được
auth.enabledtrong lúc tunnel đang chạy; phải dừng tunnel trước.Mọi phản hồi đều kèm
x-content-type-options: nosniff,referrer-policy: no-referrer,x-frame-options: SAMEORIGIN.Không có rate limit cho request đã xác thực đúng: nếu cần, chặn ở tầng Cloudflare (WAF, Access) hoặc reverse proxy.
Tài liệu cho tác nhân AI
Agent tự mô tả mình qua ba địa chỉ, đều không cần API key nên tác nhân đọc được ngay khi vừa kết nối:
Địa chỉ | Nội dung |
| Điểm khám phá: phiên bản, nơi đọc tài liệu, ba điểm truy cập REST/WebSocket/MCP, cách xác thực |
| Đặc tả OpenAPI 3.1 của cả 36 endpoint REST, nạp thẳng vào công cụ sinh client hoặc khai báo tool |
| Bản rút gọn dạng văn bản, cũng nằm sẵn trong repo tại llms.txt và llms.en.txt |
Cách nhanh nhất để một tác nhân dùng được PrintAgent là cắm MCP (xem mục MCP): 13 tool đã kèm mô tả và schema, không cần đọc tài liệu REST.
Nếu tích hợp qua REST, trình tự gợi ý: đọc /.well-known/printagent.json, GET /api/printers lấy tên máy in, GET /api/templates/:id đọc sampleData để biết khuôn dữ liệu, rồi POST /api/print/template.
REST API
In file PDF
POST /api/print/pdf - nhận một trong ba nguồn: content (base64), url, filePath, hoặc upload multipart field file.
# base64
curl -X POST http://127.0.0.1:7788/api/print/pdf \
-H "x-api-key: $KEY" -H "content-type: application/json" \
-d '{"content":"JVBERi0xLj...","printer":"HP_LaserJet","copies":2,"wait":true}'
# upload file
curl -X POST http://127.0.0.1:7788/api/print/pdf \
-H "x-api-key: $KEY" -F file=@invoice.pdf -F printer=HP_LaserJet
# tải từ URL rồi in
curl -X POST http://127.0.0.1:7788/api/print/pdf \
-H "x-api-key: $KEY" -H "content-type: application/json" \
-d '{"url":"https://example.com/invoice.pdf"}'Tuỳ chọn in: copies, title, options.duplex (none|long|short), options.paperSize, options.orientation, options.fitToPage, options.raw, options.extraOptions (mảng tham số -o của CUPS). Thêm "wait": true để API chờ in xong rồi mới trả về.
In từ template + biến JSON
POST /api/print/template
curl -X POST http://127.0.0.1:7788/api/print/template \
-H "x-api-key: $KEY" -H "content-type: application/json" \
-d '{
"templateId": "invoice-a4",
"data": { "code": "HD001", "shop": {"name":"Cửa hàng ABC"}, "items": [{"name":"Cà phê","qty":2,"price":35000}], "total": 70000 },
"printer": "HP_LaserJet",
"copies": 1,
"wait": true
}'Có thể truyền template inline thay cho templateId:
{ "template": "<h1>{{code}}</h1>", "engine": "html", "data": { "code": "HD001" } }Render thử, không in
POST /api/print/render trả về PDF (thêm ?format=html để xem HTML, ?format=base64 để nhận JSON).
Các endpoint khác
Method | Path | Mô tả |
GET |
| Trạng thái agent (không cần key) |
GET |
| Thông tin chi tiết, kiểm tra renderer |
GET |
| Danh sách máy in (quét lại nếu |
POST |
| Quét lại máy in |
GET |
| Chi tiết + tuỳ chọn của máy in |
POST |
| Đặt máy in mặc định |
POST |
| In trang thử |
GET/POST |
| Danh sách / tạo template |
GET/PUT/DELETE |
| Xem / sửa / xoá template |
POST |
| Render template thành PDF |
GET |
| Danh sách mẫu trong bộ có sẵn ( |
POST |
| Tạo bộ mẫu của một ngôn ngữ ( |
GET |
| Danh sách job ( |
GET |
| Chi tiết job |
GET |
| Tải file đã in |
POST |
| Huỷ job |
POST |
| In lại job |
GET/PUT |
| Xem / sửa cấu hình |
GET/POST/DELETE |
| Quản lý API key |
GET |
| Trạng thái + công cụ tunnel |
POST |
| Bật / tắt tunnel |
GET |
| Kết quả cài đặt ban đầu + trạng thái dịch vụ nền |
POST |
| Chạy cài đặt trong nền, trả tiến độ ngay (chỉ từ máy local) |
GET |
| Tiến độ lần chạy hiện tại: bước đang chạy, log, kết quả (chỉ từ máy local) |
POST |
|
|
WebSocket
const ws = new WebSocket('ws://127.0.0.1:7788/ws?apiKey=pa_xxx');
ws.onopen = () => {
ws.send(JSON.stringify({ id: '1', type: 'printers.list' }));
ws.send(JSON.stringify({
id: '2',
type: 'print.template',
payload: { templateId: 'invoice-a4', data: { code: 'HD001' }, wait: true },
}));
};
ws.onmessage = (event) => console.log(JSON.parse(event.data));Lệnh hỗ trợ: ping, status, printers.list, printers.scan, templates.list, templates.get, render.template, print.pdf, print.template, jobs.list, job.get, job.cancel, tunnel.status, subscribe.
Sự kiện đẩy về ({"type":"event"}): job.created, job.updated, printer.changed, tunnel.changed, log. Chọn kênh nhận bằng {"type":"subscribe","payload":{"events":["job","printer","tunnel","log"]}}.
MCP
Streamable HTTP
claude mcp add --transport http printagent http://127.0.0.1:7788/mcp --header "x-api-key: pa_xxx"stdio
{
"mcpServers": {
"printagent": {
"command": "node",
"args": ["/duong/dan/printagent/bin/printagent.js", "mcp"],
"env": {
"PRINTAGENT_URL": "http://127.0.0.1:7788",
"PRINTAGENT_API_KEY": "pa_xxx"
}
}
}
}Chế độ stdio mặc định gọi tới agent đang chạy. Thêm --standalone nếu muốn MCP tự xử lý in mà không cần agent chạy nền.
Tool: list_printers, agent_status, print_pdf, print_template, render_template, list_templates, get_template, save_template, delete_template, list_jobs, get_job, cancel_job, print_test_page.
Template
Template dùng Handlebars. Hai kiểu:
html: render HTML thành PDF bằng Chromium rồi gửi máy in. Dùng cho hoá đơn A4, bill 80mm.text: render text thuần, đóng gói lệnh ESC/POS (init, cut, mở két) và gửi thẳng máy in ở chế độ raw.
Agent không tự tạo template khi khởi động. Màn hình cài đặt hỏi trước, chỉ tạo khi bạn đồng ý; tạo sau bất cứ lúc nào bằng nút Bộ mẫu ở tab Template, POST /api/templates/seed, hoặc printagent setup --templates.
Có hai bộ mẫu, mỗi bộ 6 template, tạo theo ngôn ngữ đang chọn ở màn cài đặt.
Bộ tiếng Việt:
Id | Khổ | Dùng cho |
| A4 | Hoá đơn bán hàng đơn giản |
| 80mm | Bill máy in nhiệt, render qua PDF |
| raw | Bill text thuần gửi thẳng máy in nhiệt |
| A4 | Hoá đơn GTGT, bản thể hiện hoá đơn điện tử |
| 80mm | Hoá đơn điện tử khởi tạo từ máy tính tiền |
| A5 | Phiếu thu tiền mặt mẫu 01-TT |
Bộ tiếng Anh, dùng USD và định dạng en-US:
Id | Khổ | Dùng cho |
| A4 | Sales invoice, có QR và tiền bằng chữ |
| 80mm | Thermal receipt, render qua PDF |
| raw | ESC/POS receipt, text thuần |
| A4 | Tax invoice, VAT hai bên, thuế suất theo dòng, khối chữ ký |
| 80mm | POS tax receipt, tiền khách đưa và tiền thối |
| A5 | Cash receipt, số quyển/số phiếu, 5 ô chữ ký |
Hai bộ dùng id khác nhau nên cài cả hai trên cùng một máy được; tạo lại không ghi đè mẫu đã có.
Ba mẫu cuối của bộ tiếng Việt bám theo quy định hiện hành: Nghị định 123/2020/NĐ-CP (sửa đổi tại Nghị định 70/2025/NĐ-CP) và Thông tư 78/2021/TT-BTC cho hoá đơn điện tử, Thông tư 133/2016/TT-BTC cho phiếu thu. Chúng dùng một thuế suất chung cho cả hoá đơn (vatRate, vatAmount); hoá đơn nhiều thuế suất cần sửa lại bảng tổng hợp. Bộ tiếng Anh là mẫu thương mại thông dụng, không gắn với biểu mẫu pháp lý của nước nào.
Helper có sẵn: currency, formatNumber, formatDate, vndWords, enWords, amountWords, now, add, sub, mul, div, inc, sum, eq, ne, gt, lt, and, or, upper, lower, padStart, padEnd, repeat, concat, cols (căn nhãn trái - số phải theo số cột), ascii (bỏ dấu tiếng Việt cho máy in nhiệt), json, qr, qrDataUri.
{{vndWords 8855000}}đọc số tiền thành chữ:Tám triệu tám trăm năm mươi lăm nghìn.{{enWords 979.76 currency="USD"}}đọc bằng tiếng Anh kèm đơn vị:Nine hundred and seventy-nine US dollars and seventy-six cents only.{{amountWords total locale="en" currency="USD"}}chọn cách đọc theo ngôn ngữ, tiện khi một template dùng cho cả hai.{{formatDate date day="2-digit" month="2-digit" year="numeric"}}lấy riêng ngày tháng năm; không truyền thành phần nào thì dùngdateStyle/timeStyle.
<h1>{{shop.name}}</h1>
{{#each items}}
<div>{{inc @index}}. {{name}} - {{currency (mul qty price)}}</div>
{{/each}}
<p>Tổng: {{currency total}}</p>
{{qr code size=90}}Cấu hình trang cho template html: page.format (A4, A5, Letter...), page.width/page.height (khổ tuỳ chỉnh như 80mm), page.landscape, page.marginTop|marginRight|marginBottom|marginLeft.
Đặt page.height = "auto" cùng page.width cho giấy cuộn: agent đo chiều cao nội dung rồi cắt đúng chỗ thay vì đẩy hết tờ 297mm. Thêm page.autoHeightPadding (mặc định 2mm) nếu máy in cần chừa thêm chân giấy.
Máy in nhiệt / ESC/POS
Cách 1 (khuyến nghị): template
htmlvớipage.width = 80mm, in như PDF bình thường.Cách 2: template
text+options.raw = true, agent gửi byte thô kèm lệnh ESC/POS. Tuỳ chọnescpos:init,cut,feed,codepage,encoding,openDrawer.Trên Windows, in raw cần chia sẻ máy in và đặt
printing.rawShareName(ví dụ\\localhost\POS58).
Tunnel công khai
Bật trong tab Tunnel của web UI hoặc gọi API.
Cloudflare quick tunnel: cần
cloudflared, để trống token. Agent chạycloudflared tunnel --url http://127.0.0.1:7788và lấy URL*.trycloudflare.com(đổi mỗi lần chạy).Cloudflare named tunnel: tạo tunnel trên Cloudflare Zero Trust rồi điền token + hostname. Agent chạy
cloudflared tunnel --url http://127.0.0.1:7788 run --token <token>, nhưng tunnel tạo từ dashboard luôn lấy ingress từ xa, nên bắt buộc vào Zero Trust > Networks > Tunnels > tunnel đang dùng > Public Hostname và trỏ hostname vềhttp://127.0.0.1:7788(hoặchttp://localhost:7788). Thiếu bước này thì hostname trả 502/1033 dù connector vẫn báo kết nối thành công.ngrok: cần
ngrokvà authtoken. Có thể gắn domain cố định.
Bật tunnel.autoStart để agent tự mở tunnel mỗi lần khởi động.
Sau khi tunnel chạy, agent tự gọi https://<hostname>/api/health kèm một header ngẫu nhiên rồi đối chiếu phản hồi để biết địa chỉ công khai có thực sự về đúng agent này không. Không khớp thì trường warning trong GET /api/tunnel (và tab Tunnel) nói rõ nguyên nhân. Agent cũng cảnh báo khi phát hiện một tiến trình cloudflared khác trên máy đang chạy cùng tunnel, vì hai connector cùng tunnel làm Cloudflare chia request cho cả hai.
Khi mở ra Internet, luôn giữ auth.enabled = true và chỉ chia sẻ API key cho hệ thống cần dùng.
Giao diện web
Giao diện dựng bằng React + TypeScript + Vite + Tailwind v4 + shadcn/ui, mã nguồn trong ui/, bản build nằm ở web/ và được agent phục vụ tại http://<host>:7788.
yarn build # build UI ra thư mục web/
yarn ui:dev # chạy Vite dev server (proxy /api và /ws sang cổng 7788)Khi truy cập qua tunnel, giao diện sẽ hỏi API key và lưu vào localStorage của trình duyệt. Các thao tác nhạy cảm (xem/tạo/xoá API key, sửa cấu hình chỉ dành cho máy local) chỉ thực hiện được khi mở trực tiếp trên máy chạy agent.
Cấu trúc dữ liệu
~/.printagent/
├── config.json # toàn bộ cấu hình
├── templates/<id>/ # template.hbs|template.txt + meta.json
├── files/ # file PDF/raw của các job (tự dọn theo queue.keepFilesHours)
├── jobs/index.json # lịch sử job
└── logs/ # log theo ngàyChạy nền
Một lệnh cho cả ba hệ điều hành, không cần quyền quản trị và không cần NSSM:
printagent service install # đăng ký khởi động cùng máy
printagent service status # xem trạng thái
printagent service uninstall # gỡCũng bật/tắt được trong tab Cài đặt của web UI. Bên dưới nó dùng:
Hệ điều hành | Cơ chế | File/tác vụ tạo ra |
macOS | launchd (LaunchAgent của user) |
|
Linux | systemd user unit + |
|
Windows | Task Scheduler, trigger ONLOGON | tác vụ |
Trên macOS log chạy nền ghi vào ~/.printagent/logs/service.log. Trên Linux, enable-linger giúp agent chạy cả khi chưa đăng nhập phiên đồ hoạ. Trên Windows tác vụ đăng ký bằng file XML và chạy qua wscript nên không bật cửa sổ console mỗi lần đăng nhập; file shim nằm ở ~/.printagent/printagent-service.vbs.
Lưu ý riêng cho Windows
Bước cài gói dùng
winget(có sẵn từ Windows 10 21H2). Máy chỉ cóchocothì phải chạy PowerShell bằng quyền admin, nếu không lệnh cài sẽ bị từ chối và bước đó chỉ còn cảnh báo.Lần đầu agent lắng nghe trên
0.0.0.0, Windows Firewall sẽ hỏi cấp quyền. Bấm Cancel vẫn dùng được qua127.0.0.1, chỉ mất truy cập từ máy khác trong LAN.Máy mới thường đã có sẵn "Microsoft Print to PDF" nên bước máy in không chặn. Máy in mạng phải thêm bằng Settings > Printers & scanners; agent không tự dò mDNS trên Windows.
In PDF ưu tiên SumatraPDF (wizard tự cài). Không có thì tự chuyển sang PowerShell
PrintTo, chậm hơn và bỏ qua phần lớn tuỳ chọn in.In raw (ESC/POS) cần chia sẻ máy in rồi đặt
printing.rawShareName, ví dụ\\localhost\POS58.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
MCP tools for AI agents: render URLs to image/PDF, check link health, convert HTML/CSV/JSON.
Automate 1,000+ services from any MCP-compatible AI agent: build Applets, run actions and queries.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables interaction with 3D printer management systems through an MCP server, supporting STL file manipulation, slicing, and control of printers like OctoPrint, Klipper, Duet, and more.112230GPL 2.0
- AlicenseAqualityCmaintenanceEnables AI assistants to print documents, manage print queues, and control printers on macOS/Linux systems via the CUPS printing system. Supports printing PDFs, text files, and other formats with options like duplex printing, landscape orientation, and multiple copies.64411MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Memobird thermal printers to print text, HTML, web pages, and images directly from MCP-enabled clients. It includes tools for device binding, image conversion, and monitoring print job status.131ISC
- AlicenseAqualityFmaintenanceConnect AI agents to physical printers. Print receipts, shipping labels, and packing slips to your existing BizPrint-connected printers from Claude and other MCP clients.71MIT
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/huy97/printagent'
If you have feedback or need assistance with the MCP directory API, please join our Discord server