随着智能应用的快速发展,高效、灵活的通信协议成为连接不同系统与设备的关键。MCP(Model Context Protocol)作为一种专为智能应用设计的通信协议,以其轻量级和高适应性受到广泛关注。本文ZHANID工具网将详细介绍如何基于Python搭建MCP服务器,从环境准备到代码实现,再到服务器测试与优化,为开发者提供一份完整、易懂的实践指南。无论您是初学者还是有一定经验的开发者,本文都将帮助您快速掌握搭建MCP服务器的核心步骤,开启智能应用开发的新篇章。
一、MCP协议概述与核心价值
MCP(Model Context Protocol)是一种专为智能应用设计的通信协议,通过标准化工具(Tools)、资源(Resources)和提示(Prompts)的交互方式,实现模型与外部能力的无缝集成。其核心价值体现在:
标准化工具调用:通过装饰器自动生成工具元数据,降低AI开发复杂度
动态资源访问:支持静态配置与动态数据源的统一管理
智能提示工程:提供结构化模板指导模型生成高质量输出
二、环境准备与依赖安装
(一)基础环境配置
Python版本要求:建议使用Python 3.10+(推荐3.12)
虚拟环境创建:
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模式部署与调用
修改服务器启动方式:
if __name__ == "__main__": mcp.run( transport="streamable-http", port=8000, path="/mcp" )
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())
五、生产环境部署优化
(一)容器化部署
# 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"]
(二)性能优化策略
连接池管理:
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缓存机制:
from functools import lru_cache @lru_cache(maxsize=100) @mcp.tool() def cached_computation(x: int) -> int: return x * x
六、安全与监控
(一)安全增强措施
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调用成功"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}"})
]
)八、总结与最佳实践
开发规范:
为每个工具添加详细的文档字符串
使用类型注解确保输入输出验证
敏感操作通过资源(Resources)而非工具实现
部署建议:
生产环境使用HTTP/2传输
配置适当的超时与重试机制
实现健康检查端点
生态集成:
通过Nacos管理服务发现
使用Prometheus监控指标
集成Sentry进行错误追踪
通过本指南,开发者可快速构建从基础到企业级的MCP服务,实现AI能力与业务系统的深度融合。建议持续关注MCP协议更新,结合实际场景探索创新应用模式。
本文由@战地网 原创发布。
该文章观点仅代表作者本人,不代表本站立场。本站不承担相关法律责任。
如若转载,请注明出处:https://www.zhanid.com/biancheng/4709.html




















