Skip to content

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/chatgpt

Prefer 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:

  1. 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).
  2. 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 ↗.
  3. 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.
  4. 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        └─────────────────────┘            └──────────────┘
  1. Get a token from the Google-gated page — it proves who you are and issues a personal key.
  2. Add the Action to your Custom GPT: import the OpenAPI schema and paste the token.
  3. Ask — the GPT calls the gateway, which runs each tool against your Odoo with your permissions.

Step 1 · Get your API token

  1. Open https://mcp.planapulse.com/chatgpt and click Sign in with Google.
  2. Sign in with the same Google account your administrator added to the allowlist.
  3. 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):

  1. Go to chatgpt.com/gpts/editor (or the sidebar → GPTs+ Create).
  2. Open the Configure tab (Actions live here — not the default chat "Create" builder).
  3. Scroll to ActionsCreate new action.
  4. Under Schema, click Import from URL and paste:
    https://mcp.planapulse.com/chatgpt/openapi.json
    (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.
  5. Under Authentication, choose API Key, set Auth Type to Bearer, and paste your token. Save.
  6. 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:

bash
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:

ActionWhat it doesNeeds permission
odoo_search_read · odoo_readRead records matching a filter, or by idRead
odoo_search_countCount records (cheap)Read
odoo_read_groupAggregate — sums, averages, counts — for reportsRead
odoo_list_models · odoo_get_fields · odoo_name_searchDiscover models/fields, look up by nameRead
odoo_list_open_itemsList unreconciled journal itemsRead
odoo_create · odoo_write · odoo_unlinkCreate / update / delete recordsWrite / delete
odoo_reconcile_move_lines · odoo_unreconcile_move_linesReconcile journal itemsAccounting

Read actions are marked so ChatGPT can "always allow" them; write and reconcile actions ask for confirmation each time.

Troubleshooting

SymptomCauseFix
Google: "redirect_uri_mismatch"The gateway's redirect URI isn't registered yetPlatform-side setup — contact us ↗
Token page: "not a registered user"Your Google email isn't on the allowlistAsk your administrator
Action returns 401 "Invalid or missing API token"Token wrong, or revoked by generating a newer oneGet a fresh token at /chatgpt and update the Action
Action returns 403 "…requires the '…' MCP permission"Your role doesn't allow that write/reconcileAsk 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 setContact your administrator
Can't find Create / ActionsYou're on a free ChatGPT planBuilding Custom GPTs needs Plus/Team/Enterprise
Schema import failsURL blocked or pasted incompletelyPaste 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.

Last updated:

© PLANA Digital Ltd.