Skip to main content
Glama

MCP 服务器

中文詳細

项目概述

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

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

Related MCP server: OpenAI MCP Server

特征

  • 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 模型,请修改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 文件。

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/freedanfan/mcp_server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server