MCP协议服务器

一个独立的MCP(Model Context Protocol)服务器,提供HTTP REST API和WebSocket端点,用于MCP操作,支持与Jira、ServiceNow等系统的集成。

  • by Avinash-Venkatswamy
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 avinash-venkatswamy/mcp-server-final

使用说明

MCP服务器

一个独立的MCP(模型上下文协议)服务器,为MCP操作提供HTTP REST API和WebSocket端点。任何应用程序都可以使用此服务器与MCP服务器进行交互,以实现Jira、ServiceNow和其他集成。

特性

  • REST API:用于MCP服务器管理和操作的HTTP端点
  • WebSocket API:MCP操作的实时通信
  • 服务器管理:启动、停止、重新启动和监视MCP服务器
  • 工具执行:执行MCP工具并处理自然语言请求
  • 配置管理:动态配置更新
  • 健康监测:服务器健康检查和状态监视

建筑

mcp-server/
├── 01_server/           # Core server components
│   ├── 01_core/         # Core MCP functionality
│   ├── 02_api/          # REST and WebSocket APIs
│   ├── 03_config/       # Configuration management
│   └── 04_utils/        # Utility functions
├── 02_mcp_servers/      # MCP server configurations
│   ├── 01_jira_mcp/     # Jira MCP server
│   ├── 02_servicenow_mcp/ # ServiceNow MCP server
│   └── 03_common/       # Common MCP components
├── 03_communication/    # Communication libraries
├── 04_documentation/    # Documentation
├── 05_tests/           # Test suites
└── 06_deployment/      # Deployment scripts

快速开始

先决条件

  • Python 3.8或更高版本
  • 虚拟环境(推荐)

安装

  1. 克隆存储库

    git clone <repository-url>
    cd mcp-server
    
  2. 创建虚拟环境

    python -m venv venv
    source venv/bin/activate  # On Windows: venv\Scripts\activate
    
  3. 安装依赖项

    pip install -r requirements.txt
    
  4. 配置环境

    cp env.example .env
    # Edit .env with your configuration
    
  5. 启动服务器

    python main.py
    

服务器将于启动 http://localhost:8001

API终点

REST API

服务器管理

  • GET /api/v1/status -获取整体系统状态
  • POST /api/v1/servers/start -启动MCP服务器
  • POST /api/v1/servers/stop -停止MCP服务器
  • POST /api/v1/servers/restart -重新启动MCP服务器

MCP操作

  • GET /api/v1/mcp/tools -从MCP服务器获取可用工具
  • POST /api/v1/mcp/process_request -处理自然语言请求
  • POST /api/v1/mcp/call_tool -调用特定的MCP工具

配置

  • GET /api/v1/config -获取当前配置
  • PUT /api/v1/config -更新配置
  • POST /api/v1/config/reload -重新加载配置

WebSocket API

连接到 ws://localhost:8001/ws 用于实时通信。

消息类型

  • ping -健康检查
  • subscribe -订阅活动
  • mcp_request -MCP操作请求
  • server_action -服务器管理操作

事件

  • mcp_server_status -服务器状态更新
  • mcp_tool_execution -工具执行结果
  • mcp_error -错误通知
  • server_health_update -健康更新

使用示例

REST API示例

启动Jira MCP服务器

curl -X POST "http://localhost:8001/api/v1/servers/start" \
  -H "Content-Type: application/json" \
  -d '{"server_name": "jira-mcp", "action": "start"}'

处理自然语言请求

curl -X POST "http://localhost:8001/api/v1/mcp/process_request" \
  -H "Content-Type: application/json" \
  -d '{
    "request": "Get all active users from Jira",
    "system": "jira",
    "provider": "openai",
    "api_key": "your_api_key"
  }'

获取可用工具

curl "http://localhost:8001/api/v1/mcp/tools?server_name=jira-mcp"

WebSocket示例

JavaScript客户端

const ws = new WebSocket('ws://localhost:8001/ws');

ws.onopen = function() {
    // Subscribe to events
    ws.send(JSON.stringify({
        type: 'subscribe',
        events: ['mcp_server_status', 'mcp_tool_execution']
    }));
    
    // Send MCP request
    ws.send(JSON.stringify({
        type: 'mcp_request',
        request_id: '123',
        request: 'Get active users from Jira',
        system: 'jira'
    }));
};

ws.onmessage = function(event) {
    const data = JSON.parse(event.data);
    console.log('Received:', data);
};

Python客户端

import websockets
import json
import asyncio

async def mcp_client():
    uri = "ws://localhost:8001/ws"
    async with websockets.connect(uri) as websocket:
        # Subscribe to events
        await websocket.send(json.dumps({
            "type": "subscribe",
            "events": ["mcp_server_status", "mcp_tool_execution"]
        }))
        
        # Send MCP request
        await websocket.send(json.dumps({
            "type": "mcp_request",
            "request_id": "123",
            "request": "Get active users from Jira",
            "system": "jira"
        }))
        
        # Listen for responses
        async for message in websocket:
            data = json.loads(message)
            print(f"Received: {data}")

asyncio.run(mcp_client())

配置

环境变量

变量 描述 默认值
MCP_SERVER_PORT 服务器端口 8001
MCP_SERVER_HOST 服务器主机 0.0.0.0
MCP_LOG_LEVEL 日志记录级别 信息
MCP_MAX_CONNECTIONS 最大WebSocket连接数 100
MCP_AUTH_TOKEN 身份验证令牌 -
OPENAI_API_KEY OpenAI API密钥 -
ANTHROPIC_API_KEY 无烟煤API密钥 -

MCP服务器配置

MCP服务器配置在 02_mcp_servers/ 目录:

  • 01_jira_mcp/01_config.json -Jira MCP服务器配置
  • 02_servicenow_mcp/01_config.json -ServiceNow MCP服务器配置

发展

运行测试

# Run all tests
python -m pytest 05_tests/

# Run specific test categories
python -m pytest 05_tests/01_unit_tests/
python -m pytest 05_tests/02_integration_tests/
python -m pytest 05_tests/03_api_tests/

编码结构

  • 核心组件:MCP服务器管理、启动器、客户端集成
  • API层:REST和WebSocket端点
  • 配置:环境和服务器配置管理
  • 公用事业:健康检查、流程管理、安全

部署

Docker部署

# Build image
docker build -t mcp-server .

# Run container
docker run -p 8001:8001 mcp-server

生产部署

  1. 设置环境变量
  2. 配置反向代理(nginx)
  3. 设置SSL证书
  4. 配置监控和日志记录
  5. 建立流程管理(系统、主管)

故障排除

常见问题

  1. 端口已在使用中

    • 检查是否有其他服务正在使用端口8001
    • 更改配置中的端口
  2. MCP服务器未启动

    • 检查MCP服务器配置
    • 验证是否安装了依赖项
    • 检查日志是否有错误
  3. WebSocket连接问题

    • 验证WebSocket端点是否可访问
    • 检查防火墙设置
    • 确保消息格式正确

日志

日志被写入 mcp_server.log 默认情况下。集 LOG_LEVEL 在环境中进行更详细的日志记录。

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 添加测试
  5. 提交拉取请求

许可证

[在此处添加您的许可证信息]

支持

有关支持和问题:

  • 在存储库中创建问题
  • 检查文档
  • 查看故障排除部分