mcpField
B
bring-photo-mcp

bring-photo-mcp

本地服务
github.com生产力19 周前更新

关于 bring-photo-mcp

bring-photo-mcp 是一款本地 TypeScript MCP 服务,可将商品照片转为 Bring! 购物清单条目。它会匹配 Bring! 商品目录,并通过重新读取条目及详情来验证写入结果。

主要功能

  1. 01从照片识别商品
  2. 02将商品匹配至 Bring! 目录
  3. 03选择目录类别和图标
  4. 04添加、替换或移除照片
  5. 05搜索和管理清单条目

适用场景

  1. 01根据包装照片向 Bring! 添加商品
  2. 02验证新条目及其详情
  3. 03在清单间复制或移动条目
  4. 04勾选或移除购物清单条目

MCP 相关

它向 MCP 客户端提供 15 个经 Zod 校验的 Bring! 清单、目录、条目和照片操作工具。服务使用 stdio 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"schnueck-bring-photo": {
"command": "npx",
"args": [
"-y",
"bring-photo-mcp"
],
"env": {
"BRING_ENV": "<BRING_ENV>",
"BRING_EMAIL": "<BRING_EMAIL>",
"BRING_PASSWORD": "<BRING_PASSWORD>",
"BRING_DEFAULT_LIST": "<BRING_DEFAULT_LIST>",
"BRING_ALLOWED_LISTS": "<BRING_ALLOWED_LISTS>",
"BRING_LOCALE": "<BRING_LOCALE>",
"BRING_TEST_ITEM_PREFIX": "<BRING_TEST_ITEM_PREFIX>",
"BRING_TEST_SECOND_LIST": "<BRING_TEST_SECOND_LIST>"
}
}
}
}
启动命令npx -y bring-photo-mcp
需要配置的环境变量
BRING_ENVRuntime boundary: use test for dedicated test lists or prod for explicitly allowlisted production lists.
BRING_EMAILEmail address of the Bring account.
BRING_PASSWORD密钥Password of the Bring account. Store it only in the client or secret-manager environment.
BRING_DEFAULT_LISTExact name of the default Bring list.
BRING_ALLOWED_LISTSComma-separated exact names of every Bring list the server may access.
BRING_LOCALEBring catalog locale.
BRING_TEST_ITEM_PREFIXRequired non-empty item-name prefix for opt-in live E2E runs in test mode.
BRING_TEST_SECOND_LISTOptional exact name of a second dedicated test list for copy, move, and multi-list E2E checks.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmbring-photo-mcp1.0.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Bring Photo MCP v1

English | 德语

将商品照片转化为 Bring! 购物清单条目。

向 AI Agent 展示包装、标签或商品照片,然后说:“把这个添加到我的购物清单。” Bring Photo MCP 让 Agent 识别商品、与 Bring! 商品目录匹配、选择正确的类别和图标、附上照片,并将经验证的结果添加到 Bring! 清单。

它还提供常见的清单操作——搜索、添加、勾选、移动、复制和移除条目——但重点在于以照片为先的工作流:减少输入,避免商品名称含糊不清,并将原始商品图片直接显示在清单上。

Bring Photo MCP 是一个本地、与 Agent 无关的 TypeScript MCP 服务。可执行的 stdio 入口点仅在通过本地环境变量验证后才会启动;本仓库不包含 Hermes 或客户端运行时配置。

安装

要求:Node.js 20+ 和 npm。

npm install
npm run typecheck
npm run lint
npm test
npm run build

本项目使用官方 MCP TypeScript SDK(@modelcontextprotocol/sdk)。npm start 会构建项目,并以 stdio 服务的形式启动 src/index.ts。启动时会先验证配置,之后才使用 Bring 进行身份验证;本仓库有意不包含 Hermes 或客户端运行时配置。

可分发制品

该软件包已为发布到公开 npm 做好准备,并通过显式的 files 允许列表限制包含的文件,同时提供 bring-photo-mcp stdio 二进制入口点。面向公众的精简技能指南见 SKILL.md;经过测试的客户端模板见 docs/MCP-CLIENT-CONFIGURATION.md。无需切换运行时即可完成迁移和回滚,相关说明见 docs/MIGRATION-ROLLBACK.md。

配置

