Skip to content
Agentmart
Submit a tool

Odoo MCP Gateway

Security-first MCP gateway for Odoo 17/18/19 — YAML-driven security, 27 tools

Connector by parth-unjiya · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 4
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/parth-unjiya-odoo-mcp-gateway

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Security-first MCP gateway for Odoo 17/18/19 — YAML-driven security, 27 tools

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
19 read · 11 write · 1 delete · 2 not yet classified
Secrets
None asked for
Install scripts
Not scanned yet
Runs as
Python package

Tools by what they do 33

Read from the source code; the running server may list different tools.

Read 19 · Look things up without changing anything.

  • get_create_requirements
  • get_defaults
  • get_model_fields
  • get_my_attendance
  • get_my_leaves
  • get_my_profile
  • get_my_quotations
  • get_my_tasks
  • get_my_tickets
  • get_onchange
  • get_order_details
  • get_project_summary
Show 7 more tools
  • get_record
  • get_record_actions
  • get_sales_summary
  • list_models
  • read_group
  • search_count
  • search_read

Write 11 · Create, change, send or run things.

  • bulk_create
  • bulk_update
  • confirm_order
  • create_record
  • create_ticket
  • execute_method
  • login
  • request_leave
  • update_record
  • update_task_stage
  • update_ticket_stage

Delete 1 · Delete, drop, revoke or wipe things.

  • delete_record

Not yet classified 2 · We could not tell from the name and description.

  • check_in
  • check_out

Tools (33)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • bulk_create

    Create many records of *model* in batches. Each chunk of up to ``chunk_size`` records is ONE Odoo ``execute_kw('create', [chunk])`` call = ONE database transaction. Within a chunk the create is all-or-nothing. Across chunks atomicity is NOT guaranteed — if chunk 2 fails, chunk 1 stays committed. To get >chunk_size-record atomicity, raise ``chunk_size`` and let Odoo reject if its body limit is hit. Args: model: Target Odoo model. records: List of ``{field: value}`` dicts. Each dict goes through the same restrictions / RBAC / field validation pipeline as ``create_record…

  • bulk_update

    Apply *values* to every record in *record_ids*. Wraps ``execute_kw(model, 'write', [ids, values])``. Each chunk of up to ``chunk_size`` IDs is ONE Odoo call. The write itself is atomic per chunk; across chunks it is NOT atomic. The ``values`` dict is validated ONCE (it applies to every record), so this is much cheaper than calling ``update_record`` in a loop. Args: model: Target Odoo model. record_ids: IDs to update. Deduped automatically. values: ``{field: value}`` applied to every record. chunk_size: Maximum IDs per Odoo call. Default 200. dry_run: If True, validate wi…

  • check_in

    Record attendance check-in for the current user. Finds the employee linked to the current user and creates an attendance record with check_in set to now.

  • check_out

    Record attendance check-out for the current user. Finds the open attendance record and sets check_out to now.

  • confirm_order

    Confirm a quotation, turning it into a sale order. Args: order_id: The sale order ID to confirm (must be in draft/sent state)

  • create_record

    Create a new record in an Odoo model. Args: model: Target Odoo model name values: Field values for the new record dry_run: If True, validate without creating. Returns what would be sent. ctx: MCP Context auto-injected by FastMCP. Used for elicitation (ADR-008) when required fields are missing — the server asks the client to supply them rather than erroring out. Optional; if the client doesn't expose elicitation we fall back to the standard missing-field error.

  • create_ticket

    Create a new helpdesk ticket. Args: name: Ticket subject/title description: Detailed description team_id: Helpdesk team ID (optional) priority: Priority level (0=Low, 1=Medium, 2=High, 3=Urgent)

  • delete_record

    Delete a record from an Odoo model. Args: model: Target Odoo model name record_id: ID of the record to delete dry_run: If True, validate without deleting. Returns what would happen.

  • execute_method

    Execute a method on an Odoo model. Args: model: Target Odoo model name method: Method name to execute record_ids: Optional list of record IDs to operate on args: Additional positional arguments for the method kwargs: Additional keyword arguments for the method dry_run: If True, validate without executing. Returns what would be called.

  • get_create_requirements

    Get everything needed to create a record of any Odoo model. Returns required fields (from live schema), recommended fields, relation hints (which related records to look up first), and creation notes from the workflow engine. This is the first tool to call before create_record.

  • get_defaults

    Get default values for fields on an Odoo model. Returns default values that Odoo would pre-fill when creating a new record. Useful for understanding what values are auto-populated before calling create_record.

  • get_model_fields

    Get field definitions for an Odoo model. ``field_filter`` accepts THREE shapes: * ``None`` or empty string → no filter; every accessible field is returned. * Single string without commas (e.g. ``"email"``) → substring match against both the field name and its label (legacy behaviour preserved for back-compat). * Comma-separated string (e.g. ``"name,phone,email"``) OR a ``list[str]`` of names → EXACT field-name match. Each token is stripped + lowercased. Tokens that don't exist on the model are silently dropped — the response contains the subset that does exist; no error is rais…

  • get_my_attendance

    Get attendance records for the current user. Args: limit: Max records to return (default 10) month: Filter by month (YYYY-MM format, optional)

  • get_my_leaves

    Get leave requests for the current user. Args: state: Filter by state (draft, confirm, validate, refuse) limit: Max records (default 20)

  • get_my_profile

    Get the current user's employee profile.

