SETUP GUIDE · LOCAL COMMUNITY QUALIFICATION
Connect Odoo 20 to ChatGPT or Claude: Verify the First Read
Verify a known Odoo 20 read through ERPipe using a dedicated identity, an explicit instance and company checks before enabling writes.
Published: October 1, 2026 · Last updated: October 1, 2026 · Review by: October 31, 2026
Answer first
For an ERPipe connection, register https://mcp.erpipe.com/mcp in your AI client, authenticate to your ERPipe workspace, select an explicit Odoo instance, and verify one small read against Odoo. Keep connection writes disabled and leave write access ungranted during OAuth. The first acceptance result is a correct record from the intended company, with the intended permissions.
This guide covers the external gateway path. The Odoo 20 native MCP guide covers the database's own endpoint. If you are still choosing a route, use the native MCP versus ERPipe comparison first. The Odoo 20 AI overview explains the broader release context.
Qualification status, October 1, 2026: ERPipe's pinned Odoo 20 Community candidate passed local qualification. The hosted gateway is deployed, and authenticated production smoke through ERPipe’s public MCP endpoint to the pinned Community 20 lab passed. The broader workflow matrix remains local qualification evidence. This smoke does not qualify every customer installation. Check the compatibility matrix before using this path on your deployment. Enterprise, Odoo.sh, Odoo Online and custom workflows need separate qualification.
Prepare the identity before the assistant
Start with a staging database and a dedicated Odoo user. Give that user access to the business records needed for the first task, including the intended company. Choose records that the same user can inspect in Odoo. An administrator's successful search cannot establish what a restricted operator should receive.
For ERPipe's Odoo 20 JSON-2 transport, the qualified credential was an active user's RPC-scoped API key. Native Odoo MCP uses an MCP-scoped key; the credentials belong to different paths. The pinned Odoo source checks API-key scope explicitly, and the native MCP documentation describes its separate setup. Official users source, official native MCP instructions.
Keep the key in the ERPipe connection configuration. Do not paste it into the conversation or a support screenshot. Record its owner and expiry so that an authentication failure can be diagnosed without increasing permissions.
Add the database to the workspace
In the existing ERPipe connection flow, enter the Odoo HTTPS URL, database and credential. Hosted connections require a reachable public HTTPS destination. A local development URL is not a hosted connection target.
Keep writes off, run the connection probe, and note the instance key. One workspace endpoint can represent several databases; an Odoo-bound request must still identify which instance it targets. For a partner managing a test and a production database, those keys are an essential part of the task description.
The optional companion addons support specific qualified capabilities. They are not required merely to configure the client's ERPipe endpoint, and they are not an MCP server installed inside Odoo. Qualify document or business-action requirements separately after the basic read works.
Connect the client through OAuth
In ChatGPT, use the custom MCP app configuration available to your account and workspace. Supply the ERPipe endpoint, complete its OAuth flow, and make the app available in the conversation. Account eligibility, permissions and interface labels can change; follow OpenAI's current custom MCP instructions. An ERPipe workspace does not supply a ChatGPT subscription or administrative permission.
For Claude Code, add the remote server and complete its native OAuth flow:
claude mcp add --transport http --scope user erpipe https://mcp.erpipe.com/mcp
claude mcp login erpipe
claude mcp get erpipeIf that server name already exists, inspect the saved endpoint before adding another entry. These commands follow the existing ERPipe recipe and Anthropic's MCP documentation. Other Claude clients have their own connection interface; use the appropriate client setup reference.
At consent, leave write access ungranted. A connected indicator establishes client configuration; this writing pass did not perform a fresh ChatGPT or Claude end-to-end login.
Give the first read an expected answer
Use a known staging customer and one company. An illustrative prompt is:
> List the Odoo instances available to this workspace. Wait for my instance choice. On that instance, find at most five posted customer invoices for EXAMPLE_CUSTOMER in Company A. Return invoice number, date, currency and residual amount. Show the filters used. Read only; do not prepare or execute changes.
Replace the example with a record you know exists and fields your dedicated user may read. A company name in prose is insufficient: inspect the actual company context and filters returned by the tool. Model facts can help resolve the fields before searching.
Compare one invoice with Odoo under the same user. Check database, company, state and currency. Then test a record in Company B that this user should not access. An authorized empty result or access refusal can be correct; cross-company disclosure cannot.
Diagnose the failed layer
An empty instance list points first to workspace ownership, connection state or the live probe. An authentication rejection points to the key's scope, expiry or active user. An Odoo access error requires checking that user's permissions and record rules. Broadening gateway policy does not repair an Odoo permission gap.
A PDF refusal also has a specific meaning. The qualified candidate refuses opaque PDF output under field restrictions rather than claiming it can redact arbitrary report content. Prove the record read first, then use the company, write and PDF qualification checklist for the next stage.
Take the first step
Open your ERPipe workspace, keep writes disabled, and qualify one known Odoo 20 read before expanding access. Bring the exact version, company and expected record to the setup; that makes the result useful to your operator and your implementation partner.