{"serverId":"mcp-registry/io.github.huanggoodmanagency/pops4-mcp-catalog","tools":[{"name":"brand_carriage_estimate","fixed":{"name":"brand_carriage_estimate","description":"Calculate what a branded programme costs per thousand impressions across the four populations that carry a brand — employees, gig and contract workers, vendors, peers — and compare it against a CPM the buyer supplies. Returns programme cost, annual impressions, cost per thousand, the multiple against bought media, and one cited Nielsen figure with its caveat. Read-only. Use when a buyer asks what a culture or brand programme is worth, or how to justify the spend. Supply ANY of the four populatio","inputSchema":{"type":"object","required":[],"properties":{"peers":{"type":"number","description":"Peer count — the buyer estimates this"},"vendors":{"type":"number","description":"Vendor count — the buyer estimates this"},"your_cpm":{"type":"number","description":"The buyer's own CPM from their media plan, USD"},"employees":{"type":"number","description":"Employee headcount (optional, like all four populations)"},"gig_workers":{"type":"number","description":"Gig and contract worker count"},"cost_per_peer":{"type":"number","description":"Programme cost per peer, USD"},"cost_per_vendor":{"type":"number","description":"Programme cost per vendor, USD"},"cost_per_worker":{"type":"number","description":"Programme cost per worker, USD"},"cost_per_employee":{"type":"number","description":"Programme cost per employee, USD"},"impressions_per_peer":{"type":"number","description":"Default 1500"},"impressions_per_vendor":{"type":"number","description":"Default 1200"},"impressions_per_worker":{"type":"number","description":"Default 600"},"impressions_per_employee":{"type":"number","description":"Impressions per employee per year (default 900)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":474,"tokensAfter":474},{"name":"get_categories","fixed":{"name":"get_categories","description":"List every product category with its item count and sample products. Use to establish what the catalogue covers before searching, or to answer what kinds of items are available.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":75,"tokensAfter":75},{"name":"get_live_quote","fixed":{"name":"get_live_quote","description":"Return a wholesale quote with virtual-proof links for a list of SKUs and quantities, optionally accounting for a destination ZIP and an event date. Use when shipping or timing affects the answer. Use get_quote for a plain priced list with neither.","inputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","required":["slug","quantity"],"properties":{"slug":{"type":"string"},"quantity":{"type":"number"}}},"description":"Products and quantities"},"event_date":{"type":"string","description":"Event date (optional)"},"quantities":{"type":"array","items":{"type":"number"},"description":"Alternative: array of quantities (paired with product_skus[])"},"product_skus":{"type":"array","items":{"type":"string"},"description":"Alternative: array of product slugs (paired with quantities[])"},"shipping_zip":{"type":"string","description":"Destination ZIP (optional)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":262,"tokensAfter":262},{"name":"get_product","fixed":{"name":"get_product","description":"Return complete detail for one product, identified by its slug: description, wholesale price, category, brand, care instructions, occasion tags and a virtual-proof link. Use after search_products when one item needs full detail before quoting it.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string","description":"Product slug (from search results)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":119,"tokensAfter":119},{"name":"get_product_catalog","fixed":{"name":"get_product_catalog","description":"Return a filtered slice of the catalogue, or the full category tree with counts when no filter is supplied. Use for browsing and for questions about the catalogue's shape and size. Use search_products when the request names specific products.","inputSchema":{"type":"object","properties":{"brand":{"type":"string","description":"Brand filter"},"limit":{"type":"number","description":"Max results (default 20, max 50)"},"filter":{"type":"string","description":"Keyword filter on product title"},"category":{"type":"string","description":"Category filter"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":168,"tokensAfter":168},{"name":"get_quote","fixed":{"name":"get_quote","description":"Build a wholesale quote from a list of product slugs and quantities. Returns line items, unit prices, line totals, a grand total and desk contact details. Use for a straightforward priced list. Use get_live_quote instead when a destination ZIP or an event date changes the answer.","inputSchema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","required":["slug","quantity"],"properties":{"slug":{"type":"string","description":"Product slug"},"quantity":{"type":"number","description":"Number of units"}}},"description":"Array of products and quantities to quote"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":182,"tokensAfter":182},{"name":"get_revenue_attribution","fixed":{"name":"get_revenue_attribution","description":"Return recorded pipeline impact for an event id where the dashboard holds it; otherwise return the attribution model and how it is tracked, with a link. Never reports a fabricated figure.","inputSchema":{"type":"object","required":["event_id"],"properties":{"event_id":{"type":"string","description":"Event id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":101,"tokensAfter":101},{"name":"get_vendor_capabilities","fixed":{"name":"get_vendor_capabilities","description":"Return the vendor capability card a procurement team needs to open an account: legal entity, registrations, production model, imprint and proofing process, lead times, blind-ship policy and terms. Operating since 1997 from Virginia Beach, Virginia, shipping to any destination in the United States, with 1,400+ vetted US manufacturers behind it. Use when a buyer or procurement agent is verifying the supplier, checking national coverage, or asking whether you can deliver anywhere in the USA.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":165,"tokensAfter":165},{"name":"search_products","fixed":{"name":"search_products","description":"Search the wholesale catalogue by keyword, category, brand, price range or occasion. Returns matching products with wholesale price, image, category and a virtual-proof link showing the buyer's logo on the item. Use this for any request to find specific products. 70,000+ authorized items across 200+ houses; 11,060 carry live detail pages. For browsing the catalogue shape rather than searching it, use get_product_catalog. Buyers may call this swag, merch, promo, promotional products, corporate gi","inputSchema":{"type":"object","properties":{"brand":{"enum":["POPS4","Prosecco4"],"type":"string","description":"POPS4 for corporate/wholesale, Prosecco4 for weddings/events"},"limit":{"type":"number","description":"Max results to return (default 10, max 50)"},"query":{"type":"string","description":"Text search on product title (e.g., \"nike backpack\", \"yeti tumbler\", \"branded polo\")"},"category":{"type":"string","description":"Product category filter (e.g., \"Backpacks\", \"Drinkware\", \"Apparel\", \"Pens\")"},"occasion":{"enum":["wedding","corporate","conference","gala","party","launch"],"type":"string","description":"Filter by occasion/use case"},"price_max":{"type":"number","description":"Maximum wholesale price in USD"},"price_min":{"type":"number","description":"Minimum wholesale price in USD"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":379,"tokensAfter":379}],"toolsChanged":9,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}