---
slug: chatgpt
title: "Connecting ChatGPT and ChatGPT classic"
description: "Both apps install together but their setup is the opposite. Classic uses an OAuth connector, ChatGPT uses a project-pinned API key."
lang: en
---


# Connecting ChatGPT and ChatGPT classic

## ⚠ First: there are two apps

OpenAI installs **two** apps together: **ChatGPT** and **ChatGPT classic**. The
names are similar but **they attach to AiAkiv in different ways.** What works in
one doesn't work in the other.

> What older material called **Codex** is today's **ChatGPT**. That's also why
> the config file is `.codex/config.toml`.

## At a glance

| | OAuth (account connector) | API key (`.codex/config.toml`) |
|---|---|---|
| **ChatGPT classic** · web | ✅ Register once on the web | - |
| **ChatGPT** | ❌ **Not available** | ✅ Put a key in the working folder |

- Register the account connector once and it's visible **on the web and in both
  apps.**
- The two setups **can sit side by side.** But you must register them under
  **different names** → §4
- Even so, **using only one is recommended** → §5

Where saving goes differs too. The account connector **follows Main** from the
console; a folder's key is **pinned to that project** ([Teams and
projects](teams-and-projects)).

## 1. ChatGPT classic: attaches via an OAuth connector

**Registration happens once, on the web.** You cannot create a connector from the
app.

1. Go to `chatgpt.com` **in a browser, not the app.**
2. Bottom-left user → **Settings → Security and login → Developer mode**, turn it
   on.
3. **Settings → Apps (connectors) → Create app** and enter the address below.
   (Plus and up.)

   ```
   https://mcp.aiakiv.com/mcp
   ```

4. **Turn it on per conversation.** Connectors are enabled per conversation.
   Press **+** in a new chat's composer and pick AiAkiv. Skip this and no tools
   appear in a new chat at all.

> **Developer mode is an OpenAI setting.** You turn it on to add a custom
> connector by hand. Once AiAkiv can be installed straight from OpenAI's plugin
> directory there is no connector to add by hand, so this step goes away too.
> If this procedure is a burden, use **§2's key method** instead. Though that
> only makes sense if you're on the **ChatGPT** app.

> **Saving goes to Main.** An account connector has no mechanism to pin a
> project, so it lands in the **Main** project set in the console. The
> check-target tool shows `binding` as **`"main"`**. To use different projects per
> folder, go to §2.

## 2. ChatGPT: no OAuth, attach with an API key

**OAuth is not usable here.** Neither a custom connector nor a config with the
`X-K2G-Project` header attaches. The one setup that works is a **project-pinned API key.**

With a key, **the authentication step disappears entirely.** Authentication is
already inside the key, so there's no sign-in window and no browser
([Authentication](auth)).

1. **Issue that project's API key** in the console (shown **once**, right after
   issuing).
   **Use a project key here.** A dynamic key attaches too, but **its save
   location moves with Main**, which defeats the point of pinning to a folder and
   makes it harder to tell where something was saved when you run both setups per
   §4. Use dynamic keys elsewhere ([Authentication](auth)).
2. Put the following in the working folder's **`.codex/config.toml`**. The file
   location is **the same for the app, the CLI, and the IDE extension.**

   ```toml
   [mcp_servers.AiAkiv-proj]
   url = "https://mcp.aiakiv.com/mcp"
   http_headers = { "Authorization" = "Bearer <your key>" }
   ```

3. **Restart the app.**

> **Don't name it `AiAkiv`.** There's a reason the example says `AiAkiv-proj`: if
> the name collides with §1's account connector you can no longer tell them
> apart. Details in §4. Any name works as long as it differs from the global one.

**The project is pinned into the key.** The coordinates are frozen inside it, so
this folder doesn't move when you change Main in the console. The check-target
tool shows `binding` as **`"api-key"`**.

> **⚠ The key is your ID card.** Leaking it means **handing over access to your
> memory wholesale**: don't commit `config.toml`. The full minimum is in [Key
> hygiene in Authentication](auth#key-hygiene).

## 3. Both setups meet inside one app

In the **ChatGPT** app, **both setups can be visible at once.**

- The **account connector** (§1) attaches to the account, so registering it on
  the web makes it visible in this app too.
- The **folder's key** (§2) is read when you start work in that folder.

So in the same app you end up with **chat going through the connector and folder
work going through the folder's key.** That isn't a problem in itself: but it
does start to get confusing which one saved where.

## 4. Running both: register different names

**§1 and §2 can be used simultaneously.** With one precondition.

> **The global and folder MCP server names must differ.**
>
> | | Name |
> |---|---|
> | Global: account connector | `AiAkiv` |
> | Folder: `.codex/config.toml` | **`AiAkiv-proj`** |

If both are `AiAkiv`, **there's no way to say which one to use.** The tool names
collide too, so the AI picks whichever it likes at the time and you only learn
where a save went afterwards. Split the names and you can start saying **"save
through `AiAkiv-proj`."**

The name doesn't have to be `AiAkiv-proj`. **It only has to differ from the
global one**: with several folders, something like `AiAkiv-<project>` that
identifies the project is better.

## 5. Recommended: use one, and if you use both, add a check

**Use either §1 or §2, not both.** With one setup there's no confusion about
where saving goes.

If you must run both, keep two habits.

1. **Name the side you want.** Split the names per §4 and say which one when you
   give work.
2. **Check the save target often.** See §Checking below. ChatGPT tends to call
   `get_save_target` on its own fairly readily, so it follows a request to
   check.

## Checking

Ask your AI before you start work.

```
where are you saving right now?
```

The AI calls `get_save_target` and reports back. The `binding` value tells you
which setup you're attached through.

| `binding` | Meaning |
|---|---|
| `"main"` | **§1 account connector**: follows Main from the console |
| `"api-key"` | **§2 the folder's key**: pinned to that project |

If the project name carries a **`(Main)` suffix**, you're following the global
Main.

> Every other value `binding` can take is in *Confirming it attached* in [Folder
> binding](folder-binding).

## Common problems

- **I don't know which app I opened.** If the icon says **ChatGPT**, use §2; if
  it says **ChatGPT classic**, use §1.
- **I added the folder config and it doesn't attach.** Check whether you used the
  OAuth form. **ChatGPT can't use OAuth**: it has to be §2's **key method**.
- **Saving goes to the wrong project.** This happens when both setups are on and
  the names are identical. Rename the folder side per §4.
- **No tools at all in a new chat.** Connectors are enabled **per conversation**:
  step 4 in §1.
- **I removed the connector, re-added it, and it won't attach.** The old state is
  cached → [Common problems](faq).

## Related

- Folder binding generally, and other clients → [Folder binding](folder-binding)
- Folder binding in Claude Desktop → [Claude Desktop](desktop-binding)
- Authentication (OAuth and API keys) and key hygiene → [Authentication](auth)
- The concepts of Main, projects, and the save target → [Teams and projects](teams-and-projects)
- Copying MCP config from the console → [Console](console)
