OmniTrack Home 全屋物品管家

OmniTrack Home Developer

MCP 接入文档

通过一个高级用户专属 Token,让外部 AI 应用读取家庭临期清单,或复用 OmniTrack Home 的购物清单与物品照片识别能力。

正式端点
https://omni.muyin.com/api/mcp
传输方式
Streamable HTTP · JSON-RPC 2.0 · 无状态 POST
鉴权
Authorization: Bearer <MCP_ACCESS_TOKEN>
给对接方:如果你的 MCP 客户端支持远程 Streamable HTTP 和自定义请求头,只需要配置正式端点与 Bearer Token。两个图片工具同步返回 JSON,并把同一份结果放入该用户的 Android 待确认队列;Android处于前台时会实时收到并提示“查看并确认”,用户确认前不会写入家庭库存。

1. 获取 MCP Access Token

  1. 账号需要被设置为 OmniTrack Home 高级用户
  2. 在 Android 应用进入“我的 → 账号与家庭 → MCP 外部访问”。
  3. 填写外部应用名称并生成 Token。
  4. 立即保存完整 Token。完整值只显示一次,服务端不保存明文。
Token 代表该账号的家庭访问权限。不要放进前端源码、公开仓库、聊天记录或日志;泄露后应立即在应用中撤销并重新生成。

2. 快速接入

不同 AI 客户端的配置字段名可能不同,核心配置始终是以下三项:

通用远程 MCP 配置示意
{
  "mcpServers": {
    "omni-home": {
      "type": "streamable-http",
      "url": "https://omni.muyin.com/api/mcp",
      "headers": {
        "Authorization": "Bearer ${OMNI_HOME_MCP_TOKEN}"
      }
    }
  }
}

建议把 Token 放入客户端的密钥存储或环境变量 OMNI_HOME_MCP_TOKEN。如果客户端不支持自定义 Header,需要由对接方增加一个保密的服务端代理,不能把 Token 暴露给浏览器用户。

3. 直接交给 AI 开发者

下面这段可以整体复制到开发任务、代码代理或 AI 对话中。

请将 OmniTrack Home 作为远程 MCP Server 接入当前应用。

MCP endpoint: https://omni.muyin.com/api/mcp
Transport: Streamable HTTP, stateless JSON-RPC 2.0 over POST
Authentication: Authorization: Bearer <OMNI_HOME_MCP_TOKEN>
Protocol version: 2025-11-25
Required request headers after initialization:
  Content-Type: application/json
  Accept: application/json, text/event-stream
  MCP-Protocol-Version: 2025-11-25

可用工具:
1. list_recent_expiry_items
   参数:可选 householdId:string。省略时使用 Token 可访问的第一个家庭。
   用途:返回已经过期或未来 30 天内到期的物品,最多 100 项;每项包含 roomName、containerName、containerPath、locationPath 和 location 对象。

2. recognize_shopping_list_image
   参数:imageUrl 或 dataBase64 二选一;Base64 还需 mimeType;mode 可选 standard/precise;householdId 和 idempotencyKey 可选。
   用途:识别购物清单中的商品,同步返回建议位置、到期日和名称文字框,并放入该用户的 Android 待确认队列。

3. recognize_item_photo
   参数:imageUrl 或 dataBase64 二选一;Base64 还需 mimeType;mode 可选 standard/precise;householdId 和 idempotencyKey 可选。
   用途:识别实景物品照片,同步返回物品、位置建议、到期日、边界框及关系,并放入该用户的 Android 待确认队列。

4. search_inventory
   参数:query 必填;householdId、limit 可选。
   用途:按名称、分类、房间、收纳点和内置同义词搜索当前家庭的有效库存。

5. get_inventory_quantity
   参数:query 必填;householdId 可选。
   用途:返回匹配条目数、匹配物品,以及按单位分别汇总的规范化数量。

6. get_inventory_overview
   参数:view 必填,可取 expiry、low_stock、stock_ranking、household_value;householdId 可选。
   用途:确定性返回临期、低库存、库存数量排行或已记录价格的家庭库存总价值。

