Files
ODOO4projects.com/blog/posts/odoo-20-is-live-on-our-servers-with-an-mcp-server-and-free-backups.html
T
webmaster bd0881f882 cache-bust local assets; narrow the language facet to scores >= 3
Part 1 — asset versioning: every local <script src> and <link rel=stylesheet> on the
tracked pages now carries ?v=<sha256-of-the-file> (10 hex), computed at BUILD time from
the file's bytes by work/build-asset-versions.py — never hand-typed, and idempotent
(re-running with no file change rewrites nothing). This is what makes an edited
focus-rule.js / photo-upload.js a new URL instead of a stale cache hit.

Part 2 — language facet: a language now counts for the Language filter only when its
0-5 self-assessment is >= LANG_FACET_MIN (3 = 'works in it'). The constant sits beside
the 15-point rule in the page script and its mirror in build-directory.py. Nothing
stored changes; the card's languages chart still prints every language above 0, the
search box is unchanged, and the facet stays an exact membership test against the
card's value. A '1' language no longer offers the person under that language.
2026-11-03 21:26:58 +00:00

82 lines
7.4 KiB
HTML

<!doctype html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Odoo 20 Is Live on Our Servers — With an MCP Server and Free Backups | ODOO4projects</title>
<meta name="description" content="Two weeks. That is how long it took us to bring up Odoo 20 on our servers, with all of the new features that come with it. It is live now.But the version u" />
<link rel="canonical" href="https://odoo4projects.com/blog/posts/odoo-20-is-live-on-our-servers-with-an-mcp-server-and-free-backups.html" />
<meta property="og:title" content="Odoo 20 Is Live on Our Servers — With an MCP Server and Free Backups" />
<meta property="og:description" content="Two weeks. That is how long it took us to bring up Odoo 20 on our servers, with all of the new features that come with it. It is live now.But the version u" />
<meta property="og:type" content="article" />
<meta property="og:image" content="https://image.office.odoo4projects.com/img/ODOO_20_chatter.png" />
<meta name="twitter:card" content="summary_large_image" />
<link rel="icon" href="../../images/favicon.ico" />
<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:wght@400;500;600;700;800&family=Inter+Tight:wght@500;600;700;800&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" />
<link rel="stylesheet" href="../../style.css?v=3332fbba93" />
<style>
body { background: #0d1b2e; }
.blog-post { max-width: 720px; margin: 0 auto; padding: 3rem 1.5rem 6rem; color: #171c26; background: #faf7f1; min-height: 100vh; }
.blog-post h1 { font-family: 'Marcellus', Georgia, serif; font-size: 2.4rem; font-weight: 400; margin: 0 0 0.5rem; color: #0d1b2e; }
.blog-post .post-meta { font-family: Inter, sans-serif; font-size: 0.82rem; color: rgba(23,28,38,0.6); margin-bottom: 2rem; }
.blog-post .post-meta .badge { display: inline-block; font-size: 0.68rem; font-weight: 600; letter-spacing: 0.15em; text-transform: uppercase; color: #c9a227; margin-right: 0.75rem; }
.blog-post .post-image { width: 100%; border-radius: 0.75rem; margin-bottom: 2rem; box-shadow: 0 2px 8px rgba(13,27,46,0.08); }
.blog-post p { font-family: Inter, sans-serif; font-size: 1rem; line-height: 1.7; margin-bottom: 1.2rem; }
.blog-post h2 { font-family: 'Marcellus', Georgia, serif; font-size: 1.6rem; font-weight: 400; margin: 2rem 0 0.75rem; color: #0d1b2e; }
.blog-post h3 { font-family: 'Marcellus', Georgia, serif; font-size: 1.25rem; font-weight: 400; margin: 1.5rem 0 0.5rem; color: #0d1b2e; }
.blog-post ul, .blog-post ol { font-family: Inter, sans-serif; font-size: 1rem; line-height: 1.7; margin-bottom: 1.2rem; padding-left: 1.5rem; }
.blog-post li { margin-bottom: 0.3rem; }
.blog-post a { color: #8a6f1f; text-decoration: underline; }
.blog-post strong { font-weight: 600; }
.blog-post blockquote { border-left: 3px solid #c9a227; padding-left: 1rem; margin-left: 0; color: rgba(23,28,38,0.7); font-style: italic; }
.back-link { display: inline-block; margin-top: 2rem; font-family: 'Marcellus', Georgia, serif; font-size: 0.9rem; text-transform: uppercase; letter-spacing: 0.04em; color: #c9a227; text-decoration: none; }
.back-link:hover { text-decoration: underline; }
@media (max-width: 600px) { .blog-post h1 { font-size: 1.7rem; } .blog-post { padding: 2rem 1rem 4rem; } }
</style>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Odoo 20 Is Live on Our Servers — With an MCP Server and Free Backups",
"datePublished": "2026-10-06",
"url": "https://odoo4projects.com/blog/posts/odoo-20-is-live-on-our-servers-with-an-mcp-server-and-free-backups.html",
"image": "https://image.office.odoo4projects.com/img/ODOO_20_chatter.png",
"author": {
"@type": "Organization",
"name": "ODOO4projects",
"url": "https://odoo4projects.com/"
},
"publisher": {
"@type": "Organization",
"name": "ODOO4projects",
"url": "https://odoo4projects.com/",
"logo": {
"@type": "ImageObject",
"url": "https://odoo4projects.com/images/logo.png"
}
}
}
</script>
<!-- Privacy-friendly analytics by Plausible -->
<script async src="https://plausible.office.odoo4projects.com/js/pa-NhA7Rf-79VopXFQXhSS4e.js"></script>
<script>
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};
plausible.init()
</script>
</head>
<body>
<main class="blog-post">
<span class="badge">News</span>
<h1>Odoo 20 Is Live on Our Servers — With an MCP Server and Free Backups</h1>
<div class="post-meta">Oct 06, 2026</div>
<img src="https://image.office.odoo4projects.com/img/ODOO_20_chatter.png" alt="Odoo 20 Is Live on Our Servers — With an MCP Server and Free Backups" class="post-image" loading="lazy" />
<div class="post-body">
<p>Two weeks. That is how long it took us to bring up Odoo 20 on our servers, with all of the new features that come with it. It is live now.</p><p>But the version upgrade is not the whole story. Alongside it, we shipped a set of updates to our <a href="../../odoo-hosting-2027.html">management console</a> — the place where you manage your Odoo hosting from inside Odoo itself.</p><h2>An MCP Server for Your Agent</h2><p>The biggest addition is an MCP server that lets your agent control your Odoo hosting directly. That means an agent can:</p><ul><li>Restart the server</li><li>Upload modules</li><li>Add and check domains</li><li>Manage your backups</li><li>Read the logfiles</li></ul><p>Instead of clicking through menus to handle routine hosting tasks, you can hand them to an agent and stay focused on your actual work.</p><h2>Logfiles You Can Keep</h2><p>Logfiles can now be downloaded and archived. When something needs investigating, you can pull the logs and hold on to them, rather than scrolling through a live view and hoping the relevant lines are still there by the time you look.</p><h2>Free Backups for Everyone</h2><p>We also added a free backup scheme for every customer. Backups are the least glamorous part of hosting and the one you miss most when they are gone. Having a baseline in place for everyone meaningfully improves data security across the board.</p><h2>Better AI Server Management</h2><p>Finally, we improved our AI server management backend — the layer that connects the agent-facing tools to the underlying hosting infrastructure. It is now more capable and better suited to the way these tools are actually used.</p><h2>What It Adds Up To</h2><p>Odoo 20 running on our servers, a console that manages your Odoo from within Odoo, an MCP server that opens hosting tasks up to your agent, downloadable and archivable logfiles, a free backup scheme, and a stronger AI management backend. All of it is available now.</p><p>Take a look at our homepage and <a href="../../index.html#pricing">sign up for a trial</a> to see how it works in practice.</p>
</div>
<a href="../../index.html#blog" class="back-link">&larr; Back to the Blog</a>
</main>
</body>
</html>