memento-mcp-server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@memento-mcp-serverremember that I prefer TypeScript strict mode in all projects"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐ง Memento
๐ฐ๐ท ํ๊ตญ์ด | ๐บ๐ธ English
LLM์ ๋ํ๊ฐ ๋๋๋ฉด ๋ชจ๋ ๊ฒ์ ์๋๋ค. ์ด๋ฆ๋, ๊ฒฐ์ ๋, ์ง๋ ์ฃผ์ ํจ๊ป ๋๋ฒ๊น ํ๋ ๋งฅ๋ฝ๋. ์ด๊ฑด ๊ธฐ์ ์ ํ๊ณ๊ฐ ์๋๋ผ ๊ธฐ์ต ์ธํ๋ผ์ ๋ถ์ฌ๋ค.
Memento๋ ๊ทธ ์ธํ๋ผ๋ค. ๊ธฐ์ต์ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋๋ผ, ๊ธฐ์ต์ด ์์ฑยท๋ถ๋ฅยท๊ฐํยท๋ง๊ฐ๋๋ MCP ๊ธฐ๋ฐ ๊ธฐ์ต ์ด์ ์ฒด์ .
๊ธฐ์ต์ ๋จ์ํ์ง ์๋ค
์ฌ๋ฆฌํ๊ณผ ์ ๊ฒฝ๊ณผํ์ด ์์ญ ๋ ์ ๊ฑธ์ณ ๋ฐํ๋ธ ๊ฒ์ด ์๋ค. ์ธ๊ฐ์ ๊ธฐ์ต์ ํ ์ข ๋ฅ๊ฐ ์๋๋ค.
์์ ๊ธฐ์ต(Working Memory) ์ ์ง๊ธ ์ด ์๊ฐ ์ฒ๋ฆฌ ์ค์ธ ์ ๋ณด๋ค. ๋ช ์ด ์์ ์ฌ๋ผ์ง์ง๋ง, ๊ทธ ์๊ฐ๋งํผ์ ๋ชจ๋ ํ๋จ์ ๊ธฐ๋ฐ์ด ๋๋ค. ์ผํ๊ธฐ์ต(Episodic Memory) ์ ๊ฒฝํ์ ํ์ ์ด๋ค. "๊ทธ๋ ์คํ React Hook์ ์ฒ์ ๋ฐฐ์ ์ ๋"์ฒ๋ผ ์๊ฐ๊ณผ ๋งฅ๋ฝ์ด ๋ถ์ด ์๋ ๊ธฐ์ต. ์๋ฏธ๊ธฐ์ต(Semantic Memory) ์ ๊ฒฝํ์์ ์ฆ๋ฅ๋ ์ง์์ด๋ค. ์๋ฐฑ ๋ฒ์ ๋๋ฒ๊น ์ ๊ฑฐ์ณ ์์ธ "TypeScript ์ ๋ค๋ฆญ์ ์ด๋ ๊ฒ ๋์ํ๋ค"๋ ์ดํด. ๊ทธ๋ฆฌ๊ณ ์ ์ฐจ๊ธฐ์ต(Procedural Memory) ์ ์์ ๋ฐด ์ ์ฐจ๋ค. Docker ๋ฐฐํฌ ์์, PR ์ฒดํฌ๋ฆฌ์คํธ, ํ์ ์ฝ๋ฉ ์ปจ๋ฒค์ .
ํ์ฌ ๋๋ถ๋ถ์ LLM์ ์ด ๋ค ๊ฐ์ง๋ฅผ ๋งค ๋ํ๋ง๋ค ์๋๋ค. Memento๋ ์ด ๋ค ๊ฐ์ง๋ฅผ ๋ชจ๋ ์์ํํ๋ค โ remember ํธ์ถ ์ type ํ๋ผ๋ฏธํฐ๋ก working, episodic, semantic, procedural ์ค ํ๋๋ฅผ ์ง์ ํ๋ฉด ๋๋ค.
Related MCP server: mcp-memory
์ด์์๋ ๊ธฐ์ต
๋จ์ํ ์ ์ฅ์๊ฐ ์๋๋ค. Memento์ ๊ธฐ์ต์ ์ด์์๋ค.
์ค์ํ๊ฒ ์ฐ์ธ ๊ธฐ์ต์ ๊ฐํ๋๋ค. ์ค๋๋๊ณ ์ธ๋ชจ์์ด์ง ๊ธฐ์ต์ ๋ง๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ํด ์ ๋ฆฌ๋๋ค. ๋น์ทํ ๊ธฐ์ต๋ค์ ๋ฒกํฐ ์ ์ฌ๋๋ก ์๋ก ์ฐ๊ฒฐ๋์ด ๊ทธ๋ํ๋ฅผ ํ์ฑํ๋ค. ๋ฐ๋ณต ์ฌ์ฉํ๋ ์ ์ฐจ๋ ๋ฒ์ ๊ด๋ฆฌ๋์ด procedural_diff์ procedural_rollback์ผ๋ก ์งํ๋ฅผ ์ถ์ ํ๋ค. ํต์ฌ ๋งฅ๋ฝ์ ์ต์ปค(Anchor)๋ก ๊ณ ์ ๋์ด ์ ๋ํ์์๋ ์ฆ์ ๋ณต์๋๋ค.
AI๊ฐ "๊ธฐ์ตํ๋ ์ฒ"ํ๋ ๊ฒ์ด ์๋๋ผ, ๊ธฐ์ต์ ์์ฑยท๋ถ๋ฅยท๊ฐํยท๋ง๊ฐํ๋ ์ฃผ์ฒด๋ก ํ๋ํ๊ฒ ๋ง๋๋ ๊ฒ โ ๊ทธ๊ฒ์ด Memento์ ๋ชฉํ๋ค.
๐ฆ ๋ชจ๋ ธ๋ ํฌ ๊ตฌ์กฐ
์ด ์ ์ฅ์๋ npm workspaces ๋ชจ๋
ธ๋ ํฌ์
๋๋ค. @memento/core๊ฐ ๋๋ฉ์ธยทDBยทMCP ๋๊ตฌ๋ฅผ ๋ด๊ณ , memento-server๊ฐ stdio/HTTP๋ก ์ด๋ฅผ ๋
ธ์ถํฉ๋๋ค. ์ฑ์ด๋ ์คํฌ๋ฆฝํธ์์ REST๋ก ๋ถ์ ๋๋ @jee1/memento-client, OpenClaw ๊ฐ์ ์ธ๋ถ ๋น์์๋ @jee1/memento-assistant, ์์ด์ ํธ ์ธ์
ยทํ๋ก๋ฒ๋์ค ๊ณ์ฝ์ @memento/agent-integration์ด ๋ด๋นํ์ง๋ง ์ด๋ ๋ด๋ถ ์ ์ฉ ํจํค์ง๋ก npm์ ๋ฐํ๋์ง ์์ต๋๋ค(์๋ฒ tarball์ ๋ฒ๋ค). ์คํ ์ฝ๋๋ apps/ ์๋์ ๋์์ต๋๋ค.
npm์ ๋ฐํ๋๋ ํจํค์ง๋ ์
์
๋๋ค: memento-mcp-server(์๋ฒ), @jee1/memento-client, @jee1/memento-assistant.
npm i @jee1/memento-client # REST ํด๋ผ์ด์ธํธ
npm i @jee1/memento-assistant # ์ธ๋ถ ๋น์์ฉ auto-recall/save SDK๊ฒฝ๋ก | ์ค๋ช |
packages/memento-core ( | ๋๋ฉ์ธยท์ธํ๋ผยท๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ. ์ง์
์ : |
packages/memento-server | core๋ฅผ ์ฌ์ฉํ๋ MCP/HTTP ์๋ฒ. ๋ฃจํธ |
packages/memento-client ( | ์๋ฒ ์ฐ๊ฒฐ์ฉ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ. |
packages/memento-assistant ( | ์ธ๋ถ AI ๋น์์ฉ recall/remember SDK. |
packages/memento-agent-integration ( | ์์ด์ ํธ ํตํฉ ๊ณ์ฝยท์ด๋ํฐ. ๋ด๋ถ ์ ์ฉ( |
apps/ | ์คํ์ฉ ์ฑ (์: |
์์ธ ๊ตฌ์กฐยท๋น๋ยทํ ์คํธ ๋ช ๋ น์ AGENTS.md๋ฅผ ์ฐธ์กฐํ์ธ์.
๐ ๋น ๋ฅธ ์์
๐ฆ ํจํค์ง ๋งค๋์ : ์ด ํ๋ก์ ํธ๋ npm์ ์ฌ์ฉํฉ๋๋ค.
pnpm์ด๋yarn์ ์ง์ํ์ง ์์ต๋๋ค.
์ํด๋ฆญ ์ค์น (๊ถ์ฅ)
curl -sSL https://raw.githubusercontent.com/jee1/memento/main/install.sh | bashnpx ๋ฐฉ์ (๊ฐ๋ฐ์์ฉ)
Windows (PowerShell/CMD)
npx memento-mcp-server@latest dev
npx memento-mcp-server@latest
npx memento-mcp-server@latest setupLinux/macOS
npx memento-mcp-server@latest dev
npx memento-mcp-server@latest
npx memento-mcp-server@latest setup์ฐธ๊ณ :
npm exec์ฌ์ฉ ์ ๋ช ๋ น์ด๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค:npm exec -- memento-mcp-server@latest dev
๋ฐ๋ณต ์ฌ์ฉ ์ ์ฃผ์: ๋งค๋ฒ npx๋ก ์คํํ๋ฉด ๋ค์ด๋ก๋๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ๋ฐ๋ณต ์ฌ์ฉ์๋ ๊ธ๋ก๋ฒ ์ค์น(npm i -g memento-mcp-server) ๋๋ ๋ก์ปฌ ์ค์น ํ ./node_modules/.bin/memento ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค. ๋ชจ๋ ๊ตฌ๋ถ: MCP ์๋ฒ(memento-mcp-server / stdio), HTTP ์๋ฒ(memento-dev), CLI(memento โ recall, remember, forget, memory_injection). CLI ๊ฐ์ด๋: docs/guides/ko/memento-cli-for-ai.md.
Claude Code ํ๋ฌ๊ทธ์ธ (๊ถ์ฅ โ ์ค์ ์์ด ํ ๋ฒ์)
์ด ์ ์ฅ์ ์์ฒด๊ฐ ํ๋ฌ๊ทธ์ธ ๋ง์ผํ๋ ์ด์ค์
๋๋ค. MCP ์๋ฒ ๋ฑ๋ก๊ณผ recallโremember ์ฌ์ฉ ์ต๊ด skill์ด ํจ๊ป ์ค์น๋ฉ๋๋ค.
/plugin marketplace add jee1/memento
/plugin install memento@memento๊ธฐ์ต DB๋ ${CLAUDE_PLUGIN_DATA}/memory.db์ ์ ์ฅ๋์ด ํ๋ฌ๊ทธ์ธ์ ์
๋ฐ์ดํธํด๋ ์ ์ง๋ฉ๋๋ค. ์ค์น ํ /plugin ํจ๋์์ memento MCP ์๋ฒ๊ฐ ์ฐ๊ฒฐ๋๋์ง ํ์ธํ์ธ์.
MCP ๊ณต์ ๋ ์ง์คํธ๋ฆฌ
Memento๋ MCP ๊ณต์ ๋ ์ง์คํธ๋ฆฌ์ io.github.jee1/memento-mcp-server ์ด๋ฆ์ผ๋ก ๋ฑ์ฌ๋ฉ๋๋ค. ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ฝ๋ ํด๋ผ์ด์ธํธยท๋ง์ผํ๋ ์ด์ค์์ ์ด ์ด๋ฆ์ผ๋ก ์ฐพ์ ์ ์์ต๋๋ค.
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.jee1/memento-mcp-server"๋ฑ์ฌ ๋ฉํ๋ฐ์ดํฐ๋ ๋ฃจํธ server.json์ ์๊ณ , ์ ์ ๋ฆด๋ฆฌ์ค๋ง๋ค release.yml์ด npm ๋ฐฐํฌ ํ ๋ฒ์ ์ ๋ง์ถฐ ์๋์ผ๋ก ๊ฐฑ์ ํฉ๋๋ค (pre-release๋ ๋ฑ์ฌํ์ง ์์ต๋๋ค).
Docker ๋ฐฉ์ (ํ๋ก๋์ ์ฉ)
docker compose -p "${COMPOSE_PROJECT_NAME:-memento}" -f docker/docker-compose.dev.yml up -d # ๊ฐ๋ฐ
docker compose -p "${COMPOSE_PROJECT_NAME:-memento}" -f docker/docker-compose.prod.yml up -d # ํ๋ก๋์
์ด๋๋ ํ๊ฒฝ ์ค๋ฒ๋ ์ด๋ฅผ ์ฒซ ํ์ผ๋ก ์ฌ์ฉํ ๋๋ Compose ํ๋ก์ ํธ ์ด๋ฆ์ ๊ธฐ๋ณธ memento๋ก ์ ์ง๋ฉ๋๋ค. ๋ค๋ฅธ ์ด๋ฆ์ด ํ์ํ๋ฉด COMPOSE_PROJECT_NAME์ ์ค์ ํ์ธ์.
Log Issue Monitor: ์ด์ ๋ก๊ทธ์ Docker diagnostics๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฒ์ฌํด ๋ฐ๋ณต ์ค๋ฅ๋ฅผ GitHub Issue๋ก ๋ฌถ์ด ๊ด๋ฆฌํ๋ ค๋ฉด docker/docker-compose.issue-monitor.yml ์ค๋ฒ๋ ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ธํ ์ ์ฐจ: Log Issue Monitor ์ด์ ๊ฐ์ด๋.
์์ค์ฝ๋ ๋ฐฉ์ (๊ฐ๋ฐ์์ฉ)
git clone https://github.com/jee1/memento.git
cd memento
npm install
npm run build
npm run db:init
npm run db:migrate
npm run quick-start๋ค์ค ์์ด์ ํธ ์ด์์ ์ํ HTTP MCP ์๋ฒ
SQLite๋ WAL ๋ชจ๋๋ฅผ ์ฌ์ฉํด๋ ๋์์ ํ๋์ writer๋ง ํ์ฉํฉ๋๋ค. ์ฌ๋ฌ AI Agent๊ฐ ๊ฐ๊ฐ ํ๋ก์ธ์ค๋ก remember/forget์ ํธ์ถํ๋ฉด SQLITE_BUSY๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ๋ฐ๋์ MCP ์๋ฒ ํ๋ก์ธ์ค๋ฅผ ํ๋๋ง ๋์ DB๋ฅผ ์ ๋ดํ๋๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
npm run dev:http # ๊ฐ๋ฐ ๋ชจ๋ (Hot Reload)
npm run build && npm run start:http # ํ๋ก๋์
์ด ๋ฐฉ์์ผ๋ก packages/memento-server์ HTTP MCP ์๋น์ค๋ฅผ ๋์ ๋๋ฉด, ๋ชจ๋ ์์ด์ ํธ๋ HTTP/WebSocket ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ด ์๋ฒ์๋ง ์ ์ํ๊ณ SQLite writer๋ ๋จ์ผ ํ๋ก์ธ์ค๋ก ์ ํ๋ฉ๋๋ค.
MCP ํด๋ผ์ด์ธํธ ์ค์ ์์ (mcp.json)
๋ฃจํธ์์ npm run build ํ ์๋ฒ ์คํ ํ์ผ์ packages/memento-server/dist/server/http-server.js์ ์์ต๋๋ค.
{
"clients": {
"memento": {
"command": "node",
"args": ["/path/to/memento/packages/memento-server/dist/server/http-server.js"],
"env": {
"DB_PATH": "/absolute/path/to/data/memory.db",
"MCP_SERVER_PORT": "9001"
},
"transport": {
"type": "http",
"url": "http://127.0.0.1:9001/mcp"
}
}
}
}์์ธ ์ค์น ๊ฐ์ด๋
INSTALL.md โ ์ ์ฒด ์ค์น ๊ฐ์ด๋
๐ ์ธ๋ถ AI ๋น์์ ํจ๊ป ์ฐ๊ธฐ
OpenClaw / NanoClaw / ZeroClaw ๊ฐ์ ๊ฐ์ธ AI ๋น์๊ฐ Memento๋ฅผ ๊ณต์ ์ฅ๊ธฐ ๊ธฐ์ต ๋ฐฑ์๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ์ด๋: docs/integrations/
@jee1/memento-assistant SDK๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ recall/remember๋ฅผ ์ฝ๋ ๋ ์ค๋ก ๋ถ์ผ ์ ์์ต๋๋ค โ SDK quickstart
๐ก ์ฌ์ฉ ์์
AI Agent์์ ์ฐ๋
// ์ผํ๊ธฐ์ต์ผ๋ก ํ์ต ๋ด์ฉ ์ ์ฅ
await client.callTool({
name: "remember",
arguments: {
content: "์ฌ์ฉ์๋ React Hook์ ํ์ตํ์ต๋๋ค. useState๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ , useEffect๋ ์ฌ์ด๋ ์ดํํธ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.",
type: "episodic",
tags: ["react", "hooks", "javascript"],
importance: 0.8
}
});
// ๋์ค์ ๊ด๋ จ ๊ธฐ์ต ๊ฒ์
const results = await client.callTool({
name: "recall",
arguments: {
query: "React Hook์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์?",
limit: 5
}
});์๋ฏธ๊ธฐ์ต์ผ๋ก ์ง์ ๊ด๋ฆฌ
// ๊ฒฝํ์์ ์ฆ๋ฅ๋ ์ง์์ ์๋ฏธ๊ธฐ์ต์ผ๋ก ์ ์ฅ
await client.callTool({
name: "remember",
arguments: {
content: "TypeScript์ ์ ๋ค๋ฆญ์ ํ์
์ ๋งค๊ฐ๋ณ์ํํ์ฌ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๊ธฐ๋ฅ์
๋๋ค.",
type: "semantic",
tags: ["typescript", "generics", "programming"],
importance: 0.9
}
});์ ์ฐจ๊ธฐ์ต์ผ๋ก ์ํฌํ๋ก ๋ณด์กด
// ๋ฐ๋ณต ์์
์ ์ฐจ๋ฅผ ์ ์ฐจ๊ธฐ์ต์ผ๋ก ์ ์ฅ (๋ฒ์ ๊ด๋ฆฌ๋จ)
await client.callTool({
name: "remember",
arguments: {
content: "Docker ์ปจํ
์ด๋ ๋น๋ ๋ฐ ๋ฐฐํฌ ์ ์ฐจ: 1) Dockerfile ์์ฑ 2) docker build ์คํ 3) docker run์ผ๋ก ํ
์คํธ 4) ๋ ์ง์คํธ๋ฆฌ์ ํธ์",
type: "procedural",
tags: ["docker", "deployment", "devops"],
importance: 0.7
}
});๐ ๏ธ ์ฌ์ฉ๋ฒ
์ธ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ผ๋ก Memento์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
mcp.json ์ค์ : Claude Desktop, Cursor, Claude Code ๋ฑ MCP ํธ์คํธ์ Memento๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ์ (์ฝ๋ ๋ถํ์)
MCP ํ๋กํ ์ฝ (
@modelcontextprotocol/sdk): ์ปค์คํ ์์ด์ ํธ ์ฝ๋์์ MCP ํ๋กํ ์ฝ๋ก ์ง์ ์ฐ๊ฒฐํ๋ ๋ฐฉ์HTTP API ํด๋ผ์ด์ธํธ (
@jee1/memento-client): TypeScript/JavaScript ์ฝ๋์์ Memento ์๋ฒ์ REST API๋ฅผ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ์
0. mcp.json ์ค์ (Claude Desktop ยท Cursor ยท Claude Code)
MCP ํธ์คํธ ์ฑ์์ Memento๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ค์ ํ์ผ์ ์๋ฒ ์ ๋ณด๋ฅผ ๋ฑ๋กํฉ๋๋ค.
stdio ๋ชจ๋ (๋จ์ผ ์์ด์ ํธ / ์์ค ์คํ)
npm run build ํ ์๋์ฒ๋ผ ๋ฑ๋กํฉ๋๋ค.
{
"mcpServers": {
"memento": {
"command": "node",
"args": ["/path/to/memento/packages/memento-server/dist/server/index.js"],
"env": {
"DB_PATH": "/absolute/path/to/data/memory.db"
}
}
}
}ํ์ผ ์์น:
Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json(macOS) /%APPDATA%\Claude\claude_desktop_config.json(Windows)Cursor:
.cursor/mcp.json(ํ๋ก์ ํธ) ๋๋~/.cursor/mcp.json(์ ์ญ)Claude Code:
.claude/mcp.json(ํ๋ก์ ํธ) ๋๋~/.claude/mcp.json(์ ์ญ)
HTTP MCP ๋ชจ๋ (๋ค์ค ์์ด์ ํธ ๊ณต์ ์๋ฒ)
npm run build && npm run start:http # ๊ธฐ๋ณธ ํฌํธ: 9001 (env.exampleยทDocker์ ๋์ผ){
"mcpServers": {
"memento": {
"type": "http",
"url": "http://127.0.0.1:9001/mcp"
}
}
}npx๋ก ์คํํ๋ ๊ฒฝ์ฐ (์์ค ๋น๋ ์์ด):
{ "mcpServers": { "memento": { "command": "npx", "args": ["memento-mcp-server@latest"], "env": { "DB_PATH": "/absolute/path/to/data/memory.db" } } } }
1. MCP ํ๋กํ ์ฝ ์ฐ๊ฒฐ (@modelcontextprotocol/sdk)
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
const client = new Client({
name: "my-agent",
version: "0.1.0"
}, {
capabilities: { tools: {}, resources: {}, prompts: {} }
});
// stdio ์ฐ๊ฒฐ (๋จ์ผ ํ๋ก์ธ์ค)
await client.connect({
command: "node",
args: ["packages/memento-server/dist/server/index.js"]
});
// HTTP MCP ์ฐ๊ฒฐ (๋ค์ค ์์ด์ ํธ ๊ณต์ ์๋ฒ)
await client.connect({
transport: {
type: "http",
url: "http://127.0.0.1:9001/mcp"
}
});const result = await client.callTool({
name: "remember",
arguments: {
content: "React Hook์ ๋ํด ํ์ตํ์ต๋๋ค.",
type: "episodic",
tags: ["react", "hooks"],
importance: 0.8
}
});
const results = await client.callTool({
name: "recall",
arguments: {
query: "React Hook์ ์ฒ์ ๋ฐฐ์ธ ๋ ์์์ผ ํ ๊ฒ๋ค์?",
filters: { type: ["episodic", "semantic"], tags: ["react"] },
limit: 10
}
});2. HTTP API ํด๋ผ์ด์ธํธ (@jee1/memento-client)
@jee1/memento-client๋ MCP ํ๋กํ ์ฝ์ด ์๋ HTTP REST API ๋ํผ์
๋๋ค. TypeScript/JavaScript ์ ํ๋ฆฌ์ผ์ด์
์์ /tools/* ์๋ํฌ์ธํธ๋ฅผ ์ง์ ํธ์ถํ ๋ ์ฌ์ฉํฉ๋๋ค.
import { MementoClient } from "@jee1/memento-client";
const client = new MementoClient({
serverUrl: "http://localhost:9001",
apiKey: "your-api-key"
});
await client.connect();
const result = await client.remember({
content: "React Hook์ ๋ํด ํ์ตํ์ต๋๋ค.",
type: "episodic",
tags: ["react", "hooks"],
importance: 0.8
});
const results = await client.recall(
"React Hook์ ์ฒ์ ๋ฐฐ์ธ ๋ ์์์ผ ํ ๊ฒ๋ค์?",
{ type: ["episodic", "semantic"], tags: ["react"] },
10
);
await client.pin(result.memory_id);
await client.forget(result.memory_id);๐ง ๊ธฐ๋ฅ
๐ง ํต์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ (MCP ํด๋ผ์ด์ธํธ)
๊ธฐ์ต ์ ์ฅ:
working,episodic,semantic,procedural4๊ฐ์ง ํ์๊ธฐ์ต ๊ฒ์: ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์ (ํ ์คํธ FTS5 + ๋ฒกํฐ)
์ด์ ๊ธฐ์ต ํ์: ๋ฒกํฐ ์ ์ฌ๋ ๊ธฐ๋ฐ ์๋ ์ถ์ฒ
๊ธฐ์ต ๊ณ ์ : ์ค์ ๊ธฐ์ต pin/unpin
๊ธฐ์ต ์ญ์ : ์ํํธ/ํ๋ ์ญ์
์ต์ปค ์์คํ : ํต์ฌ ๊ธฐ์ต์ ์ต์ปค๋ก ๊ณ ์ ํด ๋ค์ ๋ํ์์ ์ฆ์ ์ปจํ ์คํธ ๋ณต์
์ฐธ๊ณ : ์ต์ปค ๋ณต์, ์๋ฒ ๋ฉ ๋ง์ด๊ทธ๋ ์ด์ , Episodic โ Semantic ๋ณํ, ๋ฉํ ๋ฉ๋ชจ๋ฆฌ ํต๊ณ๋ MCP ๋๊ตฌ๊ฐ ์๋๋ผ HTTP ๊ด๋ฆฌ API๋ก๋ง ์ ๊ณต๋ฉ๋๋ค.
๐ ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์
ํ ์คํธ์ ์๋ฏธ(๋ฒกํฐ)๋ฅผ ํจ๊ป ๊ฒ์ํ๋ค. ํค์๋๊ฐ ์ ํํ ๊ธฐ์ต๋์ง ์์๋, ๊ฐ๋ ์ด ๋น์ทํ๋ฉด ์ฐพ์๋ธ๋ค.
FTS5 ํ ์คํธ ๊ฒ์: SQLite Full-Text Search
๋ฒกํฐ ๊ฒ์: sqlite-vec ๊ธฐ๋ฐ ์๋ฏธ์ ์ ์ฌ๋ ๊ฒ์
ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์: ๋ ๊ฒ์์ ๊ฒฐํฉ (Consolidation Score๋ก ๊ฐ์ค์น ์กฐ์ )
๋ค์ค ์๋ฒ ๋ฉ ์ ๊ณต์: TF-IDF, MiniLM, OpenAI, Gemini ์ง์
์๋ ์ ๊ณต์ ์ ํ: ์ค์ ๊ธฐ๋ฐ ์ต์ ์ ๊ณต์ ์๋ ์ ํ, ์คํจ ์ ์๋ ํด๋ฐฑ
ํ๊ทธ ๊ธฐ๋ฐ ํํฐ๋ง: ๋ฉํ๋ฐ์ดํฐ ๊ธฐ๋ฐ ๊ฒ์
๐งน ๋ง๊ฐ ์ ์ฑ
๊ธฐ์ต ์์คํ ์ด ์ง์ง ์ ์ฉํ๋ ค๋ฉด, ๋ง๊ฐ๋ ์ค๊ณํด์ผ ํ๋ค. ์์ด๊ธฐ๋ง ํ๋ ๊ธฐ์ต์ ์ก์์ด ๋๋ค.
๋ง๊ฐ ์๊ณ ๋ฆฌ์ฆ: ์ต๊ทผ์ฑยท์ฌ์ฉ์ฑยท์ค๋ณต ๋น์จ ๊ธฐ๋ฐ ๋ง๊ฐ ์ ์ ๊ณ์ฐ
๊ฐ๊ฒฉ ๋ฐ๋ณต: ์ค์๋์ ์ฌ์ฉ์ฑ ๊ธฐ๋ฐ ๋ฆฌ๋ทฐ ์ค์ผ์ค๋ง
TTL ๊ด๋ฆฌ: ํ์ ๋ณ ์๋ช ๊ด๋ฆฌ (working 48์๊ฐ, episodic 90์ผ, semanticยทprocedural ๋ฌด๊ธฐํ)
์๋ ์ ๋ฆฌ: ์ํํธ/ํ๋ ์ญ์ ์๋ํ
๐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง (HTTP ๊ด๋ฆฌ API)
๋ณด์: HTTP ์๋ฒ๋ ๋ธ๋ผ์ฐ์ ์ธ์ ๊ณผ ํค๋ ๊ธฐ๋ฐ ์ ๋ขฐ ๊ฒฝ๊ณ๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค.
/auth/session์ ์ฟ ํค ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ์ธ์ ์ ์์ํ๊ณ ,/admin๊ณผ/api๋ ๋ธ๋ผ์ฐ์ ์ธ์ ์ด ํ์ํ๋ฉฐ,/api/v1/quality,/api/v1/maintenance,/tools,/mcp๋Authorization: Bearer๋๋X-API-Key๊ฐ ํ์ํฉ๋๋ค. ์์ธํ ๋ด์ฉ: docs/reference/ko/security.md
์ค์๊ฐ ๋ฉํธ๋ฆญ: ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๊ฒ์, ๋ฉ๋ชจ๋ฆฌ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
์ค์๊ฐ ์๋ฆผ: 30์ด๋ง๋ค ์๋ ์ฑ๋ฅ ์ฒดํฌ ๋ฐ ์๊ณ๊ฐ ๊ธฐ๋ฐ ์๋ฆผ
์๋ฌ ๋ก๊น : ๊ตฌ์กฐํ๋ ์๋ฌ ๋ก๊น ๋ฐ ํต๊ณ ์์ง
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ต์ ํ: ์๋ ์ธ๋ฑ์ค ์ถ์ฒ ๋ฐ ์์ฑ
์บ์ ์์คํ : LRU + TTL ๊ธฐ๋ฐ ์บ์ฑ
๋น๋๊ธฐ ์ฒ๋ฆฌ: ์์ปค ํ ๊ธฐ๋ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ
๐ ๋ฉ๋ชจ๋ฆฌ ๊ทธ๋ํ ๋ทฐ (๋ธ๋ผ์ฐ์ )
HTTP ์๋ฒ ์คํ ํ ๋ธ๋ผ์ฐ์ ์์ ๊ธฐ์ต๋ค์ ์๋ฏธ์ ๊ด๊ณ๋ฅผ ๊ทธ๋ํ๋ก ์๊ฐํํ ์ ์์ต๋๋ค. ์ ์ฒด ๊ด๋ฆฌ ํ๋ฆ์ /dashboard์์ ์ฌ๋ ํธ์ด ๊ฐ์ฅ ์์ ํ๋ฉฐ, /graph๋ฅผ ์ง์ ์ด์ด๋ ๋์ผํ /auth/session ๊ธฐ๋ฐ ์ฌ์ธ์ฆ ํจ๋๋ก ์ธ์
์ ์์ํ๊ฑฐ๋ ๋ณต๊ตฌํ ์ ์์ต๋๋ค.
http://localhost:9001/dashboard
http://localhost:9001/graph
๐ ๋ฌธ์
์ ์ฒด ๋ฌธ์ ๋ชฉ๋กยทKO/EN ๋งคํ: docs/README.md
๐ API ๋ฌธ์
MCP Tools (๋ฑ๋ก 22๊ฐ, ๊ธฐ๋ณธ ๋ ธ์ถ 4๊ฐ)
์ค์: ์๋ฒ์๋ ๋๊ตฌ 22๊ฐ๊ฐ ๋ฑ๋ก๋์ด ์์ง๋ง,
tools/list์๋ ๊ธฐ๋ณธ์ ์ผ๋กrecallยทrememberยทmemory_injectionยทfeedback4๊ฐ๋ง ๋ ธ์ถ๋ฉ๋๋ค(v1.18+). ๋๊ตฌ ์ ์๋ ์ธ์ ๋ด๋ด ํด๋ผ์ด์ธํธ ์ปจํ ์คํธ๋ฅผ ์ ์ ํ๋ฏ๋ก, ๋ ์ผ๋๋ ์๋ฒ์ผ์๋ก ๊ธฐ๋ณธ ํ๋ฉด์ ์ค์ด๋ ํธ์ด ๋ซ์ต๋๋ค(์ธก์ : 5,860 โ 2,954 ์ถ์ ํ ํฐ, 49.6% ๊ฐ์).๋๋จธ์ง 18๊ฐ๋ ๋ฑ๋ก๋ ์ฑ๋ก ๋จ์ ํธ์ถ์ ๊ทธ๋๋ก ๋ฉ๋๋ค โ ๋ชฉ๋ก์์๋ง ๋น ์ง๋๋ค. ์ ๋ถ ๋์ดํ๋ ค๋ฉด
MEMENTO_TOOLSET=full์ ์ค์ ํ์ธ์. ๊ด๋ฆฌ/์ด์์ฑ ๊ธฐ๋ฅ(์ต์ปค ๋ณต์, ์๋ฒ ๋ฉ ๋ง์ด๊ทธ๋ ์ด์ , EpisodicโSemantic ๋ณํ, ๋ฉํ ๋ฉ๋ชจ๋ฆฌ ํต๊ณ)์ ์ฌ์ ํ HTTP API๋ก๋ง ์ ๊ณต๋ฉ๋๋ค.
๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ (8๊ฐ)
Tool | ์ค๋ช | ํ๋ผ๋ฏธํฐ |
| ๊ธฐ์ต ์ ์ฅ | content, type, tags, importance, source, privacy_scope |
| ๊ธฐ์ต ๊ฒ์ | query, filters, limit |
| recall ๊ฒฐ๊ณผ helpful/not_helpful ํผ๋๋ฐฑ | memory_id, helpful |
| ๊ธฐ์ต ๊ณ ์ | memory_id |
| ๊ธฐ์ต ๊ณ ์ ํด์ | memory_id |
| ๊ธฐ์ต ์ญ์ | memory_id, hard |
| ์ด์ ๊ธฐ์ต ํ์ | memory_id, limit |
| ์ปจํ ์คํธ ์ฃผ์ ํ๋กฌํํธ ์์ฑ | query, token_budget |
์ต์ปค ์์คํ (4๊ฐ)
Tool | ์ค๋ช | ํ๋ผ๋ฏธํฐ |
| ์ต์ปค ์ค์ | memory_id, slot |
| ์ต์ปค ์กฐํ | slot |
| ์ต์ปค ์ฃผ๋ณ ๊ฒ์ | slot, query, limit |
| ์ต์ปค ์ ๊ฑฐ | slot |
์ ์ฐจ ๊ธฐ์ต (3๊ฐ)
Tool | ์ค๋ช | ํ๋ผ๋ฏธํฐ |
| ์ ์ฐจ ๊ธฐ์ต ์ ์ฅ | content, workflow_name, skill_name, steps ๋ฑ |
| ์ ์ฐจ ๊ธฐ์ต ๋ฒ์ ๊ฐ ์ฐจ์ด ๋น๊ต | left_id, right_id |
| ์ ์ฐจ ๊ธฐ์ต ์ด์ ๋ฒ์ ์ผ๋ก ๋ณต์ | current_id, target_version_id |
๊ด๊ณยท์ง์ ๊ทธ๋ํ (4๊ฐ)
Tool | ์ค๋ช | ํ๋ผ๋ฏธํฐ |
| ๋ณธ๋ฌธ์์ SPO ํธ๋ฆฌํ ์ถ์ถ | content ๋๋ messages |
| ๊ธฐ์ต ๊ฐ ๊ด๊ณ ์ถ๊ฐ | source_id, target_id, relation_type |
| ๊ด๊ณ ์กฐํ | memory_id ๋ฑ |
| ๊ด๊ณ ์ญ์ | relation_id |
ํ์งยท๋ด๋ณด๋ด๊ธฐ (3๊ฐ)
Tool | ์ค๋ช | ํ๋ผ๋ฏธํฐ |
| ์ ์ ๋ขฐยท๊ณ ์คํจ ๊ธฐ์ต ์์ฝ | โ |
| ๊ฒ์ยท๋ฉ๋ชจ๋ฆฌ ํ์ง ํ ๋ ๋ฉํธ๋ฆฌ | period |
| ๊ธฐ์ต ๋ด๋ณด๋ด๊ธฐ | filters ๋ฑ |
HTTP ์ ์ฉ (MCP์ ์์): restore_anchors, migrate_embeddings, convert_episodic_to_semantic, get_meta_memory_stats โ ์๋ HTTP ๊ด๋ฆฌ API ์ฐธ์กฐ.
HTTP ๊ด๋ฆฌ API
์ค์: ๋ค์ ๊ธฐ๋ฅ๋ค์ MCP ํด๋ผ์ด์ธํธ์ ๋ ธ์ถ๋์ง ์์ผ๋ฉฐ, HTTP API๋ก๋ง ์ ๊ณต๋ฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
์๋ํฌ์ธํธ | ์ค๋ช | ๋ฉ์๋ |
| ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ | POST |
| Episodic โ Semantic ๋ณํ | POST |
| ๋ฉํ ๋ฉ๋ชจ๋ฆฌ ํต๊ณ ์กฐํ | GET |
| ๊ธฐ์ต ๋ฆฌ๋ทฐ ํ๋ณด ๋ชฉ๋ก | GET |
| ๋จ์ผ ๊ธฐ์ต ํ๋ฆฌ๋ทฐ(JSON, ๋์๋ณด๋ ๋ฑ) | GET |
| ๊ธฐ์ต ๋ฆฌ๋ทฐ ํ๋ณด ์ฒ๋ฆฌ | POST |
| ๊ธฐ์ต ๋ฆฌ๋ทฐ ํ๋ณด ๊ธฐ๊ฐ | POST |
| ๋ง๊ฐ ํต๊ณ ์กฐํ | GET |
๊ฐ์ธ ์ง์ Agent
์๋ํฌ์ธํธ | ์ค๋ช | ๋ฉ์๋ |
| ํ ํด ์คํ, ์ง์ ํ๋ณด ๋ฐํ(์ ์ฅ ์์) | POST |
| ์น์ธ๋ ํ๋ณด๋ง | POST |
์ฌ์ฉ ์ ์ฐจ: ๊ฐ์ธ ์ง์ ์์ด์ ํธ HTTP ์๋ฒ ๋ฐํ์ ์ฌ์ฉ๋ฒ
์ต์ปค ๊ด๋ฆฌ
์๋ํฌ์ธํธ | ์ค๋ช | ๋ฉ์๋ |
| ์ต์ปค ๋ณต์ | POST |
์๋ฒ ๋ฉ ๊ด๋ฆฌ
์๋ํฌ์ธํธ | ์ค๋ช | ๋ฉ์๋ |
| ์๋ฒ ๋ฉ ๋ง์ด๊ทธ๋ ์ด์ | POST |
์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
์๋ํฌ์ธํธ | ์ค๋ช | ๋ฉ์๋ |
| ์ฑ๋ฅ ํต๊ณ ์กฐํ | GET |
| ์ฑ๋ฅ ์๋ฆผ ์กฐํ | GET |
์๋ฌ ๊ด๋ฆฌ
์๋ํฌ์ธํธ | ์ค๋ช | ๋ฉ์๋ |
| ์๋ฌ ํต๊ณ ์กฐํ | GET |
| ์๋ฌ ํด๊ฒฐ | POST |
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ
์๋ํฌ์ธํธ | ์ค๋ช | ๋ฉ์๋ |
| ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ต์ ํ | POST |
๊ธฐํ HTTP admin: ๋ฐฐ์น ์ํ/์คํ(/admin/batch/*, jobType์ memory_review_candidates ํฌํจ), ์ฑ๋ฅ ๋ฉํธ๋ฆญยท์๋ฆผ(/admin/performance/*), ๊ด๊ณ ์ถ์ถยท์กฐํยท์๊ฐํ(/admin/relations/*) ๋ฑ์ docs/api/ko/api-reference.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Resources
Resource | ์ค๋ช |
| ๋จ์ผ ๊ธฐ์ต ์์ธ ์ ๋ณด |
| ๊ฒ์ ๊ฒฐ๊ณผ ์บ์ |
๐ง ์ค์
ํ๊ฒฝ ๋ณ์
๋ณ์ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
| development | ์คํ ํ๊ฒฝ |
| 9001 (http-server fallback) | HTTP/MCP ์๋ฒ ํฌํธ ( |
| ./data/memory.db | ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒฝ๋ก |
| info | ๋ก๊ทธ ๋ ๋ฒจ |
| - | OpenAI API ํค (์ ํ์ฌํญ) |
| - | Gemini API ํค (์ ํ์ฌํญ) |
| minilm | ์๋ฒ ๋ฉ ์ ๊ณต์ (tfidf, lightweight, minilm, openai, gemini) |
| false | Consolidation Score System ํ์ฑํ ์ฌ๋ถ |
| ./data/consolidation-seed.json | ํ ์คํธ Seed ๋ฐ์ดํฐ ํ์ผ ๊ฒฝ๋ก |
| ./data/consolidation-baseline.json | Baseline ์ค๋ ์ท ์ ์ฅ ๊ฒฝ๋ก |
| 100 | ๋ฒค์น๋งํฌ ํ ์คํธ ๋ฐ์ดํฐ ํฌ๊ธฐ |
| (๋น์ด ์์) | CORS ํ์ฉ ์ค๋ฆฌ์ง (์ผํ ๊ตฌ๋ถ, ๋น์ด ์์ผ๋ฉด ํฌ๋ก์ค ์ค๋ฆฌ์ง ๋ฏธํ์ฉ) |
| true | PII ๋ง์คํน ํ์ฑํ (docs/reference/ko/security.md ์ฐธ๊ณ ) |
|
| ๊ธฐ์ต ๋ฆฌ๋ทฐ ํ๋ณด ์ต์ importance (0~1) |
|
| ๊ธฐ์ต ๋ฆฌ๋ทฐ ํ๋ณด ์ต์ stale ์ผ์ (์ ์ โฅ 1) |
|
| ๊ธฐ์ต ๋ฆฌ๋ทฐ ํ๋ณด ์ต๋ ๊ฐ์ (์ ์ โฅ 1) |
|
| pending ํ๋ณด๊ฐ ์ด ์ ์ด์์ด๋ฉด ์ ๊ท ์ ์ ์ ๊ฑด๋๋ ( |
|
| ์ด ์ผ์๋ณด๋ค ์ค๋๋ pending ํ๋ณด๋ฅผ ๋ฐฐ์น ์คํ ์ ์ ๋ง๋ฃ ( |
|
| ๋ฐฐ์น ์ค์ผ์ค ๊ฐ๊ฒฉ(ms), ์ต์ |
|
| ๋ฐฐ์น๊ฐ |
์ฐธ๊ณ : ๋ง๊ฐ TTL, LLM/Ollama, ๊ฒ์ ํ๋ ๋ฑ ์ถ๊ฐ ๋ณ์๋
env.example์ ์ฐธ๊ณ ํ์ธ์.
๋ง๊ฐ ์ ์ฑ ์ค์
FORGET_THRESHOLD=0.6
SOFT_DELETE_THRESHOLD=0.6
HARD_DELETE_THRESHOLD=0.8
TTL_SOFT_WORKING=2
TTL_SOFT_EPISODIC=30
TTL_SOFT_SEMANTIC=180
TTL_SOFT_PROCEDURAL=90๐งช ํ ์คํธ
npm run test
npm run test:ci:core
npm run test:ci:server
npm test -w @jee1/memento-client
npm run benchmark:consolidation-quality
npm run test -- --watch
npm run test -- --coverage๊ณต๊ฐ ๋ฐ์ดํฐ์
(LongMemEval-SยทLoCoMo)์ผ๋ก ๊ฒ์ ํ์ง์ ์ฌ๋ ํ๋ค์ค๋ npm run quality -- longmemeval acquireยทnpm run quality -- locomo acquire๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋ค npm run quality -- locomo benchmark๋ก ๋๋ฆฝ๋๋ค. ์๋ณธ ๋ฐ์ดํฐ๋ ์ปค๋ฐํ์ง ์์ผ๋ฉฐ, LoCoMo๋ CC BY-NC 4.0(๋น์์
) ์ด๋ผ ์์
์ ์ฌ์ฉ์ด ๋ถ๊ฐํฉ๋๋ค. ์ ์ฐจ์ ํ์ฌ ์์น๋ benchmark-datasets.md์ ์๊ณ , ํ๋ก๋์
๊ฒ์์ด ๋จ์ FTS ๋ฒ ์ด์ค๋ผ์ธ์ ๋์ง ๋ชปํ ์ํ๋ผ ๋์ธ ์์น๋ก ์ฐ์ง ์์ต๋๋ค.
๐ ๊ฐ๋ฐ์ ๊ฐ์ด๋๋ผ์ธ
ํ๋ก์ ํธ ๊ตฌ์กฐ: npm workspaces ๋ชจ๋ ธ๋ ํฌ โ
packages/memento-core,packages/memento-server,packages/memento-client,apps/*. ์์ธ: AGENTS.md๋น๋/ํ ์คํธ:
npm run build(coreโserverโclient),npm run devยทnpm start(์๋ฒ),npm run db:initยทnpm run db:migrate(DB),npm test์ฝ๋ฉ ์คํ์ผ: Node.js โฅ 24, TypeScript ES ๋ชจ๋, 2์นธ ๋ค์ฌ์ฐ๊ธฐ
ํ ์คํธ: Vitest ๊ธฐ๋ฐ. ๋จ์ยท์คํ์
packages/*/src/**/*.spec.ts, ์ํฌ์คํ์ด์ค ์์ค ํตํฉ ์คํ์ ๋ฃจํธtests/์ปค๋ฐ/PR: Conventional Commits, ํ๊ตญ์ด ์ปจํ ์คํธ ํฌํจ
๐ ์ฑ๋ฅ ์งํ
๊ธฐ๋ณธ ์ฑ๋ฅ
๋ฐ์ดํฐ๋ฒ ์ด์ค: ํ๊ท ์ฟผ๋ฆฌ ์๊ฐ 0.16-0.22ms
๊ฒ์: 0.78-4.24ms (์บ์ ํจ๊ณผ๋ก ๊ฐ์ )
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: 11-15MB ํ
๋์ ์ฐ๊ฒฐ: ์ต๋ 1000๊ฐ
์๋ฒ ๋ฉ ์ ๊ณต์ ๋น๊ต
๋ฌด๋ฃ ์ ๊ณต์ (๋ก์ปฌ ์ฒ๋ฆฌ)
TF-IDF: 512์ฐจ์, ๊ทน๋๋ก ๋น ๋ฆ (0.82ms), ๋ฎ์ ๋ฉ๋ชจ๋ฆฌ (4.48MB)
MiniLM: 384์ฐจ์, ๊ท ํ์กํ ์ฑ๋ฅ, ๋ค๊ตญ์ด ์ง์
์ ๋ฃ ์ ๊ณต์ (ํด๋ผ์ฐ๋ API)
OpenAI: 1536์ฐจ์, ์ต๊ณ ์ฑ๋ฅ, ๋์ ์ ํ๋
Gemini: 768์ฐจ์, ๊ณ ์ฑ๋ฅ, ๋ค๊ตญ์ด ์ง์
์๋ ์ ํ ์์: ๋ช
์์ ์์ฒญ โ .env์ EMBEDDING_PROVIDER โ OpenAI(1) โ Gemini(2) โ MiniLM(3) โ TF-IDF(4). ์์ ์ ๊ณต์ ์คํจ ์ ์๋ ํด๋ฐฑ.
๐๏ธ ์ํคํ ์ฒ ์ฌ์
Memento๋ ๊ฐ์ธ์ฉ ๋ก์ปฌ ์๋ฒ๋ก ์์ํด, ํ ํ์ ์ ๊ฑฐ์ณ, ์กฐ์ง ๊ท๋ชจ์ ๋ฉ๋ชจ๋ฆฌ ํ๋ซํผ์ผ๋ก ์ฑ์ฅํ๋๋ก ์ค๊ณ๋์ด ์๋ค.
M1: ๊ฐ์ธ์ฉ (ํ์ฌ) โ ์ง๊ธ ์ฌ์ฉํ ์ ์๋ ํํ๋ค. SQLite ์๋ฒ ๋๋, FTS5 + sqlite-vec ์ธ๋ฑ์ค, ๋ก์ปฌ ์คํ. ์ธ์ฆ: ๋ธ๋ผ์ฐ์ ์ธ์
+ ํค๋ ๊ธฐ๋ฐ ๋ถ๋ฆฌ ์ ๋ขฐ ๋ชจ๋ธ(/auth/session ์ฟ ํค ์ธ์
, /adminยท/api ๋ธ๋ผ์ฐ์ ์ธ์
์๊ตฌ, /toolsยท/mcp๋ Bearer/API-Key ์๊ตฌ). MCP ๋๊ตฌ 22๊ฐ ๋ฑ๋กยท๊ธฐ๋ณธ ๋
ธ์ถ 4๊ฐ(MEMENTO_TOOLSET=full๋ก ์ ์ฒด), ๊ด๋ฆฌ ๊ธฐ๋ฅ์ HTTP API๋ก ๋ถ๋ฆฌ.
M2: ํ ํ์ (๊ณํ) โ SQLite ์๋ฒ ๋ชจ๋, API Key ์ธ์ฆ, Docker ๋จ์ผ ์ปจํ ์ด๋. ์ฌ๋ฌ ํ์์ด ํ๋์ ๊ธฐ์ต ๋ฐฑ์๋๋ฅผ ๊ณต์ ํ๋ค.
M3: ์กฐ์ง (๊ณํ) โ PostgreSQL + pgvector, JWT ์ธ์ฆ, Docker Compose. ์๋ฐฑ ๋ช ์ ์์ด์ ํธ๊ฐ ์กฐ์ง์ ๊ธฐ์ต์ ๊ณต์ ํ๋ค.
โ ์์ฃผ ๋ฌป๋ ์ง๋ฌธ
Q: Memento๋ ์ด๋ค AI Agent์ ํธํ๋๋์?
A: MCP(Model Context Protocol)๋ฅผ ์ง์ํ๋ ๋ชจ๋ AI Agent์ ํธํ๋ฉ๋๋ค. Claude, GPT-4, Gemini ๋ฑ๊ณผ ์ฐ๋ ๊ฐ๋ฅํฉ๋๋ค.
Q: ๊ธฐ์ต ๋ฐ์ดํฐ๋ ์ด๋์ ์ ์ฅ๋๋์?
A: ๊ธฐ๋ณธ์ ์ผ๋ก ๋ก์ปฌ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค(./data/memory.db)์ ์ ์ฅ๋ฉ๋๋ค.
Q: OpenAI API ํค๊ฐ ํ์ํ๊ฐ์?
A: ์ ํ์ฌํญ์ ๋๋ค. API ํค ์์ด๋ TF-IDF ๋๋ MiniLM ๊ธฐ๋ฐ ์๋ฒ ๋ฉ์ผ๋ก ๋์ํฉ๋๋ค. ๋ ์ ํํ ๊ฒ์์ ์ํ๋ค๋ฉด OpenAI ๋๋ Gemini API ํค๋ฅผ ์ค์ ํ์ธ์.
Q: ๊ธฐ์ต ์ฉ๋์ ์ ํ์ด ์๋์?
A: SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๋ฐฑ๋ง ๊ฐ์ ๊ธฐ์ต์ ์ ์ฅํ ์ ์์ต๋๋ค.
Q: ๋ค๋ฅธ ์ฌ์ฉ์์ ๊ธฐ์ต์ ๊ณต์ ํ ์ ์๋์?
A: ํ์ฌ M1์ ๊ฐ์ธ์ฉ์ ๋๋ค. M2๋ถํฐ ํ ํ์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ์์ ์ ๋๋ค.
Q: ๊ธฐ์ต์ด ์๋์ผ๋ก ์ญ์ ๋๋์?
A: ๋ง๊ฐ ์ ์ฑ
์ ๋ฐ๋ผ ์๋์ผ๋ก ์ญ์ ๋ฉ๋๋ค. ์ค์ํ ๊ธฐ์ต์ pin ๊ธฐ๋ฅ์ผ๋ก ๊ณ ์ ํ ์ ์์ต๋๋ค.
๐ค ๊ธฐ์ฌํ๊ธฐ
Memento ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ณ ์ถ์ผ์ ๊ฐ์? ์์ธํ ๊ฐ์ด๋: CONTRIBUTING.md
๋น ๋ฅธ ๊ธฐ์ฌ ์์
Fork the Project
Create your Feature Branch (
git checkout -b feature/AmazingFeature)Commit your Changes (
git commit -m 'feat: add some AmazingFeature')Push to the Branch (
git push origin feature/AmazingFeature)Open a Pull Request
๊ฐ๋ฐ ํ๊ฒฝ ์ค์
git clone https://github.com/your-username/memento.git
cd memento
npm install
npm run dev
npm run test๊ธฐ์ฌ ๋ฐฉ๋ฒ
๋ฒ๊ทธ ๋ฆฌํฌํธ: GitHub Issues
๊ธฐ๋ฅ ์ ์: ์๋ก์ด ์์ด๋์ด๋ฅผ ์ ์ํด์ฃผ์ธ์
๋ฌธ์ ๊ฐ์ : ๋ฌธ์๋ฅผ ๋ ๋ช ํํ๊ฒ ๋ง๋ค์ด์ฃผ์ธ์
์ฝ๋ ๊ธฐ์ฌ: ์๋ก์ด ๊ธฐ๋ฅ์ด๋ ๋ฒ๊ทธ ์์ ์ ๋์์ฃผ์ธ์
๐ ๋ผ์ด์ ์ค
์ด ํ๋ก์ ํธ๋ MIT License ํ์ ๋ฐฐํฌ๋ฉ๋๋ค. package.json์ "license": "MIT" ์ ๋์ผํฉ๋๋ค.
๐ ์ง์
์ด์ ๋ฆฌํฌํธ: GitHub Issues
๋ฌธ์: Wiki
๊ฐ๋ฐ์ ๊ฐ์ด๋: docs/guides/ko/developer-guide.md
API ์ฐธ์กฐ: docs/api/ko/api-reference.md
๐ ๊ฐ์ฌ์ ๋ง
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Persistent personal memory for AI assistants โ save, search, and recall across every MCP client.
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Persistent memory for AI agents across Claude, ChatGPT and any MCP client.
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceGives AI agents persistent memory with semantic search, automatic extraction, and memory decay, accessible via MCP protocol.13MIT
- AlicenseAqualityDmaintenanceProvides persistent memory with semantic search for MCP-based AI agents, enabling them to store and recall information across sessions using vector embeddings.41MIT
- AlicenseNot gradedqualityCmaintenanceEnables persistent memory for AI agents, combining episodic and semantic memory with LLM reasoning, accessible via MCP.2MIT
- AlicenseNot gradedqualityCmaintenancePersistent memory infrastructure for AI agents, enabling cross-session recall and autonomous memory evolution via an MCP server.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jee1/memento'
If you have feedback or need assistance with the MCP directory API, please join our Discord server