基于Python搭建MCP服务器的详细步骤指南

原创 2025-06-22 10:09:07编程技术
564

随着智能应用的快速发展,高效、灵活的通信协议成为连接不同系统与设备的关键。MCP(Model Context Protocol)作为一种专为智能应用设计的通信协议,以其轻量级和高适应性受到广泛关注。本文ZHANID工具网将详细介绍如何基于Python搭建MCP服务器,从环境准备到代码实现,再到服务器测试与优化,为开发者提供一份完整、易懂的实践指南。无论您是初学者还是有一定经验的开发者,本文都将帮助您快速掌握搭建MCP服务器的核心步骤,开启智能应用开发的新篇章。

一、MCP协议概述与核心价值

MCP(Model Context Protocol)是一种专为智能应用设计的通信协议,通过标准化工具(Tools)、资源(Resources)和提示(Prompts)的交互方式,实现模型与外部能力的无缝集成。其核心价值体现在:

  • 标准化工具调用:通过装饰器自动生成工具元数据,降低AI开发复杂度

  • 动态资源访问:支持静态配置与动态数据源的统一管理

  • 智能提示工程:提供结构化模板指导模型生成高质量输出

二、环境准备与依赖安装

(一)基础环境配置

  1. Python版本要求:建议使用Python 3.10+(推荐3.12)

  2. 虚拟环境创建

    python -m venv mcp-env
    source mcp-env/bin/activate  # Linux/Mac
    mcp-env\Scripts\activate     # Windows

(二)核心依赖安装

pip install "mcp[cli]" httpx python-dotenv uvicorn fastapi
  • mcp[cli]:核心SDK及命令行工具

  • httpx:异步HTTP客户端,用于调用第三方API

  • python-dotenv:环境变量管理

  • uvicorn/fastapi:可选的Web服务框架

三、MCP服务器开发实战

(一)基础服务器实现

# server.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("My First MCP Server")

@mcp.tool()
def greet(name: str) -> str:
    """生成个性化问候语"""
    return f"👋 你好 {name}!(Hello {name}!)"

if __name__ == "__main__":
    mcp.run(transport="stdio")  # 本地调试推荐stdio模式

(二)高级功能扩展

1. 异步API集成示例

import os
import httpx
from mcp.server.fastmcp import FastMCP
from dotenv import load_dotenv

load_dotenv()  # 加载.env文件中的API密钥

mcp = FastMCP("Weather API Server")

@mcp.tool()
async def get_weather(city: str) -> str:
    """查询实时天气(支持中文城市名)"""
    url = "https://api.openweathermap.org/data/2.5/weather"
    params = {
        "q": city,
        "appid": os.getenv("OPENWEATHER_API_KEY"),
        "units": "metric"
    }
    async with httpx.AsyncClient() as client:
        resp = await client.get(url, params=params)
        data = resp.json()
        return f"{city}天气: {data['weather'][0]['description']}, 温度: {data['main']['temp']}°C"

if __name__ == "__main__":
    mcp.run(transport="stdio")

2. 资源与提示实现

# 资源示例:返回应用配置
@mcp.resource("config://app_settings")
def get_app_config() -> dict:
    return {
        "theme": "dark",
        "language": "zh-CN",
        "features": ["tools", "resources"]
    }

# 提示示例:代码审查模板
@mcp.prompt()
def code_review_prompt(code: str) -> str:
    return f"""请审查以下代码并指出问题:

{code}"""

四、客户端调用与测试

(一)本地stdio模式调用

# client.py
import asyncio
from mcp.client.stdio import stdio_client
from mcp import ClientSession

async def main():
    server_params = {
        "command": "python",
        "args": ["server.py"]
    }
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            
            # 调用工具
            result = await session.call_tool("greet", {"name": "开发者"})
            print(result[0].text)  # 输出: 👋 你好 开发者!(Hello 开发者!)
            
            # 调用资源
            config = await session.get_resource("config://app_settings")
            print(config)

asyncio.run(main())

(二)HTTP模式部署与调用

  1. 修改服务器启动方式

if __name__ == "__main__":
    mcp.run(
        transport="streamable-http",
        port=8000,
        path="/mcp"
    )
  1. HTTP客户端调用

import asyncio
from mcp.client import Client

async def main():
    async with Client("http://localhost:8000/mcp/") as client:
        tools = await client.list_tools()
        print(f"可用工具: {[t.name for t in tools]}")
        
        result = await client.call_tool("get_weather", {"city": "北京"})
        print(f"天气: {result[0].text}")

asyncio.run(main())

python.webp

五、生产环境部署优化

(一)容器化部署

# Dockerfile
FROM python:3.12-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .
CMD ["python", "server.py"]

(二)性能优化策略

  1. 连接池管理

    import httpx
    from mcp.server.fastmcp import FastMCP
    
    mcp = FastMCP("Optimized Server")
    client = httpx.AsyncClient(limits=httpx.Limits(max_connections=100))
    
    @mcp.tool()
    async def optimized_api_call(url: str) -> str:
        async with client.get(url) as resp:
            return resp.text
  2. 缓存机制

    from functools import lru_cache
    
    @lru_cache(maxsize=100)
    @mcp.tool()
    def cached_computation(x: int) -> int:
        return x * x

