Skip to main content
Glama

AirShelf Catalog

Server Details

Cross-vendor B2B catalog for AI agents: search, compare, find equivalents, request a quote.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Available Tools

8 tools
compare_productsCompare productsA
Read-only
Inspect

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).

Returns 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugsYesCatalog slugs to compare
provenanceNoInclude the stored source page and source type for each fact

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
itemsYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals important behaviors beyond the readOnlyHint: slug normalization with examples, the branch on commercial_data.actionable before using price/stock, staleness handling, and not_found response with did_you_mean. This gives the agent actionable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient: it leads with the primary purpose, then covers slug acceptance, output shape, actionability, error behavior, and security bonus in focused sentences. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists and annotations already declare read-only, the description still meaningfully covers the remaining context an agent needs: slug format rules, pricing/staleness caveats, not_found behavior, and provenance semantics. It is arguably complete for correct invocation and result use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers both parameters at 100%, so baseline is 3. The description adds value by explaining slug case-insensitivity and dash-tolerance with concrete examples, plus the provenance behavior, which enriches the parametric meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action and scope: "Compare 2-10 catalog products side-by-side on their datasheet specs." This clearly identifies the tool as a multi-product comparison and distinguishes it from siblings like get_product and explain_product.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context by stating slugs come from search_catalog and that the tool handles 2-10 products. It stops short of explicitly saying when not to use this tool versus alternatives, such as when a single product comparison is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explain_productExplain how a record was builtA
Read-only
Inspect

Explain the evidence behind a catalog row. Returns stored processing stages when available and always returns a golden-record field summary with source coverage.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesComposite slug to explain

Output Schema

ParametersJSON Schema
NameRequiredDescription
skuNo
noteNo
slugNo
countNo
traceNo
recordNo
categoryNo
trace_statusNo
canonical_nameNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral detail beyond annotations: it discloses that processing stages are returned only 'when available' while the golden-record field summary is always returned, setting accurate expectations about conditional output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core purpose is front-loaded, and the second sentence efficiently explains return behavior and guarantees. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only tool with a full output schema, the description is complete. It explains what the tool does, what it returns, and the conditional nature of part of that return, leaving no critical gap for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter 'slug' is documented as a 'Composite slug to explain.' The description does not add further detail about slug format or construction, but with full schema coverage, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('explain') and resource ('evidence behind a catalog row'), and clarifies the unique value proposition: stored processing stages plus a golden-record field summary with source coverage. This clearly distinguishes it from siblings like get_product, which would return product data rather than provenance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you need the evidence or provenance behind a catalog record. However, it does not explicitly state when not to use it or name alternatives among the sibling tools, so the agent must infer the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_productsDiscover and verify products for a needA
Read-only
Inspect

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.

find_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.

Response fields: • 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. • 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. • candidates[].constraint_check.receipts maps each receipt-backed matched requirement to its supporting source URL and trust label. • Candidates come from current web-search results, so they are a sample of what the market offers rather than a ranking. • status at the top level — "no_match" means discovery ran but no candidate was confirmed as satisfying the need; "disabled", "rate_limited", or "unavailable" means no discovery ran.

• live_discovery.status="unavailable" means receipted catalog candidates were returned while live discovery was unavailable.

