--- title: Codex description: "Add persistent memory to OpenAI Codex with the Mem0 plugin — MCP server, memory protocol skill, and plugin marketplace support." --- Add persistent memory to [**OpenAI Codex**](https://openai.com/index/codex/) with the Mem0 plugin. Codex forgets everything between tasks — this plugin fixes that by connecting to Mem0's cloud memory layer via MCP and using a skill-based memory protocol to automatically retrieve context and store learnings. ## Overview 1. **MCP Server** — Connect to Mem0's remote MCP server for memory tools (add, search, update, delete) 2. **Memory Protocol Skill** — Instructs the agent to retrieve memories at task start, store learnings on completion, and capture session state before context loss 3. **Plugin Marketplace** — Install via Codex's repo-level or personal plugin marketplace 4. **Zero local dependencies** — Cloud-hosted MCP server, no local setup required ## Prerequisites Before setting up Mem0 with Codex, ensure you have: 1. A Mem0 Platform account and API key: - Sign up at app.mem0.ai - Get your API key (starts with `m0-`) 2. OpenAI Codex access 3. Your API key exported in your shell: ```bash export MEM0_API_KEY="m0-your-api-key" ``` ## Installation ### Option A — Direct MCP (Recommended) The fastest way to connect Codex to Mem0 — no downloads, no marketplace. Codex reads MCP servers from `~/.codex/config.toml` as TOML. Add: ```toml [mcp_servers.mem0] url = "https://mcp.mem0.ai/mcp" bearer_token_env_var = "MEM0_API_KEY" ``` Make sure `MEM0_API_KEY` is exported in the shell you launch Codex from, then restart Codex. Codex's `codex mcp add` CLI only supports stdio MCP servers. Because Mem0's MCP is HTTP/streamable, you configure it by editing `config.toml` directly (or via the **Plugins → Connect to a custom MCP → Streamable HTTP** UI in the Codex app). ### Option B — Sideload the Plugin (Advanced) If you want the full plugin experience — MCP server **plus** the Mem0 SDK skill, memory protocol skill, and opt-in lifecycle hooks — sideload the plugin from a local clone. This follows the Codex [build-plugins](https://developers.openai.com/codex/plugins/build) local-testing workflow. Codex requires `source.path` in `marketplace.json` to be **relative** (start with `./`) and **inside the marketplace root**. For a personal install (`~/.agents/plugins/marketplace.json`), that root is your home directory (`~`), so the cloned plugin must live somewhere under `~/`. **Step 1.** Clone the Mem0 repository somewhere under your home directory: ```bash git clone https://github.com/mem0ai/mem0.git ~/codex-plugins/mem0-source ``` **Step 2.** Create `~/.agents/plugins/marketplace.json` with a path **relative to `~/`**: ```json { "name": "mem0-plugins", "interface": { "displayName": "Mem0 Plugins" }, "plugins": [ { "name": "mem0", "source": { "source": "local", "path": "./codex-plugins/mem0-source/mem0-plugin" }, "policy": { "installation": "AVAILABLE", "authentication": "ON_INSTALL" }, "category": "Productivity" } ] } ``` If you cloned somewhere else, substitute the path relative to `~/`. For example, a clone at `~/work/projects/mem0` becomes `./work/projects/mem0/mem0-plugin`. **Step 3.** Restart Codex, then run `codex /plugins`, browse the `Mem0 Plugins` marketplace, and install Mem0. **Step 4 (optional) — enable lifecycle hooks.** Codex hooks aren't wired in through the plugin manifest; run the installer once to write them into `~/.codex/hooks.json`: ```bash python3 ~/codex-plugins/mem0-source/mem0-plugin/scripts/install_codex_hooks.py ``` Then add the feature flag to `~/.codex/config.toml`: ```toml [features] codex_hooks = true ``` Restart Codex. This registers three hooks: `SessionStart` (loads prior memories as bootstrap context), `UserPromptSubmit` (injects relevant memories before each prompt), and `Stop` (reminds the agent to persist learnings at turn end). Re-running the installer is idempotent. To remove: `python3 .../install_codex_hooks.py --uninstall`. After either option, start a new Codex task and ask: *"List my mem0 entities"* or *"Search my memories for hello"*. If the `mem0` tools appear and respond, you're all set. ## What's Included | Component | Sideloaded Plugin | Direct MCP | |-----------|:-----------------:|:----------:| | MCP Server (9 memory tools) | Yes | Yes | | Memory Protocol Skill | Yes | No | | Mem0 SDK Skill | Yes | No | | Lifecycle Hooks (opt-in) | Yes | No | ## Available MCP Tools Once installed, the following tools are available in every Codex session: | Tool | Description | |------|-------------| | `add_memory` | Save text or conversation history for a user/agent | | `search_memories` | Semantic search across memories with filters | | `get_memories` | List memories with filters and pagination | | `get_memory` | Retrieve a specific memory by ID | | `update_memory` | Overwrite a memory's text by ID | | `delete_memory` | Delete a single memory by ID | | `delete_all_memories` | Bulk delete all memories in scope | | `delete_entities` | Delete a user/agent/app/run entity and its memories | | `list_entities` | List users/agents/apps/runs stored in Mem0 | ## Memory Protocol Skill When the plugin is sideloaded, the memory protocol skill instructs the agent to: ### On Every New Task 1. Call `search_memories` with a query related to the current task to load relevant context 2. Review returned memories to understand what was learned in prior sessions 3. Optionally call `get_memories` to browse all stored memories ### After Completing Significant Work Store key learnings using `add_memory` with structured metadata: | What to store | Metadata type | |--------------|---------------| | Architectural decisions | `{"type": "decision"}` | | Strategies that worked | `{"type": "task_learning"}` | | Failed approaches | `{"type": "anti_pattern"}` | | User preferences observed | `{"type": "user_preference"}` | | Environment discoveries | `{"type": "environmental"}` | | Conventions established | `{"type": "convention"}` | ### Before Losing Context Store a comprehensive session summary including goals, accomplishments, decisions, files modified, and current state with metadata `{"type": "session_state"}`. ## Plugin Manifest The Codex plugin manifest (`.codex-plugin/plugin.json`) follows the Codex plugin specification: ```json { "name": "mem0", "version": "0.1.0", "description": "Mem0 memory layer for AI applications.", "skills": "./skills/", "mcpServers": "./.codex-mcp.json", "interface": { "displayName": "Mem0", "shortDescription": "Persistent memory layer for AI coding workflows", "category": "Productivity", "capabilities": ["Read", "Write"] } } ``` ## Example Workflow ```text # Task 1: Setting up a new service You: Create a REST API for the notifications service using Express and TypeScript. # Codex searches memories, finds user preferences from prior tasks. # After completing the task, Mem0 stores: # - Decision: "Notifications service uses Express + TypeScript + Zod validation" # - Convention: "All API routes follow /api/v1/{resource} pattern" # - Preference: "User prefers explicit error types over generic catch-all" # Task 2 (days later): Extending the service You: Add WebSocket support for real-time notification delivery. # Codex searches memories, retrieves the architecture decisions and conventions. # Follows the same patterns established in the first task. ``` ## Troubleshooting - **"Connection failed"** — Verify `MEM0_API_KEY` is set in your shell: `echo $MEM0_API_KEY` - **No tools appearing** — Restart your Codex session after plugin installation - **`plugin/read failed in TUI`** — The `source.path` in your `marketplace.json` points to a directory that doesn't exist. Confirm you actually cloned the repo, then use a relative path (starting with `./`) from `~/` to `mem0-plugin/` inside your clone — e.g. if you cloned to `~/codex-plugins/mem0-source`, use `"./codex-plugins/mem0-source/mem0-plugin"`. The plugin must live inside the marketplace root (`~/` for personal installs). - **Plugin not found** — Ensure `marketplace.json` lives at `~/.agents/plugins/marketplace.json` (or `$REPO_ROOT/.agents/plugins/marketplace.json`) and `source.path` ends in `mem0-plugin` (not `plugins/mem0`). - **Skills not loading** — Verify the `skills` field in `plugin.json` points to a valid directory containing `SKILL.md` files. - **Hooks not firing** — Confirm `codex_hooks = true` is in `~/.codex/config.toml` under `[features]`, and that `~/.codex/hooks.json` contains the Mem0 entries (re-run the installer if not). Restart Codex after enabling the flag. Detailed MCP configuration for all clients } href="/integrations/claude-code"> Add Mem0 memory to Claude Code workflows