切勿提交含有真实值的 .env 文件。配置模型要求:

  • BRING_ENV=test|prod
  • BRING_EMAIL、BRING_PASSWORD
  • BRING_DEFAULT_LIST
  • BRING_ALLOWED_LISTS(以逗号分隔)
  • BRING_LOCALE(默认值为 de-DE)
  • BRING_TEST_ITEM_PREFIX(默认值为 MCP-TEST-)
  • 可选的 BRING_TEST_SECOND_LIST,仅供多清单 E2E 使用

src/config.ts 会验证这些值。在 PROD 环境中,服务仅接受允许列表中的清单;生产运行时还必须指向固定的发布标签。TEST 仅使用专用的允许列表清单和带临时前缀的测试条目。

选择启用的线上 E2E 测试

npm run test:e2e 不会包含在 npm test 中,本项目也未在此处运行该命令。只有在环境配置完整时才会启动,并且拒绝任何非 BRING_ENV=test 的配置。BRING_ALLOWED_LISTS 必须恰好包含 BRING_DEFAULT_LIST;设置 BRING_TEST_SECOND_LIST 时,必须恰好包含两个已配置的 TEST 清单。必须设置非空的 BRING_TEST_ITEM_PREFIX。

测试工具会在临时目录中创建两个合成 PNG 文件,验证添加和回读,以及照片替换和移除;最后会移除所有带自身前缀的条目,并检查其是否已全部删除。复制、移动和多清单操作仅在显式设置 BRING_TEST_SECOND_LIST 时运行;未设置时,测试工具会如实报告跳过这些操作。

架构

  • src/bring-adapter.ts:确定性的 Bring 网关接口和 HTTP 协议适配器。旧版物品请求体仅使用 URLSearchParams 生成;通过 bringlists/{listUuid}/details 读取详情;从 https://web.getbring.com/locale/catalog.{locale}.json 加载目录;详情元数据使用 ISO-8859-1 多部分格式;照片使用原生 FormData,字段为 imageData。显式的 transferImage 网关功能会在不使用 Bring 身份验证的情况下下载源图像字节,并仅将其上传到目标列表。
  • src/bring-service.ts:业务规则、列表允许名单、分类和重复项规则、回读验证、移动时先复制后删除,以及每个列表的结果。
  • src/mcp-server.ts:15 个经 Zod 验证的 MCP 工具;不包含传输层。
  • src/redaction.ts:从错误文本中隐去密码/令牌字段、类似 UUID 的 ID 和本地路径。

只有在重新读取物品和详情后,写入操作才算成功。详情必须包含 UUID、userIconItemId 和 userSectionId;照片还必须包含 imageUrl。除非 itemId 完全匹配,否则不会使用损坏或孤立的详情。

工具

读取:bring_list_lists、bring_list_items、bring_search_catalog、bring_list_categories、bring_suggest_classification、bring_get_item。

写入:bring_add_item、bring_attach_photo、bring_replace_photo、bring_remove_photo、bring_copy_item、bring_move_item、bring_check_item、bring_uncheck_item、bring_remove_item。

bring_add_item 始终要求提供 icon_item_id 和 category_id;两者都必须与已加载的目录匹配。duplicate_policy 的默认值为 fail;update_exact 只会更改身份完全相同的物品。多列表调用始终为每个目标列表返回一个结果,部分失败时使用 status: "partial"。

错误代码

CONFIGURATION、LIST_NOT_ALLOWED、LIST_NOT_FOUND、ITEM_NOT_FOUND、INVALID_CLASSIFICATION、DUPLICATE_AMBIGUOUS、VERIFICATION_FAILED、UPSTREAM_FAILURE、IMAGE_INVALID、CLASSIFICATION_UNCERTAIN。

错误文本不包含凭据、UUID 或图像路径。

开发与验证

本项目在人工指导和审查下,借助 AI 辅助编码和文档工具开发。发布前,已独立验证自动化测试、隔离的实时端到端检查和发布构件。Thomas Schnuecker 仍是项目维护者,并负责发布。

安全边界与回滚

凭据、真实列表 UUID 和产品照片不得放入 Git、测试固件或日志中。本代码库不会触发登录或实时操作。现有的 bring-safe 解决方案保持不变,作为回滚方案,直到明确批准切换为止。

TEST E2E 和八张照片回归测试不会自动运行:它们需要经批准的专用 TEST 列表、带临时前缀的物品,以及提供的测试图像。之后,通过回读移除所有生成的 TEST 物品和照片,并验证它们确已不存在。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。