Files
t6_mem0_v2/config.py
Claude Code 1998bef6f4 Add MCP HTTP/SSE server and complete n8n integration
Major Changes:
- Implemented MCP HTTP/SSE transport server for n8n and web clients
- Created mcp_server/http_server.py with FastAPI for JSON-RPC 2.0 over HTTP
- Added health check endpoint (/health) for container monitoring
- Refactored mcp-server/ to mcp_server/ (Python module structure)
- Updated Dockerfile.mcp to run HTTP server with health checks

MCP Server Features:
- 7 memory tools exposed via MCP (add, search, get, update, delete)
- HTTP/SSE transport on port 8765 for n8n integration
- stdio transport for Claude Code integration
- JSON-RPC 2.0 protocol implementation
- CORS support for web clients

n8n Integration:
- Successfully tested with AI Agent workflows
- MCP Client Tool configuration documented
- Working webhook endpoint tested and verified
- System prompt optimized for automatic user_id usage

Documentation:
- Created comprehensive Mintlify documentation site
- Added docs/mcp/introduction.mdx - MCP server overview
- Added docs/mcp/installation.mdx - Installation guide
- Added docs/mcp/tools.mdx - Complete tool reference
- Added docs/examples/n8n.mdx - n8n integration guide
- Added docs/examples/claude-code.mdx - Claude Code setup
- Updated README.md with MCP HTTP server info
- Updated roadmap to mark Phase 1 as complete

Bug Fixes:
- Fixed synchronized delete operations across Supabase and Neo4j
- Updated memory_service.py with proper error handling
- Fixed Neo4j connection issues in delete operations

Configuration:
- Added MCP_HOST and MCP_PORT environment variables
- Updated .env.example with MCP server configuration
- Updated docker-compose.yml with MCP container health checks

Testing:
- Added test scripts for MCP HTTP endpoint verification
- Created test workflows in n8n
- Verified all 7 memory tools working correctly
- Tested synchronized operations across both stores

Version: 1.0.0
Status: Phase 1 Complete - Production Ready

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-15 13:56:41 +02:00

125 lines
3.5 KiB
Python

"""
Shared configuration for T6 Mem0 v2
Loads environment variables and creates Mem0 configuration
"""
import os
from typing import Dict, Any
from pydantic_settings import BaseSettings
from pydantic import Field
class Settings(BaseSettings):
"""Application settings loaded from environment variables"""
# OpenAI
openai_api_key: str = Field(..., env="OPENAI_API_KEY")
# Supabase
supabase_connection_string: str = Field(..., env="SUPABASE_CONNECTION_STRING")
# Neo4j
neo4j_uri: str = Field(..., env="NEO4J_URI")
neo4j_user: str = Field(default="neo4j", env="NEO4J_USER")
neo4j_password: str = Field(..., env="NEO4J_PASSWORD")
# API
api_host: str = Field(default="0.0.0.0", env="API_HOST")
api_port: int = Field(default=8080, env="API_PORT")
api_key: str = Field(..., env="API_KEY")
# MCP Server
mcp_host: str = Field(default="0.0.0.0", env="MCP_HOST")
mcp_port: int = Field(default=8765, env="MCP_PORT")
# Mem0
mem0_collection_name: str = Field(default="t6_memories", env="MEM0_COLLECTION_NAME")
mem0_embedding_dims: int = Field(default=1536, env="MEM0_EMBEDDING_DIMS")
mem0_version: str = Field(default="v1.1", env="MEM0_VERSION")
# Logging
log_level: str = Field(default="INFO", env="LOG_LEVEL")
log_format: str = Field(default="json", env="LOG_FORMAT")
# Environment
environment: str = Field(default="development", env="ENVIRONMENT")
# Docker (optional, for container deployments)
docker_network: str = Field(default="bridge", env="DOCKER_NETWORK")
class Config:
env_file = ".env"
env_file_encoding = "utf-8"
case_sensitive = False
def get_settings() -> Settings:
"""Get application settings"""
return Settings()
def get_mem0_config(settings: Settings) -> Dict[str, Any]:
"""
Generate Mem0 configuration from settings
Args:
settings: Application settings
Returns:
Dict containing Mem0 configuration
"""
return {
# Vector Store - Supabase
"vector_store": {
"provider": "supabase",
"config": {
"connection_string": settings.supabase_connection_string,
"collection_name": settings.mem0_collection_name,
"embedding_model_dims": settings.mem0_embedding_dims,
"index_method": "hnsw", # Fastest search
"index_measure": "cosine_distance" # Best for embeddings
}
},
# Graph Store - Neo4j
"graph_store": {
"provider": "neo4j",
"config": {
"url": settings.neo4j_uri,
"username": settings.neo4j_user,
"password": settings.neo4j_password
}
},
# LLM Provider - OpenAI
"llm": {
"provider": "openai",
"config": {
"model": "gpt-4o-mini",
"temperature": 0.1,
"max_tokens": 2000,
"api_key": settings.openai_api_key
}
},
# Embedder - OpenAI
"embedder": {
"provider": "openai",
"config": {
"model": "text-embedding-3-small",
"embedding_dims": settings.mem0_embedding_dims,
"api_key": settings.openai_api_key
}
},
# Version
"version": settings.mem0_version
}
# Global settings instance
settings = get_settings()
# Global mem0 config
mem0_config = get_mem0_config(settings)