Bring Photo MCP
Turn product photos into verified Bring! list items via MCP.
Thomas Schnücker
@schnueck
Install
$ openclaw skills install @schnueck/bring-photo-mcpBring Photo MCP
Show an AI agent a package, label, or product photo and say: "Add this to my shopping list." This skill guides the agent from visible product details through Bring! catalog classification to a verified list entry with the matching icon, category, and optional original photo.
When to Use
Use this skill primarily when a product should be added to Bring! from a photo. It also covers safe catalog search, ordinary list operations, photo attachment, and verified writes.
Boundary
- Perform deterministic list operations exclusively through the
bring_*MCP tools provided by this server. - Do not construct, replay, inspect, or send raw Bring HTTP requests. Do not use browser automation, shell commands, or a second Bring client for operations covered by these tools.
- Never expose credentials, list IDs, item-detail UUIDs, image paths, or photo bytes in conversation output.
- Treat every tool response as authoritative for the operation it reports. Do not infer success from intent.
Photo-led registration workflow
- Analyse the supplied product photo locally in the conversation. Extract only purchase-relevant facts: visible product name, brand, variant, amount, and ambiguity. If the image is unreadable or ambiguous, ask for clarification; do not write.
- Search the configured locale catalog with
bring_search_catalog({ query, locale?, limit? })using the visible main name first, then specific-to-general terms if needed. - Decide catalog versus free text:
- For an exact catalog product, use the catalog main name and its returned icon/category pair.
- For a product that is not an exact catalog item, retain an identifying free-text
item_name, but select an explicitly returned catalog icon/category pair. - Never assume
Eigene Artikelis a valid API category.
- If the catalog search does not make the classification clear, call
bring_suggest_classification({ product_name, hints?, locale? }). A response with insufficient confidence is a no-write result: present candidates or ask for clarification. - Compose
specificationat no more than 30 Unicode code points. Do not repeat the main/catalog name. Preferbrand + distinguishing variant + amount, keeping the product identifiable. If a required fact is not visible, do not invent it. - Enforce the hard icon/category invariant: every
bring_add_itemcall must containicon_item_idandcategory_idfrom the same valid catalog entry. No create, copy, or move is successful without verified persisted icon and category. - Call
bring_add_item({ lists, item_name, specification, icon_item_id, category_id, image_path?, duplicate_policy }). Addimage_pathonly when the user supplied a permitted local photo path. - Report the returned persisted fields and verification evidence per list, without repeating sensitive identifiers or local paths.
Duplicate policy and idempotency
- Use
duplicate_policy=failby default. An ambiguous existing item is an explicit no-write result, not a reason to overwrite. - Use
duplicate_policy=update_exactonly when the intended existing item has exactly the same item identity and specification. - Repeated identical requests should converge on one verified item per target list. Never silently overwrite another active item with a generic shared name.
Photo operations
- Use
bring_attach_photo,bring_replace_photo, orbring_remove_photoonly for a confirmed target item. - Trust success only when the tool returns its read-back verification (
imageUrlpresent after add/replace; absent after removal). - For images supplied as a conversation attachment rather than a local path, obtain an approved local path through the host workflow before calling a photo tool; do not fabricate a path.
Copy and move
- For copies, call
bring_copy_item({ source_list, target_lists, item_name, include_photo }). Metadata must remain catalog-valid; the source remains unchanged. - For moves, call
bring_move_item({ source_list, target_list, item_name, include_photo }). The target must be completely verified before the source is removed. If target creation or verification fails, report failure and leave the source untouched. - For every multi-target add or copy, enumerate the per-list results. If any result fails and any succeeds, report
status: "partial"; never call it total success. For all failures, reportstatus: "error"with stable error codes.
Other deterministic operations
- Discover allowed lists with
bring_list_listsand inspect them withbring_list_items. - Verify an existing item with
bring_get_itembefore a sensitive follow-up operation. - Use
bring_check_item,bring_uncheck_item, andbring_remove_itemonly on the confirmed requested list and item.
Safe response shape
For writes, state: requested operation, overall status, then one concise result per list (success/partial/error, stable error code when present, and non-sensitive verification evidence). State clearly when no write was performed due to ambiguity, insufficient classification confidence, or duplicate policy.
Top skills in this category
YouTube
@byungkyuYouTube Data API integration with managed OAuth. Search videos, manage playlists, access channel data, and interact with comments. Use this skill when users want to interact with YouTube. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Calls run through the `maton` CLI with OAuth login, or over raw HTTP with a Maton API key where the CLI cannot be installed. Every call is authenticated as the user's connection and reaches only what that connection's authorization allows, which the provider enforces on every request; the endpoints documented here are the ones this skill uses, and any other endpoint of this app needs the user to ask for it by name. Default to read and list calls, and confirm every write or new connection with the user. This file also documents the three constructs that turn a YouTube connection into automation, in the order they are used: the connection (the first step), a hosted function that runs a YouTube action through the Maton SDK, and a trigger that calls that function on a schedule or on an event. Those sections are the platform's own reference text, shared with the api-gateway skill, with YouTube examples; they add no YouTube capability - YouTube is not an event source, a trigger cannot read YouTube data, and the files under `references/<source>/triggers.md` are the platform's event catalogues for the sources Maton offers (time, Calendly, GitHub, Gmail, HubSpot, Linear, Notion, Slack, Stripe).
Wechat Article Search
@wuchubuzai2018搜索微信公众号文章技能。通过微信搜索获取文章列表,覆盖科技/AI、社会热点、财经、教育、职场等各类中文资讯;可按关键词检索并返回标题、概要、发布时间、来源公众号与链接。当用户需要查找微信公众号文章、整理参考资料或快速获取文章信息时使用此技能。
Figma
@hith3shRead files, manage comments, extract design tokens, download images, and create webhooks in Figma via the Figma REST API. Use this skill when users want to i...
Social Media Scheduler
@1kalinPlan, draft, and organize social media content across platforms. Create content calendars, write platform-optimized posts, and maintain consistent posting schedules.
Alexa CLI
@buddyhControl Amazon Alexa devices and smart home via the `alexacli` CLI. Use when a user asks to speak/announce on Echo devices, control lights/thermostats/locks, send voice commands, or query Alexa.