## Critical Fixes ### 🔧 FalkorDB Support Implementation - Fixed incomplete FalkorDB support in `factories.py:276` - Replaced `NotImplementedError` with proper configuration mapping - FalkorDB now returns valid config dict with uri, password, database fields ### ⚙️ Configuration System Consolidation - **REMOVED dual configuration systems** - eliminated config inconsistency - Deleted obsolete files: `config/manager.py`, `config/server_config.py` - Deleted unused individual configs: `llm_config.py`, `embedder_config.py`, `neo4j_config.py` - **Unified all configuration** through `config/schema.py` - Updated imports: `MCPConfig` → `ServerConfig` from schema - Added missing fields (`use_custom_entities`, `destroy_graph`) to main config ### 🔄 Environment Variable Handling - **Eliminated duplicate environment variable patterns** across modules - Consolidated all env handling into single schema-based system - Removed redundant `from_env()` methods in individual config classes - All environment variables now handled through pydantic-settings in schema.py ### 🔒 Security Improvements - GitHub Actions - **Added proper permissions** to both workflow files: - `contents: read` - Minimal read access to repository - `id-token: write` - Secure token handling for OIDC - Follows security best practices for CI/CD workflows - Prevents overprivileged workflow execution ### 🧪 Test Infrastructure Updates - Updated validation test file list for new structure - Fixed test execution path issues with uv detection - Improved error handling in startup tests - All syntax validation now passes (8/8 files) ## Verification ✅ **All systems tested and working**: - Configuration loading and CLI overrides functional - Import structure validated across all modules - Main.py wrapper maintains backwards compatibility - FalkorDB configuration no longer raises NotImplementedError - GitHub Actions have secure permissions - No duplicate environment variable handling ## Benefits - **Simplified Architecture**: Single source of truth for configuration - **Enhanced Security**: Proper workflow permissions implemented - **Complete FalkorDB Support**: No more unimplemented features - **Maintainable Codebase**: Eliminated configuration duplication - **Secure CI/CD**: Minimal required permissions only 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
98 lines
No EOL
2.8 KiB
YAML
98 lines
No EOL
2.8 KiB
YAML
name: MCP Server Tests
|
|
|
|
on:
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
paths:
|
|
- 'mcp_server/**'
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
test-mcp-server:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
id-token: write
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install uv
|
|
uses: astral-sh/setup-uv@v4
|
|
with:
|
|
enable-cache: true
|
|
|
|
- name: Set up Python
|
|
run: uv python install
|
|
|
|
- name: Install MCP server dependencies
|
|
run: |
|
|
cd mcp_server
|
|
uv sync --extra dev
|
|
|
|
- name: Run configuration tests
|
|
run: |
|
|
cd mcp_server
|
|
uv run tests/test_configuration.py
|
|
|
|
- name: Run syntax validation tests
|
|
run: |
|
|
cd mcp_server
|
|
uv run tests/test_simple_validation.py
|
|
|
|
- name: Run unit tests (if pytest tests exist)
|
|
run: |
|
|
cd mcp_server
|
|
# Check if there are pytest-compatible test files
|
|
if find tests/ -name "test_*.py" -exec grep -l "def test_" {} \; | grep -q .; then
|
|
echo "Found pytest-compatible tests, running with pytest"
|
|
uv add --group dev pytest pytest-asyncio || true
|
|
uv run pytest tests/ -v --tb=short
|
|
else
|
|
echo "No pytest-compatible tests found, skipping pytest"
|
|
fi
|
|
|
|
- name: Test main.py wrapper
|
|
run: |
|
|
cd mcp_server
|
|
uv run main.py --help > /dev/null
|
|
echo "✅ main.py wrapper works correctly"
|
|
|
|
- name: Verify import structure
|
|
run: |
|
|
cd mcp_server
|
|
# Test that main modules can be imported from new structure
|
|
uv run python -c "
|
|
import sys
|
|
sys.path.insert(0, 'src')
|
|
|
|
# Test core imports
|
|
from config.schema import GraphitiConfig
|
|
from services.factories import LLMClientFactory, EmbedderFactory, DatabaseDriverFactory
|
|
from services.queue_service import QueueService
|
|
from models.entity_types import ENTITY_TYPES
|
|
from models.response_types import StatusResponse
|
|
from utils.formatting import format_fact_result
|
|
|
|
print('✅ All core modules import successfully')
|
|
"
|
|
|
|
- name: Check for missing dependencies
|
|
run: |
|
|
cd mcp_server
|
|
echo "📋 Checking MCP server dependencies..."
|
|
uv run python -c "
|
|
try:
|
|
import mcp
|
|
print('✅ MCP library available')
|
|
except ImportError:
|
|
print('❌ MCP library missing')
|
|
exit(1)
|
|
|
|
try:
|
|
import graphiti_core
|
|
print('✅ Graphiti Core available')
|
|
except ImportError:
|
|
print('⚠️ Graphiti Core not available (may be expected in CI)')
|
|
" |