标签打印控制服务

一个无服务器的MCP服务器和Alexa自定义技能,通过AI助手和语音直接控制Brother PT-P750W标签打印机,运行在AWS Lambda上,支持OAuth 2.1认证和WireGuard VPN隧道。

  • by JeremyProffittOrg
  • Go
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 JeremyProffitt/go-mcp-brother-label-printer-direct

使用说明

去mcp兄弟标签打印机直接

无服务器MCP(模型上下文协议)服务器和Alexa Custom Skill,通过AI助手和语音提供直接的Brother PT-P750W标签打印机控制。在AWS Lambda上运行,具有OAuth 2.1身份验证和WireGuard VPN隧道,可在专用家庭网络上访问打印机。

它做什么

此单个Lambda函数为同一标签打印机提供两个接口:

  • MCP服务器 对于Claude(Claude.ai、Claude Code和其他MCP客户端)--查询打印机状态、检查磁带级别、打印标签、管理打印作业
  • Alexa自定义技能 对于语音控制——“Alexa,让我的标签打印机检查供应水平”

这两个接口共享相同的打印机通信层(IPP/SNMP)、VPN隧道和OAuth身份验证。

建筑

                          +------------------+
                          |  AWS Lambda      |
                          |  (Go, arm64)     |
  Claude / MCP Client --> |                  |
    (API Gateway HTTP)    |  Event Router    |
                          |   |              |
  Alexa Echo Device ----> |   +-> MCP Handler (JSON-RPC 2.0)
    (Direct Invoke)       |   +-> Alexa Handler (ASK JSON)
                          |   +-> Keepalive (CloudWatch Schedule)
  CloudWatch Schedule --> |   |              |
                          |  Printer Clients |
                          |   +-> IPP (631)  |-----> WireGuard -----> Brother PT-P750W
                          |   +-> SNMP (161) |       VPN Tunnel       (Home Network)
                          +------------------+
                                 |
                          +------+------+
                          |  DynamoDB   |  (OAuth state: clients,
                          |  (single    |   auth codes, refresh tokens)
                          |   table)    |
                          +-------------+

关键技术

组件 技术
运行时 使用AWS Lambda(arm64,.al2023提供)
Web框架 GoFiber v2+aws lambda go api代理
打印机协议 HTTP上的IPP(互联网打印协议)
电源监控 SNMP v2c(RFC 3805)
身份验证 使用PKCE的OAuth 2.1,Ed25519 JWT
存储 带TTL的DynamoDB单表设计
VPN WireGuard用户空间(纯Go netstack,无内核模块)
可观察性 开放遥测+CloudWatch日志
部署 AWS SAM+GitHub操作CI/CD

可用标签打印机操作

这些操作可以通过MCP工具和Alexa语音命令进行:

操作 MCP工具 Alexa语音命令
打印机状态 get_printer_info “检查打印机状态”
磁带供应水平 get_supply_levels “检查供应水平”
打印文本标签 print_label “打印[文本]”
打印图像标签 print_label_image --
打印队列 get_print_queue “检查打印队列”
作业状态 get_job_status “检查作业[编号]”
取消作业 cancel_job “取消作业[编号]”
测试连接性 test_connectivity “测试连接性”

兄弟PT-P750W详细信息

  • 胶带: TZe层压盒式磁带(宽度为3.5mm、6mm、9mm、12mm、18mm、24mm)
  • 自动切割机: 内置,每个标签后自动切割
  • 决心 180x360 dpi或360x720 dpi
  • 连接性: WiFi(此服务器通过网络使用IPP)
  • 默认IP: 192.168.1.243

项目结构

go-mcp-brother-label-printer-direct/
  cmd/lambda/              Lambda entry point & event routing
  internal/
    alexa/                 Alexa Custom Skill handler
    mcp/                   MCP JSON-RPC protocol handler
      handler.go           Tool dispatch, resources, prompts
    printer/               Printer communication
      ipp.go               IPP binary protocol client
      snmp.go              SNMP supply level queries
      types.go             Shared data types
    oauth/                 OAuth 2.1 server
    token/                 Ed25519 JWT signing/validation
    store/                 DynamoDB persistence
    vpn/                   WireGuard userspace tunnel
    config/                Environment-based configuration
    middleware/            HTTP middleware (logging, tracing)
    telemetry/             OpenTelemetry setup
  alexa/                   Alexa skill configuration
  template.yaml            AWS SAM template
  .github/workflows/
    deploy.yml             CI/CD pipeline

