For AI agents and integrators

7 tools

MCP and REST, no key · catalogue, quotes, order requests

Connect your assistant to the agrodiler.com catalogue: it finds a bearing by designation, GOST number or size, works out the total with delivery and sends an order request for the buyer. No key, no sign-up. The API takes no money: the buyer confirms the request with a code from an email, and then a manager gets in touch.

Connect— one address, no key

MCP server · Streamable HTTPhttps://www.agrodiler.com/mcp

No session, no login: add the address as a remote MCP server in your client settings. Protocol revision 2026-07-28; clients on 2025 revisions work too. The server is listed in the official MCP registry as com.agrodiler/catalog.

REST API · OpenAPI 3.1, version 1.1.0https://www.agrodiler.com/api/agent/v1/
Open openapi.yaml

The same tools: POST with a JSON body, JSON in reply. openapi.yaml describes every field, error and limit.

For language models · plain texthttps://www.agrodiler.com/llms.txt

Site sections, page address patterns and markets in a few lines, so the assistant does not have to crawl the whole site.

Search for bearing 6205 2RS · EU market (lang en), three itemscurllines scroll sideways

curl -X POST https://www.agrodiler.com/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"search_products",
         "arguments":{"query":"6205 2RS","lang":"en","limit":3}}}'
curl -X POST https://www.agrodiler.com/api/agent/v1/search-products \
  -H 'content-type: application/json' \
  -d '{"query":"6205 2RS","lang":"en","limit":3}'

Reply · 14/11/2026, shortenedover MCP: inside result.structuredContentresponse body

{
  "query": "6205 2RS",
  "match": "all_words",
  "total": 28,
  "items": [
    {
      "handle": "ct-6205-2rs",
      "section": "bearing",
      "title": "Bearing CT 6205 2RS",
      "brand": "CT",
      "in_stock": true,
      "stock_qty": 15762,
      "price_hint": { "amount": 0.82, "currency": "eur" },
      "url": "https://www.agrodiler.com/bearing/ct-6205-2rs/"
    },
    { "handle": "ct-6205-2rs-c3", … "price_hint": { "amount": 0.86, … } },
    { "handle": "nte-6205-2rs", … "price_hint": { "amount": 0.98, … } }
  ],
  "note": "price_hint is the catalog price in EUR at site build time including VAT at the default display country rate …"
}
  • total: 28 is how many items matched. The reply holds the first 3, as asked in limit (up to 20).
  • Pass handle on to get_product, quote, cart_link and place_order.
  • price_hint is the catalogue price when the site was built. The total we stand by comes from quote.

What the API does— REST uses the same names with hyphens

Catalogueread only: they reserve and change nothing
search_productsThe same search as on the site: part number, bearing designation, GOST number (180205 becomes 6205-2RS), size 25x52x15, brand or name.REST: search-products
get_productOne item: number, brand, size, stock, minimum order quantity and price. No price means the manager quotes it.REST: get-product
quoteThe total by the site cart rules: prices, minimum order, delivery; for the EU, delivery and VAT on separate lines. Creates no order.REST: quote
cart_linkA link to the site with the cart filled in and the order form open, for a buyer who prefers to finish there.REST: cart-link
Order requestcreate and confirm a request, take no payment
place_orderSends the request once the buyer has agreed to the items and the total. The buyer gets a 6-digit code by email.REST: place-order
confirm_orderConfirms the request with the code the buyer gives you. Never guess it: 8 attempts per request.REST: confirm-order
resend_codeA new code when the email did not arrive or the code expired (it lasts 30 minutes). At most 2 times per request.REST: resend-code

How an order goes through— it is a request, not a purchase: the API takes no payment

  1. search_productsAgent

    Finds the items and takes their handle.

  2. quoteAgent

    Works out the total. The buyer sees it and agrees; total_minor from the reply goes forward.

  3. place_orderAgent

    Sends the items, the buyer’s name and email, expected_total_minor and a new idempotency_key. Gets order_number and order_secret.

  4. Emailed codeBuyer

    Receives a 6-digit code valid for 30 minutes. Tells it to the agent or confirms with the link in the email.

  5. confirm_orderAgent

    Sends the code with order_number and order_secret. The request goes to a manager.

  6. ManagerAgrodiler

    Checks stock and price and contacts the buyer. A contract and an invoice follow.

  • If the total changed after quote, you get the error price_changed and the new total in new_total. Show it to the buyer and send the request with it.
  • Connection dropped during place_order: retry with the same idempotency_key. You get the same request back, never a second one.
  • order_secret is only for confirm_order and resend_code. Keep it out of the chat and out of public logs.
  • A large request comes back with needs_phone_check: the manager calls the buyer before confirming.
  • Left unconfirmed for 48 hours, a request has the buyer’s contact details anonymised and its code cancelled; the request record itself stays.
  • If the buyer wants to finish alone, cart_link gives a link to the site with the cart and order form filled in.

Markets, languages, currencies— chosen with the lang parameter

en

EU, prices in euros, delivery to EU countries. get_product returns the price excluding VAT; quote adds the VAT of the delivery country.

ship_to.country is required, as a country code: DE, PL, FR. Minimum order €49.00 excluding VAT.

uk, ru

Ukraine, prices in hryvnias including VAT, delivery by Nova Poshta. Do not send ship_to. Without lang, uk is used.

Minimum order UAH 1,000.

Fields ending in _minor are in cents or kopiyky: 3300 means 33.00. price_hint comes in hryvnias or euros. Product names follow lang; API service messages are in English.

Limits— per network address; for IPv6, per /64 network

60 calls a minute

In total, across all tools.

3 requests an hour

place_order.

10 confirmations an hour

confirm_order.

3 emails an hour

Per mailbox: code emails, first and resent. Further caps per hour: 5 emails per address, 10 per subnet (IPv4 /24, IPv6 /48).

8 code attempts

Per request. A new code does not reset them.

2 resent codes

resend_code per request; the previous code stops working.

Over a limit you get HTTP 429 with a Retry-After header: the number of seconds to wait.

If something goes wrong— Mon–Fri 8:00⁠–⁠17:00, Madrid time (CET/CEST)

Send us the request, the full reply and the time you sent it. The error code is in the error field, the explanation in message. Email: info@agrodiler.com