ChatGPT integration

Give ChatGPT a memory you actually own.

ChatGPT can persist memory across conversations using your own infrastructure as the source of truth. The Remnic developer-mode app speaks MCP over OAuth 2.1 against a server you run, so the canonical store stays on your filesystem as plain markdown, governed by your config.

How it works

This is the public MCP flow ChatGPT itself uses, not the local widget path. ChatGPT's backend reaches your server over public HTTPS, so you expose the local daemon through a tunnel and Remnic acts as the OAuth authorization server. There is no third-party identity provider: you mint the client_id and client_secret yourself and paste the same values into ChatGPT.

OpenAI no longer disables built-in memory and tools when you connect a custom MCP server, so Remnic runs alongside ChatGPT's native capabilities rather than replacing them. The connector id is chatgpt and its tokens carry the remnic_cg_ prefix.

Honest privacy note

Local source of truth, processed by OpenAI. The canonical memory store lives on your filesystem, and Remnic never sends memory to a third party on its own. But when ChatGPT invokes Remnic's recall or memory_store tools, the memory content in those requests and responses transits OpenAI's tool pipeline. Treat what you expose accordingly.

Linking the app does not make Remnic a global memory layer across all of ChatGPT. You select or add the Remnic app in a conversation before ChatGPT will use its tools. Chats where the app is not selected neither read nor write Remnic memory.

Requirements

  • A ChatGPT plan on the web: Pro, Plus, Business, Enterprise, or Edu. The developer-mode MCP flow is a ChatGPT web feature and is not available on the mobile or desktop clients.
  • Developer mode enabled: ChatGPT web, Settings, Security and login, Developer mode.
  • A Remnic server running locally, exposed over public HTTPS through Tailscale Funnel or a Cloudflare Tunnel.
  • A client_id and client_secret you generate yourself with openssl rand -hex 32.

Setup

Start the daemon and expose it over a tunnel:

export REMNIC_AUTH_TOKEN=$(openssl rand -hex 32)
remnic daemon start
remnic status
sudo tailscale funnel 4318            # public HTTPS URL for the daemon

Configure Remnic as the OAuth authorization server (for example in ~/.config/remnic/config.json):

{
  "server": {
    "oauth": {
      "enabled": true,
      "issuerUrl": "https://<node>.<tailnet>.ts.net",
      "clientId": "remnic-chatgpt",
      "clientSecret": "<openssl rand -hex 32 output>",
      "tokenEndpointAuthMethod": "client_secret_post",
      "redirectUris": [],
      "approvalTtlSeconds": 600
    }
  }
}

Restart the server, then create a developer-mode app at chatgpt.com/plugins: set the MCP server URL to <issuerUrl>/mcp, choose OAuth, and paste the same client_id and client_secret. ChatGPT shows a per-app redirect URL; add it byte-for-byte to redirectUris and restart again.

Approve the link locally

When ChatGPT starts the authorization-code plus PKCE flow, you approve it on the machine running Remnic. The browser page never asks for a credential: it shows an approval ref you confirm from the CLI.

remnic oauth pending
remnic oauth approve <ref> --yes

Verify the client, redirect, scopes, and resource match what you expect before approving. Full walkthrough: docs/integration/chatgpt.md.

Remnic was formerly named engram. Legacy names remain during the compatibility window. See the rename note.