使用说明
网络MCP服务器
利用本地语言模型通过MCP(模型上下文协议)生成网络设备配置指令的系统。
🎯 描述
这个项目是一个MCP服务器,它能够使用自然语言为各种类型的网络设备生成配置命令。该系统通过Ollama使用本地语言模型,以确保数据的隐私和控制。
🏗️ 建筑
主要组件
- MCP 服务器 (
app/main.py) - 处理MCP请求的主要服务器 - 配置图 (
app/graph.py) - LangGraph 工作流用于生成配置 - 文档工具 (
app/tools.py) - 查找相关文件 - 模型 (
app/models.py) - Pydantic 数据模型 - 提示 (
app/prompts.py) - LLM(大型语言模型)提示模板
处理工作流
graph TD
A[Запрос пользователя] --> B[Поиск документации]
B --> C[Генерация команд LLM]
C --> D[Валидация безопасности]
D --> E{Безопасно?}
E -->|Да| F[Симуляция выполнения]
E -->|Нет| G[Обработка опасных команд]
E -->|Критично| H[Блокировка]
F --> I[Возврат результата]
G --> I
H --> I
🚀 安装与设置
要求
- Python 3.8及以上版本
- 安装了模型的Ollama
- Git(一种分布式版本控制系统)
安装依赖项
方案1:使用uv(推荐)
紫外线 - 来自Astral的快速Python包管理器。
UV的优势:
- ⚡(闪电符号,常用于表示快速、活力或电) 速度比pip快10到100倍
- 🔒(锁形符号,常用于表示安全、保密或锁定状态) 可靠性确定性装配
- 🎯 目标(或瞄准、射中) 简洁性一个工具应对所有任务
- 📦(包裹/箱子) 兼容性与 pip 和 pip-tools 兼容
- 🐍(蛇) Python管理自动安装所需版本的Python
# Установка uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Или через pip
pip install uv
# Установка зависимостей проекта
uv sync
# Активация виртуального окружения
source .venv/bin/activate # Linux/macOS
# или
.venv\Scripts\activate # Windows
# Запуск проекта
uv run python app/main.py
方案2:使用pip
# Создание виртуального окружения
python -m venv .venv
# Активация виртуального окружения
source .venv/bin/activate # Linux/macOS
# или
.venv\Scripts\activate # Windows
# Установка зависимостей
pip install -r requirements.txt
选项3:使用poetry
# Установка poetry
curl -sSL https://install.python-poetry.org | python3 -
# Установка зависимостей
poetry install
# Запуск проекта
poetry run python app/main.py
Ollama设置
- 安装Ollama:https://ollama.ai/
- 下载模型:
ollama pull llama2
ollama pull mistral
ollama pull codellama
环境变量
创建一个文件 .env:
LOCAL_MODEL=llama2
OLLAMA_BASE_URL=http://localhost:11434
📖 使用方法
启动MCP服务器
python app/main.py
本地模型测试
python test_local.py
通过MCP的使用示例
{
"tool": "configure_network",
"arguments": {
"request": "настрой vlan 100 с именем Marketing",
"equipment": "cisco_ios",
"dry_run": true
}
}
🔧 支持的设备
- Cisco IOS(思科网络操作系统) - Cisco交换机和路由器
- Juniper JunOS(译为“瞻博网络JunOS”) - Juniper Networks设备
- 华为 - 华为网络设备
- MikroTik(米科蒂克) - RouterOS设备
🛡️ 安全
该系统包含多层次的安全检查:
- 命令验证 - 检查潜在危险操作
- 模拟模式 - 默认情况下,所有命令都在模拟模式下执行
- 回滚命令 - 自动生成撤销更改的命令
- 警告 - 潜在风险通知
📁 项目结构
network-mcp-server/
├── app/
│ ├── __init__.py
│ ├── main.py # Главный MCP сервер
│ ├── graph.py # LangGraph workflow
│ ├── models.py # Pydantic модели
│ ├── prompts.py # Шаблоны промптов
│ ├── server.py # MCP сервер логика
│ └── tools.py # Инструменты документации
├── data/
│ └── documentation/ # Документация по оборудованию
├── test_local.py # Тестирование моделей
├── test_mcp.py # Тестирование MCP сервера
├── requirements.txt # Зависимости Python
├── pyproject.toml # Конфигурация проекта
└── README.md # Документация
🔍 这是如何运作的
1. 搜索文档
该系统使用向量搜索技术,根据用户的查询和设备类型来查找相关的配置命令。
2. 命令生成
本地语言模型(LLM)分析请求并生成相应的JSON格式配置命令。
3. 安全性验证
生成的命令会经过检查,以确认是否存在潜在危险操作:
- 可能导致网络中断的命令
- 无回滚能力的命令
- 影响安全的命令
4. 模拟与结果
安全命令会被模拟执行,结果连同完整文档一起返回给用户。
🧪 测试
模型测试
# С uv
uv run python test_local.py
# С pip
python test_local.py
这个脚本用于测试不同的Ollama模型在生成正确配置命令方面的能力。
MCP服务器测试
# С uv
uv run python test_mcp.py
# С pip
python test_mcp.py
检查MCP服务器的基本功能。
🛠️ 开发
开发者命令
使用uv
# Установка зависимостей для разработки
uv sync --dev
# Форматирование кода
uv run black .
uv run isort .
# Проверка типов
uv run mypy app/
# Линтинг
uv run flake8 app/
# Запуск тестов
uv run pytest
# Запуск проекта в режиме разработки
uv run python app/main.py
使用 pip
# Установка зависимостей для разработки
pip install -e ".[dev]"
# Форматирование кода
black .
isort .
# Проверка типов
mypy app/
# Линтинг
flake8 app/
# Запуск тестов
pytest
🔧 配置
模型配置
您可以通过环境变量更改所使用的模型:
LOCAL_MODEL=mistral # или codellama, llama2
添加文档
将文档文件放入相应的文件夹中:
data/documentation/
├── cisco_ios/
│ └── commands.txt
├── juniper_junos/
│ └── commands.txt
└── ...
🤝 为项目做贡献
- 克隆仓库
- 为新功能创建分支
- 做出修改
- 添加测试
- 创建拉取请求
📄 许可证
此项目遵循MIT许可证发布。详情请参见LICENSE文件。
🆘 支持
如果您有任何问题或遇到困难:
- 查阅Ollama的文档
- 确保模型已加载
- 检查服务器日志
- 在仓库中创建一个Issue
🔮 发展计划
- [ ] 支持额外类型的设备
- [ ] 与真实模拟器的集成
- [ ] 管理网页界面
- [ ] 用于与外部系统集成的API
- [ ] 扩展验证系统
- [ ] 支持配置模板
