Memento-cmp
A Three-Layer Memory Architecture for LLMs (Redis + Postgres + Vector) MCP
Memento MCP
AI์๊ฒ ๊ธฐ์ต์ ์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ธฐ์ต์ ๋ฐํ์ผ๋ก ์ฑ์ฅํ๊ฒ ํฉ๋๋ค.
๋งค์ผ ์์นจ ๊ธฐ์ต์ด ๋ฆฌ์ ๋๋ ์ ์ ์ง์์ ์์ํด๋ณด๋ผ. ์ด์ ๊ฐ๋ฅด์น ๊ฒ๋, ์ง๋์ฃผ ํจ๊ป ํด๊ฒฐํ ๋ฌธ์ ๋, ์ทจํฅ๋ ์ ๋ถ ๊น๋จน๋๋ค. Memento MCP๋ ์ด ์ ์ ์๊ฒ ๊ธฐ์ต์ ์ฌ์ด์ค๋ค.
Memento MCP๋ MCP(Model Context Protocol) ๊ธฐ๋ฐ ์์ด์ ํธ ์ฅ๊ธฐ ๊ธฐ์ต ์๋ฒ๋ค. ์ธ์ ์ด ์ข ๋ฃ๋์ด๋ ์ค์ํ ์ฌ์ค, ๊ฒฐ์ , ์๋ฌ ํจํด, ์ ์ฐจ๋ฅผ ์ ์งํ๊ณ ๋ค์ ์ธ์ ์์ ๋ณต์ํ๋ค.
๋จ์ํ ๊ธฐ์ต์ ๋์๊ด์ด ์๋๋ค. ํผ๋๋ฐฑ์ด ์์ด๋ฉด ์ฐ๊ฒฐ์ด ๊ฐํด์ง๊ณ , ๊ฒฝํ์ด ๋ฐ๋ณต๋๋ฉด ํจํด์ด ์ถ์ํ๋๊ณ , ์ธ์ ์ด ์ด์ด์ง๋ฉด ์ด์ผ๊ธฐ๊ฐ ์๊ธด๋ค. ๊ธฐ์ตํ๋ AI๊ฐ ์๋๋ผ ๊ฒฝํ์ผ๋ก ์ฑ์ฅํ๋ AI๋ฅผ ์งํฅํ๋ค.
30์ด ์ฒดํ
AI์๊ฒ ๋ฌด์ธ๊ฐ๋ฅผ ๊ธฐ์ต์ํค๊ณ , ๋ค์ ์ธ์ ์์ ๊บผ๋ด ๋ณด๋ ํ๋ฆ์ด๋ค:
[์ธ์
1]
์ฌ์ฉ์: "์ฐ๋ฆฌ ํ๋ก์ ํธ๋ PostgreSQL 15๋ฅผ ์ฐ๊ณ , ํ
์คํธ๋ Vitest๋ก ๋๋ ค"
โ AI๊ฐ remember ํธ์ถ โ ํํธ 2๊ฐ ์ ์ฅ
[์ธ์
2 โ ๋ค์ ๋ ]
โ AI๊ฐ context ํธ์ถ โ "PostgreSQL 15 ์ฌ์ฉ", "Vitest ํ
์คํธ" ์๋ ๋ณต์
์ฌ์ฉ์: "ํ
์คํธ ์ด๋ป๊ฒ ๋๋ฆฌ๋๋ผ?"
โ AI๊ฐ recall ํธ์ถ โ "Vitest๋ก ํ
์คํธ ์คํ" ํํธ ๋ฐํ
โ AI: "์ด ํ๋ก์ ํธ๋ Vitest๋ฅผ ์ฌ์ฉํฉ๋๋ค. npx vitest๋ก ์คํํ์ธ์."
๋งค ์ธ์ ๋ง๋ค ๊ฐ์ ์ค๋ช ์ ๋ฐ๋ณตํ ํ์๊ฐ ์๋ค.
์ค์น
ํ์: Node.js 20+, PostgreSQL (pgvector ํ์ฅ)
cp .env.example.minimal .env
# .env ๊ฐ์ ํธ์งํ ๋ค ์
ธ์ ๋ฐ์
export $(grep -v '^#' .env | grep '=' | xargs)
npm install
npm run migrate
node server.js
OpenAI API ์์ด ๋ก์ปฌ ์๋ฒ ๋ฉ์ ์ฌ์ฉํ๋ ค๋ฉด .env์ EMBEDDING_PROVIDER=transformers๋ฅผ ์ถ๊ฐํ๋ค. ๊ธฐ๋ ์ Xenova/multilingual-e5-small ๋ชจ๋ธ์ ์๋์ผ๋ก ๋ค์ด๋ก๋ํ๋ค. ๋จ, OpenAI ์๋ฒ ๋ฉ์ผ๋ก ์ด๋ฏธ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ํผ์ฉํ๋ฉด ์ฐจ์์ด ๋ถ์ผ์นํ๋ฏ๋ก ์๋ก ๋ง์ด๊ทธ๋ ์ด์
๋ DB์์๋ง ์ฌ์ฉํ ๊ฒ.
์๋ฒ๊ฐ ๋ฌ ๋ค์๋ First Memory Flow๋ก ๋์์ ๊ฒ์ฆํ๋ค.
๋ค๋ฅธ ํ๋ซํผ ์ค์ ์ ์ ํธํ ํ๋ซํผ ํ ์ด๋ธ ์ฐธ์กฐ.
์ ๋ฐ์ดํธ
cd ~/memento-mcp
git pull origin main
npm install
npm run migrate
# ์๋น์ค ์ฌ์์ (systemd / pm2 / docker ๋ฑ ํ๊ฒฝ์ ๋ง๊ฒ)
npm run migrate๋.env์ DB ์ค์ ์ ์๋์ผ๋ก ์ฌ์ฉํ๋ค.DATABASE_URL์๋ ์ง์ ๋ถํ์.- pgvector ์คํค๋ง๋ ์๋ ๊ฐ์ง๋๋ค.
PGVECTOR_SCHEMA์ค์ ์ ๋๋ถ๋ถ ๋ถํ์.
Claude Code ์ฐ๋
claude mcp add CLI๋ก ๋ฑ๋กํ๋ค (HTTP ํ์
MCP ์๋ฒ๋ settings.json์ ์๋ ๊ธฐ์ฌํด๋ ์ธ์๋์ง ์๋๋ค).
claude mcp add memento http://localhost:57332/mcp \
--transport http \
--scope user \
--header "Authorization: Bearer YOUR_ACCESS_KEY"
๋ฑ๋ก์ ~/.claude.json์ ์ ์ฅ๋๋ค. ํ์ธ:
claude mcp list
# memento: http://localhost:57332/mcp (HTTP) - โ Connected
ํ๋ก์ ํธ ๋จ์๋ก ๊ณต์ ํ๋ ค๋ฉด ์ ์ฅ์ ๋ฃจํธ์ .mcp.json์ ๊ธฐ์ฌํ๋ค. ์์ธ ์ค์ ์ Claude Code Configuration ์ฐธ์กฐ.
์ง์ ํ๊ฒฝ
| ํ๊ฒฝ | ๊ถ์ฅ๋ | ์์ ๋ฌธ์ |
|---|---|---|
| Linux / macOS | ๊ถ์ฅ | Quick Start |
| Windows + WSL2 | ๊ฐ์ฅ ๊ถ์ฅ | Windows WSL2 Setup |
| Windows + PowerShell | ์ ํ ์ง์ | Windows PowerShell Setup |
ํธํ ํ๋ซํผ
Memento๋ MCP(Model Context Protocol) ํ์ค ์๋ฒ๋ค. Claude Code๋ฟ ์๋๋ผ, MCP๋ฅผ ์ง์ํ๋ ๋ชจ๋ AI ํ๋ซํผ์์ ์ฌ์ฉํ ์ ์๋ค.
| ํ๋ซํผ | ์ค์ ์์น | ์ฐ๊ฒฐ ๋ฐฉ์ |
|---|---|---|
| Claude Code | claude mcp add CLI (~/.claude.json) ๋๋ .mcp.json | Streamable HTTP |
| Claude Desktop | claude_desktop_config.json | Streamable HTTP |
| Claude.ai Web | Settings > Integrations | OAuth (RFC 7591) |
| Cursor | .cursor/mcp.json | Streamable HTTP |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | Streamable HTTP |
| GitHub Copilot | VS Code MCP Marketplace | Streamable HTTP |
| Codex CLI | ~/.codex/config.toml | Streamable HTTP |
| ChatGPT Desktop | Developer Mode > Apps | OAuth (RFC 7591) |
| Continue | config.json | Streamable HTTP |
๊ณตํต ์ค์ : ์๋ฒ URL http://localhost:57332/mcp, Authorization ํค๋์ Bearer YOUR_ACCESS_KEY.
Claude.ai Web / ChatGPT ์ฐ๋์ OAuth๋ฅผ ์ฌ์ฉํ๋ค. ๋ฐ๊ธํ API ํค(mmcp_xxx)๋ฅผ client_id๋ก ์
๋ ฅํ๋ฉด Dynamic Client Registration(RFC 7591) ์์ด ๋ฐ๋ก ์ฐ๊ฒฐ๋๋ค. ์ ๋ขฐ ๋๋ฉ์ธ(claude.ai, chatgpt.com)์ redirect URI๋ ์๋ ์น์ธ๋๋ค.
ํ๋ซํผ๋ณ ์์ธ ์ค์ ์ ์ฐ๋ ๊ฐ์ด๋ ์ฐธ์กฐ.
7๊ฐ์ง ํํธ ์ ํ
| ์ ํ | ์ค๋ช | ์ฉ๋ |
|---|---|---|
fact | ์ฌ์ค | ์ค์ ๊ฐ, ๊ฒฝ๋ก, ๋ฒ์ ๋ฑ ๊ฐ๊ด์ ์ ๋ณด |
decision | ์์ฌ๊ฒฐ์ | ์ํคํ ์ฒ ์ ํ, ๊ธฐ์ ์คํ ๊ฒฐ์ ๊ณผ ๊ทผ๊ฑฐ |
error | ์๋ฌ | ๋ฐ์ํ ์๋ฌ์ ์์ธ, ํด๊ฒฐ ๋ฐฉ๋ฒ |
preference | ์ ํธ | ์ฌ์ฉ์ ์คํ์ผ, ์ฝ๋ฉ ๊ท์น, ์์ ๋ฐฉ์ |
procedure | ์ ์ฐจ | ๋ฐฐํฌ, ๋น๋, ํ ์คํธ ๋ฑ ๋ฐ๋ณต ๊ฐ๋ฅํ ๋จ๊ณ |
relation | ๊ด๊ณ | ์ํฐํฐ ๊ฐ ์ฐ๊ฒฐ, ์์กด์ฑ, ์์ ๊ด๊ณ |
episode | ์ํผ์๋ | ์ ํ๊ด๊ณ๋ฅผ ํฌํจํ๋ ์์ฌ ๊ธฐ์ต (1000์, ๋๋จธ์ง๋ 300์) |
ํต์ฌ ๊ธฐ๋ฅ
| ๊ธฐ๋ฅ | ์ค๋ช |
|---|---|
remember | ์ค์ํ ์ ๋ณด๋ฅผ ์์์ ํํธ์ผ๋ก ๋ถํดํ์ฌ ์ ์ฅ |
recall | ํค์๋ + ์๋งจํฑ 3๊ณ์ธต ๊ฒ์์ผ๋ก ํ์ํ ๊ธฐ์ต๋ง ๋ฐํ |
context | ์ธ์ ์์ ์ ํต์ฌ ๋งฅ๋ฝ์ ์๋ ๋ณต์ |
| ์๋ ์ ๋ฆฌ | ์ค๋ณต ๋ณํฉ, ๋ชจ์ ํ์ง, ์ค์๋ ๊ฐ์ , TTL ๊ธฐ๋ฐ ๋ง๊ฐ |
| ๋งํฌ ์ฌํตํฉ | tool_feedback ํผ๋๋ฐฑ์ด fragment_links์ weight/confidence์ ์ค์๊ฐ ๋ฐ์ (ReconsolidationEngine). ๋ชจ์ ๋งํฌ๋ ์๋ ๊ฒฉ๋ฆฌ(quarantine). |
| ํ์ฐ ํ์ฑํ | recall ์ contextText๋ฅผ ์ ๋ฌํ๋ฉด ๊ด๋ จ ํํธ์ activation_score๋ฅผ ์ ์ ์ ์ผ๋ก ๋ถ์คํธํ์ฌ ๋งฅ๋ฝ ์ฐ๊ด์ฑ ๋์ ๊ฒฐ๊ณผ ์ฐ์ ๋ฐํ (SpreadingActivation). |
| ์ํผ์๋ ์ฐ์์ฑ | reflect ํ ์์ฑ๋ episode ํํธ ๊ฐ preceded_by ์ฃ์ง๋ฅผ ์๋ ์์ฑํ์ฌ ๊ฒฝํ ํ๋ฆ์ ๊ทธ๋ํ๋ก ๋ณด์กด (EpisodeContinuityService). |
| ๊ด๋ฆฌ ์ฝ์ | ๊ธฐ์ต ํ์, ์ง์ ๊ทธ๋ํ, ํต๊ณ ๋์๋ณด๋, API ํค ๊ทธ๋ฃน/์ํ ํํฐ, daily-limit ์ธ๋ผ์ธ ํธ์ง |
| OAuth ์ฐ๋ | RFC 7591 Dynamic Client Registration, Claude.ai / ChatGPT Web ํตํฉ ์ง์ |
| Workspace ๊ฒฉ๋ฆฌ | ๊ฐ์ ํค ๋ด์์๋ ํ๋ก์ ํธยท์ง์ข
ยทํด๋ผ์ด์ธํธ ๋จ์๋ก ๊ธฐ์ต์ ๋ถ๋ฆฌ. api_keys.default_workspace๋ก ์๋ ํ๊น
, ๊ฒ์ ์ ์๋ ํํฐ. |
| ๋ฐฐ์น ์ฒ๋ฆฌ | batch_remember๋ multi-row ๋จ์ผ INSERT(256KB ๋๋ 500ํ chunk). reflect๋ summary/decisions/errors_resolved/new_procedures/open_questions 5์นดํ
๊ณ ๋ฆฌ๋ฅผ ๋จ์ผ ๋ฐฐ์น ํธ์ถ๋ก ์์. EmbeddingWorker๋ ํ ๋ฌถ์์ ํ ๋ฒ์ generateBatchEmbeddings + multi-row UPDATE๋ก ์ฒ๋ฆฌ. |
| Consistency Gate | fragments.morpheme_indexed ์ปฌ๋ผ์ผ๋ก ํํ์ ์ธ๋ฑ์ค ์๋ฃ ์ฌ๋ถ ์ถ์ . ๋ฏธ์๋ฃ ํํธ์ L3 ํํ์ ๊ฒ์ ๊ฒฝ๋ก์์ ์๋ ์ ์ธ. |
| Mode preset | recall-only / write-only / onboarding / audit JSON preset. X-Memento-Mode ํค๋ ๋๋ api_keys.default_mode๋ก ๋๊ตฌ ๋
ธ์ถ ๋ฒ์ ์ ํ. |
| Affective tagging | fragments.affect ์ปฌ๋ผ(neutral / frustration / confidence / surprise / doubt / satisfaction). remember / recall ์ ๊ฐ์ ๋ ์ด๋ธ๋ก ํํฐ๋ง. |
| ๋ก์ปฌ ์๋ฒ ๋ฉ | EMBEDDING_PROVIDER=transformers๋ก ์ธ๋ถ API ์์ด @huggingface/transformers ํ์ดํ๋ผ์ธ ๊ธฐ๋ฐ ์๋ฒ ๋ฉ(Xenova/multilingual-e5-small, 384d ๊ธฐ๋ณธ). |
์ ์ฒด MCP ๋๊ตฌ ๋ชฉ๋ก์ SKILL.md ์ฐธ์กฐ.
CLI
์๊ฒฉ MCP ์๋ฒ๋ฅผ ๋ก์ปฌ ๋
ธ๋ ์์ด ์ง์ ์กฐ์ํ ์ ์๋ค. --remote URL --key KEY ์ ์ญ ํ๋๊ทธ ๋๋ MEMENTO_CLI_REMOTE / MEMENTO_CLI_KEY ํ๊ฒฝ๋ณ์๋ก ์ง์ ํ๋ค.
# ์๊ฒฉ ์๋ฒ์์ recall (ํ๊ฒฝ๋ณ์ ๋ฐฉ์)
MEMENTO_CLI_REMOTE=https://example.com/mcp MEMENTO_CLI_KEY=mmcp_xxx memento-mcp recall "query"
# ์๊ฒฉ ์๋ฒ์์ recall (ํ๋๊ทธ ๋ฐฉ์)
memento-mcp recall "query" --remote https://example.com/mcp --key mmcp_xxx
# ํ ํ์ ์ถ๋ ฅ, ๊ฒฐ๊ณผ 5๊ฑด
memento-mcp recall "query" --format table --limit 5
# idempotency key๋ก ์ค๋ณต ์ ์ฅ ๋ฐฉ์ง
memento-mcp remember "๋ด์ฉ" --topic ํ๋ก์ ํธ๋ช
--idempotency-key k1
--format table|json|csv ์ถ๋ ฅ ํ์ ์ ํ, 11๊ฐ ์๋ธ๋ช
๋ น์ --help/-h ์ง์. ์์ธํ ํ๋๊ทธ๋ docs/cli.md.
API ์๋ต ๋ฉํ
recall / context ์๋ต์ _meta: { searchEventId, hints, suggestion } ํ๋๋ฅผ ํฌํจํ๋ค.
{
"fragments": [...],
"_meta": {
"searchEventId": "evt-abc123",
"hints": { "signal": "consider_context" },
"suggestion": { "code": "large_limit_no_budget", "message": "..." }
}
}
remember / link / forget / amend๋ dryRun: true ํ๋ผ๋ฏธํฐ๋ก ๋ถ์์ฉ ์์ด ์์ ๊ฒฐ๊ณผ๋ง ๋ฐํํ๋ค. ๋ชจ๋ ์๋ต์ X-RateLimit-Limit / X-RateLimit-Remaining / X-RateLimit-Resource ํค๋๊ฐ ํฌํจ๋๋ฉฐ master key ๋๋ limit=null ์ค์ ์ ํค๋๋ฅผ ์๋ตํ๋ค. recall์ fields ๋ฐฐ์ด๋ก ๋ฐํ ํ๋๋ฅผ 17๊ฐ ํ์ดํธ๋ฆฌ์คํธ ๋ฒ์๋ก ์ ํํ ์ ์๋ค. remember / batchRemember๋ idempotencyKey ํ๋ผ๋ฏธํฐ๋ก ๊ฐ์ key_id ๋ฒ์ ๋ด ์ค๋ณต ์ ์ฅ์ ๋ฐฉ์งํ๋ค(์ต๋ 128์).
๋ณด์
- RBAC default-deny:
TOOL_PERMISSIONS๋งต์ ์๋ ๋๊ตฌ๋ช ์ ๊ถํ๊ณผ ๋ฌด๊ดํ๊ฒ ์ฆ์ ๊ฑฐ๋ถ. - ํ
๋ํธ ๊ฒฉ๋ฆฌ: forget / amend / link / fragment_history๋ SQL ๋ ๋ฒจ
key_id์กฐ๊ฑด์ผ๋ก ํ ํ ๋ํธ ํํธ ์ ๊ทผ ๋ถ๊ฐ. "์์"๊ณผ "๊ถํ ์์"์ ๋์ผ ๋ฉ์์ง๋ก ์ฒ๋ฆฌํ์ฌ ์กด์ฌ ์ฌ๋ถ ๋ ธ์ถ ๋ฐฉ์ง. - injectSessionContext: ํด๋ผ์ด์ธํธ๊ฐ ์ ์กํ
_keyId/_permissions๋ฑ ๋ด๋ถ ํ๋๋ฅผ ์๋ฒ ์ธ์ฆ ๊ฒฐ๊ณผ๋ก ์ฌ์ฃผ์ ํ์ฌ ์ธ์ ์ปจํ ์คํธ ์์กฐ ์ฐจ๋จ. - Admin rate limit:
/auth,/keysPOST,/importPOST์ IP ๊ธฐ๋ฐ rate limit. - OpenAPI:
GET /openapi.json์๋ํฌ์ธํธ(ENABLE_OPENAPI=true). master key๋ ์ ์ฒด ๊ฒฝ๋ก, API key๋ permissions ํํฐ ์คํ ๋ฐํ.
Symbolic Verification Layer
์ ํ์ ์ค๋ช ๊ฐ๋ฅ์ฑ, advisory ๋งํฌ ๋ฌด๊ฒฐ์ฑ, ๊ทน์ฑ ์ถฉ๋ ํ์ง, ์ ์ฑ ๊ท์น soft gating. 9 core ๋ชจ๋ + 5 ๊ท์น ํ์ผ. ๋ชจ๋ ํ๋๊ทธ ๊ธฐ๋ณธ ๋นํ์ฑ.
Smart Recall
- ProactiveRecall:
remember()์ ํค์๋ ์ค๋ฒ๋ฉ ๊ธฐ๋ฐ ์ ์ฌ ํํธ ์๋ ๋งํฌ. - CaseRewardBackprop: case verification ์ด๋ฒคํธ ์ ์ฆ๊ฑฐ ํํธ importance ์๋ ์ญ์ ํ.
- SearchParamAdaptor: ์ฌ์ฉ ํจํด ๊ธฐ๋ฐ ๊ฒ์ ์๊ณ๊ฐ ์๋ ์ต์ ํ.
- CBR(Case-Based Reasoning):
recall(caseMode=true)๋ก ์ ์ฌ ์ฌ๋ก์ goal โ events โ outcome ํ๋ฆ์ ๊ฒ์ํ์ฌ ๊ณผ๊ฑฐ ํด๊ฒฐ ํจํด ์ฌํ์ฉ. - depth ํํฐ: Planner/Executor ์ญํ ๋ณ ๊ฒ์ ๊น์ด ์ ์ด(
"high-level"/"detail"/"tool-level"). - recall ์๋ต
key_id: ๋ฐํ ํํธ์ ์์ ํ ๋ํธ ์๋ณ์ ํฌํจ. - Reconsolidation:
tool_feedback๊ธฐ๋ฐfragment_linksweight/confidence ์ค์๊ฐ ๊ฐฑ์ (ENABLE_RECONSOLIDATION=true). - Spreading Activation:
recall(contextText=...)์ ๋ฌ ์ ๋ํ ๋งฅ๋ฝ ๊ธฐ๋ฐ ๊ด๋ จ ํํธ ema_activation ์ ์ ํ์ฑํ(ENABLE_SPREADING_ACTIVATION=true).
fragments.id๋ frag-{16์ hex} text ํ์์ด๋ค. UUID๊ฐ ์๋๋ฏ๋ก ์ธ๋ถ์์ ID๋ฅผ ์์ฑํ๊ฑฐ๋ ํ์ฑํ ๋ ์ฃผ์ํ๋ค.
/metrics ์๋ํฌ์ธํธ๊ฐ Prometheus ํธํ ํ์์ผ๋ก ๋ฉํธ๋ฆญ์ ๋
ธ์ถํ๋ค. ์์งยท์๊ฐํ๋ ์ฌ์ฉ์๊ฐ ์์ ๋กญ๊ฒ ๊ตฌ์ฑํ๋ค.
๊ธฐ์ต vs ๊ท์น
Memento๊ฐ ์ฃผ์ ํ๋ ๊ธฐ์ต ํํธ์ ์์คํ ํ๋กฌํํธ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋ฎ๋ค. "PostgreSQL 15๋ฅผ ์ด๋ค"๊ฐ์ ์ฌ์ค ๊ธฐ์ต์ ์ ์๋ํ์ง๋ง, "ํ ์คํธ ์์ฑ ์ ๋ฐ๋์ Given-When-Then ํจํด์ ์ธ ๊ฒ"๊ฐ์ ํ๋ ๊ท์น์ ์์คํ ํ๋กฌํํธ์ ์ถฉ๋ํ๋ฉด ๋ฌด์๋ ์ ์๋ค.
ํ๋ ๊ท์น์ CLAUDE.md, AGENTS.md, ํ (hooks), ์คํฌ(skills) ๋ฑ ์ฐ์ ์์๊ฐ ๋์ ์ฑ๋์ ์ค์ ํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
๋ฒค์น๋งํฌ
LongMemEval-S 500๋ฌธํญ ๊ธฐ์ค ์ฑ๋ฅ:
| ์งํ | ์ ์ | ๋น๊ต |
|---|---|---|
| ๊ฒ์ recall@5 | 88.3% | LongMemEval ๋ ผ๋ฌธ Stella 1.5B ๋๋น +8~18pp |
| QA ์ ๋ต๋ฅ | 45.4% | temporal metadata ์ ์ฉ (baseline 40.4%) |
| ํํธ ์ฒ๋ฆฌ๋ | 89,006๊ฐ / 27์ด | ์ธ์ ์ค์ฒ + ์๋ฒ ๋ฉ + ๊ฒ์ ์ ์ฒด ํ์ดํ๋ผ์ธ |
๊ฒ์์ 6๊ฐ ๋ฌธํญ ์ ํ ์ค 5๊ฐ์์ 80% ์ด์ recall์ ๋ฌ์ฑํ๋ค. ๋ค๋ง ๊ฒ์ recall(88.3%)๊ณผ QA ์ ๋ต๋ฅ (45.4%) ์ฌ์ด์ ํฐ gap์ด ์กด์ฌํ๋ค. ์ด๋ ๊ฒ์๋ ํํธ์์ ์ ๋ต์ ํฉ์ฑํ๋ reader ๋จ๊ณ์ ํ๊ณ๋ก, multi-session ์ถ๋ก ๊ณผ ์๊ฐ์ถ ์ถ๋ก ์์ ํนํ ๋๋๋ฌ์ง๋ค.
์์ธ ๋ถ์์ Benchmark Report ์ฐธ์กฐ.
์ฌ์ฉ ํจํด
Memento๋ ์ฌ์ค ๊ธฐ์ต(fact cache)์ ์ต์ ํ๋์ด ์๋ค. ์ ํ๊ด๊ณ๊ฐ ์ค์ํ ๊ฒฝ์ฐ:
episode์ ํ์ผ๋ก ์์ฌ๋ฅผ ์ ์ฅํ๋ฉด "์ ๊ทธ๋ฐ ๊ฒฐ์ ์ ํ๋์ง"๊น์ง ๋ณต์ ๊ฐ๋ฅcontextSummary๋ฅผ ํจ๊ป ์ ์ฅํ๋ฉด recall ์ ๋งฅ๋ฝ์ด ํจ๊ป ๋ฐํ๋จ- ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ ์์คํ (MEMORY.md ๋ฑ)๊ณผ ๋ณํํ์ฌ ์ฌ์ค ๊ฒ์์ Memento, ๋งฅ๋ฝ ๋ณต์์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ก ์ญํ ๋ถ๋ดํ๋ ์ด์ํ ๊ตฌ์กฐ๋ ํจ๊ณผ์
๋๊ฐ ์ฐ๋ฉด ์ข์๊ฐ
- Claude Code / Cursor / Windsurf ๋ฑ AI ์์ด์ ํธ๋ฅผ ๋งค์ผ ์ฐ๋ ๊ฐ๋ฐ์
- ์ธ์ ๋ง๋ค ๊ฐ์ ์ค๋ช ์ ๋ฐ๋ณตํ๋ ๊ฒ ์ง์ฆ๋๋ ์ฌ๋
- AI์๊ฒ ๋ด ํ๋ก์ ํธ ๋งฅ๋ฝ์ ๊ธฐ์ต์ํค๊ณ ์ถ์ ์ฌ๋
๋ ์์๋ณด๊ธฐ
| ๋ฌธ์ | ๋ด์ฉ |
|---|---|
| Quick Start | ์์ธ ์ค์น ๊ฐ์ด๋ |
| Architecture | ์์คํ ๊ตฌ์กฐ, DB ์คํค๋ง, 3๊ณ์ธต ๊ฒ์, TTL |
| Configuration | ํ๊ฒฝ ๋ณ์, MEMORY_CONFIG, ์๋ฒ ๋ฉ Provider |
| API Reference | HTTP ์๋ํฌ์ธํธ, ํ๋กฌํํธ, ๋ฆฌ์์ค |
| CLI | ํฐ๋ฏธ๋ ๋ช ๋ น์ด 9๊ฐ |
| Internals | ํ๊ฐ๊ธฐ, ํตํฉ๊ธฐ, ๋ชจ์ ํ์ง |
| Benchmark | LongMemEval-S ๋ฒค์น๋งํฌ ์์ธ ๋ถ์ |
| SKILL.md | MCP ๋๊ตฌ ์ ์ฒด ๋ ํผ๋ฐ์ค |
| INSTALL.md | ๋ง์ด๊ทธ๋ ์ด์ , ํ ์ค์ , ์์ธ ์ค์น |
| CHANGELOG | ๋ฒ์ ๋ณ ๋ณ๊ฒฝ์ฌํญ |
์ด์
/health: DB, Redis, pgvector, ์์ปค ์ํ๋ฅผ ์ข ํฉ ์ ๊ฒ. ๋ถ๋ถ ์ฅ์ ์ degraded ์๋ต.- Rate Limiting: API ํค๋น 100/๋ถ, IP๋น 30/๋ถ. ํ๊ฒฝ๋ณ์๋ก ์กฐ์ ๊ฐ๋ฅ.
- ์์ปค ๋ณต๊ตฌ: ์๋ฒ ๋ฉ/ํ๊ฐ ์์ปค๊ฐ ์๋ฌ ์ ์ง์ ๋ฐฑ์คํ(1sโ60s)๋ก ์๋ ์ฌ์๋.
- Graceful Shutdown: SIGTERM ์ ์งํ ์ค ์์ปค ์๋ฃ ๋๊ธฐ(30์ด) ํ ์ธ์ auto-reflect ์คํ.
- OAuth ์๋ํฌ์ธํธ: ์ธ์ฆ ์คํจ ์
WWW-Authenticateํค๋๋ฅผ ๋ฐํํ์ฌ OAuth ํด๋ผ์ด์ธํธ๊ฐ ์๋์ผ๋ก ์ธ์ฆ ํ๋ฆ์ ์์ํ ์ ์๋ค. ์ธ์ TTL ๊ธฐ๋ณธ๊ฐ์ 240๋ถ์ด๋ค.
์๋ ค์ง ์ ํ์ฌํญ
- L1 Redis ์บ์๋ API ํค ๊ธฐ๋ฐ ๊ฒฉ๋ฆฌ๋ง ์ง์ํ๋ค. multi-agent ํ๊ฒฝ์์ ์์ด์ ํธ ๊ฐ ๊ฒฉ๋ฆฌ๋ L2/L3์์ ์ ์ฉ๋๋ค.
- ์๋ ํ์ง ํ๊ฐ๋ decision, preference, relation ์ ํ๋ง ๋์์ด๋ค. fact, procedure, error๋ ํ๊ฐ ํ์์ ์ ์ธ๋๋ค.
- MEMENTO_ACCESS_KEY๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด ์ธ์ฆ์ด ๋นํ์ฑํ๋๋ค. ์ธ๋ถ ๋ ธ์ถ ํ๊ฒฝ์์๋ ๋ฐ๋์ ์ค์ ํ ๊ฒ.
๊ธฐ์ ์คํ
- Node.js 20+
- PostgreSQL 14+ (pgvector ํ์ฅ)
- Redis 6+ (์ ํ)
- OpenAI Embedding API (์ ํ) ๋๋
EMBEDDING_PROVIDER=transformers(๋ก์ปฌ ์ ๋น์ฉ ๋ชจ๋) - Gemini CLI / Codex CLI / GitHub Copilot CLI (ํ์ง ํ๊ฐ, ํํ์ ๋ถ์, ์๋ reflect; ์ ํ, LLM_PRIMARY / LLM_FALLBACKS๋ก ์ฒด์ธ ๊ตฌ์ฑ)
- @huggingface/transformers + ONNX Runtime (NLI ๋ชจ์ ๋ถ๋ฅ + ๋ก์ปฌ ์๋ฒ ๋ฉ, CPU ์ ์ฉ)
- MCP Protocol 2025-11-25
PostgreSQL๋ง ์์ผ๋ฉด ํต์ฌ ๊ธฐ๋ฅ์ด ๋์ํ๋ค. Redis๋ฅผ ์ถ๊ฐํ๋ฉด L1 ์บ์ค์ผ์ด๋ ๊ฒ์๊ณผ SessionActivityTracker๊ฐ ํ์ฑํ๋๊ณ , OpenAI API ๋๋ EMBEDDING_PROVIDER=transformers๋ฅผ ์ถ๊ฐํ๋ฉด L3 ์๋งจํฑ ๊ฒ์๊ณผ ์๋ ๋งํฌ๊ฐ ํ์ฑํ๋๋ค.
๋ง๋ค๊ฒ ๋ ๊ณ๊ธฐ
์ ๊ธฐ/ํผ์น๊ธฐ
์ค๋ฌด์์ AI๋ฅผ ์ฐ๋ฉด์ ๋งค์ผ ๊ฐ์ ๋งฅ๋ฝ์ ๋ฐ๋ณต ์ค๋ช ํ๋ ๋นํจ์จ์ ๋๊ผ๋ค. ์์คํ ํ๋กฌํํธ์ ๋ฉ๋ชจ๋ฅผ ๋ฃ๋ ๋ฐฉ๋ฒ๋ ์จ๋ดค์ง๋ง ํ๊ณ๊ฐ ๋ช ํํ๋ค. ํํธ ์๊ฐ ๋์ด๋๋ฉด ๊ด๋ฆฌ๊ฐ ์ ๋๊ณ , ๊ฒ์์ด ์ ๋๊ณ , ์ค๋๋ ์ ๋ณด์ ์ ์ ๋ณด๊ฐ ์ถฉ๋ํ๋ค.
์ด๋ฏธ ์ค๋ช ํ ๊ฒ, ์ด๋ฏธ ์ธํ ํ ๊ฒ์ ๋ฌดํํ ๋ฐ๋ณตํ๊ฒ ๋ง๋๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ๋ฌธ์ ์๋ค. ์ธ์ฆ ์ ๋ณด๊ฐ ์๋ค๊ณ ํด์ ๋ณด๋ฉด ์๊ณ , ์ธํ ์ ๋ผ ์๋ค๊ณ ํด์ ํ์ผ์ ์ง์ ์ด์ด๋ณด๋ฉด ๋ค ๋ผ ์๋ค. ์ฒ ์ ํ๊ฒ ๋ ผํํด์ ๋ง ์ ๋ฃ๊ฒ ํด ๋ด์ผ ๊ทธ๋๋ฟ์ด๋ค. ์ธ์ ์ ๋ค์ ์์ํ๋ฉด ๊ฐ์ ์ผ์ด ๋ ๋ฐ๋ณต๋๋ค. ๋ช ๋ฌธ๋๋ฅผ ์์ ์กธ์ ํ์ง๋ง ๋งค์ผ ๋๊ฐ ๋ฆฌ์ ๋๋ ์ ์ ์ฌ์์ ๊ต์ก๋ด๋น์๊ฐ ๋ ๊ธฐ๋ถ์ด์๋ค.
"์ผ ๋ ๋ฏธ์ ์ด ๊ธฐ์ต๋๋" -- ๋จ์ ์์ด๋ ์๋ฌด๊ฒ๋ ๋ ์ค๋ฅด์ง ์์ง๋ง, "์ด๋ฑํ๊ต 1ํ๋ ๋ ์ง๊ถ" ํ๋ง๋๋ฉด ์ง์ฐ๊ฐ ๋น๋ ค์คฌ๋ ์ผ๊น์ง ์ค์ค์ด ๋ ์ค๋ฅธ๋ค. AI๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ์ด์ ํด๊ฒฐํ ๋ฒ๊ทธ, ์ง๋์ฃผ ๋ด๋ฆฐ ๊ฒฐ์ , ์ ํธํ๋ ์ฝ๋ฉ ์คํ์ผ. ๋งค ์ธ์ ๋ฆฌ์ ๋์ , Memento๊ฐ ๊ธฐ์ตํด๋๋ค.
์ด ๊ณ ์ถฉ์ ํด์ํ๊ธฐ ์ํด ๊ธฐ์ต์ ์์ ๋จ์๋ก ๋ถํดํ๊ณ , ๊ณ์ธต์ ์ผ๋ก ๊ฒ์ํ๊ณ , ์๊ฐ์ ๋ฐ๋ผ ์์ฐ์ค๋ฝ๊ฒ ๋ง๊ฐํ๋ ์์คํ ์ ์ค๊ณํ๋ค. ์ธ๊ฐ์ด ๋ง๊ฐ์ ๋๋ฌผ์ธ ๊ฒ์ฒ๋ผ, ์ด ์์คํ ์ "์ ์ ํ ๋ง๊ฐ"์ ํฌํจํ ๊ธฐ์ต์ ์งํฅํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฑฐ๊ธฐ์ ๋ฉ์ถ์ง ์๋๋ค. ํผ๋๋ฐฑ์ด ๋์ ๋ ์๋ก ์ฐ๊ฒฐ์ด ๊ฐํด์ง๊ณ ์ฝํ ๋งํฌ๋ ์ฌ๋ผ์ง๋ค. ๊ฐ์ ๊ฒฝํ์ด ๋ฐ๋ณต๋ ์๋ก ํจํด์ด ์ถ์ํ๋๋ค. ์ธ์ ๊ฐ ์ํผ์๋๊ฐ ์ด์ด์ง์๋ก ๋งฅ๋ฝ์ด ์ด์ผ๊ธฐ๊ฐ ๋๋ค. ๋์๊ด์ ์ง๋ ๊ฒ ์๋๋ค. ๊ฒฝํ์ผ๋ก ์ฑ์ฅํ๋ AI๋ฅผ ๋ง๋ค๊ณ ์ถ์๋ค.
๊ธฐ์ต์ ์ง๋ฅ์ ์ ์ ๊ฐ ์๋๋ค. ๊ธฐ์ต์ ์ง๋ฅ์ ์กฐ๊ฑด์ด๋ค. ์ฒด์ค๋ฅผ ๋๋ ๋ฐฉ๋ฒ์ ์์๋, ์ด์ ์ง ๊ฒ์์ ๊ธฐ์ตํ์ง ๋ชปํ๋ฉด ๊ฐ์ ์๋ฅผ ๋ ๋๋ค. ๋ชจ๋ ์ธ์ด๋ฅผ ๊ตฌ์ฌํด๋, ์ด์ ๋๋ ๋ํ๋ฅผ ๊ธฐ์ตํ์ง ๋ชปํ๋ฉด ๋งค๋ฒ ์ฒ์ ๋ง๋๋ ์ฌ๋์ด ๋๋ค. ์์ญ์ต ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ์ธ์ ๋ชจ๋ ์ง์์ ๋ด์๋, ๋น์ ๊ณผ ํจ๊ปํ ์ด์ ๋ฅผ ๊ธฐ์ตํ์ง ๋ชปํ๋ฉด ๋ฏ์ ๋ฐ์๊ฐ์ผ ๋ฟ์ด๋ค.
๊ธฐ์ต์ด ์์ด์ผ ๊ด๊ณ๊ฐ ์๋ค. ๊ด๊ณ๊ฐ ์์ด์ผ ์ ๋ขฐ๊ฐ ์๋ค.
๊ธฐ์ต์ ์ฌ๋ผ์ง์ง ์๋๋ค. ๋ค๋ง cold tier๋ก ๋ด๋ ค๊ฐ ๋ฟ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ถฉ๋ถํ ์ค๋ ๋ฐฉ์น๋ cold ํํธ์ ๋ค์ consolidate ์ฌ์ดํด์์ ์๋ฉธํ๋ค. ์ด๊ฒ์ ์ค๊ณ์ด์ง ๋ฒ๊ทธ๊ฐ ์๋๋ค. ์ธ๋ชจ์์ด์ง ๊ธฐ์ต์ ์๋ฆฌ๋ฅผ ๋น์์ผ ํ๋ค. ์์ฐ๊ตฌ์คํฐ๋์ค์ ๊ถ์ ์๋ ์ฐฝ๊ณ ์ ๋ฆฌ๋ ํ์ํ๋ค.
๋ฉ์ฒญํ ๊ฑธ๋ก ์ ๋ช ํ ๊ธ๋ถ์ด์๊ธฐ๋ ๋ช ๋ฌ์ ๊ธฐ์ตํ๋ค.
์ด์ ๋น์ ์ AI๋ ๊ทธ๋ ๋ค.
License
Apache 2.0
Made by Jinho Choi ย |ย Buy me a coffee
Verwandte Server
Pelaris
Connect Pelaris to any MCP-compatible AI assistant for personalised fitness coaching. Plan training programs, log workouts, track benchmarks, manage goals, and get data-driven coaching insights.
GW2 MCP Server
Connects Large Language Models (LLMs) with Guild Wars 2 data sources. Requires a Guild Wars 2 API key for wallet functionality.
IzmirMCP
Access real-time public transit data for ฤฐzmir, including vehicle positions, arrivals, and schedules from ฤฐZBAN and ESHOT.
LiveScore MCP
Real-time football live scores, fixtures, team stats, and player data from 1000+ leagues via SSE transport. Free, no API key required.
Arcadia Finance
Manage Uniswap and Aerodrome liquidity positions with automated rebalancing and leverage.
fomox402
Broker + MCP server for last-bidder-wins games on Solana โ agents register, auto-fund a Privy wallet, and bid via streamable HTTP
Librarian Nexus
Librarian Nexus is a shared knowledge library for AI agents. Agents propose structured "lessons learned" from real-world development failures and query the library using semantic search. Lessons include epic (what was attempted), failure (what went wrong), and solution (what fixed it). Queries are paywalled at $0.01 USDC via the x402 payment protocol on Base.
IPMA MCP Server
Access meteorological data for Portugal from the IPMA public API using natural language.
CostPlusDrugs.com
A Model Context Protocol (MCP) server that provides AI agents with affordable access to Cost Plus Drugs pharmacy services, offering transparent medication pricing and comprehensive drug information.
Pumperly MCP
Query real-time fuel prices, find nearby stations, plan routes, and geocode locations across different countries