Skip to main content

Conversation memory and workspace management MCP server for Amazon Q CLI with ChromaDB real-time sync

Project description

AWS Q Memory MCP Server (q_mem_mcp_server)

A Model Context Protocol (MCP) server that provides conversation memory and workspace management for Amazon Q CLI.

๐ŸŽฏ Key Features

  • Automatic Conversation Saving: Real-time sync of Q CLI conversations to ChromaDB
  • Workspace Management: Organize conversations by topics/workspaces with natural language support
  • Context Restoration: Resume previous conversations with full context memory
  • Semantic Search: Search through conversation history using natural language

๐Ÿš€ Quick Start

1. MCP Configuration

Add to ~/.aws/amazonq/mcp.json:

{
  "mcpServers": {
    "q-mem": {
      "command": "uvx",
      "args": ["q_mem_mcp_server@latest"],
      "env": {
        "Q_CLI_DB_PATH": "~/Library/Application Support/amazon-q/data.sqlite3",
        "Q_MEM_VERBOSE": "true"
      },
      "disabled": false,
      "autoApprove": [
        "start_workspace",
        "resume_workspace", 
        "search_memory_by_workspace",
        "get_storage_stats",
        "list_workspaces"
      ]
    }
  }
}

2. Usage Examples

# Start Q CLI
q chat

# Start a new workspace
start_workspace(description="backendDev")
# OR natural language: "๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋กœ ์‹œ์ž‘ํ•ด์ค˜"

# Chat normally (automatically saved)
# ... have conversations ...

# List workspaces
list_workspaces()
# OR natural language: "์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ชฉ๋ก ๋ณด์—ฌ์ค˜"

# Resume workspace (loads full context)
resume_workspace(workspace_id="backendDev")
# OR natural language: "๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋กœ ์žฌ๊ฐœํ•ด์ค˜"

๐Ÿ› ๏ธ Available Commands

Command Description
start_workspace(description) Start a new workspace
list_workspaces() List all workspaces
resume_workspace(workspace_id) Resume workspace with full context
search_memory_by_workspace(workspace_id, query) Search previous conversations
delete_workspace(workspace_id, confirm=true) Delete a workspace
get_storage_stats() Check storage status

Natural Language Support: You can also use natural language like "๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋กœ ์‹œ์ž‘ํ•ด์ค˜" or "resume backend development workspace"

๐Ÿ”ง Technology Stack

  • ChromaDB: Vector database for conversation storage and search
  • SQLite WAL: Real-time sync with Q CLI database
  • Sentence Transformers: Semantic search embeddings
  • MCP Protocol: Communication with Amazon Q

๐Ÿ“ Data Storage

  • ChromaDB: ~/.Q_mem/chroma_db/
  • Sync State: ~/.Q_mem/sync_state.json
  • Logs: ~/.Q_mem/q_mem.log

๐Ÿ”„ Auto-Sync Features

Q CLI conversations are automatically saved to ChromaDB in real-time:

  • Real-time Detection: Checks for new conversations every 2 seconds
  • Partial Failure Handling: Saves successful conversations even if some fail
  • Auto Recovery: Automatically recovers from consecutive failures
  • State Restoration: Restores sync state after restart

๐ŸŒŸ Revolutionary Multi-Persona Workflow Example

Experience the power of seamless context switching between different expert personas:

# === Day 1: Backend Development Context ===
q chat
> start_session(description="backendDev")
# OR natural language: "Start backend development context"
โœ… Context 'backendDev' started

> "You are now a backend developer persona. Help me design a microservices architecture"
๐ŸŽฏ Backend Developer: I'll help you design a robust microservices architecture...

> "Store my PyPI API key: pypi-AgEI..."
โœ… PyPI API key stored for future deployments

> "Design a user authentication service with JWT"
๐ŸŽฏ Backend Developer: Here's a comprehensive JWT authentication service design...
# ... detailed backend discussion continues ...

# === Day 2: Database Design Context ===
q chat  
> start_session(description="dba")
# OR natural language: "Start database administrator context"
โœ… Context 'dba' started

> "You are now a database administrator persona. Help me optimize the user service database"
๐ŸŽฏ Database Administrator: I'll help you optimize your database design...

> "What's the best indexing strategy for user lookups?"
๐ŸŽฏ Database Administrator: For optimal user lookup performance, consider these indexing strategies...
# ... detailed database discussion continues ...

