9.3 MCP服务端开发
9.3.1 开发MCP Server的基本步骤
9.3.2 完整的Python MCP Server实现
第一部分:数据模型与工具定义
# mcp_server.py
# 一个完整的MCP Server示例,提供文件系统工具和资源访问
import json
import os
import subprocess
from typing import Dict, Any, List, Optional
from dataclasses import dataclass, asdict
from enum import Enum
import asyncio
import sys
from pathlib import Path
@dataclass
class MCPTool:
"""MCP工具定义"""
name: str
description: str
inputSchema: Dict[str, Any]
@dataclass
class MCPResource:
"""MCP资源定义"""
uri: str
name: str
description: str
mimeType: str # MIME 类型
@dataclass
class MCPPrompt:
"""MCP提示词定义"""
name: str
description: str
arguments: List[Dict[str, Any]]
class MCPServerBase:
"""MCP Server基类"""
def __init__(self):
self.tools: Dict[str, MCPTool] = {}
self.resources: Dict[str, MCPResource] = {}
self.prompts: Dict[str, MCPPrompt] = {}
self.tool_handlers: Dict[str, callable] = {}
self.resource_readers: Dict[str, callable] = {}
self.prompt_generators: Dict[str, callable] = {}
def register_tool(
self, name: str, description: str,
input_schema: Dict[str, Any], handler: callable
) -> None:
"""注册工具"""
self.tools[name] = MCPTool(name, description, input_schema)
self.tool_handlers[name] = handler
def register_resource(
self, uri: str, name: str, description: str,
mime_type: str, reader: callable
) -> None:
"""注册资源"""
self.resources[uri] = MCPResource(uri, name, description, mime_type)
self.resource_readers[uri] = reader
def register_prompt(
self, name: str, description: str,
arguments: List[Dict[str, Any]], generator: callable
) -> None:
"""注册提示词"""
self.prompts[name] = MCPPrompt(name, description, arguments)
self.prompt_generators[name] = generator第二部分:请求处理与JSON-RPC协议
第三部分:资源与提示词处理
第四部分:文件系统实现与传输
第五部分:传输层实现
第六部分:启动函数
Server开发的关键概念
1. 工具定义的JSON Schema
2. 资源URI规范
3. 提示词参数化
错误处理
本小节小结
最后更新于
