Skip to main content
Glama

Model Control Plane (MCP) Server

# MCP Server with OpenAI, Git, Filesystem, and Prometheus Integration This repository contains a Model Control Plane (MCP) server implementation that supports OpenAI services, Git repository analysis, local filesystem operations, and Prometheus integration. ## Project Structure ``` MCP/ ├── mcp/ # Core MCP library modules ├── scripts/ # Utility scripts and test tools ├── prometheus/ # Prometheus configuration ├── docker-compose.yml # Docker configuration ├── mcp_server.py # Main server implementation ├── mcp_run # Main runner script (shortcut) └── README.md # This file ``` ## Requirements - Python 3.8+ - FastAPI - Uvicorn - OpenAI SDK - GitPython - Requests - Docker and Docker Compose (for Prometheus features) ## Installation 1. Clone this repository 2. Install the dependencies: ```bash pip install -r requirements.txt ``` ## Environment Variables Set the following environment variables: For Azure OpenAI: ```bash export AZURE_OPENAI_ENDPOINT="your-azure-endpoint" export AZURE_OPENAI_API_KEY="your-azure-api-key" export AZURE_OPENAI_API_VERSION="2023-05-15" export AZURE_DEPLOYMENT_NAME="your-deployment-name" ``` For Standard OpenAI: ```bash export OPENAI_API_KEY="your-openai-api-key" # Optional: Specify which models to use export OPENAI_CHAT_MODEL="gpt-4o-mini" # Default if not specified export OPENAI_COMPLETION_MODEL="gpt-3.5-turbo-instruct" # Default if not specified ``` For Prometheus: ```bash export PROMETHEUS_URL="http://localhost:9090" # Default if not specified ``` ## Running the Server Start the MCP server: ```bash python scripts/start_mcp_server.py ``` Or for more options: ```bash python scripts/start_mcp_server.py --host 0.0.0.0 --port 8000 --debug ``` The server will be available at http://localhost:8000. ## Unified Testing Tool We provide a unified testing script that gives you a user-friendly interface to all testing functionality: ```bash ./mcp_run ``` This interactive script provides: - Filesystem tests - Git integration tests - Memory analysis tools - Prometheus tests & memory stress - MCP server management - Environment setup ## Individual Tests You can also run individual tests directly: Test the OpenAI integration: ```bash python scripts/test_mcp_client.py ``` Test the Git integration (provide a Git repository URL): ```bash python scripts/test_git_integration.py https://github.com/username/repository ``` Test the Git diff functionality (analyze requirements compatibility): ```bash python scripts/test_git_diff.py https://github.com/username/repository [commit-sha] ``` Test the filesystem functionality: ```bash python scripts/test_filesystem.py ``` Test the langflow integration with MCP: ```bash python scripts/test_langflow_integration.py [OPTIONAL_REPO_URL] ``` Test the Prometheus integration: ```bash python scripts/test_prometheus.py [prometheus_url] ``` ## Advanced Git Analysis For more advanced Git repository analysis with AI recommendations: ```bash python scripts/langflow_git_analyzer.py https://github.com/username/repository ``` You can also search for specific patterns in the repository: ```bash python scripts/langflow_git_analyzer.py https://github.com/username/repository --search "def main" ``` Or analyze the last commit diff with AI insights: ```bash python scripts/langflow_git_analyzer.py https://github.com/username/repository --diff ``` ## Memory Analysis Tools MCP includes several tools for memory monitoring and analysis: ```bash # Basic memory diagnostics with AI analysis python scripts/ai_memory_diagnostics.py # Interactive memory dashboard python scripts/mcp_memory_dashboard.py # Memory alerting system python scripts/mcp_memory_alerting.py ``` You can also simulate memory pressure for testing: ```bash python scripts/simulate_memory_pressure.py --target 85 --duration 300 ``` ## Prometheus Integration ### Setup 1. Start the Prometheus stack using Docker Compose: ```bash docker compose up -d ``` This will start: - Prometheus server (accessible at http://localhost:9090) - Node Exporter (for host metrics) - cAdvisor (for container metrics) 2. For stress testing, you can start the memory stress container: ```bash docker compose up -d --build memory-stress ``` Or use the container test script: ```bash ./scripts/container-memory-test.sh start ``` ### Using Prometheus Client The `MCPAIComponent` class includes Prometheus capabilities: ```python from langflow import MCPAIComponent # Initialize the client mcp = MCPAIComponent(mcp_server_url="http://localhost:8000") # Instant query (current metric values) result = mcp.prometheus_query("up") # Range query (metrics over time) result = mcp.prometheus_query_range( query="rate(node_cpu_seconds_total{mode='system'}[1m])", start="2023-03-01T00:00:00Z", end="2023-03-01T01:00:00Z", step="15s" ) # Get all labels labels = mcp.prometheus_get_labels() # Get label values values = mcp.prometheus_get_label_values("job") # Get targets targets = mcp.prometheus_get_targets() # Get alerts alerts = mcp.prometheus_get_alerts() ``` ### Useful PromQL Queries - CPU Usage: `rate(node_cpu_seconds_total{mode!="idle"}[1m])` - Memory Usage: `node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes` - Disk Usage: `node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}` - Container CPU Usage: `rate(container_cpu_usage_seconds_total[1m])` - Container Memory Usage: `container_memory_usage_bytes` ## API Endpoints ### OpenAI Endpoints - GET `/v1/models` - List all available models - GET `/v1/models/{model_id}` - Get information about a specific model - POST `/v1/models/azure-gpt-4/completion` - Generate text completion using Azure OpenAI - POST `/v1/models/azure-gpt-4/chat` - Generate chat response using Azure OpenAI - POST `/v1/models/openai-gpt-chat/chat` - Generate chat response using OpenAI chat model - POST `/v1/models/openai-gpt-completion/completion` - Generate text completion using OpenAI completion model ### Git Integration Endpoints - POST `/v1/models/git-analyzer/analyze` - Analyze a Git repository - POST `/v1/models/git-analyzer/search` - Search a Git repository for files matching a pattern - POST `/v1/models/git-analyzer/diff` - Get the diff of the last commit in a repository ### Filesystem Endpoints - POST `/v1/models/filesystem/list` - List contents of a directory - POST `/v1/models/filesystem/read` - Read a file's contents - POST `/v1/models/filesystem/read-multiple` - Read multiple files at once - POST `/v1/models/filesystem/write` - Write content to a file - POST `/v1/models/filesystem/edit` - Edit a file with multiple replacements - POST `/v1/models/filesystem/mkdir` - Create a directory - POST `/v1/models/filesystem/move` - Move a file or directory - POST `/v1/models/filesystem/search` - Search for files matching a pattern - POST `/v1/models/filesystem/info` - Get information about a file or directory ### Prometheus Endpoints - POST `/v1/models/prometheus/query` - Execute an instant query - POST `/v1/models/prometheus/query_range` - Execute a range query - POST `/v1/models/prometheus/series` - Get series data - GET `/v1/models/prometheus/labels` - Get all available labels - POST `/v1/models/prometheus/label_values` - Get values for a specific label - GET `/v1/models/prometheus/targets` - Get all targets - GET `/v1/models/prometheus/rules` - Get all rules - GET `/v1/models/prometheus/alerts` - Get all alerts ## Client Usage You can use the `MCPAIComponent` in your LangFlow pipelines by providing the MCP server URL: ```python from langflow import MCPAIComponent mcp = MCPAIComponent(mcp_server_url="http://localhost:8000") # List available models models = mcp.list_models() print(models) # Generate chat completion with OpenAI model chat_response = mcp.chat( model_id="openai-gpt-chat", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Tell me a joke about programming."} ], max_tokens=100, temperature=0.7 ) print(chat_response) # Generate text completion with OpenAI model completion_response = mcp.completion( model_id="openai-gpt-completion", prompt="Write a function in Python to calculate the factorial of a number:", max_tokens=150, temperature=0.7 ) print(completion_response) # Analyze a Git repository repo_analysis = mcp.analyze_git_repo("https://github.com/username/repository") print(repo_analysis) # Search a Git repository search_results = mcp.search_git_repo("https://github.com/username/repository", "def main") print(search_results) # Get the diff of the last commit diff_info = mcp.get_git_diff("https://github.com/username/repository") print(diff_info) # List files in the current directory dir_contents = mcp.list_directory() print(dir_contents) # Read a file file_content = mcp.read_file("path/to/file.txt") print(file_content) # Write to a file write_result = mcp.write_file("path/to/new_file.txt", "Hello, world!") print(write_result) # Search for files search_result = mcp.search_files("*.py") print(search_result) ``` ## Using the GitCodeAnalyzer Class For more structured Git analysis, you can use the `GitCodeAnalyzer` class: ```python from langflow_git_analyzer import GitCodeAnalyzer # Initialize the analyzer analyzer = GitCodeAnalyzer(mcp_server_url="http://localhost:8000") # Analyze a repository analyzer.analyze_repository("https://github.com/username/repository") # Get a summary summary = analyzer.get_repository_summary() print(summary) # Get AI recommendations recommendations = analyzer.get_repository_recommendations() print(recommendations) # Analyze code patterns pattern_analysis = analyzer.analyze_code_pattern("def process") print(pattern_analysis) # Get the last commit diff diff_info = analyzer.get_last_commit_diff() print(diff_info) # Get a formatted summary of the diff diff_summary = analyzer.get_formatted_diff_summary() print(diff_summary) # Get AI analysis of the commit changes diff_analysis = analyzer.analyze_commit_diff() print(diff_analysis) ``` ## Troubleshooting ### Prometheus Issues 1. Verify Prometheus is running: `docker ps | grep prometheus` 2. Check you can access the Prometheus UI: http://localhost:9090 3. Verify the MCP server is running and accessible 4. Check the MCP server logs for errors 5. Try simple queries first to verify connectivity (e.g., `up` query) ### OpenAI Issues 1. Verify your API keys are set correctly 2. Check for rate limiting or quota issues 3. Verify you're using supported models for your API key ### Git Issues 1. Ensure the Git repository URL is accessible 2. Check for authentication issues if using private repositories 3. Ensure GitPython is installed correctly

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/dvladimirov/MCP'

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