
Model Control Plane (MCP) Server
一个服务器实现,通过 REST API 端点,为 OpenAI 服务、Git 仓库分析和本地文件系统操作提供统一的接口。
README
集成 OpenAI、Git、文件系统和 Prometheus 的 MCP 服务器
本仓库包含一个模型控制平面 (MCP) 服务器的实现,它支持 OpenAI 服务、Git 仓库分析、本地文件系统操作和 Prometheus 集成。
项目结构
MCP/
├── mcp/ # 核心 MCP 库模块
├── scripts/ # 实用工具脚本和测试工具
├── prometheus/ # Prometheus 配置
├── docker-compose.yml # Docker 配置
├── mcp_server.py # 主服务器实现
├── mcp_run # 主运行脚本(快捷方式)
└── README.md # 本文件
要求
- Python 3.8+
- FastAPI
- Uvicorn
- OpenAI SDK
- GitPython
- Requests
- Docker 和 Docker Compose(用于 Prometheus 功能)
安装
- 克隆本仓库
- 安装依赖项:
pip install -r requirements.txt
环境变量
设置以下环境变量:
对于 Azure OpenAI:
export AZURE_OPENAI_ENDPOINT="你的-azure-endpoint"
export AZURE_OPENAI_API_KEY="你的-azure-api-key"
export AZURE_OPENAI_API_VERSION="2023-05-15"
export AZURE_DEPLOYMENT_NAME="你的-deployment-name"
对于标准 OpenAI:
export OPENAI_API_KEY="你的-openai-api-key"
# 可选:指定要使用的模型
export OPENAI_CHAT_MODEL="gpt-4o-mini" # 如果未指定,则为默认值
export OPENAI_COMPLETION_MODEL="gpt-3.5-turbo-instruct" # 如果未指定,则为默认值
对于 Prometheus:
export PROMETHEUS_URL="http://localhost:9090" # 如果未指定,则为默认值
运行服务器
启动 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 洞察分析上次提交的 diff:
python scripts/langflow_git_analyzer.py https://github.com/username/repository --diff
内存分析工具
MCP 包含几个用于内存监控和分析的工具:
# 带有 AI 分析的基本内存诊断
python scripts/ai_memory_diagnostics.py
# 交互式内存仪表板
python scripts/mcp_memory_dashboard.py
# 内存警报系统
python scripts/mcp_memory_alerting.py
你也可以模拟内存压力以进行测试:
python scripts/simulate_memory_pressure.py --target 85 --duration 300
Prometheus 集成
设置
- 使用 Docker Compose 启动 Prometheus 堆栈:
docker compose up -d
这将启动:
- Prometheus 服务器(可在 http://localhost:9090 访问)
- Node Exporter(用于主机指标)
- cAdvisor(用于容器指标)
- 对于压力测试,你可以启动内存压力容器:
docker compose up -d --build memory-stress
或者使用容器测试脚本:
./scripts/container-memory-test.sh start
Docker 配置和重置脚本
本项目包含多个 Docker 配置和重置脚本,用于在不同环境中可靠运行:
Docker 配置
- 标准配置 (
docker-compose.yml
): 使用自定义 Dockerfile 文件来配置 Prometheus 和 Langflow,以确保跨系统的一致权限。 - 桥接网络配置 (
docker-compose.bridge.yml
): 另一种配置,使用桥接网络来解决主机网络存在问题的环境。
用于解决权限问题的自定义 Dockerfile 文件
该项目为 Prometheus 和 Langflow 使用自定义 Dockerfile 文件来解决常见的权限问题:
- Dockerfile.prometheus: 使用
nobody
用户的正确权限设置 Prometheus 配置。 - Dockerfile.langflow: 将组件目录复制到容器中,而不更改文件所有权,从而允许 Langflow 访问组件而不会出现权限错误。
这种方法消除了对可能导致不同机器和用户配置之间出现权限冲突的卷挂载的需求。
重置脚本
-
所有服务重置 (
reset-all.sh
): 使用单个命令重置所有容器。# 基本重置(使用现有卷重建容器) ./reset-all.sh # 完全重置(删除卷并重建容器) ./reset-all.sh --clean
-
单独服务重置:
# 仅重置 Prometheus ./reset-prometheus.sh # 仅重置 Langflow ./reset-langflow.sh
这些脚本确保容器已正确配置,具有正确的权限和最新的代码更改。
故障排除
如果遇到权限问题:
- 使用重置脚本重建容器
- 使用
docker compose logs <service_name>
检查日志 - 确保添加到 Langflow 的任何组件都包含在 Dockerfile.langflow 中
跨机器部署
部署到新机器时:
- 克隆仓库
- 使重置脚本可执行:
chmod +x *.sh
- 运行重置脚本:
./reset-all.sh
自定义 Dockerfile 文件会自动处理可能在不同系统上发生的所有权限问题。
使用 Prometheus 客户端
MCPAIComponent
类包含 Prometheus 功能:
from langflow import MCPAIComponent
# 初始化客户端
mcp = MCPAIComponent(mcp_server_url="http://localhost:8000")
# 即时查询(当前指标值)
result = mcp.prometheus_query("up")
# 范围查询(一段时间内的指标)
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"
)
# 获取所有标签
labels = mcp.prometheus_get_labels()
# 获取标签值
values = mcp.prometheus_get_label_values("job")
# 获取目标
targets = mcp.prometheus_get_targets()
# 获取警报
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
- 获取仓库中上次提交的 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")
# 列出可用模型
models = mcp.list_models()
print(models)
# 使用 OpenAI 模型生成聊天补全
chat_response = mcp.chat(
model_id="openai-gpt-chat",
messages=[
{"role": "system", "content": "你是一个乐于助人的助手。"},
{"role": "user", "content": "给我讲一个关于编程的笑话。"}
],
max_tokens=100,
temperature=0.7
)
print(chat_response)
# 使用 OpenAI 模型生成文本补全
completion_response = mcp.completion(
model_id="openai-gpt-completion",
prompt="用 Python 编写一个函数来计算一个数的阶乘:",
max_tokens=150,
temperature=0.7
)
print(completion_response)
# 分析 Git 仓库
repo_analysis = mcp.analyze_git_repo("https://github.com/username/repository")
print(repo_analysis)
# 搜索 Git 仓库
search_results = mcp.search_git_repo("https://github.com/username/repository", "def main")
print(search_results)
# 获取上次提交的 diff
diff_info = mcp.get_git_diff("https://github.com/username/repository")
print(diff_info)
# 列出当前目录中的文件
dir_contents = mcp.list_directory()
print(dir_contents)
# 读取文件
file_content = mcp.read_file("path/to/file.txt")
print(file_content)
# 写入文件
write_result = mcp.write_file("path/to/new_file.txt", "Hello, world!")
print(write_result)
# 搜索文件
search_result = mcp.search_files("*.py")
print(search_result)
使用 GitCodeAnalyzer 类
对于更结构化的 Git 分析,你可以使用 GitCodeAnalyzer
类:
from langflow_git_analyzer import GitCodeAnalyzer
# 初始化分析器
analyzer = GitCodeAnalyzer(mcp_server_url="http://localhost:8000")
# 分析仓库
analyzer.analyze_repository("https://github.com/username/repository")
# 获取摘要
summary = analyzer.get_repository_summary()
print(summary)
# 获取 AI 推荐
recommendations = analyzer.get_repository_recommendations()
print(recommendations)
# 分析代码模式
pattern_analysis = analyzer.analyze_code_pattern("def process")
print(pattern_analysis)
# 获取上次提交的 diff
diff_info = analyzer.get_last_commit_diff()
print(diff_info)
# 获取 diff 的格式化摘要
diff_summary = analyzer.get_formatted_diff_summary()
print(diff_summary)
# 获取提交更改的 AI 分析
diff_analysis = analyzer.analyze_commit_diff()
print(diff_analysis)
故障排除
Prometheus 问题
- 验证 Prometheus 是否正在运行:
docker ps | grep prometheus
- 检查你是否可以访问 Prometheus UI:http://localhost:9090
- 验证 MCP 服务器是否正在运行且可访问
- 检查 MCP 服务器日志中是否有错误
- 首先尝试简单的查询来验证连接(例如,
up
查询)
OpenAI 问题
- 验证你的 API 密钥是否已正确设置
- 检查是否存在速率限制或配额问题
- 验证你是否正在使用你的 API 密钥支持的模型
Git 问题
- 确保 Git 仓库 URL 可访问
- 如果使用私有仓库,请检查是否存在身份验证问题
- 确保 GitPython 已正确安装
推荐服务器
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Excel MCP Server
一个模型上下文协议服务器,使 AI 助手能够读取和写入 Microsoft Excel 文件,支持诸如 xlsx、xlsm、xltx 和 xltm 等格式。
Playwright MCP Server
提供一个利用模型上下文协议的服务器,以实现类人浏览器的自动化,该服务器使用 Playwright,允许控制浏览器行为,例如导航、元素交互和滚动。
MCP Package Docs Server
促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。
Claude Code MCP
一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。
@kazuph/mcp-taskmanager
用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。
Apple MCP Server
通过 MCP 协议与 Apple 应用(如“信息”、“备忘录”和“通讯录”)进行交互,从而使用自然语言发送消息、搜索和打开应用内容。
Gitingest-MCP
一个用于 gitingest 的 MCP 服务器。它允许像 Claude Desktop、Cursor、Cline 等 MCP 客户端快速提取关于 Github 仓库的信息,包括仓库摘要、项目目录结构、文件内容等。