Integrations

Drivethru Odoo Sales Assistant

Try it

Enter and manipulate BaconCo sales orders in Odoo the way a rep does — through the `drivethru_mcp` MCP server's sales-entry tools. BaconCo is a custom-appare...

What it does

Enter and manipulate BaconCo sales orders in Odoo the way a rep does — through the `drivethru_mcp` MCP server's sales-entry tools. BaconCo is a custom-apparel manufacturer where the product is constructed at order time (blank garment + decoration → finished good), so a sale order is really a manufacturing order. This skill creates a draft order, reads the customer's internal notes for special handling, drives the order-entry grid (style + color + size→qty + decorations, building the manufactured products/BOMs/routes behind the scenes), attaches decorations and decoration requests, enters per-unit customizations, runs a pre-submission checklist, and submits/confirms. Builds on `drivethru-odoo`. Use whenever the user wants to create, build up, edit, price, or confirm a sales order / quote, work the sales-order grid, add decorations or a decoration request, or enter an order from scratch.

The skill document

BaconCo Sales Order Assistant

This skill lets you build and manipulate sales orders in BaconCo's Odoo — create an order, work the order-entry grid, attach decorations, run the pre-submission checklist, and submit/confirm — by calling the drivethru_mcp MCP server's sales_* entry tools. It is the write companion to drivethru-odoo (which reads the sales book) and uses the same MCP client and credentials.

# Discover the tools (names/schemas evolve — trust this over any list here)
python3 scripts/odoo_mcp.py tools
# Call one
python3 scripts/odoo_mcp.py call  '{"...": "..."}'
echo '{"...": "..."}' | python3 scripts/odoo_mcp.py call 

Credentials (ODOO_MCP_URL, ODOO_MCP_TOKEN) come from the environment; if either is missing the script exits with config_error — stop and tell the user. Never ask them to paste the key into chat.

The one thing to understand first

At BaconCo the product usually does not exist until the order is entered. A t-shirt line isn't "pick a product" — it's "construct a manufactured bacon_item = a blank garment + decoration(s), with a bill of materials (component = the blank), Make-to-Order + Manufacture routes, a vendor on the blank, and linked decorations." All of that has to be correct before confirm, or purchasing buys the wrong blank, workorders come out empty, and the order ships wrong — silently, days later. The sale order is where manufacturing truth is set.

You do not build any of that by hand. The Odoo model does it. Your job is to feed it correct inputs (style, color, size, decoration) through the grid and then run the checklist before you submit. See references/order_entry_fields.md for the full model background.

The golden path

  1. Read the customer first. sales_get_customer {"partner_id": } — read internal_notes (and commercial_internal_notes) for special actions for this customer, and note the hard flags (requires_po, required_department, requires_shipping_label_notes, approval_state). Set those on the order up front. (Find the id with sales_search_customers.) → references/customer_prep.md
  2. Create the draft. sales_create_order {"partner_id", ...} — customer settings (salesperson, term, team) auto-populate. It returns the order, the customer prep bundle, and an initial checklist.
  3. Add product + decorations via the grid. sales_grid_search_templatessales_grid_load_variantssales_grid_add_column (one style + color + size→qty + decorations), repeat per style/color. → references/grid_build_and_apply.md
  4. Handle decorations. Create/attach decorations, spin up a decoration request (RFD), and enter per-unit customizations for name/number decorations. → references/decoration_flow.md
  5. Build the products (Preview). sales_preview_order — turns decorated raw blanks into manufactured products with BOMs and routes. Required before submit/confirm. Confirm does NOT do this.
  6. Run the checklist. sales_run_preflight — fix every blocking item. → references/pre_submission_checklist.md
  7. Submit or confirm. sales_submit_order (internal review) or sales_confirm_order with confirm=true (goes live, launches procurement).

Tool map

Run python3 scripts/odoo_mcp.py tools for the authoritative list. The entry surface (names may evolve):

