使用说明
去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.* |
着色剂值 |
