AI模型交互服务器

基于FastAPI和MCP协议构建的AI模型交互服务器,提供标准化的模型上下文交互接口,简化AI模型部署与管理。

  • by freedanfan
  • Python
  • 本地部署
  • 10 星标
  • 更新于
在 GitHub 查看 freedanfan/mcp_server

使用说明

MCP服务器

中文文档

项目概述

该项目基于FastAPI和MCP(模型上下文协议)构建,实现了AI模型和开发环境之间的标准化上下文交互。它通过简化模型部署、提供高效的API端点、确保模型输入和输出的一致性,增强了人工智能应用程序的可扩展性和可维护性,使开发人员更容易集成和管理人工智能任务。

MCP(模型上下文协议)是用于AI模型和开发环境之间上下文交互的统一协议。该项目提供了一个基于Python的MCP服务器实现,支持基本的MCP协议功能,包括初始化、采样和会话管理。

特性

  • JSON-RPC 2.0:基于标准JSON-RPC 2.0协议的请求-响应通信
  • SSE 连接:支持用于实时通知的服务器发送事件连接
  • 模块化设计:模块化架构,易于扩展和定制
  • 异步处理:使用FastAPI和异步IO的高性能服务
  • 完整客户端:包括完整的测试客户端实现

项目结构

mcp_server/
├── mcp_server.py         # MCP server main program
├── mcp_client.py         # MCP client test program
├── routers/
│   ├── __init__.py       # Router package initialization
│   └── base_router.py    # Base router implementation
├── requirements.txt      # Project dependencies
└── README.md             # Project documentation

安装

  1. 克隆存储库:
git clone https://github.com/freedanfan/mcp_server.git
cd mcp_server
  1. 安装依赖项:
pip install -r requirements.txt

用法

启动服务器

python mcp_server.py

默认情况下,服务器将启动 127.0.0.1:12000。您可以使用环境变量自定义主机和端口:

export MCP_SERVER_HOST=0.0.0.0
export MCP_SERVER_PORT=8000
python mcp_server.py

运行客户端

在另一个终端中运行客户端:

python mcp_client.py

如果服务器未在默认地址运行,则可以设置环境变量:

export MCP_SERVER_URL="http://your-server-address:port"
python mcp_client.py

API终点

服务器提供以下API终结点:

  • 根路径 (/):提供服务器信息
  • API端点 (/api):处理JSON-RPC请求
  • SSE 终端 (/sse):处理SSE连接

MCP协议实现

初始化流程

  1. 客户端通过SSE连接到服务器
  2. 服务器返回API端点URI
  3. 客户端发送带有协议版本和功能的初始化请求
  4. 服务器响应初始化请求,返回服务器功能

取样请求

客户端可以发送带有提示的采样请求:

{
  "jsonrpc": "2.0",
  "id": "request-id",
  "method": "sample",
  "params": {
    "prompt": "Hello, please introduce yourself."
  }
}

服务器将返回采样结果:

{
  "jsonrpc": "2.0",
  "id": "request-id",
  "result": {
    "content": "This is a response to the prompt...",
    "usage": {
      "prompt_tokens": 10,
      "completion_tokens": 50,
      "total_tokens": 60
    }
  }
}

结束会话

客户端可以发送关机请求:

{
  "jsonrpc": "2.0",
  "id": "request-id",
  "method": "shutdown",
  "params": {}
}

服务器将正常关闭:

{
  "jsonrpc": "2.0",
  "id": "request-id",
  "result": {
    "status": "shutting_down"
  }
}

开发扩展

添加新方法

要添加新的MCP方法,请向 MCPServer 上课并在 _register_methods 方法:

def handle_new_method(self, params: dict) -> dict:
    """Handle new method"""
    logger.info(f"Received new method request: {params}")
    # Processing logic
    return {"result": "success"}

def _register_methods(self):
    # Register existing methods
    self.router.register_method("initialize", self.handle_initialize)
    self.router.register_method("sample", self.handle_sample)
    self.router.register_method("shutdown", self.handle_shutdown)
    # Register new method
    self.router.register_method("new_method", self.handle_new_method)

集成AI模型

要集成实际的AI模型,请修改 handle_sample 方法:

async def handle_sample(self, params: dict) -> dict:
    """Handle sampling request"""
    logger.info(f"Received sampling request: {params}")
    
    # Get prompt
    prompt = params.get("prompt", "")
    
    # Call AI model API
    # For example: using OpenAI API
    response = await openai.ChatCompletion.acreate(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}]
    )
    
    content = response.choices[0].message.content
    usage = response.usage
    
    return {
        "content": content,
        "usage": {
            "prompt_tokens": usage.prompt_tokens,
            "completion_tokens": usage.completion_tokens,
            "total_tokens": usage.total_tokens
        }
    }

故障排除

常见问题

  1. 连接错误:确保服务器正在运行,客户端使用正确的服务器URL
  2. 405方法不允许:确保客户端正在向正确的API终结点发送请求
  3. SSE连接失败:检查网络连接和防火墙设置

日志记录

服务器和客户端都提供详细的日志记录。查看日志以获取更多信息:

# Increase log level
export PYTHONPATH=.
python -m logging -v DEBUG -m mcp_server

参考文献

许可证

该项目根据MIT许可证获得许可。有关详细信息,请参阅LICENSE文件。