{"id":"536f707e-f0b6-48b8-8f7e-a69c4d1a1df4","entityType":"agent","slug":"clawhub-linkfox-ai-linkfox-mpstats-ozon-brand-products","name":"MPSTATS-Ozon品牌商品查询","canonicalUrl":"https://www.xpersona.co/agent/clawhub-linkfox-ai-linkfox-mpstats-ozon-brand-products","canonicalPath":"/agent/clawhub-linkfox-ai-linkfox-mpstats-ozon-brand-products","generatedAt":"2026-10-10T13:33:33.632Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T10:08:51.325Z","emptyReason":null},"description":"MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPSTATS\"，只要意图是按 Ozon 品牌看该品牌下所有商品及其销量/价格/评分表现，也应触发此技能。 Skill: MPSTATS-Ozon品牌商品查询 Owner: linkfox-ai Summary: MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPST","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.5K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s171g8b6m2khwdy9ye8bxj0wx183vd4z:linkfox-mpstats-ozon-brand-products","sourceUrl":"https://clawhub.ai/linkfox-ai/linkfox-mpstats-ozon-brand-products","homepage":"https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-brand-products","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/linkfox-ai/linkfox-mpstats-ozon-brand-products","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-brand-products","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T10:08:51.325Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T10:08:51.325Z","emptyReason":null},"stars":null,"forks":null,"downloads":1505,"packageName":null,"latestVersion":"1.0.7","tractionLabel":"1.5K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T10:08:51.296Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T10:08:51.325Z","lastCrawledAt":"2026-10-10T10:08:51.296Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T10:08:51.296Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.7","createdAt":"2026-09-14T05:22:06.374Z","changelog":"Update from 1.0.6 to 1.0.7","fileCount":7,"zipByteSize":23958},{"version":"1.0.6","createdAt":"2026-08-14T14:57:16.308Z","changelog":"Update from 1.0.5 to 1.0.6","fileCount":7,"zipByteSize":24185},{"version":"1.0.5","createdAt":"2026-08-07T10:53:11.112Z","changelog":"Update from 1.0.4 to 1.0.5","fileCount":7,"zipByteSize":23954},{"version":"1.0.4","createdAt":"2026-07-13T12:13:40.558Z","changelog":"Update from 1.0.3 to 1.0.4","fileCount":5,"zipByteSize":15138},{"version":"1.0.3","createdAt":"2026-07-06T11:22:27.986Z","changelog":"Update from 1.0.2 to 1.0.3","fileCount":5,"zipByteSize":14610},{"version":"1.0.2","createdAt":"2026-07-03T08:21:05.631Z","changelog":"Update from 1.0.1 to 1.0.2","fileCount":4,"zipByteSize":13012},{"version":"1.0.1","createdAt":"2026-07-03T06:51:49.051Z","changelog":"Update from 1.0.0 to 1.0.1","fileCount":4,"zipByteSize":12991},{"version":"1.0.0","createdAt":"2026-05-06T05:39:56.247Z","changelog":"Initial release","fileCount":5,"zipByteSize":10399}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s171g8b6m2khwdy9ye8bxj0wx183vd4z:linkfox-mpstats-ozon-brand-products","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-brand-products/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-brand-products/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-brand-products/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-brand-products/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-brand-products/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-brand-products/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T13:33:33.626Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-brand-products/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-brand-products/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-brand-products/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-brand-products/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T10:08:51.325Z","emptyReason":null},"readme":"Skill: MPSTATS-Ozon品牌商品查询\n\nOwner: linkfox-ai\n\nSummary: MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPSTATS\"，只要意图是按 Ozon 品牌看该品牌下所有商品及其销量/价格/评分表现，也应触发此技能。\n\nTags: latest:1.0.7\n\nVersion history:\n\nv1.0.7 | 2026-09-14T05:22:06.374Z | user\n\nUpdate from 1.0.6 to 1.0.7\n\nv1.0.6 | 2026-08-14T14:57:16.308Z | user\n\nUpdate from 1.0.5 to 1.0.6\n\nv1.0.5 | 2026-08-07T10:53:11.112Z | user\n\nUpdate from 1.0.4 to 1.0.5\n\nv1.0.4 | 2026-07-13T12:13:40.558Z | user\n\nUpdate from 1.0.3 to 1.0.4\n\nv1.0.3 | 2026-07-06T11:22:27.986Z | user\n\nUpdate from 1.0.2 to 1.0.3\n\nv1.0.2 | 2026-07-03T08:21:05.631Z | user\n\nUpdate from 1.0.1 to 1.0.2\n\nv1.0.1 | 2026-07-03T06:51:49.051Z | user\n\nUpdate from 1.0.0 to 1.0.1\n\nv1.0.0 | 2026-05-06T05:39:56.247Z | user\n\nInitial release\n\nArchive index:\n\nArchive v1.0.7: 7 files, 23958 bytes\n\nFiles: references/api.md (6694b), references/onboarding.md (1999b), scripts/mpstats_ozon_brand_products.py (12794b), scripts/onboarding.py (24027b), skill-card.md (2606b), SKILL.md (9418b), _meta.json (154b)\n\nFile v1.0.7:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-brand-products\ndescription: MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPSTATS\"，只要意图是按 Ozon 品牌看该品牌下所有商品及其销量/价格/评分表现，也应触发此技能。\n---\n\n# MPSTATS Ozon Brand Products\n\nThis skill drills into all Ozon (Russia) products sold under a given brand display name, returning each SKU's sales, revenue, price, rating, stock, turnover, lost profit, and more. Built for brand competitor audits, brand SKU structure analysis, and bestseller dissection.\n\n## Core Concepts\n\n**Brand display name**: `brandName` must match what's shown on the Ozon storefront — typically Russian (Cyrillic) or Latin (`adidas`, `Xiaomi`). Do **not** pass a category path, a seller ID, or an internal brand code here. If unsure of the exact spelling, resolve via `mpstats-ozon-product-search` first.\n\n**Filters are AND-combined**: The `filters` array supports multiple numeric conditions ANDed together. Each filter is `{field, op, value, value2?}`. Common fields and operators are in the Filter Reference below.\n\n**Currency & rate**: Default currency is **RUB**. Set `currency: \"USD\"` (or another code) to have monetary fields converted server-side; `currencyRate` lets you override the default rate if desired.\n\n**FBO / FBS mix**: `includeFbs: true` folds FBS (seller-shipped) stock + sales into the numbers; `false` keeps them FBO-only.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| brandName | string | yes | Ozon brand display name (Russian or Latin) |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; latest = yesterday |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; latest = yesterday |\n| page | integer | no | Page number, starts at 1 |\n| pageSize | integer | no | Rows per page, 1-100, default 100 |\n| sortField | string | no | snake_case column: `sales`, `revenue`, `final_price`, `balance`, `rating`, ... |\n| sortDirection | string | no | `asc` or `desc` |\n| currency | string | no | Currency code, default `RUB`; e.g. `USD`, `EUR`, `CNY` |\n| currencyRate | integer | no | Custom rate when non-default currency is used |\n| includeFbs | boolean | no | Include FBS data |\n| filters | array | no | Numeric filter conditions (see below) |\n\n## Filter Reference\n\nEach `filters` entry: `{\"field\": \"<snake_case>\", \"op\": \"<OP>\", \"value\": <num>, \"value2\": <num?>}`.\n\n**Common fields**: `sales` (monthly units), `final_price` (selling price RUB), `rating` (0-5), `comments` (review count), `balance` (stock), `revenue` (sales amount RUB), `days_in_stock`, `turnover_days`, `lost_profit`, `category_position`.\n\n**Operators**: `GTE`, `LTE`, `GT`, `LT`, `EQ`, `NOT_EQ`, `BETWEEN` (requires `value2` as the upper bound).\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/brandProducts`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_brand_products.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗算力；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-mpstats-ozon-brand-products-<timestamp>.json`（`<cwd>` 为脚本执行时的工作目录，在 Claude Code 里即当前项目目录；`<session>` 取自环境变量 `SESSION_ID`，按用户任务自动聚合；**禁止写入 /tmp**，当前目录不可写则报错）\n- 响应体 ≤ 8 KB：落盘后把完整 JSON 打印到 stdout\n- 响应体 > 8 KB：落盘后 stdout 只输出摘要（顶层字段、常见计数如 `total`/`costToken`、最大列表字段的长度 + 前 3 条样本）\n- 加 `--inline` 强制全量打印到 stdout（同样落盘）\n\n**读数据建议**：先看摘要判断是否足够；需要具体字段时优先用 `jq`或`ConvertFrom-Json` 从保存的 json 文件按需抽取，避免整份 JSON 进入上下文。\n\n## 解决认证和算力问题\n发生以下异常情况时，采用 references/onboarding.md 引导解决问题：\n\n### 异常情况\n- **未配置API Key**：环境变量未配置 `LINKFOX_AGENT_API_KEY`，也未配置 `LINKFOXAGENT_API_KEY`。\n- **响应401或402状态码**\n- **响应提示算力或余额不足**：消息含\"算力余额不足/计费不足/余额不足/quota exceeded/insufficient balance/套餐到期/需充值/请充值\"，或类似含义的内容。\n\n## Usage Examples\n\n**1. Top-50 by sales for brand `adidas`**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"sortField\": \"sales\",\n  \"sortDirection\": \"desc\",\n  \"pageSize\": 50\n}\n```\n\n**2. High-rating, mid-price filter**\n```json\n{\n  \"brandName\": \"Xiaomi\",\n  \"filters\": [\n    {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5},\n    {\"field\": \"final_price\", \"op\": \"BETWEEN\", \"value\": 1000, \"value2\": 5000}\n  ],\n  \"sortField\": \"revenue\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n**3. USD-converted output**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"currency\": \"USD\",\n  \"sortField\": \"revenue\"\n}\n```\n\n**4. Include FBS + only in-stock items**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"includeFbs\": true,\n  \"filters\": [{\"field\": \"balance\", \"op\": \"GT\", \"value\": 0}]\n}\n```\n\n**5. Lost-profit hunters (out-of-stock pain)**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"filters\": [{\"field\": \"lost_profit\", \"op\": \"GTE\", \"value\": 100000}],\n  \"sortField\": \"lost_profit\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n## Display Rules\n\n1. **Compact brand table** — key columns: `productId`, `title`, `price`, `monthlySalesUnits`, `monthlySalesRevenue`, `rating`, `reviewCount`, `balance`, `turnoverDays`, `lostProfit`.\n2. **Revenue share context** — `revenueSharePercent` is the SKU's share **within this brand result set**, 0-100; clarify the base when presenting.\n3. **Currency labeling** — always state the currency in the table header; if `currency` was overridden, note \"已按 USD 换算\".\n4. **Russian titles** — preserve original; translate on user request.\n5. **Pagination** — report total and guide the user to next page or narrower filters when total exceeds the returned page.\n6. **No business advice** — present the data; don't project future sales from a snapshot.\n\n## Important Limitations\n\n- **Exact brand-name match** — no fuzzy search; typos return empty results. Verify via `mpstats-ozon-product-search` if unsure.\n- **Page cap** — max 100 rows per page; paginate for larger brands.\n- **Date window** — `endDate` cannot be today or a future date (T-1 data).\n- **Currency conversion** — server-side; historical rates may differ slightly from the user's reference rate.\n- **Russian-only titles** — translate only when asked.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Brand-scoped Ozon product metrics:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Show me adidas's top-selling Ozon SKUs\" | Brand bestseller drill |\n| \"What does Xiaomi sell on Ozon, sorted by revenue\" | Brand revenue structure |\n| \"Which brand-X SKUs have rating ≥4.5 and stock >0\" | Brand quality filter |\n| \"Are brand-X's stockouts causing big lost profit\" | Lost-profit hunter |\n| \"Convert brand-X's Ozon sales to USD\" | Currency-normalized audit |\n\n**Not applicable** — Needs beyond brand drill-down:\n\n- Unknown exact brand name → first use `mpstats-ozon-product-search`\n- Category-level comparison across brands → use `mpstats-ozon-category-products`\n- Seller-scoped analysis → use `mpstats-ozon-seller-products`\n- Single-SKU time-series → use `mpstats-ozon-product-trend`\n- Wildberries / other Russian marketplaces → not covered\n\n**Boundary judgment**: Use this skill when the question centers on **one brand** and you want the per-SKU rollup under it. For \"which brand dominates category X\" use category drill-down and compare brand rows server-side.\n\n## 算力消耗规则\n\n按动态规则计费：消耗算力 = 12。列表为空返回 0\n\n> **重要**：本技能的服务按倍数动态计算，可能一次性消耗大量算力，必须提醒用户，由用户决定是否继续。\n\n**Feedback:**\n\nAuto-detect and report feedback via the Feedback API when any of the following apply:\n1. The functionality or purpose described in this skill does not match actual behavior\n2. The skill's results do not match the user's intent\n3. The user expresses dissatisfaction or praise about this skill\n4. Anything you believe could be improved\n\nCall the feedback API as specified in `references/api.md`. Do not interrupt the user's flow.\n\n---\n*For more high-quality, professional cross-border e-commerce skills, set [LinkFox Skills](https://skill.linkfox.com/).*\n\nFile v1.0.7:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-mpstats-ozon-brand-products\",\n  \"version\": \"1.0.7\",\n  \"publishedAt\": 1789363326374\n}\n\nFile v1.0.7:references/api.md\n\n# MPSTATS Ozon 品牌商品 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_TOOL_GATEWAY}/mpstats/ozon/brandProducts`\n- **请求方式**：POST，Content-Type: application/json\n- **认证方式**：Header `Authorization: <api_key>`，api_key 从环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY` 读取（如未配置 按 SKILL.md 的 **## 解决认证和算力问题** 处理）\n\n## 请求参数\n\nPOST Body（JSON）。以下字段与工具网关当前登记的「MPSTATS-Ozon-品牌商品」入参 schema 一致（同步日期 2026-04-30）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| brandName | string | 是 | Ozon 品牌展示名（俄语或拉丁） |\n| startDate | string | 否 | 统计起始日，`YYYY-MM-DD`；最晚昨日 |\n| endDate | string | 否 | 统计结束日，`YYYY-MM-DD`；最晚昨日 |\n| page | integer | 否 | 页码，从 1 开始 |\n| pageSize | integer | 否 | 每页行数，1-100，默认 100 |\n| sortField | string | 否 | 排序列名（snake_case），如 `sales`、`revenue`、`final_price`、`balance`、`rating` |\n| sortDirection | string | 否 | `asc` 升序 / `desc` 降序 |\n| currency | string | 否 | 结果金额货币代码，默认 `RUB`，如 `USD` / `EUR` / `CNY` |\n| currencyRate | integer | 否 | 自定义汇率（配合非默认货币） |\n| includeFbs | boolean | 否 | 是否纳入 FBS 数据 |\n| filters | array | 否 | 数值筛选条件列表，每项 `{field, op, value, value2?}`，多条件 AND |\n\n### filters 字段说明\n\n| 子字段 | 类型 | 必填 | 说明 |\n|--------|------|------|------|\n| field | string | 是 | 列名（snake_case），常用见下 |\n| op | string | 是 | `GTE` / `LTE` / `GT` / `LT` / `EQ` / `NOT_EQ` / `BETWEEN` |\n| value | number | 是 | 主值（`BETWEEN` 时为下界） |\n| value2 | number | `BETWEEN` 必填 | 上界（闭区间） |\n\n**常用 field**：`sales`（月销）、`final_price`（售价 RUB）、`rating`（评分 0-5）、`comments`（评论数）、`balance`（库存）、`revenue`（销售额 RUB）、`days_in_stock`（有货天数）、`turnover_days`（周转天数）、`lost_profit`（损失销售额 RUB）、`category_position`（类目排名）。\n\n## 响应结构\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| code | string | 返回码，`\"200\"` 成功 |\n| msg | string | 消息；成功为 `ok` |\n| total | integer | 品牌下命中商品总数 |\n| products | array | 商品列表（详见下方） |\n| columns | array | 渲染列定义 |\n| costTime | integer | 接口耗时（毫秒） |\n| costToken | integer | 消耗 Token 数量 |\n| type | string | 响应类型 |\n\n### products[*] 商品对象字段（39 个）\n\n按官方 outputSchema 定义（`_mpstats_ozon_brandProducts`，同步日期 2026-05-06）。该 schema 与 `productSearch` / `categoryProducts` / `sellerProducts` **完全共用**；4 个端点只是查询维度不同，返回的商品卡字段集完全一致。\n\n**身份与基础信息**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| brand | string | 品牌 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| category | string | 品类路径（俄语，`/` 分隔） |\n| nicheName | string | 赛道路径（俄语） |\n| nicheId | integer | 赛道 ID |\n| country | string | 销售国，Ozon 恒为 `RU` |\n| firstDate | string | 上架日期（`yyyy-MM-dd`） |\n| imageUrl | string | 主图 URL |\n| productPageUrl | string | 商品页 URL |\n| sourceTool / sourceType | string | 来源工具 / 数据源标识 |\n\n**价格与货币**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| price | number | 当前售价 |\n| oldPrice | number | 折扣前原价 |\n| ozonCardPrice | number | Ozon Card 价 |\n| minPrice / maxPrice / averagePrice | number | 统计期内最低价 / 最高价 / 均价 |\n| currency | string | 币种符号（`₽` / `$` / `€`） |\n\n**评分与评论**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| rating | number | 评分，0-5 |\n| reviewCount | integer | 评论数 |\n\n**库存与 FBS**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| balance | integer | 当前库存（件） |\n| balanceFbs | integer | FBS 库存（卖家自发货件数） |\n| frozenStocks | integer | 滞销库存 |\n| warehousesCount | integer | FBO 分仓数 |\n| isFbs | boolean | 是否 FBS 发货 |\n\n**销售与周转**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| salesPerDay | number | 日均销量（件/日） |\n| monthlySalesUnits | integer | 统计期销量（件） |\n| monthlySalesRevenue | number | 统计期销售额 |\n| lostProfit | number | 损失销售额（缺货等造成） |\n| daysInSite | integer | 在售天数（统计期，含缺货日） |\n| daysInStock | integer | 有货天数 |\n| turnoverDays | number | 周转天数（越小越快） |\n\n**排名与占比**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| position | integer | 当前查询维度（本端点为品牌）内排名 |\n| categoryPosition | integer | 品类内排名 |\n| revenueSharePercent | number | 该 SKU 在当前查询维度的销售额占比，0-100 |\n\n## 错误码\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 解析 `products` |\n| 401 | 认证失败 | HTTP 401 或 authorized error：按 SKILL.md 的 **## 解决认证和算力问题** 处理。 |\n| 402 | 算力或余额不足 | HTTP 402：按 SKILL.md 的 **## 解决认证和算力问题** 处理。 |\n| 其他 | 业务异常 | 查看 `errmsg`；常见为 `brandName` 拼写错误、日期越过昨日等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/brandProducts \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"brandName\": \"adidas\",\n    \"sortField\": \"sales\",\n    \"sortDirection\": \"desc\",\n    \"pageSize\": 50,\n    \"filters\": [\n      {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5}\n    ]\n  }'\n```\n\n---\n\n## Feedback API\n\n> 该接口与上方工具接口不同，**请勿混用两个基础 URL**。\n\n- **POST** `https://skill-api.linkfox.com/api/v1/public/feedback`\n- **Content-Type:** `application/json`\n\n```json\n{\n  \"skillName\": \"linkfox-mpstats-ozon-brand-products\",\n  \"sentiment\": \"NEUTRAL\",\n  \"category\": \"SUGGESTION\",\n  \"content\": \"Would like fuzzy brand-name matching.\"\n}\n```\n\n**字段说明：**\n- `skillName`：使用本 skill 的 YAML `name`\n- `sentiment`：`POSITIVE` / `NEUTRAL` / `NEGATIVE`\n- `category`：`BUG` / `COMPLAINT` / `SUGGESTION` / `OTHER`\n- `content`：用户表达、实际现象、为什么算问题或好评\n\nFile v1.0.7:references/onboarding.md\n\n# 解决认证和算力问题\n\n调用本 skill 时若网关返回 **auth** 或 **billing** 错误，走本 skill 自带的 `scripts/onboarding.py` 完成引导。\n\n**auth 场景**：`errcode=401` 或消息含 `authorized error`/`鉴权失败`/`未授权`/`unauthorized`；或 `LINKFOX_AGENT_API_KEY` 与 `LINKFOXAGENT_API_KEY` 均为空。\n1. 若已配置 key → 先让用户重启会话（最常见误判），仍失败让用户重新取 key 或换手机号重注册\n2. 未配置 → 询问：自助去 https://agent.linkfox.com/ 取 key，或提供手机号让脚本注册\n3. 手机号路径：\n   - `python scripts/onboarding.py send-code <phone>` → 展示 JSON 里的 phone/agreements\n   - 收到验证码后：`python scripts/onboarding.py login <phone> <code>`\n   - 拿到 `api_key` 后把下面三平台配置转发给用户，提示重启会话生效：\n     - Windows PowerShell（永久）：`setx LINKFOX_AGENT_API_KEY \"<key>\"`\n     - macOS zsh：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.zshrc && source ~/.zshrc`\n     - Linux bash：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.bashrc && source ~/.bashrc`\n     - 变量名 `LINKFOX_AGENT_API_KEY`（主推）或 `LINKFOXAGENT_API_KEY`（老规范）任一即可\n\n**billing 场景**：`errcode=402` 或消息含 `算力/余额/quota/insufficient/充值/套餐到期`。\n- `python scripts/onboarding.py list-plans` → 有 AskUserQuestion 就弹菜单，否则输出编号清单让用户选\n- 校验 `plan_id` ∈ 清单、支付方式 ∈ 该套餐 `available_methods`（通常 `wechat/alipay`）\n- `python scripts/onboarding.py order <plan_id> <method>` → 展示优先级 PNG > `pay_url` > `ascii_qr`（标注兜底）\n- 已付款可选调 `python scripts/onboarding.py query <order_id>`，不主动轮询\n\n排除 `errcode=403`（无权限，不归入这两类）。所有子命令输出 stdout JSON，`error` 字段已含阶段前缀，透传给用户即可。完整用法：`python scripts/onboarding.py --help`。\n\nFile v1.0.7:skill-card.md\n\n## Description:\n\nQueries MPSTATS data for Ozon Russia products under an exact brand display name, returning SKU-level sales, revenue, price, rating, stock, turnover, lost-sales, and related metrics with filters, sorting, pagination, and currency conversion.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[linkfox-ai](https://clawhub.ai/user/linkfox-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal marketplace analysts, e-commerce operators, and agents use this skill to retrieve brand-scoped Ozon SKU metrics for competitor audits, SKU structure analysis, bestseller review, stockout checks, and currency-normalized reporting.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Ozon brand queries, API keys, account credentials, and returned analytics can be sent to LinkFox services and analytics responses are stored locally.\n\nMitigation: Use only approved data, keep API keys in secure secret storage, and restrict access to the linkfox output directory.\n\nRisk: The onboarding flow can handle account registration and paid credit purchases.\n\nMitigation: Review onboarding commands before execution and confirm any credit purchase with the user before ordering.\n\nRisk: Endpoint override environment variables can redirect API and account traffic.\n\nMitigation: Avoid override variables unless the runtime is controlled, and verify the environment before using credentials.\n\nRisk: Automatic feedback reporting may send usage feedback to LinkFox.\n\nMitigation: Review feedback payloads and organizational policy before enabling or relying on automatic reporting.\n\n## Reference(s):\n\n- [MPSTATS Ozon Brand Products API Reference](references/api.md)\n- [Authentication and Credit Onboarding](references/onboarding.md)\n- [ClawHub Skill Page](https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-brand-products)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, JSON, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown summaries and tables, JSON API responses, and local JSON files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Full responses are saved under a linkfox session directory; large responses are summarized unless inline output is requested.]\n\n## Skill Version(s):\n\n1.0.7 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.6: 7 files, 24185 bytes\n\nFiles: references/api.md (6694b), references/onboarding.md (2046b), scripts/mpstats_ozon_brand_products.py (12738b), scripts/onboarding.py (24089b), skill-card.md (2681b), SKILL.md (9418b), _meta.json (154b)\n\nFile v1.0.6:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-brand-products\ndescription: MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPSTATS\"，只要意图是按 Ozon 品牌看该品牌下所有商品及其销量/价格/评分表现，也应触发此技能。\n---\n\n# MPSTATS Ozon Brand Products\n\nThis skill drills into all Ozon (Russia) products sold under a given brand display name, returning each SKU's sales, revenue, price, rating, stock, turnover, lost profit, and more. Built for brand competitor audits, brand SKU structure analysis, and bestseller dissection.\n\n## Core Concepts\n\n**Brand display name**: `brandName` must match what's shown on the Ozon storefront — typically Russian (Cyrillic) or Latin (`adidas`, `Xiaomi`). Do **not** pass a category path, a seller ID, or an internal brand code here. If unsure of the exact spelling, resolve via `mpstats-ozon-product-search` first.\n\n**Filters are AND-combined**: The `filters` array supports multiple numeric conditions ANDed together. Each filter is `{field, op, value, value2?}`. Common fields and operators are in the Filter Reference below.\n\n**Currency & rate**: Default currency is **RUB**. Set `currency: \"USD\"` (or another code) to have monetary fields converted server-side; `currencyRate` lets you override the default rate if desired.\n\n**FBO / FBS mix**: `includeFbs: true` folds FBS (seller-shipped) stock + sales into the numbers; `false` keeps them FBO-only.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| brandName | string | yes | Ozon brand display name (Russian or Latin) |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; latest = yesterday |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; latest = yesterday |\n| page | integer | no | Page number, starts at 1 |\n| pageSize | integer | no | Rows per page, 1-100, default 100 |\n| sortField | string | no | snake_case column: `sales`, `revenue`, `final_price`, `balance`, `rating`, ... |\n| sortDirection | string | no | `asc` or `desc` |\n| currency | string | no | Currency code, default `RUB`; e.g. `USD`, `EUR`, `CNY` |\n| currencyRate | integer | no | Custom rate when non-default currency is used |\n| includeFbs | boolean | no | Include FBS data |\n| filters | array | no | Numeric filter conditions (see below) |\n\n## Filter Reference\n\nEach `filters` entry: `{\"field\": \"<snake_case>\", \"op\": \"<OP>\", \"value\": <num>, \"value2\": <num?>}`.\n\n**Common fields**: `sales` (monthly units), `final_price` (selling price RUB), `rating` (0-5), `comments` (review count), `balance` (stock), `revenue` (sales amount RUB), `days_in_stock`, `turnover_days`, `lost_profit`, `category_position`.\n\n**Operators**: `GTE`, `LTE`, `GT`, `LT`, `EQ`, `NOT_EQ`, `BETWEEN` (requires `value2` as the upper bound).\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/brandProducts`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_brand_products.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗积分；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-mpstats-ozon-brand-products-<timestamp>.json`（`<cwd>` 为脚本执行时的工作目录，在 Claude Code 里即当前项目目录；`<session>` 取自环境变量 `SESSION_ID`，按用户任务自动聚合；**禁止写入 /tmp**，当前目录不可写则报错）\n- 响应体 ≤ 8 KB：落盘后把完整 JSON 打印到 stdout\n- 响应体 > 8 KB：落盘后 stdout 只输出摘要（顶层字段、常见计数如 `total`/`costToken`、最大列表字段的长度 + 前 3 条样本）\n- 加 `--inline` 强制全量打印到 stdout（同样落盘）\n\n**读数据建议**：先看摘要判断是否足够；需要具体字段时优先用 `jq`或`ConvertFrom-Json` 从保存的 json 文件按需抽取，避免整份 JSON 进入上下文。\n\n## 解决认证和积分问题\n发生以下异常情况时，采用 references/onboarding.md 引导解决问题：\n\n### 异常情况\n- **未配置API Key**：环境变量未配置 `LINKFOX_AGENT_API_KEY`，也未配置 `LINKFOXAGENT_API_KEY`。\n- **响应401或402状态码**\n- **响应提示积分或余额不足**：消息含\"积分余额不足/计费不足/余额不足/quota exceeded/insufficient balance/套餐到期/需充值/请充值\"，或类似含义的内容。\n\n## Usage Examples\n\n**1. Top-50 by sales for brand `adidas`**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"sortField\": \"sales\",\n  \"sortDirection\": \"desc\",\n  \"pageSize\": 50\n}\n```\n\n**2. High-rating, mid-price filter**\n```json\n{\n  \"brandName\": \"Xiaomi\",\n  \"filters\": [\n    {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5},\n    {\"field\": \"final_price\", \"op\": \"BETWEEN\", \"value\": 1000, \"value2\": 5000}\n  ],\n  \"sortField\": \"revenue\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n**3. USD-converted output**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"currency\": \"USD\",\n  \"sortField\": \"revenue\"\n}\n```\n\n**4. Include FBS + only in-stock items**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"includeFbs\": true,\n  \"filters\": [{\"field\": \"balance\", \"op\": \"GT\", \"value\": 0}]\n}\n```\n\n**5. Lost-profit hunters (out-of-stock pain)**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"filters\": [{\"field\": \"lost_profit\", \"op\": \"GTE\", \"value\": 100000}],\n  \"sortField\": \"lost_profit\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n## Display Rules\n\n1. **Compact brand table** — key columns: `productId`, `title`, `price`, `monthlySalesUnits`, `monthlySalesRevenue`, `rating`, `reviewCount`, `balance`, `turnoverDays`, `lostProfit`.\n2. **Revenue share context** — `revenueSharePercent` is the SKU's share **within this brand result set**, 0-100; clarify the base when presenting.\n3. **Currency labeling** — always state the currency in the table header; if `currency` was overridden, note \"已按 USD 换算\".\n4. **Russian titles** — preserve original; translate on user request.\n5. **Pagination** — report total and guide the user to next page or narrower filters when total exceeds the returned page.\n6. **No business advice** — present the data; don't project future sales from a snapshot.\n\n## Important Limitations\n\n- **Exact brand-name match** — no fuzzy search; typos return empty results. Verify via `mpstats-ozon-product-search` if unsure.\n- **Page cap** — max 100 rows per page; paginate for larger brands.\n- **Date window** — `endDate` cannot be today or a future date (T-1 data).\n- **Currency conversion** — server-side; historical rates may differ slightly from the user's reference rate.\n- **Russian-only titles** — translate only when asked.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Brand-scoped Ozon product metrics:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Show me adidas's top-selling Ozon SKUs\" | Brand bestseller drill |\n| \"What does Xiaomi sell on Ozon, sorted by revenue\" | Brand revenue structure |\n| \"Which brand-X SKUs have rating ≥4.5 and stock >0\" | Brand quality filter |\n| \"Are brand-X's stockouts causing big lost profit\" | Lost-profit hunter |\n| \"Convert brand-X's Ozon sales to USD\" | Currency-normalized audit |\n\n**Not applicable** — Needs beyond brand drill-down:\n\n- Unknown exact brand name → first use `mpstats-ozon-product-search`\n- Category-level comparison across brands → use `mpstats-ozon-category-products`\n- Seller-scoped analysis → use `mpstats-ozon-seller-products`\n- Single-SKU time-series → use `mpstats-ozon-product-trend`\n- Wildberries / other Russian marketplaces → not covered\n\n**Boundary judgment**: Use this skill when the question centers on **one brand** and you want the per-SKU rollup under it. For \"which brand dominates category X\" use category drill-down and compare brand rows server-side.\n\n## 积分消耗规则\n\n按动态规则计费：消耗积分 = 12。列表为空返回 0\n\n> **重要**：本技能的服务按倍数动态计算，可能一次性消耗大量积分，必须提醒用户，由用户决定是否继续。\n\n**Feedback:**\n\nAuto-detect and report feedback via the Feedback API when any of the following apply:\n1. The functionality or purpose described in this skill does not match actual behavior\n2. The skill's results do not match the user's intent\n3. The user expresses dissatisfaction or praise about this skill\n4. Anything you believe could be improved\n\nCall the feedback API as specified in `references/api.md`. Do not interrupt the user's flow.\n\n---\n*For more high-quality, professional cross-border e-commerce skills, set [LinkFox Skills](https://skill.linkfox.com/).*\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-mpstats-ozon-brand-products\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1786719436308\n}\n\nFile v1.0.6:references/api.md\n\n# MPSTATS Ozon 品牌商品 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_TOOL_GATEWAY}/mpstats/ozon/brandProducts`\n- **请求方式**：POST，Content-Type: application/json\n- **认证方式**：Header `Authorization: <api_key>`，api_key 从环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY` 读取（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理）\n\n## 请求参数\n\nPOST Body（JSON）。以下字段与工具网关当前登记的「MPSTATS-Ozon-品牌商品」入参 schema 一致（同步日期 2026-04-30）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| brandName | string | 是 | Ozon 品牌展示名（俄语或拉丁） |\n| startDate | string | 否 | 统计起始日，`YYYY-MM-DD`；最晚昨日 |\n| endDate | string | 否 | 统计结束日，`YYYY-MM-DD`；最晚昨日 |\n| page | integer | 否 | 页码，从 1 开始 |\n| pageSize | integer | 否 | 每页行数，1-100，默认 100 |\n| sortField | string | 否 | 排序列名（snake_case），如 `sales`、`revenue`、`final_price`、`balance`、`rating` |\n| sortDirection | string | 否 | `asc` 升序 / `desc` 降序 |\n| currency | string | 否 | 结果金额货币代码，默认 `RUB`，如 `USD` / `EUR` / `CNY` |\n| currencyRate | integer | 否 | 自定义汇率（配合非默认货币） |\n| includeFbs | boolean | 否 | 是否纳入 FBS 数据 |\n| filters | array | 否 | 数值筛选条件列表，每项 `{field, op, value, value2?}`，多条件 AND |\n\n### filters 字段说明\n\n| 子字段 | 类型 | 必填 | 说明 |\n|--------|------|------|------|\n| field | string | 是 | 列名（snake_case），常用见下 |\n| op | string | 是 | `GTE` / `LTE` / `GT` / `LT` / `EQ` / `NOT_EQ` / `BETWEEN` |\n| value | number | 是 | 主值（`BETWEEN` 时为下界） |\n| value2 | number | `BETWEEN` 必填 | 上界（闭区间） |\n\n**常用 field**：`sales`（月销）、`final_price`（售价 RUB）、`rating`（评分 0-5）、`comments`（评论数）、`balance`（库存）、`revenue`（销售额 RUB）、`days_in_stock`（有货天数）、`turnover_days`（周转天数）、`lost_profit`（损失销售额 RUB）、`category_position`（类目排名）。\n\n## 响应结构\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| code | string | 返回码，`\"200\"` 成功 |\n| msg | string | 消息；成功为 `ok` |\n| total | integer | 品牌下命中商品总数 |\n| products | array | 商品列表（详见下方） |\n| columns | array | 渲染列定义 |\n| costTime | integer | 接口耗时（毫秒） |\n| costToken | integer | 消耗 Token 数量 |\n| type | string | 响应类型 |\n\n### products[*] 商品对象字段（39 个）\n\n按官方 outputSchema 定义（`_mpstats_ozon_brandProducts`，同步日期 2026-05-06）。该 schema 与 `productSearch` / `categoryProducts` / `sellerProducts` **完全共用**；4 个端点只是查询维度不同，返回的商品卡字段集完全一致。\n\n**身份与基础信息**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| brand | string | 品牌 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| category | string | 品类路径（俄语，`/` 分隔） |\n| nicheName | string | 赛道路径（俄语） |\n| nicheId | integer | 赛道 ID |\n| country | string | 销售国，Ozon 恒为 `RU` |\n| firstDate | string | 上架日期（`yyyy-MM-dd`） |\n| imageUrl | string | 主图 URL |\n| productPageUrl | string | 商品页 URL |\n| sourceTool / sourceType | string | 来源工具 / 数据源标识 |\n\n**价格与货币**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| price | number | 当前售价 |\n| oldPrice | number | 折扣前原价 |\n| ozonCardPrice | number | Ozon Card 价 |\n| minPrice / maxPrice / averagePrice | number | 统计期内最低价 / 最高价 / 均价 |\n| currency | string | 币种符号（`₽` / `$` / `€`） |\n\n**评分与评论**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| rating | number | 评分，0-5 |\n| reviewCount | integer | 评论数 |\n\n**库存与 FBS**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| balance | integer | 当前库存（件） |\n| balanceFbs | integer | FBS 库存（卖家自发货件数） |\n| frozenStocks | integer | 滞销库存 |\n| warehousesCount | integer | FBO 分仓数 |\n| isFbs | boolean | 是否 FBS 发货 |\n\n**销售与周转**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| salesPerDay | number | 日均销量（件/日） |\n| monthlySalesUnits | integer | 统计期销量（件） |\n| monthlySalesRevenue | number | 统计期销售额 |\n| lostProfit | number | 损失销售额（缺货等造成） |\n| daysInSite | integer | 在售天数（统计期，含缺货日） |\n| daysInStock | integer | 有货天数 |\n| turnoverDays | number | 周转天数（越小越快） |\n\n**排名与占比**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| position | integer | 当前查询维度（本端点为品牌）内排名 |\n| categoryPosition | integer | 品类内排名 |\n| revenueSharePercent | number | 该 SKU 在当前查询维度的销售额占比，0-100 |\n\n## 错误码\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 解析 `products` |\n| 401 | 认证失败 | HTTP 401 或 authorized error：按 SKILL.md 的 **## 解决认证和积分问题** 处理。 |\n| 402 | 积分或余额不足 | HTTP 402：按 SKILL.md 的 **## 解决认证和积分问题** 处理。 |\n| 其他 | 业务异常 | 查看 `errmsg`；常见为 `brandName` 拼写错误、日期越过昨日等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/brandProducts \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"brandName\": \"adidas\",\n    \"sortField\": \"sales\",\n    \"sortDirection\": \"desc\",\n    \"pageSize\": 50,\n    \"filters\": [\n      {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5}\n    ]\n  }'\n```\n\n---\n\n## Feedback API\n\n> 该接口与上方工具接口不同，**请勿混用两个基础 URL**。\n\n- **POST** `https://skill-api.linkfox.com/api/v1/public/feedback`\n- **Content-Type:** `application/json`\n\n```json\n{\n  \"skillName\": \"linkfox-mpstats-ozon-brand-products\",\n  \"sentiment\": \"NEUTRAL\",\n  \"category\": \"SUGGESTION\",\n  \"content\": \"Would like fuzzy brand-name matching.\"\n}\n```\n\n**字段说明：**\n- `skillName`：使用本 skill 的 YAML `name`\n- `sentiment`：`POSITIVE` / `NEUTRAL` / `NEGATIVE`\n- `category`：`BUG` / `COMPLAINT` / `SUGGESTION` / `OTHER`\n- `content`：用户表达、实际现象、为什么算问题或好评\n\nFile v1.0.6:references/onboarding.md\n\n# 解决认证和积分问题\n\n调用本 skill 时若网关返回 **auth** 或 **billing** 错误，走本 skill 自带的 `scripts/onboarding.py` 完成引导。\n\n**auth 场景**：`errcode=401` 或消息含 `authorized error`/`鉴权失败`/`未授权`/`unauthorized`；或 `LINKFOX_AGENT_API_KEY` 与 `LINKFOXAGENT_API_KEY` 均为空。\n1. 若已配置 key → 先让用户重启会话（最常见误判），仍失败让用户重新取 key 或换手机号重注册\n2. 未配置 → 询问：自助去 https://agent.linkfox.com/ 取 key，或提供手机号让脚本注册\n3. 手机号路径：\n   - `python scripts/onboarding.py send-code <phone>` → 展示 JSON 里的 phone/agreements\n   - 收到验证码后：`python scripts/onboarding.py login <phone> <code>`（workbuddy 宿主加 `--channel workbuddy`）\n   - 拿到 `api_key` 后把下面三平台配置转发给用户，提示重启会话生效：\n     - Windows PowerShell（永久）：`setx LINKFOX_AGENT_API_KEY \"<key>\"`\n     - macOS zsh：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.zshrc && source ~/.zshrc`\n     - Linux bash：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.bashrc && source ~/.bashrc`\n     - 变量名 `LINKFOX_AGENT_API_KEY`（主推）或 `LINKFOXAGENT_API_KEY`（老规范）任一即可\n\n**billing 场景**：`errcode=402` 或消息含 `积分/余额/quota/insufficient/充值/套餐到期`。\n- `python scripts/onboarding.py list-plans` → 有 AskUserQuestion 就弹菜单，否则输出编号清单让用户选\n- 校验 `plan_id` ∈ 清单、支付方式 ∈ 该套餐 `available_methods`（通常 `wechat/alipay`）\n- `python scripts/onboarding.py order <plan_id> <method>` → 展示优先级 PNG > `pay_url` > `ascii_qr`（标注兜底）\n- 已付款可选调 `python scripts/onboarding.py query <order_id>`，不主动轮询\n\n排除 `errcode=403`（无权限，不归入这两类）。所有子命令输出 stdout JSON，`error` 字段已含阶段前缀，透传给用户即可。完整用法：`python scripts/onboarding.py --help`。\n\nFile v1.0.6:skill-card.md\n\n## Description:\n\nMPSTATS Ozon 俄罗斯站按品牌下钻商品列表，按 Ozon 品牌展示名返回该品牌下商品的销量、销售额、价格、评分、库存、周转、损失销售额等指标，并支持数值筛选、排序和货币换算。\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[linkfox-ai](https://clawhub.ai/user/linkfox-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal marketplace analysts and e-commerce operators use this skill to inspect all Ozon Russia products under a specific brand and compare SKU-level sales, revenue, price, stock, rating, and lost-sales metrics.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill sends analytics requests and may handle account, API-key, phone/SMS login, and billing-order data during onboarding.\n\nMitigation: Install and run it only when that LinkFox data sharing is acceptable, and review authentication and billing flows before use.\n\nRisk: Endpoint environment variables can redirect requests if overridden.\n\nMitigation: Verify LINKFOX_* endpoint environment variables point to trusted LinkFox hosts before running the scripts.\n\nRisk: Saved API response files may contain marketplace analysis data that could be committed accidentally.\n\nMitigation: Run the skill in an appropriate workspace and exclude generated linkfox response directories from commits when needed.\n\nRisk: Automatic feedback reporting can share task context or skill behavior observations.\n\nMitigation: Review or disable feedback reporting behavior if the deployment should minimize outbound data sharing.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-brand-products)\n- [MPSTATS Ozon brand products API reference](references/api.md)\n- [Authentication and billing onboarding](references/onboarding.md)\n- [LinkFox Skills](https://skill.linkfox.com/)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with JSON examples and optional saved JSON API responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [The skill may save complete API responses under a workspace linkfox data directory and print either full JSON or a compact summary depending on response size.]\n\n## Skill Version(s):\n\n1.0.6 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.5: 7 files, 23954 bytes\n\nFiles: references/api.md (6694b), references/onboarding.md (2046b), scripts/mpstats_ozon_brand_products.py (12738b), scripts/onboarding.py (24089b), skill-card.md (2436b), SKILL.md (9418b), _meta.json (154b)\n\nFile v1.0.5:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-brand-products\ndescription: MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPSTATS\"，只要意图是按 Ozon 品牌看该品牌下所有商品及其销量/价格/评分表现，也应触发此技能。\n---\n\n# MPSTATS Ozon Brand Products\n\nThis skill drills into all Ozon (Russia) products sold under a given brand display name, returning each SKU's sales, revenue, price, rating, stock, turnover, lost profit, and more. Built for brand competitor audits, brand SKU structure analysis, and bestseller dissection.\n\n## Core Concepts\n\n**Brand display name**: `brandName` must match what's shown on the Ozon storefront — typically Russian (Cyrillic) or Latin (`adidas`, `Xiaomi`). Do **not** pass a category path, a seller ID, or an internal brand code here. If unsure of the exact spelling, resolve via `mpstats-ozon-product-search` first.\n\n**Filters are AND-combined**: The `filters` array supports multiple numeric conditions ANDed together. Each filter is `{field, op, value, value2?}`. Common fields and operators are in the Filter Reference below.\n\n**Currency & rate**: Default currency is **RUB**. Set `currency: \"USD\"` (or another code) to have monetary fields converted server-side; `currencyRate` lets you override the default rate if desired.\n\n**FBO / FBS mix**: `includeFbs: true` folds FBS (seller-shipped) stock + sales into the numbers; `false` keeps them FBO-only.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| brandName | string | yes | Ozon brand display name (Russian or Latin) |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; latest = yesterday |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; latest = yesterday |\n| page | integer | no | Page number, starts at 1 |\n| pageSize | integer | no | Rows per page, 1-100, default 100 |\n| sortField | string | no | snake_case column: `sales`, `revenue`, `final_price`, `balance`, `rating`, ... |\n| sortDirection | string | no | `asc` or `desc` |\n| currency | string | no | Currency code, default `RUB`; e.g. `USD`, `EUR`, `CNY` |\n| currencyRate | integer | no | Custom rate when non-default currency is used |\n| includeFbs | boolean | no | Include FBS data |\n| filters | array | no | Numeric filter conditions (see below) |\n\n## Filter Reference\n\nEach `filters` entry: `{\"field\": \"<snake_case>\", \"op\": \"<OP>\", \"value\": <num>, \"value2\": <num?>}`.\n\n**Common fields**: `sales` (monthly units), `final_price` (selling price RUB), `rating` (0-5), `comments` (review count), `balance` (stock), `revenue` (sales amount RUB), `days_in_stock`, `turnover_days`, `lost_profit`, `category_position`.\n\n**Operators**: `GTE`, `LTE`, `GT`, `LT`, `EQ`, `NOT_EQ`, `BETWEEN` (requires `value2` as the upper bound).\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/brandProducts`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_brand_products.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗积分；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-mpstats-ozon-brand-products-<timestamp>.json`（`<cwd>` 为脚本执行时的工作目录，在 Claude Code 里即当前项目目录；`<session>` 取自环境变量 `SESSION_ID`，按用户任务自动聚合；**禁止写入 /tmp**，当前目录不可写则报错）\n- 响应体 ≤ 8 KB：落盘后把完整 JSON 打印到 stdout\n- 响应体 > 8 KB：落盘后 stdout 只输出摘要（顶层字段、常见计数如 `total`/`costToken`、最大列表字段的长度 + 前 3 条样本）\n- 加 `--inline` 强制全量打印到 stdout（同样落盘）\n\n**读数据建议**：先看摘要判断是否足够；需要具体字段时优先用 `jq`或`ConvertFrom-Json` 从保存的 json 文件按需抽取，避免整份 JSON 进入上下文。\n\n## 解决认证和积分问题\n发生以下异常情况时，采用 references/onboarding.md 引导解决问题：\n\n### 异常情况\n- **未配置API Key**：环境变量未配置 `LINKFOX_AGENT_API_KEY`，也未配置 `LINKFOXAGENT_API_KEY`。\n- **响应401或402状态码**\n- **响应提示积分或余额不足**：消息含\"积分余额不足/计费不足/余额不足/quota exceeded/insufficient balance/套餐到期/需充值/请充值\"，或类似含义的内容。\n\n## Usage Examples\n\n**1. Top-50 by sales for brand `adidas`**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"sortField\": \"sales\",\n  \"sortDirection\": \"desc\",\n  \"pageSize\": 50\n}\n```\n\n**2. High-rating, mid-price filter**\n```json\n{\n  \"brandName\": \"Xiaomi\",\n  \"filters\": [\n    {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5},\n    {\"field\": \"final_price\", \"op\": \"BETWEEN\", \"value\": 1000, \"value2\": 5000}\n  ],\n  \"sortField\": \"revenue\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n**3. USD-converted output**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"currency\": \"USD\",\n  \"sortField\": \"revenue\"\n}\n```\n\n**4. Include FBS + only in-stock items**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"includeFbs\": true,\n  \"filters\": [{\"field\": \"balance\", \"op\": \"GT\", \"value\": 0}]\n}\n```\n\n**5. Lost-profit hunters (out-of-stock pain)**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"filters\": [{\"field\": \"lost_profit\", \"op\": \"GTE\", \"value\": 100000}],\n  \"sortField\": \"lost_profit\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n## Display Rules\n\n1. **Compact brand table** — key columns: `productId`, `title`, `price`, `monthlySalesUnits`, `monthlySalesRevenue`, `rating`, `reviewCount`, `balance`, `turnoverDays`, `lostProfit`.\n2. **Revenue share context** — `revenueSharePercent` is the SKU's share **within this brand result set**, 0-100; clarify the base when presenting.\n3. **Currency labeling** — always state the currency in the table header; if `currency` was overridden, note \"已按 USD 换算\".\n4. **Russian titles** — preserve original; translate on user request.\n5. **Pagination** — report total and guide the user to next page or narrower filters when total exceeds the returned page.\n6. **No business advice** — present the data; don't project future sales from a snapshot.\n\n## Important Limitations\n\n- **Exact brand-name match** — no fuzzy search; typos return empty results. Verify via `mpstats-ozon-product-search` if unsure.\n- **Page cap** — max 100 rows per page; paginate for larger brands.\n- **Date window** — `endDate` cannot be today or a future date (T-1 data).\n- **Currency conversion** — server-side; historical rates may differ slightly from the user's reference rate.\n- **Russian-only titles** — translate only when asked.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Brand-scoped Ozon product metrics:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Show me adidas's top-selling Ozon SKUs\" | Brand bestseller drill |\n| \"What does Xiaomi sell on Ozon, sorted by revenue\" | Brand revenue structure |\n| \"Which brand-X SKUs have rating ≥4.5 and stock >0\" | Brand quality filter |\n| \"Are brand-X's stockouts causing big lost profit\" | Lost-profit hunter |\n| \"Convert brand-X's Ozon sales to USD\" | Currency-normalized audit |\n\n**Not applicable** — Needs beyond brand drill-down:\n\n- Unknown exact brand name → first use `mpstats-ozon-product-search`\n- Category-level comparison across brands → use `mpstats-ozon-category-products`\n- Seller-scoped analysis → use `mpstats-ozon-seller-products`\n- Single-SKU time-series → use `mpstats-ozon-product-trend`\n- Wildberries / other Russian marketplaces → not covered\n\n**Boundary judgment**: Use this skill when the question centers on **one brand** and you want the per-SKU rollup under it. For \"which brand dominates category X\" use category drill-down and compare brand rows server-side.\n\n## 积分消耗规则\n\n按动态规则计费：消耗积分 = 12。列表为空返回 0\n\n> **重要**：本技能的服务按倍数动态计算，可能一次性消耗大量积分，必须提醒用户，由用户决定是否继续。\n\n**Feedback:**\n\nAuto-detect and report feedback via the Feedback API when any of the following apply:\n1. The functionality or purpose described in this skill does not match actual behavior\n2. The skill's results do not match the user's intent\n3. The user expresses dissatisfaction or praise about this skill\n4. Anything you believe could be improved\n\nCall the feedback API as specified in `references/api.md`. Do not interrupt the user's flow.\n\n---\n*For more high-quality, professional cross-border e-commerce skills, set [LinkFox Skills](https://skill.linkfox.com/).*\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-mpstats-ozon-brand-products\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1786099991112\n}\n\nFile v1.0.5:references/api.md\n\n# MPSTATS Ozon 品牌商品 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_TOOL_GATEWAY}/mpstats/ozon/brandProducts`\n- **请求方式**：POST，Content-Type: application/json\n- **认证方式**：Header `Authorization: <api_key>`，api_key 从环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY` 读取（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理）\n\n## 请求参数\n\nPOST Body（JSON）。以下字段与工具网关当前登记的「MPSTATS-Ozon-品牌商品」入参 schema 一致（同步日期 2026-04-30）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| brandName | string | 是 | Ozon 品牌展示名（俄语或拉丁） |\n| startDate | string | 否 | 统计起始日，`YYYY-MM-DD`；最晚昨日 |\n| endDate | string | 否 | 统计结束日，`YYYY-MM-DD`；最晚昨日 |\n| page | integer | 否 | 页码，从 1 开始 |\n| pageSize | integer | 否 | 每页行数，1-100，默认 100 |\n| sortField | string | 否 | 排序列名（snake_case），如 `sales`、`revenue`、`final_price`、`balance`、`rating` |\n| sortDirection | string | 否 | `asc` 升序 / `desc` 降序 |\n| currency | string | 否 | 结果金额货币代码，默认 `RUB`，如 `USD` / `EUR` / `CNY` |\n| currencyRate | integer | 否 | 自定义汇率（配合非默认货币） |\n| includeFbs | boolean | 否 | 是否纳入 FBS 数据 |\n| filters | array | 否 | 数值筛选条件列表，每项 `{field, op, value, value2?}`，多条件 AND |\n\n### filters 字段说明\n\n| 子字段 | 类型 | 必填 | 说明 |\n|--------|------|------|------|\n| field | string | 是 | 列名（snake_case），常用见下 |\n| op | string | 是 | `GTE` / `LTE` / `GT` / `LT` / `EQ` / `NOT_EQ` / `BETWEEN` |\n| value | number | 是 | 主值（`BETWEEN` 时为下界） |\n| value2 | number | `BETWEEN` 必填 | 上界（闭区间） |\n\n**常用 field**：`sales`（月销）、`final_price`（售价 RUB）、`rating`（评分 0-5）、`comments`（评论数）、`balance`（库存）、`revenue`（销售额 RUB）、`days_in_stock`（有货天数）、`turnover_days`（周转天数）、`lost_profit`（损失销售额 RUB）、`category_position`（类目排名）。\n\n## 响应结构\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| code | string | 返回码，`\"200\"` 成功 |\n| msg | string | 消息；成功为 `ok` |\n| total | integer | 品牌下命中商品总数 |\n| products | array | 商品列表（详见下方） |\n| columns | array | 渲染列定义 |\n| costTime | integer | 接口耗时（毫秒） |\n| costToken | integer | 消耗 Token 数量 |\n| type | string | 响应类型 |\n\n### products[*] 商品对象字段（39 个）\n\n按官方 outputSchema 定义（`_mpstats_ozon_brandProducts`，同步日期 2026-05-06）。该 schema 与 `productSearch` / `categoryProducts` / `sellerProducts` **完全共用**；4 个端点只是查询维度不同，返回的商品卡字段集完全一致。\n\n**身份与基础信息**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| brand | string | 品牌 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| category | string | 品类路径（俄语，`/` 分隔） |\n| nicheName | string | 赛道路径（俄语） |\n| nicheId | integer | 赛道 ID |\n| country | string | 销售国，Ozon 恒为 `RU` |\n| firstDate | string | 上架日期（`yyyy-MM-dd`） |\n| imageUrl | string | 主图 URL |\n| productPageUrl | string | 商品页 URL |\n| sourceTool / sourceType | string | 来源工具 / 数据源标识 |\n\n**价格与货币**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| price | number | 当前售价 |\n| oldPrice | number | 折扣前原价 |\n| ozonCardPrice | number | Ozon Card 价 |\n| minPrice / maxPrice / averagePrice | number | 统计期内最低价 / 最高价 / 均价 |\n| currency | string | 币种符号（`₽` / `$` / `€`） |\n\n**评分与评论**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| rating | number | 评分，0-5 |\n| reviewCount | integer | 评论数 |\n\n**库存与 FBS**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| balance | integer | 当前库存（件） |\n| balanceFbs | integer | FBS 库存（卖家自发货件数） |\n| frozenStocks | integer | 滞销库存 |\n| warehousesCount | integer | FBO 分仓数 |\n| isFbs | boolean | 是否 FBS 发货 |\n\n**销售与周转**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| salesPerDay | number | 日均销量（件/日） |\n| monthlySalesUnits | integer | 统计期销量（件） |\n| monthlySalesRevenue | number | 统计期销售额 |\n| lostProfit | number | 损失销售额（缺货等造成） |\n| daysInSite | integer | 在售天数（统计期，含缺货日） |\n| daysInStock | integer | 有货天数 |\n| turnoverDays | number | 周转天数（越小越快） |\n\n**排名与占比**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| position | integer | 当前查询维度（本端点为品牌）内排名 |\n| categoryPosition | integer | 品类内排名 |\n| revenueSharePercent | number | 该 SKU 在当前查询维度的销售额占比，0-100 |\n\n## 错误码\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 解析 `products` |\n| 401 | 认证失败 | HTTP 401 或 authorized error：按 SKILL.md 的 **## 解决认证和积分问题** 处理。 |\n| 402 | 积分或余额不足 | HTTP 402：按 SKILL.md 的 **## 解决认证和积分问题** 处理。 |\n| 其他 | 业务异常 | 查看 `errmsg`；常见为 `brandName` 拼写错误、日期越过昨日等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/brandProducts \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"brandName\": \"adidas\",\n    \"sortField\": \"sales\",\n    \"sortDirection\": \"desc\",\n    \"pageSize\": 50,\n    \"filters\": [\n      {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5}\n    ]\n  }'\n```\n\n---\n\n## Feedback API\n\n> 该接口与上方工具接口不同，**请勿混用两个基础 URL**。\n\n- **POST** `https://skill-api.linkfox.com/api/v1/public/feedback`\n- **Content-Type:** `application/json`\n\n```json\n{\n  \"skillName\": \"linkfox-mpstats-ozon-brand-products\",\n  \"sentiment\": \"NEUTRAL\",\n  \"category\": \"SUGGESTION\",\n  \"content\": \"Would like fuzzy brand-name matching.\"\n}\n```\n\n**字段说明：**\n- `skillName`：使用本 skill 的 YAML `name`\n- `sentiment`：`POSITIVE` / `NEUTRAL` / `NEGATIVE`\n- `category`：`BUG` / `COMPLAINT` / `SUGGESTION` / `OTHER`\n- `content`：用户表达、实际现象、为什么算问题或好评\n\nFile v1.0.5:references/onboarding.md\n\n# 解决认证和积分问题\n\n调用本 skill 时若网关返回 **auth** 或 **billing** 错误，走本 skill 自带的 `scripts/onboarding.py` 完成引导。\n\n**auth 场景**：`errcode=401` 或消息含 `authorized error`/`鉴权失败`/`未授权`/`unauthorized`；或 `LINKFOX_AGENT_API_KEY` 与 `LINKFOXAGENT_API_KEY` 均为空。\n1. 若已配置 key → 先让用户重启会话（最常见误判），仍失败让用户重新取 key 或换手机号重注册\n2. 未配置 → 询问：自助去 https://agent.linkfox.com/ 取 key，或提供手机号让脚本注册\n3. 手机号路径：\n   - `python scripts/onboarding.py send-code <phone>` → 展示 JSON 里的 phone/agreements\n   - 收到验证码后：`python scripts/onboarding.py login <phone> <code>`（workbuddy 宿主加 `--channel workbuddy`）\n   - 拿到 `api_key` 后把下面三平台配置转发给用户，提示重启会话生效：\n     - Windows PowerShell（永久）：`setx LINKFOX_AGENT_API_KEY \"<key>\"`\n     - macOS zsh：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.zshrc && source ~/.zshrc`\n     - Linux bash：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.bashrc && source ~/.bashrc`\n     - 变量名 `LINKFOX_AGENT_API_KEY`（主推）或 `LINKFOXAGENT_API_KEY`（老规范）任一即可\n\n**billing 场景**：`errcode=402` 或消息含 `积分/余额/quota/insufficient/充值/套餐到期`。\n- `python scripts/onboarding.py list-plans` → 有 AskUserQuestion 就弹菜单，否则输出编号清单让用户选\n- 校验 `plan_id` ∈ 清单、支付方式 ∈ 该套餐 `available_methods`（通常 `wechat/alipay`）\n- `python scripts/onboarding.py order <plan_id> <method>` → 展示优先级 PNG > `pay_url` > `ascii_qr`（标注兜底）\n- 已付款可选调 `python scripts/onboarding.py query <order_id>`，不主动轮询\n\n排除 `errcode=403`（无权限，不归入这两类）。所有子命令输出 stdout JSON，`error` 字段已含阶段前缀，透传给用户即可。完整用法：`python scripts/onboarding.py --help`。\n\nFile v1.0.5:skill-card.md\n\n## Description:\n\nQueries LinkFox MPSTATS data for Ozon Russia products under a specified brand and returns per-SKU sales, revenue, price, rating, stock, turnover, and lost-sales metrics.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[linkfox-ai](https://clawhub.ai/user/linkfox-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal marketplace analysts, e-commerce operators, and developers use this skill to inspect the SKU mix and performance of a single Ozon brand for competitor audits, brand structure analysis, and bestseller review.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The security evidence says the skill handles account signup, API-key generation, and payment ordering in addition to analytics.\n\nMitigation: Review the authentication and billing flow before installation, obtain and store the LinkFox API key yourself where possible, and confirm any paid plan or QR payment before proceeding.\n\nRisk: The security guidance warns against running the skill with overridden LinkFox endpoint environment variables unless those endpoints are intentionally trusted.\n\nMitigation: Use the default LinkFox endpoints unless a trusted administrator has approved the override values.\n\nRisk: The skill writes API responses and generated LinkFox data to local session directories.\n\nMitigation: Keep generated LinkFox data out of repositories and review saved JSON before sharing it outside the workspace.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-brand-products)\n- [MPSTATS Ozon Brand Products API Reference](references/api.md)\n- [Authentication and Billing Onboarding](references/onboarding.md)\n\n## Skill Output:\n\n**Output Type(s):** [JSON, Files, Markdown, Shell commands, Guidance]\n\n**Output Format:** [JSON files and stdout JSON or Markdown summaries]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Full API responses are saved under a local linkfox session directory; large responses print a compact summary unless inline output is requested.]\n\n## Skill Version(s):\n\n1.0.5 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.4: 5 files, 15138 bytes\n\nFiles: references/api.md (6694b), scripts/mpstats_ozon_brand_products.py (12738b), skill-card.md (2669b), SKILL.md (10035b), _meta.json (154b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-brand-products\ndescription: MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPSTATS\"，只要意图是按 Ozon 品牌看该品牌下所有商品及其销量/价格/评分表现，也应触发此技能。\n---\n\n# MPSTATS Ozon Brand Products\n\nThis skill drills into all Ozon (Russia) products sold under a given brand display name, returning each SKU's sales, revenue, price, rating, stock, turnover, lost profit, and more. Built for brand competitor audits, brand SKU structure analysis, and bestseller dissection.\n\n## Core Concepts\n\n**Brand display name**: `brandName` must match what's shown on the Ozon storefront — typically Russian (Cyrillic) or Latin (`adidas`, `Xiaomi`). Do **not** pass a category path, a seller ID, or an internal brand code here. If unsure of the exact spelling, resolve via `mpstats-ozon-product-search` first.\n\n**Filters are AND-combined**: The `filters` array supports multiple numeric conditions ANDed together. Each filter is `{field, op, value, value2?}`. Common fields and operators are in the Filter Reference below.\n\n**Currency & rate**: Default currency is **RUB**. Set `currency: \"USD\"` (or another code) to have monetary fields converted server-side; `currencyRate` lets you override the default rate if desired.\n\n**FBO / FBS mix**: `includeFbs: true` folds FBS (seller-shipped) stock + sales into the numbers; `false` keeps them FBO-only.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| brandName | string | yes | Ozon brand display name (Russian or Latin) |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; latest = yesterday |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; latest = yesterday |\n| page | integer | no | Page number, starts at 1 |\n| pageSize | integer | no | Rows per page, 1-100, default 100 |\n| sortField | string | no | snake_case column: `sales`, `revenue`, `final_price`, `balance`, `rating`, ... |\n| sortDirection | string | no | `asc` or `desc` |\n| currency | string | no | Currency code, default `RUB`; e.g. `USD`, `EUR`, `CNY` |\n| currencyRate | integer | no | Custom rate when non-default currency is used |\n| includeFbs | boolean | no | Include FBS data |\n| filters | array | no | Numeric filter conditions (see below) |\n\n## Filter Reference\n\nEach `filters` entry: `{\"field\": \"<snake_case>\", \"op\": \"<OP>\", \"value\": <num>, \"value2\": <num?>}`.\n\n**Common fields**: `sales` (monthly units), `final_price` (selling price RUB), `rating` (0-5), `comments` (review count), `balance` (stock), `revenue` (sales amount RUB), `days_in_stock`, `turnover_days`, `lost_profit`, `category_position`.\n\n**Operators**: `GTE`, `LTE`, `GT`, `LT`, `EQ`, `NOT_EQ`, `BETWEEN` (requires `value2` as the upper bound).\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/brandProducts`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_brand_products.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗积分；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-mpstats-ozon-brand-products-<timestamp>.json`（`<cwd>` 为脚本执行时的工作目录，在 Claude Code 里即当前项目目录；`<session>` 取自环境变量 `SESSION_ID`，按用户任务自动聚合；**禁止写入 /tmp**，当前目录不可写则报错）\n- 响应体 ≤ 8 KB：落盘后把完整 JSON 打印到 stdout\n- 响应体 > 8 KB：落盘后 stdout 只输出摘要（顶层字段、常见计数如 `total`/`costToken`、最大列表字段的长度 + 前 3 条样本）\n- 加 `--inline` 强制全量打印到 stdout（同样落盘）\n\n**读数据建议**：先看摘要判断是否足够；需要具体字段时优先用 `jq`或`ConvertFrom-Json` 从保存的 json 文件按需抽取，避免整份 JSON 进入上下文。\n\n## 解决认证和积分问题\n发生以下异常情况时，采用以下措施来处理：\n\n### 异常情况\n- **未配置API Key**：环境变量未配置 `LINKFOX_AGENT_API_KEY`，也未配置 `LINKFOXAGENT_API_KEY`。\n- **响应401或402状态码**\n- **响应提示积分或余额不足**：消息含\"积分余额不足/计费不足/余额不足/quota exceeded/insufficient balance/套餐到期/需充值/请充值\"，或类似含义的内容。\n\n### 措施\n- 优先采用skill内的 onboarding.md 引导解决问题。\n- 如找不到 onboarding.md 文件，则加载 /linkfox-onboarding 这个skill并根据它的引导来处理。如未安装请先安装：\n    - 下载 https://agent-files.linkfox.com/skills/linkfox-onboarding/release.zip，解压后安装这个skill。如需用户授权才可下载，要询问用户获得授权，你不能自己放弃下载。\n- 兜底措施：仅当前面两个措施经过所有努力都走不通时，才提示用户依据 https://skill.linkfox.com/linkfoxskills/guide.htm 指引获取API Key，或去 https://os.linkfox.com/ 补充积分。\n\n## Usage Examples\n\n**1. Top-50 by sales for brand `adidas`**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"sortField\": \"sales\",\n  \"sortDirection\": \"desc\",\n  \"pageSize\": 50\n}\n```\n\n**2. High-rating, mid-price filter**\n```json\n{\n  \"brandName\": \"Xiaomi\",\n  \"filters\": [\n    {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5},\n    {\"field\": \"final_price\", \"op\": \"BETWEEN\", \"value\": 1000, \"value2\": 5000}\n  ],\n  \"sortField\": \"revenue\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n**3. USD-converted output**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"currency\": \"USD\",\n  \"sortField\": \"revenue\"\n}\n```\n\n**4. Include FBS + only in-stock items**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"includeFbs\": true,\n  \"filters\": [{\"field\": \"balance\", \"op\": \"GT\", \"value\": 0}]\n}\n```\n\n**5. Lost-profit hunters (out-of-stock pain)**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"filters\": [{\"field\": \"lost_profit\", \"op\": \"GTE\", \"value\": 100000}],\n  \"sortField\": \"lost_profit\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n## Display Rules\n\n1. **Compact brand table** — key columns: `productId`, `title`, `price`, `monthlySalesUnits`, `monthlySalesRevenue`, `rating`, `reviewCount`, `balance`, `turnoverDays`, `lostProfit`.\n2. **Revenue share context** — `revenueSharePercent` is the SKU's share **within this brand result set**, 0-100; clarify the base when presenting.\n3. **Currency labeling** — always state the currency in the table header; if `currency` was overridden, note \"已按 USD 换算\".\n4. **Russian titles** — preserve original; translate on user request.\n5. **Pagination** — report total and guide the user to next page or narrower filters when total exceeds the returned page.\n6. **No business advice** — present the data; don't project future sales from a snapshot.\n\n## Important Limitations\n\n- **Exact brand-name match** — no fuzzy search; typos return empty results. Verify via `mpstats-ozon-product-search` if unsure.\n- **Page cap** — max 100 rows per page; paginate for larger brands.\n- **Date window** — `endDate` cannot be today or a future date (T-1 data).\n- **Currency conversion** — server-side; historical rates may differ slightly from the user's reference rate.\n- **Russian-only titles** — translate only when asked.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Brand-scoped Ozon product metrics:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Show me adidas's top-selling Ozon SKUs\" | Brand bestseller drill |\n| \"What does Xiaomi sell on Ozon, sorted by revenue\" | Brand revenue structure |\n| \"Which brand-X SKUs have rating ≥4.5 and stock >0\" | Brand quality filter |\n| \"Are brand-X's stockouts causing big lost profit\" | Lost-profit hunter |\n| \"Convert brand-X's Ozon sales to USD\" | Currency-normalized audit |\n\n**Not applicable** — Needs beyond brand drill-down:\n\n- Unknown exact brand name → first use `mpstats-ozon-product-search`\n- Category-level comparison across brands → use `mpstats-ozon-category-products`\n- Seller-scoped analysis → use `mpstats-ozon-seller-products`\n- Single-SKU time-series → use `mpstats-ozon-product-trend`\n- Wildberries / other Russian marketplaces → not covered\n\n**Boundary judgment**: Use this skill when the question centers on **one brand** and you want the per-SKU rollup under it. For \"which brand dominates category X\" use category drill-down and compare brand rows server-side.\n\n## 积分消耗规则\n\n按动态规则计费：消耗积分 = 12。列表为空返回 0\n\n> **重要**：本技能的服务按倍数动态计算，可能一次性消耗大量积分，必须提醒用户，由用户决定是否继续。\n\n**Feedback:**\n\nAuto-detect and report feedback via the Feedback API when any of the following apply:\n1. The functionality or purpose described in this skill does not match actual behavior\n2. The skill's results do not match the user's intent\n3. The user expresses dissatisfaction or praise about this skill\n4. Anything you believe could be improved\n\nCall the feedback API as specified in `references/api.md`. Do not interrupt the user's flow.\n\n---\n*For more high-quality, professional cross-border e-commerce skills, set [LinkFox Skills](https://skill.linkfox.com/).*\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-mpstats-ozon-brand-products\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1783944820558\n}\n\nFile v1.0.4:references/api.md\n\n# MPSTATS Ozon 品牌商品 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_TOOL_GATEWAY}/mpstats/ozon/brandProducts`\n- **请求方式**：POST，Content-Type: application/json\n- **认证方式**：Header `Authorization: <api_key>`，api_key 从环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY` 读取（如未配置 按 SKILL.md 的 **## 解决认证和积分问题** 处理）\n\n## 请求参数\n\nPOST Body（JSON）。以下字段与工具网关当前登记的「MPSTATS-Ozon-品牌商品」入参 schema 一致（同步日期 2026-04-30）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| brandName | string | 是 | Ozon 品牌展示名（俄语或拉丁） |\n| startDate | string | 否 | 统计起始日，`YYYY-MM-DD`；最晚昨日 |\n| endDate | string | 否 | 统计结束日，`YYYY-MM-DD`；最晚昨日 |\n| page | integer | 否 | 页码，从 1 开始 |\n| pageSize | integer | 否 | 每页行数，1-100，默认 100 |\n| sortField | string | 否 | 排序列名（snake_case），如 `sales`、`revenue`、`final_price`、`balance`、`rating` |\n| sortDirection | string | 否 | `asc` 升序 / `desc` 降序 |\n| currency | string | 否 | 结果金额货币代码，默认 `RUB`，如 `USD` / `EUR` / `CNY` |\n| currencyRate | integer | 否 | 自定义汇率（配合非默认货币） |\n| includeFbs | boolean | 否 | 是否纳入 FBS 数据 |\n| filters | array | 否 | 数值筛选条件列表，每项 `{field, op, value, value2?}`，多条件 AND |\n\n### filters 字段说明\n\n| 子字段 | 类型 | 必填 | 说明 |\n|--------|------|------|------|\n| field | string | 是 | 列名（snake_case），常用见下 |\n| op | string | 是 | `GTE` / `LTE` / `GT` / `LT` / `EQ` / `NOT_EQ` / `BETWEEN` |\n| value | number | 是 | 主值（`BETWEEN` 时为下界） |\n| value2 | number | `BETWEEN` 必填 | 上界（闭区间） |\n\n**常用 field**：`sales`（月销）、`final_price`（售价 RUB）、`rating`（评分 0-5）、`comments`（评论数）、`balance`（库存）、`revenue`（销售额 RUB）、`days_in_stock`（有货天数）、`turnover_days`（周转天数）、`lost_profit`（损失销售额 RUB）、`category_position`（类目排名）。\n\n## 响应结构\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| code | string | 返回码，`\"200\"` 成功 |\n| msg | string | 消息；成功为 `ok` |\n| total | integer | 品牌下命中商品总数 |\n| products | array | 商品列表（详见下方） |\n| columns | array | 渲染列定义 |\n| costTime | integer | 接口耗时（毫秒） |\n| costToken | integer | 消耗 Token 数量 |\n| type | string | 响应类型 |\n\n### products[*] 商品对象字段（39 个）\n\n按官方 outputSchema 定义（`_mpstats_ozon_brandProducts`，同步日期 2026-05-06）。该 schema 与 `productSearch` / `categoryProducts` / `sellerProducts` **完全共用**；4 个端点只是查询维度不同，返回的商品卡字段集完全一致。\n\n**身份与基础信息**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| brand | string | 品牌 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| category | string | 品类路径（俄语，`/` 分隔） |\n| nicheName | string | 赛道路径（俄语） |\n| nicheId | integer | 赛道 ID |\n| country | string | 销售国，Ozon 恒为 `RU` |\n| firstDate | string | 上架日期（`yyyy-MM-dd`） |\n| imageUrl | string | 主图 URL |\n| productPageUrl | string | 商品页 URL |\n| sourceTool / sourceType | string | 来源工具 / 数据源标识 |\n\n**价格与货币**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| price | number | 当前售价 |\n| oldPrice | number | 折扣前原价 |\n| ozonCardPrice | number | Ozon Card 价 |\n| minPrice / maxPrice / averagePrice | number | 统计期内最低价 / 最高价 / 均价 |\n| currency | string | 币种符号（`₽` / `$` / `€`） |\n\n**评分与评论**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| rating | number | 评分，0-5 |\n| reviewCount | integer | 评论数 |\n\n**库存与 FBS**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| balance | integer | 当前库存（件） |\n| balanceFbs | integer | FBS 库存（卖家自发货件数） |\n| frozenStocks | integer | 滞销库存 |\n| warehousesCount | integer | FBO 分仓数 |\n| isFbs | boolean | 是否 FBS 发货 |\n\n**销售与周转**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| salesPerDay | number | 日均销量（件/日） |\n| monthlySalesUnits | integer | 统计期销量（件） |\n| monthlySalesRevenue | number | 统计期销售额 |\n| lostProfit | number | 损失销售额（缺货等造成） |\n| daysInSite | integer | 在售天数（统计期，含缺货日） |\n| daysInStock | integer | 有货天数 |\n| turnoverDays | number | 周转天数（越小越快） |\n\n**排名与占比**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| position | integer | 当前查询维度（本端点为品牌）内排名 |\n| categoryPosition | integer | 品类内排名 |\n| revenueSharePercent | number | 该 SKU 在当前查询维度的销售额占比，0-100 |\n\n## 错误码\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 解析 `products` |\n| 401 | 认证失败 | HTTP 401 或 authorized error：按 SKILL.md 的 **## 解决认证和积分问题** 处理。 |\n| 402 | 积分或余额不足 | HTTP 402：按 SKILL.md 的 **## 解决认证和积分问题** 处理。 |\n| 其他 | 业务异常 | 查看 `errmsg`；常见为 `brandName` 拼写错误、日期越过昨日等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/brandProducts \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"brandName\": \"adidas\",\n    \"sortField\": \"sales\",\n    \"sortDirection\": \"desc\",\n    \"pageSize\": 50,\n    \"filters\": [\n      {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5}\n    ]\n  }'\n```\n\n---\n\n## Feedback API\n\n> 该接口与上方工具接口不同，**请勿混用两个基础 URL**。\n\n- **POST** `https://skill-api.linkfox.com/api/v1/public/feedback`\n- **Content-Type:** `application/json`\n\n```json\n{\n  \"skillName\": \"linkfox-mpstats-ozon-brand-products\",\n  \"sentiment\": \"NEUTRAL\",\n  \"category\": \"SUGGESTION\",\n  \"content\": \"Would like fuzzy brand-name matching.\"\n}\n```\n\n**字段说明：**\n- `skillName`：使用本 skill 的 YAML `name`\n- `sentiment`：`POSITIVE` / `NEUTRAL` / `NEGATIVE`\n- `category`：`BUG` / `COMPLAINT` / `SUGGESTION` / `OTHER`\n- `content`：用户表达、实际现象、为什么算问题或好评\n\nFile v1.0.4:skill-card.md\n\n## Description: <br>\nThis skill queries LinkFox MPSTATS data for Ozon Russia products under an exact brand display name, returning per-SKU sales, revenue, price, rating, inventory, turnover, and lost-profit metrics. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[linkfox-ai](https://clawhub.ai/user/linkfox-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal marketplace operators, analysts, and agents use this skill to inspect the SKU-level product structure of a single Ozon brand and compare sales, revenue, pricing, ratings, stock, and lost-profit signals. It is suited to brand competitor audits, bestseller review, and currency-normalized marketplace analysis when the exact brand display name is known. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill requires a LinkFox API key and can make paid LinkFox API calls. <br>\nMitigation: Install and run it only when the user accepts LinkFox credential use and possible credit consumption; confirm additional paid lookups before retrying or broadening a query. <br>\nRisk: The skill stores full marketplace-analysis API responses on disk. <br>\nMitigation: Review saved JSON files before sharing a workspace or committing generated outputs, and remove cached or session data when it is no longer needed. <br>\nRisk: The security summary notes automatic feedback reporting and onboarding-install behavior that may be broader than expected. <br>\nMitigation: Review or disable feedback reporting and onboarding installation behavior before deployment in environments with strict data-sharing or software-installation controls. <br>\n\n\n## Reference(s): <br>\n- [MPSTATS Ozon Brand Products API Reference](references/api.md) <br>\n- [ClawHub skill page](https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-brand-products) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, JSON, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with shell commands and JSON API results or summaries] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Full API responses are persisted as JSON files; large responses are summarized in stdout unless inline output is requested.] <br>\n\n## Skill Version(s): <br>\n1.0.4 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.3: 5 files, 14610 bytes\n\nFiles: references/api.md (6535b), scripts/mpstats_ozon_brand_products.py (12831b), skill-card.md (3072b), SKILL.md (8708b), _meta.json (154b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-brand-products\ndescription: MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPSTATS\"，只要意图是按 Ozon 品牌看该品牌下所有商品及其销量/价格/评分表现，也应触发此技能。\n---\n\n# MPSTATS Ozon Brand Products\n\nThis skill drills into all Ozon (Russia) products sold under a given brand display name, returning each SKU's sales, revenue, price, rating, stock, turnover, lost profit, and more. Built for brand competitor audits, brand SKU structure analysis, and bestseller dissection.\n\n## Core Concepts\n\n**Brand display name**: `brandName` must match what's shown on the Ozon storefront — typically Russian (Cyrillic) or Latin (`adidas`, `Xiaomi`). Do **not** pass a category path, a seller ID, or an internal brand code here. If unsure of the exact spelling, resolve via `mpstats-ozon-product-search` first.\n\n**Filters are AND-combined**: The `filters` array supports multiple numeric conditions ANDed together. Each filter is `{field, op, value, value2?}`. Common fields and operators are in the Filter Reference below.\n\n**Currency & rate**: Default currency is **RUB**. Set `currency: \"USD\"` (or another code) to have monetary fields converted server-side; `currencyRate` lets you override the default rate if desired.\n\n**FBO / FBS mix**: `includeFbs: true` folds FBS (seller-shipped) stock + sales into the numbers; `false` keeps them FBO-only.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| brandName | string | yes | Ozon brand display name (Russian or Latin) |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; latest = yesterday |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; latest = yesterday |\n| page | integer | no | Page number, starts at 1 |\n| pageSize | integer | no | Rows per page, 1-100, default 100 |\n| sortField | string | no | snake_case column: `sales`, `revenue`, `final_price`, `balance`, `rating`, ... |\n| sortDirection | string | no | `asc` or `desc` |\n| currency | string | no | Currency code, default `RUB`; e.g. `USD`, `EUR`, `CNY` |\n| currencyRate | integer | no | Custom rate when non-default currency is used |\n| includeFbs | boolean | no | Include FBS data |\n| filters | array | no | Numeric filter conditions (see below) |\n\n## Filter Reference\n\nEach `filters` entry: `{\"field\": \"<snake_case>\", \"op\": \"<OP>\", \"value\": <num>, \"value2\": <num?>}`.\n\n**Common fields**: `sales` (monthly units), `final_price` (selling price RUB), `rating` (0-5), `comments` (review count), `balance` (stock), `revenue` (sales amount RUB), `days_in_stock`, `turnover_days`, `lost_profit`, `category_position`.\n\n**Operators**: `GTE`, `LTE`, `GT`, `LT`, `EQ`, `NOT_EQ`, `BETWEEN` (requires `value2` as the upper bound).\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/brandProducts`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_brand_products.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗积分；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-mpstats-ozon-brand-products-<timestamp>.json`（`<cwd>` 为脚本执行时的工作目录，在 Claude Code 里即当前项目目录；`<session>` 取自环境变量 `SESSION_ID`，按用户任务自动聚合；**禁止写入 /tmp**，当前目录不可写则报错）\n- 响应体 ≤ 8 KB：落盘后把完整 JSON 打印到 stdout\n- 响应体 > 8 KB：落盘后 stdout 只输出摘要（顶层字段、常见计数如 `total`/`costToken`、最大列表字段的长度 + 前 3 条样本）\n- 加 `--inline` 强制全量打印到 stdout（同样落盘）\n\n**读数据建议**：先看摘要判断是否足够；需要具体字段时优先用 `jq`或`ConvertFrom-Json` 从保存的 json 文件按需抽取，避免整份 JSON 进入上下文。\n## Usage Examples\n\n**1. Top-50 by sales for brand `adidas`**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"sortField\": \"sales\",\n  \"sortDirection\": \"desc\",\n  \"pageSize\": 50\n}\n```\n\n**2. High-rating, mid-price filter**\n```json\n{\n  \"brandName\": \"Xiaomi\",\n  \"filters\": [\n    {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5},\n    {\"field\": \"final_price\", \"op\": \"BETWEEN\", \"value\": 1000, \"value2\": 5000}\n  ],\n  \"sortField\": \"revenue\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n**3. USD-converted output**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"currency\": \"USD\",\n  \"sortField\": \"revenue\"\n}\n```\n\n**4. Include FBS + only in-stock items**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"includeFbs\": true,\n  \"filters\": [{\"field\": \"balance\", \"op\": \"GT\", \"value\": 0}]\n}\n```\n\n**5. Lost-profit hunters (out-of-stock pain)**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"filters\": [{\"field\": \"lost_profit\", \"op\": \"GTE\", \"value\": 100000}],\n  \"sortField\": \"lost_profit\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n## Display Rules\n\n1. **Compact brand table** — key columns: `productId`, `title`, `price`, `monthlySalesUnits`, `monthlySalesRevenue`, `rating`, `reviewCount`, `balance`, `turnoverDays`, `lostProfit`.\n2. **Revenue share context** — `revenueSharePercent` is the SKU's share **within this brand result set**, 0-100; clarify the base when presenting.\n3. **Currency labeling** — always state the currency in the table header; if `currency` was overridden, note \"已按 USD 换算\".\n4. **Russian titles** — preserve original; translate on user request.\n5. **Pagination** — report total and guide the user to next page or narrower filters when total exceeds the returned page.\n6. **No business advice** — present the data; don't project future sales from a snapshot.\n\n## Important Limitations\n\n- **Exact brand-name match** — no fuzzy search; typos return empty results. Verify via `mpstats-ozon-product-search` if unsure.\n- **Page cap** — max 100 rows per page; paginate for larger brands.\n- **Date window** — `endDate` cannot be today or a future date (T-1 data).\n- **Currency conversion** — server-side; historical rates may differ slightly from the user's reference rate.\n- **Russian-only titles** — translate only when asked.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Brand-scoped Ozon product metrics:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Show me adidas's top-selling Ozon SKUs\" | Brand bestseller drill |\n| \"What does Xiaomi sell on Ozon, sorted by revenue\" | Brand revenue structure |\n| \"Which brand-X SKUs have rating ≥4.5 and stock >0\" | Brand quality filter |\n| \"Are brand-X's stockouts causing big lost profit\" | Lost-profit hunter |\n| \"Convert brand-X's Ozon sales to USD\" | Currency-normalized audit |\n\n**Not applicable** — Needs beyond brand drill-down:\n\n- Unknown exact brand name → first use `mpstats-ozon-product-search`\n- Category-level comparison across brands → use `mpstats-ozon-category-products`\n- Seller-scoped analysis → use `mpstats-ozon-seller-products`\n- Single-SKU time-series → use `mpstats-ozon-product-trend`\n- Wildberries / other Russian marketplaces → not covered\n\n**Boundary judgment**: Use this skill when the question centers on **one brand** and you want the per-SKU rollup under it. For \"which brand dominates category X\" use category drill-down and compare brand rows server-side.\n\n**Feedback:**\n\nAuto-detect and report feedback via the Feedback API when any of the following apply:\n1. The functionality or purpose described in this skill does not match actual behavior\n2. The skill's results do not match the user's intent\n3. The user expresses dissatisfaction or praise about this skill\n4. Anything you believe could be improved\n\nCall the feedback API as specified in `references/api.md`. Do not interrupt the user's flow.\n\n---\n*For more high-quality, professional cross-border e-commerce skills, set [LinkFox Skills](https://skill.linkfox.com/).*\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-mpstats-ozon-brand-products\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1783336947986\n}\n\nFile v1.0.3:references/api.md\n\n# MPSTATS Ozon 品牌商品 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_TOOL_GATEWAY}/mpstats/ozon/brandProducts`\n- **请求方式**：POST，Content-Type: application/json\n- **认证方式**：Header `Authorization: <api_key>`，api_key 从环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY` 读取（如未配置，提示用户前往 https://skill.linkfox.com/linkfoxskills/guide.htm 申请）\n\n## 请求参数\n\nPOST Body（JSON）。以下字段与工具网关当前登记的「MPSTATS-Ozon-品牌商品」入参 schema 一致（同步日期 2026-04-30）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| brandName | string | 是 | Ozon 品牌展示名（俄语或拉丁） |\n| startDate | string | 否 | 统计起始日，`YYYY-MM-DD`；最晚昨日 |\n| endDate | string | 否 | 统计结束日，`YYYY-MM-DD`；最晚昨日 |\n| page | integer | 否 | 页码，从 1 开始 |\n| pageSize | integer | 否 | 每页行数，1-100，默认 100 |\n| sortField | string | 否 | 排序列名（snake_case），如 `sales`、`revenue`、`final_price`、`balance`、`rating` |\n| sortDirection | string | 否 | `asc` 升序 / `desc` 降序 |\n| currency | string | 否 | 结果金额货币代码，默认 `RUB`，如 `USD` / `EUR` / `CNY` |\n| currencyRate | integer | 否 | 自定义汇率（配合非默认货币） |\n| includeFbs | boolean | 否 | 是否纳入 FBS 数据 |\n| filters | array | 否 | 数值筛选条件列表，每项 `{field, op, value, value2?}`，多条件 AND |\n\n### filters 字段说明\n\n| 子字段 | 类型 | 必填 | 说明 |\n|--------|------|------|------|\n| field | string | 是 | 列名（snake_case），常用见下 |\n| op | string | 是 | `GTE` / `LTE` / `GT` / `LT` / `EQ` / `NOT_EQ` / `BETWEEN` |\n| value | number | 是 | 主值（`BETWEEN` 时为下界） |\n| value2 | number | `BETWEEN` 必填 | 上界（闭区间） |\n\n**常用 field**：`sales`（月销）、`final_price`（售价 RUB）、`rating`（评分 0-5）、`comments`（评论数）、`balance`（库存）、`revenue`（销售额 RUB）、`days_in_stock`（有货天数）、`turnover_days`（周转天数）、`lost_profit`（损失销售额 RUB）、`category_position`（类目排名）。\n\n## 响应结构\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| code | string | 返回码，`\"200\"` 成功 |\n| msg | string | 消息；成功为 `ok` |\n| total | integer | 品牌下命中商品总数 |\n| products | array | 商品列表（详见下方） |\n| columns | array | 渲染列定义 |\n| costTime | integer | 接口耗时（毫秒） |\n| costToken | integer | 消耗 Token 数量 |\n| type | string | 响应类型 |\n\n### products[*] 商品对象字段（39 个）\n\n按官方 outputSchema 定义（`_mpstats_ozon_brandProducts`，同步日期 2026-05-06）。该 schema 与 `productSearch` / `categoryProducts` / `sellerProducts` **完全共用**；4 个端点只是查询维度不同，返回的商品卡字段集完全一致。\n\n**身份与基础信息**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| brand | string | 品牌 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| category | string | 品类路径（俄语，`/` 分隔） |\n| nicheName | string | 赛道路径（俄语） |\n| nicheId | integer | 赛道 ID |\n| country | string | 销售国，Ozon 恒为 `RU` |\n| firstDate | string | 上架日期（`yyyy-MM-dd`） |\n| imageUrl | string | 主图 URL |\n| productPageUrl | string | 商品页 URL |\n| sourceTool / sourceType | string | 来源工具 / 数据源标识 |\n\n**价格与货币**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| price | number | 当前售价 |\n| oldPrice | number | 折扣前原价 |\n| ozonCardPrice | number | Ozon Card 价 |\n| minPrice / maxPrice / averagePrice | number | 统计期内最低价 / 最高价 / 均价 |\n| currency | string | 币种符号（`₽` / `$` / `€`） |\n\n**评分与评论**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| rating | number | 评分，0-5 |\n| reviewCount | integer | 评论数 |\n\n**库存与 FBS**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| balance | integer | 当前库存（件） |\n| balanceFbs | integer | FBS 库存（卖家自发货件数） |\n| frozenStocks | integer | 滞销库存 |\n| warehousesCount | integer | FBO 分仓数 |\n| isFbs | boolean | 是否 FBS 发货 |\n\n**销售与周转**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| salesPerDay | number | 日均销量（件/日） |\n| monthlySalesUnits | integer | 统计期销量（件） |\n| monthlySalesRevenue | number | 统计期销售额 |\n| lostProfit | number | 损失销售额（缺货等造成） |\n| daysInSite | integer | 在售天数（统计期，含缺货日） |\n| daysInStock | integer | 有货天数 |\n| turnoverDays | number | 周转天数（越小越快） |\n\n**排名与占比**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| position | integer | 当前查询维度（本端点为品牌）内排名 |\n| categoryPosition | integer | 品类内排名 |\n| revenueSharePercent | number | 该 SKU 在当前查询维度的销售额占比，0-100 |\n\n## 错误码\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 解析 `products` |\n| 401 | 认证失败 | 检查 `Authorization` |\n| 其他 | 业务异常 | 查看 `errmsg`；常见为 `brandName` 拼写错误、日期越过昨日等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/brandProducts \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"brandName\": \"adidas\",\n    \"sortField\": \"sales\",\n    \"sortDirection\": \"desc\",\n    \"pageSize\": 50,\n    \"filters\": [\n      {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5}\n    ]\n  }'\n```\n\n---\n\n## Feedback API\n\n> 该接口与上方工具接口不同，**请勿混用两个基础 URL**。\n\n- **POST** `https://skill-api.linkfox.com/api/v1/public/feedback`\n- **Content-Type:** `application/json`\n\n```json\n{\n  \"skillName\": \"linkfox-mpstats-ozon-brand-products\",\n  \"sentiment\": \"NEUTRAL\",\n  \"category\": \"SUGGESTION\",\n  \"content\": \"Would like fuzzy brand-name matching.\"\n}\n```\n\n**字段说明：**\n- `skillName`：使用本 skill 的 YAML `name`\n- `sentiment`：`POSITIVE` / `NEUTRAL` / `NEGATIVE`\n- `category`：`BUG` / `COMPLAINT` / `SUGGESTION` / `OTHER`\n- `content`：用户表达、实际现象、为什么算问题或好评\n\nFile v1.0.3:skill-card.md\n\n## Description: <br>\nQueries MPSTATS Ozon Russia brand-product data for an exact brand display name and returns SKU-level sales, revenue, pricing, rating, inventory, turnover, and lost-profit metrics. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[linkfox-ai](https://clawhub.ai/user/linkfox-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal marketplace analysts, e-commerce operators, and developers use this skill to inspect Ozon Russia products under one exact brand name for competitor audits, brand SKU structure analysis, bestseller review, and currency-normalized sales tables. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Credentialed network calls and gateway overrides can send query parameters, session metadata, and marketplace results to a provider-controlled endpoint. <br>\nMitigation: Confirm the API gateway before use, avoid untrusted environment overrides, and only run the skill with LinkFox credentials approved for the data being queried. <br>\nRisk: Full API responses are stored in session-linked local JSON files, which may contain sensitive marketplace analysis or returned product data. <br>\nMitigation: Run the skill from an appropriate workspace, review the saved data path, and manage generated response files according to the sensitivity of the query and results. <br>\nRisk: The feedback behavior can submit observations about skill behavior or user reactions to the provider. <br>\nMitigation: Review feedback submissions before enabling workflows that may include sensitive task context or proprietary analysis details. <br>\nRisk: Exact brand-name matching can produce empty or misleading results when the brand display name is misspelled or ambiguous. <br>\nMitigation: Resolve uncertain brand names with a product search first and disclose pagination, date-window, and currency-conversion limits when presenting results. <br>\n\n\n## Reference(s): <br>\n- [MPSTATS Ozon 品牌商品 API 参考](artifact/references/api.md) <br>\n- [ClawHub skill listing](https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-brand-products) <br>\n- [LinkFox Skills guide](https://skill.linkfox.com/linkfoxskills/guide.htm) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [API Calls, JSON, Files, Markdown, Shell commands, Guidance] <br>\n**Output Format:** [Markdown summaries with JSON responses and saved JSON data files] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Full responses are saved under a session data directory; small responses may also be printed inline, while larger responses are summarized unless inline output is requested.] <br>\n\n## Skill Version(s): <br>\n1.0.3 (source: ClawHub release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.2: 4 files, 13012 bytes\n\nFiles: references/api.md (6535b), scripts/mpstats_ozon_brand_products.py (12831b), SKILL.md (8708b), _meta.json (154b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-brand-products\ndescription: MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPSTATS\"，只要意图是按 Ozon 品牌看该品牌下所有商品及其销量/价格/评分表现，也应触发此技能。\n---\n\n# MPSTATS Ozon Brand Products\n\nThis skill drills into all Ozon (Russia) products sold under a given brand display name, returning each SKU's sales, revenue, price, rating, stock, turnover, lost profit, and more. Built for brand competitor audits, brand SKU structure analysis, and bestseller dissection.\n\n## Core Concepts\n\n**Brand display name**: `brandName` must match what's shown on the Ozon storefront — typically Russian (Cyrillic) or Latin (`adidas`, `Xiaomi`). Do **not** pass a category path, a seller ID, or an internal brand code here. If unsure of the exact spelling, resolve via `mpstats-ozon-product-search` first.\n\n**Filters are AND-combined**: The `filters` array supports multiple numeric conditions ANDed together. Each filter is `{field, op, value, value2?}`. Common fields and operators are in the Filter Reference below.\n\n**Currency & rate**: Default currency is **RUB**. Set `currency: \"USD\"` (or another code) to have monetary fields converted server-side; `currencyRate` lets you override the default rate if desired.\n\n**FBO / FBS mix**: `includeFbs: true` folds FBS (seller-shipped) stock + sales into the numbers; `false` keeps them FBO-only.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| brandName | string | yes | Ozon brand display name (Russian or Latin) |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; latest = yesterday |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; latest = yesterday |\n| page | integer | no | Page number, starts at 1 |\n| pageSize | integer | no | Rows per page, 1-100, default 100 |\n| sortField | string | no | snake_case column: `sales`, `revenue`, `final_price`, `balance`, `rating`, ... |\n| sortDirection | string | no | `asc` or `desc` |\n| currency | string | no | Currency code, default `RUB`; e.g. `USD`, `EUR`, `CNY` |\n| currencyRate | integer | no | Custom rate when non-default currency is used |\n| includeFbs | boolean | no | Include FBS data |\n| filters | array | no | Numeric filter conditions (see below) |\n\n## Filter Reference\n\nEach `filters` entry: `{\"field\": \"<snake_case>\", \"op\": \"<OP>\", \"value\": <num>, \"value2\": <num?>}`.\n\n**Common fields**: `sales` (monthly units), `final_price` (selling price RUB), `rating` (0-5), `comments` (review count), `balance` (stock), `revenue` (sales amount RUB), `days_in_stock`, `turnover_days`, `lost_profit`, `category_position`.\n\n**Operators**: `GTE`, `LTE`, `GT`, `LT`, `EQ`, `NOT_EQ`, `BETWEEN` (requires `value2` as the upper bound).\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/brandProducts`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_brand_products.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗积分；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-mpstats-ozon-brand-products-<timestamp>.json`（`<cwd>` 为脚本执行时的工作目录，在 Claude Code 里即当前项目目录；`<session>` 取自环境变量 `SESSION_ID`，按用户任务自动聚合；**禁止写入 /tmp**，当前目录不可写则报错）\n- 响应体 ≤ 8 KB：落盘后把完整 JSON 打印到 stdout\n- 响应体 > 8 KB：落盘后 stdout 只输出摘要（顶层字段、常见计数如 `total`/`costToken`、最大列表字段的长度 + 前 3 条样本）\n- 加 `--inline` 强制全量打印到 stdout（同样落盘）\n\n**读数据建议**：先看摘要判断是否足够；需要具体字段时优先用 `jq`或`ConvertFrom-Json` 从保存的 json 文件按需抽取，避免整份 JSON 进入上下文。\n## Usage Examples\n\n**1. Top-50 by sales for brand `adidas`**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"sortField\": \"sales\",\n  \"sortDirection\": \"desc\",\n  \"pageSize\": 50\n}\n```\n\n**2. High-rating, mid-price filter**\n```json\n{\n  \"brandName\": \"Xiaomi\",\n  \"filters\": [\n    {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5},\n    {\"field\": \"final_price\", \"op\": \"BETWEEN\", \"value\": 1000, \"value2\": 5000}\n  ],\n  \"sortField\": \"revenue\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n**3. USD-converted output**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"currency\": \"USD\",\n  \"sortField\": \"revenue\"\n}\n```\n\n**4. Include FBS + only in-stock items**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"includeFbs\": true,\n  \"filters\": [{\"field\": \"balance\", \"op\": \"GT\", \"value\": 0}]\n}\n```\n\n**5. Lost-profit hunters (out-of-stock pain)**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"filters\": [{\"field\": \"lost_profit\", \"op\": \"GTE\", \"value\": 100000}],\n  \"sortField\": \"lost_profit\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n## Display Rules\n\n1. **Compact brand table** — key columns: `productId`, `title`, `price`, `monthlySalesUnits`, `monthlySalesRevenue`, `rating`, `reviewCount`, `balance`, `turnoverDays`, `lostProfit`.\n2. **Revenue share context** — `revenueSharePercent` is the SKU's share **within this brand result set**, 0-100; clarify the base when presenting.\n3. **Currency labeling** — always state the currency in the table header; if `currency` was overridden, note \"已按 USD 换算\".\n4. **Russian titles** — preserve original; translate on user request.\n5. **Pagination** — report total and guide the user to next page or narrower filters when total exceeds the returned page.\n6. **No business advice** — present the data; don't project future sales from a snapshot.\n\n## Important Limitations\n\n- **Exact brand-name match** — no fuzzy search; typos return empty results. Verify via `mpstats-ozon-product-search` if unsure.\n- **Page cap** — max 100 rows per page; paginate for larger brands.\n- **Date window** — `endDate` cannot be today or a future date (T-1 data).\n- **Currency conversion** — server-side; historical rates may differ slightly from the user's reference rate.\n- **Russian-only titles** — translate only when asked.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Brand-scoped Ozon product metrics:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Show me adidas's top-selling Ozon SKUs\" | Brand bestseller drill |\n| \"What does Xiaomi sell on Ozon, sorted by revenue\" | Brand revenue structure |\n| \"Which brand-X SKUs have rating ≥4.5 and stock >0\" | Brand quality filter |\n| \"Are brand-X's stockouts causing big lost profit\" | Lost-profit hunter |\n| \"Convert brand-X's Ozon sales to USD\" | Currency-normalized audit |\n\n**Not applicable** — Needs beyond brand drill-down:\n\n- Unknown exact brand name → first use `mpstats-ozon-product-search`\n- Category-level comparison across brands → use `mpstats-ozon-category-products`\n- Seller-scoped analysis → use `mpstats-ozon-seller-products`\n- Single-SKU time-series → use `mpstats-ozon-product-trend`\n- Wildberries / other Russian marketplaces → not covered\n\n**Boundary judgment**: Use this skill when the question centers on **one brand** and you want the per-SKU rollup under it. For \"which brand dominates category X\" use category drill-down and compare brand rows server-side.\n\n**Feedback:**\n\nAuto-detect and report feedback via the Feedback API when any of the following apply:\n1. The functionality or purpose described in this skill does not match actual behavior\n2. The skill's results do not match the user's intent\n3. The user expresses dissatisfaction or praise about this skill\n4. Anything you believe could be improved\n\nCall the feedback API as specified in `references/api.md`. Do not interrupt the user's flow.\n\n---\n*For more high-quality, professional cross-border e-commerce skills, set [LinkFox Skills](https://skill.linkfox.com/).*\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-mpstats-ozon-brand-products\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1783066865631\n}\n\nFile v1.0.2:references/api.md\n\n# MPSTATS Ozon 品牌商品 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_TOOL_GATEWAY}/mpstats/ozon/brandProducts`\n- **请求方式**：POST，Content-Type: application/json\n- **认证方式**：Header `Authorization: <api_key>`，api_key 从环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY` 读取（如未配置，提示用户前往 https://skill.linkfox.com/linkfoxskills/guide.htm 申请）\n\n## 请求参数\n\nPOST Body（JSON）。以下字段与工具网关当前登记的「MPSTATS-Ozon-品牌商品」入参 schema 一致（同步日期 2026-04-30）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| brandName | string | 是 | Ozon 品牌展示名（俄语或拉丁） |\n| startDate | string | 否 | 统计起始日，`YYYY-MM-DD`；最晚昨日 |\n| endDate | string | 否 | 统计结束日，`YYYY-MM-DD`；最晚昨日 |\n| page | integer | 否 | 页码，从 1 开始 |\n| pageSize | integer | 否 | 每页行数，1-100，默认 100 |\n| sortField | string | 否 | 排序列名（snake_case），如 `sales`、`revenue`、`final_price`、`balance`、`rating` |\n| sortDirection | string | 否 | `asc` 升序 / `desc` 降序 |\n| currency | string | 否 | 结果金额货币代码，默认 `RUB`，如 `USD` / `EUR` / `CNY` |\n| currencyRate | integer | 否 | 自定义汇率（配合非默认货币） |\n| includeFbs | boolean | 否 | 是否纳入 FBS 数据 |\n| filters | array | 否 | 数值筛选条件列表，每项 `{field, op, value, value2?}`，多条件 AND |\n\n### filters 字段说明\n\n| 子字段 | 类型 | 必填 | 说明 |\n|--------|------|------|------|\n| field | string | 是 | 列名（snake_case），常用见下 |\n| op | string | 是 | `GTE` / `LTE` / `GT` / `LT` / `EQ` / `NOT_EQ` / `BETWEEN` |\n| value | number | 是 | 主值（`BETWEEN` 时为下界） |\n| value2 | number | `BETWEEN` 必填 | 上界（闭区间） |\n\n**常用 field**：`sales`（月销）、`final_price`（售价 RUB）、`rating`（评分 0-5）、`comments`（评论数）、`balance`（库存）、`revenue`（销售额 RUB）、`days_in_stock`（有货天数）、`turnover_days`（周转天数）、`lost_profit`（损失销售额 RUB）、`category_position`（类目排名）。\n\n## 响应结构\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| code | string | 返回码，`\"200\"` 成功 |\n| msg | string | 消息；成功为 `ok` |\n| total | integer | 品牌下命中商品总数 |\n| products | array | 商品列表（详见下方） |\n| columns | array | 渲染列定义 |\n| costTime | integer | 接口耗时（毫秒） |\n| costToken | integer | 消耗 Token 数量 |\n| type | string | 响应类型 |\n\n### products[*] 商品对象字段（39 个）\n\n按官方 outputSchema 定义（`_mpstats_ozon_brandProducts`，同步日期 2026-05-06）。该 schema 与 `productSearch` / `categoryProducts` / `sellerProducts` **完全共用**；4 个端点只是查询维度不同，返回的商品卡字段集完全一致。\n\n**身份与基础信息**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| brand | string | 品牌 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| category | string | 品类路径（俄语，`/` 分隔） |\n| nicheName | string | 赛道路径（俄语） |\n| nicheId | integer | 赛道 ID |\n| country | string | 销售国，Ozon 恒为 `RU` |\n| firstDate | string | 上架日期（`yyyy-MM-dd`） |\n| imageUrl | string | 主图 URL |\n| productPageUrl | string | 商品页 URL |\n| sourceTool / sourceType | string | 来源工具 / 数据源标识 |\n\n**价格与货币**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| price | number | 当前售价 |\n| oldPrice | number | 折扣前原价 |\n| ozonCardPrice | number | Ozon Card 价 |\n| minPrice / maxPrice / averagePrice | number | 统计期内最低价 / 最高价 / 均价 |\n| currency | string | 币种符号（`₽` / `$` / `€`） |\n\n**评分与评论**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| rating | number | 评分，0-5 |\n| reviewCount | integer | 评论数 |\n\n**库存与 FBS**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| balance | integer | 当前库存（件） |\n| balanceFbs | integer | FBS 库存（卖家自发货件数） |\n| frozenStocks | integer | 滞销库存 |\n| warehousesCount | integer | FBO 分仓数 |\n| isFbs | boolean | 是否 FBS 发货 |\n\n**销售与周转**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| salesPerDay | number | 日均销量（件/日） |\n| monthlySalesUnits | integer | 统计期销量（件） |\n| monthlySalesRevenue | number | 统计期销售额 |\n| lostProfit | number | 损失销售额（缺货等造成） |\n| daysInSite | integer | 在售天数（统计期，含缺货日） |\n| daysInStock | integer | 有货天数 |\n| turnoverDays | number | 周转天数（越小越快） |\n\n**排名与占比**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| position | integer | 当前查询维度（本端点为品牌）内排名 |\n| categoryPosition | integer | 品类内排名 |\n| revenueSharePercent | number | 该 SKU 在当前查询维度的销售额占比，0-100 |\n\n## 错误码\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 解析 `products` |\n| 401 | 认证失败 | 检查 `Authorization` |\n| 其他 | 业务异常 | 查看 `errmsg`；常见为 `brandName` 拼写错误、日期越过昨日等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/brandProducts \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"brandName\": \"adidas\",\n    \"sortField\": \"sales\",\n    \"sortDirection\": \"desc\",\n    \"pageSize\": 50,\n    \"filters\": [\n      {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5}\n    ]\n  }'\n```\n\n---\n\n## Feedback API\n\n> 该接口与上方工具接口不同，**请勿混用两个基础 URL**。\n\n- **POST** `https://skill-api.linkfox.com/api/v1/public/feedback`\n- **Content-Type:** `application/json`\n\n```json\n{\n  \"skillName\": \"linkfox-mpstats-ozon-brand-products\",\n  \"sentiment\": \"NEUTRAL\",\n  \"category\": \"SUGGESTION\",\n  \"content\": \"Would like fuzzy brand-name matching.\"\n}\n```\n\n**字段说明：**\n- `skillName`：使用本 skill 的 YAML `name`\n- `sentiment`：`POSITIVE` / `NEUTRAL` / `NEGATIVE`\n- `category`：`BUG` / `COMPLAINT` / `SUGGESTION` / `OTHER`\n- `content`：用户表达、实际现象、为什么算问题或好评\n\nArchive v1.0.1: 4 files, 12991 bytes\n\nFiles: references/api.md (6536b), scripts/mpstats_ozon_brand_products.py (12833b), SKILL.md (8708b), _meta.json (154b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-brand-products\ndescription: MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPSTATS\"，只要意图是按 Ozon 品牌看该品牌下所有商品及其销量/价格/评分表现，也应触发此技能。\n---\n\n# MPSTATS Ozon Brand Products\n\nThis skill drills into all Ozon (Russia) products sold under a given brand display name, returning each SKU's sales, revenue, price, rating, stock, turnover, lost profit, and more. Built for brand competitor audits, brand SKU structure analysis, and bestseller dissection.\n\n## Core Concepts\n\n**Brand display name**: `brandName` must match what's shown on the Ozon storefront — typically Russian (Cyrillic) or Latin (`adidas`, `Xiaomi`). Do **not** pass a category path, a seller ID, or an internal brand code here. If unsure of the exact spelling, resolve via `mpstats-ozon-product-search` first.\n\n**Filters are AND-combined**: The `filters` array supports multiple numeric conditions ANDed together. Each filter is `{field, op, value, value2?}`. Common fields and operators are in the Filter Reference below.\n\n**Currency & rate**: Default currency is **RUB**. Set `currency: \"USD\"` (or another code) to have monetary fields converted server-side; `currencyRate` lets you override the default rate if desired.\n\n**FBO / FBS mix**: `includeFbs: true` folds FBS (seller-shipped) stock + sales into the numbers; `false` keeps them FBO-only.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| brandName | string | yes | Ozon brand display name (Russian or Latin) |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; latest = yesterday |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; latest = yesterday |\n| page | integer | no | Page number, starts at 1 |\n| pageSize | integer | no | Rows per page, 1-100, default 100 |\n| sortField | string | no | snake_case column: `sales`, `revenue`, `final_price`, `balance`, `rating`, ... |\n| sortDirection | string | no | `asc` or `desc` |\n| currency | string | no | Currency code, default `RUB`; e.g. `USD`, `EUR`, `CNY` |\n| currencyRate | integer | no | Custom rate when non-default currency is used |\n| includeFbs | boolean | no | Include FBS data |\n| filters | array | no | Numeric filter conditions (see below) |\n\n## Filter Reference\n\nEach `filters` entry: `{\"field\": \"<snake_case>\", \"op\": \"<OP>\", \"value\": <num>, \"value2\": <num?>}`.\n\n**Common fields**: `sales` (monthly units), `final_price` (selling price RUB), `rating` (0-5), `comments` (review count), `balance` (stock), `revenue` (sales amount RUB), `days_in_stock`, `turnover_days`, `lost_profit`, `category_position`.\n\n**Operators**: `GTE`, `LTE`, `GT`, `LT`, `EQ`, `NOT_EQ`, `BETWEEN` (requires `value2` as the upper bound).\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/brandProducts`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_brand_products.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗积分；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-mpstats-ozon-brand-products-<timestamp>.json`（`<cwd>` 为脚本执行时的工作目录，在 Claude Code 里即当前项目目录；`<session>` 取自环境变量 `SESSION_ID`，按用户任务自动聚合；**禁止写入 /tmp**，当前目录不可写则报错）\n- 响应体 ≤ 8 KB：落盘后把完整 JSON 打印到 stdout\n- 响应体 > 8 KB：落盘后 stdout 只输出摘要（顶层字段、常见计数如 `total`/`costToken`、最大列表字段的长度 + 前 3 条样本）\n- 加 `--inline` 强制全量打印到 stdout（同样落盘）\n\n**读数据建议**：先看摘要判断是否足够；需要具体字段时优先用 `jq`或`ConvertFrom-Json` 从保存的 json 文件按需抽取，避免整份 JSON 进入上下文。\n## Usage Examples\n\n**1. Top-50 by sales for brand `adidas`**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"sortField\": \"sales\",\n  \"sortDirection\": \"desc\",\n  \"pageSize\": 50\n}\n```\n\n**2. High-rating, mid-price filter**\n```json\n{\n  \"brandName\": \"Xiaomi\",\n  \"filters\": [\n    {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5},\n    {\"field\": \"final_price\", \"op\": \"BETWEEN\", \"value\": 1000, \"value2\": 5000}\n  ],\n  \"sortField\": \"revenue\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n**3. USD-converted output**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"currency\": \"USD\",\n  \"sortField\": \"revenue\"\n}\n```\n\n**4. Include FBS + only in-stock items**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"includeFbs\": true,\n  \"filters\": [{\"field\": \"balance\", \"op\": \"GT\", \"value\": 0}]\n}\n```\n\n**5. Lost-profit hunters (out-of-stock pain)**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"filters\": [{\"field\": \"lost_profit\", \"op\": \"GTE\", \"value\": 100000}],\n  \"sortField\": \"lost_profit\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n## Display Rules\n\n1. **Compact brand table** — key columns: `productId`, `title`, `price`, `monthlySalesUnits`, `monthlySalesRevenue`, `rating`, `reviewCount`, `balance`, `turnoverDays`, `lostProfit`.\n2. **Revenue share context** — `revenueSharePercent` is the SKU's share **within this brand result set**, 0-100; clarify the base when presenting.\n3. **Currency labeling** — always state the currency in the table header; if `currency` was overridden, note \"已按 USD 换算\".\n4. **Russian titles** — preserve original; translate on user request.\n5. **Pagination** — report total and guide the user to next page or narrower filters when total exceeds the returned page.\n6. **No business advice** — present the data; don't project future sales from a snapshot.\n\n## Important Limitations\n\n- **Exact brand-name match** — no fuzzy search; typos return empty results. Verify via `mpstats-ozon-product-search` if unsure.\n- **Page cap** — max 100 rows per page; paginate for larger brands.\n- **Date window** — `endDate` cannot be today or a future date (T-1 data).\n- **Currency conversion** — server-side; historical rates may differ slightly from the user's reference rate.\n- **Russian-only titles** — translate only when asked.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Brand-scoped Ozon product metrics:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Show me adidas's top-selling Ozon SKUs\" | Brand bestseller drill |\n| \"What does Xiaomi sell on Ozon, sorted by revenue\" | Brand revenue structure |\n| \"Which brand-X SKUs have rating ≥4.5 and stock >0\" | Brand quality filter |\n| \"Are brand-X's stockouts causing big lost profit\" | Lost-profit hunter |\n| \"Convert brand-X's Ozon sales to USD\" | Currency-normalized audit |\n\n**Not applicable** — Needs beyond brand drill-down:\n\n- Unknown exact brand name → first use `mpstats-ozon-product-search`\n- Category-level comparison across brands → use `mpstats-ozon-category-products`\n- Seller-scoped analysis → use `mpstats-ozon-seller-products`\n- Single-SKU time-series → use `mpstats-ozon-product-trend`\n- Wildberries / other Russian marketplaces → not covered\n\n**Boundary judgment**: Use this skill when the question centers on **one brand** and you want the per-SKU rollup under it. For \"which brand dominates category X\" use category drill-down and compare brand rows server-side.\n\n**Feedback:**\n\nAuto-detect and report feedback via the Feedback API when any of the following apply:\n1. The functionality or purpose described in this skill does not match actual behavior\n2. The skill's results do not match the user's intent\n3. The user expresses dissatisfaction or praise about this skill\n4. Anything you believe could be improved\n\nCall the feedback API as specified in `references/api.md`. Do not interrupt the user's flow.\n\n---\n*For more high-quality, professional cross-border e-commerce skills, set [LinkFox Skills](https://skill.linkfox.com/).*\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-mpstats-ozon-brand-products\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1783061509051\n}\n\nFile v1.0.1:references/api.md\n\n# MPSTATS Ozon 品牌商品 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_AGENT_API_URL}/mpstats/ozon/brandProducts`\n- **请求方式**：POST，Content-Type: application/json\n- **认证方式**：Header `Authorization: <api_key>`，api_key 从环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY` 读取（如未配置，提示用户前往 https://skill.linkfox.com/linkfoxskills/guide.htm 申请）\n\n## 请求参数\n\nPOST Body（JSON）。以下字段与工具网关当前登记的「MPSTATS-Ozon-品牌商品」入参 schema 一致（同步日期 2026-04-30）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| brandName | string | 是 | Ozon 品牌展示名（俄语或拉丁） |\n| startDate | string | 否 | 统计起始日，`YYYY-MM-DD`；最晚昨日 |\n| endDate | string | 否 | 统计结束日，`YYYY-MM-DD`；最晚昨日 |\n| page | integer | 否 | 页码，从 1 开始 |\n| pageSize | integer | 否 | 每页行数，1-100，默认 100 |\n| sortField | string | 否 | 排序列名（snake_case），如 `sales`、`revenue`、`final_price`、`balance`、`rating` |\n| sortDirection | string | 否 | `asc` 升序 / `desc` 降序 |\n| currency | string | 否 | 结果金额货币代码，默认 `RUB`，如 `USD` / `EUR` / `CNY` |\n| currencyRate | integer | 否 | 自定义汇率（配合非默认货币） |\n| includeFbs | boolean | 否 | 是否纳入 FBS 数据 |\n| filters | array | 否 | 数值筛选条件列表，每项 `{field, op, value, value2?}`，多条件 AND |\n\n### filters 字段说明\n\n| 子字段 | 类型 | 必填 | 说明 |\n|--------|------|------|------|\n| field | string | 是 | 列名（snake_case），常用见下 |\n| op | string | 是 | `GTE` / `LTE` / `GT` / `LT` / `EQ` / `NOT_EQ` / `BETWEEN` |\n| value | number | 是 | 主值（`BETWEEN` 时为下界） |\n| value2 | number | `BETWEEN` 必填 | 上界（闭区间） |\n\n**常用 field**：`sales`（月销）、`final_price`（售价 RUB）、`rating`（评分 0-5）、`comments`（评论数）、`balance`（库存）、`revenue`（销售额 RUB）、`days_in_stock`（有货天数）、`turnover_days`（周转天数）、`lost_profit`（损失销售额 RUB）、`category_position`（类目排名）。\n\n## 响应结构\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| code | string | 返回码，`\"200\"` 成功 |\n| msg | string | 消息；成功为 `ok` |\n| total | integer | 品牌下命中商品总数 |\n| products | array | 商品列表（详见下方） |\n| columns | array | 渲染列定义 |\n| costTime | integer | 接口耗时（毫秒） |\n| costToken | integer | 消耗 Token 数量 |\n| type | string | 响应类型 |\n\n### products[*] 商品对象字段（39 个）\n\n按官方 outputSchema 定义（`_mpstats_ozon_brandProducts`，同步日期 2026-05-06）。该 schema 与 `productSearch` / `categoryProducts` / `sellerProducts` **完全共用**；4 个端点只是查询维度不同，返回的商品卡字段集完全一致。\n\n**身份与基础信息**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| brand | string | 品牌 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| category | string | 品类路径（俄语，`/` 分隔） |\n| nicheName | string | 赛道路径（俄语） |\n| nicheId | integer | 赛道 ID |\n| country | string | 销售国，Ozon 恒为 `RU` |\n| firstDate | string | 上架日期（`yyyy-MM-dd`） |\n| imageUrl | string | 主图 URL |\n| productPageUrl | string | 商品页 URL |\n| sourceTool / sourceType | string | 来源工具 / 数据源标识 |\n\n**价格与货币**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| price | number | 当前售价 |\n| oldPrice | number | 折扣前原价 |\n| ozonCardPrice | number | Ozon Card 价 |\n| minPrice / maxPrice / averagePrice | number | 统计期内最低价 / 最高价 / 均价 |\n| currency | string | 币种符号（`₽` / `$` / `€`） |\n\n**评分与评论**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| rating | number | 评分，0-5 |\n| reviewCount | integer | 评论数 |\n\n**库存与 FBS**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| balance | integer | 当前库存（件） |\n| balanceFbs | integer | FBS 库存（卖家自发货件数） |\n| frozenStocks | integer | 滞销库存 |\n| warehousesCount | integer | FBO 分仓数 |\n| isFbs | boolean | 是否 FBS 发货 |\n\n**销售与周转**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| salesPerDay | number | 日均销量（件/日） |\n| monthlySalesUnits | integer | 统计期销量（件） |\n| monthlySalesRevenue | number | 统计期销售额 |\n| lostProfit | number | 损失销售额（缺货等造成） |\n| daysInSite | integer | 在售天数（统计期，含缺货日） |\n| daysInStock | integer | 有货天数 |\n| turnoverDays | number | 周转天数（越小越快） |\n\n**排名与占比**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| position | integer | 当前查询维度（本端点为品牌）内排名 |\n| categoryPosition | integer | 品类内排名 |\n| revenueSharePercent | number | 该 SKU 在当前查询维度的销售额占比，0-100 |\n\n## 错误码\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 解析 `products` |\n| 401 | 认证失败 | 检查 `Authorization` |\n| 其他 | 业务异常 | 查看 `errmsg`；常见为 `brandName` 拼写错误、日期越过昨日等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/brandProducts \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"brandName\": \"adidas\",\n    \"sortField\": \"sales\",\n    \"sortDirection\": \"desc\",\n    \"pageSize\": 50,\n    \"filters\": [\n      {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5}\n    ]\n  }'\n```\n\n---\n\n## Feedback API\n\n> 该接口与上方工具接口不同，**请勿混用两个基础 URL**。\n\n- **POST** `https://skill-api.linkfox.com/api/v1/public/feedback`\n- **Content-Type:** `application/json`\n\n```json\n{\n  \"skillName\": \"linkfox-mpstats-ozon-brand-products\",\n  \"sentiment\": \"NEUTRAL\",\n  \"category\": \"SUGGESTION\",\n  \"content\": \"Would like fuzzy brand-name matching.\"\n}\n```\n\n**字段说明：**\n- `skillName`：使用本 skill 的 YAML `name`\n- `sentiment`：`POSITIVE` / `NEUTRAL` / `NEGATIVE`\n- `category`：`BUG` / `COMPLAINT` / `SUGGESTION` / `OTHER`\n- `content`：用户表达、实际现象、为什么算问题或好评\n\nArchive v1.0.0: 5 files, 10399 bytes\n\nFiles: references/api.md (6528b), scripts/mpstats_ozon_brand_products.py (3418b), skill-card.md (2809b), SKILL.md (7637b), _meta.json (154b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-brand-products\nversion: 1.0.0\ncategory: product-sourcing\ndescription: MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPSTATS\"，只要意图是按 Ozon 品牌看该品牌下所有商品及其销量/价格/评分表现，也应触发此技能。\n---\n\n# MPSTATS Ozon Brand Products\n\nThis skill drills into all Ozon (Russia) products sold under a given brand display name, returning each SKU's sales, revenue, price, rating, stock, turnover, lost profit, and more. Built for brand competitor audits, brand SKU structure analysis, and bestseller dissection.\n\n## Core Concepts\n\n**Brand display name**: `brandName` must match what's shown on the Ozon storefront — typically Russian (Cyrillic) or Latin (`adidas`, `Xiaomi`). Do **not** pass a category path, a seller ID, or an internal brand code here. If unsure of the exact spelling, resolve via `mpstats-ozon-product-search` first.\n\n**Filters are AND-combined**: The `filters` array supports multiple numeric conditions ANDed together. Each filter is `{field, op, value, value2?}`. Common fields and operators are in the Filter Reference below.\n\n**Currency & rate**: Default currency is **RUB**. Set `currency: \"USD\"` (or another code) to have monetary fields converted server-side; `currencyRate` lets you override the default rate if desired.\n\n**FBO / FBS mix**: `includeFbs: true` folds FBS (seller-shipped) stock + sales into the numbers; `false` keeps them FBO-only.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| brandName | string | yes | Ozon brand display name (Russian or Latin) |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; latest = yesterday |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; latest = yesterday |\n| page | integer | no | Page number, starts at 1 |\n| pageSize | integer | no | Rows per page, 1-100, default 100 |\n| sortField | string | no | snake_case column: `sales`, `revenue`, `final_price`, `balance`, `rating`, ... |\n| sortDirection | string | no | `asc` or `desc` |\n| currency | string | no | Currency code, default `RUB`; e.g. `USD`, `EUR`, `CNY` |\n| currencyRate | integer | no | Custom rate when non-default currency is used |\n| includeFbs | boolean | no | Include FBS data |\n| filters | array | no | Numeric filter conditions (see below) |\n\n## Filter Reference\n\nEach `filters` entry: `{\"field\": \"<snake_case>\", \"op\": \"<OP>\", \"value\": <num>, \"value2\": <num?>}`.\n\n**Common fields**: `sales` (monthly units), `final_price` (selling price RUB), `rating` (0-5), `comments` (review count), `balance` (stock), `revenue` (sales amount RUB), `days_in_stock`, `turnover_days`, `lost_profit`, `category_position`.\n\n**Operators**: `GTE`, `LTE`, `GT`, `LT`, `EQ`, `NOT_EQ`, `BETWEEN` (requires `value2` as the upper bound).\n\n## API Usage\n\nThis tool calls the LinkFox tool gateway API. See `references/api.md` for calling conventions, request parameters, response structure, and error codes. You can also execute `scripts/mpstats_ozon_brand_products.py` directly for ad-hoc queries.\n\n## Usage Examples\n\n**1. Top-50 by sales for brand `adidas`**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"sortField\": \"sales\",\n  \"sortDirection\": \"desc\",\n  \"pageSize\": 50\n}\n```\n\n**2. High-rating, mid-price filter**\n```json\n{\n  \"brandName\": \"Xiaomi\",\n  \"filters\": [\n    {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5},\n    {\"field\": \"final_price\", \"op\": \"BETWEEN\", \"value\": 1000, \"value2\": 5000}\n  ],\n  \"sortField\": \"revenue\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n**3. USD-converted output**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"currency\": \"USD\",\n  \"sortField\": \"revenue\"\n}\n```\n\n**4. Include FBS + only in-stock items**\n```json\n{\n  \"brandName\": \"adidas\",\n  \"includeFbs\": true,\n  \"filters\": [{\"field\": \"balance\", \"op\": \"GT\", \"value\": 0}]\n}\n```\n\n**5. Lost-profit hunters (out-of-stock pain)**\n```json\n{\n  \"brandName\": \"Nike\",\n  \"filters\": [{\"field\": \"lost_profit\", \"op\": \"GTE\", \"value\": 100000}],\n  \"sortField\": \"lost_profit\",\n  \"sortDirection\": \"desc\"\n}\n```\n\n## Display Rules\n\n1. **Compact brand table** — key columns: `productId`, `title`, `price`, `monthlySalesUnits`, `monthlySalesRevenue`, `rating`, `reviewCount`, `balance`, `turnoverDays`, `lostProfit`.\n2. **Revenue share context** — `revenueSharePercent` is the SKU's share **within this brand result set**, 0-100; clarify the base when presenting.\n3. **Currency labeling** — always state the currency in the table header; if `currency` was overridden, note \"已按 USD 换算\".\n4. **Russian titles** — preserve original; translate on user request.\n5. **Pagination** — report total and guide the user to next page or narrower filters when total exceeds the returned page.\n6. **No business advice** — present the data; don't project future sales from a snapshot.\n\n## Important Limitations\n\n- **Exact brand-name match** — no fuzzy search; typos return empty results. Verify via `mpstats-ozon-product-search` if unsure.\n- **Page cap** — max 100 rows per page; paginate for larger brands.\n- **Date window** — `endDate` cannot be today or a future date (T-1 data).\n- **Currency conversion** — server-side; historical rates may differ slightly from the user's reference rate.\n- **Russian-only titles** — translate only when asked.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Brand-scoped Ozon product metrics:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Show me adidas's top-selling Ozon SKUs\" | Brand bestseller drill |\n| \"What does Xiaomi sell on Ozon, sorted by revenue\" | Brand revenue structure |\n| \"Which brand-X SKUs have rating ≥4.5 and stock >0\" | Brand quality filter |\n| \"Are brand-X's stockouts causing big lost profit\" | Lost-profit hunter |\n| \"Convert brand-X's Ozon sales to USD\" | Currency-normalized audit |\n\n**Not applicable** — Needs beyond brand drill-down:\n\n- Unknown exact brand name → first use `mpstats-ozon-product-search`\n- Category-level comparison across brands → use `mpstats-ozon-category-products`\n- Seller-scoped analysis → use `mpstats-ozon-seller-products`\n- Single-SKU time-series → use `mpstats-ozon-product-trend`\n- Wildberries / other Russian marketplaces → not covered\n\n**Boundary judgment**: Use this skill when the question centers on **one brand** and you want the per-SKU rollup under it. For \"which brand dominates category X\" use category drill-down and compare brand rows server-side.\n\n**Feedback:**\n\nAuto-detect and report feedback via the Feedback API when any of the following apply:\n1. The functionality or purpose described in this skill does not match actual behavior\n2. The skill's results do not match the user's intent\n3. The user expresses dissatisfaction or praise about this skill\n4. Anything you believe could be improved\n\nCall the feedback API as specified in `references/api.md`. Do not interrupt the user's flow.\n\n---\n*For more high-quality, professional cross-border e-commerce skills, set [LinkFox Skills](https://skill.linkfox.com/).*\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-mpstats-ozon-brand-products\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1778045996247\n}\n\nFile v1.0.0:references/api.md\n\n# MPSTATS Ozon 品牌商品 API 参考\n\n## 调用规范\n\n- **请求地址**：`https://tool-gateway.linkfox.com/mpstats/ozon/brandProducts`\n- **请求方式**：POST，Content-Type: application/json\n- **认证方式**：Header `Authorization: <api_key>`，api_key 从环境变量 `LINKFOXAGENT_API_KEY` 读取（如未配置，提示用户前往 https://yxgb3sicy7.feishu.cn/wiki/GIkkweGghiyzkqkRXQKc2n0Tnre 申请）\n\n## 请求参数\n\nPOST Body（JSON）。以下字段与工具网关当前登记的「MPSTATS-Ozon-品牌商品」入参 schema 一致（同步日期 2026-04-30）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| brandName | string | 是 | Ozon 品牌展示名（俄语或拉丁） |\n| startDate | string | 否 | 统计起始日，`YYYY-MM-DD`；最晚昨日 |\n| endDate | string | 否 | 统计结束日，`YYYY-MM-DD`；最晚昨日 |\n| page | integer | 否 | 页码，从 1 开始 |\n| pageSize | integer | 否 | 每页行数，1-100，默认 100 |\n| sortField | string | 否 | 排序列名（snake_case），如 `sales`、`revenue`、`final_price`、`balance`、`rating` |\n| sortDirection | string | 否 | `asc` 升序 / `desc` 降序 |\n| currency | string | 否 | 结果金额货币代码，默认 `RUB`，如 `USD` / `EUR` / `CNY` |\n| currencyRate | integer | 否 | 自定义汇率（配合非默认货币） |\n| includeFbs | boolean | 否 | 是否纳入 FBS 数据 |\n| filters | array | 否 | 数值筛选条件列表，每项 `{field, op, value, value2?}`，多条件 AND |\n\n### filters 字段说明\n\n| 子字段 | 类型 | 必填 | 说明 |\n|--------|------|------|------|\n| field | string | 是 | 列名（snake_case），常用见下 |\n| op | string | 是 | `GTE` / `LTE` / `GT` / `LT` / `EQ` / `NOT_EQ` / `BETWEEN` |\n| value | number | 是 | 主值（`BETWEEN` 时为下界） |\n| value2 | number | `BETWEEN` 必填 | 上界（闭区间） |\n\n**常用 field**：`sales`（月销）、`final_price`（售价 RUB）、`rating`（评分 0-5）、`comments`（评论数）、`balance`（库存）、`revenue`（销售额 RUB）、`days_in_stock`（有货天数）、`turnover_days`（周转天数）、`lost_profit`（损失销售额 RUB）、`category_position`（类目排名）。\n\n## 响应结构\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| code | string | 返回码，`\"200\"` 成功 |\n| msg | string | 消息；成功为 `ok` |\n| total | integer | 品牌下命中商品总数 |\n| products | array | 商品列表（详见下方） |\n| columns | array | 渲染列定义 |\n| costTime | integer | 接口耗时（毫秒） |\n| costToken | integer | 消耗 Token 数量 |\n| type | string | 响应类型 |\n\n### products[*] 商品对象字段（39 个）\n\n按官方 outputSchema 定义（`_mpstats_ozon_brandProducts`，同步日期 2026-05-06）。该 schema 与 `productSearch` / `categoryProducts` / `sellerProducts` **完全共用**；4 个端点只是查询维度不同，返回的商品卡字段集完全一致。\n\n**身份与基础信息**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| brand | string | 品牌 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| category | string | 品类路径（俄语，`/` 分隔） |\n| nicheName | string | 赛道路径（俄语） |\n| nicheId | integer | 赛道 ID |\n| country | string | 销售国，Ozon 恒为 `RU` |\n| firstDate | string | 上架日期（`yyyy-MM-dd`） |\n| imageUrl | string | 主图 URL |\n| productPageUrl | string | 商品页 URL |\n| sourceTool / sourceType | string | 来源工具 / 数据源标识 |\n\n**价格与货币**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| price | number | 当前售价 |\n| oldPrice | number | 折扣前原价 |\n| ozonCardPrice | number | Ozon Card 价 |\n| minPrice / maxPrice / averagePrice | number | 统计期内最低价 / 最高价 / 均价 |\n| currency | string | 币种符号（`₽` / `$` / `€`） |\n\n**评分与评论**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| rating | number | 评分，0-5 |\n| reviewCount | integer | 评论数 |\n\n**库存与 FBS**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| balance | integer | 当前库存（件） |\n| balanceFbs | integer | FBS 库存（卖家自发货件数） |\n| frozenStocks | integer | 滞销库存 |\n| warehousesCount | integer | FBO 分仓数 |\n| isFbs | boolean | 是否 FBS 发货 |\n\n**销售与周转**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| salesPerDay | number | 日均销量（件/日） |\n| monthlySalesUnits | integer | 统计期销量（件） |\n| monthlySalesRevenue | number | 统计期销售额 |\n| lostProfit | number | 损失销售额（缺货等造成） |\n| daysInSite | integer | 在售天数（统计期，含缺货日） |\n| daysInStock | integer | 有货天数 |\n| turnoverDays | number | 周转天数（越小越快） |\n\n**排名与占比**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| position | integer | 当前查询维度（本端点为品牌）内排名 |\n| categoryPosition | integer | 品类内排名 |\n| revenueSharePercent | number | 该 SKU 在当前查询维度的销售额占比，0-100 |\n\n## 错误码\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 解析 `products` |\n| 401 | 认证失败 | 检查 `Authorization` |\n| 其他 | 业务异常 | 查看 `errmsg`；常见为 `brandName` 拼写错误、日期越过昨日等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/brandProducts \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"brandName\": \"adidas\",\n    \"sortField\": \"sales\",\n    \"sortDirection\": \"desc\",\n    \"pageSize\": 50,\n    \"filters\": [\n      {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5}\n    ]\n  }'\n```\n\n---\n\n## Feedback API\n\n> 该接口与上方工具接口不同，**请勿混用两个基础 URL**。\n\n- **POST** `https://skill-api.linkfox.com/api/v1/public/feedback`\n- **Content-Type:** `application/json`\n\n```json\n{\n  \"skillName\": \"linkfox-mpstats-ozon-brand-products\",\n  \"sentiment\": \"NEUTRAL\",\n  \"category\": \"SUGGESTION\",\n  \"content\": \"Would like fuzzy brand-name matching.\"\n}\n```\n\n**字段说明：**\n- `skillName`：使用本 skill 的 YAML `name`\n- `sentiment`：`POSITIVE` / `NEUTRAL` / `NEGATIVE`\n- `category`：`BUG` / `COMPLAINT` / `SUGGESTION` / `OTHER`\n- `content`：用户表达、实际现象、为什么算问题或好评\n\nFile v1.0.0:skill-card.md\n\n## Description: <br>\nRetrieves Ozon Russia products for an exact brand display name and returns per-SKU sales, revenue, price, rating, inventory, turnover, lost-profit, sorting, filtering, and currency-conversion data. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[linkfox-ai](https://clawhub.ai/user/linkfox-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal sellers, marketplace analysts, and e-commerce operators use this skill to inspect one Ozon brand's SKU structure, bestseller list, revenue mix, pricing, ratings, stock, turnover, and stockout-related lost profit. It is intended for brand benchmarking, competitor analysis, and product-level marketplace research. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill requires a LinkFox API key, which is sensitive credential material. <br>\nMitigation: Store the key only in the LINKFOXAGENT_API_KEY environment variable, use a scoped or dedicated key when available, and avoid exposing it in prompts, logs, screenshots, or shared command history. <br>\nRisk: Ozon brand research queries are sent to LinkFox's tool gateway. <br>\nMitigation: Use the skill only when LinkFox's data handling is acceptable for the query, and avoid submitting confidential business research unless that sharing is approved. <br>\nRisk: Exact brand-name matching and T-1 date limits can produce empty or misleading snapshots when the brand spelling or date window is wrong. <br>\nMitigation: Verify the Ozon brand display name before querying, keep endDate no later than yesterday, and present results as a snapshot instead of a sales forecast. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/linkfox-ai/linkfox-mpstats-ozon-brand-products) <br>\n- [MPSTATS Ozon brand products API reference](references/api.md) <br>\n- [LinkFox MPSTATS Ozon brand products endpoint](https://tool-gateway.linkfox.com/mpstats/ozon/brandProducts) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with JSON request examples, tabular result guidance, and optional command-line JSON output] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires LINKFOXAGENT_API_KEY and sends read-only Ozon brand research queries to the LinkFox tool gateway.] <br>\n\n## Skill Version(s): <br>\n1.0.0 (source: frontmatter and server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>","readmeExcerpt":"Skill: MPSTATS-Ozon品牌商品查询 Owner: linkfox-ai Summary: MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPST","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n  \"brandName\": \"adidas\",\n  \"sortField\": \"sales\",\n  \"sortDirection\": \"desc\",\n  \"pageSize\": 50\n}"},{"language":"json","snippet":"{\n  \"brandName\": \"Xiaomi\",\n  \"filters\": [\n    {\"field\": \"rating\", \"op\": \"GTE\", \"value\": 4.5},\n    {\"field\": \"final_price\", \"op\": \"BETWEEN\", \"value\": 1000, \"value2\": 5000}\n  ],\n  \"sortField\": \"revenue\",\n  \"sortDirection\": \"desc\"\n}"},{"language":"json","snippet":"{\n  \"brandName\": \"Nike\",\n  \"currency\": \"USD\",\n  \"sortField\": \"revenue\"\n}"},{"language":"json","snippet":"{\n  \"brandName\": \"adidas\",\n  \"includeFbs\": true,\n  \"filters\": [{\"field\": \"balance\", \"op\": \"GT\", \"value\": 0}]\n}"},{"language":"json","snippet":"{\n  \"brandName\": \"Nike\",\n  \"filters\": [{\"field\": \"lost_profit\", \"op\": \"GTE\", \"value\": 100000}],\n  \"sortField\": \"lost_profit\",\n  \"sortDirection\": \"desc\"\n}"},{"language":"bash","snippet":"curl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/brandProducts \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: linkfox-mpstats-ozon-brand-products\ndescription: MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPSTATS\"，只要意图是按 Ozon 品牌看该品牌下所有商品及其销量/价格/评分表现，也应触发此技能。\n---\n\n# MPSTATS Ozon Brand Products\n\nThis skill drills into all Ozon (Russia) products sold under a given brand display name, returning each SKU's sales, revenue, price, rating, stock, turnover, lost profit, and more. Built for brand competitor audits, brand SKU structure analysis, and bestseller dissection.\n\n## Core Concepts\n\n**Brand display name**: `brandName` must match what's shown on the Ozon storefront — typically Russian (Cyrillic) or Latin (`adidas`, `Xiaomi`). Do **not** pass a category path, a seller ID, or an internal brand code here. If unsure of the exact spelling, resolve via `mpstats-ozon-product-search` first.\n\n**Filters are AND-combined**: The `filters` array supports multiple numeric conditions ANDed together. Each filter is `{field, op, value, value2?}`. Common fields and operators are in the Filter Reference below.\n\n**Currency & rate**: Default currency is **RUB**. Set `currency: \"USD\"` (or another code) to have monetary fields converted server-side; `currencyRate` lets you override the default rate if desired.\n\n**FBO / FBS mix**: `includeFbs: true` folds FBS (seller-shipped) stock + sales into the numbers; `false` keeps them FBO-only.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| brandName | string | yes | Ozon brand display name (Russian or Latin) |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; latest = yesterday |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; latest = yesterday |\n| page | integer | no | Page number, starts at 1 |\n| pageSize | integer | no | Rows per page, 1-100, default 100 |\n| sortField | string | no | snake_case column: `sales`, `revenue`, `final_price`, `balance`, `rating`, ... |\n| sortDirection | string | no | `asc` or `desc` |\n| currency | string | no | Currency code, default `RUB`; e.g. `USD`, `EUR`, `CNY` |\n| currencyRate | integer | no | Custom rate when non-default currency is used |\n| includeFbs | boolean | no | Include FBS data |\n| filters | array | no | Numeric filter conditions (see below) |\n\n## Filter Reference\n\nEach `filters` entry: `{\"field\": \"<snake_case>\", \"op\": \"<OP>\", \"value\": <num>, \"value2\": <num?>}`.\n\n**Common fields**: `sales` (monthly units), `final_price` (selling price RUB), `rating` (0-5), `comments` (review count), `balance` (stock), `revenue` (sales amount RUB), `days_in_stock`, `turnover_days`, `lost_profit`, `category_position`.\n\n**Operators**: `GTE`, `LTE`, `GT`, `LT`, `EQ`, `NOT_EQ`, `BETWEEN` (requires `value2` as th"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-mpstats-ozon-brand-products\",\n  \"version\": \"1.0.7\",\n  \"publishedAt\": 1789363326374\n}"},{"path":"references/api.md","content":"# MPSTATS Ozon 品牌商品 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_TOOL_GATEWAY}/mpstats/ozon/brandProducts`\n- **请求方式**：POST，Content-Type: application/json\n- **认证方式**：Header `Authorization: <api_key>`，api_key 从环境变量 `LINKFOX_AGENT_API_KEY` 或 `LINKFOXAGENT_API_KEY` 读取（如未配置 按 SKILL.md 的 **## 解决认证和算力问题** 处理）\n\n## 请求参数\n\nPOST Body（JSON）。以下字段与工具网关当前登记的「MPSTATS-Ozon-品牌商品」入参 schema 一致（同步日期 2026-04-30）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| brandName | string | 是 | Ozon 品牌展示名（俄语或拉丁） |\n| startDate | string | 否 | 统计起始日，`YYYY-MM-DD`；最晚昨日 |\n| endDate | string | 否 | 统计结束日，`YYYY-MM-DD`；最晚昨日 |\n| page | integer | 否 | 页码，从 1 开始 |\n| pageSize | integer | 否 | 每页行数，1-100，默认 100 |\n| sortField | string | 否 | 排序列名（snake_case），如 `sales`、`revenue`、`final_price`、`balance`、`rating` |\n| sortDirection | string | 否 | `asc` 升序 / `desc` 降序 |\n| currency | string | 否 | 结果金额货币代码，默认 `RUB`，如 `USD` / `EUR` / `CNY` |\n| currencyRate | integer | 否 | 自定义汇率（配合非默认货币） |\n| includeFbs | boolean | 否 | 是否纳入 FBS 数据 |\n| filters | array | 否 | 数值筛选条件列表，每项 `{field, op, value, value2?}`，多条件 AND |\n\n### filters 字段说明\n\n| 子字段 | 类型 | 必填 | 说明 |\n|--------|------|------|------|\n| field | string | 是 | 列名（snake_case），常用见下 |\n| op | string | 是 | `GTE` / `LTE` / `GT` / `LT` / `EQ` / `NOT_EQ` / `BETWEEN` |\n| value | number | 是 | 主值（`BETWEEN` 时为下界） |\n| value2 | number | `BETWEEN` 必填 | 上界（闭区间） |\n\n**常用 field**：`sales`（月销）、`final_price`（售价 RUB）、`rating`（评分 0-5）、`comments`（评论数）、`balance`（库存）、`revenue`（销售额 RUB）、`days_in_stock`（有货天数）、`turnover_days`（周转天数）、`lost_profit`（损失销售额 RUB）、`category_position`（类目排名）。\n\n## 响应结构\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| code | string | 返回码，`\"200\"` 成功 |\n| msg | string | 消息；成功为 `ok` |\n| total | integer | 品牌下命中商品总数 |\n| products | array | 商品列表（详见下方） |\n| columns | array | 渲染列定义 |\n| costTime | integer | 接口耗时（毫秒） |\n| costToken | integer | 消耗 Token 数量 |\n| type | string | 响应类型 |\n\n### products[*] 商品对象字段（39 个）\n\n按官方 outputSchema 定义（`_mpstats_ozon_brandProducts`，同步日期 2026-05-06）。该 schema 与 `productSearch` / `categoryProducts` / `sellerProducts` **完全共用**；4 个端点只是查询维度不同，返回的商品卡字段集完全一致。\n\n**身份与基础信息**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| brand | string | 品牌 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| category | string | 品类路径（俄语，`/` 分隔） |\n| nicheName | string | 赛道路径（俄语） |\n| nicheId | integer | 赛道 ID |\n| country | string | 销售国，Ozon 恒为 `RU` |\n| firstDate | string | 上架日期（`yyyy-MM-dd`） |\n| imageUrl | string | 主图 URL |\n| productPageUrl | string | 商品页 URL |\n| sourceTool / sourceType | string | 来源工具 / 数据源标识 |\n\n**价格与货币**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| price | number | 当前售价 |\n| oldPrice | number | 折扣前原价 |\n| ozonCardPrice | number | Ozon Card 价 |\n| minPrice / maxPrice / averagePrice | number | 统计期内最低价 / 最高价 / 均价 |\n| currency | string | 币种符号（`₽` / `$` / `€`） |\n\n**评分与评论**\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| rating | number | 评分，0-5 |\n| reviewCount | integer | 评论数 |\n\n**库存与 FBS"},{"path":"references/onboarding.md","content":"# 解决认证和算力问题\n\n调用本 skill 时若网关返回 **auth** 或 **billing** 错误，走本 skill 自带的 `scripts/onboarding.py` 完成引导。\n\n**auth 场景**：`errcode=401` 或消息含 `authorized error`/`鉴权失败`/`未授权`/`unauthorized`；或 `LINKFOX_AGENT_API_KEY` 与 `LINKFOXAGENT_API_KEY` 均为空。\n1. 若已配置 key → 先让用户重启会话（最常见误判），仍失败让用户重新取 key 或换手机号重注册\n2. 未配置 → 询问：自助去 https://agent.linkfox.com/ 取 key，或提供手机号让脚本注册\n3. 手机号路径：\n   - `python scripts/onboarding.py send-code <phone>` → 展示 JSON 里的 phone/agreements\n   - 收到验证码后：`python scripts/onboarding.py login <phone> <code>`\n   - 拿到 `api_key` 后把下面三平台配置转发给用户，提示重启会话生效：\n     - Windows PowerShell（永久）：`setx LINKFOX_AGENT_API_KEY \"<key>\"`\n     - macOS zsh：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.zshrc && source ~/.zshrc`\n     - Linux bash：`echo 'export LINKFOX_AGENT_API_KEY=\"<key>\"' >> ~/.bashrc && source ~/.bashrc`\n     - 变量名 `LINKFOX_AGENT_API_KEY`（主推）或 `LINKFOXAGENT_API_KEY`（老规范）任一即可\n\n**billing 场景**：`errcode=402` 或消息含 `算力/余额/quota/insufficient/充值/套餐到期`。\n- `python scripts/onboarding.py list-plans` → 有 AskUserQuestion 就弹菜单，否则输出编号清单让用户选\n- 校验 `plan_id` ∈ 清单、支付方式 ∈ 该套餐 `available_methods`（通常 `wechat/alipay`）\n- `python scripts/onboarding.py order <plan_id> <method>` → 展示优先级 PNG > `pay_url` > `ascii_qr`（标注兜底）\n- 已付款可选调 `python scripts/onboarding.py query <order_id>`，不主动轮询\n\n排除 `errcode=403`（无权限，不归入这两类）。所有子命令输出 stdout JSON，`error` 字段已含阶段前缀，透传给用户即可。完整用法：`python scripts/onboarding.py --help`。"},{"path":"skill-card.md","content":"## Description:\n\nQueries MPSTATS data for Ozon Russia products under an exact brand display name, returning SKU-level sales, revenue, price, rating, stock, turnover, lost-sales, and related metrics with filters, sorting, pagination, and currency conversion.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[linkfox-ai](https://clawhub.ai/user/linkfox-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal marketplace analysts, e-commerce operators, and agents use this skill to retrieve brand-scoped Ozon SKU metrics for competitor audits, SKU structure analysis, bestseller review, stockout checks, and currency-normalized reporting.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Ozon brand queries, API keys, account credentials, and returned analytics can be sent to LinkFox services and analytics responses are stored locally.\n\nMitigation: Use only approved data, keep API keys in secure secret storage, and restrict access to the linkfox output directory.\n\nRisk: The onboarding flow can handle account registration and paid credit purchases.\n\nMitigation: Review onboarding commands before execution and confirm any credit purchase with the user before ordering.\n\nRisk: Endpoint override environment variables can redirect API and account traffic.\n\nMitigation: Avoid override variables unless the runtime is controlled, and verify the environment before using credentials.\n\nRisk: Automatic feedback reporting may send usage feedback to LinkFox.\n\nMitigation: Review feedback payloads and organizational policy before enabling or relying on automatic reporting.\n\n## Reference(s):\n\n- [MPSTATS Ozon Brand Products API Reference](references/api.md)\n- [Authentication and Credit Onboarding](references/onboarding.md)\n- [ClawHub Skill Page](https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-brand-products)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, JSON, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown summaries and tables, JSON API responses, and local JSON files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Full responses are saved under a linkfox session directory; large responses are summarized unless inline output is requested.]\n\n## Skill Version(s):\n\n1.0.7 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPSTATS\"，只要意图是按 Ozon 品牌看该品牌下所有商品及其销量/价格/评分表现，也应触发此技能。 Skill: MPSTATS-Ozon品牌商品查询 Owner: linkfox-ai Summary: MPSTATS Ozon 俄罗斯站按品牌下钻商品列表。按 Ozon 品牌展示名（俄语/拉丁）返回该品牌下全部商品的销量、销售额、价格、评分、库存、周转、损失销售额等完整指标，支持多维数值筛选、排序、货币换算。用于品牌对标、竞品分析、品牌商品结构研究、ASIN 级（productId 级）爆款拆解。当用户提到 Ozon 品牌下钻、Ozon 品牌商品、Ozon 竞品品牌分析、品牌结构、品牌 SKU、品牌爆款、Ozon 品牌销售、MPSTATS brand, Ozon brand products, brand drill-down, brand competitor analysis, Russian marketplace brand SKUs, brand revenue share 时触发此技能。即使用户未明确说\"MPST","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1452,"uniquenessScore":48,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T10:08:51.325Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T10:08:51.325Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T13:33:33.632Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}