MCPサーバー

Catalog Attribute Normalizer

com.acjlabs/catalog-normalizer
コマース・小売 公開・接続可能 MCP 2025-11-25

このMCPでできること

Normalizes product catalog attributes and maps products to Google, Shopify, or Amazon category paths.

normalize_catalog
Normalize Catalog
Normalizes a batch of catalog products (attribute canonicalization/extraction + category-path mapping into the requested target taxonomies: google, shopify, amazon). Returns one result per input product, same order: a NormalizedProduct on success, or { error, source_title } if that specific product's classification failed — one product's failure never voids the rest of the batch. attributes is keyed by a controlled vocabulary (size, color, material, gender, sleeve_length — unrecognized keys are dropped, not passed through under a model-chosen name) and each value carries provenance: "canonicalized" means it came from your own raw_attributes input for that product (deterministic cleanup only, no recall); "extracted" means the model inferred it from the title/description and it wasn't in your input — treat extracted values as a suggestion, not a confirmed fact about the product, the same way you'd treat a low-confidence category_paths entry. category_paths for google and shopify is retrieval-grounded against the real, current taxonomy files (not recalled from memory) — measured at 22/24 (91.7%) exact path+leaf_id matches on a 12-product evaluation set; amazon has no comparable public reference file, so it stays best-effort. Each entry's confidence (0-1) and leaf_id (null when not confident it matches a real node) are the honest signal regardless of taxonomy — treat a low-confidence or null-leaf_id result as a suggestion worth a quick human check, not a confirmed classification.
読み取り専用
入力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['products', 'target_taxonomies'], 'properties': {'products': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'description', 'raw_attributes'], 'properties': {'title': {'type': 'string', 'maxLength': 500}, 'description': {'type': 'string', 'maxLength': 5000}, 'raw_attributes': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string', 'maxLength': 1000}}}}, 'maxItems': 200}, 'target_taxonomies': {'type': 'array', 'items': {'enum': ['google', 'shopify', 'amazon'], 'type': 'string'}, 'minItems': 1}}}
出力スキーマ
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['results'], 'properties': {'results': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['schema_version', 'source_title', 'category_paths', 'attributes'], 'properties': {'attributes': {'type': 'object', 'properties': {'size': {'type': 'object', 'required': ['value', 'provenance'], 'properties': {'value': {'type': 'string'}, 'provenance': {'enum': ['canonicalized', 'extracted'], 'type': 'string'}}, 'additionalProperties': False}, 'color': {'type': 'object', 'required': ['value', 'provenance'], 'properties': {'value': {'type': 'string'}, 'provenance': {'enum': ['canonicalized', 'extracted'], 'type': 'string'}}, 'additionalProperties': False}, 'gender': {'type': 'object', 'required': ['value', 'provenance'], 'properties': {'value': {'type': 'string'}, 'provenance': {'enum': ['canonicalized', 'extracted'], 'type': 'string'}}, 'additionalProperties': False}, 'material': {'type': 'object', 'required': ['value', 'provenance'], 'properties': {'value': {'type': 'string'}, 'provenance': {'enum': ['canonicalized', 'extracted'], 'type': 'string'}}, 'additionalProperties': False}, 'sleeve_length': {'type': 'object', 'required': ['value', 'provenance'], 'properties': {'value': {'type': 'string'}, 'provenance': {'enum': ['canonicalized', 'extracted'], 'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'source_title': {'type': 'string'}, 'category_paths': {'type': 'object', 'properties': {'amazon': {'type': 'object', 'required': ['path', 'leaf_id', 'confidence'], 'properties': {'path': {'type': 'array', 'items': {'type': 'string'}}, 'leaf_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'type': 'number'}}, 'additionalProperties': False}, 'google': {'type': 'object', 'required': ['path', 'leaf_id', 'confidence'], 'properties': {'path': {'type': 'array', 'items': {'type': 'string'}}, 'leaf_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'type': 'number'}}, 'additionalProperties': False}, 'shopify': {'type': 'object', 'required': ['path', 'leaf_id', 'confidence'], 'properties': {'path': {'type': 'array', 'items': {'type': 'string'}}, 'leaf_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'type': 'number'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'schema_version': {'type': 'string', 'const': '2.0'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['error', 'source_title'], 'properties': {'error': {'type': 'string'}, 'source_title': {'type': 'string'}}, 'additionalProperties': False}]}}}, 'additionalProperties': False}
追加
normalize_catalog
2026年9月17日12:33