7. adjust_quantity
   参数:itemId、delta、idempotencyKey 必填;householdId、unit、remainingRatio、reason、expectedUpdatedAt 可选。
   用途:原子增加或消耗库存数量并记录操作人和库存流水。delta 为正表示增加,为负表示消耗。

8. mark_item_used_up
   参数:itemId、idempotencyKey 必填;householdId、reason、expectedUpdatedAt 可选。
   用途:将指定物品标记用完并移出有效库存,同时保留库存流水。

图片约束:仅允许公网 HTTPS URL,或 JPEG/PNG/WebP Base64;最大 12 MB;Base64 不含 data: 前缀。
库存工具自动限定为 Token 用户可访问的家庭,不允许传入 SQL。写工具具有 destructiveHint,客户端应在调用前取得用户明确确认并使用稳定 idempotencyKey 防止重试重复写入。
工具成功结果位于 JSON-RPC result.structuredContent,同时 result.content[0].text 提供 JSON 文本。
工具级失败可能以 HTTP 200 + result.isError=true 返回;鉴权失败为 HTTP 401,限流为 HTTP 429。
每个 Token 限制为每分钟 120 个请求。图片识别结果会同时进入该用户的云端待确认队列,Android 显示“查看并确认”;确认前不会自动保存到库存。

4. 工具说明

list_recent_expiry_items只读

读取 Token 所属用户可访问家庭中,已经过期或未来 30 天内到期的物品,并按到期日排序。位置同时提供房间、当前收纳点、完整嵌套收纳路径及展示路径。

参数类型必填说明
householdIdstring家庭 ID;省略时使用第一个可访问家庭。

主要返回字段包括家庭、生成时间、总数,以及物品的名称、分类、数量、到期日、剩余天数、状态、位置路径和图片信息。

recognize_shopping_list_imageAI 识别

按商品名称行识别购物清单,推断建议房间、建议收纳点和可能的到期日。

返回 results[].itemsresults[].relations、模型、模式和识别类型;每个商品尽可能包含名称文字区域 boundingBox。同一结果写入云端待确认队列。

recognize_item_photoAI 识别

识别室内实景照片中的物品、建议位置、到期日、边界框和物品关系,返回结构与 OmniTrack Home 当前拍照识别一致。

search_inventory只读

按名称、分类、房间、收纳点和内置同义词搜索有效库存。参数 query 必填,householdId 与 1 到 50 的 limit 可选。

get_inventory_quantity只读

搜索库存并返回匹配条目,同时按单位分别汇总规范化数量;未记录数量的条目通过 unknownQuantityCount 单独报告,不强行混算不同单位。

get_inventory_overview只读

通过 view 读取临期、低库存、库存数量排行或家庭总价值。结果严格限定当前家庭;库存排行不换算不同单位,总价值只统计已记录价格的有效物品。

adjust_quantity需确认的写操作

以正负 delta 增减指定 itemId 的数量。必须提供稳定 idempotencyKey;可提供 expectedUpdatedAt 防止覆盖并发修改。单位冲突、库存不足或家庭越权会被拒绝。

mark_item_used_up需确认的写操作

将指定物品数量归零并移出有效库存,但保留操作人和库存流水。必须提供 itemId 与稳定 idempotencyKey

库存安全边界:所有库存工具都从 MCP Token 解析当前账号和可访问家庭,调用方不能执行 SQL。写工具标记为破坏性操作,兼容客户端应先展示变更并要求用户确认。

图片识别工具的共同参数

参数类型必填说明
imageUrlstring二选一不含账号密码的公网 HTTPS 图片地址。
dataBase64string二选一纯 Base64 内容,不包含 data:image/...;base64, 前缀。
mimeTypestringBase64 时必填image/jpegimage/pngimage/webp
modestringstandard(默认)或 precise
householdIdstring目标家庭;省略时使用 Token 可访问的第一个家庭。
idempotencyKeystring最长 128 字符。对接方重试同一任务时传入同一值,避免重复生成待确认任务。

5. JSON-RPC 调用示例

下面的 $TOKEN 表示完整 MCP Access Token。初始化完成后,后续请求携带协商出的 MCP-Protocol-Version

