8.9 KiB
odoo-mpm-plugin
MPM Odoo ERP plugin for Claude Cowork — connects to mpmedia.odoo.com via XML-RPC with proxy-aware transport.
Version: 0.3.0 Author: Message Point Media Repo: https://git.mpm.to/mpm/odoo-mpm-plugin CoWork Project: CW-003 — Odoo V19 MCP Bridge
Overview
This plugin bridges Claude Cowork to MPM's Odoo ERP instance at mpmedia.odoo.com. It runs a local MCP server (odoo-mpm) via uv that exposes read/write access across 12 modules: Products, Knowledge (with Templates), Contacts, Sales, CRM, Projects, Helpdesk, Purchase, Inventory, Employees, eLearning, and Utilities.
Credentials are personal — each user authenticates with their own Odoo API key, stored securely in the OS keystore (macOS Keychain / Windows Credential Manager / Linux Secret Service). Keys are never written to disk.
Skills
| Skill | What It Does |
|---|---|
odoo |
Full read/write access to MPM's Odoo instance. 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", "lesson", "slide", "quiz", "enroll", "enrollment", "publish course", "create course", "add lesson" |
Tools Reference
| Module | Tools |
|---|---|
| Credentials | setup_odoo_credentials, clear_odoo_credentials |
| Products | search_products, get_product, get_product_stock |
| Knowledge | search_knowledge_articles, get_knowledge_article, create_knowledge_article, update_knowledge_article |
| Knowledge Templates | search_knowledge_templates, get_knowledge_template, list_knowledge_template_categories |
| Contacts | search_contacts, get_contact, create_contact |
| Sales | search_sales_orders, get_sales_order, create_sales_order, cancel_sale_orders, cancel_and_archive_quotations |
| CRM | search_crm_leads, get_crm_lead, create_crm_lead, update_crm_lead, list_crm_stages, mark_crm_lead_lost, list_crm_lost_reasons |
| Project | list_projects, get_project, search_tasks, get_task, create_task, update_task, list_task_stages |
| Helpdesk | search_helpdesk_tickets, get_helpdesk_ticket, create_helpdesk_ticket, update_helpdesk_ticket, list_helpdesk_teams |
| Purchase | search_purchase_orders, get_purchase_order |
| Inventory | search_inventory, get_stock_moves, list_internal_locations |
| Employees | search_employees, get_employee, list_departments |
| eLearning — Courses | search_courses, get_course, create_course, update_course, publish_course |
| eLearning — Slides | list_course_slides, get_slide, create_slide, update_slide, publish_slide, reorder_slides |
| eLearning — Quiz | get_quiz_questions, add_quiz_question, generate_quiz |
| eLearning — Enrollment | get_course_enrollment, enroll_in_course, bulk_enroll, send_course_invitation |
| eLearning — Media | set_course_cover, set_slide_cover, link_drive_document, add_course_resource |
| Utilities | odoo_search, odoo_get_record, odoo_search_read, get_record_count, bulk_update_records, archive_records, get_stage_ids, call_odoo_method |
Knowledge Article Icon Support
create_knowledge_article, update_knowledge_article, and get_knowledge_article all support an icon parameter — a Unicode emoji (e.g. "⚙️", "🔌", "🖥️") that sets the article's icon in the KB tree. Browse emojis at: https://emojipedia.org
eLearning Module (v0.3.0)
22 tools across 5 groups for building and managing internal, reseller, and end-client courses.
Slide types: pdf (Drive link), youtube_video, vimeo_video, infographic, webpage (native HTML article)
Google Drive policy: All image and document operations use the Google Workspace MCP connector when available. The skill never asks the user to construct or copy Drive URLs unless the connector is absent.
Audience tiers via course settings:
- Internal employees:
visibility=members,enroll=invite,enroll_group_names=['Internal Users'] - Resellers:
visibility=connected,enroll=public - End-clients:
visibility=public,enroll=public
Onboarding hook: enroll_in_course and bulk_enroll are designed to be called by the project management plugin to automatically enroll new customers in courses on contract/onboarding events.
Quiz generation: Read course content → Claude generates questions → call generate_quiz to write all at once.
Sales Cancellation Safety Guard
cancel_sale_orders and cancel_and_archive_quotations only operate on orders in Quotation (draft) or Quotation Sent (sent) state. Both tools pre-validate all IDs and raise a named error listing any orders in other states before touching anything. Confirmed Sale Orders cannot be cancelled via Claude.
Utility Tools (v0.2.0)
odoo_search_read— preferred for efficient queries: full domain filter + return only specified fields. Avoids token bloat vs.odoo_get_record.get_record_count— count matching records without fetching data. Use before bulk operations.bulk_update_records— set one or more fields on a list of IDs in a single API call. Works for stages, custom Studio fields (x_studio_*), status flags.archive_records— soft-delete viaactive=False. Forsale.order, cancel first.get_stage_ids— resolve stage names to IDs with case-insensitive exact matching acrosscrm.stage,project.task.type,helpdesk.stage.call_odoo_method— escape hatch for any model method not covered by other tools.
Setup Instructions
Full install guide: MPM Odoo Plugin — Install Guide
Quick summary:
- Install the plugin — Claude Desktop: Settings → Plugins → Add Plugin → paste
https://git.mpm.to/mpm/odoo-mpm-plugin. Or double-click the.pluginfile from the CW-003 Drive folder. - Verify
uvis installed — Runwhich uvin terminal. If missing — Mac/Linux:curl -LsSf https://astral.sh/uv/install.sh | sh. Windows:powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex". - Restart Claude Desktop — Quit and relaunch.
uvauto-installs Python dependencies (keyring) on first start. - Generate a personal Odoo API key — Odoo → Avatar → My Profile → Account Security → API Keys → New API Key → set expiration to No Limit. Copy immediately — not shown again.
- Connect — In CoWork, type "Set up my Odoo credentials". Claude will prompt for your Odoo login email and API key.
- Verify — Ask Claude: "List my Odoo projects". A project list confirms full connectivity.
Setup Checklist
- Plugin installed (URL or
.pluginfile) uvinstalled and in terminal PATH- Claude restarted after install
- Odoo API key generated (No Limit expiration)
setup_odoo_credentialscompleted- "List my Odoo projects" returns data
Connection Details
| Field | Value |
|---|---|
| Instance | mpmedia.odoo.com |
| Database | mpmedia-odoo-sh-main-13285275 |
| Transport | stdio via uv |
| Auth | Personal API key in OS keystore (odoo-mpm service) |
| MCP server name | odoo-mpm |
Workflow Notes
- Before updating a task or ticket stage, call
list_task_stagesorget_stage_idsto confirm valid stage IDs. - Use
odoo_search_readfor any query where you only need specific fields — more efficient thanodoo_get_record. - Knowledge article bodies are HTML — use basic HTML formatting when creating or updating.
- Before calling
mark_crm_lead_lost, calllist_crm_lost_reasonsto show the user available reasons. - Before calling
cancel_sale_orders, verify orders are indraftorsentstate — the tool will reject anything else with a clear error.
Requirements
- uv — Python package and environment manager
mcp[cli]— installed automatically by uv on first runkeyring— installed automatically by uv on first run
Troubleshooting
| Symptom | Fix |
|---|---|
| MCP server won't start | Confirm uv is installed: which uv |
| "Credentials not configured" | Run setup_odoo_credentials |
| Authentication failed | Rotate Odoo API key; run clear_odoo_credentials then setup_odoo_credentials |
| Keychain prompt on first use | Normal — allow it |
cancel_sale_orders refused |
Check order state — only draft/sent allowed |