322 lines
20 KiB
HTML
322 lines
20 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<meta name="robots" content="index, follow" />
|
|
<link rel="canonical" href="https://derez.ai/blog/posts/three-ways-integrate-odoo-hermes.html" />
|
|
<title>3 Ways to Integrate Odoo and Hermes Agent — derez.ai Blog</title>
|
|
<meta name="description" content="Direct XML-RPC API, Odoo MCP CLI client, or Hermes-to-n8n-to-Odoo pipeline — three proven approaches to connect Odoo with Hermes Agent. Trade-offs and when to use each." />
|
|
<meta property="og:type" content="article" />
|
|
<meta property="og:url" content="https://derez.ai/blog/posts/three-ways-integrate-odoo-hermes.html" />
|
|
<meta property="og:title" content="3 Ways to Integrate Odoo and Hermes Agent" />
|
|
<meta property="og:description" content="Direct XML-RPC API, Odoo MCP CLI client, or Hermes-to-n8n-to-Odoo pipeline — three proven approaches to connect Odoo with Hermes Agent. Trade-offs and when to use each." />
|
|
<meta name="twitter:card" content="summary_large_image" />
|
|
<meta name="twitter:title" content="3 Ways to Integrate Odoo and Hermes Agent" />
|
|
<script defer data-domain="derez.ai" src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.tagged-events.js"></script>
|
|
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet" />
|
|
<style>
|
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
body { background: #08080c; color: #e8e8f0; font-family: 'Inter', sans-serif; line-height: 1.7; padding: 40px 20px; }
|
|
.container { max-width: 720px; margin: 0 auto; }
|
|
a { color: #00f5ff; text-decoration: none; }
|
|
a:hover { text-decoration: underline; }
|
|
.back { margin-bottom: 32px; display: inline-block; font-size: 0.9rem; color: #888; }
|
|
.back:hover { color: #00f5ff; }
|
|
h1 { font-size: 1.9rem; font-weight: 700; line-height: 1.3; margin-bottom: 12px; }
|
|
.meta { font-size: 0.85rem; color: #888; margin-bottom: 40px; display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
|
|
.area-tag { display: inline-block; background: #a78bfa; color: #000; font-size: 0.75rem; font-weight: 700; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
|
|
.chip-tag { display: inline-block; background: rgba(0,245,255,0.1); color: #00f5ff; border: 1px solid rgba(0,245,255,0.3); font-size: 0.75rem; font-weight: 600; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
|
|
h2 { font-size: 1.3rem; font-weight: 600; margin: 36px 0 12px; color: #f0f0ff; }
|
|
h3 { font-size: 1.1rem; font-weight: 600; margin: 24px 0 8px; color: #e0e0f0; }
|
|
p { margin-bottom: 16px; color: #c8c8d8; }
|
|
ul, ol { margin: 0 0 16px 24px; color: #c8c8d8; }
|
|
li { margin-bottom: 6px; }
|
|
code { background: #0e0e14; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; color: #00f5ff; }
|
|
pre { background: #0e0e14; border: 1px solid #1a1a24; border-radius: 10px; padding: 16px 20px; margin: 0 0 20px; overflow-x: auto; font-size: 0.85rem; color: #c8f0ff; }
|
|
pre code { background: none; padding: 0; color: inherit; }
|
|
strong { color: #f0f0ff; }
|
|
.pro-tip { background: rgba(0,245,255,0.06); border-left: 3px solid #00f5ff; border-radius: 8px; padding: 16px 20px; margin: 20px 0; font-size: 0.92rem; color: #d0d0e0; }
|
|
.pro-tip strong { color: #00f5ff; }
|
|
.method-card { background: #0e0e14; border: 1px solid #1a1a24; border-radius: 14px; padding: 24px 28px; margin: 20px 0; }
|
|
.method-card h3 { margin-top: 0; }
|
|
.method-badge { display: inline-block; font-size: 0.7rem; font-weight: 700; padding: 2px 8px; border-radius: 4px; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 8px; }
|
|
.badge-fast { background: #00ff88; color: #000; }
|
|
.badge-mcp { background: #f472b6; color: #000; }
|
|
.badge-n8n { background: #ffaa00; color: #000; }
|
|
.method-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin: 12px 0; }
|
|
.method-stat { font-size: 0.85rem; color: #999; }
|
|
.method-stat span { color: #e0e0f0; font-weight: 600; }
|
|
.data-table { width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 0.88rem; }
|
|
.data-table th, .data-table td { text-align: left; padding: 8px 12px; border-bottom: 1px solid #1a1a24; }
|
|
.data-table th { color: #00f5ff; font-weight: 600; }
|
|
.data-table td { color: #c8c8d8; }
|
|
.data-table tr:last-child td { border-bottom: none; }
|
|
.cta-box { background: #12121c; border: 1px solid rgba(0,245,255,0.2); border-radius: 14px; padding: 28px 32px; margin: 32px 0; text-align: center; }
|
|
.cta-box h3 { font-size: 1.2rem; margin-bottom: 8px; color: #f0f0ff; }
|
|
.cta-box p { color: #999; margin-bottom: 16px; }
|
|
.btn { display: inline-block; background: transparent; border: 1px solid #00f5ff; color: #00f5ff; padding: 10px 28px; border-radius: 8px; font-weight: 600; font-size: 0.95rem; transition: all .2s; }
|
|
.btn:hover { background: rgba(0,245,255,0.1); text-decoration: none; }
|
|
@media (max-width: 600px) { body { padding: 24px 16px; } h1 { font-size: 1.5rem; } .cta-box { padding: 20px 16px; } .method-stats { grid-template-columns: 1fr; } }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<a class="back" href="https://derez.ai/#blog">← Back to Blog</a>
|
|
<h1>3 Ways to Integrate Odoo and Hermes Agent</h1>
|
|
<div class="meta">
|
|
<span>June 20, 2026</span>
|
|
<span class="area-tag">guide</span>
|
|
<span class="chip-tag">odoo</span>
|
|
<span class="chip-tag">hermes</span>
|
|
<span class="chip-tag">n8n</span>
|
|
</div>
|
|
|
|
<p>
|
|
Odoo is the most popular open-source ERP — CRM, sales, inventory, accounting, all in one system.
|
|
Hermes Agent is an open-source AI agent framework. Put them together and your agent can query customer records,
|
|
check inventory levels, create leads, generate invoices, and pull sales reports — all through natural language.
|
|
</p>
|
|
<p>
|
|
There are <strong>three proven ways</strong> to connect the two. Each offers a different balance of speed,
|
|
determinism, and architectural flexibility.
|
|
</p>
|
|
|
|
<h2>At a Glance</h2>
|
|
|
|
<table class="data-table">
|
|
<tr>
|
|
<th>Approach</th>
|
|
<th>Setup</th>
|
|
<th>Best For</th>
|
|
<th>Determinism</th>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>1. Direct XML-RPC API</strong></td>
|
|
<td>~3 min</td>
|
|
<td>Simple queries, quick demos</td>
|
|
<td>Low — LLM decides the call</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>2. Odoo MCP CLI Client</strong></td>
|
|
<td>~5 min</td>
|
|
<td>Multi-tool agents, MCP stacks</td>
|
|
<td>Medium — tool-bound</td>
|
|
</tr>
|
|
<tr>
|
|
<td><strong>3. Hermes → n8n → Odoo</strong></td>
|
|
<td>~10 min</td>
|
|
<td>Deterministic business processes</td>
|
|
<td><strong>High — step-by-step workflows</strong></td>
|
|
</tr>
|
|
</table>
|
|
|
|
<!-- METHOD 1 -->
|
|
<div class="method-card">
|
|
<div class="method-badge badge-fast">⚡ Fastest — 3 min</div>
|
|
<h3>Method 1: Direct XML-RPC API</h3>
|
|
<div class="method-stats">
|
|
<div class="method-stat">Setup: <span>~3 minutes</span></div>
|
|
<div class="method-stat">Latency: <span>1 hop</span></div>
|
|
<div class="method-stat">Determinism: <span>Low — LLM-driven</span></div>
|
|
<div class="method-stat">Best for: <span>Simple queries, demos</span></div>
|
|
</div>
|
|
<p>The simplest approach. You create a dedicated Odoo user with restricted permissions, paste the connection details into Hermes, and your agent calls the Odoo XML-RPC API directly. Hermes has built-in Odoo tool support — once configured, the agent can search, read, create, and update records on any Odoo model. This is the classic <strong><a href="https://derez.ai/odoo-hermes">Odoo Hermes</a></strong> setup.</p>
|
|
|
|
<h4>Setup</h4>
|
|
<ol>
|
|
<li>Generate an Odoo API key (Settings → Users → Technical)</li>
|
|
<li>Add the connection to Hermes' <code>config.yaml</code></li>
|
|
<li>Start Hermes — Odoo tools are available automatically</li>
|
|
</ol>
|
|
<pre><code># Hermes /.hermes/.env snippet
|
|
ODOO_URL=https://005-003-1bf12542-4710-45c2-9f8b-3a27d25031b7.odoo4projects.com/
|
|
ODOO_USER=changeme@odoo4projects.com
|
|
ODOO_APIKEY=198db28b752ccb4a66c646503902169e8b3a5b42
|
|
</code></pre>
|
|
|
|
Prompt:
|
|
|
|
<pre><code>
|
|
Connect to the odoo 19 database with the credentials given in
|
|
$ODOO_URL $ODOO_USER $ODOO_APIKEY
|
|
open <url>/doc and read the available models and methods.
|
|
Use the JSON api to connect and do not login to the web UI.
|
|
create a skill to access ODOO
|
|
return all data found in the crm database
|
|
</code></pre>
|
|
|
|
This aproach is awesome since we give hermes the whole JSON 2 API to study. In the video you see, that the skill learned every modell with every method.
|
|
<p><strong>When to use:</strong> Quick queries, one-off lookups, demos, and prototyping. The LLM decides which API calls to make, so it's fast but the agent may chain calls in unexpected ways.</p>
|
|
<p><strong>Deep dive:</strong> <a href="https://derez.ai/blog/posts/speed-run-odoo-community-agent.html">Speed Run: Create an Odoo Community Agent from Zero</a></p>
|
|
</div>
|
|
|
|
<!-- METHOD 2 -->
|
|
<div class="method-card">
|
|
<div class="method-badge badge-mcp">🚀 MCP — 5 min</div>
|
|
<h3>Method 2: Odoo MCP CLI Client</h3>
|
|
<div class="method-stats">
|
|
<div class="method-stat">Setup: <span>~5 minutes</span></div>
|
|
<div class="method-stat">Latency: <span>2 hops</span></div>
|
|
<div class="method-stat">Determinism: <span>Medium — tool-bound</span></div>
|
|
<div class="method-stat">Best for: <span>Multi-tool setups</span></div>
|
|
</div>
|
|
<p>The <a href="https://github.com/ivnvxd/mcp-server-odoo">mcp-server-odoo</a> project (315+ GitHub stars) exposes Odoo as a Model Context Protocol server. You run it as a CLI process, register it with Hermes via <code>hermes mcp add</code>, and the agent discovers Odoo tools automatically — <code>search_records</code>, <code>create_record</code>, <code>read_record</code>, and more.</p>
|
|
|
|
<h4>Setup</h4>
|
|
<ol>
|
|
<li>Clone the server: <code>git clone https://github.com/ivnvxd/mcp-server-odoo.git</code></li>
|
|
<li>Set environment variables (URL, db, user, API key)</li>
|
|
<li>Start: <code>uvx mcp-server-odoo</code></li>
|
|
<li>Register: <code>hermes mcp add odoo --url http://localhost:8000/mcp</code></li>
|
|
<li>Start Hermes — tools appear automatically</li>
|
|
</ol>
|
|
<pre><code>#!/usr/bin/env bash
|
|
export ODOO_URL="https://your-instance.odoo4projects.com"
|
|
export ODOO_DB="your-database"
|
|
export ODOO_USER="agent@company.com"
|
|
export ODOO_API_KEY="your...port ODOO_READONLY=1
|
|
export ODOO_MCP_TRANSPORT=streamable-http
|
|
export ODOO_MCP_PORT=8000
|
|
export ODOO_YOLO=read
|
|
|
|
uvx mcp-server-odoo</code></pre>
|
|
|
|
<p><strong>When to use:</strong> You want a standardized MCP protocol for all tool connections. If Hermes already talks to GitHub, Slack, or Notion via MCP, Odoo fits right into the same stack.</p>
|
|
<p><strong>Deep dive:</strong> <a href="https://derez.ai/blog/posts/speed-run-odoo-mcp.html">Speed Run: Connect Hermes Agent to Odoo via MCP</a></p>
|
|
</div>
|
|
|
|
<!-- METHOD 3 -->
|
|
<div class="method-card">
|
|
<div class="method-badge badge-n8n">⚙️ Deterministic — 10 min</div>
|
|
<h3>Method 3: Hermes → n8n → Odoo (The Favorite)</h3>
|
|
<div class="method-stats">
|
|
<div class="method-stat">Setup: <span>~10 minutes</span></div>
|
|
<div class="method-stat">Latency: <span>3 hops</span></div>
|
|
<div class="method-stat">Determinism: <span><strong>High — step-by-step</strong></span></div>
|
|
<div class="method-stat">Best for: <span>Business processes</span></div>
|
|
</div>
|
|
<p>This is the most powerful approach — and the personal favorite of the derez.ai founder. Instead of the agent calling Odoo directly, Hermes delegates Odoo operations to <strong>n8n workflows</strong> that execute deterministic, step-by-step business logic.</p>
|
|
|
|
<p><strong>Why this matters:</strong> An LLM calling the Odoo API directly might chain calls in unexpected ways. It could create an invoice without checking if the customer exists, or skip a product validation step. With n8n as the middle layer, every business process is a <strong>deterministic workflow</strong> — the same inputs always produce the same outputs, in the same order.</p>
|
|
|
|
<p>Here's how it works:</p>
|
|
|
|
<ol>
|
|
<li>Hermes Agent connects to n8n (via the <a href="https://derez.ai/blog/posts/speed-run-n8n-skill.html">official n8n skill</a>)</li>
|
|
<li>n8n hosts pre-built Odoo workflows — each one a complete business process</li>
|
|
<li>Hermes calls an n8n webhook, which triggers the workflow</li>
|
|
<li>The workflow executes deterministic steps against the Odoo API</li>
|
|
<li>n8n returns the result to Hermes</li>
|
|
</ol>
|
|
|
|
<h4>Example: Create an Invoice</h4>
|
|
<p>A typical n8n workflow for invoice creation might look like this:</p>
|
|
<pre><code>Step 1: Receive webhook from Hermes (customer name, product SKU)
|
|
Step 2: Search Odoo for the customer by name
|
|
Step 3: If customer not found → return error to Hermes
|
|
Step 4: Search Odoo for the product by SKU
|
|
Step 5: If product not found → return error to Hermes
|
|
Step 6: Create invoice header with customer ID
|
|
Step 7: Add invoice line with product ID, quantity, price
|
|
Step 8: Confirm invoice creation
|
|
Step 9: Return invoice number and status to Hermes</code></pre>
|
|
<p>Every step is deterministic — the workflow always checks for the customer first, then the product, then creates the invoice. No LLM hallucination in the middle of a billing process.</p>
|
|
|
|
<h4>Setup</h4>
|
|
<ol>
|
|
<li><strong>Install the n8n skill in Hermes</strong> — loads the n8n toolset: <code>hermes skills install n8n</code></li>
|
|
<li><strong>Build n8n workflows</strong> — create webhook-triggered workflows for each Odoo operation (create invoice, update lead, check inventory, generate report)</li>
|
|
<li><strong>Configure webhooks</strong> — each workflow exposes a unique webhook URL that Hermes can call</li>
|
|
<li><strong>Start Hermes</strong> — tell your agent "create an invoice for [customer] with [product]" and it delegates to n8n</li>
|
|
</ol>
|
|
|
|
<div class="pro-tip">
|
|
<p><strong>Pro Tip:</strong> This is the derez.ai founder's recommended approach for production. The n8n layer gives you audit trails, error handling, retries, and human-in-the-loop approval for critical operations — none of which an LLM calling the API directly can guarantee.</p>
|
|
</div>
|
|
|
|
<p><strong>Deep dive:</strong> <a href="https://derez.ai/blog/posts/speed-run-n8n-skill.html">Speed Run: Connect Hermes Agent to n8n in 10 Minutes</a></p>
|
|
</div>
|
|
|
|
<h2>Decision Guide</h2>
|
|
<ul>
|
|
<li><strong>Quick lookup or demo?</strong> → <strong>Direct API</strong>. Configure once, ask anything.</li>
|
|
<li><strong>Multi-tool agent on MCP?</strong> → <strong>Odoo MCP CLI</strong>. One protocol for everything.</li>
|
|
<li><strong>Production business process?</strong> → <strong>Hermes → n8n → Odoo</strong>. Deterministic workflows for invoices, orders, and data entry where every step must be predictable.</li>
|
|
</ul>
|
|
|
|
<h2>Security Best Practices</h2>
|
|
<ul>
|
|
<li><strong>Create a dedicated Odoo user</strong> for the agent — never use an admin account</li>
|
|
<li><strong>Use read-only access</strong> unless the agent needs to create or modify records</li>
|
|
<li><strong>Restrict model access</strong> to only the Odoo models the agent needs</li>
|
|
<li><strong>For n8n, use Odoo node credentials</strong> with the most restrictive user possible</li>
|
|
<li><strong>Rotate API keys</strong> periodically and revoke them immediately if they leak</li>
|
|
</ul>
|
|
|
|
<h2>Comparison Table</h2>
|
|
|
|
<table class="data-table">
|
|
<tr>
|
|
<th>Feature</th>
|
|
<th>Direct API</th>
|
|
<th>MCP CLI</th>
|
|
<th>n8n Pipeline</th>
|
|
</tr>
|
|
<tr>
|
|
<td>Setup time</td>
|
|
<td>~3 min</td>
|
|
<td>~5 min</td>
|
|
<td>~10 min</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Components</td>
|
|
<td>Hermes + Odoo</td>
|
|
<td>Hermes + MCP server + Odoo</td>
|
|
<td>Hermes + n8n + Odoo</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Determinism</td>
|
|
<td>Low (LLM-driven)</td>
|
|
<td>Medium (tool-bound)</td>
|
|
<td><strong>High (step-by-step)</strong></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Audit trail</td>
|
|
<td>None</td>
|
|
<td>None</td>
|
|
<td><strong>Full (n8n executions)</strong></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Error handling</td>
|
|
<td>LLM-dependent</td>
|
|
<td>LLM-dependent</td>
|
|
<td><strong>Built-in (retry, stop)</strong></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Best for</td>
|
|
<td>Simple queries, demos</td>
|
|
<td>Multi-tool MCP stacks</td>
|
|
<td>Invoice, order, data entry</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<div class="cta-box">
|
|
<h3>Try It Yourself — First Month Free</h3>
|
|
<p>Deploy a Hermes Agent with any of these Odoo integrations. Use coupon code <strong>blog950</strong> for your first month free.</p>
|
|
<a class="btn" href="https://derez.ai/#pricing">Get Your Agent →</a>
|
|
</div>
|
|
|
|
<p style="margin-top:48px;padding-top:24px;border-top:1px solid #1a1a2e;font-size:0.85rem;color:#666;">
|
|
<a href="https://derez.ai" style="color:#00f5ff">derez.ai</a> — Deploy your AI agent in 5 minutes. ·
|
|
<a href="https://derez.ai/blog/posts/speed-run-odoo-community-agent.html">Direct API Speed Run</a> ·
|
|
<a href="https://derez.ai/blog/posts/speed-run-odoo-mcp.html">MCP Speed Run</a> ·
|
|
<a href="https://derez.ai/blog/posts/speed-run-n8n-skill.html">n8n Speed Run</a>
|
|
</p>
|
|
</div>
|
|
</body>
|
|
</html>
|