GBGrommetbook

Grommetbook docs

Published · Updated

Grommetbook is a remote MCP server at https://grommetbook.smallwright.com/mcp plus a read-only web viewer. Your AI assistant calls its tools to build your Price Book, price and send Quotes, and move Jobs; Grommetbook stores the record, does all the pricing arithmetic and keeps a history of every change. This page lists the concepts, every tool, the limits and how your data is handled.

Concepts

Price BookYour Materials (cost per sq ft, linear ft or each, with a waste %), Rates (dollars per hour: design, print, install) and Products (how a sellable item is priced: per sq ft, per linear ft, each, or fixed; materials and rate hours used; markup %; minimum; options such as grommets or rush).
CustomerWho you quote: name, email, phone, notes.
QuotePriced lines from the Price Book, tax and deposit from your shop settings. Draft → sent (a link the customer approves online) → approved / declined / expired. Sent Quotes keep their prices when the Price Book changes.
JobAn approved Quote in production: To do → In production → Ready → Installed / picked up → Invoiced, with due dates and notes.

Tools

Write tools that change many things, or remove things, take confirm: false returns a dry run that saves nothing. Write tools accept an idempotency_key so retries apply once. Every change is recorded with the assistant's name and shown in the viewer's history.

ToolWhat it isKindDescription (what your AI reads)
get_startedGet startedreadReturns the shop's setup state (is the Price Book empty? any Customers or Quotes?) and the next three things to ask the owner for.
update_shopUpdate shop settingschangeChange the shop profile shown on Quotes (name, logo, terms) and defaults (sales tax %, deposit %, quote expiry, auto-create Jobs, timezone). Returns before → after.
list_teamList the shop teamreadLists the people on the shop (owner and staff, by email) and pending invites. One price covers the whole team; everyone works in the same Price Book, Quotes and Jobs.
invite_teammateInvite a teammatechangeAdds a person (by email) to this shop's team; owner only. When that person signs in with the email — from their own AI assistant or the web viewer — they join this shop instead of getting a new one. Returns the invite and how they connect. Grommetbook doesn't email them.
remove_teammateRemove a teammatechangeRemoves a person or a pending invite from the team; owner only. Their AI assistant connections stop working immediately; their past changes stay in the history. confirm: false shows what would happen.
export_shop_dataExport all shop datareadExports everything the shop owns (Materials, Rates, Products, Customers, Quotes, Jobs, requests, history) as one JSON file and returns a download link.
import_price_bookImport a Price BookchangeSet up or bulk-update the Price Book from the owner's spreadsheet or supplier list in one batch (Materials, Rates and Products; Products refer to Materials and Rates by name, including ones in the same batch). Always call with confirm: false first and show the owner the dry run (counts, problems, sample prices); then confirm: true saves everything or nothing. Max 240 items per call. Existing items with the same name are updated.
upsert_materialsAdd or change MaterialschangeAdd Materials or change existing ones (matched by name). Use preview: true before cost changes to show which Product prices move.
upsert_ratesAdd or change RateschangeAdd labour or machine Rates ($/hour) or change existing ones (matched by name). preview: true shows affected Product prices without saving.
upsert_productsAdd or change ProductschangeAdd Products (pricing recipes) or change existing ones by name. Options merge by name (use remove_options to delete one); materials/rates lists, if given, replace the Product's lists. preview: true shows sample prices before → after without saving.
reprice_materialsReprice Materials by %changeWhen a supplier raises or cuts prices: change the cost of every matching Material by a percent. confirm: false (default) lists each Material old → new and every affected Product's sample price; confirm: true applies. Sent Quotes keep their prices.
price_productPrice a Product / explain a pricereadPrice one Product at a size and quantity with options, with the step-by-step arithmetic (materials incl. waste, rate hours, options, markup, minimum). Use it to answer "why is X $86?" or to check a Product before quoting.
list_price_bookList the Price BookreadList Materials, Rates and/or Products with key numbers (costs, markups, options; per Product a sample price at its sample size with no options, its cost and margin = (price − cost) ÷ price).
retire_itemRetire a Material, Rate or ProductchangeHide a Material, Rate or Product from new Quotes (kept in history; never deleted). confirm: false lists what still uses it.
upsert_customerAdd or change a CustomerchangeAdd a Customer or update one (matched by name or email).
find_customersFind CustomersreadFind Customers by name or email.
draft_quoteDraft a QuotechangeDraft a Quote for a Customer: each line names a Product, size, quantity and options; Grommetbook prices every line from the Price Book (computed, not estimated). Returns the priced Quote. It stays a draft until send_quote.
revise_quoteRevise a QuotechangeChange a draft or sent Quote (lines, customer, notes, deposit, expiry). Prices are recomputed from the current Price Book. A sent Quote goes back to draft and its old link stops accepting approval until send_quote again. Approved/declined Quotes can't be revised.
send_quoteSend a Quote (get approval link)changeMark a draft Quote as sent and get the customer approval link. Grommetbook does not email it: give the link to the owner, or send it with your own email tool if the owner asks. The customer approves or declines on that page.
list_quotesList QuotesreadList Quotes with number, customer, total, status, age and last activity (what last happened and when). E.g. status sent + older_than_days 7 for follow-ups.
get_quoteGet a QuotereadFull detail of one Quote: lines with the pricing arithmetic, totals, status, approval record, and the approval link if sent.
create_jobCreate a Job from a QuotechangeCreate the Job for an approved Quote (usually automatic on approval). Calling again returns the existing Job.
move_jobMove a Job to a stagechangeMove a Job to to_do, in_production, ready or done (installed / picked up). Invoiced is set only by the accounting push, not by this tool.
update_jobUpdate a JobchangeChange a Job's due date, title or notes. Changes are kept in its history.
list_jobsList JobsreadList Jobs with stage and due date (sorted by due date). overdue: true = past due and not done.
export_invoices_csvExport invoices as CSVreadCSV of finished Jobs' invoice lines in a QuickBooks import layout — for shops without a connected accounting system.
request_featureRequest a featurechangeFiles a request when the owner asks for something none of the other tools can do. Files it with Grommetbook (or adds a vote to a matching request) and returns its status; no delivery dates are given.
list_my_requestsList my feature requestsreadThe shop's feature requests and their status (open, planned, shipped, declined).
whats_newWhat's newreadRecently shipped features, including this shop's requests that shipped.

QuickBooks Online tools (connect, push an invoice, status) are coming soon and are not listed by the server yet; export_invoices_csv produces a QuickBooks invoice-import CSV today.

Your team

One price covers the whole shop. The owner adds people by email (invite_teammate, or just "add sam@myshop.com to the team"); when that person signs in with that email, from their own AI assistant or the viewer, they join the same shop. list_team shows who is on it; remove_teammate removes someone and disconnects their assistants at once.

Sign-in and access

The server uses OAuth 2.1 (PKCE, dynamic client registration). Sign-in is an email link: no password is stored. Each connection gets scopes for the Price Book, Quotes, Jobs and requests; the viewer's Connected agents page shows every assistant with access and revokes it instantly.

Limits

Your data

We store your shop profile, Price Book, Customers (names, emails, phone numbers you give us), Quotes, Jobs, the approval record (approver name, time, IP address and browser), feature requests, and an audit log of agent calls (tool, inputs, result, assistant name). We don't store your conversations with your AI. export_shop_data gives you everything as JSON at any time. To delete your shop, email support@smallwright.com from the owner's address; we delete it within 30 days. Details: Privacy Policy · Terms.

Support

Email support@smallwright.com. For something Grommetbook can't do, ask your assistant: it files a feature request (request_feature) and you can see its status with list_my_requests.