{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"awesome-odoo","slug":"odoo","name":"Odoo","type":"mcp","url":"https://github.com/ivnvxd/mcp-server-odoo","page_url":"https://unfragile.ai/odoo","categories":["mcp-servers","automation"],"tags":[],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"awesome-odoo__cap_0","uri":"capability://tool.use.integration.natural.language.crud.operations.on.odoo.models.via.mcp.tools","name":"natural language crud operations on odoo models via mcp tools","description":"Translates natural language AI requests into XML-RPC CRUD operations (create, read, update, delete) against Odoo models through the MCP tools interface. The OdooToolHandler registers dynamic tools for each accessible model, mapping LLM function calls to Odoo's XML-RPC API with automatic field validation, type coercion, and error handling. Supports batch operations and maintains request context across multi-step workflows.","intents":["Create new customer records from unstructured data without manual form entry","Update invoice statuses and line items based on business logic decisions","Delete obsolete records while respecting Odoo's cascade rules","Query and filter records using natural language constraints","Bulk modify records across multiple models in a single workflow"],"best_for":["Teams automating Odoo workflows through AI assistants (Claude, Cursor, VS Code)","Developers building LLM agents that need ERP system integration","Non-technical business users leveraging AI to interact with Odoo without SQL"],"limitations":["CRUD operations execute synchronously — no built-in async/batch queue for high-volume writes","Field validation depends on Odoo model definitions; complex custom field types may require manual mapping","No transaction rollback support — failed operations within a workflow don't automatically revert prior changes","XML-RPC latency adds ~100-300ms per operation; high-frequency polling not recommended"],"requires":["Odoo 14.0+ instance with XML-RPC enabled","Valid Odoo user credentials with model-level permissions","MCP-compatible AI assistant (Claude Desktop, Cursor, VS Code, Zed)","Python 3.9+ for the MCP server"],"input_types":["Natural language instructions from LLM","Structured field data (strings, numbers, booleans, dates)","Domain filters (Odoo ORM syntax: [('field', 'operator', 'value')])"],"output_types":["Operation result (record ID for create, boolean for delete/update)","Error messages with Odoo exception details","Formatted record data for read operations"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-odoo__cap_1","uri":"capability://memory.knowledge.uri.based.resource.access.to.odoo.records.with.query.filtering","name":"uri-based resource access to odoo records with query filtering","description":"Exposes Odoo records as MCP resources using a hierarchical URI schema (odoo://model/record_id or odoo://model?domain=filter), enabling AI assistants to reference and retrieve specific records without tool invocation. The OdooResourceHandler implements resource URIs with support for domain-based filtering, pagination, and lazy-loading of related records. Resources are formatted hierarchically with parent-child relationships preserved for context.","intents":["Reference specific customer or invoice records in AI conversations without re-querying","Browse related records (e.g., all orders for a customer) through URI patterns","Implement RAG-style context injection where Odoo records become part of the LLM's knowledge base","Paginate large result sets to stay within token budgets","Access computed/related fields without triggering separate CRUD operations"],"best_for":["Building conversational AI agents that maintain context across multi-turn interactions","Implementing retrieval-augmented generation (RAG) with live Odoo data","Teams needing read-only data access patterns without tool-based operations"],"limitations":["Resource URIs are read-only by design — modifications require tool-based CRUD operations","Pagination is offset-based, not cursor-based; inefficient for large datasets with frequent updates","Related record expansion is limited to 2-3 levels deep to prevent exponential data bloat","Domain filters must use Odoo ORM syntax; no natural language query translation"],"requires":["Odoo 14.0+ with XML-RPC enabled","Valid Odoo user credentials with read permissions on target models","MCP client supporting resource URIs (Claude Desktop 0.7+, Cursor, VS Code)"],"input_types":["URI strings with model name and optional record ID","Domain filter expressions (Odoo ORM syntax)","Query parameters (limit, offset, fields)"],"output_types":["Hierarchical JSON with record data and related records","Formatted text representation for LLM consumption","Pagination metadata (total count, offset, limit)"],"categories":["memory-knowledge","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-odoo__cap_2","uri":"capability://safety.moderation.permission.aware.access.control.with.optional.yolo.mode.bypass","name":"permission-aware access control with optional yolo mode bypass","description":"Enforces Odoo's native access control through the AccessController, which validates user permissions against ir.model.access and ir.rule records before executing operations. Supports two modes: standard (permission-enforced) and YOLO (bypass), with read-only and full-access variants. Permission checks are cached with configurable TTL to reduce Odoo round-trips while maintaining security boundaries.","intents":["Ensure AI operations respect Odoo's role-based access control (RBAC) without additional configuration","Allow trusted environments to bypass permissions for rapid prototyping or admin automation","Cache permission checks to reduce latency in high-frequency operations","Audit which models and operations the AI assistant can access based on user role"],"best_for":["Production deployments requiring strict security enforcement","Teams with complex Odoo permission hierarchies (multi-company, record rules)","Development/testing environments where permission bypass accelerates iteration"],"limitations":["YOLO mode completely disables access control — use only in trusted, isolated environments","Permission caching can lag behind real-time permission changes (default TTL 300s)","Record-level rules (ir.rule) are evaluated per-operation; no bulk permission pre-check","Custom permission models not based on ir.model.access are not validated"],"requires":["Odoo 14.0+ with ir.model.access and ir.rule tables","Valid Odoo user credentials with appropriate role assignments","Environment variable ODOO_YOLO_MODE=true to enable bypass (default: false)"],"input_types":["Odoo model name","Operation type (create, read, update, delete)","User context (UID from authentication)"],"output_types":["Boolean (permission granted/denied)","Error message with specific permission violation details"],"categories":["safety-moderation","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-odoo__cap_3","uri":"capability://data.processing.analysis.smart.field.selection.and.hierarchical.data.formatting.for.llm.consumption","name":"smart field selection and hierarchical data formatting for llm consumption","description":"The RecordFormatter and DatasetFormatter classes optimize Odoo record output for LLM token budgets by automatically excluding binary fields, computed fields, and low-value metadata while preserving business-critical relationships. Hierarchical formatting includes parent records and related collections with configurable depth limits. Field selection is model-aware, using Odoo's field metadata to determine relevance.","intents":["Reduce token usage by excluding irrelevant fields (binary attachments, internal IDs, timestamps)","Present related records (customer, product, order lines) in a single hierarchical structure","Format large search results with pagination to fit within LLM context windows","Customize field visibility per model to match business domain requirements"],"best_for":["Teams optimizing LLM token usage in high-volume Odoo integrations","Building conversational agents where context window is a bottleneck","Scenarios requiring human-readable output formatting for LLM processing"],"limitations":["Hierarchical expansion is limited to 2-3 levels deep to prevent exponential data bloat","Computed fields are excluded by default; custom field types may not format correctly","Pagination is offset-based, not cursor-based; inefficient for large, frequently-updated datasets","Field selection is static per model; no per-request customization without code changes"],"requires":["Odoo 14.0+ with field metadata available via ir.model.fields","Python 3.9+ for the MCP server"],"input_types":["Odoo record data (dict or list of dicts)","Model name for field metadata lookup","Pagination parameters (limit, offset)"],"output_types":["Formatted text representation optimized for LLM consumption","Hierarchical JSON with related records","Pagination metadata (total count, offset, limit)"],"categories":["data-processing-analysis","memory-knowledge"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-odoo__cap_4","uri":"capability://automation.workflow.multi.tier.caching.system.with.connection.pooling.for.performance.optimization","name":"multi-tier caching system with connection pooling for performance optimization","description":"The PerformanceManager implements a multi-tier caching architecture (in-memory cache with TTL, optional Redis backend) and connection pooling to reduce latency and Odoo server load. Cache keys are model-aware, and invalidation is triggered by write operations. Connection pooling maintains persistent XML-RPC sessions, reducing authentication overhead. Performance metrics are collected for monitoring.","intents":["Reduce latency for repeated queries on the same records or models","Minimize Odoo server load by caching frequently-accessed data","Maintain persistent connections to avoid repeated authentication","Monitor performance metrics to identify bottlenecks in AI workflows"],"best_for":["High-frequency Odoo access patterns (100+ operations/minute)","Teams running multiple concurrent AI assistants against the same Odoo instance","Production deployments where latency and server load are critical"],"limitations":["In-memory cache is process-local; not shared across multiple MCP server instances","Cache invalidation is write-operation-based; external Odoo changes are not detected","Connection pooling adds ~50-100ms overhead for pool initialization","Redis backend requires additional infrastructure and network latency"],"requires":["Python 3.9+ with caching libraries (functools.lru_cache or Redis client)","Optional: Redis 6.0+ for distributed caching across multiple server instances","Environment variables: ODOO_CACHE_TTL (default 300s), ODOO_POOL_SIZE (default 5)"],"input_types":["Cache key (model name, record ID, domain filter)","TTL value in seconds","Connection parameters (host, port, credentials)"],"output_types":["Cached record data or cache miss indicator","Performance metrics (hit rate, latency, pool utilization)"],"categories":["automation-workflow","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-odoo__cap_5","uri":"capability://tool.use.integration.xml.rpc.authentication.and.connection.management.with.health.checking","name":"xml-rpc authentication and connection management with health checking","description":"The OdooConnection class manages XML-RPC client lifecycle, handling authentication via Odoo's authenticate() RPC method, connection pooling, and health checks. Supports multiple authentication schemes (username/password, API tokens) and maintains connection state with automatic reconnection on failure. Error handling translates Odoo XML-RPC exceptions into structured error messages.","intents":["Establish and maintain authenticated connections to Odoo instances","Automatically reconnect on transient network failures without user intervention","Validate connection health before executing operations","Support multiple authentication methods (credentials, API tokens)"],"best_for":["Teams integrating with Odoo instances over unreliable networks","Production deployments requiring high availability and automatic failover","Scenarios with multiple concurrent AI assistants sharing connection pools"],"limitations":["Health checks add ~50ms latency per operation; can be disabled for performance","Connection pooling is process-local; not shared across multiple MCP server instances without Redis","API token authentication requires Odoo 14.0+; older versions only support username/password","No built-in circuit breaker; repeated failures will continue attempting reconnection"],"requires":["Odoo 14.0+ with XML-RPC enabled (default: enabled)","Valid Odoo user credentials or API token","Network connectivity to Odoo instance (HTTP/HTTPS)","Environment variables: ODOO_URL, ODOO_DB, ODOO_USERNAME, ODOO_PASSWORD (or ODOO_API_TOKEN)"],"input_types":["Odoo instance URL (http://localhost:8069 or https://odoo.example.com)","Database name","Credentials (username/password or API token)"],"output_types":["Authenticated session object","Connection status (connected, disconnected, error)","Error messages with Odoo exception details"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-odoo__cap_6","uri":"capability://tool.use.integration.multi.protocol.transport.support.stdio.and.http.with.fastmcp.integration","name":"multi-protocol transport support (stdio and http) with fastmcp integration","description":"The MCP server supports multiple transport protocols through FastMCP: stdio (for local/embedded use) and HTTP (for remote/cloud deployments). Transport selection is configured via environment variables, and the server automatically adapts request/response handling to the chosen protocol. Supports both synchronous and streaming responses.","intents":["Run the MCP server locally within VS Code, Cursor, or Claude Desktop via stdio","Deploy the MCP server as a remote service accessible over HTTP/HTTPS","Support both synchronous operations and streaming responses for long-running tasks","Enable flexible deployment topologies (embedded, containerized, serverless)"],"best_for":["Teams deploying MCP servers in diverse environments (local, cloud, containerized)","Scenarios requiring both embedded (stdio) and remote (HTTP) access patterns","Production deployments where transport flexibility is critical"],"limitations":["Stdio transport is process-local; not suitable for multi-client scenarios","HTTP transport adds network latency (~50-200ms) vs. stdio","Streaming responses require client support; not all MCP clients support streaming","No built-in authentication for HTTP transport; requires external reverse proxy or API gateway"],"requires":["Python 3.9+ with FastMCP library","Environment variable: TRANSPORT (stdio or http, default: stdio)","For HTTP: PORT environment variable (default: 8000)","For HTTP: external authentication/authorization layer (reverse proxy, API gateway)"],"input_types":["MCP protocol messages (JSON-RPC 2.0)","Tool invocations and resource requests"],"output_types":["MCP protocol responses (JSON-RPC 2.0)","Tool results and resource data"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-odoo__cap_7","uri":"capability://automation.workflow.configuration.management.with.environment.variable.validation.and.odooconfig.class","name":"configuration management with environment variable validation and odooconfig class","description":"The OdooConfig class centralizes configuration management, parsing and validating environment variables for Odoo connection, authentication, caching, and operational modes. Supports configuration profiles (development, production) and provides sensible defaults. Validation ensures required parameters are present and have correct types before server startup.","intents":["Manage Odoo connection parameters (URL, database, credentials) via environment variables","Configure caching behavior (TTL, backend) without code changes","Enable/disable YOLO mode and other operational modes via configuration","Validate configuration at startup to catch errors early"],"best_for":["Teams deploying MCP servers in containerized/cloud environments","Scenarios requiring different configurations for dev/staging/production","Deployments where secrets management is critical (API tokens, credentials)"],"limitations":["Configuration is static at startup; runtime changes require server restart","No built-in secrets management; relies on external tools (Kubernetes secrets, AWS Secrets Manager)","Validation is basic; complex interdependencies between parameters are not checked"],"requires":["Python 3.9+","Environment variables: ODOO_URL, ODOO_DB, ODOO_USERNAME, ODOO_PASSWORD (or ODOO_API_TOKEN)","Optional: ODOO_CACHE_TTL, ODOO_POOL_SIZE, ODOO_YOLO_MODE, TRANSPORT, PORT"],"input_types":["Environment variables (strings, booleans, integers)"],"output_types":["OdooConfig object with validated parameters","Validation errors with specific parameter details"],"categories":["automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-odoo__cap_8","uri":"capability://safety.moderation.error.handling.and.exception.translation.from.odoo.xml.rpc.to.structured.messages","name":"error handling and exception translation from odoo xml-rpc to structured messages","description":"The system translates Odoo XML-RPC exceptions (access denied, record not found, validation errors) into structured error messages that are human-readable and actionable for AI assistants. Error context includes the original operation, affected model/record, and suggested remediation steps. Errors are logged with full stack traces for debugging.","intents":["Provide clear error messages when operations fail due to permissions, validation, or data issues","Enable AI assistants to understand and recover from errors without manual intervention","Log errors with full context for debugging and monitoring","Distinguish between transient (retry-able) and permanent (non-retry-able) errors"],"best_for":["Production deployments requiring robust error handling and observability","Teams building autonomous AI agents that need to recover from errors","Scenarios where error context is critical for debugging"],"limitations":["Error translation is best-effort; some Odoo exceptions may not map cleanly to structured messages","Logging is process-local; requires external aggregation (ELK, Datadog) for centralized monitoring","No built-in retry logic; AI assistants must implement their own retry strategies"],"requires":["Python 3.9+ with logging module","Odoo 14.0+ with standard exception types"],"input_types":["Odoo XML-RPC exceptions","Operation context (model, operation type, parameters)"],"output_types":["Structured error messages with model, operation, and remediation details","Log entries with full stack traces"],"categories":["safety-moderation","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-odoo__cap_9","uri":"capability://tool.use.integration.dynamic.tool.registration.based.on.odoo.model.metadata.with.schema.generation","name":"dynamic tool registration based on odoo model metadata with schema generation","description":"The OdooToolHandler dynamically registers MCP tools for each Odoo model accessible to the authenticated user by querying ir.model and ir.model.fields metadata. Tool schemas are generated automatically from field definitions, including type information, constraints, and help text. This enables AI assistants to discover and operate on custom models without code changes or manual schema definition.","intents":["Enable AI assistants to discover available Odoo models and their fields without manual configuration","Generate accurate tool schemas from Odoo's field metadata, including types and constraints","Support custom models and fields without requiring code changes to the MCP server","Provide field documentation (help text) to AI assistants for better decision-making"],"best_for":["Teams with custom Odoo models that change frequently","Deployments where manual schema maintenance is impractical","Scenarios requiring support for multiple Odoo instances with different model sets"],"limitations":["Schema generation is static at server startup; new models require server restart","Complex field types (many2many, one2many) are simplified in schema generation","Field constraints (unique, required) are included but not fully validated by the MCP server","Custom field types not based on standard Odoo types may not generate correct schemas"],"requires":["Odoo 14.0+ with ir.model and ir.model.fields tables","Valid Odoo user credentials with read access to ir.model and ir.model.fields"],"input_types":["Odoo model metadata (ir.model, ir.model.fields records)"],"output_types":["MCP tool definitions with JSON schemas","Tool descriptions with field documentation"],"categories":["tool-use-integration","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":28,"verified":false,"data_access_risk":"high","permissions":["Odoo 14.0+ instance with XML-RPC enabled","Valid Odoo user credentials with model-level permissions","MCP-compatible AI assistant (Claude Desktop, Cursor, VS Code, Zed)","Python 3.9+ for the MCP server","Odoo 14.0+ with XML-RPC enabled","Valid Odoo user credentials with read permissions on target models","MCP client supporting resource URIs (Claude Desktop 0.7+, Cursor, VS Code)","Odoo 14.0+ with ir.model.access and ir.rule tables","Valid Odoo user credentials with appropriate role assignments","Environment variable ODOO_YOLO_MODE=true to enable bypass (default: false)"],"failure_modes":["CRUD operations execute synchronously — no built-in async/batch queue for high-volume writes","Field validation depends on Odoo model definitions; complex custom field types may require manual mapping","No transaction rollback support — failed operations within a workflow don't automatically revert prior changes","XML-RPC latency adds ~100-300ms per operation; high-frequency polling not recommended","Resource URIs are read-only by design — modifications require tool-based CRUD operations","Pagination is offset-based, not cursor-based; inefficient for large datasets with frequent updates","Related record expansion is limited to 2-3 levels deep to prevent exponential data bloat","Domain filters must use Odoo ORM syntax; no natural language query translation","YOLO mode completely disables access control — use only in trusted, isolated environments","Permission caching can lag behind real-time permission changes (default TTL 300s)","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.05,"quality":0.3,"ecosystem":0.49999999999999994,"match_graph":0.25,"freshness":0.52,"weights":{"adoption":0.25,"quality":0.25,"ecosystem":0.15,"match_graph":0.23,"freshness":0.12}},"observed_outcomes":{"matches":0,"success_rate":0,"avg_confidence":0,"top_intents":[],"last_matched_at":null},"maintenance":{"status":"active","updated_at":"2026-06-17T09:51:03.579Z","last_scraped_at":"2026-05-03T14:00:15.503Z","last_commit":null},"community":{"stars":null,"forks":null,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=odoo","compare_url":"https://unfragile.ai/compare?artifact=odoo"}},"signature":"tnew4CqsSD9t84N5tzirUKq5duWOlFCEDbSw1+GNnDlGudlY3YDRurCXzIHOE1M9QjviI2O99Dz6yTIAhl2WAQ==","signedAt":"2026-06-22T18:14:19.169Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/odoo","artifact":"https://unfragile.ai/odoo","verify":"https://unfragile.ai/api/v1/verify?slug=odoo","publicKey":"https://unfragile.ai/api/v1/trust-passport-public-key","spec":"https://unfragile.ai/trust","schema":"https://unfragile.ai/schema.json","docs":"https://unfragile.ai/docs"}}