ChatGPT × Odoo (Custom GPT)
A ChatGPT Custom GPT can read and analyze your PLANA Business Cloud (Odoo) ERP in plain language — "how much did we invoice last month?", "which invoices are overdue?" — and the GPT queries Odoo for you and writes the answer.
Unlike Claude, Cursor or Gemini, Custom GPTs can't speak MCP — they call a plain REST API described by an OpenAPI schema ("Actions"). PLANA provides a small gateway on the same MCP server that exposes exactly those tools as REST, so your GPT connects over a single hosted endpoint:
https://mcp.planapulse.com/chatgptPrefer a native MCP client?
If you use Claude, Cursor, VS Code, OpenCode or Gemini, connect directly over MCP instead — it's simpler and needs no token. See Claude × Odoo, OpenCode × Odoo, or Gemini × Odoo. Use this ChatGPT guide only for Custom GPTs.
Permission-scoped — it connects as you
Your GPT can do exactly what your PLANA Pulse role allows: reading is always available; creating, updating or reconciling records only if an administrator has granted you those permissions (most accounts are read-only by default). It uses your own Odoo access, so you only ever see the data your Odoo account is already allowed to see. A blocked action returns a clear message.
Before you start
You need four things:
- A PLANA Business Cloud (Odoo) account with your Odoo API key already connected to the PLANA Odoo server (the same setup used for the MCP integration).
- Access granted by your PLANA administrator. Access is by invitation: an admin adds your Google email to the allowlist and binds it to your Odoo instance. If you haven't been added yet, ask us to enable your account ↗.
- A paid ChatGPT plan (Plus, Team, or Enterprise). Creating a Custom GPT with an Action is a paid feature — free ChatGPT accounts can't build GPTs. You can subscribe month-to-month and cancel after testing.
- Your token page:
https://mcp.planapulse.com/chatgpt.
How it works
┌──────────────┐ 1. Google sign-in ┌─────────────────────────┐
│ Token page │ ───── OAuth ───────▶ │ Google │
│ /chatgpt │ ◀──── you are X ──── └─────────────────────────┘
└──────┬───────┘ 2. copy API token
│
│ paste token into the GPT Action (Bearer)
▼
┌──────────────┐ 3. REST call ┌─────────────────────┐ as you ┌──────────────┐
│ Your Custom │ ────────────────▶ │ mcp.planapulse.com │ ─────────▶ │ Your Odoo │
│ GPT │ ◀──────────────── │ /chatgpt gateway │ ◀───────── │ (your rights)│
└──────────────┘ answer └─────────────────────┘ └──────────────┘- Get a token from the Google-gated page — it proves who you are and issues a personal key.
- Add the Action to your Custom GPT: import the OpenAPI schema and paste the token.
- Ask — the GPT calls the gateway, which runs each tool against your Odoo with your permissions.
Step 1 · Get your API token
- Open
https://mcp.planapulse.com/chatgptand click Sign in with Google. - Sign in with the same Google account your administrator added to the allowlist.
- Click Generate API token and copy it now — it's shown only once. Generating a new token revokes the old one.
Not a registered user?
If the page says your Google account isn't on the allowlist, no token is issued — ask your administrator to add you, or contact us ↗.
Step 2 · Add the Action to your Custom GPT
In ChatGPT (with a paid plan):
- Go to chatgpt.com/gpts/editor (or the sidebar → GPTs → + Create).
- Open the Configure tab (Actions live here — not the default chat "Create" builder).
- Scroll to Actions → Create new action.
- Under Schema, click Import from URL and paste:(If there's no "Import from URL" button, open that URL in your browser, copy the JSON, and paste it into the schema box.) The Odoo operations appear in the list.
https://mcp.planapulse.com/chatgpt/openapi.json - Under Authentication, choose API Key, set Auth Type to Bearer, and paste your token. Save.
- Save the GPT (top-right Create). Only me is fine — a private GPT needs no privacy policy.
Step 3 · Ask your ERP
In the GPT's preview pane (or after saving), ask in plain language:
- "How many customer invoices do we have this year, and what's the total?"
- "List my unpaid customer invoices over 30 days."
- "Break down this year's sales by month."
- "Who are our top 10 customers by revenue?"
Reads run without a prompt; if your role allows writes, ChatGPT will ask you to confirm each change before it's made.
Test without ChatGPT first
You can verify your token with a plain curl before building the GPT — this is exactly what ChatGPT does under the hood:
curl -X POST https://mcp.planapulse.com/chatgpt/t/odoo_search_count \
-H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"model":"account.move","filters":{"move_type":"out_invoice"}}'A JSON count means everything works.
What you can do
The gateway exposes generic Odoo tools — you rarely name them; just ask, and the GPT picks the right one:
| Action | What it does | Needs permission |
|---|---|---|
odoo_search_read · odoo_read | Read records matching a filter, or by id | Read |
odoo_search_count | Count records (cheap) | Read |
odoo_read_group | Aggregate — sums, averages, counts — for reports | Read |
odoo_list_models · odoo_get_fields · odoo_name_search | Discover models/fields, look up by name | Read |
odoo_list_open_items | List unreconciled journal items | Read |
odoo_create · odoo_write · odoo_unlink | Create / update / delete records | Write / delete |
odoo_reconcile_move_lines · odoo_unreconcile_move_lines | Reconcile journal items | Accounting |
Read actions are marked so ChatGPT can "always allow" them; write and reconcile actions ask for confirmation each time.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Google: "redirect_uri_mismatch" | The gateway's redirect URI isn't registered yet | Platform-side setup — contact us ↗ |
| Token page: "not a registered user" | Your Google email isn't on the allowlist | Ask your administrator |
| Action returns 401 "Invalid or missing API token" | Token wrong, or revoked by generating a newer one | Get a fresh token at /chatgpt and update the Action |
| Action returns 403 "…requires the '…' MCP permission" | Your role doesn't allow that write/reconcile | Ask an administrator to grant the role |
| Action returns "No Odoo instance is configured for you" | Your account isn't bound to an Odoo instance / no API key set | Contact your administrator |
| Can't find Create / Actions | You're on a free ChatGPT plan | Building Custom GPTs needs Plus/Team/Enterprise |
| Schema import fails | URL blocked or pasted incompletely | Paste the full JSON from the OpenAPI URL manually |
FAQ
Do I have to pay for ChatGPT?
To build a Custom GPT with an Action, yes — that's a paid ChatGPT feature (Plus and up). Getting the token from PLANA and calling the gateway (e.g. via curl) is free.
Can it change or delete data in my Odoo?
Only if your PLANA Pulse role grants it. By default accounts are read-only. Any write or reconcile action is also confirmed by ChatGPT before it runs.
Where is my token stored, and how do I revoke it?
Only a hash of the token is stored — the plaintext is shown once and never recoverable. Revoke it any time from https://mcp.planapulse.com/chatgpt (or just generate a new one, which revokes the old).
Is my activity logged?
Yes. Every tool call is recorded in an audit log (who, which tool, which model, status, timing) — metadata and short summaries only, never the contents of your ERP records.
Why not MCP, like the other assistants?
ChatGPT Custom GPTs don't support MCP — they only call REST "Actions". This gateway is a thin bridge that translates those REST calls into the same MCP tools, so nothing about your setup or permissions changes. Every other client should use the native MCP endpoint.
Which Odoo instance do I connect to?
The one your administrator assigned to your account — the same one used by the MCP integration. You don't choose it at connect time.