# === Day 3: Seamless Context Switching ===
q chat
> list_sessions()
# OR natural language: "Show me all contexts"
๐Ÿ“‹ Your contexts:
1. backendDev (15 conversations) - Backend development and API design
2. dba (8 conversations) - Database optimization and indexing

> resume_session(context_id="backendDev")
# OR natural language: "Resume backend development context"
๐Ÿ”„ Context 'backendDev' resumed with full context
๐ŸŽฏ Backend Developer: Welcome back! We were discussing JWT authentication service...

> "Remember my PyPI key? I need to deploy the auth service we designed"
๐ŸŽฏ Backend Developer: Yes! Using your stored PyPI key: pypi-AgEI...
โœ… Deploying q_auth_service v1.0.0 to PyPI...

> "Now switch to DBA context to check if our database design supports this deployment"
> resume_session(context_id="dba")
# OR natural language: "Switch to database administrator context"
๐Ÿ”„ Context 'dba' resumed with full context  
๐ŸŽฏ Database Administrator: Checking the indexing strategy we discussed for the auth service...

> "The backend team deployed the JWT service. Does our index design handle the expected load?"
๐ŸŽฏ Database Administrator: Based on our previous optimization discussion, the composite index on (user_id, created_at) will handle the JWT validation queries efficiently...

# === Day 4: Cross-Context Knowledge Integration ===
> search_memory_by_context(context_id="backendDev", query="JWT token expiration")
# OR natural language: "Search for JWT token expiration in backend context"
๐Ÿ” Found in backendDev context:
- "JWT tokens should expire in 15 minutes for security"
- "Refresh tokens valid for 7 days"
- "Store refresh tokens in Redis for fast lookup"

> resume_session(context_id="dba")
# OR natural language: "Switch back to database context"
๐ŸŽฏ Database Administrator: I remember we need to optimize for JWT refresh token storage...

> "Based on the backend context, we need Redis optimization for 7-day refresh tokens"
๐ŸŽฏ Database Administrator: Perfect! Let me design a Redis clustering strategy for high-availability refresh token storage...

๐Ÿš€ Why This Is Revolutionary

  1. Persistent Expertise: Each session maintains specialized knowledge and context
  2. Seamless Switching: Jump between expert personas without losing conversation flow
  3. Cross-Session Intelligence: Search and reference knowledge across different expert contexts
  4. Secure Credential Storage: API keys and sensitive data persist across sessions
  5. Natural Workflow: Mirrors real-world collaboration between different specialists

๐ŸŽฏ Real-World Applications

  • DevOps Teams: Switch between developer, DBA, and infrastructure personas
  • Full-Stack Projects: Frontend, backend, and database expert contexts
  • Learning Paths: Separate contexts for different technologies or concepts
  • Client Projects: Dedicated contexts per client with persistent context
  • Code Reviews: Different perspectives from various expert personas

๐Ÿ’ก Usage Tips

  1. Context Organization: Separate conversations by topics, roles, or projects
  2. Semantic Search: Use natural language rather than exact keywords
  3. Context Utilization: Use resume_session for complete conversation restoration
  4. Regular Cleanup: Delete unnecessary contexts to maintain performance
  5. Cross-Context References: Use search_memory_by_context to find relevant information across personas
  6. Natural Language: Use natural language commands like "๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ ์ปจํ…์ŠคํŠธ๋กœ ์‹œ์ž‘ํ•ด์ค˜"

Memory Management

# Clean up old contexts
cleanup_old_contexts(days=30, confirm=true)
# or natural language: "remove old contexts"

# Delete specific context
delete_context(context_id="context_name", confirm=true)
# or natural language: "delete context context_name"

๐Ÿ“„ License

MIT License

๐Ÿ”— Links


AWS Q Memory MCP Server (q_mem_mcp_server) - KOR

Amazon Q CLI๋ฅผ ์œ„ํ•œ ๋Œ€ํ™” ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์„ธ์…˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” Model Context Protocol (MCP) ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

