{"name":"io.github.theluckystrike/quotes-estimates-proposals-vat-win-rate","slug":"theluckystrike-quotes-estimates-proposals-vat-win-rate","title":null,"description":"Quotes and estimates: VAT line items, a validity date, an A4 PDF, accept makes an invoice.","url":"https://mcp.market/server/theluckystrike-quotes-estimates-proposals-vat-win-rate","grade":"C","score":64,"certified":false,"status":"active","category":"finance","tags":["finance"],"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/theluckystrike/mcp-servers","website":"https://mcp.zovo.one/s/quotes","version":"0.22.0","remotes":[{"type":"streamable-http","url":"https://mcp.zovo.one/mcp/quotes","headers":[{"description":"Bearer <Pro license key or anonymous token from GET https://mcp.zovo.one/mcp/token>","isRequired":true,"isSecret":true,"name":"Authorization"}]}],"packages":[{"registryType":"mcpb","identifier":"https://github.com/theluckystrike/mcp-servers/releases/download/v0.22.0/quotes.mcpb","version":"0.22.0","fileSha256":"050b84d286f99600d9c6523b8968c163f488a4fba956dd0efdbf2a445a4c7f25","transport":{"type":"stdio"},"environmentVariables":[{"description":"Optional Pro license key (MCPL1....). Verified offline.","isSecret":true,"name":"MCP_LICENSE_KEY"}]}],"tools":[{"name":"license_activate","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"key":{"type":"string","description":"License key from checkout, MCPL1.<payload>.<signature>"}},"required":["key"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"license_status","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"quote_accept","description":"Mark a quote accepted and turn it into an invoice: created directly in the invoice server when its store is present, otherwise returned as invoice_create-ready line items. The numbers are copied, never recomputed.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Quote id such as Q-2026-0001"},"create_invoice":{"type":"string","enum":["auto","always","never"],"description":"Default \"auto\": create the invoice when the invoice store exists, otherwise hand back the items. \"never\" only marks it accepted"},"issue_date":{"type":"string","description":"YYYY-MM-DD for the invoice, defaults to today"},"due_days":{"type":"integer","minimum":0,"maximum":3650,"description":"Days until the invoice is due, defaults to your payment terms"},"allow_expired":{"type":"boolean","description":"Accept a quote whose validity has run out. Default false: an expired quote is refused so the price is re-confirmed first"}},"required":["id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"quote_create","description":"Store a quote for client from items and return its Q number, VAT and totals. unit_price is in MAJOR units; currency, VAT and issuer come from the shared profile. A duplicate of an open quote is refused. Free: 5 open.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"client":{"type":"string","minLength":1,"maxLength":200,"description":"Client name or id. A name the invoice server already knows brings its address, email and VAT id onto the quote"},"items":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string","minLength":1,"maxLength":500,"description":"every line needs a description, 500 characters or fewer"},"quantity":{"type":"number","minimum":-1000000000000,"maximum":1000000000000,"exclusiveMinimum":0,"description":"Hours or units, must be greater than zero"},"unit_price_minor":{"type":"integer","minimum":0,"maximum":1000000000000,"description":"Price per unit in MINOR units: 9000 = 90.00 EUR, 90 = JPY 90. Never a decimal"},"tax_rate":{"type":"number","minimum":0,"maximum":1000,"description":"VAT percent for this line, overrides the business default"},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$","description":"Only to state the line's currency; every line on one quote must agree"}},"required":["description","quantity","unit_price_minor"],"additionalProperties":false},"minItems":1,"maxItems":200,"description":"The line items being quoted"},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$","description":"Defaults to your business default currency"},"validity_days":{"type":"integer","minimum":1,"maximum":3650,"description":"Days the quote stays valid, counted from the quote date and inclusive. Default 30"},"valid_until":{"type":"string","description":"YYYY-MM-DD, an explicit last valid day. Wins over validity_days"},"issue_date":{"type":"string","description":"YYYY-MM-DD, defaults to today in your business profile's timezone"},"discount_percent":{"type":"number","minimum":0,"maximum":100,"description":"Discount applied to every line, in percent"},"tax_rate":{"type":"number","minimum":0,"maximum":1000,"description":"VAT percent for lines with no rate of their own. Defaults to the business default"},"notes":{"type":"string","maxLength":10000,"description":"Free text printed under the totals, e.g. scope or exclusions. 10000 characters or fewer"},"client_email":{"type":"string","maxLength":320,"description":"Only if the user gave it; otherwise the stored client's email is used"},"client_address":{"type":"string","maxLength":2000,"description":"Postal address for the QUOTE FOR block, newlines allowed"},"client_vat_id":{"type":"string","maxLength":64,"description":"Client VAT / tax registration id"}},"required":["client","items"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"quote_decline","description":"Mark a quote lost, with a reason kept on the record, freeing a free-tier open slot and counting in the win rate. An accepted quote is refused, naming the invoice it became. Free on every tier.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Quote id such as Q-2026-0001"},"reason":{"type":"string","maxLength":10000,"description":"Why it was lost, e.g. \"price\" or \"went in-house\". Kept on the record"},"date":{"type":"string","description":"YYYY-MM-DD, defaults to today"}},"required":["id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"quote_delete","description":"Delete a draft quote that was never sent, accepted, invoiced or exported, and give its free open-quote slot back. A quote with any of those is refused with the dependent named. The id is never reissued.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Quote id such as Q-2026-0001"}},"required":["id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"quote_get","description":"Return one quote in full by Q number or exact client name: lines with unit price and VAT, totals, dates, the state today with days left, notes, and the invoice it became once accepted. Reads only.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Quote id such as Q-2026-0001, or an exact client name"}},"required":["id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"quote_list","description":"List quotes newest first: id, client, dates, state, days left while open, currency, total and the invoice number once accepted. State is read against today, so a lapsed quote shows as expired.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"state":{"type":"string","enum":["open","expired","accepted","declined","all"],"description":"Default \"all\". \"open\" excludes quotes whose validity has run out; \"expired\" is only those"},"client":{"type":"string","description":"Only quotes for clients whose name contains this text"},"from":{"type":"string","description":"YYYY-MM-DD, earliest quote date"},"to":{"type":"string","description":"YYYY-MM-DD, latest quote date"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"quote_pdf","description":"Call this tool to render one quote as an A4 print-ready document and return a download link valid for one hour: the invoice layout with the validity date and an acceptance block. Pro.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Quote id such as Q-2026-0001"},"out_path":{"type":"string","description":"Name for the downloaded file, e.g. acme-quote. Defaults to the quote id; the document comes back as a download link valid for one hour"}},"required":["id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"quote_report","description":"Totals per currency for open, accepted, declined and expired quotes, with counts, the value still open and the win rate. Free covers the current calendar year to date; Pro reports over any date range.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"from":{"type":"string","description":"YYYY-MM-DD, earliest quote date to count"},"to":{"type":"string","description":"YYYY-MM-DD, latest quote date to count"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"quote_send_text","description":"Turn a quote into a plain-text summary to paste into an email: the line table, VAT lines, total and validity date. Also a .txt download link valid one hour. Free; quote_pdf writes the A4 document.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Quote id such as Q-2026-0001"},"greeting":{"type":"string","description":"Opening line, default \"Hello\" plus the client name"},"sign_off":{"type":"string","description":"Closing line, default your business name from the shared profile"}},"required":["id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"quote_update","description":"Revise a quote that is still open: line items, currency, discount, VAT default, validity or notes. Totals are recomputed. An accepted or declined quote is never edited.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Quote id such as Q-2026-0001"},"items":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string","minLength":1,"maxLength":500,"description":"every line needs a description, 500 characters or fewer"},"quantity":{"type":"number","minimum":-1000000000000,"maximum":1000000000000,"exclusiveMinimum":0,"description":"Hours or units, must be greater than zero"},"unit_price_minor":{"type":"integer","minimum":0,"maximum":1000000000000,"description":"Price per unit in MINOR units: 9000 = 90.00 EUR, 90 = JPY 90. Never a decimal"},"tax_rate":{"type":"number","minimum":0,"maximum":1000,"description":"VAT percent for this line, overrides the business default"},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$","description":"Only to state the line's currency; every line on one quote must agree"}},"required":["description","quantity","unit_price_minor"],"additionalProperties":false},"minItems":1,"maxItems":200,"description":"Replaces every line item"},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$"},"discount_percent":{"type":"number","minimum":0,"maximum":100},"tax_rate":{"type":"number","minimum":0,"maximum":1000,"description":"VAT percent for lines with no rate of their own"},"validity_days":{"type":"integer","minimum":1,"maximum":3650,"description":"Recomputes valid_until from the quote date"},"valid_until":{"type":"string","description":"YYYY-MM-DD. Wins over validity_days, and is how an expired quote is extended"},"notes":{"type":"string","maxLength":10000},"client_email":{"type":"string","maxLength":320},"client_address":{"type":"string","maxLength":2000},"client_vat_id":{"type":"string","maxLength":64}},"required":["id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":64,"grade":"C","scanned_at":"2026-09-17T16:31:45.671Z","report":{"scannerVersion":"0.1.2","scannedAt":"2026-09-17T16:31:45.586Z","components":{"code":{"score":-1,"max":25,"notes":["package could not be scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 285ms"]},"poisoning":{"score":15,"max":15,"notes":["12 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":3,"max":15,"notes":["repository not readable: github 401"]},"identity":{"score":2,"max":10,"notes":["no repository or website to verify"]}},"findings":[],"inputs":{"probes":[{"url":"https://mcp.zovo.one/mcp/quotes","reachable":true,"authRequired":false,"latencyMs":285,"serverInfo":{"name":"mcp-quotes","version":"0.22.0"}}],"packages":[],"repo":{"found":false,"owner":"theluckystrike","repo":"mcp-servers","error":"github 401"}}}},"grade_history":[]}