# Odoo HR MCP

> Odoo HR MCP Server connects your agent directly to Odoo's core Human Resources system. Use it to search employees by name, manage time off requests, track daily attendance records, or review pending expense reports—all through natural conversation. It gives you a single point of access for employee directory lookups and operational reporting.

## Overview
- **Category:** human-resources
- **Price:** Free
- **Tags:** employee-management, attendance-tracking, leave-management, expense-reporting, workforce-analytics, onboarding

## Description

Yo, forget flipping through ten different tabs or running some garbage report manually. The **Odoo HR MCP Server** plugs your agent straight into Odoo’s core Human Resources system. You get single-point access to everything from checking who's clocked in today to submitting an expense claim—all just by talking to it.

If you need to find a person, the tools handle it fast. You can use `odoo_search_employees` to nail down any employee by name; that spits out their job title, department, email address, and even the manager's contact info. For a full rundown of everyone in the company, run `odoo_list_employees`, which gives you a complete directory listing with every person’s job role, department, and contact details.

Handling time off is simple too. First, check what leave categories are even available by running `odoo_list_leave_types`. Then, if you wanna see the full picture of team availability or review past requests, use `odoo_list_leaves`—it shows department, type, number of days, and whether it’s approved. You submit a formal time off request for an employee using `odoo_create_leave`, which requires the employee ID, the specific leave type, and the date range you need.

For tracking daily operations, check out attendance records with `odoo_list_attendance`; this gives you names alongside their clock-in/clock-out times and total hours worked. You can also map out who runs the company by using `odoo_list_departments`, which retrieves the full department hierarchy—it includes managers, parent departments, and how many employees are in each unit. When it comes to hiring, you check open positions with `odoo_list_jobs`. This tool lists every job opening across all departments and shows you the current count of vacancies.

Managing finances is straightforward. You can pull a list of employee expense reports using `odoo_list_expenses`, which details amounts, submission dates, and whether the report is still in draft or already approved. Getting an overview of staff is easy too: run `odoo_list_departments` to map the full organizational structure for managers and parent departments while also getting a count of employees within each unit.

## Tools

### odoo_create_leave
Submits a time off request for an employee, requiring the employee ID, leave type, and specific date range.

### odoo_list_attendance
Lists attendance records, showing name, clock-in/out times, and total hours worked by employees.

### odoo_list_departments
Retrieves the organization's department structure, including managers, parent departments, and employee count.

### odoo_list_employees
Provides a full directory listing of all employees, detailing their job titles, departments, and contact info.

### odoo_list_expenses
Retrieves employee expense reports with amounts, submission dates, and current approval status in Odoo.

### odoo_list_jobs
Lists open job positions across departments and shows the current count of vacancies for hiring efforts.

### odoo_list_leave_types
Returns a list of all configured leave types (e.g., Sick Leave, PTO) so you know what categories exist before requesting time off.

### odoo_list_leaves
Lists all employee leave requests with details like department, type, number of days, and current approval status.

### odoo_search_employees
Finds a specific employee by name, returning their job title, department, email address, and manager's contact info.

## Prompt Examples

**Prompt:** 
```
Search for leads from the website
```

**Response:** 
```
👥 **CRM Leads — Website**
| Name | Email | Stage | Revenue |
|---|---|---|---|
| Acme Corp | info@acme.com | Qualification | $15,000 |
| Beta Inc | hello@beta.io | Proposition | $8,500 |
```

**Prompt:** 
```
Show recent sales orders
```

**Response:** 
```
📋 **Sales Orders**
| SO# | Customer | Amount | Status |
|---|---|---|---|
| S00042 | Acme Corp | $12,500 | Confirmed |
| S00041 | Beta Inc | $3,200 | Draft |
```

## Capabilities

### Requesting Time Off
Submit a formal leave request for an employee, triggering the standard Odoo approval workflow.

### Checking Attendance History
Get a list of employees' check-in/check-out times and total hours worked from Odoo's attendance logs.

### Mapping Org Structure
Retrieve the full department hierarchy, including managers and current employee counts for each unit.

### Searching Employee Profiles
Find a specific person in the company using their name to pull up their role, manager, email, and hire date.

### Reviewing Financial Claims
List employee expense reports, showing amounts, submission dates, and current approval status (draft/approved).

### Managing Job Openings
Check the recruiting pipeline to see which jobs are open, what departments they belong to, and how many positions need filling.

