Building a Skill for the Nue MCP App
9 min
the walkthrough in creating a quote in the nue mcp app docid\ bu9rz9o51wbpnlmoeqqj0 works, but it takes several messages of back and forth, and two people running it will do it slightly differently a skill fixes that it's a plain markdown file that teaches your ai client your version of a motion — which tools, in which order, with which defaults, and which steps must never be skipped once a skill is installed, one sentence runs the whole thing create a new quote a skill is instructions, not code it doesn't add tools or bypass anything every guardrail in the app still applies — the client still asks before each tool call, previews still write nothing, and card buttons still draft messages instead of firing them a skill just makes the model consistent about how it uses what it already has what a skill is good for use a skill when… example a motion has a required order always preview approvals before submitting your org has defaults a model can't guess the price book to use, the standard subscription term you want a stop and ask point never commit a quote without showing the total first the same flow is run by several people every se builds a demo quote the same way a step is easy to get wrong unit of measure changes the price; confirm it explicitly anatomy a skill is one skill md file with yaml front matter and a markdown body name — lowercase and hyphenated this is how people invoke it description — the most important line in the file the client reads it to decide when to use the skill, so it must contain the phrases users will actually type a vague description means the skill never fires body — the procedure, in plain imperative english example a guided new quote skill this is a working example modeled on the flow in the walkthrough copy it, change the defaults in tenant defaults to match your org, and install it \ name nue create quote description build a new nue quote end to end find the customer, create or reuse an opportunity, price the products, preview the totals, and commit only after the user confirms then optionally route approvals, generate the order form, and prepare it for e signature triggers on "create a new quote", "new quote in nue", "quote this deal", "build a quote for \<customer>", "draft an order form" \ \# create a nue quote run this whenever someone asks for a new quote in nue follow the phases in order never skip a preview never commit anything the user has not seen \## tenant defaults use these unless the user says otherwise, and say which ones you applied \ price book standard price book \ subscription term 12 months \ start date today \ expiration start + 30 days \ opportunity stage proposal/price quote \## phase 1 customer 1\ call `lcm findcustomers` with whatever name fragment the user gave if they gave none, call it with no filter so the picker card lists their accounts 2\ let the card do the work do not re list the customers in prose 3\ stop until a customer is chosen \## phase 2 opportunity 1\ if the user named an existing opportunity, resolve it with `lcm queryopportunities` and reuse it 2\ otherwise create one with `lcm createopportunity` you need a name, a close date, and a stage ask for whatever is missing and only what is missing \## phase 3 price and preview (never skip) 1\ resolve every product the user named to a real sku before pricing do not invent skus if a name is ambiguous, list the candidates and ask 2\ call `lcm createnewquote` with `commit false` 3\ present the preview card and then explicitly call out, in one short list \ the unit of measure you used and any alternative uom on the same sku that would change the price \ any second price book carrying different pricing for these products \ any auto renew setting that came from product defaults rather than from the user 4\ stop do not commit on your own initiative \## phase 4 commit 1\ only after the user confirms, call `lcm createnewquote` with `commit true` 2\ report the quote name and total, and surface the edit line items link \## phase 5 approvals (only if asked) 1\ always call `lcm previewapprovalpath` first and show the card 2\ if no path triggers, say so and stop do not submit 3\ if a path triggers, confirm with the user, then `lcm submitforapproval` 4\ routing can be asynchronous poll `lcm getapprovalstatus` before claiming an outcome, and tell the user whether the quote is locked for editing 5\ only use `lcm approveapprovalrequest` when the user explicitly asks to approve and the step is assigned to them \## phase 6 document and signature (only if asked) 1\ `lcm getquotetemplates` if more than one is published, show the picker card and let the user choose do not pick for them 2\ `lcm generatequotedocument` with the chosen template 3\ for signature, call `lcm previewquoteesignature` and show the review card never send an envelope sending is the user's click on confirm & send \## rules \ preview before commit, every time, no exceptions \ resolve names to ids never guess a sku, price book, or opportunity id \ say which defaults you applied silent defaults are how wrong quotes happen \ state plainly when something is irreversible, before it happens \ if a tool fails, report what failed and stop do not retry with altered values to force it through install it in claude save the file as skill md in claude, open settings → skills click add , then upload the file start a new chat and type / to confirm the skill is listed, or simply say "create a new quote" and let the description match skills can be personal or shared with your whole organization, so a motion one person gets right becomes the motion everyone runs writing skills that actually fire put real user phrasing in the description "create a new quote" , "quote this deal" — the words people type, not a summary of what the skill does number the steps models follow ordered procedures far more reliably than prose paragraphs name tools exactly lcm previewapprovalpath , not "the approval preview tool " say what not to do "never send an envelope" does more work than three sentences about being careful encode the stop points the value of a skill is as much in where it pauses as in what it does keep tenant specifics in one section someone forking your skill for another org should only need to edit tenant defaults a skill is guidance, not enforcement it shapes behavior; it does not restrict permissions anything the model must be unable to do belongs in nue's role and permission configuration, not in a markdown file see tool visibility docid\ hocovbi8ggq7v04u981gd related creating a quote in the nue mcp app docid\ bu9rz9o51wbpnlmoeqqj0 — the motion this skill automates nue mcp app overview docid\ cwl54yve8ypluxszeq7sm — the cards and the guardrails a skill runs inside connecting claude to the nue mcp app docid\ vp4rbvx71bhosahzez7dg — connector setup nue lifecycle manager docid\ cf8cbhygypd3ozg7ym2gy — the full tool catalog the skill draws on