F5设备查询服务器

一个为F5 BIG-IP设备提供查询服务的MCP服务器,通过mcpo集成,支持查询池、节点、虚拟服务器等LTM组件。

  • by f5-rahm
  • Python
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 f5-rahm/f5-mcp

使用说明

带mcpo的F5 MCP服务器

F5 BIG-IP设备的模型上下文协议(MCP)服务器,通过mcpo提供服务。此设置提供AI 能够查询F5 BIG-IP对象(如池、节点、虚拟服务器和其他LTM)的助手 组件。

概述

此存储库包含:

  • F5 MCP服务器:基于FastMCP的服务器,提供查询F5 BIG-IP设备的工具
  • mcpo集成:通过mcpo为MCP服务器提供服务的配置,便于与AI客户端集成
  • Docker设置:两个组件的完整容器化环境

先决条件

  • Docker和Docker Compose
  • 带有REST API访问的F5 BIG-IP设备
  • 容器和F5设备之间的网络连接

快速开始

  1. 克隆并准备环境:

    git clone https://github.com/f5-rahm/f5-mcp
    cd f5-mcp
    
  2. 创建外部Docker网络:

    docker network create labnet
    
  3. 配置环境变量:

    创建 f5mcp/.env 带有F5凭据的文件:

    F5_HOST=192.168.1.100
    F5_USER=admin
    F5_PASS=your-password
    

    创建 .env 主目录中带有mcpo API密钥的文件:

    MCPO_API_KEY=your-mcpo-api-key-here
    
  4. 启动服务:

    docker-compose up -d
    

    备注:docker-compose.yml应配置为使用main .env mcpo服务的文件。如果需要,添加 env_file: .env mcpo服务定义。

项目结构

.
├── f5mcp/
│   ├── Dockerfile
│   ├── main.py                 # MCP server implementation
│   ├── requirements.txt
│   └── .env                   # F5 credentials (create this)
├── docker-compose.yml         # Service definitions
├── mcpo-config.json          # mcpo configuration
├── .env                      # mcpo API key (create this)
└── README.md

测试MCP服务器

1.直接HTTP测试

使用curl或任何HTTP客户端直接测试MCP服务器:

初始化会话:

curl -X POST http://localhost:8081/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2024-11-05",
      "capabilities": {
        "tools": {}
      },
      "clientInfo": {
        "name": "test-client",
        "version": "1.0.0"
      }
    }
  }'

列出可用工具:

curl -X POST http://localhost:8081/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list",
    "params": {}
  }'

测试obj_list工具:

# List all pools
curl -X POST http://localhost:8081/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "obj_list",
      "arguments": {
        "obj_type": "pool"
      }
    }
  }'

# Get specific pool details
curl -X POST http://localhost:8081/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 4,
    "method": "tools/call",
    "params": {
      "name": "obj_list",
      "arguments": {
        "obj_type": "pool",
        "obj_name": "your-pool-name"
      }
    }
  }'

2.容器测试

检查容器日志:

# F5 MCP Server logs
docker logs f5mcp

# MCPO logs
docker logs mcpo

网络内部测试:

# Test MCP server from another container
docker run --rm --network labnet curlimages/curl:latest \
  curl -X POST http://f5mcp:8081/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"clientInfo":{"name":"test","version":"1.0.0"}}}'

测试mcpo

1.健康检查

# Check if mcpo is running
curl http://localhost:8000/health

# If API key authentication is enabled, include it:
curl -H "Authorization: Bearer your-mcpo-api-key-here" http://localhost:8000/health

2.列出已配置的服务器

curl -X GET http://localhost:8000/servers

3.通过mcpo测试MCP服务器

# Initialize connection through mcpo
curl -X POST http://localhost:8000/f5mcp/initialize \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "protocolVersion": "2024-11-05",
    "capabilities": {
      "tools": {}
    },
    "clientInfo": {
      "name": "test-client",
      "version": "1.0.0"
    }
  }'

# List tools through mcpo
curl -X POST http://localhost:8000/f5mcp/tools/list \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{}'

# Call obj_list through mcpo
curl -X POST http://localhost:8000/f5mcp/tools/call \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "name": "obj_list",
    "arguments": {
      "obj_type": "pool"
    }
  }'

备注:如果mcpo配置有API密钥身份验证,则添加 -H "Authorization: Bearer your-mcpo-api-key-here" 对于上述所有curl命令。

可用工具

obj_list

检索F5 BIG-IP LTM对象。

参数:

  • obj_type (必填):F5对象的类型(例如,“池”、“节点”、“虚拟”、“规则”)
  • obj_name (可选):用于检索详细信息的特定对象名称

示例:

// List all pools
{
  "obj_type": "pool"
}

// Get specific pool details
{
  "obj_type": "pool",
  "obj_name": "web-pool"
}

// List all virtual servers
{
  "obj_type": "virtual"
}

配置

环境变量

F5 MCP服务器配置 (in f5mcp/.env):

  • F5_HOST:F5 BIG-IP管理IP地址
  • F5_USER:具有API访问权限的F5用户名
  • F5_PASS:F5用户密码

mcpo配置 (in .env):

  • MCPO_API_KEY:用于MCPO身份验证的API密钥(如果需要)

mcpo服务器配置

中的mcpo配置 mcpo-config.json 定义:

{
  "mcpServers": {
    "f5mcp": {
      "type": "streamable-http",
      "url": "http://f5mcp:8081/mcp",
      "headers": {
        "Content-Type": "application/json",
        "Accept": "application/json, text/event-stream"
      }
    }
  }
}

故障排除

常见问题

  1. F5设备连接被拒绝:

    • 验证F5_HOST是否可从容器访问
    • 在中检查F5凭据 .env 文件
    • 确保F5设备已启用REST API
  2. mcpo无法连接到MCP服务器:

    • 确认两个容器都在 labnet 网络
    • 检查f5 mcp容器是否正在运行: docker ps
    • 查看容器日志: docker logs f5mcp
  3. 网络问题:

    • 确保 labnet 网络存在: docker network ls
    • 如果缺少,请创建它: docker network create labnet
  4. 缺少API密钥:

    • 验证 .env 文件存在于具有MCPO_API_KEY的主目录中
    • 检查一下 f5mcp/.env 包含有效的F5凭据

调试命令

# Check container status
docker-compose ps

# View logs
docker-compose logs f5mcp
docker-compose logs mcpo

# Test network connectivity
docker exec mcpo ping f5mcp

# Interactive container access
docker exec -it f5mcp /bin/bash
docker exec -it mcpo /bin/bash

发展

添加新工具

要向MCP服务器添加新工具,请修改 f5mcp/main.py:

@mcp.tool
def your_new_tool(param1: str, param2: int = 10):
    """Description of your tool"""
    # Your implementation here
    return result

更新依赖关系

更新 f5mcp/requirements.txt 重建:

docker-compose build f5mcp
docker-compose up -d f5mcp

与AI客户端集成

此MCP服务器可以与支持模型上下文协议的AI助手集成。这些工具将可供人工智能查询F5 BIG-IP配置和状态。

AI助手使用示例:

  • “列出F5设备上的所有池”
  • “显示web池的配置”
  • “配置了哪些虚拟服务器?”

安全考虑

  • 安全地存储F5凭据(考虑在生产中使用Docker secrets)
  • 限制对容器的网络访问
  • 使用HTTPS进行生产部署
  • 如果需要,为mcpo实施适当的身份验证
  • 考虑F5用户权限(建议用于监视用例的只读权限)

许可证

Apache许可证2.0