Skip to main content
Glama
deployment.md12.6 kB
# Deployment Guide **Last Updated:** 2024-12-19 ## Overview This guide covers deploying and running the MCP MITM Mem0 system for production use. The system consists of two main components that work together to provide memory capabilities for Claude. ## Architecture Overview ```mermaid graph TB subgraph "Local Environment" direction TB CC[Claude Client] MP[MITM Proxy<br/>Port 8080] MS[MCP Server<br/>stdio] CC -.->|HTTP Proxy| MP CC -.->|MCP Protocol| MS end subgraph "External Services" AA[Anthropic API<br/>api.anthropic.com] M0[Mem0 SaaS<br/>API] end MP -.->|HTTPS| AA MP -.->|HTTPS + Auth| M0 MS -.->|HTTPS + Auth| M0 classDef local fill:#E6F3FF classDef external fill:#FFE6E6 class MP,MS,CC local class AA,M0 external ``` ## Prerequisites ### System Requirements - **Operating System**: Linux, macOS, or Windows - **Python**: 3.12 or higher - **Memory**: 512MB RAM minimum - **Storage**: 100MB free space - **Network**: Internet connectivity for Mem0 API access ### Required Accounts - **Mem0 SaaS Account**: Sign up at [https://app.mem0.ai](https://app.mem0.ai) - **API Key**: Generate API key from Mem0 dashboard ## Installation ### 1. Clone Repository ```bash git clone https://github.com/terrymunro/mcp-mitm-mem0.git cd mcp-mitm-mem0 ``` ### 2. Install Dependencies ```bash # Install uv package manager if not already installed curl -LsSf https://astral.sh/uv/install.sh | sh # Install project dependencies uv sync ``` ### 3. Configuration Create environment configuration: ```bash # Create .env file cat > .env << 'EOF' # Required: Mem0 API Key MEM0_API_KEY=your_mem0_api_key_here # Optional: Configuration DEBUG=false DEFAULT_USER_ID=your_username MITM_HOST=localhost MITM_PORT=8080 MCP_NAME=mcp-mitm-mem0 EOF # Secure the file chmod 600 .env ``` ### 4. Certificate Installation Install MITM proxy certificates for HTTPS interception: ```bash # Generate certificates mitmdump --version # This creates ~/.mitmproxy/ directory # Install CA certificate (macOS) sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/.mitmproxy/mitmproxy-ca-cert.pem # Install CA certificate (Linux) sudo cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy-ca-cert.crt sudo update-ca-certificates # Install CA certificate (Windows) # Use certlm.msc to import ~/.mitmproxy/mitmproxy-ca-cert.pem to Trusted Root Certification Authorities ``` ## Component Deployment ### MITM Proxy Server The MITM proxy intercepts Claude API calls and stores conversations: ```bash # Basic deployment uv run mitmdump -s memory_addon.py # Production deployment with logging uv run mitmdump -s memory_addon.py \ --listen-host 127.0.0.1 \ --listen-port 8080 \ --set confdir=~/.mitmproxy \ > mitm.log 2>&1 & # Store process ID for management echo $! > mitm.pid ``` ## Service Management ### MITM Proxy Service The MITM proxy can be run as a system service since it's a standalone network proxy: #### Systemd Service (Linux) ```bash sudo tee /etc/systemd/system/mcp-mitm-proxy.service << 'EOF' [Unit] Description=MCP MITM Proxy Service After=network.target Requires=network.target [Service] Type=simple User=yourusername WorkingDirectory=/path/to/mcp-mitm-mem0 Environment=PATH=/path/to/mcp-mitm-mem0/.venv/bin:/usr/bin:/bin EnvironmentFile=/path/to/mcp-mitm-mem0/.env ExecStart=/path/to/mcp-mitm-mem0/.venv/bin/mitmdump -s memory_addon.py --listen-host 127.0.0.1 --listen-port 8080 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target EOF # Enable and start the proxy service sudo systemctl daemon-reload sudo systemctl enable mcp-mitm-proxy.service sudo systemctl start mcp-mitm-proxy.service sudo systemctl status mcp-mitm-proxy.service ``` #### LaunchAgent (macOS) ```bash # Create LaunchAgent directory mkdir -p ~/Library/LaunchAgents # MITM Proxy LaunchAgent tee ~/Library/LaunchAgents/com.mcp.mitm.proxy.plist << 'EOF' <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.mcp.mitm.proxy</string> <key>ProgramArguments</key> <array> <string>/path/to/mcp-mitm-mem0/.venv/bin/mitmdump</string> <string>-s</string> <string>memory_addon.py</string> <string>--listen-host</string> <string>127.0.0.1</string> <string>--listen-port</string> <string>8080</string> </array> <key>WorkingDirectory</key> <string>/path/to/mcp-mitm-mem0</string> <key>EnvironmentVariables</key> <dict> <key>MEM0_API_KEY</key> <string>your_api_key_here</string> </dict> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> </dict> </plist> EOF # Load LaunchAgent launchctl load ~/Library/LaunchAgents/com.mcp.mitm.proxy.plist ``` ## MCP Client Configuration **Important**: MCP servers are launched by MCP clients (not as standalone services). Configure your MCP client to launch the memory server: ### Cursor Configuration Add to your Cursor settings in `.cursor/mcp.json`: ```json { "mcpServers": { "mcp-mitm-mem0": { "command": "uv", "args": ["run", "mcp-mitm-mem0"], "cwd": "/absolute/path/to/mcp-mitm-mem0", "env": { "MEM0_API_KEY": "your_mem0_api_key_here", "DEFAULT_USER_ID": "your_username" } } } } ``` ### Claude Desktop Configuration Add to Claude Desktop's MCP settings file: **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` **Linux**: `~/.config/claude/claude_desktop_config.json` ```json { "mcpServers": { "mcp-mitm-mem0": { "command": "uv", "args": ["run", "mcp-mitm-mem0"], "cwd": "/absolute/path/to/mcp-mitm-mem0", "env": { "MEM0_API_KEY": "your_mem0_api_key_here", "DEFAULT_USER_ID": "your_username" } } } } ``` ### Alternative: Direct Python Execution If you prefer not to use `uv`: ```json { "mcpServers": { "mcp-mitm-mem0": { "command": "python", "args": ["-m", "mcp_mitm_mem0.mcp_server"], "cwd": "/absolute/path/to/mcp-mitm-mem0", "env": { "MEM0_API_KEY": "your_mem0_api_key_here", "DEFAULT_USER_ID": "your_username", "PYTHONPATH": "/absolute/path/to/mcp-mitm-mem0" } } } } ``` ### Proxy Configuration for Claude Clients Configure your Claude client to use the MITM proxy for API calls: 1. **Environment Variables**: ```bash export http_proxy=http://127.0.0.1:8080 export https_proxy=http://127.0.0.1:8080 ``` 2. **System Proxy Settings**: - **macOS**: System Settings → Network → Advanced → Proxies - **Windows**: Settings → Network & Internet → Proxy - **Linux**: Network settings or browser proxy configuration Set HTTP/HTTPS proxy to `http://127.0.0.1:8080` ## Monitoring and Logging ### Log Configuration Configure structured logging for operational monitoring: ```python # In memory_addon.py logging configuration structlog.configure( processors=[ structlog.stdlib.filter_by_level, structlog.stdlib.add_logger_name, structlog.stdlib.add_log_level, structlog.stdlib.PositionalArgumentsFormatter(), structlog.processors.TimeStamper(fmt="iso"), structlog.processors.JSONRenderer(), ], logger_factory=structlog.stdlib.LoggerFactory(), cache_logger_on_first_use=True, ) ``` ### Log Rotation Configure log rotation to prevent disk space issues: ```bash # Install logrotate configuration sudo tee /etc/logrotate.d/mcp-mitm-mem0 << 'EOF' /path/to/mcp-mitm-mem0/*.log { daily rotate 7 compress delaycompress missingok notifempty copytruncate } EOF ``` ### Health Monitoring Create health check scripts: ```bash #!/bin/bash # health_check.sh # Check MITM proxy if ! curl -s --connect-timeout 5 --proxy http://127.0.0.1:8080 http://httpbin.org/ip > /dev/null; then echo "MITM proxy health check failed" exit 1 fi # Check Mem0 API connectivity if ! python -c " import os from mem0 import MemoryClient client = MemoryClient(api_key=os.getenv('MEM0_API_KEY')) client.search('test', user_id='health_check') "; then echo "Mem0 API connectivity check failed" exit 1 fi echo "All health checks passed" ``` ## Backup and Recovery ### Memory Backup Since all memories are stored in Mem0 SaaS, backup strategies depend on Mem0's capabilities: ```python #!/usr/bin/env python3 # backup_memories.py import asyncio import json from datetime import datetime from mcp_mitm_mem0.memory_service import memory_service async def backup_memories(user_id: str, output_file: str): """Backup all memories for a user.""" memories = await memory_service.get_all_memories(user_id=user_id) backup_data = { "timestamp": datetime.now().isoformat(), "user_id": user_id, "memories": memories } with open(output_file, 'w') as f: json.dump(backup_data, f, indent=2) print(f"Backed up {len(memories)} memories to {output_file}") # Usage asyncio.run(backup_memories("your_user_id", "backup.json")) ``` ### Configuration Backup Backup configuration and certificates: ```bash #!/bin/bash # backup_config.sh BACKUP_DIR="backup_$(date +%Y%m%d_%H%M%S)" mkdir -p "$BACKUP_DIR" # Backup configuration cp .env "$BACKUP_DIR/" cp -r ~/.mitmproxy "$BACKUP_DIR/mitmproxy_certs" # Backup service configurations if [ -f /etc/systemd/system/mcp-mitm-proxy.service ]; then cp /etc/systemd/system/mcp-mitm-proxy.service "$BACKUP_DIR/" fi echo "Configuration backed up to $BACKUP_DIR" ``` ## Troubleshooting ### Common Issues 1. **Certificate Not Trusted**: ```bash # Verify certificate installation security find-certificate -c "mitmproxy" -p /System/Library/Keychains/SystemRootCertificates.keychain # Reinstall if needed sudo security delete-certificate -c "mitmproxy" /Library/Keychains/System.keychain sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/.mitmproxy/mitmproxy-ca-cert.pem ``` 2. **Mem0 API Authentication Failed**: ```bash # Test API key curl -H "Authorization: Bearer $MEM0_API_KEY" https://api.mem0.ai/v1/memories # Check environment variable echo $MEM0_API_KEY ``` 3. **Proxy Connection Refused**: ```bash # Check if proxy is running netstat -an | grep :8080 # Check proxy logs tail -f mitm.log ``` ### Performance Tuning ```bash # Increase file descriptor limits ulimit -n 65536 # Python-specific optimizations export PYTHONUNBUFFERED=1 export PYTHONDONTWRITEBYTECODE=1 # Memory optimization for large conversation histories export PYTHONMALLOC=pymalloc ``` ## Security Hardening ### File Permissions ```bash # Secure configuration files chmod 600 .env chmod 700 ~/.mitmproxy # Restrict service user permissions sudo useradd -r -s /bin/false mcp-service sudo chown -R mcp-service:mcp-service /path/to/mcp-mitm-mem0 ``` ### Network Security ```bash # Firewall configuration (UFW) sudo ufw enable sudo ufw allow out 443/tcp # HTTPS to external APIs sudo ufw deny in 8080/tcp # Block external proxy access ``` ### Process Isolation ```bash # Run with restricted privileges systemctl edit mcp-mitm-proxy.service # Add override configuration [Service] NoNewPrivileges=yes PrivateTmp=yes ProtectSystem=strict ProtectHome=yes ``` ## Maintenance ### Regular Maintenance Tasks 1. **Update Dependencies**: ```bash uv sync --upgrade ``` 2. **Rotate Certificates**: ```bash rm -rf ~/.mitmproxy mitmdump --version # Regenerate certificates # Reinstall CA certificate ``` 3. **Monitor Disk Usage**: ```bash du -sh ~/.mitmproxy/ du -sh /var/log/mcp-mitm-mem0/ ``` 4. **Check Service Status**: ```bash systemctl status mcp-mitm-proxy.service ``` ### Upgrade Procedure ```bash # 1. Backup current installation ./backup_config.sh # 2. Stop proxy service sudo systemctl stop mcp-mitm-proxy.service # 3. Update code git pull origin main uv sync # 4. Update configuration if needed # Review .env.example for new settings # 5. Restart proxy service sudo systemctl start mcp-mitm-proxy.service # 6. Restart MCP clients to reload the MCP server # The MCP server will be automatically restarted by your MCP client # 7. Verify operation ./health_check.sh ```

Latest Blog Posts

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/terrymunro/mcp-mitm-mem0'

If you have feedback or need assistance with the MCP directory API, please join our Discord server