๐ŸŽฏ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์ž๋™ ๋Œ€ํ™” ์ €์žฅ: Q CLI ๋Œ€ํ™”๋ฅผ ChromaDB์— ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”
  • ์„ธ์…˜ ๊ด€๋ฆฌ: ์ฃผ์ œ/์„ธ์…˜๋ณ„๋กœ ๋Œ€ํ™” ์ •๋ฆฌ
  • ์ปจํ…์ŠคํŠธ ๋ณต์›: ์ด์ „ ๋Œ€ํ™”์˜ ์ „์ฒด ์ปจํ…์ŠคํŠธ์™€ ํ•จ๊ป˜ ์žฌ๊ฐœ
  • ์˜๋ฏธ ๊ฒ€์ƒ‰: ์ž์—ฐ์–ด๋ฅผ ์‚ฌ์šฉํ•œ ๋Œ€ํ™” ๊ธฐ๋ก ๊ฒ€์ƒ‰

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

1. MCP ์„ค์ •

~/.aws/amazonq/mcp.json์— ์ถ”๊ฐ€:

{
  "mcpServers": {
    "q-mem": {
      "command": "uvx",
      "args": ["q_mem_mcp_server@latest"],
      "env": {
        "Q_CLI_DB_PATH": "~/Library/Application Support/amazon-q/data.sqlite3",
        "Q_MEM_VERBOSE": "true"
      },
      "disabled": false,
      "autoApprove": [
        "start_session",
        "resume_session", 
        "search_memory_by_session_id",
        "get_storage_stats",
        "list_sessions"
      ]
    }
  }
}

2. ์‚ฌ์šฉ ์˜ˆ์‹œ

# Q CLI ์‹œ์ž‘
q chat

# ์ƒˆ ์„ธ์…˜ ์‹œ์ž‘
start_session(description="๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ")
# ๋˜๋Š” ์ž์—ฐ์–ด: "๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ ์„ธ์…˜ ์‹œ์ž‘ํ•ด์ค˜"

# ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€ํ™” (์ž๋™ ์ €์žฅ๋จ)
# ... ๋Œ€ํ™” ์ง„ํ–‰ ...

# ์„ธ์…˜ ๋ชฉ๋ก ๋ณด๊ธฐ
list_sessions()
# ๋˜๋Š” ์ž์—ฐ์–ด: "์„ธ์…˜ ๋ชฉ๋ก ๋ณด์—ฌ์ค˜"

# ์„ธ์…˜ ์žฌ๊ฐœ (์ „์ฒด ์ปจํ…์ŠคํŠธ ๋กœ๋“œ)
resume_session(session_id="๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ")
# ๋˜๋Š” ์ž์—ฐ์–ด: "๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ ์„ธ์…˜์œผ๋กœ ์žฌ๊ฐœํ•ด์ค˜"

๐Ÿ› ๏ธ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด

๋ช…๋ น์–ด ์„ค๋ช…
start_session(description) ์ƒˆ ์„ธ์…˜ ์‹œ์ž‘
list_sessions() ๋ชจ๋“  ์„ธ์…˜ ๋ชฉ๋ก ๋ณด๊ธฐ
resume_session(session_id) ์ „์ฒด ์ปจํ…์ŠคํŠธ์™€ ํ•จ๊ป˜ ์„ธ์…˜ ์žฌ๊ฐœ
search_memory_by_session_id(session_id, query) ์ด์ „ ๋Œ€ํ™” ๊ฒ€์ƒ‰
delete_session(session_id, confirm=true) ์„ธ์…˜ ์‚ญ์ œ
get_storage_stats() ์ €์žฅ์†Œ ์ƒํƒœ ํ™•์ธ

๐Ÿ”ง ๊ธฐ์ˆ  ์Šคํƒ

  • ChromaDB: ๋Œ€ํ™” ์ €์žฅ ๋ฐ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • SQLite WAL: Q CLI ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”
  • Sentence Transformers: ์˜๋ฏธ ๊ฒ€์ƒ‰ ์ž„๋ฒ ๋”ฉ
  • MCP Protocol: Amazon Q์™€์˜ ํ†ต์‹ 

๐Ÿ“ ๋ฐ์ดํ„ฐ ์ €์žฅ

  • ChromaDB: ~/.Q_mem/chroma_db/
  • ๋™๊ธฐํ™” ์ƒํƒœ: ~/.Q_mem/sync_state.json
  • ๋กœ๊ทธ: ~/.Q_mem/q_mem.log

