# Odoo Sales MCP

> Odoo Sales connects your AI agent directly to Odoo ERP's sales pipeline. Draft quotes, list active orders, check product stock, or confirm a sale—all through natural conversation. Manage every stage of the customer journey without switching tabs. Use it when you need to move data from an idea (a lead) straight into an action (a confirmed order).

## Overview
- **Category:** erp-operations
- **Price:** Free
- **Tags:** quotation-management, sales-orders, price-lists, pipeline-management, revenue-tracking, customer-engagement

## Description

Look, forget spending half your day jumping between tabs just to close a deal. This server hooks up your AI client right into Odoo ERP’s sales pipeline. You can draft quotes, check stock, or confirm an order—all without leaving the chat window. It lets you manage every step of the customer journey using nothing but natural talk. If you need to get data from a simple idea (like a lead) straight through to an actual confirmed sale, this is what you use.

When you're prepping to sell something, you start with product knowledge. You can run **`odoo_search_products`** by name; that checks the whole catalog and gives you current pricing, cost details, category info, and how many units are actually in stock. If you gotta know what prices look like generally, you'll use **`odoo_list_pricelists`**, which lists every configured pricing structure and tells you if it’s active or what currency it uses.

Want to start a proposal? You use **`odoo_create_quotation`**. It drafts a whole new quote for a customer, letting you specify exactly which product IDs, how many quantities, and the unit prices. If you just need a quick overview of all the quotes hanging out there that haven't been confirmed yet, run **`odoo_list_quotations`** to see the full proposal pipeline. On the flip side, if you gotta check on sales that are already closed or finalized, **`odoo_list_sales_orders`** lists every confirmed order, showing amounts and where it's at with completion status.

Need the deep dive? You’ve got two ways to get details. If you know a specific sales order or quote number, run **`odoo_get_sales_order`** to pull up all key information about that record—customer info, amounts, dates, and who the salesperson was. Want to see only what products are on that bill? Use **`odoo_get_order_lines`**; it pulls up the individual product lines, quantities, and specific pricing details for any given sales order or quote.

When you're ready to close it out, confirming a sale is simple. You use **`odoo_confirm_order`**. It takes that draft quotation you created earlier and turns it into an active sales order. That single action triggers everything downstream—the inventory counts, the delivery processes, and gets the ball rolling on invoicing.

It lets your agent query any module in Odoo—from pricelists to specific order lines—just by using plain language instead of navigating complex menus.

## Tools

### odoo_confirm_order
Converts a draft quotation into an active sales order, triggering downstream inventory and delivery processes.

### odoo_create_quotation
Generates a new sales quote for a customer by specifying product IDs, quantities, and unit prices.

### odoo_get_order_lines
Retrieves the individual products, quantities, and pricing details for any specific sales order or quotation.

### odoo_get_sales_order
Gets all key information about a specific sales order or quote using its numeric Odoo database ID.

### odoo_list_pricelists
Lists all configured pricing structures (pricelists), showing their currency and active status for reference.

### odoo_list_quotations
Displays a summary of all outstanding quotes that haven't been confirmed yet, helping track the proposal pipeline.

### odoo_list_sales_orders
Lists all sales orders that are already confirmed or finished, showing key details like amounts and completion status.

### odoo_search_products
Searches the entire product catalog by name to check prices, stock levels, and SKUs before quoting.

## Prompt Examples

**Prompt:** 
```
Search for leads from the website
```

**Response:** 
```
👥 **CRM Leads — Website**
| Name | Email | Stage | Revenue |
|---|---|---|---|
| Acme Corp | info@acme.com | Qualification | $15,000 |
| Beta Inc | hello@beta.io | Proposition | $8,500 |
```

**Prompt:** 
```
Show recent sales orders
```

**Response:** 
```
📋 **Sales Orders**
| SO# | Customer | Amount | Status |
|---|---|---|---|
| S00042 | Acme Corp | $12,500 | Confirmed |
| S00041 | Beta Inc | $3,200 | Draft |
```

## Capabilities

### Search Product Catalog
Find products by name, checking current prices, cost, category, and available stock quantity.

### Generate New Quote
Draft a new quotation for a customer, specifying product lines, quantities, and unit prices.

### View Order Statuses
List all pending quotations or confirmed sales orders to check the current state of fulfillment.

### Get Full Order Details
Pull up a specific sales order by its database ID to see every detail: customer, amounts, dates, and salesperson.

### Confirm Sale Status
Transition an approved draft quote into an active, confirmed sales order ready for delivery and invoicing.

