okun-koneosa
Finnish industrial supplies store. Read-only MCP: catalog search, product details, cart, policies.
Should I use this
Quality & Safety
Findings (3)
- HIGH
- MEDIUMin search_catalog
- MEDIUMin search_shop_catalog
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"okun-koneosa": {
"url": "https://okunkoneosa.fi/mcp"
}
}
}Remote endpoints
https://okunkoneosa.fi/mcpstreamable-httpWhat it can do
Tool inventory
Tools (5)
๐ขsearch_catalog(query, category_id, in_stock_only, sort, limit, ...)
Search the Okun Koneosa product catalog. Okun Koneosa Oy (okunkoneosa.fi) is a Finnish industrial supplies store in Outokumpu, North Karelia. Around 6500 products: bearings, belts, seals, hydraulics, pneumatics, fasteners, hand tools, protective equipment and machine parts. Everything listed is physically in stock. Prices in EUR, including Finnish VAT 25.5%. Free shipping on orders over 150 EUR. Args: query: Free-text search โ matches product name, ordering number (SKU) or EAN code. Leave empty to browse a category. category_id: Restrict to one category. The category list is available at https://okunkoneosa.fi/api/v1/categories (a plain REST endpoint, not an MCP tool). in_stock_only: True by default. The shop only publishes products that are in stock, so this rarely changes the result. sort: "name" (default), "price_asc", "price_desc" or "newest". limit: Products per page, 1-50 (default 10). page: Page number for paging through larger result sets. Returns: JSON with: - products: list of products, each with id, name, name_raw, sku, ean, brand, category, price_gross (incl. VAT), price_net, currency, unit, in_stock, stock_quantity, weight_kg, product_url, image_url and a shortened description (description_truncated tells if it was cut). - total, page, per_page, total_pages - disclaimer: prices and availability are confirmed at checkout Notes: - `name` is cleaned for reading; `name_raw` is the supplier's own spelling, useful for exact matching against a supplier catalogue. - `image_url` is null for most products โ the shop is still collecting product photography from suppliers. A missing image does not mean the product is unavailable. - Use get_product_details(id) for the full description and a fresh stock check.
Input Schema
{
"type": "object",
"properties": {
"query": {
"default": "",
"description": "Free-text search term",
"type": "string"
},
"category_id": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Category ID"
},
"in_stock_only": {
"default": true,
"type": "boolean"
},
"sort": {
"default": "name",
"enum": [
"name",
"price_asc",
"price_desc",
"newest"
],
"type": "string"
},
"limit": {
"default": 10,
"description": "1-50",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"page": {
"default": 1,
"description": "Page number (>= 1)",
"minimum": 1,
"type": "integer"
}
}
}Output Schema
{
"type": "object",
"properties": {
"products": {
"items": {
"$ref": "#/$defs/ProductSummary"
},
"title": "Products",
"type": "array"
},
"total": {
"description": "Total matches across all pages",
"title": "Total",
"type": "integer"
},
"page": {
"title": "Page",
"type": "integer"
},
"per_page": {
"title": "Per Page",
"type": "integer"
},
"total_pages": {
"title": "Total Pages",
"type": "integer"
},
"suggested_queries": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Alternative spellings that DO return results โ only present when total is 0",
"title": "Suggested Queries"
},
"disclaimer": {
"title": "Disclaimer",
"type": "string"
}
},
"required": [
"total",
"page",
"per_page",
"total_pages",
"disclaimer"
],
"$defs": {
"ProductSummary": {
"description": "Tuote hakutuloksessa.",
"properties": {
"id": {
"description": "Product ID โ pass to get_product_details or create_cart_link",
"title": "Id",
"type": "integer"
},
"name": {
"description": "Readable product name",
"title": "Name",
"type": "string"
},
"name_raw": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Supplier's own spelling, often ALL CAPS",
"title": "Name Raw"
},
"sku": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Ordering number used by the shop",
"title": "Sku"
},
"ean": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "EAN/GTIN barcode, when known",
"title": "Ean"
},
"brand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Manufacturer",
"title": "Brand"
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Category"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Shortened to 200 chars",
"title": "Description"
},
"description_truncated": {
"default": false,
"description": "True if description was cut โ use get_product_details",
"title": "Description Truncated",
"type": "boolean"
},
"price_gross": {
"description": "Price incl. Finnish VAT 25.5%",
"title": "Price Gross",
"type": "number"
},
"price_net": {
"description": "Price excl. VAT",
"title": "Price Net",
"type": "number"
},
"vat_percent": {
"default": 25.5,
"title": "Vat Percent",
"type": "number"
},
"currency": {
"const": "EUR",
"default": "EUR",
"title": "Currency",
"type": "string"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Selling unit, e.g. 'kpl'",
"title": "Unit"
},
"in_stock": {
"title": "In Stock",
"type": "boolean"
},
"stock_quantity": {
"description": "Units available right now",
"title": "Stock Quantity",
"type": "number"
},
"weight_kg": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Weight Kg"
},
"product_url": {
"description": "Public product page",
"title": "Product Url",
"type": "string"
},
"image_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Null for most products โ photography is still being collected",
"title": "Image Url"
}
},
"required": [
"id",
"name",
"price_gross",
"price_net",
"in_stock",
"stock_quantity",
"product_url"
],
"title": "ProductSummary",
"type": "object"
}
},
"description": "search_catalog -vastaus.",
"title": "SearchCatalogResult"
}๐ขsearch_shop_catalog(query, category_id, in_stock_only, sort, limit, ...)
Search the Okun Koneosa product catalog. Okun Koneosa Oy (okunkoneosa.fi) is a Finnish industrial supplies store in Outokumpu, North Karelia. Around 6500 products: bearings, belts, seals, hydraulics, pneumatics, fasteners, hand tools, protective equipment and machine parts. Everything listed is physically in stock. Prices in EUR, including Finnish VAT 25.5%. Free shipping on orders over 150 EUR. Args: query: Free-text search โ matches product name, ordering number (SKU) or EAN code. Leave empty to browse a category. category_id: Restrict to one category. The category list is available at https://okunkoneosa.fi/api/v1/categories (a plain REST endpoint, not an MCP tool). in_stock_only: True by default. The shop only publishes products that are in stock, so this rarely changes the result. sort: "name" (default), "price_asc", "price_desc" or "newest". limit: Products per page, 1-50 (default 10). page: Page number for paging through larger result sets. Returns: JSON with: - products: list of products, each with id, name, name_raw, sku, ean, brand, category, price_gross (incl. VAT), price_net, currency, unit, in_stock, stock_quantity, weight_kg, product_url, image_url and a shortened description (description_truncated tells if it was cut). - total, page, per_page, total_pages - disclaimer: prices and availability are confirmed at checkout Notes: - `name` is cleaned for reading; `name_raw` is the supplier's own spelling, useful for exact matching against a supplier catalogue. - `image_url` is null for most products โ the shop is still collecting product photography from suppliers. A missing image does not mean the product is unavailable. - Use get_product_details(id) for the full description and a fresh stock check.
Input Schema
{
"type": "object",
"properties": {
"query": {
"default": "",
"description": "Free-text search term",
"type": "string"
},
"category_id": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Category ID"
},
"in_stock_only": {
"default": true,
"type": "boolean"
},
"sort": {
"default": "name",
"enum": [
"name",
"price_asc",
"price_desc",
"newest"
],
"type": "string"
},
"limit": {
"default": 10,
"description": "1-50",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"page": {
"default": 1,
"description": "Page number (>= 1)",
"minimum": 1,
"type": "integer"
}
}
}Output Schema
{
"type": "object",
"properties": {
"products": {
"items": {
"$ref": "#/$defs/ProductSummary"
},
"title": "Products",
"type": "array"
},
"total": {
"description": "Total matches across all pages",
"title": "Total",
"type": "integer"
},
"page": {
"title": "Page",
"type": "integer"
},
"per_page": {
"title": "Per Page",
"type": "integer"
},
"total_pages": {
"title": "Total Pages",
"type": "integer"
},
"suggested_queries": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Alternative spellings that DO return results โ only present when total is 0",
"title": "Suggested Queries"
},
"disclaimer": {
"title": "Disclaimer",
"type": "string"
}
},
"required": [
"total",
"page",
"per_page",
"total_pages",
"disclaimer"
],
"$defs": {
"ProductSummary": {
"description": "Tuote hakutuloksessa.",
"properties": {
"id": {
"description": "Product ID โ pass to get_product_details or create_cart_link",
"title": "Id",
"type": "integer"
},
"name": {
"description": "Readable product name",
"title": "Name",
"type": "string"
},
"name_raw": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Supplier's own spelling, often ALL CAPS",
"title": "Name Raw"
},
"sku": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Ordering number used by the shop",
"title": "Sku"
},
"ean": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "EAN/GTIN barcode, when known",
"title": "Ean"
},
"brand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Manufacturer",
"title": "Brand"
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Category"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Shortened to 200 chars",
"title": "Description"
},
"description_truncated": {
"default": false,
"description": "True if description was cut โ use get_product_details",
"title": "Description Truncated",
"type": "boolean"
},
"price_gross": {
"description": "Price incl. Finnish VAT 25.5%",
"title": "Price Gross",
"type": "number"
},
"price_net": {
"description": "Price excl. VAT",
"title": "Price Net",
"type": "number"
},
"vat_percent": {
"default": 25.5,
"title": "Vat Percent",
"type": "number"
},
"currency": {
"const": "EUR",
"default": "EUR",
"title": "Currency",
"type": "string"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Selling unit, e.g. 'kpl'",
"title": "Unit"
},
"in_stock": {
"title": "In Stock",
"type": "boolean"
},
"stock_quantity": {
"description": "Units available right now",
"title": "Stock Quantity",
"type": "number"
},
"weight_kg": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Weight Kg"
},
"product_url": {
"description": "Public product page",
"title": "Product Url",
"type": "string"
},
"image_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Null for most products โ photography is still being collected",
"title": "Image Url"
}
},
"required": [
"id",
"name",
"price_gross",
"price_net",
"in_stock",
"stock_quantity",
"product_url"
],
"title": "ProductSummary",
"type": "object"
}
},
"description": "search_catalog -vastaus.",
"title": "SearchCatalogResult"
}๐ขget_product_details(product_id)
Get full details and current stock for one Okun Koneosa product. Args: product_id: The numeric product id returned by search_catalog. Returns: JSON with the full product record: id, name, name_raw, sku, ean, brand, category, full description (not truncated), price_gross, price_net, vat_percent, currency, unit, weight_kg, product_url, image_url, plus a freshly checked in_stock / stock_quantity. Notes: - Stock is read at call time from a separate availability endpoint, so it is more current than the value returned by search_catalog. - Returns {"error": "product_not_found"} for unknown or unpublished ids. Products that are out of stock are unpublished, so a previously valid id can stop resolving. - To let the user buy, pass product_url, or build a cart link with create_cart_link.
Input Schema
{
"type": "object",
"properties": {
"product_id": {
"description": "Product ID from search_catalog",
"minimum": 1,
"type": "integer"
}
},
"required": [
"product_id"
]
}Output Schema
{
"type": "object",
"properties": {
"id": {
"description": "Product ID โ pass to get_product_details or create_cart_link",
"title": "Id",
"type": "integer"
},
"name": {
"description": "Readable product name",
"title": "Name",
"type": "string"
},
"name_raw": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Supplier's own spelling, often ALL CAPS",
"title": "Name Raw"
},
"sku": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Ordering number used by the shop",
"title": "Sku"
},
"ean": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "EAN/GTIN barcode, when known",
"title": "Ean"
},
"brand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Manufacturer",
"title": "Brand"
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Category"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Full description, not truncated",
"title": "Description"
},
"description_truncated": {
"default": false,
"description": "True if description was cut โ use get_product_details",
"title": "Description Truncated",
"type": "boolean"
},
"price_gross": {
"description": "Price incl. Finnish VAT 25.5%",
"title": "Price Gross",
"type": "number"
},
"price_net": {
"description": "Price excl. VAT",
"title": "Price Net",
"type": "number"
},
"vat_percent": {
"default": 25.5,
"title": "Vat Percent",
"type": "number"
},
"currency": {
"const": "EUR",
"default": "EUR",
"title": "Currency",
"type": "string"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Selling unit, e.g. 'kpl'",
"title": "Unit"
},
"in_stock": {
"title": "In Stock",
"type": "boolean"
},
"stock_quantity": {
"description": "Units available right now",
"title": "Stock Quantity",
"type": "number"
},
"weight_kg": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Weight Kg"
},
"product_url": {
"description": "Public product page",
"title": "Product Url",
"type": "string"
},
"image_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Null for most products โ photography is still being collected",
"title": "Image Url"
},
"stock_checked": {
"description": "True if stock was re-read from the availability endpoint",
"title": "Stock Checked",
"type": "boolean"
},
"disclaimer": {
"title": "Disclaimer",
"type": "string"
}
},
"required": [
"id",
"name",
"price_gross",
"price_net",
"in_stock",
"stock_quantity",
"product_url",
"stock_checked",
"disclaimer"
],
"description": "get_product_details -vastaus: kuten hakutulos mutta tรคysi kuvaus.",
"title": "ProductDetails"
}๐ขcreate_cart_link(items, checkout)
Build a link that puts the given products into the customer's cart. This tool writes nothing. It returns a URL; the products are added only when the customer opens that URL in their own browser. Give the URL to the customer and let them click it. Args: items: 1-20 rows of {"product_id": int >= 1, "quantity": int 1-50}. Unknown fields are rejected. Repeated product_ids are merged into one row and their quantities summed. checkout: If True, opening the link takes the customer straight to checkout; if False (default) it opens the cart review page. Returns: JSON with cart_url, the normalised items, item_count, total_quantity, the echoed checkout flag and a short note to show the customer. Errors (isError=true, body {"error": {...}}): - products_not_found: one or more product_ids do not exist or are not published. The message lists the offending ids. - shop_api_unavailable: the shop could not be reached; retryable. Notes: - The link SETS the quantities, it does not add to what is already in the cart. Opening the same link twice gives the same result as opening it once, so the customer can safely click it again. - Stock is re-checked when the link is opened. If stock ran out in the meantime, the quantity is reduced or the row skipped โ the link can never oversell. - Checkout requires a customer account, so the customer may be asked to log in or register before paying.
Input Schema
{
"type": "object",
"properties": {
"items": {
"description": "1-20 products to put in the cart",
"items": {
"description": "One cart row. Unknown fields are rejected.",
"properties": {
"product_id": {
"description": "Product ID from search_catalog",
"minimum": 1,
"type": "integer"
},
"quantity": {
"default": 1,
"description": "1-50",
"maximum": 50,
"minimum": 1,
"type": "integer"
}
},
"required": [
"product_id"
],
"type": "object",
"additionalProperties": false
},
"maxItems": 20,
"minItems": 1,
"type": "array"
},
"checkout": {
"default": false,
"description": "If True, the link goes straight to checkout; otherwise (default) to the cart review page",
"type": "boolean"
}
},
"required": [
"items"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"cart_url": {
"description": "Open in a browser to fill the cart",
"title": "Cart Url",
"type": "string"
},
"items": {
"items": {
"$ref": "#/$defs/CartLinkItem"
},
"title": "Items",
"type": "array"
},
"item_count": {
"description": "Number of distinct products",
"title": "Item Count",
"type": "integer"
},
"total_quantity": {
"description": "Sum of quantities",
"title": "Total Quantity",
"type": "integer"
},
"checkout": {
"default": false,
"description": "True if the link goes straight to checkout, False to cart review",
"title": "Checkout",
"type": "boolean"
},
"note": {
"title": "Note",
"type": "string"
}
},
"required": [
"cart_url",
"items",
"item_count",
"total_quantity",
"note"
],
"$defs": {
"CartLinkItem": {
"properties": {
"product_id": {
"minimum": 1,
"title": "Product Id",
"type": "integer"
},
"quantity": {
"maximum": 50,
"minimum": 1,
"title": "Quantity",
"type": "integer"
}
},
"required": [
"product_id",
"quantity"
],
"title": "CartLinkItem",
"type": "object"
}
},
"description": "create_cart_link -vastaus.",
"title": "CreateCartLinkResult"
}๐ขsearch_shop_policies_and_faqs(query, limit)
Search Okun Koneosa's shop policies and terms. Covers delivery terms, privacy policy, terms of service, the consumer right of withdrawal / returns, and company information. Use this instead of guessing when the customer asks about delivery times, shipping costs, returns, warranty or how their data is handled. Args: query: Finnish keyword, e.g. "palautus", "toimitusaika", "takuu", "toimituskulut". Leave empty to list all sections. limit: Maximum sections to return (1-20, default 5). Returns: JSON with: - sections: each with page, page_title, heading, content and url - total: how many sections matched - query: the term that was searched Notes: - Content is split by heading, so you get the relevant paragraph rather than a whole page. Always cite the `url` so the customer can read the full terms. - These are the shop's own terms. They do not override Finnish consumer law.
Input Schema
{
"type": "object",
"properties": {
"query": {
"default": "",
"description": "What to look for, e.g. 'palautus', 'toimitusaika'",
"type": "string"
},
"limit": {
"default": 5,
"description": "Max sections (1-20)",
"maximum": 20,
"minimum": 1,
"type": "integer"
}
}
}Output Schema
{
"type": "object",
"properties": {
"sections": {
"items": {
"$ref": "#/$defs/PolicySection"
},
"title": "Sections",
"type": "array"
},
"total": {
"title": "Total",
"type": "integer"
},
"query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Query"
}
},
"required": [
"total"
],
"$defs": {
"PolicySection": {
"properties": {
"page": {
"description": "Page slug, e.g. 'toimitusehdot'",
"title": "Page",
"type": "string"
},
"page_title": {
"title": "Page Title",
"type": "string"
},
"heading": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Section heading, null for intro",
"title": "Heading"
},
"content": {
"title": "Content",
"type": "string"
},
"url": {
"description": "Public page URL โ cite this to the customer",
"title": "Url",
"type": "string"
}
},
"required": [
"page",
"page_title",
"content",
"url"
],
"title": "PolicySection",
"type": "object"
}
},
"description": "search_shop_policies_and_faqs -vastaus.",
"title": "PolicySearchResult"
}Community
Evidence