๐Ÿ”„ ์ž๋™ ๋™๊ธฐํ™” ๊ธฐ๋Šฅ

Q CLI ๋Œ€ํ™”๊ฐ€ ChromaDB์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ž๋™ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค:

  • ์‹ค์‹œ๊ฐ„ ๊ฐ์ง€: 2์ดˆ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋Œ€ํ™” ํ™•์ธ
  • ๋ถ€๋ถ„ ์‹คํŒจ ์ฒ˜๋ฆฌ: ์ผ๋ถ€ ์‹คํŒจํ•ด๋„ ์„ฑ๊ณตํ•œ ๋Œ€ํ™”๋Š” ์ €์žฅ
  • ์ž๋™ ๋ณต๊ตฌ: ์—ฐ์† ์‹คํŒจ ์‹œ ์ž๋™ ๋ณต๊ตฌ
  • ์ƒํƒœ ๋ณต์›: ์žฌ์‹œ์ž‘ ํ›„ ๋™๊ธฐํ™” ์ƒํƒœ ๋ณต์›

๐ŸŒŸ ํ˜์‹ ์ ์ธ ๋ฉ€ํ‹ฐ ํŽ˜๋ฅด์†Œ๋‚˜ ์›Œํฌํ”Œ๋กœ์šฐ ์˜ˆ์‹œ

์„œ๋กœ ๋‹ค๋ฅธ ์ „๋ฌธ๊ฐ€ ํŽ˜๋ฅด์†Œ๋‚˜ ๊ฐ„์˜ ๋งค๋„๋Ÿฌ์šด ์ปจํ…์ŠคํŠธ ์ „ํ™˜์˜ ํž˜์„ ๊ฒฝํ—˜ํ•ด๋ณด์„ธ์š”:

# === 1์ผ์ฐจ: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ์ปจํ…์ŠคํŠธ ===
q chat
> start_session(description="๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ")
# ๋˜๋Š” ์ž์—ฐ์–ด: "๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ ์ปจํ…์ŠคํŠธ๋กœ ์‹œ์ž‘ํ•ด์ค˜"
โœ… '๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ' ์ปจํ…์ŠคํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค

> "๋„ˆ๋Š” ์ด์ œ๋ถ€ํ„ฐ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ํŽ˜๋ฅด์†Œ๋‚˜์•ผ. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋ฅผ ๋„์™€์ค˜"
๐ŸŽฏ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž: ๊ฒฌ๊ณ ํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋ฅผ ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค...

> "PyPI API ํ‚ค ์ €์žฅํ•ด์ค˜: pypi-AgEI..."
โœ… ํ–ฅํ›„ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด PyPI API ํ‚ค๊ฐ€ ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

> "JWT๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ ์„œ๋น„์Šค ์„ค๊ณ„ํ•ด์ค˜"
๐ŸŽฏ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž: ํฌ๊ด„์ ์ธ JWT ์ธ์ฆ ์„œ๋น„์Šค ์„ค๊ณ„๋ฅผ ์ œ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค...
# ... ์ƒ์„ธํ•œ ๋ฐฑ์—”๋“œ ๋…ผ์˜ ๊ณ„์† ...

# === 2์ผ์ฐจ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„ ์ปจํ…์ŠคํŠธ ===
q chat  
> start_session(description="DBA")
# ๋˜๋Š” ์ž์—ฐ์–ด: "๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž ์ปจํ…์ŠคํŠธ๋กœ ์‹œ์ž‘ํ•ด์ค˜"
โœ… 'DBA' ์ปจํ…์ŠคํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค

> "๋„ˆ๋Š” ์ด์ œ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž ํŽ˜๋ฅด์†Œ๋‚˜์•ผ. ์‚ฌ์šฉ์ž ์„œ๋น„์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ตœ์ ํ™”๋ฅผ ๋„์™€์ค˜"
๐ŸŽฏ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„ ์ตœ์ ํ™”๋ฅผ ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค...

> "์‚ฌ์šฉ์ž ์กฐํšŒ๋ฅผ ์œ„ํ•œ ์ตœ์ ์˜ ์ธ๋ฑ์‹ฑ ์ „๋žต์€ ๋ญ์•ผ?"
๐ŸŽฏ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž: ์ตœ์ ์˜ ์‚ฌ์šฉ์ž ์กฐํšŒ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๋‹ค์Œ ์ธ๋ฑ์‹ฑ ์ „๋žต์„ ๊ณ ๋ คํ•˜์„ธ์š”...
# ... ์ƒ์„ธํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋…ผ์˜ ๊ณ„์† ...

