Fix MCP server startup issues and create minimal mode

- Fix TOML syntax error in pyproject.toml configuration
- Simplify dependencies to only FastMCP by default
- Create optional 'video' dependency group for full features
- Add minimal test server (test_minimal.py) for fast startup
- Add graceful import handling for optional video libraries
- Create both full and minimal startup scripts
- Ensure MCP server starts quickly without heavy dependencies

Server now successfully starts and connects to Claude Code!
This commit is contained in:
Ryan Malloy 2025-09-05 02:50:34 -06:00
parent 0d926c626f
commit 9ccdc7782e
5 changed files with 1489 additions and 16 deletions

View File

@ -2,23 +2,49 @@
import os
from pathlib import Path
from typing import Dict, List, Optional, Union
from typing import Optional, Union
from fastmcp import FastMCP
from moviepy.audio.fx import volumex
from moviepy.audio.io.AudioFileClip import AudioFileClip
from moviepy.editor import (
CompositeVideoClip,
TextClip,
VideoFileClip,
concatenate_videoclips,
)
from moviepy.video.fx import speedx
# Optional imports for video processing
try:
from moviepy.audio.fx import volumex
from moviepy.audio.io.AudioFileClip import AudioFileClip
from moviepy.editor import (
CompositeVideoClip,
TextClip,
VideoFileClip,
concatenate_videoclips,
)
from moviepy.video.fx import speedx
MOVIEPY_AVAILABLE = True
except ImportError:
MOVIEPY_AVAILABLE = False
try:
import cv2
import numpy as np
CV2_AVAILABLE = True
except ImportError:
CV2_AVAILABLE = False
try:
import ffmpeg
FFMPEG_AVAILABLE = True
except ImportError:
FFMPEG_AVAILABLE = False
# Initialize FastMCP server
mcp = FastMCP("MCP Video Editor")
def _check_moviepy_dependency():
"""Check if MoviePy is available for video processing."""
if not MOVIEPY_AVAILABLE:
return {"error": "MoviePy is not installed. Install with: pip install moviepy"}
return None
class VideoRecordingSession:
"""Manages video recording sessions."""
@ -41,7 +67,26 @@ class VideoRecordingSession:
# Global recording sessions store
recording_sessions: Dict[str, VideoRecordingSession] = {}
recording_sessions: dict[str, VideoRecordingSession] = {}
@mcp.tool()
def mcp_video_editor_status() -> dict[str, Union[str, bool, int]]:
"""
Get the status of the MCP Video Editor server and available capabilities.
Returns:
Dict with server status and available features
"""
return {
"server_name": "MCP Video Editor",
"version": "0.1.0",
"status": "running",
"moviepy_available": MOVIEPY_AVAILABLE,
"opencv_available": CV2_AVAILABLE,
"ffmpeg_available": FFMPEG_AVAILABLE,
"active_sessions": len(recording_sessions),
}
@mcp.tool()

View File

@ -7,17 +7,20 @@ authors = [
]
dependencies = [
"fastmcp>=2.12.2",
"opencv-python>=4.8.0",
"moviepy>=1.0.3",
"pillow>=10.0.0",
"numpy>=1.24.0",
"ffmpeg-python>=0.2.0",
]
requires-python = ">=3.12"
readme = "README.md"
license = {text = "MIT"}
[project.optional-dependencies]
video = [
"moviepy>=1.0.3",
"opencv-python>=4.8.0",
"pillow>=10.0.0",
"numpy>=1.24.0",
"ffmpeg-python>=0.2.0",
]
dev = [
"ruff>=0.1.0",
"pytest>=7.0.0",

View File

@ -0,0 +1,35 @@
#!/bin/bash
# MCP Video Editor Startup Script (Minimal Version)
# This script launches the MCP Video Editor server in minimal mode for fast startup
set -e # Exit on any error
# Get the directory where this script is located
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Change to the project directory
cd "$SCRIPT_DIR"
echo "🎬 Starting MCP Video Editor (Minimal Mode)..."
echo "📁 Working directory: $SCRIPT_DIR"
# Check if uv is installed
if ! command -v uv &> /dev/null; then
echo "❌ Error: UV is not installed or not in PATH"
echo "Please install UV: curl -LsSf https://astral.sh/uv/install.sh | sh"
exit 1
fi
# Check if dependencies are installed
if [ ! -d ".venv" ] && [ ! -f "uv.lock" ]; then
echo "📦 Installing minimal dependencies with UV..."
uv sync
fi
echo " Running in minimal mode - video processing features require additional dependencies"
echo " To install full features: uv sync --extra video"
# Launch the minimal MCP Video Editor server with UV
echo "🚀 Launching MCP Video Editor server (minimal mode)..."
exec uv run python test_minimal.py

34
test_minimal.py Normal file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env python3
"""Minimal MCP Video Editor test - just FastMCP without heavy dependencies."""
from fastmcp import FastMCP
# Initialize FastMCP server
mcp = FastMCP("MCP Video Editor - Minimal")
@mcp.tool()
def mcp_video_editor_status():
"""Get the status of the MCP Video Editor server."""
return {
"server_name": "MCP Video Editor",
"version": "0.1.0",
"status": "running",
"mode": "minimal"
}
@mcp.tool()
def echo_test(message: str):
"""Simple echo test to verify MCP functionality."""
return {"echo": message, "status": "success"}
def main():
"""Main entry point for the minimal test server."""
print("🎬 Starting MCP Video Editor (Minimal Mode)...")
mcp.run()
if __name__ == "__main__":
main()

1356
uv.lock generated Normal file

File diff suppressed because it is too large Load Diff