Optional market (ISO 3166-1 alpha-2) biases discovery and marketplace checks toward seller pages serving that country and scopes the lookup cache. "Available in " means the seller page serves that market, not that stock is guaranteed.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxNoMax candidates to verify (each costs a live lookup; capped at 3).
needYesThe buyer need in natural language, e.g. "quiet mechanical keyboard for open office" or "best value home espresso machine".
marketNoBuyer 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
needNo
errorNo
marketNo
reasonNo
statusNo
took_msNo
guidanceNo
candidatesYes
verificationNo
live_discoveryNo
serp_consideredNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even with readOnlyHint and openWorldHint annotations, the description discloses additional behaviors: it prioritizes catalog over live discovery, explains statuses (top-level and per-candidate), clarifies that the list is a sample, and defines 'available' relative to market. It also describes cache scoping and the meaning of statuses like 'unavailable'. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is organized with bullet points and front-loads the core purpose. Every sentence adds value, distinguishing behavior, outcomes, and statuses. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multiple statuses, fallback behavior, cache scoping), the description fully covers operational details: explains catalog-first strategy, live discovery fallback, result fields, and failure modes. The output schema likely covers return structure, but the description adds necessary context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 100% schema coverage, the description adds meaningful semantics: it explains how `market` biases discovery and scopes cache, and clarifies that availability is not a stock guarantee. It also elaborates on `need` with examples and the max of 3 candidates (implied). This goes beyond the schema's field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states this tool 'List ALL candidates' and explicitly differentiates it from siblings: it is the 'quick candidate-list tool' while research_shopping is a 'full job' and search_catalog handles specific brand+model. The verb 'list' and resource 'candidates' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool versus alternatives: it is for natural-language needs, checks the catalog first, and only falls back to live discovery if necessary. It also directs users to search_catalog for specific models and to research_shopping for deeper research.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_productGet product detailsA
Read-only
Inspect

Get the full golden record (AirShelf's verified product record) and latest price for one catalog product by slug ("-").

Returns 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesComposite slug, e.g. keychron-q1-pro

Output Schema

ParametersJSON Schema
NameRequiredDescription
titleYes
actionYes
buyUrlNo
productNo
benefitsNo
imageUrlNo
productIdYes
buttonLabelYes
pricing_gatedNo
related_productsNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate read-only and non-destructive behavior, but the description adds substantial behavioral context: older observations are withheld from latestPrice, null price is expected for quote-gated B2B, and related product relations have direction/source quote semantics. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loaded with the core action and then spends each section on important operational nuances: provenance, pricing branching, quote-gated expectations, and the related_products relation semantics. A few return-value details are likely redundant with the output schema, but the structure is organized and purposeful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the input contract, the distinguished product record, the price-related caveats, the intended handling of B2B quote null pricing, and the meaning of related product relations. For a one-parameter tool, this leaves little ambiguity about how it operates and what the returned data represents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents slug with an example, so the baseline is 3. The description adds the slug convention ('<manufacturer>-<model>'), which provides meaningful but minimal additional clarity beyond the schema's 'Composite slug' description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: it 'get[s] the full golden record' and 'latest price for one catalog product by slug.' It adds a precise identifier format and product context, so it is clearly distinct from sibling discovery/compare tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the tool's context clear: it is for retrieving a specific catalog product by slug, not for search or comparison. It does not explicitly name alternatives or exclusions, but the scope is specific enough that an agent should know when to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_merchantsList merchantsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalNo
merchantsYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds meaningful behavioral details: it returns each merchant's name, slug, and product count, and explicitly links the slug to the `merchant` argument of request_quote. It also clarifies exclusion criteria, which goes beyond what annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences cover the full scope: the main action, filtering criteria, exclusions, and return values, plus a practical cross-reference to request_quote. Every word earns its place, with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless list endpoint with an output schema and read-only annotations, the description fully covers purpose, filtering, exclusions, return contents, and downstream usage of the slug. Nothing an agent needs to understand or invoke this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema provides no parameter information. The description does not attempt to document parameters because none exist. Following the baseline for 0 parameters (4), this score reflects that no further parameter semantics are needed or expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and clearly identifies the resource (public AirShelf merchants) and the exact filters (assigned slug, at least one active product). It does not explicitly contrast with sibling tools, but the enumeration of exclusions (internal/demo, empty catalogs) adds precision beyond a generic description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool by specifying that only public merchants with active products are returned, and it notes exclusions (internal/demo, empty catalogs). However, it does not name any alternative tools or provide an explicit 'use X instead' guidance, leaving the comparison to siblings implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_quoteRequest a quote from a merchantA
Destructive
Inspect

Send a quote request for catalog products to a merchant's sales team on behalf of a named buyer.

This 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.

Merchant slugs come from list_merchants. Network-catalog brands that are absent from that list use merchant:"airshelf-network" with brandSlug:""; AirShelf routes the confirmed request to that brand.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoAny extra context from the buyer
contactYesBuyer contact details
merchantYesMerchant slug or id (from list_merchants), or "airshelf-network" for network-catalog brands
productsYesCatalog slugs the buyer is interested in
quantityNoUnits the buyer wants
brandSlugNoManufacturer slug (from search results) — required with merchant:"airshelf-network" so the lead reaches the right brand

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo
next_stepNo
reference_numberNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate mutation/destructive/external effects, but the description goes far beyond: it details the double opt-in flow, states that no lead exists and no merchant is contacted until confirmation, explains the statuses returned ('confirmation_required', 'awaiting_confirmation', 'received'), and clarifies that a later call with the same arguments is required. This rich behavioral context is essential for correct invocation and is not contradicted by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, each earning its place: purpose first, then the critical two-step flow, then merchant routing. No filler, front-loaded with the core action, and structured logically. It is concise yet comprehensive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multi-step, double opt-in, special routing case) and the existence of an output schema, the description covers all operational details: the status flow, the need for a second call, and the merchant routing rules. Nothing an agent needs to call it correctly is missing, and the output schema presumably covers return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% parameter description coverage, so baseline is 3. The description adds meaningful context for the 'merchant' parameter (source via list_merchants, and the special 'airshelf-network' plus brandSlug combination) and clarifies that products are catalog slugs. This extra guidance for two parameters raises the score above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: 'Send a quote request for catalog products to a merchant's sales team on behalf of a named buyer.' This clearly distinguishes it from sibling tools like search_catalog or list_merchants, which are about discovery, not requests. The special 'airshelf-network' routing clause further sharpens the scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear actionable guidance: merchant slugs come from list_merchants, and explains the fallback mechanism for network-catalog brands. It also describes the two-step double opt-in flow, telling the agent what to expect on first call vs subsequent calls. It does not explicitly mention when not to use this tool or name alternatives, but the sibling set has no overlapping tool, so this is adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