Show 18 more tools
  • get_my_quotations

    Get quotations/orders where the current user is the salesperson. Args: state: Filter by state (draft, sent, sale, done, cancel) limit: Max records (default 20)

  • get_my_tasks

    Get tasks assigned to the current user. Args: state: Filter by task state (e.g. 01_in_progress, 1_done) project_id: Filter by project ID limit: Max records (default 20)

  • get_my_tickets

    Get helpdesk tickets assigned to the current user. Args: state: Filter by stage name (optional) priority: Filter by priority (0=Low, 1=Medium, 2=High, 3=Urgent) limit: Max records (default 20)

  • get_onchange

    Simulate an onchange event on an Odoo model. Returns the values that would change when a field is modified in the UI. Useful for previewing side effects before calling create_record or update_record. Args: model: The Odoo model name values: Current field values (partial record) changed_field: The field that was just changed fields: Fields to check for onchange effects. Defaults to keys of values.

  • get_order_details

    Get full order details with lines, totals, and partner info. Args: order_id: The sale order ID

  • get_project_summary

    Get project stats: task counts by stage, overdue, recent activity. Args: project_id: The project ID to summarize

  • get_record

    Read a single record by ID from any Odoo model.

  • get_record_actions

    Get the current state and available next actions for a record. Returns the current state label and a list of valid transitions (filtered by security restrictions), each with method name, label, description, and target state. This is the tool to call after reading a record to know what workflow actions are available.

  • get_sales_summary

    Get aggregated sales stats for the current user. Returns counts by state, totals by month, and top customers. Args: period: Filter period (YYYY-MM format, optional). If omitted, returns all-time stats.

  • list_models

    List available Odoo models. Optionally filter by keyword. On large databases (e.g. custom-module-heavy deployments with 500+ models) the full payload can exceed the MCP response cap. This tool now offers three independent knobs to keep the payload small: * ``compact`` (default ``False``) — when ``True`` each entry is just ``{"model": "<name>"}`` (no description, is_custom, or access_level metadata). Drops payload size by ~80%. * ``limit`` / ``offset`` — caller-driven pagination. When ``limit`` is set, only that many entries are returned starting at ``offset``. The response carries ``…

  • login

    Authenticate with Odoo. Methods: 'api_key', 'password', or 'session'.

  • read_group

    Read grouped/aggregated data from an Odoo model.

  • request_leave

    Submit a leave request. Args: leave_type_id: Leave type ID (e.g. annual leave, sick leave) date_from: Start date (YYYY-MM-DD) date_to: End date (YYYY-MM-DD) reason: Optional description

  • search_count

    Count records matching a domain in an Odoo model.

  • search_read

    Search and read records from any Odoo model.

  • update_record

    Update an existing record in an Odoo model. Args: model: Target Odoo model name record_id: ID of the record to update values: Field values to update dry_run: If True, validate without updating. Returns what would be sent.

  • update_task_stage

    Move a task to a different stage. Args: task_id: The task ID to update stage_id: The target stage ID

  • update_ticket_stage

    Move a helpdesk ticket to a different stage. Args: ticket_id: The ticket ID to update stage_id: The target stage ID

Signals

Stars
4
Forks
2
Open issues
0
Weekly downloads
49
Last commit
May 21, 2026 (5 months ago)
Last release
Mar 17, 2026 (7 months ago)
Last package publish
May 21, 2026 (5 months ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.parth-unjiya/odoo-mcp-gateway
Version
0.1.1
Auth
No auth
Packages
pypi odoo-mcp-gateway
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026
Cite this page

Odoo MCP Gateway. Agent Mart. https://agentmart.dev/connectors/parth-unjiya-odoo-mcp-gateway (last updated 2026-10-24)