# === 3์ผ์ฐจ: ๋งค๋„๋Ÿฌ์šด ์ปจํ…์ŠคํŠธ ์ „ํ™˜ ===
q chat
> list_sessions()
# ๋˜๋Š” ์ž์—ฐ์–ด: "๋ชจ๋“  ์ปจํ…์ŠคํŠธ ๋ณด์—ฌ์ค˜"
๐Ÿ“‹ ์ปจํ…์ŠคํŠธ ๋ชฉ๋ก:
1. ๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ (15๊ฐœ ๋Œ€ํ™”) - ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ๋ฐ API ์„ค๊ณ„
2. DBA (8๊ฐœ ๋Œ€ํ™”) - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ตœ์ ํ™” ๋ฐ ์ธ๋ฑ์‹ฑ

> resume_session(context_id="๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ")
# ๋˜๋Š” ์ž์—ฐ์–ด: "๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ ์ปจํ…์ŠคํŠธ๋กœ ์žฌ๊ฐœํ•ด์ค˜"
๐Ÿ”„ '๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ' ์ปจํ…์ŠคํŠธ๊ฐ€ ์ „์ฒด ์ปจํ…์ŠคํŠธ์™€ ํ•จ๊ป˜ ์žฌ๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
๐ŸŽฏ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž: ๋‹ค์‹œ ์˜ค์…จ๊ตฐ์š”! JWT ์ธ์ฆ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์žˆ์—ˆ์ฃ ...

> "๋‚ด PyPI ํ‚ค ๊ธฐ์–ตํ•˜์ง€? ์šฐ๋ฆฌ๊ฐ€ ์„ค๊ณ„ํ•œ ์ธ์ฆ ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•ด์•ผ ํ•ด"
๐ŸŽฏ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž: ๋„ค! ์ €์žฅ๋œ PyPI ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค: pypi-AgEI...
โœ… q_auth_service v1.0.0์„ PyPI์— ๋ฐฐํฌ ์ค‘...

> "์ด์ œ DBA ์ปจํ…์ŠคํŠธ๋กœ ์ „ํ™˜ํ•ด์„œ ์šฐ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„๊ฐ€ ์ด ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์ค˜"
> resume_session(context_id="DBA")
# ๋˜๋Š” ์ž์—ฐ์–ด: "๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž ์ปจํ…์ŠคํŠธ๋กœ ์ „ํ™˜ํ•ด์ค˜"
๐Ÿ”„ 'DBA' ์ปจํ…์ŠคํŠธ๊ฐ€ ์ „์ฒด ์ปจํ…์ŠคํŠธ์™€ ํ•จ๊ป˜ ์žฌ๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
๐ŸŽฏ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž: ์ธ์ฆ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด ๋…ผ์˜ํ–ˆ๋˜ ์ธ๋ฑ์‹ฑ ์ „๋žต์„ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค...

> "๋ฐฑ์—”๋“œ ํŒ€์ด JWT ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ–ˆ์–ด. ์šฐ๋ฆฌ ์ธ๋ฑ์Šค ์„ค๊ณ„๊ฐ€ ์˜ˆ์ƒ ๋ถ€ํ•˜๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„๊นŒ?"
๐ŸŽฏ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž: ์ด์ „ ์ตœ์ ํ™” ๋…ผ์˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ, (user_id, created_at) ๋ณตํ•ฉ ์ธ๋ฑ์Šค๊ฐ€ JWT ๊ฒ€์ฆ ์ฟผ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค...