安装指南

先决条件

  • 转到1.25+
  • AWS CLI已配置凭据
  • AWS-SAM-CLI
  • 您网络上的Brother PT-P750W(或兼容的IPP标签打印机)
  • (可选)WireGuard VPN从Lambda连接到专用网络

构建

make build
# or manually:
cd cmd/lambda && GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -tags lambda.norpc -o bootstrap .

测试

go test -v ./...

环境变量

变量 必填 默认 描述
PUBLIC_URL 没有 http://localhost:3000 OAuth发行者URL(您的域)
ADMIN_USER 没有 admin OAuth登录的管理员用户名
ADMIN_PASSWORD 是 -- Bcrypt哈希管理员密码
DYNAMODB_TABLE 没有 mcp-brother-label-printer-direct-oauth DynamoDB表名
JWT_SIGNING_KEY_ARN 否 -- Ed25519密钥对的密钥管理器ARN
WG_CONFIG_SECRET_ARN 否 -- WireGuard配置的秘密管理器ARN
PRINTER_IP 没有 192.168.1.243 打印机IP地址
PRINTER_NAME 没有 Brother PT-P750W 友好打印机名称
ALEXA_SKILL_ID 否 -- Alexa技能应用程序ID(启用Alexa)
OTEL_ENDPOINT 没有 http://192.168.1.202:4318 OpenTetry OTLP端点

部署

# Via SAM CLI
sam deploy --guided

# Or via GitHub Actions (push to main)
git push origin main

GitHub Actions工作流构建Go二进制文件,运行测试,并通过SAM进行部署。配置这些GitHub存储库机密/变量:

GitHub机密/变量 类型 描述
AWS_ACCESS_KEY_ID 机密 AWS凭据
AWS_SECRET_ACCESS_KEY 机密 AWS凭据
ADMIN_PASSWORD Secret Bcrypt管理员密码哈希
JWT_SIGNING_KEY_ARN 秘密 秘密经理ARN
WG_CONFIG_SECRET_ARN 秘密 秘密经理ARN
ADMIN_USER 变量 管理员用户名
DOMAIN_NAME 变量 自定义域
HOSTED_ZONE_ID 变量 Route53托管区域ID
CERTIFICATE_ARN_US_EAST_2 变量 ACM证书ARN
CLOUDFORMATION_S3_BUCKET 变量 SAM工件的S3存储桶
PRINTER_IP 变量 打印机IP地址
ALEXA_SKILL_ID 变量 Alexa技能ID(可选)

MCP工具

只读工具:

  • get_printer_info --打印机型号、状态、功能、支持的磁带介质
  • get_supply_levels --通过SNMP的磁带盒供应级别
  • get_print_queue --列出所有活动和待处理的标签打印作业
  • get_job_status --按ID检查特定作业
  • test_connectivity --测试IPP、HTTP和SNMP端口

破坏性工具(标有 destructiveHint):

  • print_label --打印文本标签(自动调整大小、自动剪切)
  • print_label_image --下载并打印图像作为标签
  • cancel_job --按ID取消打印作业

MCP资源

  • printer://info --当前打印机状态(JSON)
  • printer://supplies --当前盒式磁带级别(JSON)
  • printer://help --帮助指南(Markdown)

MCP提示

  • diagnose-printer --运行完整的诊断(连接、状态、磁带级别、队列)
  • supply-check --检查磁带供应并标记低/临界水平
  • print-label --打印具有智能默认值的标签

打印机通信

互联网打印协议

服务器直接在Go中实现IPP操作(没有外部库),在端口631上与打印机通信:

  • Print-Job (0x0002)--提交标签打印作业
  • Cancel-Job (0x0008)--取消打印作业
  • Get-Job-Attributes (0x0009)--查询作业状态
  • Get-Jobs (0x000A)--列表打印队列
  • Get-Printer-Attributes (0x000B)--查询打印机信息和功能

SNMP(简单网络管理协议)

使用RFC 3805打印机MIB OID通过端口161上的SNMP v2c查询供应级别:

OID 数据
1.3.6.1.2.1.43.11.1.1.6.1.* 供货说明(磁带盒名称)
1.3.6.1.2.1.43.11.1.1.8.1.* 最大容量
1.3.6.1.2.1.43.11.1.1.9.1.* 当前水平
1.3.6.1.2.1.43.12.1.1.4.1.* 着色剂值