{"serverId":"mcp-registry/com.printinglabs/printing-labs","tools":[{"name":"book-meeting","fixed":{"name":"book-meeting","description":"Book a consultation with the Printing Labs team: creates the Google Calendar event (with Meet link unless Phone Call), registers the meeting, and emails the requester confirm/reschedule/cancel links. The time must be one of get-meeting-slots' values for that date. Only book with the user's explicit consent and their real contact details.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["firstName","email","mobile","date","time"],"properties":{"date":{"type":"string","description":"Meeting date, YYYY-MM-DD (IST)"},"mode":{"enum":["Google Meet","Phone Call"],"type":"string","description":"Meeting mode"},"time":{"type":"string","description":"A slot exactly as returned by get-meeting-slots, e.g. '3:30 PM'"},"email":{"type":"string","description":"Requester's email (receives the invite + manage links)"},"notes":{"type":"string","description":"What the meeting is about"},"guests":{"type":"array","items":{"type":"string"},"description":"Additional attendee emails"},"mobile":{"type":"string","description":"Phone / WhatsApp number with country code"},"lastName":{"type":"string","description":"Requester's last name"},"firstName":{"type":"string","description":"Requester's first name"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":365,"tokensAfter":365},{"name":"calculate-bulk-price","fixed":{"name":"calculate-bulk-price","description":"Compute the effective bulk price for a given product and quantity: applies the product's quantity-discount tiers and GST, validates the minimum order quantity, and shows the next discount tier. Pass options to price a choice other than the default (e.g. UV printing, which can add an extra per unit). Indicative pricing — final quotes come from the sales team.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug","quantity"],"properties":{"slug":{"type":"string","description":"Product permalink slug or id (from search-products)"},"options":{"type":"array","items":{"type":"string"},"description":"Optional choices from get-product-details options, e.g. [\"Print Type: UV\"] (or just [\"UV\"]). Omit for the defaults."},"quantity":{"type":"integer","maximum":100000,"minimum":1,"description":"Number of units"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":262,"tokensAfter":262},{"name":"cancel-meeting","fixed":{"name":"cancel-meeting","description":"Cancel a meeting you booked earlier in this conversation. Requires the manageToken returned by book-meeting — the same token that powers the cancel link in the customer's confirmation email. Removes the Google Calendar event and notifies both sides.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["manageToken"],"properties":{"manageToken":{"type":"string","description":"manageToken from the book-meeting response"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":150,"tokensAfter":150},{"name":"create-onboarding-drop","fixed":{"name":"create-onboarding-drop","description":"HR/HRIS automation (requires an API key in the Authorization header — Bearer plk_…): turn new hires into welcome-kit claim links in one call. Creates a Swag Drop for the chosen kit, invites each employee by email, and returns the claim + HR dashboard links. Each employee picks their own size and delivery address; Printing Labs prints, packs and ships per recipient.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["kitProductSlug","employeeEmails"],"properties":{"company":{"type":"string","description":"Company name shown on the claim page (defaults to the API-key label)"},"message":{"type":"string","description":"Welcome message shown to employees on the claim page"},"employeeNames":{"type":"array","items":{"type":"string"},"description":"Optional names, parallel to employeeEmails"},"employeeEmails":{"type":"array","items":{"type":"string"},"description":"New-hire email addresses (1–50); each receives a claim-link email"},"kitProductSlug":{"type":"string","description":"The product or preset-bundle slug to send (from search-products)"},"notifyEmployees":{"type":"boolean","description":"Email each employee their claim link immediately (default true)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":360,"tokensAfter":360},{"name":"get-brand-store-pricing","fixed":{"name":"get-brand-store-pricing","description":"What a Brand Store costs: the one-time setup fee and the monthly plans (seats, features, price). These are PLATFORM fees for running a private branded storefront — the merchandise inside it is priced separately per product, via calculate-bulk-price. Never present a plan price as a per-item price.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":125,"tokensAfter":125},{"name":"get-company-info","fixed":{"name":"get-company-info","description":"Verified facts about Printing Labs: services, fulfillment regions, budget-tier collections, seasonal gifting hubs, machine-readable resources, and how to contact or request a corporate quote.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":94,"tokensAfter":94},{"name":"get-guide","fixed":{"name":"get-guide","description":"Fetch one published guide, structured as intro + sections, with its canonical URL for citation. Slugs come from search-guides. Pass brief:true on a voice call or when you only need enough to answer one question — the full read is long.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string","description":"Guide slug from search-guides"},"brief":{"type":"boolean","description":"Short read: the first few sections, trimmed. Use on voice."},"sections":{"type":"number","description":"How many sections to return (1-12, default 12; 4 when brief)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":195,"tokensAfter":195},{"name":"get-meeting-slots","fixed":{"name":"get-meeting-slots","description":"Available consultation slots (IST) with the Printing Labs team for a given date. Use before book-meeting; slots reflect the live calendar.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["date"],"properties":{"date":{"type":"string","description":"Date in YYYY-MM-DD format (today to +60 days, IST)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":118,"tokensAfter":118},{"name":"get-product-details","fixed":{"name":"get-product-details","description":"Full public details for one product or bundle by its permalink slug (from search-products results) or numeric id: description, pricing, bulk-discount tiers, GST rate, minimum order quantity, stock signal, options (e.g. Print Type: Laser / UV, with the extra INR per unit each adds and the default), and page URL.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string","description":"Product permalink slug or id, e.g. premium-cotton-hoodie"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":169,"tokensAfter":169},{"name":"get-product-mockup","fixed":{"name":"get-product-mockup","description":"Get a working Mockup Studio deep link for a product or a preset pack, so the user can upload their logo, position it in the real print zone and download a free mockup — no sign-in needed. A pack opens as one artboard per designable item in it. Use when someone asks how their logo would look on an item. Items that have no print zones yet return selfServeMockup: false and the product page instead of a link that would open empty — say the team will send a proof rather than promising a self-serve mo","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string","description":"Product or preset-pack permalink slug or id (from search-products)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":223,"tokensAfter":223},{"name":"get-seo-health","fixed":{"name":"get-seo-health","description":"Run the site's public SEO health self-check and return the raw results: sitemap URL count, HTTP status of the key landing pages, llms.txt blog-link liveness, and whether robots.txt still carries the GPTBot and ClaudeBot groups. The server checks its own public pages, so this works from clients whose networks cannot reach printinglabs.com directly. Results are cached for ten minutes; PageSpeed is deliberately not included — call the PageSpeed API separately if you need a performance score.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":177,"tokensAfter":177},{"name":"get-site-info","fixed":{"name":"get-site-info","description":"Look up how Printing Labs actually works: answers from the published FAQ, what each in-house tool does (Mockup Studio, Brand Stores, Campaign Planner, Build Box, Swag Drop), the list of public pages, and headline return/shipping/terms/privacy facts with the page carrying the binding version. Use this instead of guessing when a customer asks 'what is X' or 'how does Y work'.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["topic"],"properties":{"query":{"type":"string","description":"Optional keyword to narrow the results, e.g. 'MOQ', 'artwork', 'mockup'"},"topic":{"enum":["faq","tools","pages","policies"],"type":"string","description":"What to look up"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":217,"tokensAfter":217},{"name":"list-catalogs","fixed":{"name":"list-catalogs","description":"The downloadable PDF catalogue library: every published catalogue with its title, description, page count, file size, and direct PDF URL.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":78,"tokensAfter":78},{"name":"list-product-categories","fixed":{"name":"list-product-categories","description":"TWO live lists: `categories` — single-product categories with their product counts and canonical category page URLs — and `bundleCategories` — the curated pack ranges (Festive & Diwali Packs, Welcome & Onboarding Packs, Team & Event Packs, Desk & Workspace Packs) with their pack counts and /preset-packs deep links. Either name works as the exact `category` argument to search-products. `bundles` carries the total pack count.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":161,"tokensAfter":161},{"name":"my-orders","fixed":{"name":"my-orders","description":"List the signed-in customer's own orders with statuses. Requires a portal personal token on the connection (Authorization: Bearer plt_… — minted at printinglabs.com → Profile → AI assistant access). Without one, the tool returns connection instructions.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":109,"tokensAfter":109},{"name":"search-guides","fixed":{"name":"search-guides","description":"Search Printing Labs' published buying guides and editorial articles — vendor-selection checklists, bulk pricing mechanics, GST on corporate gifts, welcome-kit planning, Diwali gifting and more. Returns titles, live URLs and excerpts. Use this when a user asks HOW corporate gifting works in India (not what a product costs); fetch a full article with get-guide and cite the URL.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"query":{"type":"string","description":"Keywords, e.g. 'GST rates kits', 'choose vendor', 'diwali budget'"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":183,"tokensAfter":183},{"name":"search-products","fixed":{"name":"search-products","description":"Search Printing Labs' live corporate-gifting catalog (custom apparel, drinkware, welcome kits, bundles). Filter by free-text keyword, exact category, maximum unit price in INR, bundles only, or eco-friendly only. Every filter can be used alone, with no keyword. Returns matches with canonical product page URLs.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","maximum":20,"minimum":1,"description":"Maximum results to return (default 8)"},"query":{"type":"string","description":"Free-text keyword matched against product names, categories, and descriptions. Optional — omit it to just apply the other filters."},"ecoOnly":{"type":"boolean","description":"Return only products/packs tagged eco-friendly (eco: true in the results)"},"category":{"type":"string","description":"Exact category name, e.g. 'Apparel & Headwear', 'Drinkware', 'Gourmet', 'Personal Accessories' — or a pack range, e.g. 'Festive & Diwali Packs', 'Welcome & Onboarding Packs'. list-product-categories returns both lists (`categories` and `bundleCategories`); only names from there match. There is no 'Environment friendly' category any more; use ecoOnly instead."},"bundlesOnly":{"type":"boolean","description":"Return only curated preset bundles / swag packs"},"maxPriceINR":{"type":"number","maximum":10000000,"minimum":1,"description":"Only products at or below this unit price in Indian Rupees"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":423,"tokensAfter":423},{"name":"track-order","fixed":{"name":"track-order","description":"Live status timeline for an existing order. Requires the order id AND the email the order was placed with (both must match).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["orderId","email"],"properties":{"email":{"type":"string","description":"The email address the order was placed with"},"orderId":{"type":"string","description":"The order / reference id from the confirmation email"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":141,"tokensAfter":141}],"toolsChanged":18,"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."}