qod-ppm-odoo-mcp
Provides tools for interacting with QOD PPM Odoo plugin, exposing workflow transitions, wizards, and non-trivial UI actions as MCP tools for portfolio, program, and project management operations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@qod-ppm-odoo-mcpsubmit change request CR-2024-001 for approval"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
qod-ppm-odoo-mcp
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.
Design
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 ( |
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.
Install
pip install qod-ppm-odoo-mcpOr from source:
git clone https://github.com/wethti/qod-ppm-odoo-mcp
cd qod-ppm-odoo-mcp
pip install -e .Configure
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="ppm-service@example.com"
export ODOO_API_KEY="…" # preferred
# or ODOO_PASSWORD="…"A .env.example is included.
Run
stdio (default) — for Claude Desktop / Claude Code / anything that spawns an MCP server as a subprocess:
qod-ppm-mcpStreamable 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-mcpPut a reverse proxy with TLS + auth in front if exposed to the internet.
Claude Code / Claude Desktop config
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": "ppm-service@example.com",
"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": "ppm-service@example.com",
"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).
Tool reference
Call ppm_list_action_tools to get the current list at runtime. Groups:
Milestones (ppm.milestone)
ppm_milestone_start/achieve/miss/cancel/reopen
Status Reports (ppm.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 action
Change Requests (ppm.change.request + reject wizard)
ppm_change_request_submit/start_review/approve/reset_draftppm_change_request_reject(cr_id, reason)— runs the reject wizard
Risks (ppm.risk)
Workflow:
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 level
Issues (risks flagged as issue_type)
ppm_issue_assign/start/resolve/escalate
Role Assignments (ppm.role.assignment)
ppm_role_activate/approve_and_activate/revoke/reset_draft(each syncs the Odoo security group)
Exports (wizards → XLSX)
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.
Client Card Projects
ppm_create_project_from_template(partner_id, template_id, project_name)
Introspection
ppm_ping()— auth + basic countsppm_list_action_tools()— self-describing tool list
Compatibility
Odoo 18.0 Community / Enterprise
QOD PPM modules:
qod_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_status
License
LGPL-3.0-or-later — matching the QOD PPM modules.
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/wethti/qod-ppm-odoo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server