AreaTools
Customer prep & notessales_search_customers, sales_get_customer, sales_add_customer_note
Order lifecyclesales_create_order, sales_update_order, sales_add_lines, sales_remove_lines, sales_preview_order, sales_run_preflight, sales_submit_order, sales_confirm_order, sales_set_hold
Gridsales_grid_read, sales_grid_add_column, sales_grid_apply, sales_grid_search_templates, sales_grid_load_variants, sales_grid_validate, sales_grid_read_costs, sales_grid_apply_costs, sales_grid_calculate_prices
Decorations & requestssales_list_decoration_options, sales_search_decorations, sales_create_decoration, sales_link_decorations, sales_create_decoration_request, sales_get_decoration_request, sales_advance_decoration_request, sales_upload_customizations
Field discoverysales_list_model_fields (from drivethru-odoo) — lists every field on sale.order, sale.order.line, decoration, decoration.request, …
Reading the bookall the read-only sales_* query tools in drivethru-odoo (sales_get_order, sales_search_orders, sales_order_manufacturing, …)
Operator docsdocs_get {"slug": "sales_order_entry"} — the operator reference for this surface

Non-negotiables

  • Read the customer's internal notes before you enter an order. They hold the "special actions for this customer" and there is no pop-up warning system on this Odoo — the notes are it. Honor the hard flags so confirm doesn't hard- refuse.
  • Preview before submit. Any decorated line entered as a raw blank must go through sales_preview_order so its manufactured product, BOM and routes get built. Skipping it is the classic silent failure.
  • Run the checklist before you submit, every time. It predicts every gate Odoo will enforce plus the softer things (notes reviewed, costs entered, proofs approved). This is the most important habit — and the checklist itself is the thing we tune as we test (see the reference; edit it there and in the MCP sales_entry service's _evaluate_checklist).
  • Confirm is live and hard to reverse. sales_confirm_order is a dry run unless you pass confirm=true, and it refuses on blocking checklist failures unless force_confirm=true. State exactly what you're about to do and get the user's go-ahead before confirming. Prefer sales_submit_order when a human will do the final confirm.
  • Leave timestamped notes. When you learn something about handling a customer (color preferences, PO rules, ship quirks), record it with sales_add_customer_note — it appends a timestamped entry to the customer's Internal Notes (res.partner.comment), the same field you read in step 1, so it lands where the next rep and your future self will see it. For general lessons about the order-entry process itself, append to references/lessons_learned.md.

Working inside an Odoo Discuss conversation

You are often answering a person in an Odoo Discuss DM (see drivethru-odoo for the [Conversation context] block and the person's user_id). Be concise and conversational — summarize what the tools returned, don't dump JSON. Confirm before writes: creating/editing orders, applying the grid, and especially submitting/confirming change live Odoo data. Say what you're about to do and get a go-ahead. When you need an SOP ("what's our policy on rush orders?"), use the permission-scoped knowledge_* tools from drivethru-odoo.

References

  • references/customer_prep.md — reading the customer's internal notes & hard flags; leaving timestamped notes.
  • references/order_entry_fields.md — the important sale.order / sale.order.line / decoration.request fields, and the model background (bacon_item vs vendor_item, end-item construction).
  • references/grid_build_and_apply.md — how the grid works and how to build & apply changes (add_column and the raw payload), with the gotchas.
  • references/decoration_flow.md — decorations, requests, production-readiness, custom text.
  • references/pre_submission_checklist.mdthe pre-submission checklist (the part we tune together as we test).
  • references/lessons_learned.md — a timestamped log for things learned about the order-entry process.

Errors

Same envelope as drivethru-odoo: config_error (exit 2, creds missing), invalid_arguments (exit 2), connection_error (Odoo unreachable / key rejected). A tool that ran but failed returns a normal result with isError: true and a human-readable message — surface that. When Odoo refuses a write (a UserError), the tool returns the Odoo message verbatim in its details.odoo_error; relay it and fix the underlying issue.

Related skills

Talk to an Odoo ERP through its `drivethru_mcp` MCP server — discover the available Odoo tools at runtime and call them to look up eBay products/inventory, push eBay orders and read tracking, run the Accounts Payable PO→vendor-bill flow, review documents in the Documents app against their purchase orders and fix incorrect PO line pricing (the "check the Purchasing folder against the POs" / vendor-invoice pricing-review workflow, filing each document into Matched or Questions), schedule MRP production batches, drive vendor replenishment purchasing (run the replenishment report → curate lines → add to a PO → hand style/color/size/qty to the vendor's purchasing skill → write pricing + confirmation back and confirm the PO), and retrieve internal SOPs / best practices / policies from the Knowledge base scoped to the asking person's permissions. Use whenever the user needs to read from or write to Odoo, especially when you are answering a person inside an Odoo Discuss conversation.

6 installs

Payable matching for BaconCo — reconcile vendor documents in Odoo's Documents app against their purchase orders and correct incorrect PO line pricing. Use for requests like "check the Purchasing folder against the POs and fix the pricing", "match the vendor invoice / order confirmation / acknowledgement to its PO", "AP price matching / invoice-to-PO matching / three-way match", "reconcile the vendor documents and mark the POs checked", or "go through the Purchasing folder". The flow: read every document in a Documents-app folder (extracting text out-of-context so large batches don't bloat the context window — falling back to a page render + OCR/vision for scanned or custom-encoded PDFs that won't extract as text), pull the PO number / line items / unit prices from each, compare to the purchase order line by line, correct any wrong `price_unit`, post a "checked" log note on the PO (internal, never a "Send message"), and FILE every document into the `Matched` or `Questions` subfolder — e

Schedule MRP production batches in Odoo (BaconCo) — the fluid shop-floor scheduler. Periodically read open `mrp.production.batch` records, rank them into a run order by the shop rule (manual pins first, then art readiness, then imminent event dates, then earliest governing deadline), write that order back to the floor, and refine it into machine + time slots where the picture is solid. Defers batches whose decals aren't printed or whose artwork isn't digitized below work that can actually run, and expedites them to the top once they're about to be late. Reads purchase orders + vendor tracking to know when goods will land, and uses receipt-readiness as guidance (jobs generally shouldn't start before their components are in) that it refines from human feedback. Handles rush orders dropped in mid-day by re-ranking. Talks to Odoo through the `drivethru_mcp` MCP server. Use whenever the user asks to schedule/plan production, rank or re-order the production queue, build a machine schedule, s

Internal operations agent for the purchasing→manufacturing→shipping side of the Odoo ERP, over the `drivethru_mcp` MCP server. Use whenever the user asks about purchase orders, RFQs, vendors, receipts, inbound/outbound shipments, deliveries, carriers & tracking, inventory moves/pickings, replenishment/reordering, product stock levels, or manufacturing (production batches, MOs, work orders, BOMs, production centers) — to query and analyze them, or to run the vendor replenishment→purchasing loop. Query any field on purchase.order(.line), vendor.tracking, stock.picking, stock.move(.line), delivery.carrier, stock.warehouse.orderpoint, product.product, product.template, mrp.production.batch, mrp.production, mrp.workorder, mrp.bom, mrp.bom.line, and production.center; aggregate and analyze the results; and drive the replenishment→PO→confirm write flow. This is the agent that backs Drive Thru "routines" (scheduled operations sweeps). Especially when answering a person inside an Odoo Discuss c

SellerSprite MCP (open.sellersprite.com). Use this skill for ANY SellerSprite MCP request — reading, creating, and updating data. Whenever a task involves SellerSprite MCP, use this skill instead of calling the API directly.

Salesmate (salesmate.io). Use this skill for ANY Salesmate request — reading, creating, updating, and deleting data. Whenever a task involves Salesmate, use...