theluckystrike Catalogue MCP
A community MCP server that manages a single price list and labour rate card. It allows agents to set SKU prices and hourly rates with effective dates, resolve line items into invoice-ready or quote-ready formats, and generate price list reports or PDFs. It ensures historical pricing accuracy by refusing to invent unknown codes.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.zovo.one/mcp/catalogueWhat its tools do
12 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (8)
Can change data (4)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Resolve SKU codes and hours into priced line items for quotes
- Set new product prices or labour rates with effective dates
- Generate a plain text or PDF price list for a specific tier
- List catalogue lines filtered by code prefix or currency
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- mcp-catalogue 0.22.6
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 12 advertised
- Resources
- 2 advertised
- Resource templates
- 0 advertised
- Prompts
- 2 advertised
{
"tools": {
"listChanged": true
},
"prompts": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
12 advertised
sku_set — Add or reprice a SKU
Add a catalogue line or reprice one: a code, a name, a unit, an optional VAT rate, and price_minor in whole minor units for one currency, tier and valid_from. A repriced line keeps its old rows. Free: 25 SKUs, one tier.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"sku",
"name",
"price_minor"
],
"properties": {
"sku": {
"type": "string",
"maxLength": 64,
"description": "The code, e.g. WEB-AUDIT. Upper case, no spaces. This is what an invoice line is filed under"
},
"name": {
"type": "string",
"maxLength": 200,
"description": "What it is on the customer's document, e.g. Website audit"
},
"note": {
"type": "string",
"maxLength": 2000
},
"tier": {
"type": "string",
"maxLength": 40,
"description": "Price tier, e.g. trade or list. Default standard. A second tier is Pro"
},
"unit": {
"type": "string",
"maxLength": 40,
"description": "What one of it is: each, hour, month, 1000 words. Default each. Required the first time"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "ISO code this price is in. Defaults to the shared business profile's currency"
},
"vat_rate": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "VAT percent for this product, overriding the shared profile's default on a resolved line"
},
"valid_from": {
"type": "string",
"maxLength": 10,
"description": "The first day this price applies, YYYY-MM-DD. Default today"
},
"price_minor": {
"type": "integer",
"maximum": 1000000000000,
"minimum": 0,
"description": "The price of ONE, in whole minor units. 45000 is EUR 450.00. Never a decimal"
},
"duplicate_ok": {
"type": "boolean",
"description": "Add it even though another code already carries the same product at the same price. Default false"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}sku_get — The price of one SKU on a date
Show the price of one SKU as of a date, in one currency and tier: the row picked is the latest valid_from at or before that date, and the answer names the row and any later one already booked. Free.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"sku"
],
"properties": {
"sku": {
"type": "string",
"maxLength": 200,
"description": "The SKU code, e.g. WEB-AUDIT, or the product name when only one product carries it"
},
"date": {
"type": "string",
"maxLength": 10,
"description": "The day the price is wanted for, YYYY-MM-DD. Default today"
},
"tier": {
"type": "string",
"maxLength": 40,
"description": "Price tier. Default standard"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "Defaults to the shared business profile's currency"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}sku_list — List the catalogue
List catalogue lines with the price in force today, filtered by code prefix, by currency and by tier. A SKU with no price in that currency and tier is listed and said to have none. Free.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"maxLength": 10,
"description": "Show the price in force on this day instead of today, YYYY-MM-DD"
},
"tier": {
"type": "string",
"maxLength": 40,
"description": "Price tier. Default standard"
},
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Maximum rows returned, default and ceiling 500"
},
"prefix": {
"type": "string",
"maxLength": 64,
"description": "Only codes starting with this, e.g. HOST- for every hosting line"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "The currency the price in force is shown in. Defaults to the profile's"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}sku_delete — Delete an unused SKU
Delete a catalogue line no rate card points at and that never priced a resolved line, freeing a free-tier slot. Otherwise it is refused, naming what depends on it: reprice it to withdraw it instead.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"sku"
],
"properties": {
"sku": {
"type": "string",
"maxLength": 200,
"description": "The SKU code, e.g. WEB-AUDIT, or the product name when only one product carries it"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}rate_set — Set a labour rate
Set the hourly charge-out rate on a labour card: role, currency, hourly_minor in whole MINOR units and the day it starts. The same role, currency and date REPLACES that row rather than adding one. Free.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"role",
"hourly_minor"
],
"properties": {
"sku": {
"type": "string",
"maxLength": 64,
"description": "A catalogue code this role bills under, so a resolved hours line carries the SKU's name and VAT rate"
},
"note": {
"type": "string",
"maxLength": 2000
},
"role": {
"type": "string",
"maxLength": 64,
"description": "The role charged for, e.g. senior developer. Lower case, this is what an hours line is priced from"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "ISO code this rate is in. Defaults to the shared business profile's currency"
},
"valid_from": {
"type": "string",
"maxLength": 10,
"description": "The first day this rate applies, YYYY-MM-DD. Default today"
},
"hourly_minor": {
"type": "integer",
"maximum": 1000000000000,
"minimum": 0,
"description": "The hourly rate in whole minor units. 8500 is EUR 85.00 an hour. Never a decimal"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}rate_get — The hourly rate on a date
Show the hourly rate for a role as of a date and currency: the row picked is the latest valid_from at or before that date, and the answer names it. With no role given, lists every card. Free.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"maxLength": 10,
"description": "The day the rate is wanted for, YYYY-MM-DD. Default today"
},
"role": {
"type": "string",
"maxLength": 64,
"description": "The role, e.g. senior developer. Omit to list every rate card"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "Defaults to the shared business profile's currency"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}lines_resolve — Price lines from the catalogue
Turn a list of sku or role lines into invoice_create-ready and quote_create-ready items priced from the catalogue as of each line's date. An unknown code is refused by name and never priced. Free.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"lines"
],
"properties": {
"date": {
"type": "string",
"maxLength": 10,
"description": "The day the whole list is priced as of, YYYY-MM-DD. Default today"
},
"tier": {
"type": "string",
"maxLength": 40,
"description": "Price tier for every line. Default standard"
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"sku": {
"type": "string",
"maxLength": 200,
"description": "A catalogue code or product name. One of sku or role, never both"
},
"date": {
"type": "string",
"maxLength": 10,
"description": "The day this line is priced as of, YYYY-MM-DD. Overrides the call's date"
},
"role": {
"type": "string",
"maxLength": 64,
"description": "A rate card role. One of sku or role, never both"
},
"tier": {
"type": "string",
"maxLength": 40,
"description": "Price tier for this line. Overrides the call's tier"
},
"hours": {
"type": "number",
"maximum": 100000,
"description": "Hours worked, for a role line",
"exclusiveMinimum": 0
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "Overrides the call's currency for this line. Every line on one payload must agree"
},
"quantity": {
"type": "number",
"maximum": 1000000,
"description": "How many, for a sku line",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"maxLength": 2000,
"description": "Override the catalogue name on the customer's document"
}
}
},
"maxItems": 200,
"minItems": 1,
"description": "The lines to price, each a sku with a quantity or a role with hours"
},
"client": {
"type": "string",
"maxLength": 200,
"description": "Client name or id, copied into both payloads. invoice_create and quote_create both need one"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "The currency for every line. Defaults to the shared business profile's"
},
"tax_rate": {
"type": "number",
"maximum": 1000,
"minimum": 0,
"description": "VAT percent for lines whose SKU carries no rate of its own, overriding the shared profile"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}price_list_text — The price list as plain text
Print the price list as plain text: every SKU with its unit, the price in force on a date and any later price booked, then the labour rate cards, under your business name. Also a .txt download link valid one hour. Free; price_list_pdf writes the A4 page.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"maxLength": 10,
"description": "The day the list is in force, YYYY-MM-DD. Default today"
},
"tier": {
"type": "string",
"maxLength": 40,
"description": "One tier, or omit for standard. Pass all for every tier, which is Pro"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "Defaults to the shared business profile's currency"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}price_list_pdf — The price list as an HTML document (print to PDF)
Call this tool to render the price list for one currency and tier as an A4 HTML document laid out for print-to-PDF (this hosted endpoint has no PDF renderer) and return a download link valid for one hour: every SKU with its unit, its price in force and the day that price started. Pro.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"maxLength": 10,
"description": "The day the list is in force, YYYY-MM-DD. Default today"
},
"tier": {
"type": "string",
"maxLength": 40,
"description": "One tier. Default standard"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "Defaults to the shared business profile's currency"
},
"out_path": {
"type": "string",
"maxLength": 1000,
"description": "Name for the downloaded file, e.g. trade-prices-april. Defaults to price-list-<currency>-<tier>-<date>; the list comes back as a download link valid for one hour"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}catalogue_report — Report the catalogue
Report the catalogue as at date: how many SKUs there are, how many price rows are in force, which rows a later row already replaces, and which SKUs carry no price in the profile's default currency. Reads only. Pro.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date": {
"type": "string",
"maxLength": 10,
"description": "The day the report is in force, YYYY-MM-DD. Default today"
},
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Maximum rows listed in each section, default and ceiling 500"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}license_status — License status
Report this endpoint's licence state for your token as JSON: the product, the tier free or pro, why it is not Pro, and the checkout URL. Call it to explain a free-tier refusal. No arguments, nothing changes.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}license_activate — Activate license
Turn Pro on for this connection with key, an MCPL1.<payload>.<signature> issued at checkout for this server or the bundle. Data under your token stays; a wrong or expired key changes nothing. license_status confirms it.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"key"
],
"properties": {
"key": {
"type": "string",
"description": "License key from checkout, MCPL1.<payload>.<signature>"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}Prompts
2 advertised
upgrade_to_pro — Explain the upgrade
Explain what Pro on the catalogue server costs and exactly what the user has to do, without leaving the conversation.
- feature
- The capped feature that prompted this, if there was one
price_the_job — Price a job from the catalogue
Price a list of products and hours from the catalogue and hand the result to the invoice or the quotes server.
- client
- The client the lines are for (required)
Resources
2 advertised
pricing — Pricing and upgrade
What catalogue costs, what Pro unlocks, the checkout link that carries this connection's token, and the one step a person has to take. Machine-readable; read it before telling a user how to lift a free-tier cap.
pricing://cataloguecatalogue — The price ladder, the free tier and where this server writes
How a price is chosen on a date, the two payload scales, the free-tier limits and the one document this server writes.
catalogue://price-list90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1378 ms
- 95th percentile latency
- 1378 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1378 ms · metadata changed · 12 tool(s), 2 resource(s), 0 resource template(s), 2 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http catalogue-mcp-zovo https://mcp.zovo.one/mcp/catalogueCodex
codex mcp add catalogue-mcp-zovo --url https://mcp.zovo.one/mcp/catalogueCursor
{
"mcpServers": {
"catalogue-mcp-zovo": {
"url": "https://mcp.zovo.one/mcp/catalogue"
}
}
}Cline
{
"mcpServers": {
"catalogue-mcp-zovo": {
"type": "streamableHttp",
"url": "https://mcp.zovo.one/mcp/catalogue",
"disabled": false
}
}
}VS Code
{
"servers": {
"catalogue-mcp-zovo": {
"type": "http",
"url": "https://mcp.zovo.one/mcp/catalogue"
}
}
}Gemini CLI
gemini mcp add --transport http catalogue-mcp-zovo https://mcp.zovo.one/mcp/catalogueClaude Desktop
https://mcp.zovo.one/mcp/catalogueWindsurf
{
"mcpServers": {
"catalogue-mcp-zovo": {
"serverUrl": "https://mcp.zovo.one/mcp/catalogue"
}
}
}Let your agent find its tools
Find servers like theluckystrike Catalogue MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.