模型上下文协议服务器

一个基于Python的模型上下文协议(MCP)服务器实现,支持多种接口和工具,适用于Azure Web App部署和实时通信场景。

  • by AfryDario
  • 本地部署
  • 更新于
在 GitHub 查看 AfryDario/mcp-server

使用说明

MCP服务器-占位符实现

Python中的模型上下文协议(MCP)服务器实现,已准备好通过GitHub Actions部署到Azure Web App。

特性

  • MCP协议支持:实现模型上下文协议规范
  • 占位符工具:包括您可以用自己的实现替换的示例工具
  • Azure Web应用程序就绪:已配置为部署到Azure Web应用程序
  • GitHub操作CI/CD:自动化测试和部署
  • 多个接口:
    • STDIO促进地方发展
    • 用于web访问的HTTP REST API
    • 用于实时通信的WebSocket
  • Docker支持:容器化部署选项
  • 健康检查:Azure内置运行状况监控

项目结构

mcp-server/
├── main.py                 # Core MCP server implementation
├── app.py                  # FastAPI wrapper for web deployment
├── requirements.txt        # Python dependencies
├── startup.sh             # Azure startup script
├── web.config             # Azure Web App configuration
├── Dockerfile             # Container configuration
├── test_mcp_server.py     # Unit tests
├── .github/workflows/     # GitHub Actions CI/CD
└── README.md              # This file

快速开始

地方发展

  1. 克隆存储库

    git clone <your-repo-url>
    cd mcp-server
    
  2. 安装依赖项

    pip install -r requirements.txt
    
  3. 在本地运行服务器

    # STDIO mode (for MCP clients)
    python main.py
    
    # Web mode (for HTTP access)
    python app.py
    
  4. 测试服务器

    python -m pytest test_mcp_server.py -v
    

Azure部署

  1. 创建Azure Web应用程序

    • 转到Azure门户
    • 使用Python运行时创建新的Web应用程序
    • 记下应用程序名称并获取发布配置文件
  2. 配置GitHub机密

    • AZURE_WEBAPP_NAME:您的Azure Web应用程序名称
    • AZURE_WEBAPP_PUBLISH_PROFILE:从Azure门户下载
  3. 部署

    • 推送到主分支
    • GitHub Actions将自动构建和部署

可用工具(占位符)

服务器包括三个占位符工具,您可以用自己的实现替换它们:

1.回声工具

  • 名字: echo
  • 描述:回显输入消息
  • 参数: message (字符串)

2.获取时间工具

  • 名字: get_time
  • 描述:获取当前服务器时间
  • 参数:无

3.占位符工具

  • 名字: placeholder_tool
  • 描述:自定义实现的占位符
  • 参数: input (字符串)

API终点

当部署为web应用程序时,服务器提供以下端点:

  • GET / -服务器信息
  • GET /health -健康检查
  • GET /tools -列出可用工具
  • POST /mcp -MCP协议请求
  • POST /tools/call -直接执行工具
  • WebSocket /ws -实时MCP通信

定制

添加您自己的工具

  1. 更新 _setup_default_tools() 在……里面 main.py:

    def _setup_default_tools(self):
        self.tools = {
            "your_tool": {
                "name": "your_tool",
                "description": "Description of your tool",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "param1": {
                            "type": "string",
                            "description": "Parameter description"
                        }
                    },
                    "required": ["param1"]
                }
            }
        }
    
  2. 在中实现工具逻辑 _execute_tool() 方法:

    async def _execute_tool(self, tool_name: str, arguments: Dict[str, Any]) -> str:
        if tool_name == "your_tool":
            # Your custom implementation here
            param1 = arguments.get('param1')
            result = your_custom_logic(param1)
            return f"Result: {result}"
    

添加资源

资源是工具可以访问的静态或动态内容:

def __init__(self):
    self.resources = {
        "your_resource": {
            "uri": "resource://your_resource",
            "name": "Your Resource",
            "description": "Description of your resource",
            "mimeType": "text/plain"
        }
    }

添加提示

提示是AI交互的可重用模板:

def __init__(self):
    self.prompts = {
        "your_prompt": {
            "name": "your_prompt",
            "description": "Description of your prompt",
            "arguments": [
                {
                    "name": "context",
                    "description": "Context for the prompt",
                    "required": True
                }
            ]
        }
    }

测试

运行测试套件:

# Run all tests
python -m pytest test_mcp_server.py -v

# Run specific test
python -m pytest test_mcp_server.py::TestMCPServer::test_echo_tool -v

# Run with coverage
pip install pytest-cov
python -m pytest test_mcp_server.py --cov=main --cov-report=html

环境变量

配置这些部署环境变量:

  • PORT:服务器端口(默认值:8000)
  • PYTHONUNBUFFERED:Azure设置为1
  • PYTHONDONTWRITEBYTECODE:Azure设置为1

Docker部署

使用Docker构建和运行:

# Build image
docker build -t mcp-server .

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

# Run with environment variables
docker run -p 8000:8000 -e PORT=8000 mcp-server

监控和日志记录

服务器包括全面的日志记录:

  • 应用程序日志:所有请求和答复
  • 错误日志:详细的错误信息
  • 健康检查:可在 /health 端点
  • Azure日志:检查Azure门户以获取部署日志

安全考虑

  • CORS:已配置为web部署
  • 输入验证:验证所有工具参数
  • 错误处理:优雅的错误响应
  • 速率限制:考虑实施生产
  • 认证:为敏感操作添加身份验证

性能优化

对于生产部署:

  1. 使用Gunicorn:在启动脚本中预先配置
  2. 配置工作人员:根据您的需求进行调整
  3. 启用缓存:为昂贵的操作实施缓存
  4. 监控资源:使用Azure应用程序洞察
  5. 水平扩展:使用Azure应用服务扩展

故障排除

常见问题

  1. 部署失败:

    • 检查Azure发布配置文件
    • 验证GitHub机密
    • 查看部署日志
  2. 工具没有响应:

    • 检查工具执行情况
    • 验证参数架构
    • 查看服务器日志
  3. 性能问题:

    • 检查工作程序配置
    • 监控内存使用情况
    • 检查数据库连接

调试模式

启用开发调试模式:

# In app.py
app = FastAPI(debug=True)

# In main.py
logging.basicConfig(level=logging.DEBUG)

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 添加您的实现
  4. 编写测试
  5. 提交拉取请求

许可证

这个项目是开源的,可以在MIT许可证下使用。

支持

对于问题和疑问:

  • 检查故障排除部分
  • 查看Azure Web应用程序文档
  • 在GitHub上打开一个问题

后续步骤

  1. 替换占位符工具 与您的实际实现
  2. 添加身份验证 如有需要
  3. 实现缓存 为了获得更好的性能
  4. 添加监控 并发出警报
  5. 规模 基于使用模式

备注:这是一个占位符实现。用实际的业务逻辑替换示例工具,并为生产使用添加适当的错误处理、验证和安全措施。