{
  "ok": true,
  "resource": {
    "id": "RES_1EE62C31BDC9",
    "resource_type": "mcp_server",
    "canonical_url": "https://registry.modelcontextprotocol.io/v0.1/servers/ai.airshelf%2Fcatalog/versions/1.0.0",
    "name": "AirShelf Catalog",
    "summary_en": "Cross-vendor B2B catalog for AI agents: search, compare, find equivalents, request a quote.",
    "summary_zh": "面向AI代理的跨供应商B2B目录：搜索、比较、寻找等效产品、请求报价。",
    "description_en": "AirShelf Catalog is a cross-vendor B2B product catalog for AI agents. It provides tools to search the catalog, discover and verify products for a buyer need, research a considered purchase, retrieve product details, compare products, explain how a record was built, list merchants, and request quotes. The catalog covers industrial automation components, wiring devices, printers, mechanical keyboards, cybersecurity products, and threat-intelligence platforms. Some tools include live web discovery and verification with source receipts. Quote requests use a double opt-in flow.",
    "description_zh": "AirShelf Catalog是一个面向AI代理的跨供应商B2B产品目录。它提供工具来搜索目录、根据买家需求发现并验证产品、研究考虑中的购买、获取产品详情、比较产品、解释记录的构建方式、列出商家以及请求报价。目录涵盖工业自动化组件、接线设备、打印机、机械键盘、网络安全产品和威胁情报平台。部分工具包括实时网络发现和带来源收据的验证。报价请求采用双重选择加入流程。",
    "provider_name": "ai.airshelf",
    "homepage_url": "https://mcp.airshelf.ai/mcp",
    "endpoint_url": "https://mcp.airshelf.ai/mcp",
    "source_url": "https://registry.modelcontextprotocol.io/v0.1/servers/ai.airshelf%2Fcatalog/versions/1.0.0",
    "icon_url": null,
    "cover_image_url": null,
    "capabilities": [
      "catalog.search",
      "product.discover",
      "product.research",
      "product.details",
      "product.compare",
      "record.explain",
      "merchant.list",
      "quote.request"
    ],
    "categories": [
      "commerce",
      "data",
      "research"
    ],
    "industries": [
      "industrial",
      "commerce",
      "general"
    ],
    "protocols": [
      "mcp"
    ],
    "auth": {
      "type": "unknown"
    },
    "pricing": {
      "model": "unknown"
    },
    "input_schema": {},
    "output_schema": {},
    "metadata": {
      "content_language": "en",
      "translation_status": "original-only",
      "official_registry": {
        "version": "1.0.0",
        "packages": [],
        "remotes": []
      },
      "review_gate": {
        "passed": true,
        "reasons": [],
        "policy_version": "review-gate-v1",
        "evaluated_at": "2026-09-03T06:23:44.136Z"
      }
    },
    "latest_version": "1.0.0",
    "status": "listed",
    "health_status": "healthy",
    "source_kind": "imported",
    "source_agent": "registry.modelcontextprotocol.io",
    "trust": {
      "signal": "none",
      "reason": "No suspicious or malicious evidence found.",
      "signals": {
        "yellow": 0,
        "red": 0
      }
    },
    "review_summary": {
      "method_version": "capability-evidence-v2",
      "capability_definition": "strong",
      "contract_completeness": "strong",
      "access_friction": "low",
      "operational_transparency": "partial",
      "evidence_strength": "protocol_inspected",
      "use_readiness": "guided_use",
      "reviewed_at": "2026-09-03T06:23:45.126Z"
    },
    "experience_count": 0,
    "verified_experience_count": 0,
    "usage_count": 0,
    "success_rate": null,
    "first_seen_at": "2026-09-03T02:49:36.469Z",
    "last_seen_at": "2026-09-03T06:23:44.422Z",
    "published_at": "2026-09-03T06:23:44.422Z",
    "created_at": "2026-09-03T02:49:36.469Z",
    "updated_at": "2026-09-03T06:23:45.126Z",
    "api_url": "https://aiworkshub.io/api/v1/resources/RES_1EE62C31BDC9",
    "reviews_url": "https://aiworkshub.io/api/v1/resources/RES_1EE62C31BDC9/reviews",
    "public_url": "https://aiworkshub.io/resources/RES_1EE62C31BDC9",
    "distribution": {
      "canonical_identity": "https://registry.modelcontextprotocol.io/v0.1/servers/ai.airshelf%2Fcatalog/versions/1.0.0",
      "syndicatable": true,
      "origins": [
        {
          "registry_url": "https://registry.modelcontextprotocol.io/",
          "upstream_resource_id": "ai.airshelf/catalog@1.0.0",
          "upstream_record_url": "https://registry.modelcontextprotocol.io/v0.1/servers/ai.airshelf%2Fcatalog/versions/1.0.0",
          "relation": "syndicated",
          "metadata": {
            "source": "official-mcp-registry"
          },
          "first_seen_at": "2026-09-03T02:49:36.469Z",
          "last_seen_at": "2026-09-03T06:23:44.422Z"
        }
      ]
    },
    "tools": [
      {
        "name": "compare_products",
        "title_en": "Compare products",
        "title_zh": "比较产品",
        "description_en": "Compare 2-10 catalog products side-by-side on their datasheet specs. Slugs come from search_catalog and are case-insensitive and dash-tolerant (\"e-STUDIO 331AC\", \"toshiba-e-studio-331ac\" and \"e-studio331ac\" all resolve to the same product).\n\nReturns one item per product with canonical_name and spec_absence_note (spec fields absent from that product's golden record, AirShelf's verified product record). Branch on each item's commercial_data.actionable before using price or stock; stale observations are withheld from action fields. A slug that does not resolve comes back as not_found with a did_you_mean suggestion. The `provenance` option adds the source page and source type already stored with each fact.",
        "description_zh": "并排比较2-10个目录产品的数据表规格。Slug来自search_catalog，不区分大小写且容忍破折号（“e-STUDIO 331AC”、“toshiba-e-studio-331ac”和“e-studio331ac”都解析为同一产品）。\n\n每个产品返回一个项目，包含canonical_name和spec_absence_note（该产品黄金记录中缺少的规格字段，即AirShelf的已验证产品记录）。在使用价格或库存之前，请根据每个项目的commercial_data.actionable进行分支；过时的观察结果会从操作字段中省略。无法解析的slug会返回not_found，并附带did_you_mean建议。`provenance`选项添加已存储的每个事实的来源页面和来源类型。",
        "input_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "slugs": {
              "minItems": 2,
              "maxItems": 10,
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              },
              "description": "Catalog slugs to compare"
            },
            "provenance": {
              "description": "Include the stored source page and source type for each fact",
              "type": "boolean"
            }
          },
          "required": [
            "slugs"
          ]
        },
        "output_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "items": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "slug": {
                    "type": "string"
                  },
                  "canonical_name": {
                    "type": "string"
                  },
                  "manufacturer": {
                    "type": "string"
                  },
                  "modelName": {
                    "type": "string"
                  },
                  "price": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "spec_absence_note": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "slug"
                ],
                "additionalProperties": {}
              }
            },
            "count": {
              "type": "number"
            }
          },
          "required": [
            "items"
          ],
          "additionalProperties": false
        },
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "safe_to_retry",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "explain_product",
        "title_en": "Explain how a record was built",
        "title_zh": "解释记录的构建方式",
        "description_en": "Explain the evidence behind a catalog row. Returns stored processing stages when available and always returns a golden-record field summary with source coverage.",
        "description_zh": "解释目录行背后的证据。可用时返回存储的处理阶段，并始终返回带有来源覆盖的黄金记录字段摘要。",
        "input_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "slug": {
              "type": "string",
              "minLength": 1,
              "description": "Composite slug to explain"
            }
          },
          "required": [
            "slug"
          ]
        },
        "output_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "slug": {
              "type": "string"
            },
            "sku": {
              "type": "string"
            },
            "canonical_name": {
              "type": "string"
            },
            "category": {
              "type": "string"
            },
            "trace_status": {
              "type": "string",
              "enum": [
                "available",
                "not_recorded"
              ]
            },
            "count": {
              "type": "number"
            },
            "note": {
              "type": "string"
            },
            "trace": {},
            "record": {}
          },
          "additionalProperties": false
        },
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "safe_to_retry",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "find_products",
        "title_en": "Discover and verify products for a need",
        "title_zh": "发现并验证满足需求的产品",
        "description_en": "Discover candidate products for a buyer need. Takes a need in natural language (e.g. \"best value home espresso machine\", market \"TH\"), checks the verified catalog first, then uses live web discovery only when the catalog has no candidates. Returns up to 3 candidates with explicit fit accounting.\n\nfind_products is the quick candidate-list tool; research_shopping is the full verified-research job. For a specific brand+model, search_catalog is cheaper and returns the same live-lookup block on a miss.\n\nResponse fields:\n• candidates[].verification — \"catalog-candidate\" for a catalog starting point whose fit still needs checking, or \"live-unverified\" for a live page read during this run.\n• candidates[].status — \"resolved\" means both identity and the parsed buyer constraints were supported by the cited page; \"abstain\" means identity or need fit could not be established. Inspect constraint_check for matched, conflicting, and unverified requirements.\n• candidates[].constraint_check.receipts maps each receipt-backed matched requirement to its supporting source URL and trust label.\n• Candidates come from current web-search results, so they are a sample of what the market offers rather than a comprehensive list.",
        "description_zh": "为买家需求发现候选产品。接受自然语言需求（例如“性价比最高的家用浓缩咖啡机”，市场“TH”），首先检查已验证的目录，仅当目录中没有候选时才使用实时网络发现。返回最多3个候选，并明确说明匹配情况。\n\nfind_products是快速候选列表工具；research_shopping是完整的验证研究任务。对于特定品牌+型号，search_catalog更便宜，并且在未命中时返回相同的实时查找块。\n\n响应字段：\n• candidates[].verification — “catalog-candidate”表示目录起点，其匹配仍需检查；或“live-unverified”表示本次运行期间读取的实时页面。\n• candidates[].status — “resolved”表示身份和解析的买家约束均得到引用页面的支持；“abstain”表示无法确定身份或需求匹配。检查constraint_check以了解匹配、冲突和未验证的要求。\n• candidates[].constraint_check.receipts将每个有收据支持的匹配要求映射到其支持来源URL和信任标签。\n• 候选来自当前的网络搜索结果，因此它们是市场提供的样本，而非全面列表。",
        "input_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "need": {
              "type": "string",
              "description": "The buyer need in natural language, e.g. \"quiet mechanical keyboard for open office\" or \"best value home espresso machine\".",
              "minLength": 3,
              "maxLength": 200
            },
            "market": {
              "description": "Buyer market as ISO 3166-1 alpha-2 country code (e.g. \"TH\"). Biases discovery and marketplace checks toward seller pages serving that country and scopes the cache; availability is not a stock guarantee.",
              "type": "string"
            },
            "max": {
              "default": 3,
              "description": "Max candidates to verify (each costs a live lookup; capped at 3).",
              "type": "integer",
              "minimum": 1,
              "maximum": 3
            }
          },
          "required": [
            "need"
          ]
        },
        "output_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "need": {
              "type": "string"
            },
            "market": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "status": {
              "type": "string",
              "enum": [
                "ok",
                "no_match",
                "disabled",
                "rate_limited",
                "unavailable",
                "error",
                "refused"
              ]
            },
            "error": {
              "type": "string"
            },
            "reason": {
              "type": "string"
            },
            "verification": {
              "type": "string"
            },
            "guidance": {
              "type": "string"
            },
            "live_discovery": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "const": "unavailable"
                },
                "reason": {
                  "type": "string"
                },
                "guidance": {
                  "type": "string"
                }
              },
              "required": [
                "status"
              ],
              "additionalProperties": false
            },
            "serp_considered": {
              "type": "number"
            },
            "candidates": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string"
                  },
                  "tier": {
                    "type": "number"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "resolved",
                      "abstain",
                      "declined"
                    ]
                  },
                  "reason": {
                    "type": "string"
                  },
                  "guidance": {
                    "type": "string"
                  },
                  "identity": {
                    "type": "object",
                    "properties": {
                      "brand": {
                        "type": "string"
                      },
                      "model": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "brand",
                      "model"
                    ],
                    "additionalProperties": false
                  },
                  "mpn_confirmed": {
                    "type": "boolean"
                  },
                  "source_url": {
                    "type": "string"
                  },
                  "source_tier": {
                    "type": "string"
                  },
                  "cached": {
                    "type": "boolean"
                  },
                  "verification": {
                    "type": "string"
                  },
                  "product": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                },
                "required": [
                  "query",
                  "tier",
                  "status"
                ],
                "additionalProperties": {}
              }
            },
            "took_ms": {
              "type": "number"
            }
          },
          "required": [
            "candidates"
          ],
          "additionalProperties": false
        },
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": true,
        "idempotency": "safe_to_retry",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "get_product",
        "title_en": "Get product details",
        "title_zh": "获取产品详情",
        "description_en": "Get the full golden record (AirShelf's verified product record) and latest price for one catalog product by slug (\"<manufacturer>-<model>\").\n\nReturns the product's specs and provenance (which page each fact came from), plus canonical_name (its exact catalog name). Branch on commercial_data.actionable before using price or stock: observations older than 24 hours are withheld from latestPrice and retained only as labelled last_observed history. For quote-gated B2B pricing, a null price with a quote path is expected rather than an error. In clients that render MCP Apps the response also draws one product card per call. related_products — relationships extracted from vendor documents (e.g. compatible toner or drum accessories with their source quotes, functional equivalents, supersessions); each entry names the related catalog slug, the relation type, its direction (direction is \"from_this\" when the relation reads this-product → related-product, \"to_this\" when it reads related-product → this-product), and the source URL and quote the relation was extracted from.",
        "description_zh": "通过slug（“<制造商>-<型号>”）获取一个目录产品的完整黄金记录（AirShelf的已验证产品记录）和最新价格。\n\n返回产品的规格和来源（每个事实来自哪个页面），以及canonical_name（其确切目录名称）。在使用价格或库存之前，请根据commercial_data.actionable进行分支：超过24小时的观察结果会从latestPrice中省略，仅保留为标记的last_observed历史。对于报价门控的B2B定价，null价格和报价路径是预期的，而非错误。在渲染MCP Apps的客户端中，每次调用还会绘制一张产品卡片。related_products — 从供应商文档中提取的关系（例如兼容的碳粉或鼓配件及其来源报价、功能等效、替代品）；每个条目命名相关目录slug、关系类型、其方向（当关系读取此产品→相关产品时，方向为“from_this”；当读取相关产品→此产品时，方向为“to_this”），以及提取关系的来源URL和报价。",
        "input_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "slug": {
              "type": "string",
              "minLength": 1,
              "description": "Composite slug, e.g. keychron-q1-pro"
            }
          },
          "required": [
            "slug"
          ]
        },
        "output_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "imageUrl": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "benefits": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "productId": {
              "type": "string"
            },
            "buyUrl": {
              "type": "string"
            },
            "buttonLabel": {
              "type": "string"
            },
            "action": {
              "type": "string",
              "enum": [
                "quote",
                "link"
              ]
            },
            "pricing_gated": {
              "type": "boolean"
            },
            "related_products": {
              "type": "array",
              "items": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              }
            },
            "product": {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {}
            }
          },
          "required": [
            "title",
            "productId",
            "buttonLabel",
            "action"
          ],
          "additionalProperties": false
        },
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "safe_to_retry",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "list_merchants",
        "title_en": "List merchants",
        "title_zh": "列出商家",
        "description_en": "List public AirShelf merchants that have an assigned slug and at least one active product. Internal/demo and empty catalogs are excluded. Returns each merchant's name, slug, and product count; the slug is the `merchant` argument for request_quote.",
        "description_zh": "列出具有指定slug且至少有一个活跃产品的公共AirShelf商家。排除内部/演示和空目录。返回每个商家的名称、slug和产品数量；slug是request_quote的`merchant`参数。",
        "input_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {}
        },
        "output_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "merchants": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "slug": {
                    "type": "string"
                  },
                  "product_count": {
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "domain": {
                    "type": "string"
                  }
                },
                "required": [
                  "name",
                  "slug",
                  "product_count"
                ],
                "additionalProperties": {}
              }
            },
            "total": {
              "type": "number"
            }
          },
          "required": [
            "merchants"
          ],
          "additionalProperties": false
        },
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": false,
        "idempotency": "safe_to_retry",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "request_quote",
        "title_en": "Request a quote from a merchant",
        "title_zh": "向商家请求报价",
        "description_en": "Send a quote request for catalog products to a merchant's sales team on behalf of a named buyer.\n\nThis is a two-step, double opt-in flow. The first call emails a confirmation link to `contact.email` and returns status \"confirmation_required\"; no lead exists and no merchant is contacted until the buyer confirms. A later call with the same arguments reports \"awaiting_confirmation\" while the email is unconfirmed, or \"received\" with a reference_number after confirmation.\n\nMerchant slugs come from list_merchants. Network-catalog brands that are absent from that list use merchant:\"airshelf-network\" with brandSlug:\"<manufacturer-slug>\"; AirShelf routes the confirmed request to that brand.",
        "description_zh": "代表指定买家向商家的销售团队发送目录产品的报价请求。\n\n这是一个两步、双重选择加入流程。第一次调用向`contact.email`发送确认链接，并返回状态“confirmation_required”；在买家确认之前，不存在潜在客户，也不会联系商家。之后使用相同参数的调用在电子邮件未确认时报告“awaiting_confirmation”，或在确认后报告“received”并带有reference_number。\n\n商家slug来自list_merchants。该列表中不存在的网络目录品牌使用merchant:\"airshelf-network\"和brandSlug:\"<manufacturer-slug>\"；AirShelf将确认的请求路由到该品牌。",
        "input_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "merchant": {
              "type": "string",
              "minLength": 1,
              "description": "Merchant slug or id (from list_merchants), or \"airshelf-network\" for network-catalog brands"
            },
            "products": {
              "minItems": 1,
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              },
              "description": "Catalog slugs the buyer is interested in"
            },
            "quantity": {
              "description": "Units the buyer wants",
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 9007199254740991
            },
            "contact": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Buyer name"
                },
                "email": {
                  "type": "string",
                  "format": "email",
                  "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                  "description": "Buyer work email"
                },
                "company": {
                  "description": "Buyer company",
                  "type": "string"
                }
              },
              "required": [
                "name",
                "email"
              ],
              "description": "Buyer contact details"
            },
            "notes": {
              "description": "Any extra context from the buyer",
              "type": "string"
            },
            "brandSlug": {
              "description": "Manufacturer slug (from search results) — required with merchant:\"airshelf-network\" so the lead reaches the right brand",
              "type": "string",
              "minLength": 1
            }
          },
          "required": [
            "merchant",
            "products",
            "contact"
          ]
        },
        "output_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "reference_number": {
              "type": "string"
            },
            "status": {
              "type": "string"
            },
            "next_step": {
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        "unit_kind": "mcp_tool",
        "effect": "irreversible",
        "open_world": true,
        "idempotency": "unknown",
        "confirmation": "explicit policy",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "research_shopping",
        "title_en": "Research a considered purchase",
        "title_zh": "研究考虑中的购买",
        "description_en": "research_shopping is the full verified-research job; find_products is the quick candidate-list tool. It runs as a background job and returns status \"running\" with a research ID while the minutes-long research continues; the same research ID returns the run on later polls until completion. Unsafe medical, legal, financial-advice, and professional-service asks return status \"refused\" before any work is queued. Completed runs return a researched recommendation with per-claim source receipts, or an explicit refusal when evidence is insufficient. Missing decision details return clarification questions before research starts. `market` biases discovery and marketplace checks toward seller pages serving that country; \"available in <market>\" means the seller page serves that market, not that stock is guaranteed. Example answer keys include {\"budget\":\"500 USD\",\"market\":\"US\",\"category\":\"espresso machine\"}.",
        "description_zh": "research_shopping是完整的验证研究任务；find_products是快速候选列表工具。它作为后台任务运行，并在持续数分钟的研究期间返回状态“running”和研究ID；后续轮询使用相同的研究ID返回运行，直到完成。不安全的医疗、法律、财务建议和专业服务请求在排队任何工作之前返回状态“refused”。完成的运行返回带有每条声明来源收据的研究建议，或在证据不足时明确拒绝。缺少决策细节会在研究开始前返回澄清问题。`market`使发现和市场检查偏向服务于该国家的卖家页面；“在<市场>可用”意味着卖家页面服务于该市场，而非保证库存。示例答案键包括{\"budget\":\"500 USD\",\"market\":\"US\",\"category\":\"espresso machine\"}。",
        "input_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "need": {
              "description": "Buyer need in natural language. Required when starting a new research run.",
              "type": "string",
              "minLength": 1,
              "maxLength": 2000
            },
            "market": {
              "description": "Buyer market as an ISO 3166-1 alpha-2 country code. Biases discovery and marketplace checks toward seller pages serving that country; availability is not a stock guarantee.",
              "type": "string"
            },
            "persona": {
              "description": "Research persona; b2b produces a quotation/RFQ pack.",
              "type": "string",
              "enum": [
                "consumer",
                "b2b"
              ]
            },
            "answers": {
              "description": "Answers to clarification questions. Set accept_defaults:true to accept budget and market defaults; it does not waive product type, use case, or must-have requirements.",
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {}
            },
            "research_id": {
              "description": "Existing research run identifier to read instead of starting a new run.",
              "type": "string"
            }
          }
        },
        "output_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "status": {
              "type": "string",
              "enum": [
                "needs_input",
                "running",
                "complete",
                "failed",
                "refused"
              ]
            },
            "research_id": {
              "type": "string"
            },
            "accepted_defaults": {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {
                "type": "string"
              }
            },
            "questions": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "key": {
                    "type": "string",
                    "enum": [
                      "budget",
                      "market",
                      "category"
                    ]
                  },
                  "question": {
                    "type": "string"
                  }
                },
                "required": [
                  "key",
                  "question"
                ],
                "additionalProperties": false
              }
            },
            "stage_counters": {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {}
            },
            "elapsed_seconds": {
              "type": "number"
            },
            "eta_seconds": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "outcome": {
              "anyOf": [
                {
                  "type": "string",
                  "enum": [
                    "recommend",
                    "conditional",
                    "insufficient_evidence",
                    "no_candidate_passes",
                    "defer"
                  ]
                },
                {
                  "type": "null"
                }
              ]
            },
            "dossier": {},
            "reason": {
              "type": "string"
            },
            "stage": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "status"
          ],
          "additionalProperties": false
        },
        "unit_kind": "mcp_tool",
        "effect": "unknown",
        "open_world": true,
        "idempotency": "unknown",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      },
      {
        "name": "search_catalog",
        "title_en": "Search product catalog",
        "title_zh": "搜索产品目录",
        "description_en": "Search the AirShelf cross-vendor product catalog by natural-language query. The catalog covers industrial-automation components (sensors, encoders, vacuum handling, motors and drives, circuit protection, machine vision — the largest category by row count), wiring devices (plugs, receptacles, connector bodies, rocker switches), multifunction printers (mfp), barcode printers, laser printers, mechanical keyboards, cybersecurity products, and threat-intelligence platforms. Industrial-automation and wiring-device rows are indexed by manufacturer part number, so a brand or part number in the query (\"Pepperl+Fuchs retroreflective sensor\", \"IN5409\") retrieves more reliably than a bare product type; those rows carry no normalized spec facets, so the `specs` filter does not apply to them. Returns ranked products with prices, specs, and per-row match accounting.\nEach row includes `unverified_specs`, the normalized spec names that lack claim-level receipts; never use those as decisive facts.\nExample queries: \"tactile mechanical keyboard under $150\", \"Toshiba A3 colour multifunction device\", \"industrial barcode printer for a warehouse\", \"threat-intelligence platform with dark-web monitoring\".",
        "description_zh": "通过自然语言查询搜索AirShelf跨供应商产品目录。目录涵盖工业自动化组件（传感器、编码器、真空处理、电机和驱动器、电路保护、机器视觉——按行数计最大的类别）、接线设备（插头、插座、连接器本体、翘板开关）、多功能打印机（mfp）、条码打印机、激光打印机、机械键盘、网络安全产品和威胁情报平台。工业自动化和接线设备行按制造商零件号索引，因此查询中的品牌或零件号（如“Pepperl+Fuchs回归反射传感器”、“IN5409”）比裸产品类型更可靠地检索；这些行没有标准化规格方面，因此`specs`过滤器不适用于它们。返回带有价格、规格和每行匹配说明的排名产品。\n每行包含`unverified_specs`，即缺乏声明级收据的标准化规格名称；切勿将其用作决定性事实。\n示例查询：“150美元以下的触觉机械键盘”、“东芝A3彩色多功能设备”、“仓库用工业条码打印机”、“具有暗网监控功能的威胁情报平台”。",
        "input_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "q": {
              "type": "string",
              "description": "Natural-language query, at most 200 characters. Supports budget hints (e.g. \"under $150\").",
              "minLength": 0,
              "maxLength": 200
            },
            "category": {
              "description": "Optional category filter (industrial-automation, wiring-devices, mechanical-keyboards, mfp, barcode-printer, laser-printer, inkjet-printer, cybersecurity, or threat-intelligence-platform)",
              "type": "string"
            },
            "limit": {
              "default": 20,
              "description": "Max results",
              "type": "integer",
              "minimum": 1,
              "maximum": 200
            },
            "market": {
              "description": "Buyer market as an assigned ISO 3166-1 alpha-2 country code (e.g. \"TH\", \"AU\"). Conflicting country receipts are excluded; global URLs remain market-unverified.",
              "type": "string"
            },
            "specs": {
              "description": "Hard spec facets, e.g. {\"form_factor\":\"desktop\",\"print_speed_ppm\":33}. Filters by exact/range spec match.",
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "type": "boolean"
                  }
                ]
              }
            }
          },
          "required": [
            "q"
          ]
        },
        "output_schema": {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "status": {
              "type": "string",
              "enum": [
                "refused"
              ]
            },
            "reason": {
              "type": "string"
            },
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "slug": {
                    "type": "string"
                  },
                  "canonical_name": {
                    "type": "string"
                  },
                  "manufacturer": {
                    "type": "string"
                  },
                  "modelName": {
                    "type": "string"
                  },
                  "price": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "currency": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "category": {
                    "type": "string"
                  },
                  "qualityScore": {
                    "type": "number"
                  },
                  "constraint_match_score": {
                    "type": "number"
                  },
                  "spec_absence_note": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "slug"
                ],
                "additionalProperties": {}
              }
            },
            "count": {
              "type": "number"
            },
            "query": {
              "type": "string"
            },
            "parsed": {
              "type": "object",
              "propertyNames": {
                "type": "string"
              },
              "additionalProperties": {}
            },
            "took_ms": {
              "type": "number"
            },
            "tier3": {
              "type": "object",
              "properties": {
                "tier": {
                  "type": "number"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "resolved",
                    "abstain",
                    "declined"
                  ]
                },
                "reason": {
                  "type": "string"
                },
                "guidance": {
                  "type": "string"
                },
                "identity": {
                  "type": "object",
                  "properties": {
                    "brand": {
                      "type": "string"
                    },
                    "model": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "brand",
                    "model"
                  ],
                  "additionalProperties": false
                },
                "mpn_confirmed": {
                  "type": "boolean"
                },
                "source_url": {
                  "type": "string"
                },
                "source_tier": {
                  "type": "string"
                },
                "cached": {
                  "type": "boolean"
                },
                "verification": {
                  "type": "string"
                },
                "product": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {}
                }
              },
              "required": [
                "tier",
                "status"
              ],
              "additionalProperties": {}
            }
          },
          "required": [
            "results"
          ],
          "additionalProperties": false
        },
        "unit_kind": "mcp_tool",
        "effect": "read",
        "open_world": true,
        "idempotency": "safe_to_retry",
        "confirmation": "none",
        "evidence_ids": [
          "protocol-tools"
        ],
        "runtime_auth": {},
        "pricing": {},
        "metadata": {}
      }
    ],
    "review_profile": {
      "schema_version": "aiworkshub.resource-review/0.2",
      "method_version": "capability-evidence-v2",
      "review_state": {
        "identity": "verified",
        "source": "verified",
        "connectivity": "verified",
        "contract": "partial",
        "safe_use": "untested",
        "real_use": "unobserved"
      },
      "assessment": {
        "capability_definition": "strong",
        "contract_completeness": "strong",
        "access_friction": "low",
        "operational_transparency": "partial",
        "evidence_strength": "protocol_inspected",
        "use_readiness": "guided_use"
      },
      "profile": {
        "capabilities": [
          {
            "id": "catalog.search",
            "weight": 90,
            "confidence": 95,
            "evidence_ids": [
              "protocol-tools"
            ]
          },
          {
            "id": "product.discover",
            "weight": 80,
            "confidence": 90,
            "evidence_ids": [
              "protocol-tools"
            ]
          },
          {
            "id": "product.research",
            "weight": 70,
            "confidence": 85,
            "evidence_ids": [
              "protocol-tools"
            ]
          },
          {
            "id": "product.details",
            "weight": 85,
            "confidence": 95,
            "evidence_ids": [
              "protocol-tools"
            ]
          },
          {
            "id": "product.compare",
            "weight": 75,
            "confidence": 95,
            "evidence_ids": [
              "protocol-tools"
            ]
          },
          {
            "id": "record.explain",
            "weight": 60,
            "confidence": 90,
            "evidence_ids": [
              "protocol-tools"
            ]
          },
          {
            "id": "merchant.list",
            "weight": 50,
            "confidence": 95,
            "evidence_ids": [
              "protocol-tools"
            ]
          },
          {
            "id": "quote.request",
            "weight": 80,
            "confidence": 90,
            "evidence_ids": [
              "protocol-tools"
            ]
          }
        ],
        "domains": [
          {
            "id": "industrial-automation",
            "weight": 80,
            "confidence": 90,
            "evidence_ids": [
              "source-record"
            ]
          },
          {
            "id": "wiring-devices",
            "weight": 70,
            "confidence": 85,
            "evidence_ids": [
              "source-record"
            ]
          },
          {
            "id": "printers",
            "weight": 60,
            "confidence": 80,
            "evidence_ids": [
              "source-record"
            ]
          },
          {
            "id": "mechanical-keyboards",
            "weight": 50,
            "confidence": 80,
            "evidence_ids": [
              "source-record"
            ]
          },
          {
            "id": "cybersecurity",
            "weight": 40,
            "confidence": 75,
            "evidence_ids": [
              "source-record"
            ]
          },
          {
            "id": "threat-intelligence",
            "weight": 40,
            "confidence": 75,
            "evidence_ids": [
              "source-record"
            ]
          }
        ],
        "workflow_roles": [
          "discover",
          "retrieve",
          "analyze",
          "transact"
        ]
      },
      "capability_units": [
        {
          "id": "tool:search_catalog",
          "kind": "mcp_tool",
          "capability_id": "catalog.search",
          "effect": "read",
          "open_world": true,
          "idempotency": "safe_to_retry",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "natural language query",
            "category filter",
            "market country code",
            "spec facets"
          ],
          "produces": [
            "ranked product list with prices and specs"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:find_products",
          "kind": "mcp_tool",
          "capability_id": "product.discover",
          "effect": "read",
          "open_world": true,
          "idempotency": "safe_to_retry",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "natural language need",
            "market country code",
            "max candidates"
          ],
          "produces": [
            "candidate products with verification status"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:research_shopping",
          "kind": "mcp_tool",
          "capability_id": "product.research",
          "effect": "unknown",
          "open_world": true,
          "idempotency": "unknown",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed_envelope_dynamic_result",
          "accepts": [
            "natural language need",
            "market country code",
            "persona",
            "answers to clarification questions",
            "research id"
          ],
          "produces": [
            "research status and dossier"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:get_product",
          "kind": "mcp_tool",
          "capability_id": "product.details",
          "effect": "read",
          "open_world": false,
          "idempotency": "safe_to_retry",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "product slug"
          ],
          "produces": [
            "product details with provenance"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:compare_products",
          "kind": "mcp_tool",
          "capability_id": "product.compare",
          "effect": "read",
          "open_world": false,
          "idempotency": "safe_to_retry",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "list of product slugs"
          ],
          "produces": [
            "side-by-side comparison"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:explain_product",
          "kind": "mcp_tool",
          "capability_id": "record.explain",
          "effect": "read",
          "open_world": false,
          "idempotency": "safe_to_retry",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "product slug"
          ],
          "produces": [
            "evidence trace and record summary"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:list_merchants",
          "kind": "mcp_tool",
          "capability_id": "merchant.list",
          "effect": "read",
          "open_world": false,
          "idempotency": "safe_to_retry",
          "confirmation": "none",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [],
          "produces": [
            "list of merchants"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        },
        {
          "id": "tool:request_quote",
          "kind": "mcp_tool",
          "capability_id": "quote.request",
          "effect": "irreversible",
          "open_world": true,
          "idempotency": "unknown",
          "confirmation": "explicit policy",
          "input_contract": "typed",
          "output_contract": "typed",
          "accepts": [
            "merchant slug",
            "product slugs",
            "quantity",
            "contact details",
            "notes",
            "brand slug"
          ],
          "produces": [
            "quote request status"
          ],
          "runtime_auth": {},
          "pricing": {},
          "evidence_ids": [
            "protocol-tools"
          ],
          "metadata": {}
        }
      ],
      "access": {
        "distribution_license": {},
        "runtime_auth": {},
        "runtime_pricing": {},
        "dependencies": []
      },
      "operational_flags": [],
      "trust": {
        "signal": "none",
        "evidence_ids": [],
        "reason": "No suspicious or malicious evidence found."
      },
      "fit": {
        "good_for": [
          "B2B product search and comparison",
          "Product discovery and verification with source receipts",
          "Requesting quotes from merchants"
        ],
        "not_for": [
          "Consumer shopping with guaranteed stock",
          "Medical, legal, or financial advice"
        ]
      },
      "evidence": [
        {
          "id": "source-record",
          "type": "registry_record",
          "source": "https://registry.modelcontextprotocol.io/v0.1/servers/ai.airshelf%2Fcatalog/versions/1.0.0",
          "observation": "MCP source record for AirShelf Catalog; version 1.0.0.",
          "observed_at": null,
          "payload": {}
        },
        {
          "id": "protocol-tools",
          "type": "protocol_observation",
          "source": "https://mcp.airshelf.ai/mcp#tools/list",
          "observation": "8 tools were returned by MCP discovery; 8 were retained for review.",
          "observed_at": "2026-09-03T06:23:16.381Z",
          "payload": {}
        }
      ],
      "unknowns": [
        "Authentication mechanism not specified",
        "Pricing model not specified",
        "Exact catalog size and coverage not verified",
        "Real-world usage not observed"
      ],
      "id": "REV_7B5290627454",
      "resource_id": "RES_1EE62C31BDC9",
      "evaluator_type": "platform_ai",
      "provider": "deepseek",
      "model": "deepseek-v4-flash",
      "review_scope": "protocol-inspected-mcp",
      "created_at": "2026-09-03T06:23:45.126Z"
    }
  }
}