# === 4์ผ์ฐจ: ์ปจํ…์ŠคํŠธ ๊ฐ„ ์ง€์‹ ํ†ตํ•ฉ ===
> search_memory_by_context(context_id="๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ", query="JWT ํ† ํฐ ๋งŒ๋ฃŒ")
# ๋˜๋Š” ์ž์—ฐ์–ด: "๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ ์ปจํ…์ŠคํŠธ์—์„œ JWT ํ† ํฐ ๋งŒ๋ฃŒ ๊ฒ€์ƒ‰ํ•ด์ค˜"
๐Ÿ” '๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ' ์ปจํ…์ŠคํŠธ์—์„œ ๋ฐœ๊ฒฌ:
- "๋ณด์•ˆ์„ ์œ„ํ•ด JWT ํ† ํฐ์€ 15๋ถ„ ํ›„ ๋งŒ๋ฃŒ๋˜์–ด์•ผ ํ•จ"
- "๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์€ 7์ผ๊ฐ„ ์œ ํšจ"
- "๋น ๋ฅธ ์กฐํšŒ๋ฅผ ์œ„ํ•ด ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์„ Redis์— ์ €์žฅ"

> resume_session(context_id="DBA")
# ๋˜๋Š” ์ž์—ฐ์–ด: "๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปจํ…์ŠคํŠธ๋กœ ๋‹ค์‹œ ์ „ํ™˜ํ•ด์ค˜"
๐ŸŽฏ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž: JWT ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์ €์žฅ์„ ์œ„ํ•œ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค...

> "๋ฐฑ์—”๋“œ ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ, 7์ผ๊ฐ„ ์œ ํšจํ•œ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์„ ์œ„ํ•œ Redis ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ด"
๐ŸŽฏ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž: ์™„๋ฒฝํ•ฉ๋‹ˆ๋‹ค! ๊ณ ๊ฐ€์šฉ์„ฑ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์ €์žฅ์„ ์œ„ํ•œ Redis ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ „๋žต์„ ์„ค๊ณ„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค...

๐Ÿš€ ์™œ ์ด๊ฒƒ์ด ํ˜์‹ ์ ์ธ๊ฐ€

  1. ์ง€์†์ ์ธ ์ „๋ฌธ์„ฑ: ๊ฐ ์„ธ์…˜์ด ์ „๋ฌธ ์ง€์‹๊ณผ ์ปจํ…์ŠคํŠธ๋ฅผ ์œ ์ง€
  2. ๋งค๋„๋Ÿฌ์šด ์ „ํ™˜: ๋Œ€ํ™” ํ๋ฆ„์„ ์žƒ์ง€ ์•Š๊ณ  ์ „๋ฌธ๊ฐ€ ํŽ˜๋ฅด์†Œ๋‚˜ ๊ฐ„ ์ด๋™
  3. ์„ธ์…˜ ๊ฐ„ ์ง€๋Šฅ: ์„œ๋กœ ๋‹ค๋ฅธ ์ „๋ฌธ๊ฐ€ ์ปจํ…์ŠคํŠธ ๊ฐ„ ์ง€์‹ ๊ฒ€์ƒ‰ ๋ฐ ์ฐธ์กฐ
  4. ๋ณด์•ˆ ์ž๊ฒฉ์ฆ๋ช… ์ €์žฅ: API ํ‚ค์™€ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์„ธ์…˜ ๊ฐ„ ์ง€์†
  5. ์ž์—ฐ์Šค๋Ÿฌ์šด ์›Œํฌํ”Œ๋กœ์šฐ: ์‹ค์ œ ๋‹ค์–‘ํ•œ ์ „๋ฌธ๊ฐ€ ๊ฐ„ ํ˜‘์—…์„ ๋ฐ˜์˜

๐ŸŽฏ ์‹ค์ œ ํ™œ์šฉ ์‚ฌ๋ก€

  • DevOps ํŒ€: ๊ฐœ๋ฐœ์ž, DBA, ์ธํ”„๋ผ ํŽ˜๋ฅด์†Œ๋‚˜ ๊ฐ„ ์ „ํ™˜
  • ํ’€์Šคํƒ ํ”„๋กœ์ ํŠธ: ํ”„๋ก ํŠธ์—”๋“œ, ๋ฐฑ์—”๋“œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ „๋ฌธ๊ฐ€ ์ปจํ…์ŠคํŠธ
  • ํ•™์Šต ๊ฒฝ๋กœ: ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์ด๋‚˜ ๊ฐœ๋…๋ณ„ ๋ณ„๋„ ์ปจํ…์ŠคํŠธ
  • ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ์ ํŠธ: ํด๋ผ์ด์–ธํŠธ๋ณ„ ์ „์šฉ ์ปจํ…์ŠคํŠธ์™€ ์ง€์†์ ์ธ ์ปจํ…์ŠคํŠธ
  • ์ฝ”๋“œ ๋ฆฌ๋ทฐ: ๋‹ค์–‘ํ•œ ์ „๋ฌธ๊ฐ€ ํŽ˜๋ฅด์†Œ๋‚˜์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๊ด€์ 

