使用说明
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
安装
- 克隆存储库:
git clone https://github.com/freedanfan/mcp_server.git
cd mcp_server
- 安装依赖项:
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协议实现
初始化流程
- 客户端通过SSE连接到服务器
- 服务器返回API端点URI
- 客户端发送带有协议版本和功能的初始化请求
- 服务器响应初始化请求,返回服务器功能
取样请求
客户端可以发送带有提示的采样请求:
{
"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
}
}
故障排除
常见问题
- 连接错误:确保服务器正在运行,客户端使用正确的服务器URL
- 405方法不允许:确保客户端正在向正确的API终结点发送请求
- SSE连接失败:检查网络连接和防火墙设置
日志记录
服务器和客户端都提供详细的日志记录。查看日志以获取更多信息:
# Increase log level
export PYTHONPATH=.
python -m logging -v DEBUG -m mcp_server
参考文献
许可证
该项目根据MIT许可证获得许可。有关详细信息,请参阅LICENSE文件。
