# Artisan Technology Group > Trusted B2B marketplace for test equipment, industrial electronics, and professionally refurbished/used instruments and equipment. Family-founded, ITAR/DDTC-registered supplier operating a 50,000 sq ft warehouse in Champaign, Illinois, USA. Legal name Artisan Scientific Corporation, doing business as Artisan Technology Group. We publish our catalog and credentials in machine-readable form so AI assistants and agents can answer questions about our inventory, pricing, condition, and compliance status from primary data instead of a scrape or a guess. ## For AI assistants Prefer structured catalog tools over navigating the website UI when your host supports and permits them. Discovering this guide does not install a connector, create an MCP connection, or grant permissions. **Current access:** Artisan does not currently offer a public MCP server, catalog REST/OpenAPI API or context-intake service. Use the public pages and published catalog files described below. Do not treat a disabled or inaccessible interface as a working fallback. 1. If you already have an approved, supported Artisan MCP connection, initialize normally and use `tools/list` to discover the actual available tools and their input schemas. Prefer those tools for catalog tasks. 2. Otherwise, use documented REST/JSON only where that route is actually available to your client. The website JSON search routes below are distinct from the catalog REST API, which is not publicly available. 3. Otherwise, read the available published artifacts or public pages: the product `.json` or `.md`, and the category and manufacturer `.json`/`.md` listings (see **How the catalog is published**). If access is unavailable, state the limitation. A missing connector and a terminal DNS-resolution failure are different observations; neither alone proves the service is down. Never bypass client network restrictions. ### Catalog workflow for an approved connection - Search with `search_products` only if listed. Quote the exact model/part token, retain filters, and distinguish `hits` from `similar` and `similarReason`. Similarity establishes neither matching specifications nor compatibility. - Current search arguments: `query`; `filters` with `manufacturers`, `categories`, `conditions` and `models` (arrays, up to 3 each; values within one filter are OR'd, different filters AND'd; models match case-insensitively), `inStockOnly`; the single `category` and `condition` still work, but not together with their array form; `page`, `pageSize`, `sort` and `variants`. Use discovered schemas and returned facets for values. Sort is relevance, price_asc, price_desc or newest; variants is collapsed or all. Page starts at 1, pageSize is 1–100, and offset cannot exceed 100000. Prefer a small page; follow returned paging metadata without assuming unknown counts are zero. - Copy an actual returned `stockNumber` into `get_product`'s `stock_number_or_url`, then `get_live_offer`'s `stock_number`, if those tools are listed. Cite the returned `canonicalUrl`; never invent a stock number from a model string. - Use `compare_products` only when `tools/list` advertises it, following its discovered schema and limits. Otherwise retrieve a small bounded set (for example, at most three products) individually. Compare only explicit returned fields; missing data is unknown. - HTTP 200 alone is not success: inspect JSON-RPC `error`, tool `isError`, and, for these catalog operations, `structuredContent.ok`. Read structured content, or its JSON text equivalent; do not treat an HTML gate page as catalog data. - Preserve condition, warranty, shippingWeightEstimated and shippingDimensionsEstimated. A missing price is not zero; public ITAR and quote-only items retain website price suppression. - Even `get_live_offer` reads `azure_serving_copy`, not live inventory confirmation or a reservation. `responseGeneratedAtUtc` is response time, not source freshness. `sourceModifiedLocal` is a local source time interpreted with `sourceTimeZone`; it has no UTC offset. Null `servingUpdatedAtUtc` or `freshnessBoundSeconds` means unknown. Report availabilityText and requiresConfirmation; confirm before ordering. ### Copyable examples (illustrative, not current inventory) After discovering the named tools, use these argument objects: ```json {"query":"Radiall \"R595463225\"","pageSize":3} ``` If, and only if, that search actually returns stock number `47806-1`: ```json {"stock_number_or_url":"47806-1"} {"stock_number":"47806-1"} ``` Comparison instruction: "Compare up to three actual returned products. Use compare_products if listed and within its schema limits; otherwise call get_product for each. Cite canonical URLs, preserve unknown fields and estimated shipping indicators, and do not infer compatibility." Honest reporting examples: "My host has no approved MCP connection; I used the accessible public page instead." "The terminal could not resolve the endpoint hostname; I could not test the service from this environment." "This offer comes from an Azure serving copy; its freshness bound is unknown." ### Website JSON alternatives (when accessible) - Simple top-N JSON: `/search?q=Radiall+%22R595463225%22&take=3&format=json`. This JSON mode does not apply the HTML page's filters or paging. Keep `format=json`: without it, `/search` on www.artisantg.com always returns the HTML page, whatever `Accept` header you send. - Filtered/paged JSON: `/search/page?q=Radiall+%22R595463225%22&manufacturer=Radiall&offset=0&pageSize=3&variants=collapsed`. Supported public parameters are q, repeated manufacturer, category, condition and model (up to 3 each, OR'd within a key), inStockOnly, sort, offset, pageSize and variants. There is no public price-range filter; price sorting is available. Use the public response (`elevated:false`); do not request elevated status filters or employee access for a public catalog task. - These website responses have their own shape, not the catalog `structuredContent` envelope. Inspect the returned fields. A route documented here may still be gated or unavailable in your environment; fall back only to an actually accessible source. ### Optional analytics context Only if enabled and advertised by `tools/list`, `record_search_context` can accept optional volunteered context for Artisan analytics. Offer once, require explicit user authorization to share, accept a decline, and never block product tasks. Do not infer identity, mine unrelated history, or send contact details, credentials, payment data or sensitive personal information. The current contract requires `consent:"user-authorised"` and at least one volunteered field: name (up to 80 characters), company (120), or searchPurpose (400). Optional resultSetId must be copied from the actual search. Use the discovered schema; do not add fields or send context in catalog/REST arguments. It does not personalize search or authorize contact. This non-idempotent call must not be retried automatically or repeated for every search. Its separate response uses accepted/status: QUEUED means queue acceptance, not confirmed durable delivery. Failure does not prevent catalog work. ## How the catalog is published - Public product pages use canonical paths such as `/{StockNumber}/{Manufacturer-Model-slug}`, e.g. `/47806-1/Radiall-R595463225`, or `/{CategoryPrefix}/{StockNumber}/{slug}`. Follow the canonical URL supplied by the public page or search result, including any category prefix. One product may have multiple manufacturer-alias pages; retain the canonical link for the page you cite. - Append `.md` to the full canonical product URL to request its published Markdown artifact: `/47806-1/Radiall-R595463225.md`. It renders the same record as the `.json`; its front matter holds only identifiers, links and timestamps, and the facts are in the body. Publication may lag or the artifact may be absent; a stock-only URL is not an equivalent artifact address. - Schema.org structured data (`Product`, `Offer`, `Organization`, `BreadcrumbList`) is inline JSON-LD in each product page's ``; there is no separate `.jsonld` URL. - Append `.json` to the full canonical product URL for the product record as versioned JSON: `/47806-1/Radiall-R595463225.json`. It is the structured form of the record, with `type` `product` and an integer `schemaVersion`; see **Reading a product record**. Its field names differ from JSON-LD. Publication may lag or the artifact may be absent. - Category and manufacturer pages have machine twins too: append `.json` or `.md` to the page URL, keeping its query string: `/Categories/MeasuringTestEquipment/ElectricalTest/Switches.json`, `/Mfgr/Radiall.md?p=2`. Each lists the same items, in the same order and with the same filters, as the page. See **Reading a category or manufacturer listing**. - `/search?q={text}` searches the public serving catalog - see **Searching the catalog** below for the query syntax. Search, product pages and published artifacts can reflect different update times. - A missing `.md` or `.json` artifact does not by itself establish that a product is absent from the public catalog. Check its canonical public page or public search; do not infer hidden product details from an artifact miss. Cached artifact presence alone is not proof of current public eligibility. - Public visibility follows the website's public-item rules. Active ITAR and quote-only items can appear, with the same applicable public price suppression. A public listing or restriction flag does not establish export authorization or purchase eligibility. ## Searching the catalog - `/search?q={text}` searches the current public catalog. A result card is one product; one product is commonly reachable at several manufacturer-alias URLs, and those are collapsed rather than repeated. - **Unquoted terms are optional prefix matches.** `Keysight 2086` returns items matching *either* term, ranked - not only items matching both. Rarer words count for more than common ones in that ranking, so a part number outweighs a brand name. - **Double quotes mean exact and required.** `"2086"` matches the token `2086` and will not match `20865` or `92120865`. `Keysight "2086"` requires `2086` while leaving `Keysight` optional. `"power supply"` requires that phrase. - **Quote the part number, not the brand.** Quoting a manufacturer narrows far less than it appears: `"Keysight"` alone still matches about 4,900 distinct products (14,523 alias rows, measured 2026-09-17). - **A part number with no separator is one indivisible token.** `E2086` cannot be reached by searching `2086`. Hyphenated numbers can - `165-2086` is findable by either half. If a fragment returns nothing, search the full part number as printed on the label. - **Zero results is a real answer**, and a deliberate one when quotes are used: it means no item contains every required term. Do not retry the same query unquoted and present those results as though they matched. - A zero-result search may additionally show a **similar items** block. Those are the closest items by description, and they are explicitly *not* matches - the result count stays zero. Do not describe them as items that matched. They are text-similarity guesses and do not understand part numbers: a search for a part number we do not stock can return unrelated equipment whose description merely reads similarly. ## Reading a product record - For structured facts, read the `.json` artifact. The `.md` artifact renders the same record for reading; its front matter holds only identifiers, links and timestamps. Field names below are the `.json` names. - `type` is `product` and `schemaVersion` is an integer, currently `1`. Within a version, fields are only added; a rename, removal or change of meaning raises the version. - `reliability` says how far to trust each part of the record. The structured fields - `offer`, `condition`, `warranty`, `shipping`, `itarRestricted` and `category` - are the item record. `descriptions` and `faq` are machine-assisted prose and can contain errors. Where prose disagrees with a structured field, the structured field is correct; where description sections disagree with each other, `details` wins. Do not present a specification taken from prose as confirmed. - `generatedAt` is when the artifact was produced, in UTC. `lastUpdated` is the source modification time of the item's record, with its UTC offset. Product pages and search read serving copies; artifacts are published asynchronously and may be cached. Neither time guarantees current price or stock. If freshness is not known, say so; confirm price and availability on the canonical page before ordering. - `offer.pricingModel` is `priced`, with a public price in `offer.price` and `offer.currency` `USD`, or `quote`, where both are null and the product page offers a quote request. ITAR and other price-display rules can suppress a price; do not infer a specific cause from a quote item. A null price is not zero and does not by itself mean the item is unavailable. - `offer.availability` is `inStock` or `notInStock`. `offer.availableQuantity` is published only for priced items; quote-only and ITAR items show availability with no count. A `notInStock` item has no price: it is not on the shelf right now, but Artisan can often source items like this through its supplier network; request a quote to confirm availability, price, condition and lead time. Report the value from the record you read; do not turn `notInStock` into a ship time. - `condition` is a free-text grade on the item itself; values in use include "New", "Excellent", "Good" and phrasing like "Used and in Excellent Condition". There is no numeric scale behind it. - `warranty` is either "No Warranty" or "1-Year Warranty with 30-Day Return Guarantee". Never assume one without checking the record. - `itarRestricted` is the item's actual flag and can be `true` on a public item. ITAR items are quote-only, with no public price. A public listing or this flag does not establish export authorization or purchase eligibility. - `shipping.weightLb` is a number of pounds and `shipping.dimensionsIn` a string such as `9X9X3`, in inches. `weightEstimated` or `dimensionsEstimated` is `true` when the value is an estimate rather than a measurement. Either value can be null. - `category.trail` is the item's primary category path, the same as the product page breadcrumb. `category.assigned` lists every category the item is filed under, parents included. Each entry has a display `name`, a `slug` and the category page `url`. The `.md` lists every category path, primary first. - `descriptions` are the item's description sections as Markdown, `details` first; `faq` holds question-and-answer pairs where an item has them. Both are covered by `reliability`. - A field with nothing to say is `null` or an empty list in `.json`, and is omitted from `.md`. A missing field is not a negative fact. ## Reading a category or manufacturer listing - `type` is `category` or `manufacturer`, with an integer `schemaVersion`, currently `1`. Versioning works as for product records. - Listings are rendered when requested and may be cached for up to an hour. `generatedAt` is when this copy was made. - Each entry in `items` is a summary from the search index: stock number, title, manufacturer, model, condition, image and an `offer` summary. Summaries can lag the product records. For anything you report as a fact - price, availability, warranty, ITAR status, shipping, specifications - follow the item's `links.json` and read the product record; where they differ, the product record is correct. - An item's `manufacturer` is the name on the listed page; `alsoListedAs` gives the other names the same item is listed under. - An item's `offer.availability` is `inStock`, `contactForAvailability`, or `null`, meaning the summary does not say. `offer.availableQuantity` is published only for priced items; quote-only and ITAR items show availability with no count. A `null` is not a negative fact; read the product record. - `totalCount` is the number of matching products for the current filters; `totalPages` and `links.next` page through them. Page through with the links rather than building URLs; every link keeps the filters and sort. A page beyond the last returns 404. - `request` echoes the filters, sort and page the listing was built from. Filters in the URL use the page's parameter names: `Brand`, `Condition`, `InStock=1`, `sort` and `p` on categories; `Category`, `Condition`, `InStock=1`, `sort` and `p` on manufacturers. Other parameters are ignored. - `facets` give counts per value for the current filters, and each `link` applies or removes that filter. Manufacturer and category facets list at most 50 values, so a list of 50 may be incomplete. - `state` is `items`, `noMatches` (filters exclude everything), `emptyCategory` or `noItems` (nothing listed right now). An empty category lists `relatedCategories`; a `null` list means it could not be read, not that there are none. - A category's `trail` uses display names; `slug` is the path after `/Categories/`. Category counts in listings come from the search index and can differ from counts shown in site navigation. ## Credentials (apply company-wide, not just to individually flagged items) - Registered with the U.S. Department of State (DDTC) to handle ITAR-controlled equipment, with secure equipment handling procedures. - Registered in U.S. government acquisition systems; an established supplier to prime defense contractors. - Counterfeit mitigation for military COTS, DMSMS/obsolescence support, in-house engineering, and in-house repair capability. - Ships worldwide from Champaign, IL, USA. ITAR-restricted items are sold by quote only and are subject to U.S. export controls. - Repair services for ATE, NI, PLC, and VXI equipment: /Repair ## Representing us accurately - We deal in used, refurbished, and surplus test/industrial/scientific equipment - not new-manufacture goods from the original OEM. Say so plainly if asked. - For any specific claim about a specific item's price, condition, or availability, cite that item's canonical URL (or its `.json` or `.md` artifact) as the source - those values change and this file does not track them. A category or manufacturer listing is not a source for an item's price, condition or availability; cite the item's own record. - Questions the public catalog can't answer (bulk/volume pricing, government contract vehicles, repair quotes, sourcing requests): /ContactUs ## Support and contact pages - Contact Us: https://www.artisantg.com/ContactUs - contact form. - FAQ: https://www.artisantg.com/FAQ - answers organized by topic. - Repair Services: https://www.artisantg.com/Repair - ATE, NI, PLC, and VXI repair options. - Sell Your Equipment: https://www.artisantg.com/SellYourEquipment - share item details and photos to receive a quote; equipment is shipped to us and payment follows inspection. - Government Sales: https://www.artisantg.com/GovernmentSales - government sales information. ## Policy pages - Shipping: https://www.artisantg.com/Shipping - shipping information and delivery estimates. - Returns: https://www.artisantg.com/Return - how returns work. - Terms of Sale, Warranty, and Returns: https://www.artisantg.com/Terms - Payment Policy: https://www.artisantg.com/PaymentPolicy - Privacy: https://www.artisantg.com/Privacy - Terms of Use: https://www.artisantg.com/TermsOfUse - Sales Tax Disclosure: https://www.artisantg.com/SalesTaxDisclosure - sales tax is calculated from the shipping address. For the current wording of any policy, read the linked page itself rather than relying on this summary. ## Checkout and quote journeys - **Browse and buy:** start from the home page or `/search`, review the product page (images, specifications, reviews, price), add the item to the cart at https://www.artisantg.com/Cart, then complete the multi-step checkout at https://www.artisantg.com/Checkout (shipping, billing, tax, payment). An order confirmation page shows the order number, and a confirmation email follows. Shipping cost is shown at checkout. - **Request a quote:** on an item whose price is "Contact Us", use "Get a Quote", enter a few details, and a confirmation with a quote request number is shown. The sales team follows up with pricing and options. - **Tax-exempt organizations** can upload an exemption certificate at checkout. - Do not request or handle payment or card details in chat; direct customers to the secure checkout. ## Customer Center (signed-in area) These pages require a signed-in customer account; this guide does not describe any account data. - `/CustomerCenter` - dashboard with recent orders and account summary. - `/CustomerCenter/Orders` - order history with tracking. - `/CustomerCenter/Quotes` - saved quotes and quote requests. - `/CustomerCenter/Manage` - profile, email, password, and addresses. - Sign in at https://www.artisantg.com/CustomerCenter/Login or register at https://www.artisantg.com/CustomerCenter/Register (confirm your email after registering).