六、安全与监控

(一)安全增强措施

  1. API密钥管理

    from mcp.server.fastmcp import FastMCP
    from mcp.server.security import SecretManager
    
    mcp = FastMCP("Secure Server")
    secret_manager = SecretManager()
    secret_manager.set_secret("API_KEY", "your-secure-key")
    
    @mcp.tool()
    def secure_api_call() -> str:
        api_key = secret_manager.get_secret("API_KEY")
        # 使用api_key调用外部服务
        return "API调用成功"
  2. HTTPS支持

    mcp.run(
        transport="streamable-http",
        port=8443,
        path="/mcp",
        ssl_keyfile="server.key",
        ssl_certfile="server.crt"
    )

(二)监控与日志

import logging
from mcp.server.fastmcp import FastMCP

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

mcp = FastMCP("Monitored Server")

@mcp.tool()
def monitored_operation() -> str:
    logger.info("开始执行监控操作")
    try:
        return "操作成功"
    except Exception as e:
        logger.error(f"操作失败: {e}")
        raise

七、进阶实践案例

(一)多语言支持服务器

from mcp.server.fastmcp import FastMCP
from mcp.types import TextContent

mcp = FastMCP("Multilingual Server")

@mcp.tool()
def translate(text: str, target_lang: str) -> TextContent:
    """多语言翻译工具"""
    # 实际实现可调用翻译API
    translations = {
        "en": f"English: {text}",
        "zh": f"中文: {text}",
        "ja": f"日本語: {text}"
    }
    return TextContent(type="text", text=translations.get(target_lang, f"不支持的语言: {target_lang}"))

(二)工作流编排示例

from mcp.server.fastmcp import FastMCP
from mcp.types import Workflow, WorkflowStep

mcp = FastMCP("Workflow Server")

@mcp.tool()
def task1(input: str) -> str:
    return f"任务1处理: {input}"

@mcp.tool()
def task2(input: str) -> str:
    return f"任务2处理: {input}"

@mcp.workflow()
def complex_workflow(initial_input: str) -> Workflow:
    return Workflow(
        steps=[
            WorkflowStep(tool="task1", input={"input": "${initial_input}"}),
            WorkflowStep(tool="task2", input={"input": "${task1.output}"})
        ]
    )

八、总结与最佳实践

  1. 开发规范

    • 为每个工具添加详细的文档字符串

    • 使用类型注解确保输入输出验证

    • 敏感操作通过资源(Resources)而非工具实现

  2. 部署建议

    • 生产环境使用HTTP/2传输

    • 配置适当的超时与重试机制

    • 实现健康检查端点

  3. 生态集成

    • 通过Nacos管理服务发现

    • 使用Prometheus监控指标

    • 集成Sentry进行错误追踪

通过本指南,开发者可快速构建从基础到企业级的MCP服务,实现AI能力与业务系统的深度融合。建议持续关注MCP协议更新,结合实际场景探索创新应用模式。

Python MCP服务器
THE END
战地网
频繁记录吧,生活的本意是开心

相关推荐

Python yield 用法大全:轻松掌握生成器与迭代器设计
在Python中,yield关键字是构建生成器的核心工具,它通过状态保存机制实现了高效的内存管理和惰性计算。与传统的迭代器实现相比,yield能将迭代器设计从复杂的类定义简化为直...
2025-09-15 编程技术
547

基于Python的旅游数据分析可视化系统【2026最新】
本研究成功开发了基于Python+Django+Vue+MySQL的旅游数据分析可视化系统,实现了从数据采集到可视化展示的全流程管理。系统采用前后端分离架构,前端通过Vue框架构建响应式界...
2025-09-13 编程技术
571

手把手教你用Python读取txt文件:从基础到实战的完整教程
Python作为数据处理的利器,文件读写是其基础核心功能。掌握txt文件读取不仅能处理日志、配置文件等常见场景,更是理解Python文件I/O的基石。本文ZHANID工具网将从基础语法到...
2025-09-12 编程技术
543

Python Flask 入门指南:从零开始搭建你的第一个 Web 应用
Flask作为 Python 中最轻量级且灵活的 Web 框架之一,特别适合初学者快速上手 Web 应用开发。本文将带你一步步了解如何在本地环境中安装 Flask、创建一个简单的 Web 应用,并...
2025-09-11 编程技术
532

Python 如何调用 MediaPipe?详细安装与使用指南
MediaPipe 是 Google 开发的跨平台机器学习框架,支持实时处理视觉、音频和文本数据。本文脚本之家将系统讲解 Python 环境下 MediaPipe 的安装、配置及核心功能调用方法,涵盖...
2025-09-10 编程技术
575

基于Python开发一个利率计算器的思路及示例代码
利率计算是金融领域的基础需求,涵盖贷款利息、存款收益、投资回报等场景。传统计算依赖手工公式或Excel表格,存在效率低、易出错等问题。Python凭借其简洁的语法和强大的数学...
2025-09-09 编程技术
515