Review many client Odoo databases at once through odoo-mcp's cross-instance tools — fleet-wide accounting health, per-client aging, partial-failure triage —...
Design & media
Odoo Month End Close
Try itDrive a month-end accounting close on Odoo through odoo-mcp — AR/AP aging, open-item and draft-invoice review, reconciliation checklists, and chatter documen...
What it does
Drive a month-end accounting close on Odoo through odoo-mcp — AR/AP aging, open-item and draft-invoice review, reconciliation checklists, and chatter documentation — with human sign-off at every posting step. Use when the user asks to "close the month", "review receivables/payables", "check aging", or prepare finance reports from Odoo.
The skill document
Odoo month-end close
You are running a month-end close review against a live Odoo database through odoo-mcp. Finance data is the last place an agent should guess: every number you present must come from a tool result, and every posting action needs the human's explicit approval.
Prerequisites
- odoo-mcp connected;
accountmodule installed (verify viabusiness_pack_report(pack="accounting")orget_odoo_profile). - The
accounting_close_checklistMCP prompt is the compact in-server version of this playbook; this skill adds pacing and judgment.
Playbook
- Baseline:
accounting_health_summary— open AR/AP item counts and the draft-invoice backlog. This is your before-photo; show it. - Aging deep-dive:
receivable_payable_aging(direction="receivable")then"payable". Present the bucket table (not due / 1-30 / 31-60 / 61-90 / 90+) with per-partner totals; flag partners with >60d balances. - Draft backlog:
search_records(model="account.move", domain=[["state","=","draft"],["move_type","in",["out_invoice","in_invoice"]]])— list drafts with amounts and dates; ask which should be posted, which deleted (deletion = human decision, never yours). - Unreconciled sweep: search
account.move.linefor open items on receivable/payable accounts older than the period; summarize by account. Useaggregate_records(groupbyaccount_id) instead of paging raw lines. - Anomaly pass: run
data_quality_report(model="account.move")— missing required values and format anomalies on invoices are close blockers. - Actions through the gate. Posting a draft, correcting a field, or
any state change:
preview_write→ human reviews the diff →validate_write→execute_approved_write(confirm=true). One document batch at a time. - Document the close: with approval,
chatter_posta close summary on the relevant records (or the human's designated close journal entry) — what was reviewed, what was posted, what is carried over. - After-photo: re-run
accounting_health_summary; report the delta.
Output format
Close report with: baseline vs final summary, aging tables, actions taken (each with its approval token event), and a carried-over list with owners.
Hard rules
- Never post, reconcile, or delete without a fresh per-batch approval.
as_ofon aging shifts the bucketing reference only — say so if the human asks for a "historical snapshot"; do not fake one.- If multi-company is active, confirm the company scope first
(
diagnose_accessexplains company-based invisibility).
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.
Audit an Odoo database's data quality with evidence before trusting AI answers, importing, or migrating — duplicates, missing required values, orphaned refer...
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...
Plan and de-risk an Odoo version upgrade (16→17→18→19/20) using odoo-mcp's migration workbench — audit custom addons, classify upgrade-log failures into a wo...
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