{"id":"8d78519d-1f8c-40bc-aed0-83ec4f6c4a3e","entityType":"agent","slug":"clawhub-linkfox-ai-linkfox-mpstats-ozon-product-search","name":"MPSTATS-Ozon商品搜索","canonicalUrl":"https://www.xpersona.co/agent/clawhub-linkfox-ai-linkfox-mpstats-ozon-product-search","canonicalPath":"/agent/clawhub-linkfox-ai-linkfox-mpstats-ozon-product-search","generatedAt":"2026-10-10T10:49:07.253Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T06:21:27.715Z","emptyReason":null},"description":"MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词或 SKU 发现或反查商品，也应触发此技能。 Skill: MPSTATS-Ozon商品搜索 Owner: linkfox-ai Summary: MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词或 SKU 发现或反查商品，也应触发此技能。 Tags: latest:1.0.8 Version history: v1.","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.6K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s171g8b6m2khwdy9ye8bxj0wx183vd4z:linkfox-mpstats-ozon-product-search","sourceUrl":"https://clawhub.ai/linkfox-ai/linkfox-mpstats-ozon-product-search","homepage":"https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-product-search","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/linkfox-ai/linkfox-mpstats-ozon-product-search","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-product-search","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTAT"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T06:21:27.715Z","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-10T06:21:27.715Z","emptyReason":null},"stars":null,"forks":null,"downloads":1623,"packageName":null,"latestVersion":"1.0.8","tractionLabel":"1.6K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T06:21:27.715Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T06:21:27.715Z","lastCrawledAt":"2026-10-10T06:21:27.715Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T06:21:27.715Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.8","createdAt":"2026-09-14T05:22:25.324Z","changelog":"Update from 1.0.7 to 1.0.8","fileCount":7,"zipByteSize":23337},{"version":"1.0.7","createdAt":"2026-08-14T14:57:37.389Z","changelog":"Update from 1.0.6 to 1.0.7","fileCount":7,"zipByteSize":23617},{"version":"1.0.6","createdAt":"2026-08-07T10:53:32.606Z","changelog":"Update from 1.0.5 to 1.0.6","fileCount":7,"zipByteSize":23695},{"version":"1.0.5","createdAt":"2026-07-13T12:14:07.997Z","changelog":"Update from 1.0.4 to 1.0.5","fileCount":5,"zipByteSize":14569},{"version":"1.0.4","createdAt":"2026-07-06T11:22:54.625Z","changelog":"Update from 1.0.3 to 1.0.4","fileCount":5,"zipByteSize":13568},{"version":"1.0.3","createdAt":"2026-07-03T08:21:31.219Z","changelog":"Update from 1.0.2 to 1.0.3","fileCount":4,"zipByteSize":12402},{"version":"1.0.2","createdAt":"2026-07-03T06:52:16.798Z","changelog":"Update from 1.0.1 to 1.0.2","fileCount":4,"zipByteSize":12383},{"version":"1.0.1","createdAt":"2026-05-14T12:34:27.261Z","changelog":"Update from 1.0.0 to 1.0.1","fileCount":5,"zipByteSize":9521}]},"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-product-search","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-product-search/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-product-search/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-product-search/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-product-search/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-product-search/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-product-search/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-10T10:49:07.249Z"}},"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-product-search/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-product-search/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-product-search/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-linkfox-ai-linkfox-mpstats-ozon-product-search/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-10T06:21:27.715Z","emptyReason":null},"readme":"Skill: MPSTATS-Ozon商品搜索\n\nOwner: linkfox-ai\n\nSummary: MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词或 SKU 发现或反查商品，也应触发此技能。\n\nTags: latest:1.0.8\n\nVersion history:\n\nv1.0.8 | 2026-09-14T05:22:25.324Z | user\n\nUpdate from 1.0.7 to 1.0.8\n\nv1.0.7 | 2026-08-14T14:57:37.389Z | user\n\nUpdate from 1.0.6 to 1.0.7\n\nv1.0.6 | 2026-08-07T10:53:32.606Z | user\n\nUpdate from 1.0.5 to 1.0.6\n\nv1.0.5 | 2026-07-13T12:14:07.997Z | user\n\nUpdate from 1.0.4 to 1.0.5\n\nv1.0.4 | 2026-07-06T11:22:54.625Z | user\n\nUpdate from 1.0.3 to 1.0.4\n\nv1.0.3 | 2026-07-03T08:21:31.219Z | user\n\nUpdate from 1.0.2 to 1.0.3\n\nv1.0.2 | 2026-07-03T06:52:16.798Z | user\n\nUpdate from 1.0.1 to 1.0.2\n\nv1.0.1 | 2026-05-14T12:34:27.261Z | user\n\nUpdate from 1.0.0 to 1.0.1\n\nv1.0.0 | 2026-05-06T05:40:05.128Z | user\n\nInitial release\n\nArchive index:\n\nArchive v1.0.8: 7 files, 23337 bytes\n\nFiles: references/api.md (4872b), references/onboarding.md (1999b), scripts/mpstats_ozon_product_search.py (12806b), scripts/onboarding.py (24027b), skill-card.md (2466b), SKILL.md (9818b), _meta.json (154b)\n\nFile v1.0.8:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-product-search\ndescription: MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词或 SKU 发现或反查商品，也应触发此技能。\n---\n\n# MPSTATS Ozon Product Search\n\nThis skill searches Ozon (Russia) products in the MPSTATS analytics database by Russian keyword or SKU list. It is the **entry point** for Ozon product discovery and competitor lookup — downstream drill-downs (brand/category/seller/detail/trend) typically start from the IDs returned here.\n\n## Core Concepts\n\n**MPSTATS Ozon coverage**: Ozon is Russia's largest general-category marketplace. MPSTATS indexes Ozon product listings and sales history. This endpoint returns the **basic identity card only** — 10 fields: `productId` / `title` / `productPageUrl` / `imageUrl` / `brand` / `brandId` / `sellerName` / `sellerId` plus `sourceType` / `sourceTool`. Per-SKU price / sales / rating / stock / turnover / ranking are **not** returned here — the backend `OzonProductSearchItem` DTO is intentionally narrow. For those metrics, chain into `mpstats-ozon-product-detail` (batch full card, 36 fields) or the `brand/category/seller-products` drill-downs (39 fields).\n\n**Language requirement**: Keywords must be in **Russian** (Cyrillic) — or the Latin-script form actually used on the Ozon storefront. If the user supplies an English or Chinese keyword, translate it to Russian first and note the translation.\n\n**At-least-one input rule**: The input schema marks both filters as optional, but the tool's business rule requires at least one of `keyword` / `productIds` to be supplied. The two can be combined to narrow results. For brand- or seller-scoped discovery, use `mpstats-ozon-brand-products` / `mpstats-ozon-seller-products` instead.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| keyword | string | conditional | Russian search keyword, e.g., `кроссовки` (sneakers) |\n| productIds | array<integer\\|string> | conditional | Ozon SKU list |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; defaults to one year ago |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; defaults to yesterday, **cannot** be today or future |\n\nAt least one of `keyword` / `productIds` must be supplied. The endpoint returns at most ~36 records in a single call (an upstream-acknowledged cap), and there are no pagination / sort / filter inputs — narrow via keyword/SKU and date window instead.\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/productSearch`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_product_search.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗算力；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-mpstats-ozon-product-search-<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发生以下异常情况时，采用 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. Keyword search — sneakers in Russian**\n```json\n{\"keyword\": \"кроссовки\"}\n```\n\n**2. SKU batch reverse lookup**\n```json\n{\"productIds\": [1786874757, 151623766, 142257239]}\n```\n\n**3. Dated window for period-specific search**\n```json\n{\"keyword\": \"футболка\", \"startDate\": \"2025-02-01\", \"endDate\": \"2025-02-28\"}\n```\n\n## How to Chain with Other Ozon Skills\n\n1. **Keyword → drill-down**: Search → pick `productId` → call `mpstats-ozon-product-detail` (batch metrics) or `mpstats-ozon-product-trend` (single-SKU time-series).\n2. **Brand drill-down**: For brand-scoped product listings with full metrics, call `mpstats-ozon-brand-products` directly with the brand display name.\n3. **Seller drill-down**: For seller-scoped product listings with full metrics, call `mpstats-ozon-seller-products` directly with the seller ID.\n\n## Display Rules\n\n1. **Lead with identity columns** — this endpoint returns only 10 identity fields. Headline the table with `productId`, `title`, `brand`, `sellerName`; include `productPageUrl` / `imageUrl` as secondary columns. Do **not** add price / sales / rating / stock columns — they are not in the response.\n2. **Russian titles** — preserve the original Russian title; optionally offer an English or Chinese translation on user request.\n3. **Result count** — the endpoint returns at most ~36 records and has no pagination. If `total` exceeds what was returned, suggest narrowing the keyword/SKU set or date window rather than asking for more pages.\n4. **Route to drill-downs for any business metric** — business metrics are never in this response. If the user asks for sales / price / rating / stock / turnover / ranking, **always** route to `mpstats-ozon-product-detail` (single or batch) or the `*-products` drill-downs. Do not fabricate or estimate from identity fields.\n5. **Error handling** — when `code` / `errcode` is non-200, explain the reason from `msg` / `errmsg` and suggest adjusting inputs (supply at least one of `keyword` / `productIds`, use Russian, narrow date range).\n\n## Important Limitations\n\n- **At least one of `keyword` / `productIds` required** — empty payloads are rejected by the tool's business rule even though `required` is empty in inputSchema.\n- **Russian / Latin only** — non-Russian keywords generally return empty results.\n- **Date range** — `endDate` cannot be today or a future date; data is T-1.\n- **Hard result cap** — upstream returns at most ~36 records per call and exposes no pagination/sort/filter. Cannot be bypassed; narrow the query instead.\n- **No business metrics** — price / sales / rating / stock / turnover / ranking are **not** in this endpoint's response at all. The backend `OzonProductSearchItem` DTO declares exactly 10 identity fields. This is a hard contract, not a sparse payload — do not assume missing metric fields could be filled in by re-calling with different dates.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Ozon product discovery / identity resolution:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Search Ozon for sneakers / headphones / ...\" | Keyword discovery |\n| \"I have a list of Ozon SKUs, pull their names\" | Batch SKU reverse lookup |\n| \"Translate this keyword to Russian and search Ozon\" | Cross-language discovery |\n\n**Not applicable** — Needs beyond discovery:\n\n- Reliable per-SKU sales / revenue / stock / rating metrics → use `mpstats-ozon-product-detail` (batch card) or the `*-products` drill-down skills.\n- Brand-scoped product listing → use `mpstats-ozon-brand-products` directly.\n- Seller-scoped product listing → use `mpstats-ozon-seller-products` directly.\n- Time-series trend for a single SKU → use `mpstats-ozon-product-trend`.\n- Wildberries or other non-Ozon Russian marketplaces → not covered here.\n- Category-tree navigation / Russian category path lookup → use `mpstats-ozon-category-products` with a known path.\n\n**Boundary judgment**: If the user wants to **find or identify** Ozon products, start here. If they already have an ID or a dimension (brand / category / seller) and want **metrics** under it, go to the corresponding drill-down skill directly.\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.8:_meta.json\n\n{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-mpstats-ozon-product-search\",\n  \"version\": \"1.0.8\",\n  \"publishedAt\": 1789363345324\n}\n\nFile v1.0.8:references/api.md\n\n# MPSTATS Ozon 商品搜索 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_TOOL_GATEWAY}/mpstats/ozon/productSearch`\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）。以下字段与后端 `OzonItemSearchRequest` DTO 一致（同步日期 2026-05-27）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| keyword | string | 二选一 | 俄语搜索关键词，例如 `кроссовки`（跑鞋） |\n| productIds | array | 二选一 | Ozon 商品 SKU 列表（整数或字符串） |\n| startDate | string | 否 | 统计起始日，格式 `YYYY-MM-DD`；留空时按一年前；最晚可选昨日 |\n| endDate | string | 否 | 统计结束日，格式 `YYYY-MM-DD`；留空时按昨天；最晚可选昨日 |\n\n> **二选一约束**：`keyword` / `productIds` 至少传一个，全部为空时请求会被拒绝。\n>\n> **无分页/排序/筛选**：上游单次最多返回约 36 条记录（官方上限）。底层固定按 startRow=0、endRow=100、空 sortModel/filterModel 调用，不再暴露 `page` / `pageSize` / `sortField` / `sortDirection` / `filters` 入参；如需更精确结果请收窄 keyword/SKU 或日期窗口。\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[*] 商品对象字段（10 个）\n\n按后端 `OzonProductSearchItem` DTO 定义（同步日期 2026-05-11）。**search 端点为身份解析用途，不返回价/销/评/库存/周转/排名等业务指标**——这是硬契约，不是 sparse payload。如果需要那些指标：\n\n- 单/批 SKU 全量卡：改用 `productDetail`（36 字段，含价格、销量、收入、周期对比等）\n- 维度下钻：改用 `brandProducts` / `categoryProducts` / `sellerProducts`（39 字段全量商品卡）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| productPageUrl | string | 商品页 URL |\n| imageUrl | string | 主图 URL |\n| brand | string | 品牌名 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| sourceType | string | 数据源标识，恒为 `ozon` |\n| sourceTool | string | 来源工具名，恒为 `MPSTATS-Ozon商品搜索` |\n\n## 错误码\n\n正常情况下，HTTP 状态码为 200，业务成功与否通过 `code` / `errcode` 区分（`200` 成功）。\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 正常解析 `products` 字段 |\n| 401 | 认证失败 | HTTP 401 或 authorized error：按 SKILL.md 的 **## 解决认证和算力问题** 处理。 |\n| 402 | 算力或余额不足 | HTTP 402：按 SKILL.md 的 **## 解决认证和算力问题** 处理。 |\n| 其他非 200 值 | 业务异常 | 查看 `errmsg` / `msg` 获取具体原因；常见为 keyword/productIds 均缺失、日期超过昨日、非俄语关键词等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/productSearch \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"кроссовки\"\n  }'\n```\n\n## 响应示例（简略）\n\n```json\n{\n  \"code\": \"200\",\n  \"msg\": \"ok\",\n  \"total\": 8721,\n  \"products\": [\n    {\n      \"productId\": 1786874757,\n      \"title\": \"Кроссовки мужские ...\",\n      \"brand\": \"Nike\",\n      \"sellerName\": \"ООО Ромашка\",\n      \"sellerId\": 3628678,\n      \"imageUrl\": \"https://...\",\n      \"productPageUrl\": \"https://www.ozon.ru/product/...\"\n    }\n  ],\n  \"costToken\": 1\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-product-search\",\n  \"sentiment\": \"POSITIVE\",\n  \"category\": \"OTHER\",\n  \"content\": \"User successfully located Ozon SKUs from a Russian keyword.\"\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.8: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.8:skill-card.md\n\n## Description:\n\nSearches MPSTATS data for Ozon Russia products by Russian keyword or SKU and returns product identity details such as product ID, title, brand, seller, page URL, and image URL.\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 commerce analysts, sellers, and agents use this skill to find or reverse-lookup Ozon Russia products before choosing product, brand, seller, or detail workflows for deeper analysis.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The security evidence says the skill can collect phone and SMS login information, generate and persist API keys, and create billing or payment orders.\n\nMitigation: Use only trusted LinkFox credentials, avoid storing secrets in shared shell profiles, and run onboarding or billing flows only when the user intentionally requests those account actions.\n\nRisk: The security evidence says the skill can write response and QR data to disk and send feedback externally.\n\nMitigation: Review local output paths before sharing workspaces and confirm external feedback reporting is acceptable for the use case.\n\nRisk: The security evidence warns that environment variables can redirect LinkFox hosts.\n\nMitigation: Verify LinkFox environment variables point to official HTTPS LinkFox hosts before using the skill.\n\n## Reference(s):\n\n- [MPSTATS Ozon Product Search Skill Page](https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-product-search)\n- [MPSTATS Ozon 商品搜索 API 参考](references/api.md)\n- [解决认证和算力问题](references/onboarding.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance, JSON files]\n\n**Output Format:** [Markdown guidance with shell commands plus JSON API responses or saved JSON files.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [The product search flow can write full responses to a local linkfox session directory, use a 24-hour local cache, and summarize large responses in stdout.]\n\n## Skill Version(s):\n\n1.0.8 (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.7: 7 files, 23617 bytes\n\nFiles: references/api.md (4872b), references/onboarding.md (2046b), scripts/mpstats_ozon_product_search.py (12750b), scripts/onboarding.py (24089b), skill-card.md (2683b), SKILL.md (9818b), _meta.json (154b)\n\nFile v1.0.7:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-product-search\ndescription: MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词或 SKU 发现或反查商品，也应触发此技能。\n---\n\n# MPSTATS Ozon Product Search\n\nThis skill searches Ozon (Russia) products in the MPSTATS analytics database by Russian keyword or SKU list. It is the **entry point** for Ozon product discovery and competitor lookup — downstream drill-downs (brand/category/seller/detail/trend) typically start from the IDs returned here.\n\n## Core Concepts\n\n**MPSTATS Ozon coverage**: Ozon is Russia's largest general-category marketplace. MPSTATS indexes Ozon product listings and sales history. This endpoint returns the **basic identity card only** — 10 fields: `productId` / `title` / `productPageUrl` / `imageUrl` / `brand` / `brandId` / `sellerName` / `sellerId` plus `sourceType` / `sourceTool`. Per-SKU price / sales / rating / stock / turnover / ranking are **not** returned here — the backend `OzonProductSearchItem` DTO is intentionally narrow. For those metrics, chain into `mpstats-ozon-product-detail` (batch full card, 36 fields) or the `brand/category/seller-products` drill-downs (39 fields).\n\n**Language requirement**: Keywords must be in **Russian** (Cyrillic) — or the Latin-script form actually used on the Ozon storefront. If the user supplies an English or Chinese keyword, translate it to Russian first and note the translation.\n\n**At-least-one input rule**: The input schema marks both filters as optional, but the tool's business rule requires at least one of `keyword` / `productIds` to be supplied. The two can be combined to narrow results. For brand- or seller-scoped discovery, use `mpstats-ozon-brand-products` / `mpstats-ozon-seller-products` instead.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| keyword | string | conditional | Russian search keyword, e.g., `кроссовки` (sneakers) |\n| productIds | array<integer\\|string> | conditional | Ozon SKU list |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; defaults to one year ago |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; defaults to yesterday, **cannot** be today or future |\n\nAt least one of `keyword` / `productIds` must be supplied. The endpoint returns at most ~36 records in a single call (an upstream-acknowledged cap), and there are no pagination / sort / filter inputs — narrow via keyword/SKU and date window instead.\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/productSearch`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_product_search.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗积分；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-mpstats-ozon-product-search-<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发生以下异常情况时，采用 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. Keyword search — sneakers in Russian**\n```json\n{\"keyword\": \"кроссовки\"}\n```\n\n**2. SKU batch reverse lookup**\n```json\n{\"productIds\": [1786874757, 151623766, 142257239]}\n```\n\n**3. Dated window for period-specific search**\n```json\n{\"keyword\": \"футболка\", \"startDate\": \"2025-02-01\", \"endDate\": \"2025-02-28\"}\n```\n\n## How to Chain with Other Ozon Skills\n\n1. **Keyword → drill-down**: Search → pick `productId` → call `mpstats-ozon-product-detail` (batch metrics) or `mpstats-ozon-product-trend` (single-SKU time-series).\n2. **Brand drill-down**: For brand-scoped product listings with full metrics, call `mpstats-ozon-brand-products` directly with the brand display name.\n3. **Seller drill-down**: For seller-scoped product listings with full metrics, call `mpstats-ozon-seller-products` directly with the seller ID.\n\n## Display Rules\n\n1. **Lead with identity columns** — this endpoint returns only 10 identity fields. Headline the table with `productId`, `title`, `brand`, `sellerName`; include `productPageUrl` / `imageUrl` as secondary columns. Do **not** add price / sales / rating / stock columns — they are not in the response.\n2. **Russian titles** — preserve the original Russian title; optionally offer an English or Chinese translation on user request.\n3. **Result count** — the endpoint returns at most ~36 records and has no pagination. If `total` exceeds what was returned, suggest narrowing the keyword/SKU set or date window rather than asking for more pages.\n4. **Route to drill-downs for any business metric** — business metrics are never in this response. If the user asks for sales / price / rating / stock / turnover / ranking, **always** route to `mpstats-ozon-product-detail` (single or batch) or the `*-products` drill-downs. Do not fabricate or estimate from identity fields.\n5. **Error handling** — when `code` / `errcode` is non-200, explain the reason from `msg` / `errmsg` and suggest adjusting inputs (supply at least one of `keyword` / `productIds`, use Russian, narrow date range).\n\n## Important Limitations\n\n- **At least one of `keyword` / `productIds` required** — empty payloads are rejected by the tool's business rule even though `required` is empty in inputSchema.\n- **Russian / Latin only** — non-Russian keywords generally return empty results.\n- **Date range** — `endDate` cannot be today or a future date; data is T-1.\n- **Hard result cap** — upstream returns at most ~36 records per call and exposes no pagination/sort/filter. Cannot be bypassed; narrow the query instead.\n- **No business metrics** — price / sales / rating / stock / turnover / ranking are **not** in this endpoint's response at all. The backend `OzonProductSearchItem` DTO declares exactly 10 identity fields. This is a hard contract, not a sparse payload — do not assume missing metric fields could be filled in by re-calling with different dates.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Ozon product discovery / identity resolution:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Search Ozon for sneakers / headphones / ...\" | Keyword discovery |\n| \"I have a list of Ozon SKUs, pull their names\" | Batch SKU reverse lookup |\n| \"Translate this keyword to Russian and search Ozon\" | Cross-language discovery |\n\n**Not applicable** — Needs beyond discovery:\n\n- Reliable per-SKU sales / revenue / stock / rating metrics → use `mpstats-ozon-product-detail` (batch card) or the `*-products` drill-down skills.\n- Brand-scoped product listing → use `mpstats-ozon-brand-products` directly.\n- Seller-scoped product listing → use `mpstats-ozon-seller-products` directly.\n- Time-series trend for a single SKU → use `mpstats-ozon-product-trend`.\n- Wildberries or other non-Ozon Russian marketplaces → not covered here.\n- Category-tree navigation / Russian category path lookup → use `mpstats-ozon-category-products` with a known path.\n\n**Boundary judgment**: If the user wants to **find or identify** Ozon products, start here. If they already have an ID or a dimension (brand / category / seller) and want **metrics** under it, go to the corresponding drill-down skill directly.\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-product-search\",\n  \"version\": \"1.0.7\",\n  \"publishedAt\": 1786719457389\n}\n\nFile v1.0.7:references/api.md\n\n# MPSTATS Ozon 商品搜索 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_TOOL_GATEWAY}/mpstats/ozon/productSearch`\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）。以下字段与后端 `OzonItemSearchRequest` DTO 一致（同步日期 2026-05-27）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| keyword | string | 二选一 | 俄语搜索关键词，例如 `кроссовки`（跑鞋） |\n| productIds | array | 二选一 | Ozon 商品 SKU 列表（整数或字符串） |\n| startDate | string | 否 | 统计起始日，格式 `YYYY-MM-DD`；留空时按一年前；最晚可选昨日 |\n| endDate | string | 否 | 统计结束日，格式 `YYYY-MM-DD`；留空时按昨天；最晚可选昨日 |\n\n> **二选一约束**：`keyword` / `productIds` 至少传一个，全部为空时请求会被拒绝。\n>\n> **无分页/排序/筛选**：上游单次最多返回约 36 条记录（官方上限）。底层固定按 startRow=0、endRow=100、空 sortModel/filterModel 调用，不再暴露 `page` / `pageSize` / `sortField` / `sortDirection` / `filters` 入参；如需更精确结果请收窄 keyword/SKU 或日期窗口。\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[*] 商品对象字段（10 个）\n\n按后端 `OzonProductSearchItem` DTO 定义（同步日期 2026-05-11）。**search 端点为身份解析用途，不返回价/销/评/库存/周转/排名等业务指标**——这是硬契约，不是 sparse payload。如果需要那些指标：\n\n- 单/批 SKU 全量卡：改用 `productDetail`（36 字段，含价格、销量、收入、周期对比等）\n- 维度下钻：改用 `brandProducts` / `categoryProducts` / `sellerProducts`（39 字段全量商品卡）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| productPageUrl | string | 商品页 URL |\n| imageUrl | string | 主图 URL |\n| brand | string | 品牌名 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| sourceType | string | 数据源标识，恒为 `ozon` |\n| sourceTool | string | 来源工具名，恒为 `MPSTATS-Ozon商品搜索` |\n\n## 错误码\n\n正常情况下，HTTP 状态码为 200，业务成功与否通过 `code` / `errcode` 区分（`200` 成功）。\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 正常解析 `products` 字段 |\n| 401 | 认证失败 | HTTP 401 或 authorized error：按 SKILL.md 的 **## 解决认证和积分问题** 处理。 |\n| 402 | 积分或余额不足 | HTTP 402：按 SKILL.md 的 **## 解决认证和积分问题** 处理。 |\n| 其他非 200 值 | 业务异常 | 查看 `errmsg` / `msg` 获取具体原因；常见为 keyword/productIds 均缺失、日期超过昨日、非俄语关键词等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/productSearch \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"кроссовки\"\n  }'\n```\n\n## 响应示例（简略）\n\n```json\n{\n  \"code\": \"200\",\n  \"msg\": \"ok\",\n  \"total\": 8721,\n  \"products\": [\n    {\n      \"productId\": 1786874757,\n      \"title\": \"Кроссовки мужские ...\",\n      \"brand\": \"Nike\",\n      \"sellerName\": \"ООО Ромашка\",\n      \"sellerId\": 3628678,\n      \"imageUrl\": \"https://...\",\n      \"productPageUrl\": \"https://www.ozon.ru/product/...\"\n    }\n  ],\n  \"costToken\": 1\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-product-search\",\n  \"sentiment\": \"POSITIVE\",\n  \"category\": \"OTHER\",\n  \"content\": \"User successfully located Ozon SKUs from a Russian keyword.\"\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>`（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.7:skill-card.md\n\n## Description:\n\nMPSTATS Ozon 俄罗斯站商品搜索与反查，按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 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 operators, ecommerce analysts, and agents use this skill to search or reverse-lookup Ozon Russia products by Russian keyword or SKU before moving into product detail, brand, category, or seller drill-down workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill uses LinkFox and MPSTATS network services and may consume paid credits.\n\nMitigation: Confirm the intended search parameters and credit impact before running searches, retries, recharge flows, or payment-order commands.\n\nRisk: Account setup paths can collect phone and SMS verification details and help persist an API key.\n\nMitigation: Prefer self-service API-key setup, avoid shared machines for shell-profile secrets, and restart sessions after changing environment variables.\n\nRisk: Environment variables can alter LinkFox service endpoints.\n\nMitigation: Review LINKFOX_* URL environment variables before use and keep them pointed at expected LinkFox services.\n\nRisk: Full search responses are written to local linkfox folders.\n\nMitigation: Run the skill from an appropriate workspace and review saved result files before sharing or committing them.\n\n## Reference(s):\n\n- [MPSTATS Ozon 商品搜索 API 参考](references/api.md)\n- [解决认证和积分问题](references/onboarding.md)\n- [ClawHub skill page](https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-product-search)\n- [LinkFox skill catalog](https://skill.linkfox.com/)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, JSON, Files, Guidance]\n\n**Output Format:** [Markdown guidance with shell commands and JSON responses or saved JSON result files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Search results contain Ozon product identity fields only; full API responses are persisted under a local linkfox directory and larger responses are summarized unless inline output is requested.]\n\n## Skill Version(s):\n\n1.0.7 (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.6: 7 files, 23695 bytes\n\nFiles: references/api.md (4872b), references/onboarding.md (2046b), scripts/mpstats_ozon_product_search.py (12750b), scripts/onboarding.py (24089b), skill-card.md (3237b), SKILL.md (9818b), _meta.json (154b)\n\nFile v1.0.6:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-product-search\ndescription: MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词或 SKU 发现或反查商品，也应触发此技能。\n---\n\n# MPSTATS Ozon Product Search\n\nThis skill searches Ozon (Russia) products in the MPSTATS analytics database by Russian keyword or SKU list. It is the **entry point** for Ozon product discovery and competitor lookup — downstream drill-downs (brand/category/seller/detail/trend) typically start from the IDs returned here.\n\n## Core Concepts\n\n**MPSTATS Ozon coverage**: Ozon is Russia's largest general-category marketplace. MPSTATS indexes Ozon product listings and sales history. This endpoint returns the **basic identity card only** — 10 fields: `productId` / `title` / `productPageUrl` / `imageUrl` / `brand` / `brandId` / `sellerName` / `sellerId` plus `sourceType` / `sourceTool`. Per-SKU price / sales / rating / stock / turnover / ranking are **not** returned here — the backend `OzonProductSearchItem` DTO is intentionally narrow. For those metrics, chain into `mpstats-ozon-product-detail` (batch full card, 36 fields) or the `brand/category/seller-products` drill-downs (39 fields).\n\n**Language requirement**: Keywords must be in **Russian** (Cyrillic) — or the Latin-script form actually used on the Ozon storefront. If the user supplies an English or Chinese keyword, translate it to Russian first and note the translation.\n\n**At-least-one input rule**: The input schema marks both filters as optional, but the tool's business rule requires at least one of `keyword` / `productIds` to be supplied. The two can be combined to narrow results. For brand- or seller-scoped discovery, use `mpstats-ozon-brand-products` / `mpstats-ozon-seller-products` instead.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| keyword | string | conditional | Russian search keyword, e.g., `кроссовки` (sneakers) |\n| productIds | array<integer\\|string> | conditional | Ozon SKU list |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; defaults to one year ago |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; defaults to yesterday, **cannot** be today or future |\n\nAt least one of `keyword` / `productIds` must be supplied. The endpoint returns at most ~36 records in a single call (an upstream-acknowledged cap), and there are no pagination / sort / filter inputs — narrow via keyword/SKU and date window instead.\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/productSearch`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_product_search.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗积分；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-mpstats-ozon-product-search-<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发生以下异常情况时，采用 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. Keyword search — sneakers in Russian**\n```json\n{\"keyword\": \"кроссовки\"}\n```\n\n**2. SKU batch reverse lookup**\n```json\n{\"productIds\": [1786874757, 151623766, 142257239]}\n```\n\n**3. Dated window for period-specific search**\n```json\n{\"keyword\": \"футболка\", \"startDate\": \"2025-02-01\", \"endDate\": \"2025-02-28\"}\n```\n\n## How to Chain with Other Ozon Skills\n\n1. **Keyword → drill-down**: Search → pick `productId` → call `mpstats-ozon-product-detail` (batch metrics) or `mpstats-ozon-product-trend` (single-SKU time-series).\n2. **Brand drill-down**: For brand-scoped product listings with full metrics, call `mpstats-ozon-brand-products` directly with the brand display name.\n3. **Seller drill-down**: For seller-scoped product listings with full metrics, call `mpstats-ozon-seller-products` directly with the seller ID.\n\n## Display Rules\n\n1. **Lead with identity columns** — this endpoint returns only 10 identity fields. Headline the table with `productId`, `title`, `brand`, `sellerName`; include `productPageUrl` / `imageUrl` as secondary columns. Do **not** add price / sales / rating / stock columns — they are not in the response.\n2. **Russian titles** — preserve the original Russian title; optionally offer an English or Chinese translation on user request.\n3. **Result count** — the endpoint returns at most ~36 records and has no pagination. If `total` exceeds what was returned, suggest narrowing the keyword/SKU set or date window rather than asking for more pages.\n4. **Route to drill-downs for any business metric** — business metrics are never in this response. If the user asks for sales / price / rating / stock / turnover / ranking, **always** route to `mpstats-ozon-product-detail` (single or batch) or the `*-products` drill-downs. Do not fabricate or estimate from identity fields.\n5. **Error handling** — when `code` / `errcode` is non-200, explain the reason from `msg` / `errmsg` and suggest adjusting inputs (supply at least one of `keyword` / `productIds`, use Russian, narrow date range).\n\n## Important Limitations\n\n- **At least one of `keyword` / `productIds` required** — empty payloads are rejected by the tool's business rule even though `required` is empty in inputSchema.\n- **Russian / Latin only** — non-Russian keywords generally return empty results.\n- **Date range** — `endDate` cannot be today or a future date; data is T-1.\n- **Hard result cap** — upstream returns at most ~36 records per call and exposes no pagination/sort/filter. Cannot be bypassed; narrow the query instead.\n- **No business metrics** — price / sales / rating / stock / turnover / ranking are **not** in this endpoint's response at all. The backend `OzonProductSearchItem` DTO declares exactly 10 identity fields. This is a hard contract, not a sparse payload — do not assume missing metric fields could be filled in by re-calling with different dates.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Ozon product discovery / identity resolution:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Search Ozon for sneakers / headphones / ...\" | Keyword discovery |\n| \"I have a list of Ozon SKUs, pull their names\" | Batch SKU reverse lookup |\n| \"Translate this keyword to Russian and search Ozon\" | Cross-language discovery |\n\n**Not applicable** — Needs beyond discovery:\n\n- Reliable per-SKU sales / revenue / stock / rating metrics → use `mpstats-ozon-product-detail` (batch card) or the `*-products` drill-down skills.\n- Brand-scoped product listing → use `mpstats-ozon-brand-products` directly.\n- Seller-scoped product listing → use `mpstats-ozon-seller-products` directly.\n- Time-series trend for a single SKU → use `mpstats-ozon-product-trend`.\n- Wildberries or other non-Ozon Russian marketplaces → not covered here.\n- Category-tree navigation / Russian category path lookup → use `mpstats-ozon-category-products` with a known path.\n\n**Boundary judgment**: If the user wants to **find or identify** Ozon products, start here. If they already have an ID or a dimension (brand / category / seller) and want **metrics** under it, go to the corresponding drill-down skill directly.\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-product-search\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1786100012606\n}\n\nFile v1.0.6:references/api.md\n\n# MPSTATS Ozon 商品搜索 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_TOOL_GATEWAY}/mpstats/ozon/productSearch`\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）。以下字段与后端 `OzonItemSearchRequest` DTO 一致（同步日期 2026-05-27）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| keyword | string | 二选一 | 俄语搜索关键词，例如 `кроссовки`（跑鞋） |\n| productIds | array | 二选一 | Ozon 商品 SKU 列表（整数或字符串） |\n| startDate | string | 否 | 统计起始日，格式 `YYYY-MM-DD`；留空时按一年前；最晚可选昨日 |\n| endDate | string | 否 | 统计结束日，格式 `YYYY-MM-DD`；留空时按昨天；最晚可选昨日 |\n\n> **二选一约束**：`keyword` / `productIds` 至少传一个，全部为空时请求会被拒绝。\n>\n> **无分页/排序/筛选**：上游单次最多返回约 36 条记录（官方上限）。底层固定按 startRow=0、endRow=100、空 sortModel/filterModel 调用，不再暴露 `page` / `pageSize` / `sortField` / `sortDirection` / `filters` 入参；如需更精确结果请收窄 keyword/SKU 或日期窗口。\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[*] 商品对象字段（10 个）\n\n按后端 `OzonProductSearchItem` DTO 定义（同步日期 2026-05-11）。**search 端点为身份解析用途，不返回价/销/评/库存/周转/排名等业务指标**——这是硬契约，不是 sparse payload。如果需要那些指标：\n\n- 单/批 SKU 全量卡：改用 `productDetail`（36 字段，含价格、销量、收入、周期对比等）\n- 维度下钻：改用 `brandProducts` / `categoryProducts` / `sellerProducts`（39 字段全量商品卡）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| productPageUrl | string | 商品页 URL |\n| imageUrl | string | 主图 URL |\n| brand | string | 品牌名 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| sourceType | string | 数据源标识，恒为 `ozon` |\n| sourceTool | string | 来源工具名，恒为 `MPSTATS-Ozon商品搜索` |\n\n## 错误码\n\n正常情况下，HTTP 状态码为 200，业务成功与否通过 `code` / `errcode` 区分（`200` 成功）。\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 正常解析 `products` 字段 |\n| 401 | 认证失败 | HTTP 401 或 authorized error：按 SKILL.md 的 **## 解决认证和积分问题** 处理。 |\n| 402 | 积分或余额不足 | HTTP 402：按 SKILL.md 的 **## 解决认证和积分问题** 处理。 |\n| 其他非 200 值 | 业务异常 | 查看 `errmsg` / `msg` 获取具体原因；常见为 keyword/productIds 均缺失、日期超过昨日、非俄语关键词等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/productSearch \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"кроссовки\"\n  }'\n```\n\n## 响应示例（简略）\n\n```json\n{\n  \"code\": \"200\",\n  \"msg\": \"ok\",\n  \"total\": 8721,\n  \"products\": [\n    {\n      \"productId\": 1786874757,\n      \"title\": \"Кроссовки мужские ...\",\n      \"brand\": \"Nike\",\n      \"sellerName\": \"ООО Ромашка\",\n      \"sellerId\": 3628678,\n      \"imageUrl\": \"https://...\",\n      \"productPageUrl\": \"https://www.ozon.ru/product/...\"\n    }\n  ],\n  \"costToken\": 1\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-product-search\",\n  \"sentiment\": \"POSITIVE\",\n  \"category\": \"OTHER\",\n  \"content\": \"User successfully located Ozon SKUs from a Russian keyword.\"\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\nSearches the MPSTATS Ozon Russia database by Russian keyword or SKU and returns product identity details such as product ID, title, brand, seller, image URL, and product URL.\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 e-commerce operators, market researchers, and developers use this skill to identify Ozon Russia products from Russian keywords or SKU lists. It is intended as an entry point before detail, brand, category, seller, or trend drill-down skills are used for business metrics.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can handle LinkFox account setup, phone/SMS login, and API-key generation.\n\nMitigation: Run onboarding only when the user explicitly chooses that path, use the documented LinkFox endpoints, and avoid exposing the resulting API key in chat, logs, or shared files.\n\nRisk: The onboarding flow can list paid plans, create subscription orders, and generate payment QR codes.\n\nMitigation: Require explicit user confirmation of plan ID, payment method, and price before creating an order, and do not poll or continue purchase steps unless requested.\n\nRisk: The search script stores full API responses and local cache files under a linkfox workspace/session directory.\n\nMitigation: Tell users where response files are written, avoid running searches for sensitive queries unless needed, and delete cached or saved response files when they are no longer required.\n\nRisk: The skill may submit feedback automatically when it detects mismatches, dissatisfaction, praise, or improvement opportunities.\n\nMitigation: Prefer explicit consent before sending feedback and keep feedback content limited to the minimum necessary behavior description.\n\nRisk: The search endpoint consumes LinkFox credits and the skill notes dynamic charging.\n\nMitigation: Explain the expected credit cost before calls, avoid automatic retry or broad exploratory searches, and ask the user before additional paid searches.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-product-search)\n- [MPSTATS Ozon product search API reference](artifact/references/api.md)\n- [Authentication and billing onboarding guide](artifact/references/onboarding.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, JSON, shell commands, configuration, guidance]\n\n**Output Format:** [JSON API responses, saved JSON files, concise text or Markdown summaries, and shell commands for authentication or billing setup when needed.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Search responses are saved under a local linkfox session data directory; large responses are summarized unless inline output is requested; repeated calls may use a 24-hour local cache.]\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: 5 files, 14569 bytes\n\nFiles: references/api.md (4872b), scripts/mpstats_ozon_product_search.py (12750b), skill-card.md (2786b), SKILL.md (10435b), _meta.json (154b)\n\nFile v1.0.5:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-product-search\ndescription: MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词或 SKU 发现或反查商品，也应触发此技能。\n---\n\n# MPSTATS Ozon Product Search\n\nThis skill searches Ozon (Russia) products in the MPSTATS analytics database by Russian keyword or SKU list. It is the **entry point** for Ozon product discovery and competitor lookup — downstream drill-downs (brand/category/seller/detail/trend) typically start from the IDs returned here.\n\n## Core Concepts\n\n**MPSTATS Ozon coverage**: Ozon is Russia's largest general-category marketplace. MPSTATS indexes Ozon product listings and sales history. This endpoint returns the **basic identity card only** — 10 fields: `productId` / `title` / `productPageUrl` / `imageUrl` / `brand` / `brandId` / `sellerName` / `sellerId` plus `sourceType` / `sourceTool`. Per-SKU price / sales / rating / stock / turnover / ranking are **not** returned here — the backend `OzonProductSearchItem` DTO is intentionally narrow. For those metrics, chain into `mpstats-ozon-product-detail` (batch full card, 36 fields) or the `brand/category/seller-products` drill-downs (39 fields).\n\n**Language requirement**: Keywords must be in **Russian** (Cyrillic) — or the Latin-script form actually used on the Ozon storefront. If the user supplies an English or Chinese keyword, translate it to Russian first and note the translation.\n\n**At-least-one input rule**: The input schema marks both filters as optional, but the tool's business rule requires at least one of `keyword` / `productIds` to be supplied. The two can be combined to narrow results. For brand- or seller-scoped discovery, use `mpstats-ozon-brand-products` / `mpstats-ozon-seller-products` instead.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| keyword | string | conditional | Russian search keyword, e.g., `кроссовки` (sneakers) |\n| productIds | array<integer\\|string> | conditional | Ozon SKU list |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; defaults to one year ago |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; defaults to yesterday, **cannot** be today or future |\n\nAt least one of `keyword` / `productIds` must be supplied. The endpoint returns at most ~36 records in a single call (an upstream-acknowledged cap), and there are no pagination / sort / filter inputs — narrow via keyword/SKU and date window instead.\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/productSearch`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_product_search.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗积分；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-mpstats-ozon-product-search-<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- **未配置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. Keyword search — sneakers in Russian**\n```json\n{\"keyword\": \"кроссовки\"}\n```\n\n**2. SKU batch reverse lookup**\n```json\n{\"productIds\": [1786874757, 151623766, 142257239]}\n```\n\n**3. Dated window for period-specific search**\n```json\n{\"keyword\": \"футболка\", \"startDate\": \"2025-02-01\", \"endDate\": \"2025-02-28\"}\n```\n\n## How to Chain with Other Ozon Skills\n\n1. **Keyword → drill-down**: Search → pick `productId` → call `mpstats-ozon-product-detail` (batch metrics) or `mpstats-ozon-product-trend` (single-SKU time-series).\n2. **Brand drill-down**: For brand-scoped product listings with full metrics, call `mpstats-ozon-brand-products` directly with the brand display name.\n3. **Seller drill-down**: For seller-scoped product listings with full metrics, call `mpstats-ozon-seller-products` directly with the seller ID.\n\n## Display Rules\n\n1. **Lead with identity columns** — this endpoint returns only 10 identity fields. Headline the table with `productId`, `title`, `brand`, `sellerName`; include `productPageUrl` / `imageUrl` as secondary columns. Do **not** add price / sales / rating / stock columns — they are not in the response.\n2. **Russian titles** — preserve the original Russian title; optionally offer an English or Chinese translation on user request.\n3. **Result count** — the endpoint returns at most ~36 records and has no pagination. If `total` exceeds what was returned, suggest narrowing the keyword/SKU set or date window rather than asking for more pages.\n4. **Route to drill-downs for any business metric** — business metrics are never in this response. If the user asks for sales / price / rating / stock / turnover / ranking, **always** route to `mpstats-ozon-product-detail` (single or batch) or the `*-products` drill-downs. Do not fabricate or estimate from identity fields.\n5. **Error handling** — when `code` / `errcode` is non-200, explain the reason from `msg` / `errmsg` and suggest adjusting inputs (supply at least one of `keyword` / `productIds`, use Russian, narrow date range).\n\n## Important Limitations\n\n- **At least one of `keyword` / `productIds` required** — empty payloads are rejected by the tool's business rule even though `required` is empty in inputSchema.\n- **Russian / Latin only** — non-Russian keywords generally return empty results.\n- **Date range** — `endDate` cannot be today or a future date; data is T-1.\n- **Hard result cap** — upstream returns at most ~36 records per call and exposes no pagination/sort/filter. Cannot be bypassed; narrow the query instead.\n- **No business metrics** — price / sales / rating / stock / turnover / ranking are **not** in this endpoint's response at all. The backend `OzonProductSearchItem` DTO declares exactly 10 identity fields. This is a hard contract, not a sparse payload — do not assume missing metric fields could be filled in by re-calling with different dates.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Ozon product discovery / identity resolution:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Search Ozon for sneakers / headphones / ...\" | Keyword discovery |\n| \"I have a list of Ozon SKUs, pull their names\" | Batch SKU reverse lookup |\n| \"Translate this keyword to Russian and search Ozon\" | Cross-language discovery |\n\n**Not applicable** — Needs beyond discovery:\n\n- Reliable per-SKU sales / revenue / stock / rating metrics → use `mpstats-ozon-product-detail` (batch card) or the `*-products` drill-down skills.\n- Brand-scoped product listing → use `mpstats-ozon-brand-products` directly.\n- Seller-scoped product listing → use `mpstats-ozon-seller-products` directly.\n- Time-series trend for a single SKU → use `mpstats-ozon-product-trend`.\n- Wildberries or other non-Ozon Russian marketplaces → not covered here.\n- Category-tree navigation / Russian category path lookup → use `mpstats-ozon-category-products` with a known path.\n\n**Boundary judgment**: If the user wants to **find or identify** Ozon products, start here. If they already have an ID or a dimension (brand / category / seller) and want **metrics** under it, go to the corresponding drill-down skill directly.\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-product-search\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1783944847997\n}\n\nFile v1.0.5:references/api.md\n\n# MPSTATS Ozon 商品搜索 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_TOOL_GATEWAY}/mpstats/ozon/productSearch`\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）。以下字段与后端 `OzonItemSearchRequest` DTO 一致（同步日期 2026-05-27）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| keyword | string | 二选一 | 俄语搜索关键词，例如 `кроссовки`（跑鞋） |\n| productIds | array | 二选一 | Ozon 商品 SKU 列表（整数或字符串） |\n| startDate | string | 否 | 统计起始日，格式 `YYYY-MM-DD`；留空时按一年前；最晚可选昨日 |\n| endDate | string | 否 | 统计结束日，格式 `YYYY-MM-DD`；留空时按昨天；最晚可选昨日 |\n\n> **二选一约束**：`keyword` / `productIds` 至少传一个，全部为空时请求会被拒绝。\n>\n> **无分页/排序/筛选**：上游单次最多返回约 36 条记录（官方上限）。底层固定按 startRow=0、endRow=100、空 sortModel/filterModel 调用，不再暴露 `page` / `pageSize` / `sortField` / `sortDirection` / `filters` 入参；如需更精确结果请收窄 keyword/SKU 或日期窗口。\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[*] 商品对象字段（10 个）\n\n按后端 `OzonProductSearchItem` DTO 定义（同步日期 2026-05-11）。**search 端点为身份解析用途，不返回价/销/评/库存/周转/排名等业务指标**——这是硬契约，不是 sparse payload。如果需要那些指标：\n\n- 单/批 SKU 全量卡：改用 `productDetail`（36 字段，含价格、销量、收入、周期对比等）\n- 维度下钻：改用 `brandProducts` / `categoryProducts` / `sellerProducts`（39 字段全量商品卡）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| productPageUrl | string | 商品页 URL |\n| imageUrl | string | 主图 URL |\n| brand | string | 品牌名 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| sourceType | string | 数据源标识，恒为 `ozon` |\n| sourceTool | string | 来源工具名，恒为 `MPSTATS-Ozon商品搜索` |\n\n## 错误码\n\n正常情况下，HTTP 状态码为 200，业务成功与否通过 `code` / `errcode` 区分（`200` 成功）。\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 正常解析 `products` 字段 |\n| 401 | 认证失败 | HTTP 401 或 authorized error：按 SKILL.md 的 **## 解决认证和积分问题** 处理。 |\n| 402 | 积分或余额不足 | HTTP 402：按 SKILL.md 的 **## 解决认证和积分问题** 处理。 |\n| 其他非 200 值 | 业务异常 | 查看 `errmsg` / `msg` 获取具体原因；常见为 keyword/productIds 均缺失、日期超过昨日、非俄语关键词等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/productSearch \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"кроссовки\"\n  }'\n```\n\n## 响应示例（简略）\n\n```json\n{\n  \"code\": \"200\",\n  \"msg\": \"ok\",\n  \"total\": 8721,\n  \"products\": [\n    {\n      \"productId\": 1786874757,\n      \"title\": \"Кроссовки мужские ...\",\n      \"brand\": \"Nike\",\n      \"sellerName\": \"ООО Ромашка\",\n      \"sellerId\": 3628678,\n      \"imageUrl\": \"https://...\",\n      \"productPageUrl\": \"https://www.ozon.ru/product/...\"\n    }\n  ],\n  \"costToken\": 1\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-product-search\",\n  \"sentiment\": \"POSITIVE\",\n  \"category\": \"OTHER\",\n  \"content\": \"User successfully located Ozon SKUs from a Russian keyword.\"\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:skill-card.md\n\n## Description: <br>\nSearches the MPSTATS Ozon Russia database by Russian keyword or SKU and returns product identity fields such as product ID, title, brand, seller, image URL, and product page URL. <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 agent users can use this skill to find or reverse-lookup Ozon Russia products before deciding whether to run deeper product, brand, seller, category, or trend analysis. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill makes LinkFox API calls that may consume account credits. <br>\nMitigation: Confirm the search parameters and expected credit use before running calls, especially when retrying or changing keywords. <br>\nRisk: Full search responses are stored locally and may include product, seller, or session-related metadata. <br>\nMitigation: Review the saved JSON location and handle those files according to the workspace's data retention and sharing requirements. <br>\nRisk: The security scan notes remote onboarding-skill installation guidance and feedback submission to a separate LinkFox service. <br>\nMitigation: Review those behaviors before deployment and require user approval for installing additional skills or sending feedback where policy requires consent. <br>\n\n\n## Reference(s): <br>\n- [MPSTATS Ozon Product Search API Reference](artifact/references/api.md) <br>\n- [ClawHub Skill Page](https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-product-search) <br>\n- [Publisher Profile](https://clawhub.ai/user/linkfox-ai) <br>\n- [LinkFox Tool Gateway Product Search Endpoint](https://tool-gateway.linkfox.com/mpstats/ozon/productSearch) <br>\n- [LinkFox Feedback API](https://skill-api.linkfox.com/api/v1/public/feedback) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with JSON parameters, shell command examples, and JSON response summaries or saved response files.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Full API responses are saved to local JSON files; small responses may also be printed inline, while larger responses are summarized.] <br>\n\n## Skill Version(s): <br>\n1.0.5 (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.4: 5 files, 13568 bytes\n\nFiles: references/api.md (4749b), scripts/mpstats_ozon_product_search.py (12831b), skill-card.md (2175b), SKILL.md (9109b), _meta.json (154b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-product-search\ndescription: MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词或 SKU 发现或反查商品，也应触发此技能。\n---\n\n# MPSTATS Ozon Product Search\n\nThis skill searches Ozon (Russia) products in the MPSTATS analytics database by Russian keyword or SKU list. It is the **entry point** for Ozon product discovery and competitor lookup — downstream drill-downs (brand/category/seller/detail/trend) typically start from the IDs returned here.\n\n## Core Concepts\n\n**MPSTATS Ozon coverage**: Ozon is Russia's largest general-category marketplace. MPSTATS indexes Ozon product listings and sales history. This endpoint returns the **basic identity card only** — 10 fields: `productId` / `title` / `productPageUrl` / `imageUrl` / `brand` / `brandId` / `sellerName` / `sellerId` plus `sourceType` / `sourceTool`. Per-SKU price / sales / rating / stock / turnover / ranking are **not** returned here — the backend `OzonProductSearchItem` DTO is intentionally narrow. For those metrics, chain into `mpstats-ozon-product-detail` (batch full card, 36 fields) or the `brand/category/seller-products` drill-downs (39 fields).\n\n**Language requirement**: Keywords must be in **Russian** (Cyrillic) — or the Latin-script form actually used on the Ozon storefront. If the user supplies an English or Chinese keyword, translate it to Russian first and note the translation.\n\n**At-least-one input rule**: The input schema marks both filters as optional, but the tool's business rule requires at least one of `keyword` / `productIds` to be supplied. The two can be combined to narrow results. For brand- or seller-scoped discovery, use `mpstats-ozon-brand-products` / `mpstats-ozon-seller-products` instead.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| keyword | string | conditional | Russian search keyword, e.g., `кроссовки` (sneakers) |\n| productIds | array<integer\\|string> | conditional | Ozon SKU list |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; defaults to one year ago |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; defaults to yesterday, **cannot** be today or future |\n\nAt least one of `keyword` / `productIds` must be supplied. The endpoint returns at most ~36 records in a single call (an upstream-acknowledged cap), and there are no pagination / sort / filter inputs — narrow via keyword/SKU and date window instead.\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/productSearch`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_product_search.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗积分；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-mpstats-ozon-product-search-<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. Keyword search — sneakers in Russian**\n```json\n{\"keyword\": \"кроссовки\"}\n```\n\n**2. SKU batch reverse lookup**\n```json\n{\"productIds\": [1786874757, 151623766, 142257239]}\n```\n\n**3. Dated window for period-specific search**\n```json\n{\"keyword\": \"футболка\", \"startDate\": \"2025-02-01\", \"endDate\": \"2025-02-28\"}\n```\n\n## How to Chain with Other Ozon Skills\n\n1. **Keyword → drill-down**: Search → pick `productId` → call `mpstats-ozon-product-detail` (batch metrics) or `mpstats-ozon-product-trend` (single-SKU time-series).\n2. **Brand drill-down**: For brand-scoped product listings with full metrics, call `mpstats-ozon-brand-products` directly with the brand display name.\n3. **Seller drill-down**: For seller-scoped product listings with full metrics, call `mpstats-ozon-seller-products` directly with the seller ID.\n\n## Display Rules\n\n1. **Lead with identity columns** — this endpoint returns only 10 identity fields. Headline the table with `productId`, `title`, `brand`, `sellerName`; include `productPageUrl` / `imageUrl` as secondary columns. Do **not** add price / sales / rating / stock columns — they are not in the response.\n2. **Russian titles** — preserve the original Russian title; optionally offer an English or Chinese translation on user request.\n3. **Result count** — the endpoint returns at most ~36 records and has no pagination. If `total` exceeds what was returned, suggest narrowing the keyword/SKU set or date window rather than asking for more pages.\n4. **Route to drill-downs for any business metric** — business metrics are never in this response. If the user asks for sales / price / rating / stock / turnover / ranking, **always** route to `mpstats-ozon-product-detail` (single or batch) or the `*-products` drill-downs. Do not fabricate or estimate from identity fields.\n5. **Error handling** — when `code` / `errcode` is non-200, explain the reason from `msg` / `errmsg` and suggest adjusting inputs (supply at least one of `keyword` / `productIds`, use Russian, narrow date range).\n\n## Important Limitations\n\n- **At least one of `keyword` / `productIds` required** — empty payloads are rejected by the tool's business rule even though `required` is empty in inputSchema.\n- **Russian / Latin only** — non-Russian keywords generally return empty results.\n- **Date range** — `endDate` cannot be today or a future date; data is T-1.\n- **Hard result cap** — upstream returns at most ~36 records per call and exposes no pagination/sort/filter. Cannot be bypassed; narrow the query instead.\n- **No business metrics** — price / sales / rating / stock / turnover / ranking are **not** in this endpoint's response at all. The backend `OzonProductSearchItem` DTO declares exactly 10 identity fields. This is a hard contract, not a sparse payload — do not assume missing metric fields could be filled in by re-calling with different dates.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Ozon product discovery / identity resolution:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Search Ozon for sneakers / headphones / ...\" | Keyword discovery |\n| \"I have a list of Ozon SKUs, pull their names\" | Batch SKU reverse lookup |\n| \"Translate this keyword to Russian and search Ozon\" | Cross-language discovery |\n\n**Not applicable** — Needs beyond discovery:\n\n- Reliable per-SKU sales / revenue / stock / rating metrics → use `mpstats-ozon-product-detail` (batch card) or the `*-products` drill-down skills.\n- Brand-scoped product listing → use `mpstats-ozon-brand-products` directly.\n- Seller-scoped product listing → use `mpstats-ozon-seller-products` directly.\n- Time-series trend for a single SKU → use `mpstats-ozon-product-trend`.\n- Wildberries or other non-Ozon Russian marketplaces → not covered here.\n- Category-tree navigation / Russian category path lookup → use `mpstats-ozon-category-products` with a known path.\n\n**Boundary judgment**: If the user wants to **find or identify** Ozon products, start here. If they already have an ID or a dimension (brand / category / seller) and want **metrics** under it, go to the corresponding drill-down skill directly.\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-product-search\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1783336974625\n}\n\nFile v1.0.4:references/api.md\n\n# MPSTATS Ozon 商品搜索 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_TOOL_GATEWAY}/mpstats/ozon/productSearch`\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）。以下字段与后端 `OzonItemSearchRequest` DTO 一致（同步日期 2026-05-27）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| keyword | string | 二选一 | 俄语搜索关键词，例如 `кроссовки`（跑鞋） |\n| productIds | array | 二选一 | Ozon 商品 SKU 列表（整数或字符串） |\n| startDate | string | 否 | 统计起始日，格式 `YYYY-MM-DD`；留空时按一年前；最晚可选昨日 |\n| endDate | string | 否 | 统计结束日，格式 `YYYY-MM-DD`；留空时按昨天；最晚可选昨日 |\n\n> **二选一约束**：`keyword` / `productIds` 至少传一个，全部为空时请求会被拒绝。\n>\n> **无分页/排序/筛选**：上游单次最多返回约 36 条记录（官方上限）。底层固定按 startRow=0、endRow=100、空 sortModel/filterModel 调用，不再暴露 `page` / `pageSize` / `sortField` / `sortDirection` / `filters` 入参；如需更精确结果请收窄 keyword/SKU 或日期窗口。\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[*] 商品对象字段（10 个）\n\n按后端 `OzonProductSearchItem` DTO 定义（同步日期 2026-05-11）。**search 端点为身份解析用途，不返回价/销/评/库存/周转/排名等业务指标**——这是硬契约，不是 sparse payload。如果需要那些指标：\n\n- 单/批 SKU 全量卡：改用 `productDetail`（36 字段，含价格、销量、收入、周期对比等）\n- 维度下钻：改用 `brandProducts` / `categoryProducts` / `sellerProducts`（39 字段全量商品卡）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| productPageUrl | string | 商品页 URL |\n| imageUrl | string | 主图 URL |\n| brand | string | 品牌名 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| sourceType | string | 数据源标识，恒为 `ozon` |\n| sourceTool | string | 来源工具名，恒为 `MPSTATS-Ozon商品搜索` |\n\n## 错误码\n\n正常情况下，HTTP 状态码为 200，业务成功与否通过 `code` / `errcode` 区分（`200` 成功）。\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 正常解析 `products` 字段 |\n| 401 | 认证失败 | 检查请求头 `Authorization` 是否正确携带 API Key |\n| 其他非 200 值 | 业务异常 | 查看 `errmsg` / `msg` 获取具体原因；常见为 keyword/productIds 均缺失、日期超过昨日、非俄语关键词等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/productSearch \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"кроссовки\"\n  }'\n```\n\n## 响应示例（简略）\n\n```json\n{\n  \"code\": \"200\",\n  \"msg\": \"ok\",\n  \"total\": 8721,\n  \"products\": [\n    {\n      \"productId\": 1786874757,\n      \"title\": \"Кроссовки мужские ...\",\n      \"brand\": \"Nike\",\n      \"sellerName\": \"ООО Ромашка\",\n      \"sellerId\": 3628678,\n      \"imageUrl\": \"https://...\",\n      \"productPageUrl\": \"https://www.ozon.ru/product/...\"\n    }\n  ],\n  \"costToken\": 1\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-product-search\",\n  \"sentiment\": \"POSITIVE\",\n  \"category\": \"OTHER\",\n  \"content\": \"User successfully located Ozon SKUs from a Russian keyword.\"\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>\nSearches MPSTATS for Ozon Russia products by Russian keyword or SKU and returns product identity details such as IDs, titles, brands, sellers, and product links. <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 agents and e-commerce operators use this skill to identify Ozon Russia products from Russian keywords or SKU lists before deciding whether to run more detailed MPSTATS drill-downs. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Search requests and feedback content may be sent to LinkFox. <br>\nMitigation: Avoid sensitive keywords, private SKU lists, and confidential conversation excerpts unless the user is comfortable sharing them with LinkFox. <br>\nRisk: Full search responses and cache files may be stored durably under a local linkfox directory or fallback storage location. <br>\nMitigation: Review and clean stored JSON and cache files when results may contain sensitive product or business information. <br>\n\n\n## Reference(s): <br>\n- [MPSTATS Ozon API reference](references/api.md) <br>\n- [ClawHub skill page](https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-product-search) <br>\n- [LinkFox API key guide](https://skill.linkfox.com/linkfoxskills/guide.htm) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, json, shell commands, guidance] <br>\n**Output Format:** [Markdown guidance with JSON API responses and saved JSON files] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Full responses are stored as JSON under a local linkfox session directory; large responses print a summary unless inline output is requested.] <br>\n\n## Skill Version(s): <br>\n1.0.4 (source: 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>\n\nArchive v1.0.3: 4 files, 12402 bytes\n\nFiles: references/api.md (4749b), scripts/mpstats_ozon_product_search.py (12831b), SKILL.md (9109b), _meta.json (154b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-product-search\ndescription: MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词或 SKU 发现或反查商品，也应触发此技能。\n---\n\n# MPSTATS Ozon Product Search\n\nThis skill searches Ozon (Russia) products in the MPSTATS analytics database by Russian keyword or SKU list. It is the **entry point** for Ozon product discovery and competitor lookup — downstream drill-downs (brand/category/seller/detail/trend) typically start from the IDs returned here.\n\n## Core Concepts\n\n**MPSTATS Ozon coverage**: Ozon is Russia's largest general-category marketplace. MPSTATS indexes Ozon product listings and sales history. This endpoint returns the **basic identity card only** — 10 fields: `productId` / `title` / `productPageUrl` / `imageUrl` / `brand` / `brandId` / `sellerName` / `sellerId` plus `sourceType` / `sourceTool`. Per-SKU price / sales / rating / stock / turnover / ranking are **not** returned here — the backend `OzonProductSearchItem` DTO is intentionally narrow. For those metrics, chain into `mpstats-ozon-product-detail` (batch full card, 36 fields) or the `brand/category/seller-products` drill-downs (39 fields).\n\n**Language requirement**: Keywords must be in **Russian** (Cyrillic) — or the Latin-script form actually used on the Ozon storefront. If the user supplies an English or Chinese keyword, translate it to Russian first and note the translation.\n\n**At-least-one input rule**: The input schema marks both filters as optional, but the tool's business rule requires at least one of `keyword` / `productIds` to be supplied. The two can be combined to narrow results. For brand- or seller-scoped discovery, use `mpstats-ozon-brand-products` / `mpstats-ozon-seller-products` instead.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| keyword | string | conditional | Russian search keyword, e.g., `кроссовки` (sneakers) |\n| productIds | array<integer\\|string> | conditional | Ozon SKU list |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; defaults to one year ago |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; defaults to yesterday, **cannot** be today or future |\n\nAt least one of `keyword` / `productIds` must be supplied. The endpoint returns at most ~36 records in a single call (an upstream-acknowledged cap), and there are no pagination / sort / filter inputs — narrow via keyword/SKU and date window instead.\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/productSearch`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_product_search.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗积分；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-mpstats-ozon-product-search-<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. Keyword search — sneakers in Russian**\n```json\n{\"keyword\": \"кроссовки\"}\n```\n\n**2. SKU batch reverse lookup**\n```json\n{\"productIds\": [1786874757, 151623766, 142257239]}\n```\n\n**3. Dated window for period-specific search**\n```json\n{\"keyword\": \"футболка\", \"startDate\": \"2025-02-01\", \"endDate\": \"2025-02-28\"}\n```\n\n## How to Chain with Other Ozon Skills\n\n1. **Keyword → drill-down**: Search → pick `productId` → call `mpstats-ozon-product-detail` (batch metrics) or `mpstats-ozon-product-trend` (single-SKU time-series).\n2. **Brand drill-down**: For brand-scoped product listings with full metrics, call `mpstats-ozon-brand-products` directly with the brand display name.\n3. **Seller drill-down**: For seller-scoped product listings with full metrics, call `mpstats-ozon-seller-products` directly with the seller ID.\n\n## Display Rules\n\n1. **Lead with identity columns** — this endpoint returns only 10 identity fields. Headline the table with `productId`, `title`, `brand`, `sellerName`; include `productPageUrl` / `imageUrl` as secondary columns. Do **not** add price / sales / rating / stock columns — they are not in the response.\n2. **Russian titles** — preserve the original Russian title; optionally offer an English or Chinese translation on user request.\n3. **Result count** — the endpoint returns at most ~36 records and has no pagination. If `total` exceeds what was returned, suggest narrowing the keyword/SKU set or date window rather than asking for more pages.\n4. **Route to drill-downs for any business metric** — business metrics are never in this response. If the user asks for sales / price / rating / stock / turnover / ranking, **always** route to `mpstats-ozon-product-detail` (single or batch) or the `*-products` drill-downs. Do not fabricate or estimate from identity fields.\n5. **Error handling** — when `code` / `errcode` is non-200, explain the reason from `msg` / `errmsg` and suggest adjusting inputs (supply at least one of `keyword` / `productIds`, use Russian, narrow date range).\n\n## Important Limitations\n\n- **At least one of `keyword` / `productIds` required** — empty payloads are rejected by the tool's business rule even though `required` is empty in inputSchema.\n- **Russian / Latin only** — non-Russian keywords generally return empty results.\n- **Date range** — `endDate` cannot be today or a future date; data is T-1.\n- **Hard result cap** — upstream returns at most ~36 records per call and exposes no pagination/sort/filter. Cannot be bypassed; narrow the query instead.\n- **No business metrics** — price / sales / rating / stock / turnover / ranking are **not** in this endpoint's response at all. The backend `OzonProductSearchItem` DTO declares exactly 10 identity fields. This is a hard contract, not a sparse payload — do not assume missing metric fields could be filled in by re-calling with different dates.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Ozon product discovery / identity resolution:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Search Ozon for sneakers / headphones / ...\" | Keyword discovery |\n| \"I have a list of Ozon SKUs, pull their names\" | Batch SKU reverse lookup |\n| \"Translate this keyword to Russian and search Ozon\" | Cross-language discovery |\n\n**Not applicable** — Needs beyond discovery:\n\n- Reliable per-SKU sales / revenue / stock / rating metrics → use `mpstats-ozon-product-detail` (batch card) or the `*-products` drill-down skills.\n- Brand-scoped product listing → use `mpstats-ozon-brand-products` directly.\n- Seller-scoped product listing → use `mpstats-ozon-seller-products` directly.\n- Time-series trend for a single SKU → use `mpstats-ozon-product-trend`.\n- Wildberries or other non-Ozon Russian marketplaces → not covered here.\n- Category-tree navigation / Russian category path lookup → use `mpstats-ozon-category-products` with a known path.\n\n**Boundary judgment**: If the user wants to **find or identify** Ozon products, start here. If they already have an ID or a dimension (brand / category / seller) and want **metrics** under it, go to the corresponding drill-down skill directly.\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-product-search\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1783066891219\n}\n\nFile v1.0.3:references/api.md\n\n# MPSTATS Ozon 商品搜索 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_TOOL_GATEWAY}/mpstats/ozon/productSearch`\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）。以下字段与后端 `OzonItemSearchRequest` DTO 一致（同步日期 2026-05-27）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| keyword | string | 二选一 | 俄语搜索关键词，例如 `кроссовки`（跑鞋） |\n| productIds | array | 二选一 | Ozon 商品 SKU 列表（整数或字符串） |\n| startDate | string | 否 | 统计起始日，格式 `YYYY-MM-DD`；留空时按一年前；最晚可选昨日 |\n| endDate | string | 否 | 统计结束日，格式 `YYYY-MM-DD`；留空时按昨天；最晚可选昨日 |\n\n> **二选一约束**：`keyword` / `productIds` 至少传一个，全部为空时请求会被拒绝。\n>\n> **无分页/排序/筛选**：上游单次最多返回约 36 条记录（官方上限）。底层固定按 startRow=0、endRow=100、空 sortModel/filterModel 调用，不再暴露 `page` / `pageSize` / `sortField` / `sortDirection` / `filters` 入参；如需更精确结果请收窄 keyword/SKU 或日期窗口。\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[*] 商品对象字段（10 个）\n\n按后端 `OzonProductSearchItem` DTO 定义（同步日期 2026-05-11）。**search 端点为身份解析用途，不返回价/销/评/库存/周转/排名等业务指标**——这是硬契约，不是 sparse payload。如果需要那些指标：\n\n- 单/批 SKU 全量卡：改用 `productDetail`（36 字段，含价格、销量、收入、周期对比等）\n- 维度下钻：改用 `brandProducts` / `categoryProducts` / `sellerProducts`（39 字段全量商品卡）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| productPageUrl | string | 商品页 URL |\n| imageUrl | string | 主图 URL |\n| brand | string | 品牌名 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| sourceType | string | 数据源标识，恒为 `ozon` |\n| sourceTool | string | 来源工具名，恒为 `MPSTATS-Ozon商品搜索` |\n\n## 错误码\n\n正常情况下，HTTP 状态码为 200，业务成功与否通过 `code` / `errcode` 区分（`200` 成功）。\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 正常解析 `products` 字段 |\n| 401 | 认证失败 | 检查请求头 `Authorization` 是否正确携带 API Key |\n| 其他非 200 值 | 业务异常 | 查看 `errmsg` / `msg` 获取具体原因；常见为 keyword/productIds 均缺失、日期超过昨日、非俄语关键词等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/productSearch \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"кроссовки\"\n  }'\n```\n\n## 响应示例（简略）\n\n```json\n{\n  \"code\": \"200\",\n  \"msg\": \"ok\",\n  \"total\": 8721,\n  \"products\": [\n    {\n      \"productId\": 1786874757,\n      \"title\": \"Кроссовки мужские ...\",\n      \"brand\": \"Nike\",\n      \"sellerName\": \"ООО Ромашка\",\n      \"sellerId\": 3628678,\n      \"imageUrl\": \"https://...\",\n      \"productPageUrl\": \"https://www.ozon.ru/product/...\"\n    }\n  ],\n  \"costToken\": 1\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-product-search\",\n  \"sentiment\": \"POSITIVE\",\n  \"category\": \"OTHER\",\n  \"content\": \"User successfully located Ozon SKUs from a Russian keyword.\"\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.2: 4 files, 12383 bytes\n\nFiles: references/api.md (4750b), scripts/mpstats_ozon_product_search.py (12833b), SKILL.md (9109b), _meta.json (154b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-product-search\ndescription: MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词或 SKU 发现或反查商品，也应触发此技能。\n---\n\n# MPSTATS Ozon Product Search\n\nThis skill searches Ozon (Russia) products in the MPSTATS analytics database by Russian keyword or SKU list. It is the **entry point** for Ozon product discovery and competitor lookup — downstream drill-downs (brand/category/seller/detail/trend) typically start from the IDs returned here.\n\n## Core Concepts\n\n**MPSTATS Ozon coverage**: Ozon is Russia's largest general-category marketplace. MPSTATS indexes Ozon product listings and sales history. This endpoint returns the **basic identity card only** — 10 fields: `productId` / `title` / `productPageUrl` / `imageUrl` / `brand` / `brandId` / `sellerName` / `sellerId` plus `sourceType` / `sourceTool`. Per-SKU price / sales / rating / stock / turnover / ranking are **not** returned here — the backend `OzonProductSearchItem` DTO is intentionally narrow. For those metrics, chain into `mpstats-ozon-product-detail` (batch full card, 36 fields) or the `brand/category/seller-products` drill-downs (39 fields).\n\n**Language requirement**: Keywords must be in **Russian** (Cyrillic) — or the Latin-script form actually used on the Ozon storefront. If the user supplies an English or Chinese keyword, translate it to Russian first and note the translation.\n\n**At-least-one input rule**: The input schema marks both filters as optional, but the tool's business rule requires at least one of `keyword` / `productIds` to be supplied. The two can be combined to narrow results. For brand- or seller-scoped discovery, use `mpstats-ozon-brand-products` / `mpstats-ozon-seller-products` instead.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| keyword | string | conditional | Russian search keyword, e.g., `кроссовки` (sneakers) |\n| productIds | array<integer\\|string> | conditional | Ozon SKU list |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; defaults to one year ago |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; defaults to yesterday, **cannot** be today or future |\n\nAt least one of `keyword` / `productIds` must be supplied. The endpoint returns at most ~36 records in a single call (an upstream-acknowledged cap), and there are no pagination / sort / filter inputs — narrow via keyword/SKU and date window instead.\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/productSearch`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_product_search.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗积分；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd>/linkfox/<YYYY-MM-DD>/<session>/data/linkfox-mpstats-ozon-product-search-<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. Keyword search — sneakers in Russian**\n```json\n{\"keyword\": \"кроссовки\"}\n```\n\n**2. SKU batch reverse lookup**\n```json\n{\"productIds\": [1786874757, 151623766, 142257239]}\n```\n\n**3. Dated window for period-specific search**\n```json\n{\"keyword\": \"футболка\", \"startDate\": \"2025-02-01\", \"endDate\": \"2025-02-28\"}\n```\n\n## How to Chain with Other Ozon Skills\n\n1. **Keyword → drill-down**: Search → pick `productId` → call `mpstats-ozon-product-detail` (batch metrics) or `mpstats-ozon-product-trend` (single-SKU time-series).\n2. **Brand drill-down**: For brand-scoped product listings with full metrics, call `mpstats-ozon-brand-products` directly with the brand display name.\n3. **Seller drill-down**: For seller-scoped product listings with full metrics, call `mpstats-ozon-seller-products` directly with the seller ID.\n\n## Display Rules\n\n1. **Lead with identity columns** — this endpoint returns only 10 identity fields. Headline the table with `productId`, `title`, `brand`, `sellerName`; include `productPageUrl` / `imageUrl` as secondary columns. Do **not** add price / sales / rating / stock columns — they are not in the response.\n2. **Russian titles** — preserve the original Russian title; optionally offer an English or Chinese translation on user request.\n3. **Result count** — the endpoint returns at most ~36 records and has no pagination. If `total` exceeds what was returned, suggest narrowing the keyword/SKU set or date window rather than asking for more pages.\n4. **Route to drill-downs for any business metric** — business metrics are never in this response. If the user asks for sales / price / rating / stock / turnover / ranking, **always** route to `mpstats-ozon-product-detail` (single or batch) or the `*-products` drill-downs. Do not fabricate or estimate from identity fields.\n5. **Error handling** — when `code` / `errcode` is non-200, explain the reason from `msg` / `errmsg` and suggest adjusting inputs (supply at least one of `keyword` / `productIds`, use Russian, narrow date range).\n\n## Important Limitations\n\n- **At least one of `keyword` / `productIds` required** — empty payloads are rejected by the tool's business rule even though `required` is empty in inputSchema.\n- **Russian / Latin only** — non-Russian keywords generally return empty results.\n- **Date range** — `endDate` cannot be today or a future date; data is T-1.\n- **Hard result cap** — upstream returns at most ~36 records per call and exposes no pagination/sort/filter. Cannot be bypassed; narrow the query instead.\n- **No business metrics** — price / sales / rating / stock / turnover / ranking are **not** in this endpoint's response at all. The backend `OzonProductSearchItem` DTO declares exactly 10 identity fields. This is a hard contract, not a sparse payload — do not assume missing metric fields could be filled in by re-calling with different dates.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Ozon product discovery / identity resolution:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Search Ozon for sneakers / headphones / ...\" | Keyword discovery |\n| \"I have a list of Ozon SKUs, pull their names\" | Batch SKU reverse lookup |\n| \"Translate this keyword to Russian and search Ozon\" | Cross-language discovery |\n\n**Not applicable** — Needs beyond discovery:\n\n- Reliable per-SKU sales / revenue / stock / rating metrics → use `mpstats-ozon-product-detail` (batch card) or the `*-products` drill-down skills.\n- Brand-scoped product listing → use `mpstats-ozon-brand-products` directly.\n- Seller-scoped product listing → use `mpstats-ozon-seller-products` directly.\n- Time-series trend for a single SKU → use `mpstats-ozon-product-trend`.\n- Wildberries or other non-Ozon Russian marketplaces → not covered here.\n- Category-tree navigation / Russian category path lookup → use `mpstats-ozon-category-products` with a known path.\n\n**Boundary judgment**: If the user wants to **find or identify** Ozon products, start here. If they already have an ID or a dimension (brand / category / seller) and want **metrics** under it, go to the corresponding drill-down skill directly.\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-product-search\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1783061536798\n}\n\nFile v1.0.2:references/api.md\n\n# MPSTATS Ozon 商品搜索 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_AGENT_API_URL}/mpstats/ozon/productSearch`\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）。以下字段与后端 `OzonItemSearchRequest` DTO 一致（同步日期 2026-05-27）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| keyword | string | 二选一 | 俄语搜索关键词，例如 `кроссовки`（跑鞋） |\n| productIds | array | 二选一 | Ozon 商品 SKU 列表（整数或字符串） |\n| startDate | string | 否 | 统计起始日，格式 `YYYY-MM-DD`；留空时按一年前；最晚可选昨日 |\n| endDate | string | 否 | 统计结束日，格式 `YYYY-MM-DD`；留空时按昨天；最晚可选昨日 |\n\n> **二选一约束**：`keyword` / `productIds` 至少传一个，全部为空时请求会被拒绝。\n>\n> **无分页/排序/筛选**：上游单次最多返回约 36 条记录（官方上限）。底层固定按 startRow=0、endRow=100、空 sortModel/filterModel 调用，不再暴露 `page` / `pageSize` / `sortField` / `sortDirection` / `filters` 入参；如需更精确结果请收窄 keyword/SKU 或日期窗口。\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[*] 商品对象字段（10 个）\n\n按后端 `OzonProductSearchItem` DTO 定义（同步日期 2026-05-11）。**search 端点为身份解析用途，不返回价/销/评/库存/周转/排名等业务指标**——这是硬契约，不是 sparse payload。如果需要那些指标：\n\n- 单/批 SKU 全量卡：改用 `productDetail`（36 字段，含价格、销量、收入、周期对比等）\n- 维度下钻：改用 `brandProducts` / `categoryProducts` / `sellerProducts`（39 字段全量商品卡）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| productPageUrl | string | 商品页 URL |\n| imageUrl | string | 主图 URL |\n| brand | string | 品牌名 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| sourceType | string | 数据源标识，恒为 `ozon` |\n| sourceTool | string | 来源工具名，恒为 `MPSTATS-Ozon商品搜索` |\n\n## 错误码\n\n正常情况下，HTTP 状态码为 200，业务成功与否通过 `code` / `errcode` 区分（`200` 成功）。\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 正常解析 `products` 字段 |\n| 401 | 认证失败 | 检查请求头 `Authorization` 是否正确携带 API Key |\n| 其他非 200 值 | 业务异常 | 查看 `errmsg` / `msg` 获取具体原因；常见为 keyword/productIds 均缺失、日期超过昨日、非俄语关键词等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/productSearch \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"кроссовки\"\n  }'\n```\n\n## 响应示例（简略）\n\n```json\n{\n  \"code\": \"200\",\n  \"msg\": \"ok\",\n  \"total\": 8721,\n  \"products\": [\n    {\n      \"productId\": 1786874757,\n      \"title\": \"Кроссовки мужские ...\",\n      \"brand\": \"Nike\",\n      \"sellerName\": \"ООО Ромашка\",\n      \"sellerId\": 3628678,\n      \"imageUrl\": \"https://...\",\n      \"productPageUrl\": \"https://www.ozon.ru/product/...\"\n    }\n  ],\n  \"costToken\": 1\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-product-search\",\n  \"sentiment\": \"POSITIVE\",\n  \"category\": \"OTHER\",\n  \"content\": \"User successfully located Ozon SKUs from a Russian keyword.\"\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: 5 files, 9521 bytes\n\nFiles: references/api.md (4741b), scripts/mpstats_ozon_product_search.py (3230b), skill-card.md (2309b), SKILL.md (8350b), _meta.json (154b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-product-search\nversion: 1.0.1\ncategory: product-sourcing\ndescription: MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词、SKU、品牌名或卖家名在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、Ozon 品牌搜品、Ozon 卖家搜品、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search, Ozon brand/seller search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词/品牌/卖家发现或反查商品，也应触发此技能。\n---\n\n# MPSTATS Ozon Product Search\n\nThis skill searches Ozon (Russia) products in the MPSTATS analytics database by Russian keyword, SKU list, brand name, or seller name. It is the **entry point** for Ozon product discovery and competitor lookup — downstream drill-downs (brand/category/seller/detail/trend) typically start from the IDs returned here.\n\n## Core Concepts\n\n**MPSTATS Ozon coverage**: Ozon is Russia's largest general-category marketplace. MPSTATS indexes Ozon product listings and sales history. This endpoint returns the **basic identity card only** — 10 fields: `productId` / `title` / `productPageUrl` / `imageUrl` / `brand` / `brandId` / `sellerName` / `sellerId` plus `sourceType` / `sourceTool`. Per-SKU price / sales / rating / stock / turnover / ranking are **not** returned here — the backend `OzonProductSearchItem` DTO is intentionally narrow. For those metrics, chain into `mpstats-ozon-product-detail` (batch full card, 36 fields) or the `brand/category/seller-products` drill-downs (39 fields).\n\n**Language requirement**: Keywords, brand names, and seller names must be in **Russian** (Cyrillic) — or the Latin-script form actually used on the Ozon storefront (e.g., `adidas`). If the user supplies an English or Chinese keyword, translate it to Russian first and note the translation.\n\n**At-least-one input rule**: The input schema marks all four filters as optional, but the tool's business rule requires at least one of `keyword` / `productIds` / `brandNames` / `sellerNames` to be supplied. The four can be combined to narrow results.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| keyword | string | conditional | Russian search keyword, e.g., `кроссовки` (sneakers) |\n| productIds | array<integer\\|string> | conditional | Ozon SKU list |\n| brandNames | array<string> | conditional | Brand display names (Russian or Latin) |\n| sellerNames | array<string> | conditional | Seller display names (Russian) |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; defaults to one year ago |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; defaults to yesterday, **cannot** be today or future |\n| page | integer | no | Page number, starts at 1 |\n| pageSize | integer | no | Rows per page, 1-100, default 100 |\n\nAt least one of `keyword` / `productIds` / `brandNames` / `sellerNames` must be supplied.\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_product_search.py` directly for ad-hoc queries.\n\n## Usage Examples\n\n**1. Keyword search — sneakers in Russian**\n```json\n{\"keyword\": \"кроссовки\", \"pageSize\": 50}\n```\n\n**2. SKU batch reverse lookup**\n```json\n{\"productIds\": [1786874757, 151623766, 142257239]}\n```\n\n**3. Brand-scoped discovery**\n```json\n{\"brandNames\": [\"adidas\", \"Xiaomi\"], \"keyword\": \"наушники\"}\n```\n\n**4. Seller-scoped discovery**\n```json\n{\"sellerNames\": [\"ООО Ромашка\"], \"pageSize\": 100}\n```\n\n**5. Dated window for period-specific search**\n```json\n{\"keyword\": \"футболка\", \"startDate\": \"2025-02-01\", \"endDate\": \"2025-02-28\"}\n```\n\n## How to Chain with Other Ozon Skills\n\n1. **Keyword → drill-down**: Search → pick `productId` → call `mpstats-ozon-product-detail` (batch metrics) or `mpstats-ozon-product-trend` (single-SKU time-series).\n2. **Brand discovery → brand drill-down**: Use this skill to confirm the exact brand display name, then call `mpstats-ozon-brand-products` for full sales / stock / rating metrics.\n3. **Seller scouting → seller drill-down**: Confirm the seller via this skill, read the `sellerId` from the result, then call `mpstats-ozon-seller-products` for the seller's full SKU map.\n\n## Display Rules\n\n1. **Lead with identity columns** — this endpoint returns only 10 identity fields. Headline the table with `productId`, `title`, `brand`, `sellerName`; include `productPageUrl` / `imageUrl` as secondary columns. Do **not** add price / sales / rating / stock columns — they are not in the response.\n2. **Russian titles** — preserve the original Russian title; optionally offer an English or Chinese translation on user request.\n3. **Pagination** — when `total` exceeds the page size, tell the user the total count and suggest the next page or a narrower keyword.\n4. **Route to drill-downs for any business metric** — business metrics are never in this response. If the user asks for sales / price / rating / stock / turnover / ranking, **always** route to `mpstats-ozon-product-detail` (single or batch) or the `*-products` drill-downs. Do not fabricate or estimate from identity fields.\n5. **Error handling** — when `code` / `errcode` is non-200, explain the reason from `msg` / `errmsg` and suggest adjusting inputs (supply at least one of the four filters, use Russian, narrow date range).\n\n## Important Limitations\n\n- **At least one filter required** — empty payloads are rejected by the tool's business rule even though `required` is empty in inputSchema.\n- **Russian / Latin only** — non-Russian keywords generally return empty results.\n- **Date range** — `endDate` cannot be today or a future date; data is T-1.\n- **Result cap per page** — `pageSize` max is 100; paginate for larger sets.\n- **No business metrics** — price / sales / rating / stock / turnover / ranking are **not** in this endpoint's response at all. The backend `OzonProductSearchItem` DTO declares exactly 10 identity fields. This is a hard contract, not a sparse payload — do not assume missing metric fields could be filled in by re-calling with different dates.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Ozon product discovery / identity resolution:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Search Ozon for sneakers / headphones / ...\" | Keyword discovery |\n| \"I have a list of Ozon SKUs, pull their names\" | Batch SKU reverse lookup |\n| \"What does brand X sell on Ozon\" | Brand-scoped candidate listing |\n| \"What does seller Y sell on Ozon\" | Seller-scoped candidate listing |\n| \"Translate this keyword to Russian and search Ozon\" | Cross-language discovery |\n\n**Not applicable** — Needs beyond discovery:\n\n- Reliable per-SKU sales / revenue / stock / rating metrics → use `mpstats-ozon-product-detail` (batch card) or the `*-products` drill-down skills.\n- Time-series trend for a single SKU → use `mpstats-ozon-product-trend`.\n- Wildberries or other non-Ozon Russian marketplaces → not covered here.\n- Category-tree navigation / Russian category path lookup → use `mpstats-ozon-category-products` with a known path.\n\n**Boundary judgment**: If the user wants to **find or identify** Ozon products, start here. If they already have an ID or a dimension (brand / category / seller) and want **metrics** under it, go to the corresponding drill-down skill directly.\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-product-search\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1778762067261\n}\n\nFile v1.0.1:references/api.md\n\n# MPSTATS Ozon 商品搜索 API 参考\n\n## 调用规范\n\n- **请求地址**：`https://tool-gateway.linkfox.com/mpstats/ozon/productSearch`\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）。以下字段与后端 `OzonItemSearchRequest` DTO 一致（同步日期 2026-05-11）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| keyword | string | 四选一 | 俄语搜索关键词，例如 `кроссовки`（跑鞋） |\n| productIds | array | 四选一 | Ozon 商品 SKU 列表（整数或字符串） |\n| brandNames | array<string> | 四选一 | 品牌名列表（俄语或拉丁拼写） |\n| sellerNames | array<string> | 四选一 | 卖家名列表（俄语） |\n| startDate | string | 否 | 统计起始日，格式 `YYYY-MM-DD`；留空时按一年前；最晚可选昨日 |\n| endDate | string | 否 | 统计结束日，格式 `YYYY-MM-DD`；留空时按昨天；最晚可选昨日 |\n| page | integer | 否 | 页码，从 1 开始 |\n| pageSize | integer | 否 | 每页条数，1-100，默认 100 |\n\n> **四选一约束**：`keyword` / `productIds` / `brandNames` / `sellerNames` 至少传一个，全部为空时请求会被拒绝。\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[*] 商品对象字段（10 个）\n\n按后端 `OzonProductSearchItem` DTO 定义（同步日期 2026-05-11）。**search 端点为身份解析用途，不返回价/销/评/库存/周转/排名等业务指标**——这是硬契约，不是 sparse payload。如果需要那些指标：\n\n- 单/批 SKU 全量卡：改用 `productDetail`（36 字段，含价格、销量、收入、周期对比等）\n- 维度下钻：改用 `brandProducts` / `categoryProducts` / `sellerProducts`（39 字段全量商品卡）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| productPageUrl | string | 商品页 URL |\n| imageUrl | string | 主图 URL |\n| brand | string | 品牌名 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| sourceType | string | 数据源标识，恒为 `ozon` |\n| sourceTool | string | 来源工具名，恒为 `MPSTATS-Ozon商品搜索` |\n\n## 错误码\n\n正常情况下，HTTP 状态码为 200，业务成功与否通过 `code` / `errcode` 区分（`200` 成功）。\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 正常解析 `products` 字段 |\n| 401 | 认证失败 | 检查请求头 `Authorization` 是否正确携带 API Key |\n| 其他非 200 值 | 业务异常 | 查看 `errmsg` / `msg` 获取具体原因；常见为四选一参数缺失、日期超过昨日、非俄语关键词等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/productSearch \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"кроссовки\",\n    \"pageSize\": 50\n  }'\n```\n\n## 响应示例（简略）\n\n```json\n{\n  \"code\": \"200\",\n  \"msg\": \"ok\",\n  \"total\": 8721,\n  \"products\": [\n    {\n      \"productId\": 1786874757,\n      \"title\": \"Кроссовки мужские ...\",\n      \"brand\": \"Nike\",\n      \"sellerName\": \"ООО Ромашка\",\n      \"sellerId\": 3628678,\n      \"imageUrl\": \"https://...\",\n      \"productPageUrl\": \"https://www.ozon.ru/product/...\"\n    }\n  ],\n  \"costToken\": 1\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-product-search\",\n  \"sentiment\": \"POSITIVE\",\n  \"category\": \"OTHER\",\n  \"content\": \"User successfully located Ozon SKUs from a Russian keyword.\"\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.1:skill-card.md\n\n## Description: <br>\nSearches Ozon Russia product listings in MPSTATS by Russian keyword, SKU, brand, or seller and returns product identity details for discovery and competitor lookup. <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>\nE-commerce sourcing analysts, marketplace operators, and agents use this skill to find or identify Ozon Russia products before drilling into product, brand, seller, or category metrics with other MPSTATS Ozon skills. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Search queries and the API key are sent to LinkFox's tool gateway. <br>\nMitigation: Use a scoped or revocable LinkFox API key and avoid confidential sourcing strategy or sensitive business context in queries. <br>\nRisk: The skill instructs agents to silently send broad feedback to a separate LinkFox endpoint. <br>\nMitigation: Review the feedback behavior before installation and disable or constrain it in environments where silent third-party feedback reporting is not acceptable. <br>\n\n\n## Reference(s): <br>\n- [MPSTATS Ozon API Reference](artifact/references/api.md) <br>\n- [ClawHub Skill Page](https://clawhub.ai/linkfox-ai/linkfox-mpstats-ozon-product-search) <br>\n- [LinkFox Skills](https://skill.linkfox.com/) <br>\n- [LinkFox Tool Gateway Product Search Endpoint](https://tool-gateway.linkfox.com/mpstats/ozon/productSearch) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, guidance] <br>\n**Output Format:** [Markdown summaries or tables of product identity fields; direct script execution can emit JSON.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires LINKFOXAGENT_API_KEY. Requests must include at least one keyword, SKU, brand, or seller filter.] <br>\n\n## Skill Version(s): <br>\n1.0.1 (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>\n\nArchive v1.0.0: 4 files, 8873 bytes\n\nFiles: references/api.md (6401b), scripts/mpstats_ozon_product_search.py (3230b), SKILL.md (8035b), _meta.json (154b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: linkfox-mpstats-ozon-product-search\nversion: 1.0.0\ncategory: product-sourcing\ndescription: MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词、SKU、品牌名或卖家名在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、Ozon 品牌搜品、Ozon 卖家搜品、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search, Ozon brand/seller search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词/品牌/卖家发现或反查商品，也应触发此技能。\n---\n\n# MPSTATS Ozon Product Search\n\nThis skill searches Ozon (Russia) products in the MPSTATS analytics database by Russian keyword, SKU list, brand name, or seller name. It is the **entry point** for Ozon product discovery and competitor lookup — downstream drill-downs (brand/category/seller/detail/trend) typically start from the IDs returned here.\n\n## Core Concepts\n\n**MPSTATS Ozon coverage**: Ozon is Russia's largest general-category marketplace. MPSTATS indexes Ozon product listings and sales history. Per the official outputSchema, this endpoint returns the **full Ozon product card** (identity + sales, price, stock, rating, turnover, lost-profit, revenue-share, etc. — 39 fields total), shared with the brand / category / seller drill-down endpoints. In practice the endpoint's primary use is **discovery** — resolving a keyword / SKU / brand / seller into products — and runtime may leave metric fields sparse depending on coverage and the `startDate/endDate` window.\n\n**Language requirement**: Keywords, brand names, and seller names must be in **Russian** (Cyrillic) — or the Latin-script form actually used on the Ozon storefront (e.g., `adidas`). If the user supplies an English or Chinese keyword, translate it to Russian first and note the translation.\n\n**At-least-one input rule**: The input schema marks all four filters as optional, but the tool's business rule requires at least one of `keyword` / `productIds` / `brandNames` / `sellerNames` to be supplied. The four can be combined to narrow results.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| keyword | string | conditional | Russian search keyword, e.g., `кроссовки` (sneakers) |\n| productIds | array<integer\\|string> | conditional | Ozon SKU list |\n| brandNames | array<string> | conditional | Brand display names (Russian or Latin) |\n| sellerNames | array<string> | conditional | Seller display names (Russian) |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; defaults to one year ago |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; defaults to yesterday, **cannot** be today or future |\n| page | integer | no | Page number, starts at 1 |\n| pageSize | integer | no | Rows per page, 1-100, default 100 |\n\nAt least one of `keyword` / `productIds` / `brandNames` / `sellerNames` must be supplied.\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_product_search.py` directly for ad-hoc queries.\n\n## Usage Examples\n\n**1. Keyword search — sneakers in Russian**\n```json\n{\"keyword\": \"кроссовки\", \"pageSize\": 50}\n```\n\n**2. SKU batch reverse lookup**\n```json\n{\"productIds\": [1786874757, 151623766, 142257239]}\n```\n\n**3. Brand-scoped discovery**\n```json\n{\"brandNames\": [\"adidas\", \"Xiaomi\"], \"keyword\": \"наушники\"}\n```\n\n**4. Seller-scoped discovery**\n```json\n{\"sellerNames\": [\"ООО Ромашка\"], \"pageSize\": 100}\n```\n\n**5. Dated window for period-specific search**\n```json\n{\"keyword\": \"футболка\", \"startDate\": \"2025-02-01\", \"endDate\": \"2025-02-28\"}\n```\n\n## How to Chain with Other Ozon Skills\n\n1. **Keyword → drill-down**: Search → pick `productId` → call `mpstats-ozon-product-detail` (batch metrics) or `mpstats-ozon-product-trend` (single-SKU time-series).\n2. **Brand discovery → brand drill-down**: Use this skill to confirm the exact brand display name, then call `mpstats-ozon-brand-products` for full sales / stock / rating metrics.\n3. **Seller scouting → seller drill-down**: Confirm the seller via this skill, read the `sellerId` from the result, then call `mpstats-ozon-seller-products` for the seller's full SKU map.\n\n## Display Rules\n\n1. **Lead with identity columns** — `productId`, `title`, `brand`, `sellerName` should headline the table since this endpoint is primarily a discovery step. Add `price` / `monthlySalesUnits` / `rating` only when those fields are actually populated in the response.\n2. **Russian titles** — preserve the original Russian title; optionally offer an English or Chinese translation on user request.\n3. **Pagination** — when `total` exceeds the page size, tell the user the total count and suggest the next page or a narrower keyword.\n4. **Do not extrapolate on null metrics** — a missing `monthlySalesUnits` here is not \"zero sales\"; if the user wants hard numbers, route to `mpstats-ozon-product-detail` (single SKU or batch card) or the `*-products` drill-down endpoints.\n5. **Error handling** — when `code` / `errcode` is non-200, explain the reason from `msg` / `errmsg` and suggest adjusting inputs (supply at least one of the four filters, use Russian, narrow date range).\n\n## Important Limitations\n\n- **At least one filter required** — empty payloads are rejected by the tool's business rule even though `required` is empty in inputSchema.\n- **Russian / Latin only** — non-Russian keywords generally return empty results.\n- **Date range** — `endDate` cannot be today or a future date; data is T-1.\n- **Result cap per page** — `pageSize` max is 100; paginate for larger sets.\n- **Metric-field sparsity** — the schema declares a full product card, but this endpoint often returns only identity fields. Treat price / sales / rating here as best-effort, not contractual.\n\n## User Expression & Scenario Quick Reference\n\n**Applicable** — Ozon product discovery / identity resolution:\n\n| User Says | Scenario |\n|-----------|----------|\n| \"Search Ozon for sneakers / headphones / ...\" | Keyword discovery |\n| \"I have a list of Ozon SKUs, pull their names\" | Batch SKU reverse lookup |\n| \"What does brand X sell on Ozon\" | Brand-scoped candidate listing |\n| \"What does seller Y sell on Ozon\" | Seller-scoped candidate listing |\n| \"Translate this keyword to Russian and search Ozon\" | Cross-language discovery |\n\n**Not applicable** — Needs beyond discovery:\n\n- Reliable per-SKU sales / revenue / stock / rating metrics → use `mpstats-ozon-product-detail` (batch card) or the `*-products` drill-down skills.\n- Time-series trend for a single SKU → use `mpstats-ozon-product-trend`.\n- Wildberries or other non-Ozon Russian marketplaces → not covered here.\n- Category-tree navigation / Russian category path lookup → use `mpstats-ozon-category-products` with a known path.\n\n**Boundary judgment**: If the user wants to **find or identify** Ozon products, start here. If they already have an ID or a dimension (brand / category / seller) and want **metrics** under it, go to the corresponding drill-down skill directly.\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-product-search\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1778046005128\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/productSearch`\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| keyword | string | 四选一 | 俄语搜索关键词，例如 `кроссовки`（跑鞋） |\n| productIds | array | 四选一 | Ozon 商品 SKU 列表（整数或字符串） |\n| brandNames | array<string> | 四选一 | 品牌名列表（俄语或拉丁拼写） |\n| sellerNames | array<string> | 四选一 | 卖家名列表（俄语） |\n| startDate | string | 否 | 统计起始日，格式 `YYYY-MM-DD`；留空时按一年前；最晚可选昨日 |\n| endDate | string | 否 | 统计结束日，格式 `YYYY-MM-DD`；留空时按昨天；最晚可选昨日 |\n| page | integer | 否 | 页码，从 1 开始 |\n| pageSize | integer | 否 | 每页条数，1-100，默认 100 |\n\n> **四选一约束**：`keyword` / `productIds` / `brandNames` / `sellerNames` 至少传一个，全部为空时请求会被拒绝。\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_productSearch`，同步日期 2026-05-06）。该 schema 与 `brandProducts` / `categoryProducts` / `sellerProducts` 共享同一套商品卡结构；本端点以**发现为主**，部分度量字段在运行时可能为 null / 不填充。\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正常情况下，HTTP 状态码为 200，业务成功与否通过 `code` / `errcode` 区分（`200` 成功）。\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 正常解析 `products` 字段 |\n| 401 | 认证失败 | 检查请求头 `Authorization` 是否正确携带 API Key |\n| 其他非 200 值 | 业务异常 | 查看 `errmsg` / `msg` 获取具体原因；常见为四选一参数缺失、日期超过昨日、非俄语关键词等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/productSearch \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"кроссовки\",\n    \"pageSize\": 50\n  }'\n```\n\n## 响应示例（简略）\n\n```json\n{\n  \"code\": \"200\",\n  \"msg\": \"ok\",\n  \"total\": 8721,\n  \"products\": [\n    {\n      \"productId\": 1786874757,\n      \"title\": \"Кроссовки мужские ...\",\n      \"brand\": \"Nike\",\n      \"sellerName\": \"ООО Ромашка\",\n      \"sellerId\": 3628678,\n      \"imageUrl\": \"https://...\",\n      \"productPageUrl\": \"https://www.ozon.ru/product/...\"\n    }\n  ],\n  \"costToken\": 1\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-product-search\",\n  \"sentiment\": \"POSITIVE\",\n  \"category\": \"OTHER\",\n  \"content\": \"User successfully located Ozon SKUs from a Russian keyword.\"\n}\n```\n\n**字段说明：**\n- `skillName`：使用本 skill 的 YAML `name`\n- `sentiment`：`POSITIVE` / `NEUTRAL` / `NEGATIVE` 三选一\n- `category`：`BUG` / `COMPLAINT` / `SUGGESTION` / `OTHER` 四选一\n- `content`：用户表达、实际现象、为什么算问题或好评","readmeExcerpt":"Skill: MPSTATS-Ozon商品搜索 Owner: linkfox-ai Summary: MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词或 SKU 发现或反查商品，也应触发此技能。 Tags: latest:1.0.8 Version history: v1.","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\"keyword\": \"кроссовки\"}"},{"language":"json","snippet":"{\"productIds\": [1786874757, 151623766, 142257239]}"},{"language":"json","snippet":"{\"keyword\": \"футболка\", \"startDate\": \"2025-02-01\", \"endDate\": \"2025-02-28\"}"},{"language":"bash","snippet":"curl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/productSearch \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{"},{"language":"bash","snippet":"curl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/productSearch \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"кроссовки\"\n  }'"},{"language":"json","snippet":"{\n  \"code\": \"200\",\n  \"msg\": \"ok\",\n  \"total\": 8721,\n  \"products\": [\n    {\n      \"productId\": 1786874757,\n      \"title\": \"Кроссовки мужские ...\",\n      \"brand\": \"Nike\",\n      \"sellerName\": \"ООО Ромашка\",\n      \"sellerId\": 3628678,\n      \"imageUrl\": \"https://...\",\n      \"productPageUrl\": \"https://www.ozon.ru/product/...\"\n    }\n  ],\n  \"costToken\": 1\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: linkfox-mpstats-ozon-product-search\ndescription: MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词或 SKU 发现或反查商品，也应触发此技能。\n---\n\n# MPSTATS Ozon Product Search\n\nThis skill searches Ozon (Russia) products in the MPSTATS analytics database by Russian keyword or SKU list. It is the **entry point** for Ozon product discovery and competitor lookup — downstream drill-downs (brand/category/seller/detail/trend) typically start from the IDs returned here.\n\n## Core Concepts\n\n**MPSTATS Ozon coverage**: Ozon is Russia's largest general-category marketplace. MPSTATS indexes Ozon product listings and sales history. This endpoint returns the **basic identity card only** — 10 fields: `productId` / `title` / `productPageUrl` / `imageUrl` / `brand` / `brandId` / `sellerName` / `sellerId` plus `sourceType` / `sourceTool`. Per-SKU price / sales / rating / stock / turnover / ranking are **not** returned here — the backend `OzonProductSearchItem` DTO is intentionally narrow. For those metrics, chain into `mpstats-ozon-product-detail` (batch full card, 36 fields) or the `brand/category/seller-products` drill-downs (39 fields).\n\n**Language requirement**: Keywords must be in **Russian** (Cyrillic) — or the Latin-script form actually used on the Ozon storefront. If the user supplies an English or Chinese keyword, translate it to Russian first and note the translation.\n\n**At-least-one input rule**: The input schema marks both filters as optional, but the tool's business rule requires at least one of `keyword` / `productIds` to be supplied. The two can be combined to narrow results. For brand- or seller-scoped discovery, use `mpstats-ozon-brand-products` / `mpstats-ozon-seller-products` instead.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| keyword | string | conditional | Russian search keyword, e.g., `кроссовки` (sneakers) |\n| productIds | array<integer\\|string> | conditional | Ozon SKU list |\n| startDate | string | no | Stats window start, `YYYY-MM-DD`; defaults to one year ago |\n| endDate | string | no | Stats window end, `YYYY-MM-DD`; defaults to yesterday, **cannot** be today or future |\n\nAt least one of `keyword` / `productIds` must be supplied. The endpoint returns at most ~36 records in a single call (an upstream-acknowledged cap), and there are no pagination / sort / filter inputs — narrow via keyword/SKU and date window instead.\n\n## 调用方式\n\n- **API 端点**：`POST /mpstats/ozon/productSearch`（完整参数/响应/错误码见 `references/api.md`）\n- **Python 脚本**：`python scripts/mpstats_ozon_product_search.py '<JSON 参数>' [--inline]`\n- **成本约束**：本工具会消耗算力；同一会话同一参数组合默认只调用一次，脚本带 24h 本地缓存。失败/空结果不得自动换关键词、翻页或改邮编连续试探；需要继续检索时先向用户说明会产生额外消耗。\n\n**输出策略（脚本默认行为）**：\n- **始终**将完整响应写入 `<cwd"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7dmc1t4j28hem1twwyav85p182pb1j\",\n  \"slug\": \"linkfox-mpstats-ozon-product-search\",\n  \"version\": \"1.0.8\",\n  \"publishedAt\": 1789363345324\n}"},{"path":"references/api.md","content":"# MPSTATS Ozon 商品搜索 API 参考\n\n## 调用规范\n\n- **请求地址**：`${LINKFOX_TOOL_GATEWAY}/mpstats/ozon/productSearch`\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）。以下字段与后端 `OzonItemSearchRequest` DTO 一致（同步日期 2026-05-27）。\n\n| 参数 | 类型 | 必填 | 说明 |\n|------|------|------|------|\n| keyword | string | 二选一 | 俄语搜索关键词，例如 `кроссовки`（跑鞋） |\n| productIds | array | 二选一 | Ozon 商品 SKU 列表（整数或字符串） |\n| startDate | string | 否 | 统计起始日，格式 `YYYY-MM-DD`；留空时按一年前；最晚可选昨日 |\n| endDate | string | 否 | 统计结束日，格式 `YYYY-MM-DD`；留空时按昨天；最晚可选昨日 |\n\n> **二选一约束**：`keyword` / `productIds` 至少传一个，全部为空时请求会被拒绝。\n>\n> **无分页/排序/筛选**：上游单次最多返回约 36 条记录（官方上限）。底层固定按 startRow=0、endRow=100、空 sortModel/filterModel 调用，不再暴露 `page` / `pageSize` / `sortField` / `sortDirection` / `filters` 入参；如需更精确结果请收窄 keyword/SKU 或日期窗口。\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[*] 商品对象字段（10 个）\n\n按后端 `OzonProductSearchItem` DTO 定义（同步日期 2026-05-11）。**search 端点为身份解析用途，不返回价/销/评/库存/周转/排名等业务指标**——这是硬契约，不是 sparse payload。如果需要那些指标：\n\n- 单/批 SKU 全量卡：改用 `productDetail`（36 字段，含价格、销量、收入、周期对比等）\n- 维度下钻：改用 `brandProducts` / `categoryProducts` / `sellerProducts`（39 字段全量商品卡）\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| productId | integer | SKU ID |\n| title | string | 商品名称（俄语） |\n| productPageUrl | string | 商品页 URL |\n| imageUrl | string | 主图 URL |\n| brand | string | 品牌名 |\n| brandId | integer | 品牌 ID |\n| sellerName | string | 卖家名 |\n| sellerId | integer | 卖家 ID |\n| sourceType | string | 数据源标识，恒为 `ozon` |\n| sourceTool | string | 来源工具名，恒为 `MPSTATS-Ozon商品搜索` |\n\n## 错误码\n\n正常情况下，HTTP 状态码为 200，业务成功与否通过 `code` / `errcode` 区分（`200` 成功）。\n\n| errcode | 含义 | 处理建议 |\n|---------|------|----------|\n| 200 | 成功 | 正常解析 `products` 字段 |\n| 401 | 认证失败 | HTTP 401 或 authorized error：按 SKILL.md 的 **## 解决认证和算力问题** 处理。 |\n| 402 | 算力或余额不足 | HTTP 402：按 SKILL.md 的 **## 解决认证和算力问题** 处理。 |\n| 其他非 200 值 | 业务异常 | 查看 `errmsg` / `msg` 获取具体原因；常见为 keyword/productIds 均缺失、日期超过昨日、非俄语关键词等 |\n\n## curl 示例\n\n```bash\ncurl -X POST https://tool-gateway.linkfox.com/mpstats/ozon/productSearch \\\n  -H \"Authorization: $LINKFOXAGENT_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyword\": \"кроссовки\"\n  }'\n```\n\n## 响应示例（简略）\n\n```json\n{\n  \"code\": \"200\",\n  \"msg\": \"ok\",\n  \"total\": 8721,\n  \"products\": [\n    {\n      \"productId\": 1786874757,\n      \"title\": \"Кроссовки мужские ...\",\n      \"brand\": \"Nike\",\n      \"sellerName\": \"ООО Ромашка\",\n      \"sellerId\": 3628678,\n      \"imageUrl\": \"https://...\",\n      \"productPageUrl\": \"https://www.ozon.ru/product/...\"\n    }\n  ],\n  \"costToken\": 1\n}\n```\n\n---\n\n## Feedback API\n\n> 该接口与上方工具接口不同，**请勿混用两个基础 URL**。\n\n- **POST** `https://"},{"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\nSearches MPSTATS data for Ozon Russia products by Russian keyword or SKU and returns product identity details such as product ID, title, brand, seller, page URL, and image URL.\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 commerce analysts, sellers, and agents use this skill to find or reverse-lookup Ozon Russia products before choosing product, brand, seller, or detail workflows for deeper analysis.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The security evidence says the skill can collect phone and SMS login information, generate and persist API keys, and create billing or payment orders.\n\nMitigation: Use only trusted LinkFox credentials, avoid storing secrets in shared shell profiles, and run onboarding or billing flows only when the user intentionally requests those account actions.\n\nRisk: The security evidence says the skill can write response and QR data to disk and send feedback externally.\n\nMitigation: Review local output paths before sharing workspaces and confirm external feedback reporting is acceptable for the use case.\n\nRisk: The security evidence warns that environment variables can redirect LinkFox hosts.\n\nMitigation: Verify LinkFox environment variables point to official HTTPS LinkFox hosts before using the skill.\n\n## Reference(s):\n\n- [MPSTATS Ozon Product Search Skill Page](https://clawhub.ai/linkfox-ai/skills/linkfox-mpstats-ozon-product-search)\n- [MPSTATS Ozon 商品搜索 API 参考](references/api.md)\n- [解决认证和算力问题](references/onboarding.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance, JSON files]\n\n**Output Format:** [Markdown guidance with shell commands plus JSON API responses or saved JSON files.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [The product search flow can write full responses to a local linkfox session directory, use a 24-hour local cache, and summarize large responses in stdout.]\n\n## Skill Version(s):\n\n1.0.8 (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 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词或 SKU 发现或反查商品，也应触发此技能。 Skill: MPSTATS-Ozon商品搜索 Owner: linkfox-ai Summary: MPSTATS Ozon 俄罗斯站商品搜索与反查。按俄语关键词或 SKU 在 MPSTATS 数据库中检索 Ozon 商品，返回商品 ID、标题、品牌和卖家信息，是 Ozon 选品与竞品链路的起点。当用户提到 Ozon 选品、Ozon 商品搜索、俄罗斯电商选品、Ozon 关键词搜索、Ozon SKU 查询、MPSTATS Ozon、Ozon product search, MPSTATS Ozon, Russian marketplace, Ozon SKU lookup, Ozon keyword search 时触发此技能。即使用户未明确提到\"MPSTATS\"，只要其意图是在 Ozon 俄罗斯站按关键词或 SKU 发现或反查商品，也应触发此技能。 Tags: latest:1.0.8 Version history: v1.","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1397,"uniquenessScore":47,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T06:21:27.715Z","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-10T06:21:27.715Z","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-10T10:49:07.253Z","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"}]}}}