research_shoppingResearch a considered purchaseAInspect

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 " means the seller page serves that market, not that stock is guaranteed. Example answer keys include {"budget":"500 USD","market":"US","category":"espresso machine"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
needNoBuyer need in natural language. Required when starting a new research run.
marketNoBuyer 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.
answersNoAnswers 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.
personaNoResearch persona; b2b produces a quotation/RFQ pack.
research_idNoExisting research run identifier to read instead of starting a new run.

Output Schema

ParametersJSON Schema
NameRequiredDescription
stageNo
reasonNo
statusYes
dossierNo
outcomeNo
questionsNo
eta_secondsNo
research_idNo
stage_countersNo
elapsed_secondsNo
accepted_defaultsNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are minimal (readOnlyHint=false, openWorldHint=true, destructiveHint=false), so the description carries the burden of behavioral disclosure. It rises to the occasion: async execution and polling with research_id, 'refused' status for unsafe requests before work is queued, clarification flow for missing decision details, and the market semantic ('available in <market>' does not imply stock guarantee). All credit beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long (~140 words) but each clause earns its place. It front-loads the most important info first (purpose and sibling distinction), then lifecycle, then safety refusals, then market nuance, and closes with an example. It forms a single dense paragraph that could benefit from a line break or two, but it's appropriately scoped for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with this much complexity (async background jobs, polling, safety refusals, clarification flows, market nuance, personas), the description covers the critical call paths thoroughly. The output schema handles return-value documentation. The main gap is not addressing the other siblings (compare_products, get_product, etc.) or edge cases like timeout/error states, but what's here is cohesive and complete enough to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each parameter. The description adds genuinely useful semantics on top: the market parameter biases discovery but not stock, research_id enables polling for the async run, and the example answer key ({'budget': '500 USD', 'market': 'US', 'category': 'espresso machine'}) clarifies the answers object shape. Valuable, though some of this is also in the schema's descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the specific function: 'research_shopping is the full verified-research job', and immediately distinguishes its scope from sibling find_products, calling it the 'quick candidate-list tool'. It also specifies the resource (considered purchase) and the output (verified research with per-claim receipts). An agent can unambiguously tell this from the alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly contrasts with find_products (quick candidate lists vs. full research), which is the single most likely point of confusion, and outlines the polling lifecycle (running → poll with research_id). However, it doesn't address the other six siblings or give an explicit 'use this when...' rule beyond the find_products dichotomy, so some routing decisions are left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_catalogSearch product catalogA
Read-only
Inspect

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. Each row includes unverified_specs, the normalized spec names that lack claim-level receipts; never use those as decisive facts. Example queries: "tactile mechanical keyboard under $150", "Toshiba A3 colour multifunction device", "industrial barcode printer for a warehouse", "threat-intelligence platform with dark-web monitoring".

