{"id":50928727,"url":"https://github.com/verrysimatupang99/codex-dev-mcp-suite","last_synced_at":"2026-06-17T02:01:16.515Z","repository":{"id":364448374,"uuid":"1267969155","full_name":"verrysimatupang99/codex-dev-mcp-suite","owner":"verrysimatupang99","description":"Four local, file-based MCP servers for solo devs/vibecoders: persistent memory, session handoff/resume, file checkpoints, token-efficient project briefings. Works with any MCP client.","archived":false,"fork":false,"pushed_at":"2026-06-13T03:00:31.000Z","size":46,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-13T04:25:28.058Z","etag":null,"topics":["ai-memory","claude-code","codex","developer-tools","llm","mcp","model-context-protocol"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/verrysimatupang99.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-13T02:53:05.000Z","updated_at":"2026-06-13T03:00:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/verrysimatupang99/codex-dev-mcp-suite","commit_stats":null,"previous_names":["verrysimatupang99/codex-dev-mcp-suite"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/verrysimatupang99/codex-dev-mcp-suite","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verrysimatupang99%2Fcodex-dev-mcp-suite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verrysimatupang99%2Fcodex-dev-mcp-suite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verrysimatupang99%2Fcodex-dev-mcp-suite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verrysimatupang99%2Fcodex-dev-mcp-suite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/verrysimatupang99","download_url":"https://codeload.github.com/verrysimatupang99/codex-dev-mcp-suite/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verrysimatupang99%2Fcodex-dev-mcp-suite/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34430688,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-17T02:00:05.408Z","response_time":127,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-memory","claude-code","codex","developer-tools","llm","mcp","model-context-protocol"],"created_at":"2026-06-17T02:01:02.096Z","updated_at":"2026-06-17T02:01:16.510Z","avatar_url":"https://github.com/verrysimatupang99.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dev MCP Suite\n\n[![CI](https://github.com/verrysimatupang99/codex-dev-mcp-suite/actions/workflows/ci.yml/badge.svg)](https://github.com/verrysimatupang99/codex-dev-mcp-suite/actions/workflows/ci.yml)\n[![npm version](https://img.shields.io/npm/v/codex-dev-mcp-suite.svg)](https://www.npmjs.com/package/codex-dev-mcp-suite)\n[![npm downloads](https://img.shields.io/npm/dm/codex-dev-mcp-suite.svg)](https://www.npmjs.com/package/codex-dev-mcp-suite)\n[![license](https://img.shields.io/npm/l/codex-dev-mcp-suite.svg)](./LICENSE)\n[![node](https://img.shields.io/node/v/codex-dev-mcp-suite.svg)](https://nodejs.org)\n\nPublished as `codex-dev-mcp-suite` for backward compatibility.\n\nFour local, file-based MCP servers for solo developers and vibecoders who keep\nlosing context when sessions hit \"input too long\" / get compacted / restart.\nStop re-pasting context across sessions.\n\nAll servers are **local, dependency-light (only the MCP SDK), and split storage\nper-project** by the working directory. Works with any MCP-capable client\n(Codex CLI, Claude Code, Cursor, Cline, Gemini-compatible launchers, Hermes,\nor any stdio MCP host).\n\n## Quickstart\n\nTry it in 10 seconds (no clone, no config):\n\n```bash\nnpx -y -p codex-dev-mcp-suite project-memory-mcp --help\n```\n\nLocal-first by default: no hosted backend, no telemetry. Works offline with\nkeyword recall; model/provider config is optional. For strict no-network mode,\nset `MCP_DETERMINISTIC_FALLBACK=true`.\n\nRegister all four servers with an MCP client (Codex CLI shown):\n\n```toml\n# ~/.codex/config.toml\n[mcp_servers.project-memory]\ncommand = \"npx\"\nargs = [\"-y\", \"-p\", \"codex-dev-mcp-suite\", \"project-memory-mcp\"]\n\n[mcp_servers.devjournal]\ncommand = \"npx\"\nargs = [\"-y\", \"-p\", \"codex-dev-mcp-suite\", \"devjournal-mcp\"]\n\n[mcp_servers.checkpoint]\ncommand = \"npx\"\nargs = [\"-y\", \"-p\", \"codex-dev-mcp-suite\", \"checkpoint-mcp\"]\n\n[mcp_servers.context-pack]\ncommand = \"npx\"\nargs = [\"-y\", \"-p\", \"codex-dev-mcp-suite\", \"context-pack-mcp\"]\n```\n\nInspect any server without starting it:\n\n```bash\nproject-memory-mcp --version\nproject-memory-mcp --doctor   # config diagnostics; API keys redacted\n```\n\nOther clients (Claude Code, Cursor, Cline, ...): see\n[`docs/clients/`](docs/clients/). Full env reference:\n[`docs/configuration.md`](docs/configuration.md). Data flow:\n[`docs/privacy.md`](docs/privacy.md).\n\n## The four servers\n\n| Server | What it does | Key tools |\n|---|---|---|\n| **project-memory** | Searchable Markdown knowledge vault (Obsidian-style notes + on-demand recall). Notes are also exposed as MCP resources. | `memory_save`, `memory_recall`, `memory_list`, `memory_get`, `memory_delete`, `memory_reindex` |\n| **devjournal** | Per-project session timeline + handoff/resume (anti-compaction). | `journal_log`, `journal_handoff`, `journal_resume`, `journal_timeline`, `journal_search`, `journal_clear_handoff` |\n| **checkpoint** | Git-independent file snapshots for safe experimentation. | `checkpoint_create`, `checkpoint_list`, `checkpoint_diff`, `checkpoint_restore`, `checkpoint_delete` |\n| **context-pack** | Token-efficient project briefing (stack, tree, symbols, search). | `pack_overview`, `pack_tree`, `pack_outline`, `pack_search` |\n\n## Recall quality (project-memory \u0026 devjournal)\n\nRecall auto-selects the best available mode:\n\n1. **semantic** — if an embeddings endpoint is configured (any OpenAI-compatible `/v1/embeddings`: OpenAI, Ollama, LM Studio, OpenRouter, vLLM, LiteLLM, 9router, ...)\n2. **rerank** — keyword prefilter then an LLM reranker (any OpenAI-compatible chat model)\n3. **keyword** — always-available offline fallback\n\nAll network features degrade gracefully: no endpoint = keyword mode, never an error.\nUse the neutral `MCP_*` environment variables for new installs; legacy\n`NINEROUTER_*` and `LLM_*` variables are still supported. See\n[`docs/configuration.md`](docs/configuration.md).\n\nNeed hard local-only behavior? Set `MCP_DETERMINISTIC_FALLBACK=true` to disable\nembeddings/rerank even if model keys are present; results are labeled\n`[deterministic]`.\n\n## Install\n\nRequires Node.js \u003e= 18.\n\n### Quickest: run via npx (no clone)\n\nPoint your MCP client at the published package — no install step needed:\n\n```toml\n# Codex CLI ~/.codex/config.toml\n[mcp_servers.project-memory]\ncommand = \"npx\"\nargs = [\"-y\", \"-p\", \"codex-dev-mcp-suite\", \"project-memory-mcp\"]\n\n[mcp_servers.devjournal]\ncommand = \"npx\"\nargs = [\"-y\", \"-p\", \"codex-dev-mcp-suite\", \"devjournal-mcp\"]\n\n[mcp_servers.checkpoint]\ncommand = \"npx\"\nargs = [\"-y\", \"-p\", \"codex-dev-mcp-suite\", \"checkpoint-mcp\"]\n\n[mcp_servers.context-pack]\ncommand = \"npx\"\nargs = [\"-y\", \"-p\", \"codex-dev-mcp-suite\", \"context-pack-mcp\"]\n```\n\nOr install globally: `npm i -g codex-dev-mcp-suite` → commands\n`project-memory-mcp`, `devjournal-mcp`, `checkpoint-mcp`, `context-pack-mcp`.\n\n### From source\n\n```bash\ngit clone https://github.com/\u003cyou\u003e/codex-dev-mcp-suite.git\ncd codex-dev-mcp-suite\n# install the MCP SDK in each server\nfor s in project-memory checkpoint context-pack devjournal; do (cd \"$s\" \u0026\u0026 npm install); done\n```\n\n### Register with your MCP client\n\nClient-specific examples:\n\n- [Codex CLI](docs/clients/codex.md)\n- [Claude Code](docs/clients/claude-code.md)\n- [Generic MCP JSON](docs/clients/generic-mcp.md)\n\n**Codex CLI** (`~/.codex/config.toml`):\n\n```toml\n[mcp_servers.project-memory]\ncommand = \"node\"\nargs = [\"/abs/path/codex-dev-mcp-suite/project-memory/server.js\"]\n[mcp_servers.project-memory.env]\nMEMORY_VAULT_DIR = \"~/.codex/memories/vault\"\n# optional recall upgrades (see .env.example and docs/configuration.md)\n# MCP_LLM_BASE_URL = \"http://localhost:11434/v1\"   # any OpenAI-compatible endpoint\n# MCP_LLM_API_KEY = \"...\"\n# MCP_RERANK_MODEL = \"llama3.1:8b\"\n\n[mcp_servers.checkpoint]\ncommand = \"node\"\nargs = [\"/abs/path/codex-dev-mcp-suite/checkpoint/server.js\"]\n\n[mcp_servers.context-pack]\ncommand = \"node\"\nargs = [\"/abs/path/codex-dev-mcp-suite/context-pack/server.js\"]\n\n[mcp_servers.devjournal]\ncommand = \"node\"\nargs = [\"/abs/path/codex-dev-mcp-suite/devjournal/server.js\"]\n[mcp_servers.devjournal.env]\nJOURNAL_DIR = \"~/.codex/memories/journal\"\n```\n\n**Claude Code / Cursor / Cline / other MCP clients** (`mcpServers` JSON): same\nidea — use the npm bin commands (`project-memory-mcp`, `devjournal-mcp`,\n`checkpoint-mcp`, `context-pack-mcp`) or `node /abs/path/\u003cserver\u003e/server.js`,\nwith optional `env`.\n\n## Daily workflow\n\n- Session start: `pack_overview` + `journal_resume` + `memory_recall \"\u003ctopic\u003e\"`\n- Before a risky change: `checkpoint_create`\n- While working: `memory_save` (durable facts), `journal_log` (events/blockers)\n- Session end / before compaction: `journal_handoff`\n\n## Optional: import your existing Codex history\n\n`backfill-sessions-v2.mjs` reads `~/.codex/sessions/*.jsonl` and imports each\nsession (prompts, plan, commands, files touched) into project-memory + devjournal,\ngrouped by project, backdated to the original session time.\n\n```bash\nnode backfill-sessions-v2.mjs --dry --min-prompts 2     # preview\nnode backfill-sessions-v2.mjs --min-prompts 2           # import\n```\n\n## Stats CLI\n\nA read-only summary of your local memory storage — totals, top projects,\nrecent activity, and temp-slug cleanup candidates.\n\n```bash\nnpx -y -p codex-dev-mcp-suite stats             # human-readable\nnpx -y -p codex-dev-mcp-suite stats --json      # machine-readable\nnpx -y -p codex-dev-mcp-suite stats --root /tmp/mem   # different root\nnpx -y -p codex-dev-mcp-suite stats --top 5     # trim top lists\n```\n\nExample output:\n\n```\nDev MCP Suite — stats\n======================\nStorage root: /home/you/.codex/memories\n\nTotals\n------\n  Notes:           89\n  Journal projects:19\n  Checkpoints:     1\n  Distinct projects: 25\n\nTop projects by notes (top 10)\n------------------------\n    24  mrtrickster99-fd1ff0fa\n    14  Coding-17e063ef\n    ...\n\nTemp/cleanup candidates (2)\n------------------------\n  tmp.itbtDn9eB3-b62798fd\n  tmp.iHqM2Uh5K2-8d3660a2\n```\n\nThe CLI is a thin wrapper around `lib/stats.js`, which is also importable\ndirectly from your own scripts. The default storage root is\n`~/.codex/memories`, but `--root` (or the existing `MEMORY_VAULT_DIR` /\n`JOURNAL_DIR` / `CHECKPOINT_DIR` env vars) override it.\n\n\n## Prune CLI\n\nRemove temp project slugs (prefix `tmp.`) from vault / journal / checkpoints.\nDefault is DRY-RUN — nothing is deleted without `--yes`.\n\n```bash\nnpx -y -p codex-dev-mcp-suite prune           # dry-run report\nnpx -y -p codex-dev-mcp-suite prune --yes     # actually delete\nnpx -y -p codex-dev-mcp-suite prune --json    # machine-readable\nnpx -y -p codex-dev-mcp-suite prune --root /tmp/mem   # different root\n```\n\nSafety: refuses to delete any slug that does not start with `tmp.`. Useful\nright after heavy refactors or after imports that left tmp scratch dirs.\n\nFor in-session use from an MCP client, the project-memory server exposes a\n`memory_stats` tool that returns the same summary text (or JSON) as the `stats`\nCLI above.\n\n## Tests\n\n```bash\nnode run-tests.mjs          # all servers (offline, ~27 tests)\ncd project-memory \u0026\u0026 npm test\n```\n\n## Privacy\n\nLocal-first by default: no hosted backend, no built-in telemetry, no project\naccount system. Everything is stored as files on your machine. No data leaves\nyour machine unless you explicitly configure an external model/API endpoint for\nrerank or embeddings. See [privacy and data flow](docs/privacy.md). Your\npersonal vault/journal/checkpoints are gitignored.\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverrysimatupang99%2Fcodex-dev-mcp-suite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fverrysimatupang99%2Fcodex-dev-mcp-suite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverrysimatupang99%2Fcodex-dev-mcp-suite/lists"}