Lila MCP Server
Provides comprehensive psychological intelligence capabilities including persona analysis, attachment theory assessment, relationship compatibility evaluation, and autonomous workflow strategies through a complete graph database integration.
README
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 profilesconfig://workflow-strategies- Available autonomous workflow strategies
Templated Resources:
neo4j://personas/{persona_id}/relationships- All relationships for a specific personaneo4j://interactions/recent/{count}- Recent interactions with psychological analysisneo4j://relationships/{persona1_id}/{persona2_id}/current- Current relationship stateneo4j://relationships/{persona1_id}/{persona2_id}/history- Complete interaction historytelemetry://workflow-traces/{timerange}- Telemetry traces from autonomous workflowstelemetry://conversation-quality/{persona_id}- Conversation quality metricsconfig://goal-templates/{scenario}- Goal templates for relationship scenarios
Tools (8 comprehensive psychological intelligence tools)
update_relationship_metrics- Update trust, intimacy, and strength between personasrecord_interaction- Record interactions with psychological analysiscommit_relationship_state- Explicitly persist relationship state (CQRS Command)finalize_demo_session- Finalize all relationship states at session endanalyze_persona_compatibility- Assess relationship potential using attachment theoryautonomous_strategy_selection- Select optimal strategy based on psychological modelingassess_goal_progress- Assess progress towards relationship goalsgenerate_contextual_response- Generate psychologically authentic responses
Prompts (3 comprehensive assessment prompts)
assess_attachment_style- Determine persona's attachment style from behavioral observationsanalyze_emotional_climate- Evaluate conversation emotional dynamics and safety levelsgenerate_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:
# 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 section for details.
Step 2: Test with MCP Inspector
The server provides:
# 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
# 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:
# 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 section for proper testing methods.
Alternative: Docker Deployment
# 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:
"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:7687NEO4J_USER=neo4jNEO4J_PASSWORD=passw0rdENABLE_LOGFIRE_TELEMETRY=trueLOGFIRE_PROJECT_NAME=lila-autonomous-agents
Critical Requirements:
- Neo4j Running (if using
lila_mcp_server.py):docker compose up -d neo4j - Configuration: Uses
fastmcp.jsonwith"project": "."(avoids Inspector bugs) - Transport: Inspector uses STDIO transport automatically (not HTTP)
Recommended uv-Native Workflow (avoids VIRTUAL_ENV conflicts):
# 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:
# 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
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
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:
- Development:
fastmcp dev→ Visual testing in Inspector - Validation:
fastmcp inspect→ Verify capabilities - 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:
# 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):
{
"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:
# ✅ 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:
{
"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:
{
"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
-
Start Inspector (Recommended - Auto-Configuration):
# 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 -
Access Web Interface:
- Copy URL with token from console output
- Open in browser:
http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=<your-token>
-
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
-
Test Tools:
- Click Tools tab
- Test
analyze_persona_compatibility:{ "persona_a_id": "lila", "persona_b_id": "alex" } - Test
query_relationship_metricswith same parameters - Test
get_attachment_style_insights:{ "persona_id": "lila" }
-
Test Prompts:
- Click Prompts tab
- Test
assess_attachment_style:{ "behavior_description": "Shows consistent emotional availability and comfort with both intimacy and independence" } - Test
analyze_emotional_climatewith interaction history - Test
suggest_relationship_interventionswith relationship challenges
-
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:
# 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)
cd docker/mcp-standalone
# Install dependencies manually
pip install -r requirements.txt
# Run the server directly
python main.py
Configuration
Environment variables:
# 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
# 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:
# 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:
- Connect: Select "STDIO" transport in Inspector (for
fastmcp dev) - Resources: Test
neo4j://personas/all- should return sample personas - Tools: Try
analyze_persona_compatibilitywith{"persona_a_id": "lila", "persona_b_id": "alex"} - Prompts: Test
assess_attachment_stylewith behavior descriptions - 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.
# ✅ 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 databaseminimal_mcp_server.py- FastMCP server with resources, tools, and promptsmain.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:
{
"mcpServers": {
"lila-psychology": {
"url": "http://localhost:8765/mcp/",
"transport": "http"
}
}
}
For FastMCP clients:
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):
# 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:
# 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:
# 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)
# 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_REFUSEDon port 6277, ORerror: 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:
"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:
{
"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:
# 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:
# 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:
# 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"
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:
-
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) -
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
- Manual
-
Path Mismatch Logic: uv compares
$VIRTUAL_ENVagainst 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/.venvbut 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/activatewhen uv expects different path
Why It's Usually Harmless:
The warning is informational, not an error:
- uv ignores the conflicting
VIRTUAL_ENVand uses its project environment logic - uv creates or uses the correct
.venvdirectory regardless - Functionality is preserved - packages install to the right location
- No data loss occurs
When It Could Be Problematic:
- Multiple environments exist with different dependency versions
- Shared development where team members expect consistent paths
- CI/CD pipelines that rely on specific environment variables
- Automated scripts that depend on
VIRTUAL_ENVaccuracy
Solutions:
# 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:
# 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):
# 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:
# 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:
# 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"
# 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:
# 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
# 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:
# 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 neo4jfirst
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
# Install FastMCP globally if missing
pip install fastmcp
# Or use uv
uv add fastmcp
# Verify installation
fastmcp --version
Python Version Compatibility
# Specify Python version if needed
fastmcp dev main.py --python 3.11 --with fastmcp --with neo4j --with pydantic --with python-dotenv
uv Environment Issues
# 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
# 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
- Start with
fastmcp inspect main.pyto verify basic functionality - Use
fastmcp devfor interactive testing with Inspector - Test HTTP transport for production deployment scenarios
- 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.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.