loading…
Search for a command to run...
loading…
An MCP server that exposes workflow actions, wizards, and specialized operations from the QOD PPM Odoo plugin as tools, complementing generic Odoo CRUD servers
An MCP server that exposes workflow actions, wizards, and specialized operations from the QOD PPM Odoo plugin as tools, complementing generic Odoo CRUD servers by handling non-trivial UI button functionality like state transitions, report generation, and risk management.
MCP server for the QOD PPM Odoo plugin.
Exposes the plugin's buttons, wizards, and workflow transitions as MCP tools — the things a generic Odoo CRUD server can't express.
This server is intentionally thin. It does not reimplement Odoo CRUD. Run it alongside a generic Odoo MCP (e.g. ivnvxd/mcp-server-odoo):
| Need | Use |
|---|---|
| Create/read/update/delete portfolios, programs, projects, tasks, risks, ... | Generic Odoo MCP (create_record, search_records, ...) |
| Transition workflow state (submit, approve, achieve, close, ...) | This server |
| Run a wizard (status report, CR reject, budget export, ...) | This server |
| Domain rules (P×I matrix move with validation, ...) | This server |
Put simply: if there's a button in the Odoo UI that does something non-trivial when clicked, it's a tool here. CRUD wraps fields; this wraps buttons.
pip install qod-ppm-odoo-mcp
Or from source:
git clone https://github.com/wethti/qod-ppm-odoo-mcp
cd qod-ppm-odoo-mcp
pip install -e .
Create a service user in Odoo and give it the PPM groups you need
(group_ppm_admin or scoped alternatives). Generate an API key from the
user's preferences page. Then set:
export ODOO_URL="https://your-odoo.example.com"
export ODOO_DB="your_db_name"
export ODOO_USERNAME="[email protected]"
export ODOO_API_KEY="…" # preferred
# or ODOO_PASSWORD="…"
A .env.example is included.
stdio (default) — for Claude Desktop / Claude Code / anything that spawns an MCP server as a subprocess:
qod-ppm-mcp
Streamable HTTP — for remote access (another VPS, an agent host, etc.):
export QOD_PPM_MCP_TRANSPORT=http
export QOD_PPM_MCP_HOST=0.0.0.0
export QOD_PPM_MCP_PORT=8765
qod-ppm-mcp
Put a reverse proxy with TLS + auth in front if exposed to the internet.
Add to ~/.claude.json (Claude Code) or claude_desktop_config.json:
{
"mcpServers": {
"qod-ppm": {
"command": "qod-ppm-mcp",
"env": {
"ODOO_URL": "https://your-odoo.example.com",
"ODOO_DB": "your_db_name",
"ODOO_USERNAME": "[email protected]",
"ODOO_API_KEY": "…"
}
},
"odoo": {
"command": "uvx",
"args": ["mcp-server-odoo"],
"env": {
"ODOO_URL": "https://your-odoo.example.com",
"ODOO_DB": "your_db_name",
"ODOO_USERNAME": "[email protected]",
"ODOO_API_KEY": "…"
}
}
}
}
Both servers point to the same Odoo. Claude sees tools namespaced as
mcp__qod-ppm__* (workflow actions) and mcp__odoo__* (generic CRUD).
Call ppm_list_action_tools to get the current list at runtime. Groups:
ppm.milestone)ppm_milestone_start / achieve / miss / cancel / reopenppm.status.report + wizard)ppm_status_report_generate(project_id, period?, commentary?)
— runs the wizard, auto-fills RAG/budget/risks/milestones, creates reportppm_status_report_publish(report_id)ppm_status_report_reset_draft(report_id)ppm_status_report_print_url(report_id) — returns the PDF actionppm.change.request + reject wizard)ppm_change_request_submit / start_review / approve / reset_draftppm_change_request_reject(cr_id, reason) — runs the reject wizardppm.risk)ppm_risk_start_analysis / start_mitigation / start_monitoring /
mark_occurred / close / reopenppm_risk_move_in_matrix(risk_id, probability, impact) — probability and
impact are integers 1–5; server recomputes score and levelppm_issue_assign / start / resolve / escalateppm.role.assignment)ppm_role_activate / approve_and_activate / revoke / reset_draft
(each syncs the Odoo security group)ppm_export_budget(project_id?, portfolio_id?, date_from?, date_to?, category_id?, include_closed?)ppm_export_risks(project_id?, portfolio_id?, risk_level?, include_closed?)ppm_export_resources(project_id?, employee_id?, department_id?, date_from?, date_to?, include_cancelled?)All three return an ir.actions.act_url pointing at /web/content/<id>?download=true.
ppm_create_project_from_template(partner_id, template_id, project_name)ppm_ping() — auth + basic countsppm_list_action_tools() — self-describing tool listqod_ppm_core, qod_ppm_budget, qod_ppm_change_request,
qod_ppm_client_card_projects, qod_ppm_dashboard, qod_ppm_resource,
qod_ppm_risk, qod_ppm_roles, qod_ppm_roles_crm, qod_ppm_roles_mrp,
qod_ppm_scoring, qod_ppm_status, qod_ppm_task_statusLGPL-3.0-or-later — matching the QOD PPM modules.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"qod-ppm-odoo-mcp": {
"command": "npx",
"args": []
}
}
}