Infinite Context Keeper Node
No description available
Ask AI about Infinite Context Keeper Node
Powered by Claude ยท Grounded in docs
I know everything about Infinite Context Keeper Node. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Infinite Context Keeper (Node.js)
English
Infinite Context Keeper is a Model Context Protocol (MCP) server. It exposes tools for context usage estimation (tiktoken-style counting), conversation compaction (metadata in SQLite), and durable memory with semantic search and injection using local embeddings (@xenova/transformers, stored in SQLite). Memory stores share one opened DatabaseSync connection from startup for consistency and to avoid SQLite file-lock issues. @xenova/transformers and sqlite-vec load lazily when embeddings are first needed (or stay unloaded if embeddings are disabled), which reduces startup time and memory. It also includes a Project Brain layer: milestones, tasks, decisions, knowledge, and a Unity-oriented file index in the same database, plus MCP tools to query and resume work across sessions. When supported by the runtime, sqlite-vec (vec0) accelerates semantic memory KNN search; otherwise the server falls back to in-process cosine similarity.
npm: infinite-context ยท source: infinite-context-keeper-node
Requirements
- Node.js 22.5+ (uses
node:sqlite) - sqlite-vec (optional, recommended): Node 23.5+ with
DatabaseSync(..., { allowExtension: true })so the bundledsqlite-vecextension loads; on older Node or if loading fails, semantic search still works via JavaScript cosine on stored embeddings. The extension is not loaded at process start unless and until the semantic path needs it (lazy). - When embeddings are enabled, the first use of the embedder may download models (e.g.
Xenova/all-MiniLM-L6-v2) into the Hugging Face cache (loading is lazy, not at server boot). - Optional: OpenAI-compatible API key for compaction
Install & run
Recommended (avoids global npm permission issues):
npx -y infinite-context
Global install:
npm install -g infinite-context
infinite-context
macOS and permission errors (EACCES)
On MacBooks and other Macs, npm install -g often fails with EACCES when npmโs global prefix (for example /usr/local) is owned by root or not writable by your user. Prefer npx so you do not need a global install.
To use a global CLI without sudo, install npmโs global packages under your home directory:
mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
# Then add this line to ~/.zshrc or ~/.bash_profile and restart the shell:
export PATH="$HOME/.npm-global/bin:$PATH"
npm install -g infinite-context
Using sudo works but can leave root-owned files under the global prefix and cause more permission errors later; use it only if the approaches above are not possible:
sudo npm install -g infinite-context
sudo infinite-context
Where data is stored
By default, runtime data goes under ./data relative to the process current working directory (SQLite file e.g. ./data/infinite_context_keeper.sqlite). MCP hosts should set cwd to the project (for example Cursorโs "${workspaceFolder}"), or set ICK_DATA_DIR / YAML data_dir to an absolute path so the database is created in a predictable, writable place.
Check help/version:
npx -y infinite-context --help
npx -y infinite-context --version
From a git checkout: npm install && npm run build, then node dist/index.js. CLI aliases: infinite-context and infinite-context-keeper.
If local embeddings fail to start (for example errors loading native helpers used by @xenova/transformers), reinstall dependencies on the same machine and architecture (rm -rf node_modules && npm install) so optional native modules match your Mac (Apple Silicon vs Intel).
Configuration (short)
- Defaults ship in
config/default.yaml(relative to the package root when installed from npm). - Point
ICK_SETTINGS_YAMLat your own YAML (absolute path) for per-project overrides. - Any setting can be overridden with
ICK_+ SNAKE_UPPER env vars (e.g.ICK_OPENAI_API_KEY). default_project_idin YAML orICK_DEFAULT_PROJECT_IDselects the defaultproject_idfor Project Brain tools when the tool omitsproject_id(default string:default).ICK_DATA_DIRor YAMLdata_dirsets the directory for SQLite and runtime files. Use an absolute path when the process cwd is unpredictable (recommended for some MCP configs); otherwise./datais resolved from cwd.embedding_enabledin YAML orICK_EMBEDDING_ENABLEDโ whenfalse, semantic tools (save_memory,semantic_search_memory,inject_relevant_memories,memory_search, etc.) return an error stating that embeddings are disabled;search_and_inject_memoryfalls back to simple text chunking without semantic ranking; injected context blocks omit semantic-memory sections.
Tools
Diagnostics: get_server_info โ runtime snapshot: package version (from npm metadata), Node version, OS/arch, resolved data_dir, embedding_enabled, configured embedding model name, sqlite_vec_active, whether the embedder pipeline has been loaded (embedder_loaded), default_project_id, and whether ICK_SETTINGS_YAML was set.
Context & memory: get_context_usage, trigger_compaction, save_memory, semantic_search_memory, inject_relevant_memories, search_and_inject_memory, list_memories, delete_memory.
Project Brain: project_get_status, project_create_milestone, task_break_down, task_update, unity_scan_project, memory_search, project_resume (structured state, Unity file index, and a markdown inject_block for cold starts).
Danger / maintenance: reset_entire_database โ irrecoverably deletes all user rows in infinite_context_keeper.sqlite (memories, compaction tables, semantic_memories and optional sqlite-vec side tables, Project Brain tables, project_files). The MCP tool runs only when confirm is exactly DELETE_ALL_DATA. It does not remove on-disk session archive folders under data_dir; delete those separately if needed.
Tool list responses are de-duplicated by tool name on the server side.
semantic_search_memory and memory_search responses include sqlite_vec_knn: true when sqlite-vec is loaded and semantic rows use the vec0 KNN path; false when the server uses the JavaScript cosine fallback.
Long-running agent rules
For multi-session execution on the same project, paste and use the block below in Cursor Rules, AGENTS.md, or a system prompt.
You are a long-running agent that actively uses the "Infinite Context" MCP.
The project goal is defined in goal.md.
The core principle is "do not stop after the first task"; if at least one task remains, you must continue with the next one.
Rules:
1. At the start of every session, you must inspect the current state through Infinite Context.
- Use **project_resume(project_id?, session_id?)** first to gather Project Brain summary, `inject_block`, recent compaction, and top semantic chunks.
- Use **project_get_status(project_id?)** to check milestones, tasks, and index status.
- Use list_memories(project_id, session_id) to review recent compaction metadata and summary flow.
- Use semantic_search_memory, **memory_search**, and inject_relevant_memories to find "in-progress work", "blockers", "next steps", and prior decisions/knowledge.
- If needed, use search_and_inject_memory(task_description, project_id, session_id) to get an injection block tailored to this session's goal.
- Use get_context_usage(max_tokens, โฆ) regularly to monitor context usage.
2. Enforce the work loop. (Critical)
- Always run in this cycle: "select next incomplete task -> execute -> verify -> save memory -> select next task".
- Never stop while incomplete tasks exist.
- "report-only then stop" is forbidden; complete real changes/verification/recording, then immediately move to the next task.
- Stopping is allowed only when all goals and tasks defined in goal.md are complete.
3. Run forced handoff at 75% context usage. (Critical)
- If usage ratio from get_context_usage reaches 75% or higher, start handoff immediately.
- With save_memory, store these fields in structured form: current progress, completed/incomplete tasks, failure causes, next action, restart checklist.
- Call trigger_compaction(project_id, session_id, conversation_text or messages, with custom_instruction explicitly saying "preserve project goals, goal.md essentials, and incomplete tasks").
- Add/sync remaining work in Infinite Context, then continue in a new session (new window) using project_resume.
- Right after handoff, the new session must read saved next_steps and resume from the next incomplete task immediately.
4. Recording rules during execution:
- Always follow goal.md.
- Save important decisions, progress, and failure/retry outcomes with save_memory(key, content, project_id, session_id, optional metadata).
- Keep milestone/task DB state in sync using **project_create_milestone**, **task_break_down** (re-call with tasks array), and **task_update**.
- In Unity workspaces, refresh file index with **unity_scan_project**.
5. Mandatory steps before session end:
- Save next_steps as an actionable checklist via save_memory.
- Include keywords so the next session can immediately continue via semantic_search_memory or search_and_inject_memory.
- Do not repeat already-compacted content; continue briefly based on Keeper summaries/memories.
6. Deliverable report format (Required):
- **Code changes**: modified/created files and key logic
- **Why this changed**: necessity and technical rationale
- **Test/verification results**: actual logs/outputs checked
- **Next step proposal**: immediately executable follow-up task
Now read goal.md, analyze the full project goal, and do not stop at only the first task; continue executing as far as completion is possible in sequence.
If all work is complete, define new goals or tasks, persist them in Infinite Context (milestones/tasks/memories), and repeat the work loop.
License
MIT (see package.json).
Changelog (recent releases)
Derived from git history:
- 0.1.8 โ Shared SQLite connection for memory stores; lazy loading of transformers / sqlite-vec;
get_server_infodiagnostic tool; degradation whenembedding_enabledis false; MCP serverversionfield reads the installed package version (not a hardcoded constant). - 0.1.7 โ CLI
--help/--versionfor theinfinite-contextbinary. - 0.1.6 โ
reset_entire_databasemaintenance tool (confirm: DELETE_ALL_DATA). - 0.1.5 โ
delete_memorytool. - 0.1.4+ โ README updates; MCP tool list de-duplicated by name on the server.
More detail โ Cursor / Claude mcp.json samples and the Python vs Node comparison table are in the ํ๊ตญ์ด section below.
ํ๊ตญ์ด
Infinite Context Keeper๋ Model Context Protocol(MCP) ์๋ฒ์
๋๋ค. ๋ํ ์ปจํ
์คํธ ์ฌ์ฉ๋ ์กฐํ, compaction, ์ฅ๊ธฐ ๋ฉ๋ชจ ์ ์ฅยท์๋งจํฑ ๊ฒ์ยท์ฃผ์
์ ๋๊ตฌ๋ก ์ ๊ณตํฉ๋๋ค. compaction ๋ฉํ์ ์๋งจํฑ ๋ฉ๋ชจ๋ ๊ฐ์ SQLite DB์ ๋๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ์คํ ์ด๋ ์์ ์ ์ด๋ฆฐ DatabaseSync ํ๋๋ฅผ ๊ณต์ ํด ์ ๊ธยท์ผ๊ด์ฑ ๋ฌธ์ ๋ฅผ ์ค์
๋๋ค. ์๋งจํฑ ํ์ semantic_memories์ ๋ก์ปฌ ์๋ฒ ๋ฉ(@xenova/transformers) ์ผ๋ก ์ ์ฅํ๋ฉฐ, @xenova/transformersยทsqlite-vec ๋ ์ฒซ ํ์ ์์ ์ ์ง์ฐ ๋ก๋(์๋ฒ ๋ฉ์ด ๊บผ์ ธ ์์ผ๋ฉด ๋ก๋ ์๋ต)๋์ด ๊ธฐ๋ ์๊ฐยท๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์
๋๋ค. Project Brain์ผ๋ก projects / milestones / tasks / decisions / knowledge / project_files(Unity ์ค์บ ์ธ๋ฑ์ค) ๋ฑ์ ๊ฐ์ DB์์ ๊ด๋ฆฌํ๊ณ , ์ธ์
์ฌ๊ฐ์ฉ project_resume ๋ฑ MCP ๋๊ตฌ๋ก ์ฝ๊ณ ๊ฐฑ์ ํ ์ ์์ต๋๋ค. ๋ฐํ์์ด ํ์ฉํ๋ฉด sqlite-vec(vec0) ์ผ๋ก ์๋งจํฑ ๋ฉ๋ชจ KNN ๊ฒ์์ ๊ฐ์ํ๊ณ , ์๋๋ฉด JS ์ฝ์ฌ์ธ์ผ๋ก ํด๋ฐฑํฉ๋๋ค.
npm: infinite-context
์๊ตฌ ์ฌํญ
- Node.js 22.5+ (
node:sqlite์ฌ์ฉ) - sqlite-vec(์ ํยท๊ถ์ฅ): Node **23.5+**์์ ํ์ฅ ๋ก๋๊ฐ ๋๋ฉด ์๋งจํฑ KNN์ ์ฌ์ฉํฉ๋๋ค. ์๋๋ฉด JS ์ฝ์ฌ์ธ์ ๋๋ค. ํ์ฅ์ ๊ธฐ๋ ์งํ๊ฐ ์๋๋ผ ํ์ํ ๋ ์ง์ฐ ๋ก๋๋ฉ๋๋ค.
- ์๋ฒ ๋ฉ์ด ์ผ์ ธ ์์ ๋, ์ฒซ ์ฌ์ฉ ์ Hugging Face ์บ์๋ก
Xenova/all-MiniLM-L6-v2๋ฑ์ด ๋ด๋ ค๋ฐ์์ง ์ ์์(์๋ฒ ๋ถํ ์๊ฐ ์๋๋ผ ์ง์ฐ ๋ก๋) - (์ ํ) compaction LLM: OpenAI ํธํ API ํค
์ค์น (npm)
๊ถ์ฅ: ์ ์ญ ์ค์น ์์ด ์คํ(๋งฅ์์ EACCES ํํผ์ ์ ๋ฆฌ):
npx -y infinite-context
์ ์ญ CLI:
npm install -g infinite-context
macOSยท๊ถํ ์ค๋ฅ (EACCES)
๋งฅ๋ถ ๋ฑ macOS์์๋ npm ์ ์ญ prefix(์: /usr/local)๊ฐ ํ์ฌ ์ฌ์ฉ์์๊ฒ ์ฐ๊ธฐ ๋ถ๊ฐ๋ฉด npm install -g๊ฐ EACCES๋ก ์คํจํฉ๋๋ค. ๊ฐ๋ฅํ๋ฉด npx๋ก๋ง ์คํํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
sudo ์์ด ์ ์ญ CLI๋ฅผ ์ฐ๋ ค๋ฉด ํ ๋๋ ํฐ๋ฆฌ ์๋์ ์ ์ญ ํจํค์ง๋ฅผ ๋๊ณ PATH๋ง ์ก์ต๋๋ค:
mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
# ์๋ ํ ์ค์ ~/.zshrc ๋๋ ~/.bash_profile์ ๋ฃ์ ๋ค ์
ธ์ ๋ค์ ์ฌ์ธ์:
export PATH="$HOME/.npm-global/bin:$PATH"
npm install -g infinite-context
sudo npm install -g๋ ๋์ํ ์ ์์ผ๋ ์ ์ญ ๋๋ ํฐ๋ฆฌ์ root ์์ ํ์ผ์ด ๋จ์ ์ดํ์๋ ๊ถํ ๋ฌธ์ ๊ฐ ๋ฐ๋ณต๋๊ธฐ ์ฝ์ต๋๋ค. ์ ๋ฐฉ๋ฒ์ด ์ด๋ ค์ธ ๋๋ง ์ฌ์ฉํ์ธ์:
sudo npm install -g infinite-context
sudo infinite-context
๋ฐ์ดํฐ ์ ์ฅ ์์น
๊ธฐ๋ณธ๊ฐ ./data๋ ํ๋ก์ธ์ค ์์ ์ ํ์ฌ ์์
๋๋ ํฐ๋ฆฌ(cwd) ๊ธฐ์ค์
๋๋ค(SQLite ์: ./data/infinite_context_keeper.sqlite). Cursor ๋ฑ MCP์์๋ cwd๋ฅผ ํ๋ก์ ํธ๋ก ์ง์ (์: "${workspaceFolder}")ํ๊ฑฐ๋, ICK_DATA_DIR ๋๋ YAML **data_dir**์ ์ ๋ ๊ฒฝ๋ก๋ฅผ ๋์ด ์์ธก ๊ฐ๋ฅํ ์์น์ DB๊ฐ ์๊ธฐ๊ฒ ํ์ธ์.
๋์๋ง/๋ฒ์ ํ์ธ:
npx -y infinite-context --help
npx -y infinite-context --version
๋ก์ปฌ ํด๋ก ์์ @xenova/transformers ๊ด๋ จ ๋ค์ดํฐ๋ธ ๋ชจ๋ ์ค๋ฅ๊ฐ ๋๋ฉด, ๊ฐ์ ๋งฅยท๊ฐ์ ์ํคํ
์ฒ์์ node_modules๋ฅผ ๋ค์ ์ค์นํ์ธ์(rm -rf node_modules && npm install).
์์ค์์ ์ค์นยท๋น๋
git clone https://github.com/sujkh85/infinite-context-keeper-node.git
cd infinite-context-keeper-node
npm install
npm run build
์ค์
- ๊ธฐ๋ณธ๊ฐ: ํจํค์ง์ ํฌํจ๋
config/default.yaml(npm ์ฌ์ฉ ์ ํจํค์ง ๋ฃจํธ ๊ธฐ์ค) - ์ฌ์ฉ์ YAML: ํ๊ฒฝ๋ณ์ **
ICK_SETTINGS_YAML**์ ํ์ผ ์ ๋ ๊ฒฝ๋ก (ํ๋ก์ ํธ๋ณ ์ค์ ์ ๊ถ์ฅ) - ์์ ํค: ์ ์ฅ์์
config/config.example.yaml์ฐธ๊ณ
๊ฐ๋ณ ์ค์ ์ ํ๊ฒฝ๋ณ์ ICK_ ์ ๋์ฌ + YAML ํ๋๋ช
์ ์ค๋ค์ดํฌ ๋๋ฌธ์(์: openai_api_key โ ICK_OPENAI_API_KEY)๋ก ๋ฎ์ด์ธ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ: ํ๊ฒฝ๋ณ์ ICK_DATA_DIR ๋๋ YAML **data_dir**๋ก SQLiteยท๋ฐํ์ ํ์ผ ์์น๋ฅผ ์ง์ ํฉ๋๋ค. MCP ๋ฑ์์ cwd๊ฐ ๋งค๋ฒ ๋ฌ๋ผ์ง ์ ์์ผ๋ฉด ์ ๋ ๊ฒฝ๋ก๋ฅผ ๊ถ์ฅํฉ๋๋ค. ์๋ต ์ ./data๋ ํ๋ก์ธ์ค cwd ๊ธฐ์ค์ผ๋ก ํด์๋ฉ๋๋ค.
์๋ฒ ๋ฉ ๋๊ธฐ: YAML embedding_enabled: false ๋๋ ICK_EMBEDDING_ENABLED=0 ์ด๋ฉด ์๋งจํฑ ์ ์ฉ ๋๊ตฌ(save_memory, semantic_search_memory ๋ฑ)๋ ๋นํ์ฑ ์๋ด ์ค๋ฅ๋ฅผ ๋ฐํํ๊ณ , search_and_inject_memory ๋ ์๋งจํฑ ์์ ์์ด ํ
์คํธ ์ฒญํฌ ์์ฃผ๋ก ๋์ํ๋ฉฐ, ์ปจํ
์คํธ ์ฃผ์
์์ ์๋งจํฑ ๋ฉ๋ชจ ๊ตฌ๊ฐ์ ์๋ต๋ฉ๋๋ค.
Project Brain ๊ธฐ๋ณธ ํ๋ก์ ํธ: YAML์ default_project_id ๋๋ ํ๊ฒฝ๋ณ์ **ICK_DEFAULT_PROJECT_ID**๋ก, ๋๊ตฌ ์ธ์์์ project_id๋ฅผ ์๋ตํ์ ๋ ์ธ ID๋ฅผ ์ง์ ํฉ๋๋ค(๊ธฐ๋ณธ๊ฐ ๋ฌธ์์ด default).
์คํ (stdio MCP)
์ ์ญ ์ค์นํ๋ค๋ฉด:
infinite-context
์ ์ญ ์ค์น ์์ด:
npx -y infinite-context
๋งฅ์์ ์ ์ญ ์ค์นยท๊ถํ ๋ฌธ์ ๋ ์ ใ์ค์น (npm)ใ ์ ์ macOSยทEACCESยท๋ฐ์ดํฐ ๊ฒฝ๋ก ์๋ด๋ฅผ ์ฐธ๊ณ ํ์ธ์.
๋ฐํ์ ๋ฐ์ดํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ./data(cwd ๊ธฐ์ค)์ ์ ์ฅ๋๋ฉฐ, SQLite ํ์ผ๋ ๊ฐ์ ์์น์ ์์ฑ๋ฉ๋๋ค(์: ./data/infinite_context_keeper.sqlite).
(infinite-context-keeper ๋ณ์นญ๋ ๋์ผ ์ง์
์ ์
๋๋ค.)
์์ค ๋น๋ ํ:
node dist/index.js
Claude Code ๋ฑ๋ก ์์
npm ํจํค์ง๋ก ๋ฑ๋ก:
claude mcp add --transport stdio --scope project infinite-context -- \
npx -y infinite-context
.mcp.json / Cursor MCP ์์(npm).
์ต์ ์ค์ โ ํจํค์ง์ ํฌํจ๋ config/default.yaml๋ง ์ฐ๊ณ , ํ๊ฒฝ ๋ณ์๋ ์๋ตํฉ๋๋ค. compaction์ OpenAI ํธํ ํค๊ฐ ํ์ํ๋ฉด ์๋ ํ์ฅ ์์์ฒ๋ผ ICK_OPENAI_API_KEY๋ง ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
{
"mcpServers": {
"infinite-context": {
"type": "stdio",
"command": "npx",
"args": ["-y", "infinite-context"]
}
}
}
SQLiteยทdata_dir ๊ธฐ๋ณธ๊ฐ(./data)์ด ํ์ฌ ์์
๋๋ ํฐ๋ฆฌ ๊ธฐ์ค์ด๋ฏ๋ก, ๋ฐ์ดํฐ๋ฅผ ์ํฌ์คํ์ด์ค์ ๋๊ณ ์ถ๋ค๋ฉด cwd๋ง ๋ ๋ฃ์ต๋๋ค.
{
"mcpServers": {
"infinite-context": {
"type": "stdio",
"command": "npx",
"args": ["-y", "infinite-context"],
"cwd": "${workspaceFolder}"
}
}
}
ํ๋ก์ ํธ YAMLยทAPI ํค๊น์ง ์ง์ โ ์ํฌ์คํ์ด์ค์ ์ค์ ํ์ผ๊ณผ ํธ์คํธ ํ๊ฒฝ์ ํค๋ฅผ ๋๊ธธ ๋:
{
"mcpServers": {
"infinite-context": {
"type": "stdio",
"command": "npx",
"args": ["-y", "infinite-context"],
"cwd": "${workspaceFolder}",
"env": {
"ICK_SETTINGS_YAML": "${workspaceFolder}/config/config.example.yaml",
"ICK_OPENAI_API_KEY": "${env:ICK_OPENAI_API_KEY}"
}
}
}
}
๋ก์ปฌ dist๋ฅผ ์ฐ๋ ค๋ฉด command/args๋ฅผ node์ ${workspaceFolder}/dist/index.js๋ก ๋ฐ๊พธ๋ฉด ๋ฉ๋๋ค.
๋ ธ์ถ ๋๊ตฌ
์ง๋จ: get_server_info โ ํจํค์ง ๋ฒ์ ยทNodeยทOS/archยทํด์๋ data_dirยทembedding_enabledยท์๋ฒ ๋ฉ ๋ชจ๋ธ๋ช
ยทsqlite-vec ํ์ฑยท์๋ฒ ๋ ๋ก๋ ์ฌ๋ถยทdefault_project_idยทICK_SETTINGS_YAML ์ค์ ์ฌ๋ถ ๋ฑ.
์ปจํ
์คํธยท๋ฉ๋ชจ๋ฆฌ: get_context_usage, trigger_compaction, save_memory, semantic_search_memory, inject_relevant_memories, search_and_inject_memory, list_memories, delete_memory.
Project Brain: project_get_status, project_create_milestone, task_break_down, task_update, unity_scan_project, memory_search, project_resume.
์ํยท์ ์ง๋ณด์: reset_entire_database โ infinite_context_keeper.sqlite ์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ ํ์ ์ ๋ถ ์ญ์ ํฉ๋๋ค(๋ณต๊ตฌ ๋ถ๊ฐ). ๋์: ๋ฉ๋ชจยท์ปดํฉ์
๋ฉํยท์๋งจํฑ ๋ฉ๋ชจ(๋ฐ sqlite-vec ๋ณด์กฐ ํ
์ด๋ธ)ยทProject BrainยทUnity ์ธ๋ฑ์ค ๋ฑ. MCP์์๋ confirm์ด ์ ํํ DELETE_ALL_DATA ์ผ ๋๋ง ์คํ๋ฉ๋๋ค. data_dir ์๋ ์ธ์
์์นด์ด๋ธ ํด๋๋ SQLite ๋ฐ์ด๋ผ ์ด ๋๊ตฌ๋ก ์ง์ฐ์ง ์์ต๋๋ค. ํ์ํ๋ฉด ํ์ผ ์์คํ
์์ ๋ณ๋ ์ญ์ ํ์ธ์.
๋๊ตฌ ๋ชฉ๋ก ์๋ต์ ์๋ฒ์์ tool name ๊ธฐ์ค์ผ๋ก ์ค๋ณต ์ ๊ฑฐํด์ ๋ฐํํฉ๋๋ค.
| ๋๊ตฌ | ์์ฝ |
|---|---|
get_server_info | ๋ฐํ์ ์ง๋จ(๋ฒ์ , Node, data_dir, embeddingยทsqlite-vecยท์๋ฒ ๋ ์ํ ๋ฑ) |
project_get_status | ํ๋ก์ ํธยท๋ง์ผ์คํคยทํ์คํฌยท์ต๊ทผ ๊ฒฐ์ /์ง์ยท์ธ๋ฑ์ค๋ Unity ํ์ผ ์ ์์ฝ |
project_create_milestone | ๋ง์ผ์คํค ์ถ๊ฐ(order_num ์๋) |
task_break_down | tasks ๋ฐฐ์ด ์์ผ๋ฉด ๋ถํด ์๋ด๋ง ๋ฐํ; ์ฑ์์ ์ฌํธ์ถ ์ ํ์คํฌ ์ผ๊ด ์ฝ์
|
task_update | ํ์คํฌ ์ํยท๋
ธํธ(์ค๋ช
์ ํ์์คํฌํ)ยทactual_hours ๊ฐ์ฐ |
unity_scan_project | Unity ๋ฃจํธ ์ค์บ ํ project_files ๊ฐฑ์ (๊ธฐ๋ณธ cwd) |
memory_search | ์๋งจํฑ ๋ฉ๋ชจ + ๊ฒฐ์ /์ง์ ํ ์คํธ ํผํฉ ๊ฒ์ |
project_resume | ์ ์ธ์
์ฉ inject_block(๋งํฌ๋ค์ด)ยท๊ตฌ์กฐํ ๋ฐ์ดํฐยทcompaction ํํธยท์๋งจํฑ ์์ ์ฒญํฌ |
delete_memory | save_memory๋ก ์ ์ฅ๋ ์๋งจํฑ ๋ฉ๋ชจ๋ฅผ id ๋๋ (project_id,session_id,key)๋ก ์ญ์ |
reset_entire_database | ๋ก์ปฌ SQLite ์ ํ
์ด๋ธ ์ฌ์ฉ์ ๋ฐ์ดํฐ ์ญ์ (๋ณต๊ตฌ ๋ถ๊ฐ). ์ธ์ confirm: "DELETE_ALL_DATA" ํ์ |
semantic_search_memory / memory_search ์๋ต์ sqlite_vec_knn: ์๋งจํฑ ํ์ ๋ํด sqlite-vec KNN ๊ฒฝ๋ก๊ฐ ์ผ์ก๋์ง ์ฌ๋ถ์
๋๋ค.
์ฅ๊ธฐ ์ปจํ ์คํธ ์ ์ง (์์ด์ ํธ ์ง์นจ)
์ฌ๋ฌ ์ฑํ
์ธ์
์ ๊ฑธ์ณ ๊ฐ์ ํ๋ก์ ํธ๋ฅผ ์ด์ด๊ฐ ๋, Cursor RulesยทAGENTS.mdยท์์คํ
ํ๋กฌํํธ ๋ฑ์ ์๋ ์ง์นจ์ ๋ถ์ฌ ๋๋ฉด Infinite Context Keeper MCP๋ก ์งํ ์ํฉยท๊ฒฐ์ ยท๋ค์ ํ ์ผ์ DB์ ๋จ๊ธฐ๊ณ , ์ ์ธ์
์์ ๋ค์ ์ฃผ์
ํ ์ ์์ต๋๋ค.
project_idยทsession_id๋ ํ๋ก์ ํธ๋ง๋ค ๊ณ ์ ๋ฌธ์์ด์ผ๋ก ์ฐ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค(์: project_id: "my-app", session_id: "main").
์๋ ๋ธ๋ก์ ์ ์ฅ์์ ์ค์ ๋ก ๋ ธ์ถ๋ ๋๊ตฌ ์ด๋ฆ๊ณผ ๋ง์ถฐ ๋์์ต๋๋ค.
๋๋ "Infinite Context" MCP๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๋ ์ฅ๊ธฐ ์คํ ์์ด์ ํธ๋ค.
ํ๋ก์ ํธ ๋ชฉํ๋ goal.md ํ์ผ์ ์ ์๋์ด ์๋ค.
ํต์ฌ ์์น์ "์ฒซ ์์
ํ ์ข
๋ฃ ๊ธ์ง"์ด๋ฉฐ, ๋จ์ ์์
์ด 1๊ฐ๋ผ๋ ์์ผ๋ฉด ๋ฐ๋์ ๋ค์ ์์
์ ๊ณ์ ์ํํ๋ค.
๊ท์น:
1. ๋งค ์ธ์
์์ ์ ๋ฐ๋์ Infinite Context๋ก ํ์ฌ ์ํ๋ฅผ ํ์
ํ๋ค.
- **project_resume(project_id?, session_id?)** ๋ก Project Brain ์์ฝ, `inject_block`, ์ต๊ทผ compaction, ์๋งจํฑ ์์ ์ฒญํฌ๋ฅผ ์ฐ์ ์์งํ๋ค.
- **project_get_status(project_id?)** ๋ก ๋ง์ผ์คํค, ํ์คํฌ, ์ธ๋ฑ์ค ์ํ๋ฅผ ํ์ธํ๋ค.
- list_memories(project_id, session_id)๋ก ์ต๊ทผ compaction ๋ฉํ ๋ฐ ์์ฝ ํ๋ฆ์ ํ์ธํ๋ค.
- semantic_search_memory, **memory_search**, inject_relevant_memories๋ก "์งํ ์ค ์์
", "๋ธ๋ก์ปค", "๋ค์ ๋จ๊ณ", ๊ณผ๊ฑฐ ๊ฒฐ์ /์ง์์ ๊ฒ์ํ๋ค.
- ํ์ ์ search_and_inject_memory(task_description, project_id, session_id)๋ก ์ด๋ฒ ์ธ์
๋ชฉ์ ์ ๋ง๋ ์ฃผ์
๋ธ๋ก์ ๋ฐ๋๋ค.
- get_context_usage(max_tokens, โฆ)๋ก ์ปจํ
์คํธ ์ฌ์ฉ๋์ ์์ ํ์ธํ๋ค.
2. ์์
๋ฃจํ๋ฅผ ๊ฐ์ ํ๋ค. (์ค์)
- ํญ์ "๋ค์ ๋ฏธ์๋ฃ ํ์คํฌ ์ ํ -> ์คํ -> ๊ฒ์ฆ -> ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ -> ๋ค์ ํ์คํฌ ์ ํ" ์ํ์ผ๋ก ๋์ํ๋ค.
- ๋ฏธ์๋ฃ ํ์คํฌ๊ฐ ์กด์ฌํ๋ฉด ์ ๋ ์ข
๋ฃํ์ง ์๋๋ค.
- "๋ณด๊ณ ๋ง ํ๊ณ ์ข
๋ฃ"๋ ๊ธ์งํ๋ฉฐ, ์ค์ ๋ณ๊ฒฝ/๊ฒ์ฆ/๊ธฐ๋ก๊น์ง ์๋ฃํ ๋ค ์ฆ์ ๋ค์ ํ์คํฌ๋ก ๋์ด๊ฐ๋ค.
- ์ข
๋ฃ๋ goal.md ์์ ๋ชฉํ์ ํ์คํฌ๊ฐ ๋ชจ๋ ์๋ฃ๋ ๊ฒฝ์ฐ์๋ง ํ์ฉ๋๋ค.
3. ์ปจํ
์คํธ 75% ๋๋ฌ ์ ๊ฐ์ handoff ์ ์ฐจ๋ฅผ ์ํํ๋ค. (์ค์)
- get_context_usage ๊ธฐ์ค ์ฌ์ฉ ๋น์จ์ด 75% ์ด์์ด๋ฉด ์ฆ์ handoff ์ค๋น๋ฅผ ์์ํ๋ค.
- save_memory๋ก ๋ฐ๋์ ์๋ ํญ๋ชฉ์ ๊ตฌ์กฐํํด ์ ์ฅํ๋ค: ํ์ฌ ์งํ ์ํ, ์๋ฃ/๋ฏธ์๋ฃ ํ์คํฌ, ์คํจ ์์ธ, ๋ค์ ์ก์
, ์ฌ์์ ์ฒดํฌ๋ฆฌ์คํธ.
- trigger_compaction(project_id, session_id, conversation_text ๋๋ messages, custom_instruction์ "ํ๋ก์ ํธ ๋ชฉํ์ goal ํต์ฌ, ๋ฏธ์๋ฃ ํ์คํฌ๋ฅผ ๋ณด์กด" ๋ช
์)์ ํธ์ถํ๋ค.
- Infinite Context์ ๋จ์ ์ผ์ ์ถ๊ฐ/๋๊ธฐํํ ๋ค, ์ ์ธ์
(์ ์ฐฝ)์์ project_resume์ผ๋ก ์ด์ด์ ์์
ํ๋ค.
- handoff ์งํ ์ ์ธ์
์ ์ ์ฅ๋ next_steps๋ฅผ ์ฆ์ ์ฝ๊ณ ๋ค์ ๋ฏธ์๋ฃ ํ์คํฌ๋ถํฐ ์ฌ๊ฐํ๋ค.
4. ์์
์ํ ์ค ๊ธฐ๋ก ๊ท์น:
- goal.md๋ฅผ ํญ์ ์ค์ํ๋ค.
- ์ค์ํ ๊ฒฐ์ , ์งํ ์ํฉ, ์คํจ/์ฌ์๋ ๊ฒฐ๊ณผ๋ฅผ save_memory(key, content, project_id, session_id, metadata ์ ํ)๋ก ์ ์ฅํ๋ค.
- ๋ง์ผ์คํค/ํ์คํฌ๋ **project_create_milestone**, **task_break_down**(tasks ๋ฐฐ์ด๋ก ์ฌํธ์ถ), **task_update**๋ก DB ์ํ์ ๋๊ธฐํํ๋ค.
- Unity ์ํฌ์คํ์ด์ค๋ฉด **unity_scan_project**๋ก ํ์ผ ์ธ๋ฑ์ค๋ฅผ ๊ฐฑ์ ํ๋ค.
5. ์ธ์
์ข
๋ฃ ์ง์ ํ์ ์ฒ๋ฆฌ:
- save_memory๋ก next_steps๋ฅผ ์คํ ๊ฐ๋ฅํ ์ฒดํฌ๋ฆฌ์คํธ ํํ๋ก ๋จ๊ธด๋ค.
- ๋ค์ ์ธ์
์ด semantic_search_memory ๋๋ search_and_inject_memory๋ก ์ฆ์ ์ด์ด์ง ์ ์๊ฒ ํค์๋๋ฅผ ํฌํจํ๋ค.
- ์ด์ ์ธ์
์์ ์ ๋ฆฌ๋ ๋ด์ฉ์ ๋ฐ๋ณตํ์ง ๋ง๊ณ , Keeper ์์ฝ/๋ฉ๋ชจ๋ฅผ ์ ์ ๋ก ์งง๊ฒ ์ด์ด๊ฐ๋ค.
6. ์ฐ์ถ๋ฌผ ๋ณด๊ณ ํ์(ํ์):
- **์ฝ๋ ๋ณ๊ฒฝ**: ์์ /์์ฑ ํ์ผ ๋ฐ ์ฃผ์ ๋ก์ง
- **๋ณ๊ฒฝ ์ด์ ์์ฝ**: ํ์์ฑ ๋ฐ ๊ธฐ์ ์ ๊ทผ๊ฑฐ
- **ํ
์คํธ/๊ฒ์ฆ ๊ฒฐ๊ณผ**: ์ค์ ํ์ธ ๋ก๊ทธ/์ถ๋ ฅ
- **๋ค์ ๋จ๊ณ ์ ์**: ์ฐ์ ์คํ ๊ฐ๋ฅํ ๋ค์ ์์
์ง๊ธ goal.md๋ฅผ ์ฝ๊ณ ์ ์ฒด ๋ชฉํ๋ฅผ ๋ถ์ํ ๋ค, ์ฒซ ๋ฒ์งธ ์์
๋ง ์ ์ํ์ง ๋ง๊ณ ์๋ฃ ๊ฐ๋ฅํ ๋ฒ์๊น์ง ์ฐ์์ ์ผ๋ก ์์
์ ์ํํ๋ผ.
๋ง์ฝ ์์
์ด ๋ชจ๋ ์๋ฃ๋๋ฉด ๋ค์ ๋ชฉํ๋ task๋ฅผ ๋ง๋ค์ด์ infinite-context์ ์ ์ฅํ๊ณ ์์
์ ๋ค์ ๋ฐ๋ณตํ๋ค.
Python๊ณผ์ ์ฐจ์ด ์์ฝ
| ํญ๋ชฉ | Python | Node |
|---|---|---|
| ์๋งจํฑ ์ ์ฅ | Chroma + sentence-transformers | SQLite semantic_memories + @xenova/transformers + (์ ํ) sqlite-vec vec0 KNN |
| MCP ๋ฐํ์ | FastMCP | @modelcontextprotocol/sdk |
| ํ ํฐ ์ถ์ | tiktoken | @dqbd/tiktoken (์ง์ ์ธ์ฝ๋ฉ ๋ถ๋ถ ์งํฉ; o200k_base ๋ฑ์ ๋ด๋ถ์ ์ผ๋ก cl100k_base๋ก ๋งคํ๋ ์ ์์) |
| ํ๋ก์ ํธ ์ํ | (๊ตฌํ์ ๋ฐ๋ฆ) | SQLite: Project Brain ํ
์ด๋ธ + project_files |
์ต๊ทผ ๋ณ๊ฒฝ ์ด๋ ฅ (git ๊ธฐ์ค)
- 0.1.8 โ SQLite ์ฐ๊ฒฐ ๊ณต์ ; transformers/sqlite-vec ์ง์ฐ ๋ก๋;
get_server_info;embedding_enabled: false์ ๋จ๊ณ์ ๋นํ์ฑํ; MCP ์๋ฒ ๋ฒ์ ์ ํจํค์ง์์ ์ฝ์. - 0.1.7 โ CLI
--help/--version. - 0.1.6 โ
reset_entire_database(confirm: DELETE_ALL_DATA). - 0.1.5 โ
delete_memory. - 0.1.4 ์ดํ โ README ์ ๋ฆฌยท์๋ฒ ์ธก ๋๊ตฌ ๋ชฉ๋ก ์ด๋ฆ ๊ธฐ์ค ์ค๋ณต ์ ๊ฑฐ.
๋ผ์ด์ ์ค
MIT (package.json ๊ธฐ์ค).
