IT评测·应用市场-qidao123.com技术社区
标题:
MCP协议-焦点架构
[打印本页]
作者:
万有斥力
时间:
4 天前
标题:
MCP协议-焦点架构
焦点架构
了解MCP怎样毗连客户端、服务端和LLM
模型上下文协议(MCP)基于一个机动、可扩展的架构,使LLM应用步伐和集成之间的通讯无缝衔接。本文档涵盖了焦点架构组件和概念。
概述
MCP遵循客户端-服务端架构,此中:
主机
是启动毗连的LLM应用步伐(如Claude桌面或IDE)
客户端
与服务端保持1:1毗连,位于主机应用步伐内部
服务端
向客户端提供上下文、工具和提示
焦点组件
协议层
协议层处置惩罚消息框架、哀求/响应链接和高级通讯模式。
Python 示例代码
class Session(BaseSession[RequestT, NotificationT, ResultT]):
async def send_request(
self,
request: RequestT,
result_type: type[Result]
) -> Result:
"""
Send request and wait for response. Raises McpError if response contains error.
"""
# Request handling implementation
async def send_notification(
self,
notification: NotificationT
) -> None:
"""Send one-way notification that doesn't expect response."""
# Notification handling implementation
async def _received_request(
self,
responder: RequestResponder[ReceiveRequestT, ResultT]
) -> None:
"""Handle incoming request from other side."""
# Request handling implementation
async def _received_notification(
self,
notification: ReceiveNotificationT
) -> None:
"""Handle incoming notification from other side."""
# Notification handling implementation
复制代码
关键类包括:
Protocol
Client
Server
传输层
传输层处置惩罚客户端和服务端之间的现实通讯。MCP支持多种传输机制:
Stdio传输
利用标准输入/输出进行通讯
适用于本地进程
HTTP与SSE传输
利用服务端发送事件(SSE)进行服务端到客户端的消息传递
利用HTTP POST进行客户端到服务端的消息传递
全部传输都利用JSON-RPC 2.0来互换消息。有关模型上下文协议消息格式的详细信息,请参阅规范。
消息范例
MCP有以下主要范例的消息:
哀求
期望从另一方获得响应:
interface Request {
method: string;
params?: { ... };
}
复制代码
效果
是对哀求的成功响应:
interface Result {
[key: string]: unknown;
}
复制代码
错误
表现哀求失败:
interface Error {
code: number;
message: string;
data?: unknown;
}
复制代码
关照
是单向消息,不期望响应:
interface Notification {
method: string;
params?: { ... };
}
复制代码
毗连生命周期
1. 初始化
1. 客户端发送`initialize`请求,包含协议版本和能力
2. 服务端响应其协议版本和能力
3. 客户端发送`initialized`通知作为确认
4. 正常消息交换开始
复制代码
2. 消息互换
初始化后,支持以下模式:
哀求-响应
:客户端或服务端发送哀求,另一方响应
关照
:任一方发送单向消息
3. 终止
任一方都可以终止毗连:
通过close()进行干净关闭
传输断开
错误条件
错误处置惩罚
MCP定义了这些标准错误代码:
enum ErrorCode {
// 标准JSON-RPC错误代码
ParseError = -32700,
InvalidRequest = -32600,
MethodNotFound = -32601,
InvalidParams = -32602,
InternalError = -32603
}
复制代码
SDK和应用步伐可以在-32000以上定义自己的错误代码。
错误通过以下方式传播:
对哀求的错误响应
传输上的错误事件
协议级错误处置惩罚步伐
实现示例
以下是一个实现MCP服务端的根本示例:
Python 示例
import asyncio
import mcp.types as types
from mcp.server import Server
from mcp.server.stdio import stdio_server
app = Server("example-server")
@app.list_resources()
async def list_resources() -> list[types.Resource]:
return [
types.Resource(
uri="example://resource",
name="Example Resource"
)
]
async def main():
async with stdio_server() as streams:
await app.run(
streams[0],
streams[1],
app.create_initialization_options()
)
if __name__ == "__main__":
asyncio.run(main)
复制代码
最佳实践
传输选择
本地通讯
对本地进程利用stdio传输
适用于同一台机器的通讯
简单的进程管理
远程通讯
对必要HTTP兼容性的场景利用SSE
考虑安全影响,包括身份验证和授权
消息处置惩罚
哀求处置惩罚
彻底验证输入
利用范例安全的模式
优雅地处置惩罚错误
实现超时
进度报告
对长时间操纵利用进度令牌
逐步报告进度
在已知时包括总进度
错误管理
利用适当的错误代码
包括有用的错误消息
在错误时清理资源
安全注意事项
传输安全
对远程毗连利用TLS
验证毗连来源
在必要时实现身份验证
消息验证
验证全部传入消息
清理输入
检查消息巨细限制
验证JSON-RPC格式
资源掩护
实现访问控制
验证资源路径
监控资源利用环境
限制哀求速率
错误处置惩罚
不要泄露敏感信息
记载与安全相关的错误
实现适当的清理
处置惩罚DoS场景
调试和监控
日志记载
记载协议事件
跟踪消息流
监控性能
记载错误
诊断
实现健康检查
监控毗连状态
跟踪资源利用环境
分析性能
测试
测试不同的传输
验证错误处置惩罚
检查边沿环境
负载测试服务端
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4