Get full details for a single Rakentaja Outlet product.
Fetches both the product record and a real-time availability check
in parallel. Use this after `search_catalog` returns a product ID
to show the user complete information (full description, all images,
current stock).
Args:
product_id: Product ID from `search_catalog` results (integer).
Returns:
JSON with product details:
- id, name, sku, ean, brand, category
- description (full HTML/text), description_short
- price_gross (incl. 25.5% VAT), price_net, vat_percent, currency
- available_for_order (bool), availability_status ("in_stock" |
"supplier_stock" | "out_of_stock"), estimated_delivery_min_days,
estimated_delivery_max_days
- in_stock, stock_quantity, supplier_in_stock, supplier_stock_quantity
(raw fields — prefer available_for_order + availability_status)
- weight_kg, unit
- product_url (direct link to product page)
- image_url (main image), images (list of all image URLs)
- availability: fresh stock check result (may be more current than
stock_quantity if inventory changed since catalog was cached)
- disclaimer: legal notice that prices are indicative
On error, raises MCP ToolError → response has isError:true with
structured JSON: {"error": {"code": "not_found" | "invalid_argument"
| "backend_unavailable", "message": "...", "field": null|str,
"retryable": true|false}}. The StructuredErrorMiddleware ensures
the format is consistent across all tools.
Notes:
- Prices include Finnish 25.5% VAT. Business buyers see price_net
for VAT-registered net price.
- Pass `product_url` to the user for viewing or adding to cart —
do not attempt to add to cart via this tool (use create_cart_link).