Back to MCP directory
publicPublicdnsLocal runtime

python-mcp-server-client

本项目是一个基于Python的MCP(模型上下文协议)服务器和客户端实现,旨在为AI模型提供标准化接口,统一不同大模型厂商的工具调用格式,并集成多种AI框架文档搜索功能。

article

README

🚀 从零开始搭建 MCP Server 和 MCP Client 的完整指南(中文版)

本指南将详细介绍如何使用 Python 从零开始搭建 Model Context Protocol (MCP) 服务端(Server)和客户端(Client),助你轻松上手 MCP 的开发。

🚀 快速开始

安装依赖

在开始之前,确保你已经安装了以下 Python 包:

pip install python-multipart requests asyncio websockets uvicorn serper-dev-api

这些包的作用如下:

  • python-multipart:用于处理 multipart 请求。
  • requests:可发送 HTTP 请求。
  • asynciowebsockets:实现异步通信和 WebSocket 支持。
  • uvicorn:用于运行 FastAPI 应用。
  • serper-dev-api:借助 Serper.dev 的 API 解析网页内容。

初始化项目

创建一个新目录,并在其中添加以下文件:

server.py

这是 MCP Server 的核心代码,负责处理 WebSocket 连接和工具调用。

import asyncio
import websockets
import json
from typing import List, Dict
from fastapi import FastAPI, HTTPException
from fastapi.responses import JSONResponse
from serper-dev-api import Serper

app = FastAPI()
serper = Serper(your_api_key)  # 填入你的 Serper API Key

# 定义工具接口
class Tool:
    def __init__(self, name: str, description: str, input_schema: Dict):
        self.name = name
        self.description = description
        self.input_schema = input_schema

async def serve():
    async with websockets.connect("ws://localhost:8000") as websocket:
        await websocket.accept()
        print("连接建立!")
        
        while True:
            try:
                # 接收工具调用请求
                tool_call = await websocket.recv()
                print(f"收到工具调用:{tool_call}")
                
                # 解析工具参数
                params = json.loads(tool_call)
                tool_name = params["name"]
                arguments = params["arguments"]
                
                if tool_name == "search":
                    result = serper.search(arguments, num_results=3)
                    await websocket.send(json.dumps(result))
                elif tool_name == "parse_website":
                    # 假设你有一个解析网页内容的函数
                    content = parse_website(arguments)
                    await websocket.send(content)
                
            except Exception as e:
                print(f"错误:{str(e)}")

client.py

这是 MCP Client 的核心代码,负责与 Server 通信并处理用户查询。

import asyncio
from typing import Dict, List
from fastapi import FastAPI, HTTPException
from fastapi.responses import JSONResponse
from serper-dev-api import Serper

app = FastAPI()
serper = Serper(your_api_key)  # 填入你的 Serper API Key

async def main():
    async with websockets.connect("ws://localhost:8001") as websocket:
        await websocket.accept()
        print("连接到 MCP Server 成功!")
        
        while True:
            try:
                # 发送工具调用请求
                tool_name = "search"
                arguments = {"query": "Python 教程"}
                tool_call = json.dumps({"name": tool_name, "arguments": arguments})
                
                await websocket.send(tool_call)
                response = await websocket.recv()
                print(f"收到响应:{response}")
            except Exception as e:
                print(f"错误:{str(e)}")

启动命令

在终端中运行以下命令启动 Server 和 Client:

启动 Server

python server.py serve

启动 Client

python client.py main

📚 详细文档

参考资料

以上就是如何使用 Python 搭建 MCP Server 和 Client 的完整指南。如果有任何问题,请随时查阅相关文档或在社区中寻求帮助!

help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client