## Use Cases

### Client needs a quick quote update
The Account Manager knows the client wants two different items. Instead of logging into Odoo, they tell their agent: 'Check stock for SKU 123 and then generate a new quotation.' The agent runs `odoo_search_products` and uses that live data to call `odoo_create_quotation`, giving the manager an immediate draft quote.

### Closing out a deal
The Sales Rep has finished negotiating. They confirm, 'Approve the pending quote for Acme Corp.' The agent checks which quotes are available using `odoo_list_quotations` and then executes `odoo_confirm_order`, moving the client into the fulfillment pipeline.

### Checking order details post-sale
The Ops Specialist receives a query about an old sale. They don't have the order number, just the ID. Running `odoo_get_sales_order` gives them all amounts and dates instantly. Then they use `odoo_get_order_lines` to break down exactly which products were sold.

### Comparing pricing tiers
The Account Manager questions the price structure for a new region. They ask the agent to run `odoo_list_pricelists`. The agent returns all available pricelists and currencies, allowing the manager to advise the client on the best rate.

## Benefits

- Confirm sales instantly. Instead of navigating to the Odoo UI, just tell your agent to confirm the order using `odoo_confirm_order`. It handles the state transition automatically.
- Build quotes on the fly. Use `odoo_search_products` first to verify product pricing and stock, then use that data immediately in `odoo_create_quotation` to draft a proposal.
- Track pipeline status easily. Use `odoo_list_quotations` to see every proposal awaiting approval without running reports or opening multiple tabs.
- Validate orders instantly. If you need details on an existing order, don't guess—call `odoo_get_sales_order` with the ID and get a complete record dump.
- Avoid pricing errors. Run `odoo_list_pricelists` when in doubt to check which pricing structure applies before finalizing any price calculations.

## How It Works

The bottom line is that you automate the entire sequence: research product data, build the document, and execute the final state change using structured tool calls.

1. First, use `odoo_search_products` to verify the correct product ID, current list price, and stock count.
2. Next, call `odoo_create_quotation`, providing the customer's partner ID along with the verified line items (product IDs, quantities, prices).
3. Finally, when the client approves the quote, trigger `odoo_confirm_order` to move the draft into a fulfilled sales order status.

## Frequently Asked Questions

**How do I find out if a quote is still pending acceptance using odoo_list_quotations?**
You call `odoo_list_quotations` and the agent returns all records currently in 'draft' or 'sent' status. This lets you see exactly which proposals are waiting for client approval without manually checking each record.

**What is the difference between odoo_create_quotation and odoo_get_sales_order?**
`odoo_create_quotation` builds a brand new quote. `odoo_get_sales_order` retrieves all existing details for an order or quote using its specific numeric ID.

**Can I use odoo_search_products to check stock before quoting?**
Yes, that's the best practice. Use `odoo_search_products` first. It returns live data on product name, price, and available stock quantity, letting you build an accurate quote.

**What happens when I run odoo_confirm_order?**
Running `odoo_confirm_order` moves the selected draft quote into a live sales order. This action is key because it triggers downstream business processes like inventory reservation and delivery scheduling.

**What happens if I pass a non-existent ID to `odoo_get_order_lines`?**
The tool will return an error indicating that no order record matches the provided numeric ID. This lets your agent know immediately that the data input needs correction before proceeding with line item analysis.

**Can I filter results when using `odoo_list_sales_orders`?**
Yes, you pass filtering parameters (like customer ID or date ranges) directly into the function call. The server returns a limited set of confirmed orders that strictly match your requested criteria.

**How do I get full financial details for one specific quote after running `odoo_list_quotations`?**
You must grab the numeric ID from the list results and pass it to `odoo_get_sales_order`. This retrieves all key fields—customer, amounts, dates—for that single record.

**Does `odoo_list_pricelists` show the pricing rules for my current customer?**
No, it lists all configured pricelists and their active status globally. To see the price applied to a specific order, you must use `odoo_get_sales_order` with that record's ID.

**Which Odoo versions are supported?**
This server uses the JSON-RPC protocol, which is compatible with Odoo 14, 15, 16, 17, and 18. Both Odoo Community and Enterprise editions are supported.

**Does it work with Odoo.com (SaaS)?**
Yes! Works with both Odoo.com hosted instances and self-hosted Odoo servers. Just provide your instance URL and API key.

**How do I generate an API Key?**
Go to Settings → Users → select your user → API Keys tab → New API Key. Give it a descriptive name and copy the generated key.