๐Ÿ’ก ์‚ฌ์šฉ ํŒ

  1. ์ปจํ…์ŠคํŠธ ์ •๋ฆฌ: ์ฃผ์ œ, ์—ญํ• , ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ๋Œ€ํ™” ๋ถ„๋ฆฌ
  2. ์˜๋ฏธ ๊ฒ€์ƒ‰: ์ •ํ™•ํ•œ ํ‚ค์›Œ๋“œ๋ณด๋‹ค ์ž์—ฐ์–ด ์‚ฌ์šฉ
  3. ์ปจํ…์ŠคํŠธ ํ™œ์šฉ: ์™„์ „ํ•œ ๋Œ€ํ™” ๋ณต์›์„ ์œ„ํ•ด resume_session ์‚ฌ์šฉ
  4. ์ •๊ธฐ ์ •๋ฆฌ: ์„ฑ๋Šฅ ์œ ์ง€๋ฅผ ์œ„ํ•ด ๋ถˆํ•„์š”ํ•œ ์ปจํ…์ŠคํŠธ ์‚ญ์ œ
  5. ์ปจํ…์ŠคํŠธ ๊ฐ„ ์ฐธ์กฐ: search_memory_by_context๋ฅผ ์‚ฌ์šฉํ•ด ํŽ˜๋ฅด์†Œ๋‚˜ ๊ฐ„ ๊ด€๋ จ ์ •๋ณด ์ฐพ๊ธฐ
  6. ์ž์—ฐ์–ด ์ง€์›: "๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ ์ปจํ…์ŠคํŠธ๋กœ ์‹œ์ž‘ํ•ด์ค˜" ๊ฐ™์€ ์ž์—ฐ์–ด ๋ช…๋ น ์‚ฌ์šฉ

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

# ์˜ค๋ž˜๋œ ์ปจํ…์ŠคํŠธ ์ •๋ฆฌ
cleanup_old_contexts(days=30, confirm=true)
# ๋˜๋Š” ์ž์—ฐ์–ด: "์˜ค๋ž˜๋œ ์ปจํ…์ŠคํŠธ ์‚ญ์ œํ•ด์ค˜"

# ํŠน์ • ์ปจํ…์ŠคํŠธ ์‚ญ์ œ
delete_context(context_id="์ปจํ…์ŠคํŠธ์ด๋ฆ„", confirm=true)
# ๋˜๋Š” ์ž์—ฐ์–ด: "์ปจํ…์ŠคํŠธ์ด๋ฆ„ ์ปจํ…์ŠคํŠธ ์‚ญ์ œํ•ด์ค˜"

๐Ÿ“„ ๋ผ์ด์„ ์Šค

MIT License

๐Ÿ”— ๋งํฌ

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

q_mem_mcp_server-1.0.7.tar.gz (28.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

q_mem_mcp_server-1.0.7-py3-none-any.whl (30.9 kB view details)

Uploaded Python 3

File details

Details for the file q_mem_mcp_server-1.0.7.tar.gz.

File metadata

  • Download URL: q_mem_mcp_server-1.0.7.tar.gz
  • Upload date:
  • Size: 28.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for q_mem_mcp_server-1.0.7.tar.gz
Algorithm Hash digest
SHA256 2d8bc5e0dc9b197e1352616a2c55ef5539567730b6f1ea1b6501da224747256c
MD5 18ef5ad415ea9bbe7714ab5d9de3bacb
BLAKE2b-256 ab93844f498c65ce16007dcc5f7b519fe3567cfd3b4b9220d4843147820847f9

See more details on using hashes here.

File details

Details for the file q_mem_mcp_server-1.0.7-py3-none-any.whl.

File metadata

File hashes

Hashes for q_mem_mcp_server-1.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 679fbf750fff769bbbcc451bf9648742ae3ba08d3b65239eda62cd026fb2303c
MD5 f0596d84a1f47f4b58cd1c9cd7db11a1
BLAKE2b-256 eb58ddfaa7fb51ca0a026c85de046b968f43b5386061f7a99ced1dc1cdcebc9d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page