| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Community Apps Dependencies | Show |
| Lines of code | 3737 |
| Technical Name |
llm_mcp_server |
| License | LGPL-3 |
| Website | https://github.com/apexive/odoo-llm |
| Versions | 16.0 18.0 |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Community Apps Dependencies | Show |
| Lines of code | 3737 |
| Technical Name |
llm_mcp_server |
| License | LGPL-3 |
| Website | https://github.com/apexive/odoo-llm |
| Versions | 16.0 18.0 |
Talk to Your Odoo Data
with AI
Connect any MCP client to Odoo and manage your business using natural language. Zero configuration required.
Works with Claude Desktop, Claude Code, Codex CLI, and any MCP-compatible client
What is Model Context Protocol (MCP)?
Connect AI assistants directly to your Odoo data
MCP is an open protocol created by Anthropic (makers of Claude AI) that standardizes how AI assistants connect to external data sources and tools. This module implements an MCP server inside Odoo, exposing your business data and operations to any MCP-compatible AI client through a simple, secure interface.
Why This Matters
Works Everywhere
Use Claude Desktop on your laptop, Claude Code in your terminal, or Codex CLI in your IDE. One integration, all your tools.
Your Data Stays Safe
Every user brings their own API key. They can only see what they're allowed to see in Odoo. All permissions are enforced.
Built for Tomorrow
More AI tools adopt MCP every month. Connect once, benefit forever - no rewiring when you change tools.
What You Get
Zero Development Time
Skip the API docs, SDKs, and webhooks. Install the module, connect your AI client, and you're done.
Use Your Favorite Tools
Your team already has preferred AI assistants. Let them keep using them with your Odoo data.
Freedom to Switch
Try different AI providers without rebuilding integrations. Your MCP server keeps working no matter which AI you choose.
See It In Action
Ask questions, and let AI do all the work - all in natural language
Just Ask in Plain English
Your AI assistant understands natural language and handles complex operations instantly
Search & Retrieve
Find any data across your entire Odoo database
"Show me all customers in California"
Create Records
Add new customers, orders, products instantly
"Create a new lead for Acme Corp"
Update Data
Modify existing records with simple instructions
"Update the status of order #789 to delivered"
Get Insights
Ask complex questions about your business data
"What's our total revenue this quarter?"
Works Across All Odoo Apps
Sales, CRM, Inventory, Accounting, HR, Project Management, Manufacturing - if it's in Odoo, you can talk to it with AI.
Build Your Own Tools
Create custom AI tools in seconds with the @llm_tool decorator. Extend functionality however you need.
Why Teams Love This
Because it's awesome - and makes work feel like magic
10x Faster
No more clicking through menus. Just ask what you need, get instant results.
Easy for Everyone
Non-technical staff can access Odoo data without training. Just talk naturally.
Secure by Design
Respects all Odoo permissions. Users only see data they're authorized to access.
Literally Zero Setup Required
Yes, you heard it right! The MCP server starts automatically when you install the module.
No extra MCP server to run, no configuration needed - it's all built into Odoo.
Install LLM MCP Server
Search in Apps and click Install. That's it!
Generate API Key
Preferences → API Keys → New
Connect Your Client
Check our documentation for client configs at:github.com/apexive/odoo-llm
That's It - You're Ready!
Your MCP server is now live and ready to connect
Connect Your Favorite Client
Works with Claude Desktop, Claude Code, Codex CLI, and any MCP-compatible client
Claude Desktop
AI workflows
Cursor
AI-first IDE
Windsurf
Codeium IDE
VSCode
With MCP extension
Codex CLI
Command line
Claude Code
AI coding assistant
Configuration Examples
Claude Desktop
Step 1: Install mcp-remote package
npm install -g mcp-remote
Step 2: Add to config file
~/.config/claude_desktop/claude_desktop_config.json (Linux/macOS)
or %APPDATA%/Claude/claude_desktop_config.json (Windows)
{
"mcpServers": {
"odoo": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-remote", "http://localhost:8069/mcp",
"--header", "Authorization: Bearer YOUR_API_KEY"],
"env": { "MCP_TRANSPORT": "streamable-http" }
}
}
}
Claude Code
Run this command:
claude mcp add-json odoo '{
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-remote",
"http://localhost:8069/mcp",
"--header",
"Authorization: Bearer YOUR_API_KEY"],
"env": {"MCP_TRANSPORT": "streamable-http"}
}'
Codex CLI
Add to ~/.codex/config.toml:
experimental_use_rmcp_client = true [mcp_servers.odoo] url = "http://localhost:8069/mcp" http_headers.Authorization = "Bearer YOUR_API_KEY"
github.com/apexive/odoo-llm/blob/18.0/llm_mcp_server/README.md
Build Your Own AI Tools - It's That Easy
100% open source. Extend with custom tools using our simple decorator pattern.
Dead Simple Decorator
Just add @llm_tool to any Python method. That's it!
from odoo.addons.llm_tool.decorators import llm_tool
class SaleOrder(models.Model):
_inherit = "sale.order"
@llm_tool(read_only_hint=True)
def get_pending_orders(self, customer_id: int):
"""Get all pending orders"""
orders = self.search([
('partner_id', '=', customer_id),
('state', 'in', ['draft', 'sent'])
])
return [{'id': o.id, 'name': o.name}
for o in orders]
Auto-registered! Tool appears instantly on next Odoo restart.
Batteries Included
Complete CRUD operations through conversational AI - no coding required for end users
Search & Find
Query any record
Create Records
Add new data
Update Data
Modify records
Get Insights
Explore structure
See examples in llm_tool_demo module
github.com/apexive/odoo-llm
Enterprise-Grade Security
Built with security and compliance in mind from day one
User-Scoped API Keys
Each user brings their own API key with their exact Odoo permissions. No shared credentials, no data leaks - every request runs in the user's security context.
Permission-Based Access
Every AI request respects Odoo's access control lists and record rules. Users only see and modify data they're authorized to access.
Revocable Tokens
Industry-standard bearer token authentication. API keys can be revoked instantly and have configurable expiration for enhanced security.
Standards-Compliant
Built on the official Model Context Protocol (MCP) by Anthropic. Future-proof, vendor-neutral, and production-ready.
Part of Apexive's Odoo LLM Ecosystem
Seamlessly integrates with Apexive's complete AI toolkit for Odoo
LLM Thread
Have persistent AI conversations directly in Odoo with full context and history
LLM Assistant
Create specialized AI assistants for specific roles like sales, support, or accounting
LLM Knowledge
Turn PDFs, images, webpages, and documents into AI-searchable knowledge base
LLM Letta
AI agents that remember past conversations and learn from your interactions
LLM Generate
Generate marketing content, product descriptions, and images with AI
LLM Tool
Extend AI capabilities with custom business logic in just a few lines of code
Documentation & Support
Everything you need to get started and succeed
Complete Documentation
Step-by-step guides, troubleshooting tips, and API reference included.
Open Source
Full source code available on GitHub. Contribute, customize, or learn from the implementation.
GitHub Repository:
github.com/apexive/odoo-llm
View code, report issues, or join discussions
LLM MCP Server for Odoo
HTTP-based MCP server that exposes Odoo tools to any MCP-compatible AI client.
What is MCP?
Model Context Protocol (MCP) is an open standard by Anthropic that lets AI assistants securely access external tools and data sources. This module implements an MCP server directly in Odoo.
Requirements
- Python: 3.10+
- Odoo: 18.0
- Dependencies: See requirements.txt
Quick Start
1. Install Module
odoo-bin -d your_db -i llm_mcp_server
2. Get API Key
Odoo → User Avatar → Preferences → Account Security → API Keys → New
3. Configure Client
Claude Desktop (~/.config/claude_desktop/claude_desktop_config.json):
{ "mcpServers": { "odoo-llm-mcp-server": { "type": "stdio", "command": "npx", "args": ["-y", "mcp-remote", "http://localhost:8069/mcp", "--header", "Authorization: Bearer YOUR_API_KEY"], "env": { "MCP_TRANSPORT": "streamable-http" } } } }
Claude Code:
claude mcp add-json odoo-llm-mcp-server '{
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-remote", "http://localhost:8069/mcp",
"--header", "Authorization: Bearer YOUR_API_KEY"],
"env": {"MCP_TRANSPORT": "streamable-http"}
}'
Codex CLI (~/.codex/config.toml):
experimental_use_rmcp_client = true [mcp_servers.odoo-llm-mcp-server] url = "http://localhost:8069/mcp" http_headers.Authorization = "Bearer YOUR_API_KEY"
Other clients: Connect to http://localhost:8069/mcp with Bearer auth
4. Restart & Test
Restart your client → Ask "What tools do you have?"
Architecture
┌─────────────┐ streamable-http ┌──────────────┐ ┌─────────────┐ │ MCP Client │ ←─────────────────→ │ Odoo MCP │ ───→ │ llm.tool │ │ (Claude) │ JSON-RPC 2.0 │ Controller │ │ Registry │ └─────────────┘ └──────────────┘ └─────────────┘
- Protocol: MCP 2025-06-18 spec via JSON-RPC 2.0
- Transport: streamable-http (HTTP with streaming responses)
- Endpoint: /mcp (POST for requests, streaming responses)
- Auth: Bearer token (Odoo API keys)
- Tools: Auto-discovered from llm.tool registry
Request Flow
- Client sends JSON-RPC request to /mcp via POST
- Server validates Bearer token → loads user session
- For tools/list: Returns all active tools user can access
- For tools/call: Executes tool with user's permissions
- Response streamed back via HTTP streaming
API Reference
Initialize
// Request {"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2025-06-18", "capabilities": {}}} // Response {"jsonrpc": "2.0", "id": 1, "result": {"protocolVersion": "2025-06-18", "capabilities": {"tools": {}}, "serverInfo": {"name": "odoo-mcp-server", "version": "1.0.0"}}}
List Tools
// Request {"jsonrpc": "2.0", "id": 2, "method": "tools/list"} // Response {"jsonrpc": "2.0", "id": 2, "result": {"tools": [ {"name": "search_records", "description": "Search for records in any Odoo model", "inputSchema": {"type": "object", "properties": {...}}} ]}}
Call Tool
// Request {"jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {"name": "search_records", "arguments": {"model": "res.partner", "domain": []}}} // Response {"jsonrpc": "2.0", "id": 3, "result": {"content": [{"type": "text", "text": "..."}]}}
Creating Tools
Tools are auto-discovered from the llm.tool model. See llm_tool module for creating custom tools.
Testing & Debugging
MCP Inspector: https://modelcontextprotocol.io/docs/tools/inspector
Test your server:
- Verify connectivity
- Browse available tools
- Test tool execution
- Debug authentication issues
Odoo Logs: Check server logs for MCP-related errors
# Enable debug mode odoo-bin --log-level=debug
Troubleshooting
No tools showing up?
- Check that tools are active in Odoo (LLM → Tools)
- Verify API key has access to tools
- Check user permissions
Authentication failed?
- Verify API key is correct
- Check key hasn't expired
- Ensure Bearer token format: Authorization: Bearer YOUR_KEY
Connection refused?
- Verify Odoo is running on specified port
- Check firewall settings
- For remote access, ensure Odoo is accessible from client
Tools failing to execute?
- Check Odoo logs for errors
- Verify user has required permissions
- Test tool manually in Odoo UI first
Security
- User-scoped: Each API key executes with that user's permissions
- ACL enforced: All Odoo access control rules apply
- No shared state: Each request is isolated
- Audit trail: All tool calls logged in Odoo
Roadmap
Future enhancements planned:
- MCP Resources - Expose Odoo records and documents as MCP resources for context injection
- MCP Prompts - Pre-built prompts for common Odoo workflows (sales, inventory, accounting)
- MCP Utilities - Additional MCP features like sampling and logging support
Contributions and feature requests welcome!
Resources
- MCP Protocol Spec
- Odoo LLM Repository
- Video Tutorial
Please log in to comment on this module