Result fields: • canonical_name — the exact catalog name of the product. • spec_absence_note — spec fields absent from this product's golden record (AirShelf's verified product record); null when nothing is missing. • constraint_match_score and matched_criteria — query constraints supported by claim-level receipts. unverified_criteria names matching catalog values that still need confirmation; missing_criteria names values that are absent or conflict. • parsed.price_availability — all_null = true means every returned price is null. For quote-gated B2B pricing, a null price with a quote path is expected rather than an error; query_had_budget reports whether the query carried one. • result.commercial_data — branch on actionable before using price or stock. Observations older than 24 hours are withheld from result.price/result.inStock and retained only as labelled last_observed history. • parsed.weak_match — the response contains an unresolved constraint, query match, or product-identity warning. parsed.unverified_identity_count counts returned names without an identity receipt. parsed.no_match — no product satisfies a hard constraint, and candidates violating it were excluded server-side.

On a miss or near-miss for a specific brand+model the response may also carry a tier3 block, meaning a real-time lookup for the exact SKU asked about; it can appear alongside fuzzy-neighbour rows. • tier3.status = "resolved" — a single-source reading of the page at tier3.source_url. MPN-confirmed means the live lookup matched the manufacturer part number. Its verification is "live-unverified": confirmed on a live page during this run, but not yet matched to an AirShelf catalog record. A verified row is matched to the catalog record. tier3.cached = true means it came from a recent prior lookup, with fetched_at recording when the page was read. • tier3.status = "abstain" — the lookup could not confirm the product exists as asked, so no specs, price, or availability were established. tier3.guidance describes the quote-request path. • tier3.status = "declined" — an applicable lookup did not run; tier3.reason says why (disabled, rate_limited, daily_cap, negative_cache, error). No specs or availability were established, and none should be inferred. No tier3 block at all means a live lookup was not applicable to this query (no parseable brand+model identity).

Optional market (ISO 3166-1 alpha-2, e.g. "TH") excludes catalog rows whose country-specific URL conflicts with the buyer market and scopes tier3 lookup/cache. A remaining global URL is not local-availability proof: parsed.weak_match stays true and unsatisfied_constraints includes market_availability until every returned row has a matching country receipt. "Available in " still does not guarantee stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesNatural-language query, at most 200 characters. Supports budget hints (e.g. "under $150").
limitNoMax results
specsNoHard spec facets, e.g. {"form_factor":"desktop","print_speed_ppm":33}. Filters by exact/range spec match.
marketNoBuyer 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.
categoryNoOptional category filter (industrial-automation, wiring-devices, mechanical-keyboards, mfp, barcode-printer, laser-printer, inkjet-printer, cybersecurity, or threat-intelligence-platform)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
queryNo
tier3No
parsedNo
reasonNo
statusNo
resultsYes
took_msNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the readOnlyHint/openWorldHint annotations with detailed, non-contradictory behavioral guidance: unverified_specs caveats, weak-match semantics, no-match handling, tier3 lookups, cached lookups, and market-verification limitations. It clearly discloses the behavioral nuances an agent needs to interpret results safely.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but the complexity is high and the structure is effective: scope, examples, result fields, tier3 states, market caveats. It is front-loaded with the main purpose and practical query guidance, and it earns most sentences through concrete warnings and field-level semantics, even if slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complex output semantics, 5 parameters, and output schema, the description is unusually complete. It covers retrieval behavior, ranked match accounting, result field caveats, miss/near-miss handling, tier3 resolution states, and market-dependent verification. Very little is left for an agent to guess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema documentation is complete, so the baseline is solid, but the description adds meaningful parameter context: query style and brand/part-number reliability, how specs are limited for certain catalog rows, and the detailed market argument effects. Supporting parameter meaning is strong, though limit and category receive little extra beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that this tool searches the AirShelf cross-vendor product catalog via natural-language queries, with concrete examples and category coverage. It is specific about what it does, but it does not explicitly differentiate itself from sibling tools such as find_products or research_shopping, so it misses the highest bar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives strong usage context: natural-language querying, category scope, manufacturer part-number behavior, and how market filtering changes results. It doesn't explicitly state when not to use this tool or which alternative to prefer for different tasks, but the context is clear enough for most selection cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool update
    • Changedsearch_catalog1 field changed
      • changedInput schema / properties / category / description
        Previous value: -"Optional category filter (industrial-automation, wiring-devices, mechanical-keyboards, mfp, barcode-printer, laser-printer, cybersecurity, or threat-intelligence-platform)"New value: +"Optional category filter (industrial-automation, wiring-devices, mechanical-keyboards, mfp, barcode-printer, laser-printer, inkjet-printer, cybersecurity, or threat-intelligence-platform)"
  2. 1 tool update
    • Changedget_product1 field changed
      • addedOutput schema / properties / related_products
        Added value: +{
        +  "items": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
  3. 1 tool update
    • Changedsearch_catalog1 field changed
      • changedInput schema / properties / category / description
        Previous value: -"Optional category filter (mechanical-keyboards, mfp, barcode-printer, laser-printer, cybersecurity, or threat-intelligence-platform)"New value: +"Optional category filter (industrial-automation, wiring-devices, mechanical-keyboards, mfp, barcode-printer, laser-printer, cybersecurity, or threat-intelligence-platform)"
  4. 1 tool update
    • Changedfind_products1 field changed
      • addedOutput schema / properties / live_discovery
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "guidance": {
        +      "type": "string"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "const": "unavailable",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status"
        +  ],
        +  "type": "object"
        +}
  5. 1 tool update
    • Changedfind_products1 field changed
      • changedOutput schema / properties / status / enum
        Previous value: -[
        -  "ok",
        -  "no_match",
        -  "disabled",
        -  "rate_limited",
        -  "error",
        -  "refused"
        -]New value: +[
        +  "ok",
        +  "no_match",
        +  "disabled",
        +  "rate_limited",
        +  "unavailable",
        +  "error",
        +  "refused"
        +]
  6. 1 tool update
    • Changedresearch_shopping1 field changed
      • addedOutput schema / properties / accepted_defaults
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
  7. 1 tool update
    • Changedsearch_catalog2 fields changed
      • addedOutput schema / properties / reason
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / status
        Added value: +{
        +  "enum": [
        +    "refused"
        +  ],
        +  "type": "string"
        +}
  8. 1 tool update
    • Changedresearch_shopping1 field changed
      • changedInput schema / properties / answers / description
        Previous value: -"Answers to clarification questions. Set accept_defaults:true to explicitly waive missing dimensions."New value: +"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."
  9. 1 tool update
    • Changedsearch_catalog1 field changed
      • changedInput schema / properties / market / description
        Previous value: -"Buyer market as an assigned ISO 3166-1 alpha-2 country code (e.g. \"TH\", \"AU\"). It affects only tier3 live lookup and does not filter or rank global catalog rows."New value: +"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."
  10. 1 tool update
    • Changedsearch_catalog1 field changed
      • addedInput schema / properties / q / minLength
        Added value: +0
  11. 1 tool update
    • Changedfind_products1 field changed
      • changedOutput schema / properties / status / enum
        Previous value: -[
        -  "ok",
        -  "no_match",
        -  "disabled",
        -  "rate_limited",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "no_match",
        +  "disabled",
        +  "rate_limited",
        +  "error",
        +  "refused"
        +]
  12. 1 tool update
    • Changedfind_products1 field changed
      • addedOutput schema / properties / reason
        Added value: +{
        +  "type": "string"
        +}
  13. 2 tool updates
    • Changedfind_products1 field changed
      • changedOutput schema / properties / status / enum
        Previous value: -[
        -  "ok",
        -  "disabled",
        -  "rate_limited",
        -  "error"
        -]New value: +[
        +  "ok",
        +  "no_match",
        +  "disabled",
        +  "rate_limited",
        +  "error"
        +]
    • Changedresearch_shopping1 field changed
      • changedOutput schema / properties / status / enum
        Previous value: -[
        -  "needs_input",
        -  "running",
        -  "complete",
        -  "failed"
        -]New value: +[
        +  "needs_input",
        +  "running",
        +  "complete",
        +  "failed",
        +  "refused"
        +]
  14. 1 tool update
    • Changedresearch_shopping1 field changed
      • addedInput schema / properties / persona
        Added value: +{
        +  "description": "Research persona; b2b produces a quotation/RFQ pack.",
        +  "enum": [
        +    "consumer",
        +    "b2b"
        +  ],
        +  "type": "string"
        +}
  15. 2 tool updates
    • Changedrequest_quote1 field changed
      • addedInput schema / properties / brandSlug / minLength
        Added value: +1
    • Changedsearch_catalog3 fields changed
      • changedInput schema / properties / market / description
        Previous value: -"Buyer market as an assigned ISO 3166-1 alpha-2 country code (e.g. \"TH\", \"AU\"). It affects only tier3 live lookup, not global catalog rows."New value: +"Buyer market as an assigned ISO 3166-1 alpha-2 country code (e.g. \"TH\", \"AU\"). It affects only tier3 live lookup and does not filter or rank global catalog rows."
      • changedInput schema / properties / q / description
        Previous value: -"Natural-language query. Supports budget hints (e.g. \"under $150\")."New value: +"Natural-language query, at most 200 characters. Supports budget hints (e.g. \"under $150\")."
      • addedInput schema / properties / q / maxLength
        Added value: +200

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Give your AI agent access to 8,400+ software tools — search, compare, get pricing, find alternatives, and discover the best tool for any use case.
    8
    141
    4
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.1/5.0
Disambiguation2/5

