Model Control Plane (MCP) Server

local-only server

The server can only run on the client’s local machine because it depends on local resources.

Integrations

  • Integrates with Docker for running Prometheus, Node Exporter, cAdvisor, and memory stress testing

  • Uses FastAPI as the web framework for implementing the MCP server API endpoints

  • Provides Git repository analysis, searching, and diff functionality through dedicated endpoints

集成 OpenAI、Git、文件系统和 Prometheus 的 MCP 服务器

该存储库包含一个模型控制平面 (MCP) 服务器实现,支持 OpenAI 服务、Git 存储库分析、本地文件系统操作和 Prometheus 集成。

项目结构

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

要求

  • Python 3.8+
  • 快速API
  • 优维康
  • OpenAI SDK
  • GitPython
  • 请求
  • Docker 和 Docker Compose(用于 Prometheus 功能)

安装

  1. 克隆此存储库
  2. 安装依赖项:
pip install -r requirements.txt

环境变量

设置以下环境变量:

对于 Azure OpenAI:

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"

对于标准 OpenAI:

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

对于普罗米修斯:

export PROMETHEUS_URL="http://localhost:9090" # Default if not specified

运行服务器

启动 MCP 服务器:

python scripts/start_mcp_server.py

或了解更多选项:

python scripts/start_mcp_server.py --host 0.0.0.0 --port 8000 --debug

该服务器将在http://localhost:8000上可用。

统一测试工具

我们提供统一的测试脚本,为您提供所有测试功能的用户友好界面:

./mcp_run

该交互式脚本提供:

  • 文件系统测试
  • Git 集成测试
  • 内存分析工具
  • Prometheus 测试和内存压力
  • MCP 服务器管理
  • 环境设置

个人测试

您也可以直接运行单个测试:

测试 OpenAI 集成:

python scripts/test_mcp_client.py

测试 Git 集成(提供 Git 存储库 URL):

python scripts/test_git_integration.py https://github.com/username/repository

测试 Git diff 功能(分析需求兼容性):

python scripts/test_git_diff.py https://github.com/username/repository [commit-sha]

测试文件系统功能:

python scripts/test_filesystem.py

测试 langflow 与 MCP 的集成:

python scripts/test_langflow_integration.py [OPTIONAL_REPO_URL]

测试 Prometheus 集成:

python scripts/test_prometheus.py [prometheus_url]

高级 Git 分析

要使用 AI 建议进行更高级的 Git 存储库分析:

python scripts/langflow_git_analyzer.py https://github.com/username/repository

您还可以在存储库中搜索特定的模式:

python scripts/langflow_git_analyzer.py https://github.com/username/repository --search "def main"

或者使用 AI 洞察分析最后一次提交的差异:

python scripts/langflow_git_analyzer.py https://github.com/username/repository --diff

内存分析工具

MCP 包含几个用于内存监控和分析的工具:

# 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

您还可以模拟内存压力进行测试:

python scripts/simulate_memory_pressure.py --target 85 --duration 300

Prometheus 集成

设置

  1. 使用 Docker Compose 启动 Prometheus 堆栈:
docker compose up -d

这将开始:

  • Prometheus 服务器(可通过http://localhost:9090访问)
  • 节点导出器(用于主机指标)
  • cAdvisor(用于容器指标)
  1. 对于压力测试,您可以启动内存压力容器:
docker compose up -d --build memory-stress

或者使用容器测试脚本:

./scripts/container-memory-test.sh start

Docker 配置和重置脚本

该项目包括多个 Docker 配置和重置脚本,以便在不同环境中可靠运行:

Docker 配置

  • 标准配置docker-compose.yml ):使用 Prometheus 和 Langflow 的自定义 Dockerfiles 来确保跨系统的权限一致。
  • 桥接网络配置docker-compose.bridge.yml ):对于主机网络有问题的环境,使用桥接网络的替代配置。

自定义 Dockerfile 解决权限问题

该项目针对 Prometheus 和 Langflow 使用自定义 Dockerfile 来解决常见的权限问题:

  • Dockerfile.prometheus :为nobody用户设置具有适当权限的 Prometheus 配置。
  • Dockerfile.langflow :将组件目录复制到容器中,而不改变文件所有权,从而允许 Langflow 访问组件而不会出现权限错误。

这种方法消除了卷安装的需要,从而避免了不同机器和用户配置之间的权限冲突。