初始化
curl 'https://omni.muyin.com/api/mcp' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  --data '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-11-25",
      "capabilities": {},
      "clientInfo": { "name": "partner-app", "version": "1.0.0" }
    }
  }'
读取最近过期清单
curl 'https://omni.muyin.com/api/mcp' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'MCP-Protocol-Version: 2025-11-25' \
  --data '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "list_recent_expiry_items",
      "arguments": {}
    }
  }'
通过 HTTPS 图片识别购物清单
curl 'https://omni.muyin.com/api/mcp' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'MCP-Protocol-Version: 2025-11-25' \
  --data '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "recognize_shopping_list_image",
      "arguments": {
        "imageUrl": "https://images.example.com/shopping-list.jpg",
        "mode": "standard",
        "idempotencyKey": "shopping-order-20260817-001"
      }
    }
  }'
通过本地文件 Base64 识别物品照片
IMAGE_BASE64="$(base64 < item.jpg | tr -d '\n')"

curl 'https://omni.muyin.com/api/mcp' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'MCP-Protocol-Version: 2025-11-25' \
  --data "$(jq -n --arg image \"$IMAGE_BASE64\" '{
    jsonrpc: \"2.0\",
    id: 4,
    method: \"tools/call\",
    params: {
      name: \"recognize_item_photo\",
      arguments: { dataBase64: $image, mimeType: \"image/jpeg\", mode: \"precise\" }
    }
  }')"

图片识别的待确认回执

两个图片工具的 structuredContent 除识别 JSON 外还包含以下字段。外部应用可保存 sessionId 用于追踪;库存写入仍由用户在 Android 确认后完成。

"backgroundQueue": {
  "sessionId": "scan-...",
  "status": "draft",
  "replayed": false,
  "itemCount": 8,
  "household": { "id": "...", "name": "我的家庭" },
  "androidAction": "查看并确认"
}

6. 返回结构与错误处理

工具成功返回结构
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      { "type": "text", "text": "{ ...同一份结果的 JSON 文本... }" }
    ],
    "structuredContent": {
      "household": { "id": "...", "name": "我的家庭" },
      "generatedAt": "2026-08-17T08:00:00.000Z",
      "total": 1,
      "items": [
        {
          "id": "...",
          "name": "牛奶",
          "expiryDate": "2026-08-18",
          "daysRemaining": 1,
          "status": "urgent",
          "roomName": "厨房",
          "containerName": "冰箱",
          "containerPath": ["冰箱"],
          "locationPath": "厨房 / 冰箱"
        }
      ]
    }
  }
}
情况表现处理建议
Token 缺失、无效或已撤销HTTP 401 · mcp_unauthorized重新配置或生成 Token。
请求超过限流HTTP 429 · mcp_rate_limited指数退避后重试。
协议请求非法JSON-RPC error检查 method、id 和 params。
工具参数或执行失败HTTP 200,result.isError=true读取 result.content[0].text
浏览器 Origin 不受信任HTTP 403从可信服务端调用,不在陌生网页直连。

7. 限制与安全

  • 每个 Token 最多每分钟 120 个 MCP 请求。
  • 每个高级用户最多保留 10 个有效 Token;撤销 Token 或账号降级后立即失效。
  • Token 只能访问该用户实际加入的家庭;传入无权限的 householdId 会失败。
  • 公网图片必须使用 HTTPS,禁止 localhost、私网 IP、.local 地址、URL 凭证和非标准端口。
  • 图片支持 JPEG、PNG、WebP,解码后最大 12 MB;每次工具调用只接收一张图片。
  • 图片工具会保存识别草稿与必要的 OSS 图片引用;Android 保存或丢弃后草稿从待确认列表移除。
  • 当前端点使用手动生成的 Bearer Token,不提供 OAuth 自动发现;客户端必须支持自定义 Header。
  • 当前服务不提供服务器主动消息流;客户端对 GET 收到 405 应视为“不提供 SSE 监听”,正常工具调用使用 POST。

协议实现参考 MCP 2025-11-25 Streamable HTTP。查看 MCP 官方传输规范生命周期规范