qod-ppm-odoo-mcp

qod-ppm-odoo-mcp

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.

Category
Visit Server

README

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

Install

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 .

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

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 report
  • ppm_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_draft
  • ppm_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 / reopen
  • ppm_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 counts
  • ppm_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.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured