Codex Memory MCP Server
Local stdio MCP server for long-term engineering memory, enabling Codex to store, search, and manage project facts, progress, interfaces, and troubleshooting cases.
README
Codex Memory MCP Server
Local stdio MCP server for long-term engineering memory.
This repository contains only the MCP service code, scripts, and tests. It does not include a user's private memory data directory, SQLite memory database, Codex config, hooks config, session logs, or API credentials.
The server is intentionally file-backed. It reads the existing Codex memory workspace and writes new ad-hoc notes only under:
%USERPROFILE%\.codex\memories\extensions\ad_hoc\notes
Tools:
search_engineering_memory: search Markdown and JSONL memory files.read_engineering_memory: read a memory file by relative path.list_engineering_memory_files: list readable memory files.add_engineering_memory_note: append a timestamped note when the user has explicitly asked to save or update long-term memory.get_project_memory_context: build the project memory context for a cwd.get_project_engineering_context: build compact structured project context, including recent progress, project facts, interfaces, pin map, baud rates, and resource paths.search_project_memory: search memory scoped to a project cwd.list_memory_projects: list indexed project memory roots.refresh_project_resources: index matching file paths from shared project-resource folders.list_project_resources: list indexed project resource file locations.upsert_project_fact: record or update one observed project fact.list_project_facts: list structured project facts.update_project_progress: append a structured project progress entry.list_project_progress: list recent project progress entries.upsert_project_action_config: record one standard project action command for build, flash, monitor, clean, test, or reset.list_project_action_configs: list stored standard action commands.upsert_project_interface: record UART/interface details such as baud rate, TX/RX pins, protocol, and settings.list_project_interfaces: list structured project interfaces.upsert_project_pin: record one pin-map row for wiring cross-checks.list_project_pin_map: list structured pin mappings.search_troubleshooting_memory: search indexed fault patterns and reminders.list_troubleshooting_memory_cases: list troubleshooting cases in SQLite.
Tool responses are compact JSON. Successful calls include "ok": true; invalid
arguments or blocked paths return "ok": false with an error string.
Codex starts this server through your Codex config, typically
%USERPROFILE%\.codex\config.toml on Windows.
Automatic turn summaries
Codex can also run scripts\codex-turn-summary-hook.cmd from the global
%USERPROFILE%\.codex\hooks.json Stop hook. The hook records each completed
turn as a new global note under the same ad-hoc notes directory. It records a
copy under the project memory folder only when the turn is classified as
project_engineering; Codex/MCP/hook/config work is classified as
global_infrastructure and stays global-only. It reads the hook payload from
stdin and never modifies existing memory files.
The add_engineering_memory_note MCP tool is still explicit-only. Automatic
turn summaries are written by the Stop hook, not by MCP tool calls.
Codex renders hook systemMessage output as a warning line in the CLI, so
display output is disabled by default. To test the optional display path, set
CODEX_TURN_SUMMARY_DISPLAY=systemMessage; the hook will then return a compact
message like /* 本轮总结:... */.
Troubleshooting index
Fault-pattern reminders are stored in the same SQLite database under the
troubleshooting_cases table. The search tool can return at most the top 3
matching reminders. UserPromptSubmit runs in silent mode by default so the
Codex CLI does not print hook context blocks on every prompt. Set
CODEX_PROJECT_CONTEXT_HOOK_MODE=alerts to inject only troubleshooting
reminders, or CODEX_PROJECT_CONTEXT_HOOK_MODE=full to inject full project
memory context.
Project memory
Project-scoped memory is stored under:
%USERPROFILE%\.codex\memories\projects\<project-slug>
Project metadata and turn summaries are indexed in SQLite at:
%USERPROFILE%\.codex\memories\engineering_memory.sqlite
The project root is the nearest parent containing .git; if no git repository
exists, the current working directory is used. In default silent mode,
UserPromptSubmit refreshes project resource indexes but does not return
additionalContext, avoiding noisy CLI output. Project memory remains available
through get_project_memory_context, search_project_memory, and
list_project_resources. Global infrastructure work, such as changing this MCP
server, Codex hooks, or Codex config, is retained in global long-term memory
instead of being added to an unrelated engineering project.
First project scan
When a project is first resolved, the MCP creates or updates the project
profile.md with a deterministic first-pass scan. The scan records:
- project type
- build system
- entry files
- main modules
- driver directories
- config files
- flash method
- test method
- potential risks
The scanner is intentionally conservative. It reads only small text snippets
needed to detect entry points and build/test targets, ignores generated/vendor
directories such as build, dist, .git, and node_modules, and stores
paths plus summaries instead of copying source contents. If an existing profile
already has ## First Scan, it is left unchanged. If a profile exists without
that section, the scan section is inserted before ## Stable Notes so manual
notes are preserved.
Structured project engineering memory
Project memory now has structured SQLite tables for data that should be retrieved precisely instead of only searched as prose:
project_facts: project code/name, chip model, hardware revision, build and flash commands, default baud rate, source path, confidence, and verification flag.project_progress: compact work progress entries from the Stop hook or theupdate_project_progresstool, including status, completed work, blockers, next steps, and verification notes.project_actions: standard build/flash/monitor/clean/test/reset action commands, device IDs, framework type, config file path, timeout, risk, and verification flag.project_interfaces: UART/I2C/SPI/CAN/network/debug interfaces, including UART number, baud rate, TX/RX pins, protocol, and JSON settings.project_pin_map: board/peripheral/signal/GPIO/net/connector/direction rows for schematic, EDA netlist, and firmware wiring cross-checks.
resolve_project() automatically records identity facts for each project:
project.code, project.root, and project.memory_slug. Turn summaries from
project engineering work are also inserted into project_progress so the
latest work state can be queried without reading every Markdown turn file.
The structured upsert tools should store only observed or explicitly confirmed facts. For engineering documents, schematic PDFs, and EDA netlists, store the file location and extracted fact rows; do not copy whole document contents into long-term memory.
Project resource path index
The project memory layer can also index file locations from shared engineering resource folders. This is configured with:
CODEX_PROJECT_RESOURCE_ROOTS=C:\path\to\shared\engineering-resources
The scanner matches files by project aliases such as repository name, nearby path segments, and git remote repository name. It indexes likely resource files only: documents, PDFs, spreadsheets, text/Markdown notes, archives, EDA netlists, and files whose names clearly look like netlists or schematics. It stores only file paths and metadata in SQLite, not file contents. Indexed metadata includes path, root, file name, extension, type, size, modified time, matched alias, and match score.
Resource paths are stored in the project_resources SQLite table and are
included in auto-mounted project context under Project Resource Paths. EDA
netlists and schematic PDFs are classified as eda_netlist and schematic_pdf
so they appear near the top for wiring cross-check tasks.
If a turn summary mentions a file path inside the configured resource folders,
the Stop hook also binds that path to the current project with
matched_alias=mentioned_in_turn. This handles ambiguous files such as a generic
Netlist_Schematic2_2026-03-19.tel whose name does not contain the project
identifier.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.