## Use Cases

### The Manager Checking Team Coverage
A manager needs to know if three people can take next Friday off. Instead of opening three different calendars, they ask their agent. The agent runs `odoo_list_leaves` and cross-references that data with the current team roster from `odoo_list_employees`, giving a clear availability report.

### The HR Generalist Auditing Spending
HR needs to check all expenses submitted by employees in Q3. They prompt their agent, which runs `odoo_list_expenses`. This instantly pulls up the amounts and approval status for every report, letting them identify bottlenecks before talking to anyone.

### The Onboarding Specialist Finding a Team Lead
A new hire needs to know who their direct manager is. The specialist asks the agent by name (`odoo_search_employees`), and the system pulls back the exact manager's name, department, and contact info, skipping manual lookups.

### The Department Head Planning Reorg
A department head wants to know if their division is understaffed. They ask the agent, which runs `odoo_list_departments`. The system returns not only the name and parent but also the exact headcount for accurate planning.

## Benefits

- Never guess who's available again. Instead of checking a calendar sheet, ask your agent to run `odoo_list_leaves` for team availability or use `odoo_list_attendance` to see real-time clock hours.
- Stop hunting down contact info. With `odoo_search_employees`, you get an employee's department, job title, and direct manager instantly by name, without logging into a directory portal.
- Streamline the expense process. Use `odoo_list_expenses` to pull up all pending reports for review, seeing who submitted what amount and whether it’s waiting on approval.
- Understand your growth needs. If you need to plan hiring, check `odoo_list_jobs` to see current vacancies, or use `odoo_list_departments` to understand the structure that needs filling.
- Make time-off requests instantly. Instead of filling out a form and emailing it, just tell your agent to run `odoo_create_leave` with the dates and leave type.

## How It Works

The bottom line is: you talk to your agent, it talks to Odoo, and you get the structured data back without leaving your chat window.

1. You prompt your agent with a request (e.g., 'Who needs their PTO approved?').
2. The agent determines the required data—say, checking all submitted leave records—and calls `odoo_list_leaves`.
3. Odoo returns the filtered list of leaves and statuses directly to your agent for final interpretation.

## Frequently Asked Questions

**How do I check PTO status with odoo_list_leaves?**
You ask your agent to run `odoo_list_leaves`. It returns a list of every leave request, showing the employee's name, department, type (like Sick Leave), and the current approval state.

**What is the best tool for finding an employee by name?**
`odoo_search_employees` is the dedicated tool. It searches the directory specifically to pull back contact details, manager, department, job title, and hire date for that person.

**Can odoo_list_attendance tell me who is currently working?**
Yes. The `odoo_list_attendance` tool returns the clock-in time and includes a clock-out timestamp if the employee has already logged off, giving you real hours worked.

**Do I need to run odoo_list_leave_types before creating leave?**
It's smart practice. Running `odoo_list_leave_types` first shows you all the available categories (Paid Time Off, etc.), making sure you use the correct type ID when running `odoo_create_leave`.

**If I run odoo_list_employees, what fields does it provide about the manager or department?**
It provides name, department, job title, email, and direct manager for every employee. This structure lets your agent map out reporting lines immediately without extra steps.

**How can I narrow down results when using odoo_list_expenses?**
The tool returns records with an approval state and date. You just need to instruct your agent to filter the output by a specific status, like 'draft' or 'approved', or define a clear date range.

**What happens if I try to use odoo_create_leave without knowing the correct leave type ID?**
The request fails because it requires the `leave type ID` and employee ID. You must run odoo_list_leave_types first to get the necessary category IDs for a successful submission.

**Are there any performance considerations when querying job vacancies using odoo_list_jobs?**
The tool reports department, title, and open recruitment counts. For very large organizations, keep your requests focused on specific departments to prevent rate limits or timeouts.

**Which Odoo versions are supported?**
This server uses the JSON-RPC protocol, which is compatible with Odoo 14, 15, 16, 17, and 18. Both Odoo Community and Enterprise editions are supported.

**Does it work with Odoo.com (SaaS)?**
Yes! Works with both Odoo.com hosted instances and self-hosted Odoo servers. Just provide your instance URL and API key.

**How do I generate an API Key?**
Go to Settings → Users → select your user → API Keys tab → New API Key. Give it a descriptive name and copy the generated key.