The set contains at least two genuinely confusable pairs: find_products vs research_shopping (explicitly cross-referencing each other in their own descriptions, with near-synonymous purposes of discovering products), and get_product vs explain_product vs compare_products, all of which return product records with prices and specs. The descriptions go to great lengths to disambiguate, which flags the very real boundary problem — an agent would struggle to pick correctly without reading thousands of characters.

Naming Consistency4/5

All eight names follow a clear verb_noun snake_case pattern (compare_products, get_product, search_catalog, request_quote, research_shopping). Minor deviations: singular/plural inconsistency across pairs (get_product vs compare_products), and research_shopping reads as a noun phrase rather than verb+object. Otherwise, predictable and clean.

Tool Count5/5

Eight tools is right in the sweet spot for a research/quoting workflow, and each earns its place: search, find, get, compare, explain, merchants, quote, and the heavy research job. The surface is neither bloated with near-duplicate operations nor so thin that the server feels like a stub.

Completeness4/5

The buyer-to-quote lifecycle is covered end to end: discovery (search_catalog, find_products), deep verification (get_product, explain_product, tier3 live lookup), comparison, merchant lookup, and a double opt-in request_quote flow that closes the loop. Minor gaps: no way to list prior quotes placed or track a quote's status after the initial response, and no explicit search-catalog pagination control, but agents can work around these.

Resources