重置脚本

  • 所有服务重置reset-all.sh ):使用单个命令重置所有容器。
    # Basic reset (rebuilds containers with existing volumes) ./reset-all.sh # Full reset (removes volumes and rebuilds containers) ./reset-all.sh --clean
  • 个人服务重置
    # Reset only Prometheus ./reset-prometheus.sh # Reset only Langflow ./reset-langflow.sh

这些脚本确保容器正确配置了正确的权限和最新的代码更改。

故障排除

如果您遇到权限问题:

  1. 使用重置脚本重建容器
  2. 使用docker compose logs <service_name>检查日志
  3. 确保添加到 Langflow 的所有组件都包含在 Dockerfile.langflow 中

跨机器部署

部署到新机器时:

  1. 克隆存储库
  2. 使重置脚本可执行: chmod +x *.sh
  3. 运行重置脚本: ./reset-all.sh reset-all.sh

自定义 Dockerfiles 自动处理不同系统之间可能出现的所有权限问题。

使用 Prometheus 客户端

MCPAIComponent类包含 Prometheus 功能:

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()

有用的 PromQL 查询

  • CPU 使用率: rate(node_cpu_seconds_total{mode!="idle"}[1m])
  • 内存使用情况: node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes
  • 磁盘使用情况: node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}
  • 容器 CPU 使用率: rate(container_cpu_usage_seconds_total[1m])
  • 容器内存使用情况: container_memory_usage_bytes

API 端点

OpenAI 端点

  • GET /v1/models - 列出所有可用模型
  • GET /v1/models/{model_id} - 获取特定模型的信息
  • POST /v1/models/azure-gpt-4/completion - 使用 Azure OpenAI 生成文本补全
  • POST /v1/models/azure-gpt-4/chat - 使用 Azure OpenAI 生成聊天响应
  • POST /v1/models/openai-gpt-chat/chat - 使用 OpenAI 聊天模型生成聊天响应
  • POST /v1/models/openai-gpt-completion/completion - 使用 OpenAI 补全模型生成文本补全

Git 集成端点

  • POST /v1/models/git-analyzer/analyze - 分析 Git 存储库
  • POST /v1/models/git-analyzer/search - 在 Git 存储库中搜索与模式匹配的文件
  • POST /v1/models/git-analyzer/diff - 获取存储库中最后一次提交的差异

文件系统端点

  • POST /v1/models/filesystem/list - 列出目录的内容
  • POST /v1/models/filesystem/read - 读取文件内容
  • POST /v1/models/filesystem/read-multiple - 一次读取多个文件
  • POST /v1/models/filesystem/write - 将内容写入文件
  • POST /v1/models/filesystem/edit - 编辑具有多个替换的文件
  • POST /v1/models/filesystem/mkdir - 创建目录
  • POST /v1/models/filesystem/move - 移动文件或目录
  • POST /v1/models/filesystem/search - 搜索符合模式的文件
  • POST /v1/models/filesystem/info - 获取有关文件或目录的信息

Prometheus 端点

  • POST /v1/models/prometheus/query - 执行即时查询
  • POST /v1/models/prometheus/query_range - 执行范围查询
  • POST /v1/models/prometheus/series - 获取系列数据
  • GET /v1/models/prometheus/labels - 获取所有可用标签
  • POST /v1/models/prometheus/label_values - 获取特定标签的值
  • GET /v1/models/prometheus/targets - 获取所有目标
  • GET /v1/models/prometheus/rules - 获取所有规则
  • GET /v1/models/prometheus/alerts - 获取所有警报

客户端使用情况

您可以通过提供 MCP 服务器 URL 在您的 LangFlow 管道中使用MCPAIComponent

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)

使用 GitCodeAnalyzer 类

对于更结构化的 Git 分析,可以使用GitCodeAnalyzer类:

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)

故障排除

Prometheus 问题

  1. 验证 Prometheus 是否正在运行: docker ps | grep prometheus
  2. 检查您是否可以访问 Prometheus UI: http://localhost:9090
  3. 验证 MCP 服务器是否正在运行且可访问
  4. 检查 MCP 服务器日志是否存在错误
  5. 首先尝试简单查询来验证连接性(例如, up查询)

OpenAI 问题

  1. 验证您的 API 密钥设置是否正确
  2. 检查速率限制或配额问题
  3. 验证您使用的 API 密钥支持的模型

Git 问题

  1. 确保 Git 存储库 URL 可访问
  2. 如果使用私有存储库,请检查身份验证问题
  3. 确保 GitPython 已正确安装
ID: omow6idbzl