Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ODOO_DBYesOdoo database name
ODOO_URLYesURL of your Odoo instance (without trailing slash)
LOG_LEVELNoLogging level (optional)INFO
REDIS_URLNoRedis connection URL (optional)redis://localhost:6379/0
LOG_FORMATNoFormat for logs, either 'json' or 'text' (optional)json
ODOO_API_KEYYesYour Odoo API key
ODOO_USERNAMEYesYour Odoo username (email address)
REDIS_ENABLEDNoWhether to enable Redis caching (optional)true
REDIS_DEFAULT_TTLNoDefault TTL for cached items in seconds (optional)300

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/industream/mcp-odoo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server