Files
derez.ai/blog/posts/odoo-xml-rpc-hermes-agent.html

242 lines
16 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/odoo-xml-rpc-hermes-agent.html" />
<title>Connect Odoo to Hermes Agent via XML-RPC — Complete Guide — derez.ai Blog</title>
<meta name="description" content="Step-by-step guide to connecting Odoo to Hermes Agent via XML-RPC. Real credentials included. Pull leads, sales orders, and inventory in under 5 minutes." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://derez.ai/blog/posts/odoo-xml-rpc-hermes-agent.html" />
<meta property="og:title" content="Connect Odoo to Hermes Agent via XML-RPC — Complete Guide" />
<meta property="og:description" content="Step-by-step guide to connecting Odoo to Hermes Agent via XML-RPC. Real credentials included. Pull leads, sales orders, and inventory in under 5 minutes." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Connect Odoo to Hermes Agent via XML-RPC — Complete Guide" />
<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; }
.chip-video { background: rgba(255,0,0,0.12); color: #ff4444; border: 1px solid rgba(255,0,0,0.35); }
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; }
.step-card { background: #0e0e14; border: 1px solid #1a1a24; border-radius: 14px; padding: 20px 24px; margin: 16px 0; }
.step-card h3 { margin-top: 0; font-size: 1.05rem; }
.step-num { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%; background: #00f5ff; color: #000; font-weight: 700; font-size: 0.85rem; margin-right: 8px; }
.prereq-group { margin-bottom: 16px; }
.prereq-group > .group-label { font-weight: 600; color: #00f5ff; margin-bottom: 4px; }
.cmd-block { background: #0a0a10; border: 1px solid #1a1a24; border-radius: 10px; padding: 14px 18px; margin: 12px 0; font-family: 'Courier New', monospace; font-size: 0.82rem; color: #c8f0ff; overflow-x: auto; }
.result-block { background: #0a0a10; border: 1px solid #1a1a24; border-left: 3px solid #00ff88; border-radius: 10px; padding: 14px 18px; margin: 12px 0; font-family: 'Courier New', monospace; font-size: 0.82rem; color: #88d8b0; overflow-x: auto; }
.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; } }
</style>
</head>
<body>
<div class="container">
<a class="back" href="https://derez.ai/#blog">&larr; Back to Blog</a>
<h1>Connect Odoo to Hermes Agent via XML-RPC</h1>
<div class="meta">
<span>June 29, 2026</span>
<span class="area-tag">guide</span>
<span class="chip-tag">odoo</span>
<span class="chip-tag">xml-rpc</span>
<span class="chip-tag">hermes</span>
<span class="chip-tag chip-video">video</span>
</div>
<p>
This is the first and simplest method from the <a href="https://derez.ai/blog/posts/three-ways-integrate-odoo-hermes.html?utm_source=derez&utm_campaign=email">three ways to integrate Odoo with Hermes Agent</a> — direct XML-RPC API calls.
Your agent connects straight to your Odoo instance, no middleware, no MCP server, no n8n pipeline.
Just your agent and your ERP talking directly. That's the core of <strong><a href="https://derez.ai/odoo-hermes">Odoo Hermes</a></strong>.
</p>
<p>
I made a <strong>YouTube short</strong> walking through this exact setup:
</p>
<div style="position:relative;width:100%;max-width:360px;margin:24px auto;aspect-ratio:9/16;border-radius:14px;overflow:hidden;background:#000">
<iframe src="https://www.youtube-nocookie.com/embed/GVZMnq_NOxI" title="Odoo + AI Agent in 3 Minutes (XML-RPC)" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe>
</div>
<p style="text-align:center;font-size:0.85rem;color:#888;margin-top:-12px">
<a href="https://www.youtube.com/shorts/GVZMnq_NOxI?utm_source=derez&utm_campaign=email" target="_blank" rel="noopener" style="color:#ff4444">Watch on YouTube →</a>
</p>
<h2>What you'll build</h2>
<p>By the end of this guide, your Hermes Agent will:</p>
<ul>
<li>Connect to your Odoo instance using an API key</li>
<li>Search and read records from any Odoo model</li>
<li>Pull live leads, sales orders, and inventory data</li>
<li>Answer business questions in natural language</li>
</ul>
<h2>Prerequisites</h2>
<p>You need a running Odoo instance and a Hermes Agent. Here are the exact credentials from my demo instance — use these to follow along, then swap in your own.</p>
<div class="prereq-group">
<div class="group-label">Integration &mdash; ODOO Community</div>
<p style="font-size:0.9rem;color:#999;margin-bottom:8px">These are live credentials from a demo Odoo Community instance on ODOO4projects. They work right now.</p>
<ul>
<li><strong>URL</strong> &mdash; <code>https://006-003-1d9183bb-8430-41a8-85a3-842b2b4d279d.odoo4projects.com/</code></li>
<li><strong>Username</strong> &mdash; <code>changeme@odoo4projects.com</code></li>
<li><strong>Password</strong> &mdash; <code>changeme</code></li>
<li><strong>Database</strong> &mdash; <code>006-003-1d9183bb-8430-41a8-85a3-842b2b4d279d</code></li>
<li><strong>API Key</strong> &mdash; <code>602e6ea0a0adda65b344a282495da3b05525f63f</code></li>
</ul>
</div>
<div class="prereq-group">
<div class="group-label">Runtime &mdash; Hermes Agent</div>
<ul>
<li>Hermes Agent installed and running (see the <a href="https://derez.ai/blog/posts/hermes-agent-setup-guide.html?utm_source=derez&utm_campaign=email">setup guide</a> if you're starting from zero)</li>
<li>Access to your Hermes <code>config.yaml</code></li>
</ul>
</div>
<h2>Step 1 — Generate an Odoo API Key</h2>
<div class="step-card">
<h3><span class="step-num">1</span> Go to Settings &rarr; Users &rarr; Technical</h3>
<p>In your Odoo instance, navigate to <strong>Settings → Users → select your user → Technical</strong>. Scroll to the <strong>Security</strong> section and click <strong>Generate API Key</strong>.</p>
<p>Name it something descriptive like <code>hermes-agent</code>. Copy the key immediately — Odoo only shows it once.</p>
</div>
<p>If you're using the demo instance above, the API key is already generated and ready.</p>
<h2>Step 2 — Add the Connection to Hermes</h2>
<p>Edit your Hermes <code>config.yaml</code> and add the Odoo connection block:</p>
<div class="cmd-block">
# ~/.hermes/config.yaml (or your profile config)<br />
<br />
odoo:<br />
&nbsp;&nbsp;url: "https://006-003-1d9183bb-8430-41a8-85a3-842b2b4d279d.odoo4projects.com"<br />
&nbsp;&nbsp;db: "006-003-1d9183bb-8430-41a8-85a3-842b2b4d279d"<br />
&nbsp;&nbsp;user: "changeme@odoo4projects.com"<br />
&nbsp;&nbsp;api_key: "602e6ea0a0adda65b344a282495da3b05525f63f"<br />
&nbsp;&nbsp;readonly: true
</div>
<p>Set <code>readonly: true</code> if the agent only needs to query data (recommended for first setup). Remove it or set <code>false</code> if you want the agent to create or modify records.</p>
<h2>Step 3 — Give Your Agent the Connection Prompt</h2>
<p>Now paste this prompt into your Hermes Agent session. It tells the agent exactly how to reach your Odoo database using the credentials from Step 2:</p>
<div class="cmd-block">
Connect to the ODOO 19 database with the credentials $ODOO_URL $ODOO_USER $ODOO_APIKEY<br>
open {url}/doc and read the available models and methods. Use the JSON api to connect to ODOO and do not login to the web UI.<br>
create a skill to access ODOO
</div>
<p>The agent reads the environment variables (or the config block you just set up) and establishes the XML-RPC connection. Once it confirms, you're ready to query data.</p>
<h2>Step 4 — Start Hermes and Verify</h2>
<p>Start or restart your Hermes Agent:</p>
<div class="cmd-block">
hermes start
</div>
<p>Now ask your agent something simple to verify the connection works:</p>
<div class="cmd-block">
> Give me a list of customers with their email addresses.
</div>
<p>If everything is configured correctly, the agent returns live data from your Odoo instance. Here's what it looks like with the demo instance:</p>
<div class="result-block">
Here are the customers I found in your Odoo instance:<br />
<br />
1. Azure Interior — azure.interior@example.com<br />
2. Deco Addict — deco.addict@example.com<br />
3. Gem Furniture — gem.furniture@example.com<br />
4. Lumber Inc — lumber.inc@example.com<br />
5. The Kitchen Studio — the.kitchen.studio@example.com<br />
6. Best Design — best.design@example.com<br />
7. Grace Interior Design Studio — grace.interior.design@example.com<br />
8. Capital Park — capital.park@example.com<br />
<br />
Total: 8 customers in CRM
</div>
<p>That's it. Three minutes, one config block, and your agent talks to Odoo.</p>
<h2>What you can do now</h2>
<p>Once the connection is live, try these queries:</p>
<ul>
<li><strong>"Show me all leads in the CRM"</strong> — pulls from <code>crm.lead</code></li>
<li><strong>"List my recent sales orders"</strong> — queries <code>sale.order</code></li>
<li><strong>"What products are low on stock?"</strong> — checks <code>stock.quant</code> for low quantities</li>
<li><strong>"What's the total value of open quotes?"</strong> — sums <code>sale.order</code> with <code>state = 'draft'</code></li>
<li><strong>"Create a new lead for ACME Corp"</strong> — if <code>readonly</code> is off, the agent creates records too</li>
</ul>
<h2>Security first</h2>
<ul>
<li><strong>Create a dedicated Odoo user</strong> for the agent — never use your 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 models the agent needs (CRM, Sales, Inventory — not Settings)</li>
<li><strong>Rotate the API key</strong> periodically, and revoke immediately if it leaks</li>
<li><strong>The demo credentials above</strong> are from a sandbox instance — use your own for production</li>
</ul>
<h2>Why XML-RPC?</h2>
<p>Direct XML-RPC is the fastest path: one hop, one config block, one less thing to break. No MCP server to maintain, no n8n workflow to debug. For simple queries, demos, and prototyping, it's the right choice.</p>
<p>If you need deterministic business processes with audit trails (invoice creation, order processing), the <a href="https://derez.ai/blog/posts/three-ways-integrate-odoo-hermes.html?utm_source=derez&utm_campaign=email">n8n pipeline approach</a> is better. But for 80% of what you'll ask your agent to do — "who are my customers?", "what's my pipeline?", "show me pending orders" — XML-RPC is all you need.</p>
<div class="pro-tip">
<strong>Pro tip:</strong> The YouTube short at the top of this page shows the whole setup in under a minute. Bookmark it for when you need a quick refresher — the steps don't change between instances, only the credentials.
</div>
<div class="cta-box">
<h3>Try It Yourself — First Month Free</h3>
<p>Deploy a Hermes Agent with Odoo XML-RPC integration. Use coupon code <strong>blog950</strong> for your first month free.</p>
<a class="btn" href="https://derez.ai/#pricing">Get Your Agent &rarr;</a>
</div>
<p style="margin-top:48px;padding-top:24px;border-top:1px solid #1a1a24;font-size:0.85rem;color:#666;">
<a href="https://derez.ai" style="color:#00f5ff">derez.ai</a> — Deploy your AI agent in 5 minutes. &middot;
<a href="https://derez.ai/blog/posts/three-ways-integrate-odoo-hermes.html?utm_source=derez&utm_campaign=email">3 Ways to Integrate Odoo + Hermes</a> &middot;
<a href="https://derez.ai/blog/posts/speed-run-odoo-community-agent.html?utm_source=derez&utm_campaign=email">Full Speed Run</a> &middot;
<a href="https://derez.ai/blog/posts/speed-run-odoo-mcp.html?utm_source=derez&utm_campaign=email">MCP Approach</a>
</p>
</div>
</body>
</html>