User Roles, Access Bundles, and Model Governance
Assign MCP User or Administrator access, expose exact Odoo models, and restrict permissions, fields, records, result sizes, and tools.
MCP permissions never replace Odoo security. The final result is always limited by the connected Odoo user and then reduced further by the MCP configuration.
Success: Recommended default Use a dedicated internal user, bundle enforcement, a read-only bundle, explicit model rows, and no export or write tools until the read workflow is validated.
MCP roles
| Role | What the user can do |
|---|---|
| No Access | Cannot use the MCP Server app or authenticate as an MCP user. |
| User | Can connect through approved authentication, use allowed tools, view own connections and audit logs, and manage owned prompts or dashboards subject to rules. |
| Administrator | Can configure settings, bundles, API keys, all connections and logs, public dashboards, and the safe module builder. |
Assign the role from Settings > Users & Companies > Users > Access Rights > Niyu MCP.
Data-access modes
- Use Each User's Odoo Access: the connected user receives only normal Odoo ACL and record-rule access. Access bundles are not enforced.
- Restrict With MCP Access Bundles: users receive only models listed in assigned bundles, in addition to normal Odoo restrictions.
Create an access bundle
- Open MCP Server > Access Bundles and create a new record.
- Give it a purpose-specific name, for example Sales Assistant - Read Only.
- Assign the intended internal users.
- Choose the default model permission. Start with Read Only.
- Add exact installed Odoo models in Models & Permissions.
- Use Access Override on a model only to reduce the bundle default.
- Open a model row to configure field and record governance.
- Use Tool Controls to block tools such as export, chatter, create, write, or delete for this audience.
Permission presets
| Preset | Read | Update | Create | Delete |
|---|---|---|---|---|
| No Access | No | No | No | No |
| Read Only | Yes | No | No | No |
| Read + Update | Yes | Yes | No | No |
| Read + Update + Create | Yes | Yes | Yes | No |
| Full CRUD | Yes | Yes | Yes | Yes |
| Custom | Selected individually | Selected individually | Selected individually | Selected individually |
Model-level governance
- Allowed Fields: optional allowlist. Empty means all non-sensitive fields the Odoo user may access.
- Blocked Fields: hard deny list that remains hidden even if another assigned bundle is broader.
- Forced Record Domain: JSON Odoo domain applied to reads, writes, deletes, analytics, exports, and chatter.
- Maximum Records: per-model cap; zero uses the global MCP limit.
- Tool Blocks: per-bundle hard deny applied during discovery and again during execution.
How multiple security layers combine
- Credential scope must allow the operation.
- The connected Odoo user must have the normal ACL and record-rule permission.
- The model must be available through the configured data-access mode.
- The effective bundle permission must allow the operation.
- The fields must survive allowlist, blocklist, and global sensitive-field filtering.
- Forced domains and record ceilings are applied, and the tool must not be blocked.
Initial MCP Server Setup
Enable the MCP endpoint, set the canonical public URL, choose authentication and data-access modes, and run the first health checks.
Authentication and Scoped API Keys
Choose OAuth, OAuth plus API keys, bearer token, or no authentication and manage secure user-bound keys through their full lifecycle.
