For developers & AI teams

Give your agent a parts database it can cite.

Five tools, served over MCP, sitting on top of 808,000+ industrial products and 5.5M+ verified spec facts. Built so a procurement copilot, BOM generator, or engineering assistant can look up a real part instead of hallucinating one.

Private access

Current Tools

What's exposed

MCP (Model Context Protocol) is the open standard for connecting a model to external tools and data. These five tools are the current surface — query-shaped, not a SQL dump.

meta

Call this first. Category slugs, the spec keys actually observed per category (with units and five-language labels), and live totals — not documentation that drifts from reality. Guessing category and key names blind, before this tool existed, got 4 of 13 slugs and 7 of 14 keys right. This is why you don't have to.

requestmeta
meta()

// live response, abbreviated — full payload covers all 99 categories
{
  "vocab_version": "0.17.0",
  "generated_at": "2026-09-04T22:33:21Z",
  "totals": { "products": 808223, "facts": 4869544,
              "manufacturers": 229, "categories_with_data": 99 },
  "categories": [
    { "slug": "power_contactors",
      "labels": { "en": "Power contactors", "zh-TW": "功率接觸器",
                  "es": "Contactores de potencia", "fr": "...", "th": "..." },
      "products": 12566,
      "typed_products": 11610,
      "spec_keys": [
        { "key": "rated_current_ac3_a", "unit": "A", "type": "number" }
      ] }
  ]
}

find_equivalents

Cross-brand alternates for a given part number — deterministic matching (rating floors met, coil voltage within tolerance, poles exact), a per-spec diff, and a link back to each manufacturer's page.

requestfind_equivalents
find_equivalents(mpn="3RT20262AL24")

// live response, abbreviated
{
  "target": { "mpn": "3RT20262AL24", "brand": "Siemens",
              "manufacturer_page_verified": true },
  "tolerance": 0.25,
  "brands_found": 2,
  "equivalents": {
    "schneider_electric": [{ "mpn": "LC1D25P7",
      "spec_comparison": {
        "rated_current_ac3_a": { "target": 25, "candidate": 25, "delta_pct": 0.0 },
        "coil_voltage_v":      { "target": 230, "candidate": 230, "delta_pct": 0.0 }
      },
      "manufacturer_page_verified": false }],
    "abb": [{ "mpn": "AFC26-30-00-34",
      "spec_comparison": {
        "rated_current_ac3_a": { "target": 25, "candidate": 26, "delta_pct": 4.0 },
        "coil_voltage_v":      { "target": 230, "candidate": 208, "delta_pct": -9.6 }
      },
      "manufacturer_page_verified": true }]
  }
}

Note the Schneider match shows manufacturer_page_verified: false — that's the real, current state for this record, not smoothed over. See Coverage.

get_product

Full typed spec sheet for one MPN — headline specs plus the fully qualified fact table (voltage/temperature derating rows distributors don't show), canonical keys, units, confidence, and source.

requestget_product
get_product(mpn="3RT20262AL24")

// live response, headline_specs abbreviated (all_facts carries the full derating table)
{
  "mpn": "3RT20262AL24",
  "manufacturer": "Siemens",
  "family": "SIRIUS 3RT contactors, 3-pole, up to 250 kW",
  "category": "power_contactors",
  "lifecycle_status": "Active",
  "manufacturer_page": "https://sieportal.siemens.com/en-us/products-services/detail/3RT20262AL24",
  "manufacturer_page_verified": true,
  "headline_specs": {
    "rated_current_ac3_a": { "value": 25, "unit": "A", "qualifiers": { "at_voltage_v": 400 },
      "source": "siemens_sieportal", "confidence": 0.95 },
    "coil_voltage_v": { "value": 230, "unit": "V", "source": "digikey", "confidence": 0.85 },
    "mechanical_life_cycles": { "value": 10000000, "source": "siemens_sieportal", "confidence": 0.95 }
  },
  "vocabulary": "canonical_keys.yaml v0.8.0"
}

search_products

Query by category and spec constraints — min / max / eq objects evaluated on headline facts, not free-text search.

requestsearch_products
search_products(
  category="power_contactors",
  constraints={
    "rated_current_ac3_a": {"min": 25},
    "coil_voltage_v": {"eq": 230}
  },
  limit=5
)

// count: 5 real results, e.g.
{ "mpn": "3RT20471AP001AA0", "brand": "Siemens",
  "specs": { "rated_current_ac3_a": 110, "coil_voltage_v": 230 } }

get_datasheet

Document pointers for a part — manufacturer asset URLs, plus locally archived PDFs where we've kept a copy. 2.8M+ documents archived across datasheets, installation guides, and operating manuals.

requestget_datasheet
get_datasheet(mpn="3RT20262AL24")

// live response
{
  "mpn": "3RT20262AL24",
  "manufacturer_page_verified": true,
  "documents": [
    { "type": "datasheet",
      "url": "https://mall.industry.siemens.com/
        teddatasheet/?format=PDF&mlfbs=
        3RT2026-2AL24&caller=SiePortal" }
  ],
  "local_pdfs": []
}

Why It's Hard

Why teams don't just scrape it themselves

  • 33+ manufacturers means 33+ different site structures, 33+ different vocabularies for the same physical spec, and at least one JavaScript-rendered SPA that breaks plain scrapers.
  • Normalization is the actual cost. Getting to a shared schema across brands means building and maintaining a reviewed mapping dictionary per source — not a one-time script.
  • Cross-brand equivalence is a standalone hard problem. Knowing that a Schneider contactor and a Siemens contactor are real substitutes, with per-spec justification, is expertise-gated work today.
  • Provenance has to be structural, not promised. Every fact here is tagged with its source and a confidence score at write time, not asserted after the fact.
Roadmap

Four more tools, built on what already exists

Not speculative additions — each one sits on infrastructure the database already has (versioning, cross-referenced identifiers, category taxonomy). Scoped, not shipped.

Discovery

list_categories()

All 75 canonical categories with product counts, so an agent can find the right slug instead of guessing it before it can call search_products.

Change tracking

get_history(mpn)

Every fact is already versioned — this returns the actual diff: old value, new value, manufacturer link, timestamp. The engine behind the spec-change monitoring on our distributor roadmap.

Identity resolution

resolve_identifier()

Go from a barcode scan (gtin=) or a distributor's internal SKU (distributor_sku=) straight to the canonical MPN. Built on 985K+ identifiers already cross-referenced in the database.

Efficiency

batch_get_products(mpns=[…])

Full spec sheets for a whole BOM in one call instead of one get_product request per line item.

Workflows

What these look like chained together

Current tools and roadmap tools (marked) combined into actual workflows.

When a part goes EOL

Three calls, not a support ticket

get_product shows a lifecycle_status that's moved off Active. get_history (roadmap) pulls the actual change — old status, new status, manufacturer notice, date. find_equivalents immediately proposes verified substitutes.

Spec to BOM

"15HP compressor, 380V, needs a contactor"

search_products turns the constraint into real candidates. batch_get_products (roadmap) pulls full spec sheets for the shortlist in one call. get_datasheet attaches the manufacturer PDF for sign-off.

Incumbent BOM cross-reference

A customer's parts list, mixed brands

resolve_identifier (roadmap) turns barcodes scanned off installed equipment into canonical MPNs. find_equivalents checks each one against what a distributor actually stocks, brand by brand.

Get Access

Request early access

We're onboarding a small number of teams directly before opening broader access. Tell us what you're building and we'll follow up.

We'll follow up at the email you provide — no account or key is created automatically.