# Odoo eCommerce MCP

> Odoo eCommerce MCP Server connects your AI client directly to your entire Odoo backend. You can manage online sales, check current inventory levels, find customer contact info, and track every order—all without leaving your chat window. It lets you query product catalogs, search for specific items, and review the full history of e-commerce transactions through natural language prompts.

## Overview
- **Category:** industry-titans
- **Price:** Free
- **Tags:** product-catalog, online-store, customer-orders, inventory-sync, shopping-cart, sales-tracking

## Description

You're connecting your AI client straight into your Odoo backend. This lets you manage everything related to your e-commerce operation—from seeing initial leads all the way through fulfilled sales orders—right from this chat window. You don't gotta leave your desk or jump between tabs; your agent handles it for ya.

**Managing Sales History:**
You can check out every order placed on your online store using `odoo_list_ecommerce_orders`. This tool pulls a list of all sales, whether they’re pending or already finished. For each transaction, you get the order number, who bought it (the customer), the total amount spent, the current status, which website was used for the sale, and the date it happened.

**Handling Products and Inventory:**
Need to know what you've got on the shelves? `odoo_list_shop_products` gives you a full rundown of every product currently active in your Odoo shop. It shows you things like the SKU, the sale price, how many units are stocked, and if it’s published or not. If you only know the name of what you need, you can search the catalog instantly using `odoo_search_shop_products`. This tool searches by product name and hands back matching items along with their current selling price, exact stock count, which category they belong to, and publish status.

To map out your entire product structure, you'll find two tools. One is `odoo_list_product_categories`, which pulls a complete list of all categories across the shop, showing you the full path that connects them. The other helps you see what websites are connected to this instance; `odoo_list_websites` lists every configured website by its name, domain, and creation date.

**Tracking Customers:**
You can pull core contact information for every customer who's made a purchase using `odoo_list_shop_customers`. This list gives you their name, email address, phone number, city, and country. It’s your single source for all paying client data.

Basically, if it involves an order, product, or customer record in Odoo, your agent can get it. You'll use `odoo_list_ecommerce_orders` to pull detailed reports on every transaction; you'll use the inventory tools—`odoo_search_shop_products`, `odoo_list_shop_products`, and the category list from `odoo_list_product_categories`—to check stock levels or see what’s available. You get customer data via `odoo_list_shop_customers`. And if you gotta know about the site itself, `odoo_list_websites` gives you all the setup details.

## Tools

### odoo_list_ecommerce_orders
Lists all online store orders, returning the order number, customer, total amount, status, website name, and date.

### odoo_list_product_categories
Retrieves a complete list of product categories and their full hierarchical path across your Odoo shop setup.

### odoo_list_shop_customers
Lists all customers who have bought things online, providing their name, email, phone number, city, and country.

### odoo_list_shop_products
Returns the full catalog of products available on the Odoo eCommerce shop, showing prices, stock counts, categories, and publish status.

### odoo_list_websites
Lists all configured websites for your instance, returning the name, domain, and creation date.

### odoo_search_shop_products
Searches the product catalog by name, returning matching products along with their current price, stock level, category, and publish status.

## 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

### Review online sales history
Retrieve a list of completed and pending orders placed through the Odoo storefront, showing customer details, total amount, status, and date.

### Search product inventory by name
Find specific products in the catalog by name, getting back their current price, available stock quantity, category, and publish status.

### Get customer contact records
Pull core contact information—name, email, phone, city, country—for every customer who has made a purchase on the site.

### List all available products
See a full rundown of every product currently active in the Odoo shop, including its SKU, sale price, stock quantity, and website status.

### Map out site structure
Get an overview of all configured websites for your instance, listing their domain and creation date.

## Use Cases

### Following up after a big sale
A sales rep needs to check the status of an order for Acme Corp. They ask their agent: 'What's the status for my client who bought last week?' The agent runs `odoo_list_ecommerce_orders`, pulls the data, and reports back: 'Order S00042 is Confirmed.' The rep can then follow up on that specific detail.

### Checking immediate stock availability
A product manager needs to know if a competitor's item (by name) they are considering listing is in stock. They use `odoo_search_shop_products` and immediately get the current inventory count, price, and category without visiting the admin panel.

### Onboarding new team members
A manager needs to show a new hire who the company sells to. They use `odoo_list_shop_customers` to pull a list of all active buyers, getting back names and emails instantly for account setup.

### Auditing the site structure
A DevOps engineer needs to confirm if the company has multiple storefronts set up. They run `odoo_list_websites` and get a clean list of all domains, verifying that the multi-brand setup is correctly mapped.

## Benefits

- Stop opening multiple tabs. You can check recent order status and amounts using `odoo_list_ecommerce_orders` without navigating away from your current workflow.
- Quickly identify a buyer's contact info. Instead of digging through reports, use `odoo_list_shop_customers` to pull name, email, and phone for immediate follow-up.
- Need product details fast? Use `odoo_search_shop_products` to check stock levels or prices by name—it's faster than running a manual inventory report.
- Map your entire catalog. With `odoo_list_product_categories`, you see the full organizational structure, which is crucial for product development planning.
- Know your storefronts. Use `odoo_list_websites` if you manage multiple brands or domains on one Odoo instance; it lists all configured sites.

## How It Works

The bottom line is: You talk naturally; the server does the heavy lifting by calling specific Odoo functions for you.

1. Start by telling your agent exactly what you need (e.g., 'What were the sales last week?').
2. The server runs the appropriate tool (like `odoo_list_ecommerce_orders`) and sends back a structured data set of records.
3. Your AI client processes that raw data, formats it, and presents the answer directly to you in plain language.

## Frequently Asked Questions

**How do I use odoo_search_shop_products?**
You call `odoo_search_shop_products` and provide the product name. It returns matching products with current prices, stock levels, category IDs, and publish status.

**What information does odoo_list_ecommerce_orders give me?**
`odoo_list_ecommerce_orders` gives you the order number, customer name, total amount, status (like Draft or Confirmed), and the date it was placed.

**Do I need odoo_list_shop_products for inventory?**
Yes. If you want a full list of everything that *can* be sold, use `odoo_list_shop_products`. This lists the entire catalog and its stock qty.

**Can odoo_list_shop_customers find old leads?**
`odoo_list_shop_customers` only pulls records for partners where `customer_rank > 0`, meaning they must be confirmed buyers who have actually purchased something online.

**If I use odoo_list_ecommerce_orders, how can I handle missing or incomplete order records?**
The tool provides standard API error codes and null fields for bad data. You'll receive the raw data structure, allowing your agent to check for specific status gaps (like 'Payment Pending') rather than just relying on a successful call.

**Does odoo_search_shop_products have rate limits if I run many searches?**
Yes, there are standard API rate limits applied by Vinkius. We recommend batching your search requests instead of running single queries in a loop. This maintains consistent performance and avoids hitting the service cap.

**What is the best way to check all available online storefronts using odoo_list_websites?**
This tool lists every configured website name, domain, and creation date in your Odoo instance. It's ideal for confirming setup when you manage multi-brand or global deployments.

**How does odoo_list_product_categories help me map products?**
It returns the complete, hierarchical path of every product category in your shop. This structured output lets your AI client accurately determine where a product belongs before you use tools like odoo_search_shop_products.

**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.