Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ODOO_DB | Yes | Odoo database name | |
| ODOO_URL | Yes | URL of your Odoo instance (without trailing slash) | |
| LOG_LEVEL | No | Logging level (optional) | INFO |
| REDIS_URL | No | Redis connection URL (optional) | redis://localhost:6379/0 |
| LOG_FORMAT | No | Format for logs, either 'json' or 'text' (optional) | json |
| ODOO_API_KEY | Yes | Your Odoo API key | |
| ODOO_USERNAME | Yes | Your Odoo username (email address) | |
| REDIS_ENABLED | No | Whether to enable Redis caching (optional) | true |
| REDIS_DEFAULT_TTL | No | Default TTL for cached items in seconds (optional) | 300 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_projects | List available projects in Odoo.
Args:
limit: Maximum number of projects to return (default: 50)
offset: Offset for pagination (default: 0)
Returns:
List of projects with their ID and name
|
| list_tasks | List available tasks in Odoo.
Args:
project_id: Filter by project ID (optional)
limit: Maximum number of tasks to return (default: 50)
offset: Offset for pagination (default: 0)
Returns:
List of tasks with their ID, name and project
|
| list_timesheets | List existing timesheet entries.
Args:
date_from: Start date (format YYYY-MM-DD, optional)
date_to: End date (format YYYY-MM-DD, optional)
project_id: Filter by project ID (optional)
limit: Maximum number of entries (default: 100)
offset: Offset for pagination (default: 0)
all_users: If False, filter on current user (default: False)
Returns:
List of timesheet entries
|
| create_timesheet | Create a new timesheet entry.
Args:
project_id: Project ID
hours: Number of hours worked
description: Description of work done
task_id: Task ID (optional)
date_entry: Entry date in YYYY-MM-DD format (default: today)
Returns:
Confirmation with created entry ID
|
| update_timesheet | Update an existing timesheet entry.
Args:
timesheet_id: ID of entry to update
hours: New number of hours (optional)
description: New description (optional)
date_entry: New date in YYYY-MM-DD format (optional)
Returns:
Update confirmation
|
| delete_timesheet | Delete a timesheet entry.
Args:
timesheet_id: ID of entry to delete
Returns:
Deletion confirmation
|
| get_timesheet_summary_by_employee | Get a summary of hours logged by employee for a given period.
Args:
date_from: Start date (format YYYY-MM-DD)
date_to: End date (format YYYY-MM-DD)
expected_hours_per_day: Expected hours per working day (default: 8.0)
Returns:
Summary of hours by employee with comparison to expected hours
|
| list_expense_categories | List available expense categories (service type products).
Args:
limit: Maximum number of categories to return (default: 100)
offset: Offset for pagination (default: 0)
Returns:
List of categories with their ID and name
|
| list_expenses | List existing expenses.
Args:
date_from: Start date (format YYYY-MM-DD, optional)
date_to: End date (format YYYY-MM-DD, optional)
state: Filter by state: draft, reported, approved, done, refused (optional)
limit: Maximum number of entries (default: 50)
offset: Offset for pagination (default: 0)
Returns:
List of expenses
|
| create_expense | Create a new expense report.
Args:
name: Expense name/title
product_id: Expense category ID (see list_expense_categories)
total_amount: Total expense amount
description: Detailed description (optional)
date_expense: Expense date in YYYY-MM-DD format (default: today)
quantity: Quantity (default: 1.0)
Returns:
Confirmation with created expense ID
|
| update_expense | Update an existing expense (only if in draft state).
Args:
expense_id: ID of expense to update
name: New name (optional)
total_amount: New amount (optional)
description: New description (optional)
date_expense: New date in YYYY-MM-DD format (optional)
payment_mode: Payment mode - "company" (paid by company) or "employee" (paid by employee) (optional)
currency: ISO currency code (e.g., "EUR", "USD") (optional)
analytic_account_id: Analytic account ID for cost distribution (optional)
Returns:
Update confirmation
|
| delete_expense | Delete an expense (only if in draft state).
Args:
expense_id: ID of expense to delete
Returns:
Deletion confirmation
|
| add_expense_attachment | Add an attachment to an existing expense.
Args:
expense_id: Expense ID
file_path: Absolute path to file to attach
filename: Filename in Odoo (optional, uses original filename by default)
Returns:
Confirmation with created attachment ID
|
| list_expense_attachments | List attachments for an expense.
Args:
expense_id: Expense ID
Returns:
List of attachments with their ID and name
|
| list_expense_reports | List expense reports (expense sheets).
Args:
state: Filter by state: draft, submit, approve, post, done, cancel (optional)
limit: Maximum number of reports to return (default: 50)
offset: Offset for pagination (default: 0)
Returns:
List of expense reports with their details
|
| create_expense_report | Create an expense report from selected expenses.
Args:
name: Report name/title
expense_ids: List of expense IDs to include in the report
Returns:
Confirmation with created report ID
|
| submit_expense_report | Submit an expense report for approval.
Args:
report_id: ID of the expense report to submit
Returns:
Confirmation of submission
|
| list_contacts | List contacts (partners) in Odoo.
Args:
customer: Filter customers (True/False/None for all)
supplier: Filter suppliers (True/False/None for all)
company: Filter companies (True) or individuals (False)
limit: Maximum number of contacts (default: 50)
offset: Offset for pagination (default: 0)
Returns:
List of contacts with their information
|
| get_contact | Get details of a specific contact.
Args:
contact_id: Contact ID
Returns:
Complete contact details
|
| create_contact | Create a new contact.
Args:
name: Contact name
email: Email address (optional)
phone: Phone number (optional)
is_company: True if it's a company, False for individual
customer: Mark as customer (default: True)
supplier: Mark as supplier (default: False)
street: Address (optional)
city: City (optional)
zip_code: Zip code (optional)
parent_id: Parent company ID for contacts (optional)
Returns:
Confirmation with created contact ID
|
| list_invoices | List invoices in Odoo.
Args:
invoice_type: Invoice type (out_invoice=customer, in_invoice=supplier, out_refund=customer credit note, in_refund=supplier credit note)
state: State (draft, posted, cancel)
partner_id: Filter by partner
date_from: Start date (YYYY-MM-DD)
date_to: End date (YYYY-MM-DD)
limit: Maximum number of invoices (default: 50)
offset: Offset for pagination (default: 0)
Returns:
List of invoices
|
| get_invoice | Get details of a specific invoice with its lines.
Args:
invoice_id: Invoice ID
Returns:
Complete invoice details
|
| list_sale_orders | List sale orders (quotations/orders).
Args:
state: State (draft=Quotation, sent=Sent, sale=Sales Order, done=Locked, cancel=Cancelled)
partner_id: Filter by customer
date_from: Start date (YYYY-MM-DD)
date_to: End date (YYYY-MM-DD)
limit: Maximum number (default: 50)
offset: Offset for pagination (default: 0)
Returns:
List of orders
|
| get_sale_order | Get details of a sale order with its lines.
Args:
order_id: Order ID
Returns:
Complete order details
|
| list_products | List products in Odoo.
Args:
product_type: Product type (consu=Consumable, service=Service, product=Storable)
categ_id: Filter by product category
available: Filter products available for sale (True/False)
limit: Maximum number (default: 50)
offset: Offset for pagination (default: 0)
Returns:
List of products
|
| get_product | Get details of a specific product.
Args:
product_id: Product ID
Returns:
Complete product details
|
| list_employees | List employees in Odoo.
Args:
department_id: Filter by department
limit: Maximum number (default: 50)
offset: Offset for pagination (default: 0)
Returns:
List of employees
|
| get_employee | Get details of a specific employee.
Args:
employee_id: Employee ID
Returns:
Complete employee details
|
| list_departments | List departments in Odoo.
Args:
limit: Maximum number (default: 50)
offset: Offset for pagination (default: 0)
Returns:
List of departments
|
| list_leave_types | List available leave types in Odoo.
Args:
limit: Maximum number (default: 50)
offset: Offset for pagination (default: 0)
Returns:
List of leave types with their ID and name
|
| list_leave_allocations | List leave allocations.
Args:
employee_id: Filter by employee ID (optional)
leave_type_id: Filter by leave type ID (optional)
state: Filter by state: draft, confirm, validate, refuse (optional)
limit: Maximum number (default: 50)
offset: Offset for pagination (default: 0)
Returns:
List of leave allocations
|
| create_leave_allocation | Create a leave allocation for employees.
Args:
leave_type_id: Leave type ID (see list_leave_types)
number_of_days: Number of days to allocate
name: Allocation name/reason
employee_id: Specific employee ID (optional)
department_id: Department ID to allocate to all employees in department (optional)
all_employees: If True, allocate to all employees (default: False)
date_from: Start validity date YYYY-MM-DD (optional)
date_to: End validity date YYYY-MM-DD (optional)
Returns:
Confirmation with created allocation ID(s)
|
| approve_leave_allocation | Approve a leave allocation (change state from draft/confirm to validate).
Args:
allocation_id: Allocation ID to approve
Returns:
Confirmation message
|
| list_public_holidays | List public holidays (global time off) from a working calendar.
Args:
calendar_id: Working calendar ID (default: 1)
year: Filter by year (optional)
limit: Maximum number of entries (default: 50)
offset: Offset for pagination (default: 0)
Returns:
List of public holidays
|
| create_public_holiday | Create a public holiday in Odoo (global time off on working calendar).
Args:
name: Holiday name (e.g., "Nouvel An", "Fete nationale")
date: Holiday date in YYYY-MM-DD format
calendar_id: Working calendar ID (default: 1 = Standard 40 hours/week)
Returns:
Confirmation with created holiday ID
|
| test_connection | Test the connection to Odoo.
Returns:
Connection and user information
|
| search_records | Search records in any Odoo model.
Args:
model: Technical model name (e.g., res.partner, sale.order)
field: Field to search on (e.g., name, email)
value: Value to search for (partial match with ilike)
limit: Maximum number of results (default: 20)
offset: Offset for pagination (default: 0)
Returns:
List of found records
|
| get_rd_project_costs | Get total costs per R&D project from analytic accounts.
Args:
date_from: Start date (format YYYY-MM-DD, optional)
date_to: End date (format YYYY-MM-DD, optional)
Returns:
Summary of costs by R&D project
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |