[ PROMPT_NODE_24956 ]
python_mcp_server
[ SKILL_DOCUMENTATION ]
# Python MCP 服务器实现指南
## 概述
本文档提供了使用 MCP Python SDK 实现 MCP 服务器的特定最佳实践和示例。内容涵盖服务器设置、工具注册模式、使用 Pydantic 进行输入验证、错误处理以及完整的可运行示例。
---
## 快速参考
### 关键导入
python
from mcp.server.fastmcp import FastMCP
from pydantic import BaseModel, Field, field_validator, ConfigDict
from typing import Optional, List, Dict, Any
from enum import Enum
import httpx
### 服务器初始化
python
mcp = FastMCP("service_mcp")
### 工具注册模式
python
@mcp.tool(name="tool_name", annotations={...})
async def tool_function(params: InputModel) -> str:
# 实现
pass
---
## MCP Python SDK 和 FastMCP
官方 MCP Python SDK 提供了 FastMCP,这是一个用于构建 MCP 服务器的高级框架。它提供:
- 根据函数签名和文档字符串自动生成描述和 inputSchema
- 用于输入验证的 Pydantic 模型集成
- 基于装饰器的工具注册(使用 `@mcp.tool`)
**获取完整的 SDK 文档,请使用 WebFetch 加载:**
`https://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.md`
## 服务器命名规范
Python MCP 服务器必须遵循此命名模式:
- **格式**:`{service}_mcp`(小写,使用下划线)
- **示例**:`github_mcp`, `jira_mcp`, `stripe_mcp`
名称应:
- 通用(不绑定到特定功能)
- 描述所集成的服务/API
- 易于从任务描述中推断
- 不包含版本号或日期
## 工具实现
### 工具命名
工具名称使用 snake_case(例如 "search_users", "create_project", "get_channel_info"),并使用清晰、以动作为导向的名称。
**避免命名冲突**:包含服务上下文以防止重叠:
- 使用 "slack_send_message" 而不是仅使用 "send_message"
- 使用 "github_create_issue" 而不是仅使用 "create_issue"
- 使用 "asana_list_tasks" 而不是仅使用 "list_tasks"
### 使用 FastMCP 的工具结构
工具使用 `@mcp.tool` 装饰器定义,并结合 Pydantic 模型进行输入验证:
python
from pydantic import BaseModel, Field, ConfigDict
from mcp.server.fastmcp import FastMCP
# 初始化 MCP 服务器
mcp = FastMCP("example_mcp")
# 定义用于输入验证的 Pydantic 模型
class ServiceToolInput(BaseModel):
'''服务工具操作的输入模型。'''
mo