Building a Skill for the Nue MCP App
The walkthrough in Creating a Quote in the Nue MCP App 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:
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.
Related
- Creating a Quote in the Nue MCP App — the motion this skill automates.
- Nue MCP App Overview — the cards and the guardrails a skill runs inside.
- Connecting Claude to the Nue MCP App — connector setup.
- Nue Lifecycle Manager — the full tool catalog the skill draws on.