Skip to main content
Glama

Lila MCP Server

by lila-graph
README.md36.6 kB
# Comprehensive Lila MCP Server A standalone, comprehensive implementation of the Lila psychological intelligence system as an MCP (Model Context Protocol) server. ## Overview This is a **truly standalone** implementation that provides complete psychological intelligence capabilities without requiring the main Lila system. It includes: - **Complete MCP Interface**: 8 tools, 3 prompts, 9 resources (2 direct + 7 templated) - **Comprehensive Psychology**: Full PersonaAgent system, attachment theory, Big Five traits - **Neo4j Integration**: Complete graph database operations with automatic connection - **Autonomous Workflows**: PydanticAI-based decision making and strategy selection - **Logfire Telemetry**: Native observability and monitoring - **Self-Contained**: No dependencies on main Lila codebase ## Features ### Resources (9 total: 2 direct + 7 templated) **Direct Resources:** - `neo4j://personas/all` - All personas with complete psychological profiles - `config://workflow-strategies` - Available autonomous workflow strategies **Templated Resources:** - `neo4j://personas/{persona_id}/relationships` - All relationships for a specific persona - `neo4j://interactions/recent/{count}` - Recent interactions with psychological analysis - `neo4j://relationships/{persona1_id}/{persona2_id}/current` - Current relationship state - `neo4j://relationships/{persona1_id}/{persona2_id}/history` - Complete interaction history - `telemetry://workflow-traces/{timerange}` - Telemetry traces from autonomous workflows - `telemetry://conversation-quality/{persona_id}` - Conversation quality metrics - `config://goal-templates/{scenario}` - Goal templates for relationship scenarios ### Tools (8 comprehensive psychological intelligence tools) - `update_relationship_metrics` - Update trust, intimacy, and strength between personas - `record_interaction` - Record interactions with psychological analysis - `commit_relationship_state` - Explicitly persist relationship state (CQRS Command) - `finalize_demo_session` - Finalize all relationship states at session end - `analyze_persona_compatibility` - Assess relationship potential using attachment theory - `autonomous_strategy_selection` - Select optimal strategy based on psychological modeling - `assess_goal_progress` - Assess progress towards relationship goals - `generate_contextual_response` - Generate psychologically authentic responses ### Prompts (3 comprehensive assessment prompts) - `assess_attachment_style` - Determine persona's attachment style from behavioral observations - `analyze_emotional_climate` - Evaluate conversation emotional dynamics and safety levels - `generate_secure_response` - Create attachment-security-building responses for scenarios ## Quick Start **Development Flow**: Test → Develop → Deploy The recommended approach is to start with immediate visual testing (`fastmcp dev`), then move to production deployment (`fastmcp run`) once everything works. ### Step 1: Start the Server The Lila MCP Server is fully self-contained with auto-configuration: ```bash # Start the server with Inspector (auto-detects fastmcp.json) fastmcp dev # Or explicitly from virtual environment /home/donbr/lila-graph/lila-mcp/.venv/bin/fastmcp dev # ✅ No external dependencies required # ✅ Auto-configured from fastmcp.json # ✅ Complete psychological intelligence system # ✅ All 8 tools, 3 prompts, 9 resources working ``` **Important Configuration Note**: The `fastmcp.json` file uses `"project": "."` configuration to avoid MCP Inspector bugs with version specifiers. See [Troubleshooting](#troubleshooting) section for details. ### Step 2: Test with MCP Inspector **The server provides:** ```bash # Inspector provides: # ✅ Immediate web UI for testing (opens with auth token) # ✅ Visual testing of all 8 tools, 3 prompts, resources # ✅ Real-time protocol debugging # ✅ STDIO transport (works immediately) ``` **What you'll see:** - Inspector URL with token: `http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=<token>` - Click the URL to open the web interface - Test resources like `neo4j://personas/all` - Test tools like `analyze_persona_compatibility` - Verify all functionality works before deployment **Expected Components:** - **Simplified Server**: 6 resources, 8 tools, 3 prompts (mock data) - **Full Server**: 9 resources, 8 tools, 3 prompts (live Neo4j data) ### Step 2: Quick Capabilities Check ```bash # Verify server capabilities without full Inspector fastmcp inspect # Uses fastmcp.json auto-configuration # Should show: # Server: lila-psychological-relationships # Components: Tools: 8, Prompts: 3, Resources: 2, Templates: 7 # Environment: FastMCP: 2.12.3, MCP: 1.14.0 # ✅ Successfully connected to Neo4j GraphDB ``` ### Step 3: Production HTTP Deployment Once testing confirms everything works, deploy with HTTP transport for production: ```bash # HTTP transport for production deployment fastmcp run # Uses fastmcp.json (port 8765) fastmcp run --port 9000 # Override port if needed # This provides: # 🚀 Production-ready HTTP transport # 🌐 Network accessible (can migrate to external server) # 📡 Compatible with MCP clients (Claude Desktop, Cursor, etc.) # 🔄 Scalable for multiple concurrent connections ``` **Important**: HTTP endpoint serves MCP JSON-RPC protocol, not REST API. See [MCP Client Testing](#mcp-client-testing) section for proper testing methods. ### Alternative: Docker Deployment ```bash # Full stack deployment (Neo4j + Redis + MinIO + MCP server + Nginx) docker compose up -d # Or minimal deployment (MCP server only, requires Neo4j separately) docker compose up -d neo4j mcp-server ``` ### Server Selection: Mock vs Neo4j Data The project includes two server implementations: **`simple_lila_mcp_server.py`** (Default in fastmcp.json) - In-memory mock data (Lila and Don personas) - No Neo4j required - Fast startup, ideal for development - Graceful fallback if Neo4j unavailable **`lila_mcp_server.py`** (Production) - Full Neo4j database integration - Real graph data queries - Requires Neo4j running To switch servers, edit `fastmcp.json` line 6: ```json "path": "simple_lila_mcp_server.py" // or "lila_mcp_server.py" ``` ### Configuration **Environment Configuration** (`.env` file): All settings are configured in `.env` - no manual environment variables needed: - `NEO4J_URI=bolt://localhost:7687` - `NEO4J_USER=neo4j` - `NEO4J_PASSWORD=passw0rd` - `ENABLE_LOGFIRE_TELEMETRY=true` - `LOGFIRE_PROJECT_NAME=lila-autonomous-agents` **Critical Requirements**: - **Neo4j Running** (if using `lila_mcp_server.py`): `docker compose up -d neo4j` - **Configuration**: Uses `fastmcp.json` with `"project": "."` (avoids Inspector bugs) - **Transport**: Inspector uses STDIO transport automatically (not HTTP) **Recommended uv-Native Workflow** (avoids VIRTUAL_ENV conflicts): ```bash # BEST: Use fastmcp.json auto-configuration fastmcp dev # Auto-detects everything from fastmcp.json fastmcp run # HTTP transport with auto-configuration fastmcp inspect # View capabilities with auto-configuration # FALLBACK: Explicit dependencies (if auto-detection fails) fastmcp dev simple_lila_mcp_server.py --with fastmcp --with neo4j --with pydantic --with python-dotenv ``` **Inspector URL**: `http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=<token>` - Token is displayed in console output when server starts - Use "Connect" button in Inspector interface - Transport dropdown should show "STDIO" selected ### Quick Inspection Verify the MCP server capabilities before starting development: ```bash # Quick capabilities check using fastmcp.json - SIMPLEST! fastmcp inspect # Should show: # Server: lila-psychological-relationships # Components: Tools: 8, Prompts: 3, Resources: 2, Templates: 7 # Environment: FastMCP: 2.12.3, MCP: 1.14.0 # ✅ Successfully connected to Neo4j GraphDB # For detailed JSON output: fastmcp inspect --format fastmcp # FastMCP-specific format fastmcp inspect --format mcp # Standard MCP protocol format ``` ## Understanding MCP Transports **Why does the Quick Start prioritize `fastmcp dev` (Inspector) over `fastmcp run` (HTTP)?** The Model Context Protocol (MCP) supports multiple transport mechanisms, each optimized for different use cases: ### STDIO Transport (`fastmcp dev`) **Use for**: Development, testing, immediate feedback ```bash fastmcp dev # Creates Inspector web UI ``` **Benefits:** - ✅ **Immediate visual testing** - Opens web UI with auth token automatically - ✅ **Interactive debugging** - Click to test resources, tools, prompts in real-time - ✅ **Protocol inspection** - View JSON-RPC messages in developer tools - ✅ **Works immediately** - No client library configuration required - ✅ **Zero setup** - Just one command to start testing **How it works:** - FastMCP creates a proxy server that bridges STDIO ↔ HTTP for the web Inspector - Inspector connects via STDIO (standard input/output) to the MCP server - Developer gets web UI for interactive testing without HTTP complexity ### HTTP Transport (`fastmcp run`) **Use for**: Production deployment, client integration ```bash fastmcp run # Serves MCP over HTTP JSON-RPC ``` **Benefits:** - ✅ **Production ready** - Network accessible, scalable, SSL-capable - ✅ **Client compatible** - Works with Claude Desktop, Cursor, custom clients - ✅ **Multiple connections** - Supports concurrent client connections - ✅ **Deployable** - Can be containerized, load-balanced, monitored **How it works:** - Serves MCP protocol as JSON-RPC over HTTP - Clients send POST requests with MCP protocol messages - **Not a REST API** - requires MCP-aware clients, not simple curl/browser access ### Development vs Production Flow **Recommended workflow:** 1. **Development**: `fastmcp dev` → Visual testing in Inspector 2. **Validation**: `fastmcp inspect` → Verify capabilities 3. **Production**: `fastmcp run` → Deploy with HTTP for clients **Why this order works:** - Inspector provides immediate feedback on whether server works - Once verified with Inspector, HTTP deployment "just works" - Avoids confusion from HTTP testing complexity during development ### Transport Comparison | Aspect | STDIO (`fastmcp dev`) | HTTP (`fastmcp run`) | |--------|----------------------|---------------------| | **Primary use** | Development testing | Production deployment | | **Testing method** | Inspector web UI | MCP client libraries | | **Setup complexity** | One command | Requires client configuration | | **Debugging** | Interactive web UI | Client library + logs | | **Accessibility** | Local only | Network accessible | | **Concurrency** | Single session | Multiple clients | | **Browser testing** | ✅ Yes (Inspector UI) | ❌ No (needs MCP client) | ## MCP Client Integration ### JSON Configuration Generation (FastMCP V2) Generate MCP client configuration files for different applications: ```bash # Auto-configuration using fastmcp.json (Recommended) fastmcp install claude-desktop # Uses fastmcp.json dependencies fastmcp install cursor # Uses fastmcp.json dependencies fastmcp install mcp-json # Generic MCP JSON configuration # Explicit dependencies (fallback if auto-detection fails) fastmcp install claude-desktop simple_lila_mcp_server.py --with neo4j --with pydantic --with python-dotenv fastmcp install cursor simple_lila_mcp_server.py --with neo4j --with pydantic --with python-dotenv fastmcp install mcp-json simple_lila_mcp_server.py --with neo4j --with pydantic --with python-dotenv ``` ### Manual Client Configuration #### HTTP Transport Configuration (Recommended) For HTTP-based MCP clients (production ready): ```json { "mcpServers": { "lila-psychology": { "url": "http://localhost:8765/mcp/", "transport": "http" } } } ``` **Benefits of HTTP Transport:** - ✅ **Network accessible** - can deploy to external servers - ✅ **MCP client compatible** - works with Claude Desktop, Cursor, MCP libraries - ✅ **Production ready** - supports load balancing, SSL termination - ✅ **Scalable** - works with container orchestration ## MCP Client Testing **Important**: MCP HTTP serves JSON-RPC protocol, not REST API. Use MCP-aware clients for testing: ```bash # ✅ CORRECT: Test with FastMCP client library python -c " from fastmcp import Client import asyncio async def test(): client = Client('http://localhost:8765/mcp/') async with client: # Test resource access personas = await client.get_resource('neo4j://personas/all') print('✅ Resources work:', len(personas) if personas else 'No data') # Test tool execution result = await client.call_tool('analyze_persona_compatibility', { 'persona_a_id': 'lila', 'persona_b_id': 'alex' }) print('✅ Tools work:', bool(result)) asyncio.run(test()) " # ❌ INCORRECT: Don't use simple HTTP tools # curl http://localhost:8765/mcp/ # Returns 406 Not Acceptable # Browser access also won't work - MCP needs proper JSON-RPC requests ``` #### Claude Desktop Configuration (STDIO - Development Only) For local development with STDIO transport: ```json { "mcpServers": { "lila-psychology": { "command": "fastmcp", "args": ["run", "/path/to/docker/mcp-standalone/simple_lila_mcp_server.py", "--transport", "stdio"], "env": { "NEO4J_URI": "bolt://localhost:7687", "NEO4J_USER": "neo4j", "NEO4J_PASSWORD": "passw0rd", "ENABLE_LOGFIRE_TELEMETRY": "true" } } } } ``` #### Cursor Configuration (STDIO - Development Only) For local development with STDIO transport: ```json { "mcpServers": { "lila-psychology": { "command": "fastmcp", "args": ["run", "/path/to/docker/mcp-standalone/simple_lila_mcp_server.py", "--transport", "stdio"], "env": { "NEO4J_URI": "bolt://localhost:7687", "NEO4J_USER": "neo4j", "NEO4J_PASSWORD": "passw0rd" } } } } ``` ### Inspector Testing Workflow 1. **Start Inspector (Recommended - Auto-Configuration)**: ```bash # BEST: Uses fastmcp.json auto-configuration fastmcp dev # Automatically detects all dependencies and configuration # Custom Inspector port if needed: fastmcp dev --server-port 6350 # Avoids port conflicts # FALLBACK: Explicit dependencies (if auto-detection fails) fastmcp dev simple_lila_mcp_server.py --with fastmcp --with neo4j --with pydantic --with python-dotenv ``` 2. **Access Web Interface**: - Copy URL with token from console output - Open in browser: `http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=<your-token>` 3. **Test Resources**: - Click **Resources** tab - Test `neo4j://personas/all` - should return sample personas (Lila, Alex) - Test `neo4j://personas/lila` - should return detailed Lila profile - Test `neo4j://interactions/recent/5` - should return interaction history 4. **Test Tools**: - Click **Tools** tab - Test `analyze_persona_compatibility`: ```json { "persona_a_id": "lila", "persona_b_id": "alex" } ``` - Test `query_relationship_metrics` with same parameters - Test `get_attachment_style_insights`: ```json { "persona_id": "lila" } ``` 5. **Test Prompts**: - Click **Prompts** tab - Test `assess_attachment_style`: ```json { "behavior_description": "Shows consistent emotional availability and comfort with both intimacy and independence" } ``` - Test `analyze_emotional_climate` with interaction history - Test `suggest_relationship_interventions` with relationship challenges 6. **Monitor Protocol**: - View real-time MCP JSON requests/responses - Check for any errors in console logs - Verify all capabilities are properly exposed **FastMCP V2 Configuration Methods**: ```bash # Option 1: Using fastmcp.json (Recommended - auto-detects everything) fastmcp dev # Automatically uses fastmcp.json in current directory # Option 2: Explicit dependency management (fallback) fastmcp dev simple_lila_mcp_server.py --with fastmcp --with neo4j --with pydantic --with python-dotenv # Option 3: Project-based configuration fastmcp project prepare fastmcp.json --output-dir ./env fastmcp dev --project ./env # Option 4: Requirements file (alternative) fastmcp dev simple_lila_mcp_server.py --with-requirements requirements.txt ``` The Inspector provides: - **Protocol Debugging**: Real-time MCP message inspection - **Resource Testing**: Interactive resource querying with live data - **Tool Execution**: Test psychological analysis tools with sample data - **Prompt Testing**: Validate psychological assessment prompts - **Schema Validation**: Verify tool/prompt schemas are correct ### Local Development (Alternative) ```bash cd docker/mcp-standalone # Install dependencies manually pip install -r requirements.txt # Run the server directly python main.py ``` ## Configuration Environment variables: ```bash # Database (optional - uses fallback if unavailable) NEO4J_URI=bolt://neo4j:7687 NEO4J_USER=neo4j NEO4J_PASSWORD=mcp_standalone_password_2025 # Logging LOG_LEVEL=INFO LOG_FORMAT=json # MCP Server MCP_HOST=0.0.0.0 MCP_PORT=8765 ``` ## Testing ### Unit Tests ```bash # Test the implementation python test_minimal.py # Should output: # 🎉 All tests passed! Minimal MCP server is ready. ``` ### Interactive Testing with MCP Inspector The **MCP Inspector** provides the best testing experience: ```bash # Make sure you're in the docker/mcp-standalone/ directory cd docker/mcp-standalone # Start development server with Inspector fastmcp dev main.py --with neo4j --with pydantic --with python-dotenv # Or test HTTP server manually fastmcp run main.py --transport http --port 8765 # Then open Inspector: https://github.com/modelcontextprotocol/inspector ``` **Inspector Testing Workflow**: 1. **Connect**: Select "STDIO" transport in Inspector (for `fastmcp dev`) 2. **Resources**: Test `neo4j://personas/all` - should return sample personas 3. **Tools**: Try `analyze_persona_compatibility` with `{"persona_a_id": "lila", "persona_b_id": "alex"}` 4. **Prompts**: Test `assess_attachment_style` with behavior descriptions 5. **Debug**: View JSON protocol messages, validate schemas ### HTTP Endpoint Testing **Note**: This section is for validating HTTP deployment. For development, use Inspector (`fastmcp dev`) instead. ```bash # ✅ CORRECT: Test with MCP client library python -c " from fastmcp import Client import asyncio async def test(): print('Testing MCP HTTP endpoint...') client = Client('http://localhost:8765/mcp/') async with client: # Test server capabilities print('✅ Server connected') # Test resource access personas = await client.get_resource('neo4j://personas/all') print(f'✅ Resources: {len(personas) if personas else 0} personas loaded') # Test tool execution result = await client.call_tool('analyze_persona_compatibility', { 'persona_a_id': 'lila', 'persona_b_id': 'alex' }) print(f'✅ Tools: compatibility analysis {"succeeded" if result else "failed"}') asyncio.run(test()) " # ❌ INCORRECT: Simple HTTP tools don't work with MCP # curl http://localhost:8765/mcp/ # Returns 406 Not Acceptable # Browser access also won't work - MCP requires JSON-RPC protocol ``` ## Architecture ### Minimal Components - **`minimal_models.py`** - Simple data models (Persona, Relationship, Interaction) - **`minimal_neo4j.py`** - Neo4j interface with fallback database - **`minimal_mcp_server.py`** - FastMCP server with resources, tools, and prompts - **`main.py`** - Server entry point with configuration ### Size Comparison - **Full Lila System**: 1.3MB+ with complex dependencies - **Minimal MCP Server**: ~100KB with only essential components ### Dependencies ``` fastmcp>=2.12.3 # MCP server framework with HTTP transport neo4j>=5.15.0 # Database driver pydantic>=2.6.0 # Data validation python-dotenv # Environment configuration ``` ### Transport Protocol This server uses **HTTP transport** (FastMCP 2.0 standard): - Runs as a web service accessible via URL - Supports concurrent client connections - Full bidirectional communication over HTTP - Ideal for Docker deployment and network access **Not STDIO transport** (which is for client-launched subprocesses) ## Sample Data The system includes sample personas for demonstration: - **Lila**: AI Research Assistant (Secure attachment) - **Alex**: Software Engineer (Secure attachment) These can be queried through the MCP resources to test functionality. ## Integration Use this MCP server with MCP-compatible clients via HTTP transport: ```json { "mcpServers": { "lila-psychology": { "url": "http://localhost:8765/mcp/", "transport": "http" } } } ``` For FastMCP clients: ```python from fastmcp import Client # Connect to HTTP MCP server client = Client("http://localhost:8765/mcp/") async with client: # Query personas personas = await client.get_resource("neo4j://personas/all") # Analyze compatibility result = await client.call_tool("analyze_persona_compatibility", { "persona_a_id": "lila", "persona_b_id": "alex" }) ``` ## Development ### Development Workflow **1. Start with MCP Inspector (Recommended - uv-Native)**: ```bash # BEST: Auto-configuration with fastmcp.json (uv-native) fastmcp dev # Automatically detects all dependencies # Custom port if needed: fastmcp dev --server-port 6350 # Avoids port conflicts # FALLBACK: Explicit dependencies (if auto-detection fails) fastmcp dev simple_lila_mcp_server.py --with fastmcp --with neo4j --with pydantic --with python-dotenv ``` **2. Test Production HTTP Deployment**: ```bash # BEST: Auto-configuration HTTP transport (uv-native) fastmcp run # Uses fastmcp.json auto-configuration # Custom port if needed: fastmcp run --port 9000 # Override port # Docker deployment (for full production testing) docker compose up -d ``` **3. Client Integration Testing**: ```bash # BEST: Auto-configuration for MCP clients (uv-native) fastmcp install claude-desktop # Uses fastmcp.json auto-configuration fastmcp install cursor # Uses fastmcp.json auto-configuration fastmcp install mcp-json # Generic MCP JSON config # FALLBACK: Explicit dependencies (if auto-detection fails) fastmcp install claude-desktop simple_lila_mcp_server.py --with neo4j --with pydantic --with python-dotenv fastmcp install cursor simple_lila_mcp_server.py --with neo4j --with pydantic --with python-dotenv ``` ### Development Features The minimal implementation is designed for: - **Fast startup** - No complex initialization - **Low resource usage** - Minimal memory footprint - **Inspector Integration** - Built-in development and testing tools - **Simple deployment** - Single container with few dependencies - **Easy maintenance** - Clear, focused codebase ### FastMCP CLI Commands (V2) ```bash # Development with Inspector (fastmcp.json - Recommended) fastmcp dev # Uses fastmcp.json auto-configuration fastmcp dev --server-port 6300 # Custom Inspector port # Development with explicit dependencies (fallback) fastmcp dev simple_lila_mcp_server.py --with fastmcp --with neo4j --with pydantic --with python-dotenv # Run with different transports (HTTP recommended for production) fastmcp run --transport http # HTTP transport (production ready) fastmcp run --transport http --port 8765 # HTTP with custom port fastmcp run --transport stdio # STDIO for Inspector development only # Explicit transport configuration fastmcp run simple_lila_mcp_server.py --transport http --port 8765 --with fastmcp --with neo4j --with pydantic fastmcp run simple_lila_mcp_server.py --transport stdio --with fastmcp --with neo4j --with pydantic # Dev only # Install in MCP clients (uses fastmcp.json automatically) fastmcp install claude-desktop # Auto-configuration fastmcp install cursor # Auto-configuration fastmcp install mcp-json # Generic MCP JSON config # Explicit client installation fastmcp install claude-desktop simple_lila_mcp_server.py --with neo4j --with pydantic --with python-dotenv fastmcp install cursor simple_lila_mcp_server.py --with neo4j --with pydantic --with python-dotenv # Inspect server capabilities fastmcp inspect # Uses fastmcp.json (Recommended) fastmcp inspect --format fastmcp # Detailed FastMCP info fastmcp inspect --format mcp # Standard MCP protocol info fastmcp inspect simple_lila_mcp_server.py # Explicit entrypoint (fallback) ``` For full Lila system capabilities, use the main system at the repository root. ## Troubleshooting ### MCP Inspector Connection Issues #### `ERR_CONNECTION_REFUSED` or `[object Object]` Error - CRITICAL **Problem**: Inspector UI loads but clicking "Connect" shows: - `ERR_CONNECTION_REFUSED` on port 6277, OR - `error: Failed to spawn: '[object Object]'` in console **Root Cause**: MCP Inspector's JavaScript argument parser incorrectly handles `>=` operators in dependency version strings. When `fastmcp.json` contains: ```json "dependencies": ["fastmcp>=2.12.3", "neo4j>=5.15.0"] ``` The Inspector splits `neo4j>=5.15.0` into: `neo4j`, `[object Object]`, `=5.15.0`, causing `uv` to fail. **Solution** (Already Configured): Use `"project": "."` in `fastmcp.json`: ```json { "environment": { "type": "uv", "python": "3.12", "project": "." // ✓ Uses pyproject.toml, avoids bug } } ``` **DO NOT USE** explicit dependencies with `>=` operators in `fastmcp.json` - they will break the Inspector. #### Port Already in Use - PORT IS IN USE at port 6277 **Problem**: `fastmcp dev` fails with "PORT IS IN USE at port 6277" **Root Cause**: `fastmcp dev` spawns multiple background processes (Python, node, npm, mcp-inspector) that must ALL be killed. **Solution**: ```bash # Kill all related processes pkill -f "fastmcp dev" && pkill -f "mcp-inspector" # Wait for processes to terminate sleep 2 # Verify ports are free ss -tulpn | grep -E "6274|6277" # If ports still occupied, force kill by port lsof -ti :6277 | xargs -r kill lsof -ti :6274 | xargs -r kill # Restart fastmcp dev ``` **Check Running Processes**: ```bash # See all MCP-related processes ps aux | grep -E "fastmcp|mcp-inspector" | grep -v grep # Check port usage ss -tulpn | grep -E "6274|6277" ``` #### Inspector Proxy Shows "Error Connecting" **Problem**: Inspector web UI loads but shows connection error **Solution**: Ensure you're using the default server configuration in `fastmcp.json`: - Default: `simple_lila_mcp_server.py` (mock data, works without Neo4j) - Production: `lila_mcp_server.py` (requires Neo4j running) **Validation**: ```bash # Test server capabilities python test_mcp_validation.py # Expected output: # ✅ Resources found: 6-9 # ✅ Tools found: 8 # ✅ Prompts found: 3 ``` ### Virtual Environment Issues #### Understanding VIRTUAL_ENV Mismatch Warnings **Warning: "VIRTUAL_ENV does not match the project environment path"** ```bash warning: `VIRTUAL_ENV=/home/donbr/midlife/lila-pydanticai-phase1/.venv` does not match the project environment path `.venv` and will be ignored; use `--active` to target the active environment instead ``` **Root Cause Analysis:** This warning occurs due to **uv's strict virtual environment path resolution logic**: 1. **uv Project Environment Detection**: When uv operates in a project directory, it expects to find or create a virtual environment at `.venv` (the default project environment path) 2. **VIRTUAL_ENV Environment Variable**: This variable points to an active virtual environment, often set by: - Manual `source .venv/bin/activate` - IDE integrations (VS Code, PyCharm) - Container environments - Previous virtualenv/conda activations 3. **Path Mismatch Logic**: uv compares `$VIRTUAL_ENV` against the expected project environment path: ``` VIRTUAL_ENV=/app/.venv (from Docker container) Project expects: /home/donbr/midlife/lila-pydanticai-phase1/docker/mcp-standalone/.venv Result: MISMATCH → Warning + Ignore VIRTUAL_ENV ``` **When This Warning Appears:** - **Container Development**: Docker containers set `VIRTUAL_ENV=/app/.venv` but host expects different path - **IDE Environment Conflicts**: VS Code or other IDEs activate environments with different paths - **Cross-Platform Development**: Windows/Linux path differences - **Manual Environment Activation**: Using `source .venv/bin/activate` when uv expects different path **Why It's Usually Harmless:** **The warning is informational, not an error**: - uv **ignores** the conflicting `VIRTUAL_ENV` and uses its project environment logic - uv **creates or uses** the correct `.venv` directory regardless - **Functionality is preserved** - packages install to the right location - **No data loss** occurs **When It Could Be Problematic:** 1. **Multiple environments exist** with different dependency versions 2. **Shared development** where team members expect consistent paths 3. **CI/CD pipelines** that rely on specific environment variables 4. **Automated scripts** that depend on `VIRTUAL_ENV` accuracy **Solutions:** ```bash # Option 1: Do nothing (recommended) # Commands work correctly despite the warning # Option 2: Clear environment variable before running unset VIRTUAL_ENV fastmcp run # Option 3: Use UV_PROJECT_ENVIRONMENT to override default path export UV_PROJECT_ENVIRONMENT=/path/to/desired/venv fastmcp run # Option 4: Use --quiet flag to suppress warnings fastmcp run --quiet # Option 5: Deactivate parent environment first deactivate # If in activated environment cd docker/mcp-standalone fastmcp run # Option 6: Use environment-specific commands # For development (avoids manual activation) fastmcp dev # Uses uv's environment management automatically # For production (Docker handles environments) docker compose up -d ``` #### Environment Validation Commands **Verify your environment is set up correctly:** ```bash # 1. Check current environment status echo "VIRTUAL_ENV: $VIRTUAL_ENV" echo "Current directory: $(pwd)" # 2. Test uv environment detection fastmcp inspect # Should work regardless of VIRTUAL_ENV warning # 3. Verify FastMCP can create isolated environment fastmcp dev --server-port 6350 # Creates isolated environment # 4. Check if dependencies are available python -c "import fastmcp, neo4j, pydantic; print('Dependencies OK')" # 5. Validate .env file loading python -c " import os from dotenv import load_dotenv load_dotenv() print('Neo4j URI:', os.getenv('NEO4J_URI', 'Not found')) print('Logfire enabled:', os.getenv('ENABLE_LOGFIRE_TELEMETRY', 'Not found')) " ``` #### Development Workflow Best Practices **Recommended Patterns (avoid VIRTUAL_ENV conflicts):** ```bash # GOOD: Use uv-native commands (automatic environment management) fastmcp dev # Auto-detects and manages environment fastmcp run # Uses project environment correctly fastmcp inspect # Works regardless of active environment # GOOD: Use .env files instead of manual activation # All environment variables loaded automatically from .env # AVOID: Manual virtual environment activation before fastmcp source .venv/bin/activate # Can cause path conflicts fastmcp dev # May show VIRTUAL_ENV warning # BETTER: Let fastmcp handle environment management fastmcp dev # Creates isolated environment automatically ``` **IDE Integration Tips:** ```bash # VS Code: Use Python interpreter selection instead of manual activation # 1. Open Command Palette (Ctrl+Shift+P) # 2. "Python: Select Interpreter" # 3. Choose the correct .venv/bin/python # 4. VS Code will handle environment automatically # PyCharm: Configure Project Interpreter # File → Settings → Project → Python Interpreter # Add interpreter from .venv directory ``` **Container Development:** ```bash # Host development (recommended for FastMCP) cd docker/mcp-standalone fastmcp dev # Uses host environment management # Container development (for production testing) docker compose up -d # Environment handled by Docker automatically ``` ### FastMCP CLI Issues **Error: "No server object found"** ```bash # Make sure you're in the correct directory cd docker/mcp-standalone # Use explicit entrypoint syntax if auto-detection fails fastmcp dev simple_lila_mcp_server.py:mcp --with fastmcp --with neo4j --with pydantic --with python-dotenv fastmcp inspect simple_lila_mcp_server.py:mcp ``` **Error: "Could not load module" or Import Failures** Modern fastmcp.json configuration should work automatically: ```bash # WORKING: Auto-detection with fastmcp.json fastmcp dev # Uses fastmcp.json automatically fastmcp run # Uses fastmcp.json automatically fastmcp inspect # Uses fastmcp.json automatically # FALLBACK: Use explicit dependencies if auto-detection fails fastmcp dev simple_lila_mcp_server.py --with fastmcp --with neo4j --with pydantic --with python-dotenv ``` **Inspector Port Conflicts** ```bash # Error: "PORT IS IN USE at port 6277" # Solution: Specify different server port fastmcp dev main.py --with fastmcp --with neo4j --with pydantic --with python-dotenv --server-port 6280 ``` **Missing `--with fastmcp` Dependency** Always include `--with fastmcp` in dependency list: ```bash # CORRECT: Include fastmcp dependency fastmcp dev main.py --with fastmcp --with neo4j --with pydantic --with python-dotenv # WRONG: Missing fastmcp dependency fastmcp dev main.py --with neo4j --with pydantic --with python-dotenv # May fail ``` ### Transport and Connection Issues **Inspector Transport Selection** - Inspector automatically uses STDIO transport (correct) - Do NOT manually select HTTP transport in Inspector UI - STDIO transport is required for Inspector proxy communication **Neo4j Connection Warnings** - Neo4j warnings are normal when running locally without Docker - Server automatically falls back to in-memory database with sample data - For full Neo4j features, use `docker compose up -d neo4j` first **HTTP vs STDIO Transport Confusion** - **STDIO**: For Inspector testing and client integration (`fastmcp dev`) - **HTTP**: For Docker deployment and network access (`docker compose up -d`) - **SSE**: Deprecated, avoid using ### Dependency Management Issues **Missing Dependencies** ```bash # Install FastMCP globally if missing pip install fastmcp # Or use uv uv add fastmcp # Verify installation fastmcp --version ``` **Python Version Compatibility** ```bash # Specify Python version if needed fastmcp dev main.py --python 3.11 --with fastmcp --with neo4j --with pydantic --with python-dotenv ``` **uv Environment Issues** ```bash # If uv is not available, install it first curl -LsSf https://astral.sh/uv/install.sh | sh # Or use pip pip install uv ``` ### Testing and Validation **Verify Server Functionality** ```bash # 1. Test basic server inspection fastmcp inspect main.py # 2. Test Inspector integration fastmcp dev main.py --with fastmcp --with neo4j --with pydantic --with python-dotenv # 3. Test HTTP deployment fastmcp run main.py --transport http --port 8765 # 4. Test Docker deployment + MCP client validation docker compose up -d python -c " from fastmcp import Client import asyncio async def test(): client = Client('http://localhost:8765/mcp/') async with client: personas = await client.get_resource('neo4j://personas/all') print(f'✅ Docker deployment working: {len(personas) if personas else 0} personas') asyncio.run(test()) " ``` **Common Testing Workflow** 1. Start with `fastmcp inspect main.py` to verify basic functionality 2. Use `fastmcp dev` for interactive testing with Inspector 3. Test HTTP transport for production deployment scenarios 4. Use Docker for full stack testing with Neo4j database **Expected Inspector Behavior** - Console shows: "Starting MCP inspector..." - Proxy server starts on specified port (default 6277, custom with `--server-port`) - Inspector URL with token is displayed - Web interface should connect successfully via STDIO transport - All resources, tools, and prompts should be visible and testable ## License Same as main Lila project.

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/lila-graph/lila-mcp'

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