Dinilu — custom promotional products

Live prices, options and shipping quotes for custom-printed promotional products.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
98%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~887Tokens (tool definitions)
~1.6 KBTypical response size
Moderate attention impact (0.69% of 128k context)

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": {
    "mcp": {
      "url": "https://dinilu.eu/mcp"
    }
  }
}

Remote endpoints

https://dinilu.eu/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_products(query, category, limit)

Find products in this catalogue by free text and/or category. Returns mpn, title, page URL and category for each match. The mpn is what get_product and get_quote take.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Free text matched against the product title, case-insensitive. Omit to list everything (optionally narrowed by category)."
    },
    "category": {
      "type": "integer",
      "description": "Taxonomy term id to filter by. Read the category tree from the dinilu://categories resource."
    },
    "limit": {
      "type": "integer",
      "description": "Maximum results to return. Default 50, maximum 200."
    }
  },
  "additionalProperties": false
}
🟢get_product(mpn)

Get a product's configurable attributes and their options, plus its minimum order quantity and quantity step. Call this before get_quote: the attribute and option ids it returns are what get_quote expects.

Input Schema

{
  "type": "object",
  "properties": {
    "mpn": {
      "type": "integer",
      "description": "Product MPN, from search_products or from the mpn field in a product page's JSON-LD."
    }
  },
  "required": [
    "mpn"
  ],
  "additionalProperties": false
}
🟢get_quote(mpn, qty, attributes, country, zone)

Price a specific configuration and quantity, with production time and shipping options. Indicative, excludes VAT and shipping, never binding. Read the returned "warnings" before presenting the price.

Input Schema

{
  "type": "object",
  "properties": {
    "mpn": {
      "type": "integer",
      "description": "Product MPN."
    },
    "qty": {
      "type": "integer",
      "description": "Quantity in PIECES. Below the product minimum it is raised to the MOQ and a qty_below_minimum warning is returned. Omitting it quotes the product default and warns — always pass the real target quantity, because price per piece changes substantially with volume."
    },
    "attributes": {
      "type": "object",
      "description": "Option selection as {\"<attribute id>\": <option id>}, e.g. {\"19\": 251, \"58\": 490}. Both ids come from get_product. Option NAMES are also accepted as values but must match exactly, including double spaces, and are translated per domain — prefer ids. Any attribute you omit is filled with the product default and reported in warnings.",
      "additionalProperties": {
        "type": [
          "integer",
          "string"
        ]
      }
    },
    "country": {
      "type": "string",
      "description": "Destination country for shipping rates. Accepts a name (\"Germany\"), ISO 3166-1 alpha-2 (\"DE\"), alpha-3 (\"DEU\") or numeric (\"276\"). Defaults to this domain's country."
    },
    "zone": {
      "type": "integer",
      "description": "Optional zone/state id, where shipping rates depend on it."
    }
  },
  "required": [
    "mpn"
  ],
  "additionalProperties": false
}
🟢search(query)

Compatibility search for research clients that require a tool named "search". Returns only id, title and URL. Prefer search_products, which also filters by category and returns the category of each hit.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Free text matched against the product title."
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "title",
          "url"
        ]
      }
    },
    "ids": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "results"
  ]
}
🟢fetch(id)

Compatibility fetch for research clients that require a tool named "fetch". Returns one product as readable text. It carries NO price: prices depend on quantity and options and come from get_quote.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The id returned by search (the product mpn, as a string)."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "text": {
      "type": "string"
    },
    "content": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "metadata": {
      "type": "object"
    }
  },
  "required": [
    "id",
    "title",
    "text",
    "url"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools