157 lines
11 KiB
Markdown
157 lines
11 KiB
Markdown
---
|
|
name: odoo
|
|
description: >
|
|
Access MPM's Odoo ERP system (mpmedia.odoo.com). Use for any question or task
|
|
involving: products, product catalog, stock levels, inventory; knowledge base
|
|
articles; contacts, customers, vendors; sales orders, quotes; CRM leads and
|
|
opportunities; projects and tasks; helpdesk tickets; purchase orders;
|
|
employees and departments; eLearning courses, slides, quizzes, and enrollment;
|
|
bulk record updates; archiving records; counting records; cancelling quotations.
|
|
Triggers on: "in Odoo", "our products", "the knowledge base", "find a contact",
|
|
"sales order", "opportunity", "project tasks", "helpdesk ticket", "purchase
|
|
order", "stock", "inventory", "employee", "what stage is", "create a task",
|
|
"update the ticket", "cancel quotation", "cancel quote", "archive", "mark lost",
|
|
"bulk update", "how many records", "count of", "stage id for", "resolve stage",
|
|
"search with filters", "filter by", "lost reasons", "course", "training",
|
|
"elearning", "e-learning", "lesson", "slide", "quiz", "enroll", "enrollment",
|
|
"onboard to course", "publish course", "add lesson", "create course".
|
|
---
|
|
|
|
# Odoo MPM Skill
|
|
|
|
You have direct access to MPM's Odoo instance at mpmedia.odoo.com via the `odoo-mpm` MCP server.
|
|
|
|
## First-Time Setup (required once per Mac)
|
|
|
|
Each team member connects using their own personal Odoo credentials. Credentials are stored securely in the macOS Keychain — never in a file on disk.
|
|
|
|
**Step 1 — Generate your Odoo API key**
|
|
|
|
1. Open [mpmedia.odoo.com](https://mpmedia.odoo.com) and log in with your account
|
|
2. Click your avatar (top-right corner) → **My Profile**
|
|
3. Go to the **Account Security** tab
|
|
4. Under **API Keys**, click **New API Key**
|
|
5. Enter a label such as `Claude Cowork`
|
|
6. Set the **Expiration** to **No Limit** (indefinite — the key should not expire)
|
|
7. Click **Generate Key** and copy it immediately — Odoo only displays it once
|
|
|
|
**Step 2 — Store your credentials**
|
|
|
|
Run the `setup_odoo_credentials` tool:
|
|
- `username`: your Odoo login email (e.g. `you@mpmedia.tv`)
|
|
- `api_key`: the key you just copied
|
|
|
|
The tool will save your credentials to the macOS Keychain and immediately verify the connection. You will not need to do this again unless you rotate your key or get a new Mac.
|
|
|
|
**Troubleshooting auth issues:** run `clear_odoo_credentials` then `setup_odoo_credentials` again with a freshly generated key.
|
|
|
|
---
|
|
|
|
## Connection Details
|
|
- Instance: mpmedia.odoo.com
|
|
- Database: mpmedia-odoo-sh-main-13285275
|
|
- User context: your personal Odoo account
|
|
|
|
---
|
|
|
|
## Available Modules & Tools
|
|
|
|
### Credentials (`setup_odoo_credentials`, `clear_odoo_credentials`)
|
|
One-time setup to store your personal API key in the macOS Keychain. Use `clear_odoo_credentials` when rotating your key or offboarding.
|
|
|
|
### Products (`search_products`, `get_product`, `get_product_stock`)
|
|
Search the product catalog, retrieve product details including pricing and descriptions, and check stock levels across warehouse locations.
|
|
|
|
### Knowledge (`search_knowledge_articles`, `get_knowledge_article`, `create_knowledge_article`, `update_knowledge_article`)
|
|
Read, search, create, and update internal Knowledge base articles. Body content is HTML. All three tools support an `icon` field — pass a Unicode emoji (e.g. `⚙️`, `🔌`, `🖥️`) to set the article's icon in the KB tree. Browse icons at https://emojipedia.org.
|
|
|
|
### Knowledge Templates (`search_knowledge_templates`, `get_knowledge_template`, `list_knowledge_template_categories`)
|
|
Browse built-in Odoo Knowledge article templates by name or category. Use `get_knowledge_template` to retrieve the full template body for use as a starting point when creating articles.
|
|
|
|
### Contacts (`search_contacts`, `get_contact`, `create_contact`)
|
|
Search customers, vendors, and individuals. Use `is_company=true` to filter to companies.
|
|
|
|
### Sales (`search_sales_orders`, `get_sales_order`, `create_sales_order`, `cancel_sale_orders`, `cancel_and_archive_quotations`)
|
|
Look up quotes and sales orders by name (e.g. S00901) or customer. `get_sales_order` includes line items.
|
|
|
|
**Important:** `cancel_sale_orders` and `cancel_and_archive_quotations` ONLY operate on orders in **Quotation (draft)** or **Quotation Sent (sent)** state. Both tools will refuse and raise an error if any provided IDs are in any other state (confirmed Sale Order, Locked, Cancelled, etc.). This is an intentional safety constraint — confirmed orders cannot be cancelled via Claude.
|
|
|
|
### CRM (`search_crm_leads`, `get_crm_lead`, `create_crm_lead`, `update_crm_lead`, `list_crm_stages`, `mark_crm_lead_lost`, `list_crm_lost_reasons`)
|
|
Manage opportunities in the sales pipeline. Use `list_crm_stages` to get valid stage IDs before updating. Use `list_crm_lost_reasons` then `mark_crm_lead_lost` to record a loss with a reason.
|
|
|
|
### Project (`list_projects`, `get_project`, `search_tasks`, `get_task`, `create_task`, `update_task`, `list_task_stages`)
|
|
Browse projects, search and update tasks. Use `list_task_stages` with a project_id to get valid stage IDs.
|
|
|
|
### Helpdesk (`search_helpdesk_tickets`, `get_helpdesk_ticket`, `create_helpdesk_ticket`, `update_helpdesk_ticket`, `list_helpdesk_teams`)
|
|
Manage support tickets across helpdesk teams.
|
|
|
|
### Purchase (`search_purchase_orders`, `get_purchase_order`)
|
|
Look up purchase orders by name (e.g. P00195) or vendor. `get_purchase_order` includes line items.
|
|
|
|
### Inventory (`search_inventory`, `get_stock_moves`, `list_internal_locations`)
|
|
Check current stock levels and recent stock movements by product.
|
|
|
|
### Employees (`search_employees`, `get_employee`, `list_departments`)
|
|
Look up employee information and department structure.
|
|
|
|
### Utilities — Generic (`odoo_search`, `odoo_get_record`, `odoo_search_read`, `get_record_count`, `bulk_update_records`, `archive_records`, `get_stage_ids`, `call_odoo_method`)
|
|
Advanced tools for any Odoo model:
|
|
- `odoo_search_read` — preferred for efficient queries: search with domain + return only specified fields. Use this instead of `odoo_search` + `odoo_get_record` to avoid token bloat.
|
|
- `get_record_count` — count records matching a domain without fetching data. Use before bulk operations.
|
|
- `bulk_update_records` — set one or more field values on a list of record IDs in a single API call. Works for stage changes, custom Studio fields (`x_studio_*`), status flags, etc.
|
|
- `archive_records` — soft-delete records by setting `active=False`. For `sale.order`, cancel first with `cancel_sale_orders`.
|
|
- `get_stage_ids` — resolve stage names to IDs with case-insensitive exact matching. Supports `crm.stage`, `project.task.type`, and `helpdesk.stage`.
|
|
- `call_odoo_method` — escape hatch for any model method not covered by other tools (workflow transitions, report actions, custom methods). Use sparingly.
|
|
- `odoo_search` / `odoo_get_record` — legacy generic lookup tools; prefer `odoo_search_read` for new usage.
|
|
|
|
### eLearning — Courses (`search_courses`, `get_course`, `create_course`, `update_course`, `publish_course`)
|
|
Manage eLearning courses (slide.channel). Supports all three audience tiers: internal employees, resellers, and end-clients.
|
|
|
|
**Course settings:**
|
|
- `channel_type`: `training` or `documentation`
|
|
- `visibility`: `public` (Everyone), `connected` (Signed In), `members` (Course Attendees), `website` (Anyone with link)
|
|
- `enroll`: `public` (Open) or `invite` (On Invitation)
|
|
- `enroll_group_names`: auto-enroll Odoo groups by name — use `['Internal Users']` to restrict a course to employees
|
|
|
|
### eLearning — Slides & Content (`list_course_slides`, `get_slide`, `create_slide`, `update_slide`, `publish_slide`, `reorder_slides`)
|
|
Manage individual content items within a course.
|
|
|
|
**Slide types:**
|
|
- `pdf` — PDF document. `url` = Google Drive share link (use Workspace MCP to get the link).
|
|
- `youtube_video` — YouTube video. `url` = YouTube watch URL.
|
|
- `vimeo_video` — Vimeo video. `url` = Vimeo video URL.
|
|
- `infographic` — Image or infographic.
|
|
- `webpage` — Native article. `html_content` = formatted HTML body. Claude can generate this directly.
|
|
|
|
**Google Drive rule:** For any operation that needs a Drive file link or download URL — cover images, PDF slides, resource links — use the Google Workspace MCP connector when it is available. Only ask the user to provide a URL if the connector is not connected in the current session.
|
|
|
|
### eLearning — Quiz (`get_quiz_questions`, `add_quiz_question`, `generate_quiz`)
|
|
Quiz questions (`slide.question` / `slide.answer`) can be attached to any slide type.
|
|
- `generate_quiz` is the AI-powered tool: read lesson content first, generate question/answer sets, then call this tool to batch-write them all. It clears existing questions before writing.
|
|
- `add_quiz_question` adds a single question — use for incremental additions.
|
|
|
|
### eLearning — Enrollment (`get_course_enrollment`, `enroll_in_course`, `bulk_enroll`, `send_course_invitation`)
|
|
- `enroll_in_course` is the standard onboarding hook — accepts partner IDs or email addresses, resolves contacts automatically, and optionally sends invitation emails.
|
|
- `bulk_enroll` handles CSV-style imports and is designed to be called by the project management plugin for customer onboarding.
|
|
- `get_course_enrollment` returns enrolled users with completion % and last activity.
|
|
|
|
### eLearning — Media & Resources (`set_course_cover`, `set_slide_cover`, `link_drive_document`, `add_course_resource`)
|
|
- `set_course_cover` / `set_slide_cover` — fetch image from URL, base64-encode, write to Odoo. Use Workspace MCP for Drive images.
|
|
- `link_drive_document` — set the URL on any slide (PDF, video, infographic).
|
|
- `add_course_resource` — add a downloadable link to the course landing page. Falls back to creating a slide if the resource model is unavailable.
|
|
|
|
---
|
|
|
|
## Workflow Guidelines
|
|
|
|
- When looking up items by number (e.g. "S00901", "P00195"), use `search_sales_orders` or `search_purchase_orders` with that as the query.
|
|
- Before updating a task or ticket stage, call `list_task_stages` or `get_stage_ids('helpdesk.stage', ['Stage Name'])` to confirm valid stage IDs.
|
|
- Use `get_stage_ids` instead of `odoo_search` for stage lookups — it handles case-insensitive matching correctly.
|
|
- Knowledge article bodies are stored as HTML — when creating or updating articles, use basic HTML formatting.
|
|
- IDs returned from search tools can be passed directly to `get_*` tools for full details.
|
|
- When the user asks about "our products" without specifying, use `search_products` with no query and limit=20 to show a broad overview.
|
|
- Use `odoo_search_read` for any query where you only need specific fields — it is more efficient than `odoo_get_record` and avoids large responses.
|
|
- Before calling `cancel_sale_orders` or `cancel_and_archive_quotations`, use `search_sales_orders` to verify the orders are in `draft` or `sent` state. Both tools will refuse if any order is in another state.
|
|
- Before calling `mark_crm_lead_lost`, call `list_crm_lost_reasons` to show the user available reasons so they can choose one by name.
|
|
- For eLearning: always use the Google Workspace MCP connector for Drive file links and image downloads when it is available. Only surface the gap to the user if the connector is absent.
|