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. You connect your Odoo API key yourself on the token page in Step 2 — no separate setup and no administrator needed.
- 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.
- Connect your Odoo on the same page by pasting your Odoo API 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 · Connect your Odoo
Still on https://mcp.planapulse.com/chatgpt, find Your Odoo connection. If it says "no API key stored", your GPT can't read anything from Odoo yet.
Create the key in Odoo:
- Open your Odoo (the page shows which instance) and log in.
- Click your avatar (top-right) → My Profile / Preferences.
- Open the Account Security tab.
- Click New API Key — Odoo may ask for your password or 2FA.
- Name it (e.g.
ChatGPT) and copy it now — Odoo shows it only once.
Then paste it into the API-key field on the token page and click Connect Odoo. The key is checked against your Odoo immediately, so a wrong or expired key is refused right there. On success the panel shows your Odoo login, user id and version.
You can Replace API key any time (for rotation) or Disconnect Odoo to remove it.
Never paste your API key into a chat
Type it only on the token page. Anything you type into ChatGPT is stored by OpenAI in your conversation history — which is exactly why the GPT itself has no "set my API key" action. Your key travels from your browser to PLANA and nowhere else, and is encrypted at rest.
"An administrator has to bind your account to an Odoo instance"
If you see this instead of a key field, your account isn't linked to an Odoo database yet. That part is admin-only — ask us to enable it ↗.
Step 3 · 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 4 · 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 API key configured for your account" | You haven't connected your Odoo yet | Do Step 2 — paste your Odoo API key on the token page |
| Action returns "No Odoo instance is configured for you" | Your account isn't bound to an Odoo database (admin-only) | Contact your administrator |
| Token page: "Odoo rejected the login/API key" | Wrong key, expired key, or the wrong Odoo login | Create a fresh API key in Odoo; if your Odoo login differs from your Google email, enter it in the second field |
| 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.