关于 PrintYourDuck Quote
PrintYourDuck Quote 是用于准备并提交本地 3D 打印文件以供人工报价审核的 MCP 服务。它适用于编码 Agent 工作流,不负责定价或结账。
主要功能
- 01读取公开报价要求
- 02查找项目中的近期可打印文件
- 03上传用户确认的文件
- 04提交人工报价请求
- 05查询报价状态
适用场景
- 01为生成的 3D 模型申请报价
- 02在项目中查找可打印文件
- 03查询已提交报价的状态
MCP 相关
向 MCP 客户端提供报价要求、本地文件发现、私密上传与报价提交,以及公开安全的状态查询工具。提供远程 MCP 接口和本地 stdio 程序包。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://printyourduck.com/api/mcpclaude mcp add --transport http com-printyourduck-quote https://printyourduck.com/api/mcp{"mcpServers":{"com-printyourduck-quote":{"type":"http","url":"https://printyourduck.com/api/mcp"}}}在 Cursor 中打开{"servers":{"com-printyourduck-quote":{"type":"http","url":"https://printyourduck.com/api/mcp"}}}在 VS Code 中打开{"mcpServers":{"com-printyourduck-quote":{"type":"http","url":"https://printyourduck.com/api/mcp"}}}{"mcpServers":{"com-printyourduck-quote":{"serverUrl":"https://printyourduck.com/api/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
3此工具无需参数。
详细介绍
PrintYourDuck MCP
用于将本地 3D 打印文件发送至 PrintYourDuck 进行人工报价审核的 MCP 服务。它面向编码 Agent 工作流:用户已生成或选定本地 .stl、.step、.stp、.3mf、.obj 或 .zip 文件,并希望获得报价请求准备方面的帮助。
该服务已预先配置为使用 https://printyourduck.com。用户无需提供 API URL、API 密钥或店铺路由配置。
状态
| 接入方式 | 状态 |
|---|---|
| 远程 MCP | 已上线:https://printyourduck.com/api/mcp |
| 本地 stdio 包 | 可通过 npm 获取:@printyourduck/mcp |
| npm 包 | 公开:@printyourduck/mcp |
| OCI 镜像 | 发布目标:ghcr.io/printyourduck/printyourduck-mcp:<version> |
| MCP Registry | 已上线:com.printyourduck/quote |
目前首选通过 npx 安装。只有确认目标版本的 GHCR 镜像可公开拉取后,才使用 Docker。
为什么要开发它
用户从代码、CAD 生成或快速原型设计流程转向 3D 打印报价时,很容易出错。此 MCP 服务为 Agent 提供了一套范围明确、可审计的工作流:
- 阅读公开的报价要求。
- 在当前项目中查找近期可打印的文件。
- 请用户选择一个文件,并确认所需的安全声明。
- 通过 PrintYourDuck 的私有上传流程上传该文件。
- 提交人工报价请求。
- 通过报价 ID 和客户电子邮件查询可公开查看的报价状态。
它不会计算即时价格、在上传时收取款项、自动完成结账,也不会暴露私有运营详情。
安装
目前请使用:
npx -y @printyourduck/mcp
对于团队共享或需要复现的客户端配置,请固定软件包版本:
npx -y @printyourduck/mcp@<version>
客户端设置
不同客户端的 MCP 配置文件并不相同。请使用符合客户端要求的配置格式,然后重启或刷新客户端,以便重新加载服务。
Claude Code,本地用户设置:
claude mcp add --transport stdio printyourduck -- npx -y @printyourduck/mcp
Claude Code,项目共享的 .mcp.json:
{
"mcpServers": {
"printyourduck": {
"command": "npx",
"args": ["-y", "@printyourduck/mcp"]
}
}
}
只有当仓库有意向所有打开该项目的用户提供 PrintYourDuck 工具时,才使用项目共享的 .mcp.json。Claude Code 在使用项目范围的 MCP 服务前会要求批准。
VS Code 工作区设置,位于 .vscode/mcp.json:
{
"servers": {
"printyourduck": {
"command": "npx",
"args": ["-y", "@printyourduck/mcp"]
}
}
}
使用通用 mcpServers 格式的客户端可以使用上方的 Claude Code 项目配置片段。
使用 MCP Inspector 测试本地服务:
npx -y @modelcontextprotocol/inspector npx -y @printyourduck/mcp
Docker,确认 GHCR 镜像可公开拉取后使用:
docker run --rm -i ghcr.io/printyourduck/printyourduck-mcp:<version>
目前可连接支持远程连接的 MCP 客户端:
https://printyourduck.com/api/mcp
Claude Code 远程 HTTP 设置:
claude mcp add --transport http printyourduck https://printyourduck.com/api/mcp
工具
| 工具 | 用途 | 网络/文件访问 |
|---|---|---|
get_printyourduck_quote_requirements | 返回可接受的文件类型、材料选项、必需的确认事项和安全边界。 | 不访问本地文件。不访问网络。 |
find_recent_printable_files | 在允许的本地项目目录中查找近期可打印的文件。 | 只读本地文件元数据。 |
submit_local_file_for_quote | 上传一个经用户批准的本地文件,并创建人工报价请求。 | 读取一个允许访问的本地文件,私密上传,然后提交至 PrintYourDuck。 |
get_quote_status | 使用报价 ID 和匹配的电子邮箱查询可公开的报价状态。 | 仅向 PrintYourDuck 发起网络请求。 |
默认情况下,本地文件发现和上传仅限于当前工作目录。当 MCP 客户端需要访问其他项目目录时,可将 PRINTYOURDUCK_MCP_ALLOWED_ROOTS 设为以路径分隔的允许列表。
除非调用方提供 submissionId,否则 submit_local_file_for_quote 会根据所选文件和报价详情生成稳定的 submissionId。重试时请重复使用该 ID,以避免创建重复的人工报价请求。该辅助工具还会在本地按 submissionId 和文件哈希缓存已上传的私有文件密钥;如果上传服务返回了生成的 Blob 密钥,重试时便可重复使用相同的已上传文件引用。
防护措施
此服务遵守 PrintYourDuck 的人工报价边界:
- 当前不提供即时定价;
- 上传时不付款;
- 不自动执行结账;
- 不声称产品在本地生产、在加拿大制造或保证交付;
- 公开响应中不包含供应商所在地、履约路线、承运商策略、供应商成本、利润逻辑、私有文件引用或客户数据。
只有在明确界定范围、经过测试、公开记录,并与结账或收款清楚区分的情况下,价格范围或即时估价才可作为未来功能提供。
开发
pnpm install
pnpm check:release
实用检查:
pnpm check # lint, tests, typecheck
pnpm check:security # audit, gitleaks, trufflehog
pnpm check:mcp # stdio initialize, tool list, fixture discovery, path guard
pnpm check:pack # npm tarball allowlist
pnpm check:mcp 会构建服务,通过 stdio 启动服务,验证初始化和工具元数据,创建临时 .stl 测试文件,验证本地文件发现,并验证不在允许根目录内的文件会在上传前被拒绝。
仅当你有意创建真实的报价请求时,才运行生产环境实时冒烟测试:
PRINTYOURDUCK_MCP_LIVE_SMOKE=1 \
[email protected] \
pnpm smoke:live
实时冒烟测试会通过 https://printyourduck.com 上传一个很小的测试文件,提交一条人工报价请求,并验证 get_quote_status 能返回结果。
发布清单
只有在以下各项全部通过后,才能声称 npm 本地辅助工具可安装:
pnpm check:release
npm view @printyourduck/mcp version
VERSION="$(npm view @printyourduck/mcp version)"
gh release view "mcp-v${VERSION}"
PRINTYOURDUCK_MCP_LIVE_SMOKE=1 [email protected] pnpm smoke:live
应从此专用 MCP 仓库发布 npm 软件包更改,而不是从网站仓库发布。
对于每个带标签的版本,请验证 npm 软件包是从该标签对应的提交发布的:
VERSION="$(node -p "require('./package.json').version")"
test "$(npm view "@printyourduck/mcp@${VERSION}" gitHead)" = "$(git rev-parse HEAD)"
npm view "@printyourduck/mcp@${VERSION}" dist.tarball dist.integrity
MCP Registry 名称为 com.printyourduck/quote,因此发布时使用基于域名的 HTTP 身份验证,域名为 printyourduck.com。请从 https://printyourduck.com/.well-known/mcp-registry-auth 提供公开的 v=MCPv1; ... 记录,并仅将匹配的私钥保存在此仓库的 MCP_REGISTRY_PRIVATE_KEY GitHub Actions 密钥中。
只有在以下检查通过后,才能声称已发布至 MCP Registry:
curl -f "https://registry.modelcontextprotocol.io/v0/servers/com.printyourduck%2Fquote/versions"
标记版本前,请在 GitHub 的软件包设置中将 GHCR 软件包设为公开。如果 ghcr.io/printyourduck/printyourduck-mcp 仍为私有,发布工作流会在发布 npm 前失败,因为公开发布的软件包必须允许匿名拉取。
只有在将软件包可见性设为公开并运行以下命令后,才能声称 OCI/容器可安装:
VERSION="$(node -p "require('./package.json').version")"
DOCKER_CONFIG="$(mktemp -d)" docker manifest inspect "ghcr.io/printyourduck/printyourduck-mcp:${VERSION}"
贡献
请参阅 CONTRIBUTING.md。适合作为入门贡献的领域包括客户端设置文档、路径安全加固、MCP 元数据安全、软件包发布检查,以及可公开的示例。
如需报告安全问题,请参阅 SECURITY.md。请勿在公开问题中包含密钥、客户文件、私有文件引用、供应商/成本/利润详情或仪表板截图。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。