Files
odoo-mpm-plugin/skills/odoo/SKILL.md
T

12 KiB

name, description
name description
odoo Access MPM's Odoo ERP system (mpmedia.odoo.com). Modules: Products, Knowledge, Contacts, Sales, CRM, Project (CRUD, milestones, subtasks, chatter, followers, stages), Helpdesk, Purchase, Inventory, Employees, eLearning (courses, slides, quiz, enrollment), Utilities. Triggers on: "in Odoo", "our products", "the knowledge base", "find a contact", "sales order", "opportunity", "project tasks", "helpdesk ticket", "purchase order", "stock", "inventory", "employee", "create a task", "update the ticket", "cancel quotation", "archive", "mark lost", "bulk update", "how many records", "stage id for", "lost reasons", "course", "training", "elearning", "lesson", "slide", "quiz", "enroll", "create project", "archive project", "milestone", "subtask", "add follower", "post a note", "task chatter", "create stage", "archive task".

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 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 — Core (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.

Project — CRUD (create_project, update_project, archive_project)

Create new projects, update project metadata (name, description, owner, dates, visibility), and archive/restore projects. privacy_visibility: employees (all staff), portal (employees + invited portal users), followers (invited internal only).

Project — Milestones (list_milestones, create_milestone, update_milestone)

Manage project.milestone records. list_milestones filters to open milestones by default — pass include_reached=True for all. update_milestone with is_reached=True marks a milestone complete.

Project — Task Chatter (post_task_message, get_task_messages)

Post messages or internal notes to a task's chatter thread, and retrieve the message history. post_task_message message_type: comment (all followers) or internal (internal note only).

Project — Subtasks (get_task_subtasks, create_subtask)

Get all direct child tasks of a task, or create a new subtask linked to a parent. create_subtask inherits the parent's project if project_id is omitted.

Project — Task Lifecycle (archive_task)

Soft-delete a task by setting active=False. Pass archive=False to restore it.

Project — Followers (add_task_follower, remove_task_follower)

Subscribe or unsubscribe users from task notifications. Accepts partner_ids (res.partner IDs) or user_ids (res.users IDs — resolved to partner IDs automatically).

Project — Stage Management (create_task_stage, update_task_stage)

Create new task stages (kanban columns) linked to one or more projects, or update existing stages. create_task_stage requires project_ids list. update_task_stage accepts add_project_ids / remove_project_ids for incremental association changes.

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