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_idandclient_secretyou generate yourself withopenssl 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.