【MCP (Model Context Protocol) 服务技术详解】

MCP Server和Client的基本使用方法 MCP的简单说明及简单易上手的MCP Server和MCP Client上手使用说明 阅读详情

MCP (Model Context Protocol) 服务技术详解

1. MCP 技术概述

MCP 是 Anthropic 推出的模型上下文协议,它定义了大语言模型(LLM)与外部工具、数据源之间的标准化通信方式。MCP 采用客户端-服务器架构,支持两种主要传输机制。

MCP 的核心优势体现在三个方面:标准化接口让工具开发一次即可对接多种模型,双向通信支持实时数据交换,而传输灵活性则允许根据场景选择本地或远程部署方式。

2. 服务器端实现详解

2.1 FastMCP 框架

服务器端使用 FastMCP 框架快速构建 MCP 服务。代码通过 @mcp.tool() 装饰器将普通函数转换为 MCP 工具。

from mcp.server.fastmcp import FastMCP
import requests

mcp = FastMCP()

FastMCP 是 MCP 官方提供的高级框架,它自动处理协议解析、工具注册、请求路由等底层细节。开发者只需关注业务逻辑的实现。

2.2 工具定义

每个工具都是一个带有 @mcp.tool() 装饰器的 Python 函数。以下是一个天气查询工具的示例:

@mcp.tool()
def get_weather(city: str) -> str:
    """查询某个城市或区县的天气"""
    api_key = "your_api_key_here"
    url = f"https://api.example.com/weather?city={city}&key={api_key}"
    response = requests.get(url)
    return response.json()["forecasts"]

安全提示:生产环境中,API 密钥应通过环境变量或密钥管理服务获取,切勿硬编码在源代码中:

import os
api_key = os.environ.get("WEATHER_API_KEY")

工具函数需要包含类型注解和docstring,MCP 会自动提取这些信息生成函数签名描述,供大模型理解工具的用途和参数规范。

2.3 传输方式配置

MCP 服务器支持两种传输协议:

stdio 模式(本地进程通信):

if __name__ == "__main__":
    mcp.run(transport='stdio')  # 本地stdio调用

stdio 方式通过标准输入输出进行进程间通信,适用于本地工具集成,延迟最低,不需要网络配置。

SSE 模式(远程 HTTP 通信):

if __name__ == "__main__":
    mcp.settings.port = 8001  # 可自定义端口
    mcp.run(transport='sse')

SSE(Server-Sent Events)方式通过 HTTP 长连接实现双向通信,适合远程服务部署。服务器在指定端口监听 SSE 连接,客户端通过 URL 访问。

3. 客户端实现详解

3.1 客户端架构

客户端 MCPClient 类管理所有服务器会话和连接资源:

class MCPClient:
    def __init__(self):
        self.sessions = []       # 存储服务器的会话及其上下文
        self.model_name = "deepseek-chat"
        self.server_url = "https://your-mcp-server.example.com/sse"
        self.client = AsyncOpenAI(
            base_url="https://api.example-llm.com",
            api_key=os.environ.get("LLM_API_KEY")
        )

安全提示:API 密钥和服务器地址等敏感信息应通过环境变量或配置文件注入,避免硬编码。客户端维护三个层级的上下文对象:SSE 流上下文、ClientSession 会话上下文、以及会话实例本身,形成嵌套的异步上下文管理器结构。

3.2 会话初始化

async def init_session(self):
    streams_context = sse_client(url=self.server_url)
    streams = await streams_context.__aenter__()
    session_context = ClientSession(*streams)
    session = await session_context.__aenter__()
    await session.initialize()
    
    self.sessions = [session, session_context, streams_context]
    
    response = await session.list_tools()
    for tool in response.tools:
        print(tool)

初始化流程分为四个步骤:首先是创建 SSE 客户端并建立 HTTP 长连接,然后初始化 ClientSession 进行协议握手,接着发送 initialize 消息完成版本协商,最后调用 list_tools 获取可用工具列表。

3.3 工具发现与映射

客户端从服务器获取工具列表后,需要将其转换为符合 OpenAI Function Calling 规范的格式:

for tool in response.tools:
    function = {
        "type": "function",
        "function": {
            "name": tool.name,
            "description": tool.description,
            "parameters": tool.inputSchema,
        },
    }
    available_tools.append(function)

这种转换是 MCP 的关键设计:MCP 工具描述格式与 OpenAI Function Calling 格式之间的映射,使客户端能够将 MCP 工具无缝对接任意支持 Function Calling 的大模型。

3.4 工具调用流程

工具调用遵循"两阶段"模式:

async def process_query(self, query: str):
    messages = [{"role": "user", "content": query}]
    
    # 第一阶段:模型决定调用哪些工具
    response = await self.client.chat.completions.create(
        model=self.model_name,
        messages=messages,
        tools=available_tools,
    )
    
    message = response.choices[0].message
    
    # 第二阶段:执行工具调用
    if message.tool_calls:
        for tool_call in message.tool_calls:
            function_name = tool_call.function.name
            function_args = json.loads(tool_call.function.arguments)
            result = await session.call_tool(function_name, function_args)
            results.append(result.content)

第一阶段中,大模型分析用户意图并决定调用哪些工具及参数。第二阶段中,客户端通过 MCP 协议向服务器发送 call_tool 请求,执行实际的功能调用。

3.5 结果整合与流式输出

工具执行结果需要再次发送给大模型进行总结:

response = await self.client.chat.completions.create(
    model=self.model_name,
    messages=messages,
    tools=available_tools,
    stream=True
)
async for chunk in response:
    text = chunk.choices[0].delta.content
    if text:
        yield text

客户端使用流式响应方式,将大模型的最终回答逐步输出,提供更好的用户体验。

4. 传输协议对比

特性stdioSSE
通信方式标准输入输出HTTP 长连接
适用场景本地进程集成远程服务部署
延迟极低较低
配置复杂度简单需要网络配置
资源占用低较高

对于本地工具调用,推荐使用 stdio 模式。对于需要跨网络访问的工具服务,则应使用 SSE 模式部署 MCP 服务器。

5. 核心设计模式

MCP 的核心设计遵循几个重要原则:职责分离让服务器专注工具实现,客户端处理模型交互;协议适配通过格式转换桥接不同模型提供商;异步优先使用 asyncio 实现高并发处理;上下文管理确保连接资源的正确释放。

这套架构使得工具开发者无需关心大模型的细节,只需实现标准的 MCP 工具函数,即可被任何支持 MCP 客户端的应用使用。

Model Context Protocol (MCP) 开发技术栈生态介绍 MCP(Model Context Protocol)是一种标准化协议,旨在为大型语言模型(LLM)提供统一的上下文信息访问接口。该协议采用客户端-服务器架构,通过定义提示、资源和工具三大核心原语,实现LLM与数据源/工具的标准化集成。MCP包含协议层和传输层,支持多种通信方式,并采用JSON-RPC 2.0消息格式。其核心优势在于简化AI应用开发、提供灵活的集成切换能力,同时确保数据安全。该技术栈生态包括宿主程序、客户端、服务器等组件,可访问本地数据源和远程服务,为构建基于LLM的智能代理和工作流提供支持 阅读详情

相关推荐

SAP成本中心费用分割(KSS2)实战:从原理到月末调整全解析

本文详细解析了SAP成本中心费用分割(KSS2)的核心逻辑与实战操作,从成本要素分组配置到月末调整全流程。通过KSS2将初级成本要素按作业类型重新分类为次级成本要素,确保成本结算准确。文章还提供了常见错误处理方法和典型业务场景实战,帮助用户高效完成SAP成本结算。

weixin_29279101的博客 1254

MCP (Model Context Protocol) 技术分析

MCP(Model Context Protocol)是一种通过本地运行的MCP服务器扩展系统能力的模型上下文协议。MCP服务器通过标准输入输出(stdio)与系统进行基于JSON的请求-响应通信,提供动态资源和工具处理能力。其架构包括Server类、Transport层、资源和工具处理器等组件,支持静态和动态资源管理,以及工具的动态调用和参数验证。MCP服务器可应用于获取天气信息、执行数据分析等场景,并通过错误处理机制确保通信的可靠性。创建MCP服务器需初始化项目、定义处理逻辑、编译运行并配置设置文件。

编码浪子的专栏 1448

推荐系统召回总结(持续更新)

推荐系统架构 候选池:可供推荐的物料候选池,对于图文、短视频、新闻等来说通常是最近N天的新物料组成的集合,定期进行物料更新。 召回:从候选池中选出和用户相关的物料,交给后面的排序模块进行打分。召回面对的候选集通常是数十万或者百万甚至千万的量级,检索过程必须轻量快速。通常由多路召回组成,保证不遗漏且相关性、多样性尽量好,可以分为非个性化召回和个性化召回。 粗排:对召回选择的几千或者几百候选物料进行排序,快速打分选出topN,减少精排的压力,兼顾精准与效率。 精排:对粗排的结果进行精准排序,这个环节需要特征尽可

whgyxy的博客 2515

Model Context Protocol (MCP) Develop Tools and Tech Stacks

【代码】Model Context Protocol (MCP) Develop Tools and Tech Stacks。

AI天才研究院 1050

HFSS学习笔记——Vivaldi天线仿真(一)

Vivaldi 天线HFSS仿真,HFSS中指数曲线绘制及曲面绘制。

and_future的博客 1万+

手机银行应用架构设计

网上银行借助互联网、移动通信网络等技术向客户提供金融服务,易受到通讯层面的安全威胁,金融机构应从通讯协议、安全认证、通信链路安全等层面,采取措施有效应对相关风险。网上银行系统服务器端提供网上银行应用服务和核心业务处理功能,金融机构应充分利用物理环境、通信网络、计算环境等领域的防护技术,在攻击者和受保护的资源间建立多道严密的安全防线。 网上银行除直接向用户提供金融服务外,也可能与外部机构开展业务合作。在网上银行系统设计、开发、部署和运营过程中,应充分考虑外部机构的系统可能存在的安全风险,并针对各类风险进行有效

银行信息系统应用架构详解 4826

一文带你了解MCP (Model Context Protocol)

MCP(Model Context Protocol)是一个用于大语言模型与外部系统交互的开放标准协议。它提供统一接口实现AI模型与工具、数据源的安全通信,具有标准化、安全性强、扩展性好等特点。 MCP架构包含客户端、服务器和工具适配器三层,采用结构化消息格式实现模型与外部系统的交互。开发时需准备Python技术栈,实现服务器端的工具注册、资源管理和客户端的连接与调用功能。 该协议解决了AI集成中的互操作性问题,通过标准化接口简化了扩展开发,同时内置安全机制保障数据访问安全。

new_daimond的博客 2553

vue2 - elementUI表格table树形结构复选框勾选父子联动示例,el-table树状表格tree复选框checkbox多选框全选/反选取消children(当子级全选中,父级自动勾选)

vue2,elementui,el-table树状表格多选,树形结构结合多选框使用,实现单选父子联动全选反选,勾选联动父级勾选,表格多选check父子联动,table表格children如何嵌入复选框,el-table使用多选框与树形数据写一个有半选全选功能的表格,el-table树形表格实现复选框多选效果,表格树状结构多选,每一个row都可以选中并且联动全选按钮,table选父带子选子带父,树形数据与懒加载,Table表格树形结构多选框选中父级时会选中子级,elementUI表格里树形结构嵌套复选框全选全

✅ 精选推荐文章 1万+

MCP-Golang 项目安装与配置指南

MCP-Golang 是一个开源项目,它实现了 Model Context Protocol(模型上下文协议)的 Golang 语言版本。该项目允许开发者使用 Go 语言编写 MCP 服务器和客户端,通过简单的几行代码即可实现。MCP-Golang 提供了类型安全、自定义传输、低模板代码、模块化以及双向通信等功能特性。 ### 主要编程语言 - Go ## 2. 项目使用的关键技术和框架 #...

gitblog_00953的博客 853

基于Simulink的H∞鲁棒控制器设计与仿真建模示例

本文介绍了基于Simulink的H∞鲁棒控制器设计与仿真方法。针对质量-弹簧-阻尼系统存在±50%刚度不确定性的问题,详细阐述了从构建广义被控对象、设计性能加权函数,到使用hinfsyn综合控制器的完整流程。通过Simulink仿真验证,所设计的H∞控制器在参数摄动和外部扰动下均保持良好性能,位移控制误差小于2%,扰动衰减超过20dB。相比传统PID控制,H∞方法展现出显著鲁棒性优势。文章还总结了工程实践中的加权函数调参技巧、控制器降阶方法,并展望了μ-综合等扩展方向,为处理系统不确定性提供了实用解决方案。

amy_mhd的博客 69

【Zephyr驱动专题】01_深扒MPU6050陀螺仪寄存器

MPU6050作为最常用的6轴运动跟踪器件,其寄存器配置直接影响传感器性能和功能实现。本文将深入解析关键寄存器,并使用逻辑分析仪抓取信号进行分析。

zero的博客 1571

终于有人把MCP讲透了!(附MCP实战完整代码)

一篇手把手带你快速入门MCP的技术实战教程!!

fufan_LLM的博客 5万+

YOLOv11改进 | 细节涨点篇 | DySample一种最新的轻量化动态上采样算子(效果完爆CARAFE)

本文给大家带来的最新改进机制是一种号称超轻量级且有效的动态上采样器——DySample。与传统的基于内核的动态上采样器相比,DySample采用了一种基于点采样的方法,相比于以前的基于内核的动态上采样器,DySample具有更少的参数、浮点运算次数、GPU内存和延迟。此外,DySample在包括语义分割、目标检测、实例分割、全景分割和单目深度估计在内的五个预测任务中,性能均优于其他上采样器(截至目前最有效的上采样算子),

Snu77的博客 4208

一文看懂MCP,理论+实践,教你搭建MCP应用

MCP,全称是Model Context Protocol,模型上下文协议,由Claude母公司Anthropic于去年11月正式提出。MCP刚发布的时候不温不火,直到今年Agent大爆发才被广泛关注。而在今年2月,Cursor正式宣布加入MCP功能支持,一举将MCP推到了全体开发人员面前。从本质上来说,MCP是一种技术协议,一种智能体Agent开发过程中共同约定的一种规范。这就好比秦始皇的“书同文、车同轨”,在统一的规范下,大家的协作效率就能大幅提高,最终提升智能体Agent的开发效率。

优快云_430422的博客 8337

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

207-Spring AI Model Context Protocol 功能:Brave Docker Agents Gateway 功能完整案例

本案例演示如何创建一个 Spring AI Model Context Protocol (MCP) 客户端,该客户端与 Brave Search MCP 服务器通信。该应用程序展示了如何构建一个 MCP 客户端,通过对话式界面与 Brave Search 进行自然语言交互,允许您通过对话界面执行互联网搜索。此示例使用 Spring Boot 自动配置通过配置文件设置 MCP 客户端。

rengang66的博客 870

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【亲测免费】 Model Context Protocol 服务器项目安装与配置指南

Model Context Protocol 服务器项目安装与配置指南 【免费下载链接】servers Model Context Protocol Servers 项目地址: https://gitcode.com/GitHub...

gitblog_01112的博客 1523

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

MCP技术:渗透测试从自动化到智能化

还在自动化渗透测试?来看看智能化!

GRXHunter的博客 2175

终极指南:Azure MCP Server的Model Context Protocol实现原理

Azure MCP Server是一个强大的Model Context Protocol(MCP)服务器,它使AI代理能够通过标准化的通信模式与Azure服务进行交互。本指南将深入解析其实现原理,帮助新手和普通用户理解这个创新技术的核心机制。 ## MCP协议基础:连接AI与Azure的桥梁 Model Context Protocol(MCP)是一套标准化的通信规范,旨在实现AI代理与各类服

gitblog_00479的博客 686

Langflow 框架中 MCP (Model Context Protocol) 技术深度分析

模块化设计: 清晰的分层架构和职责分离异步编程: 全面采用异步 I/O 提高性能错误处理: 完善的错误处理和恢复机制用户体验: 动态 UI 和实时反馈扩展能力: 通过 MCP 协议无限扩展系统能力MCP 技术为 Langflow 提供了强大的扩展能力,使其能够连接和利用外部世界的各种资源和服务,真正实现了 AI 应用的能力边界扩展。通过标准化的协议和精心设计的实现,MCP 技术在保证安全性和可靠性的同时,为开发者提供了灵活而强大的工具集成平台。

weixin_52242569的博客 1378

Model Context Protocol详解:Scira MCP Chat如何连接强大AI工具生态

你是否曾想过,让AI助手像瑞士军刀一样拥有多种实用工具?✨ 今天,我们将深入探讨**Model Context Protocol(模型上下文协议)** 以及**Scira MCP Chat**如何通过这一革命性技术,为你打造一个功能强大的AI工具生态系统。 **Model Context Protocol(MCP)** 是一个开源协议,它让AI模型能够安全、标准化地访问外部工具和数据源。简单来说

gitblog_00297的博客 495

Model Context Protocol TypeScript SDK 安装与配置指南

Model Context Protocol (MCP) TypeScript SDK 是一个开源项目,旨在为开发者提供一种标准化的方式来构建与大型语言模型(LLM)交互的服务器和客户端。它允许应用以安全、标准化的方式向 LLM 应用程序提供上下文信息,从而分离上下文提供和 LLM 实际交互的职责。 该项目主要使用 TypeScript 编程语言,它是 JavaScript 的一个超集,添加了静...

gitblog_00292的博客 1593

Spring AI / Model Context Protocol (MCP) / MCP Annotations / Server Annotations

本文介绍了Spring AI中MCP服务端注解的使用方法,主要包括: **@McpTool**:标记方法为工具,支持参数描述、JSON Schema生成、进度追踪和请求上下文访问。 **@McpResource**:通过URI模板提供资源访问,支持MIME类型和元数据配置。 **@McpPrompt**:生成AI交互提示消息,支持必选和可选参数。 **@McpComplete**:为提示参数或资源URI提供自动补全功能。 注解方法根据服务器类型(同步/异步、有状态/无状态)自动过滤,不匹配的方法会

记录 分享 成就 474

Model Context Protocol PHP SDK完全指南:从入门到精通MCP服务器与客户端开发

Model Context Protocol PHP SDK(简称MCP PHP SDK)是官方为Model Context Protocol(MCP)打造的PHP开发工具包,它提供了与框架无关的API,让开发者能够轻松实现MCP服务器和客户端功能。无论你是PHP新手还是有经验的开发者,本指南都将帮助你快速掌握MCP PHP SDK的核心功能,从基础安装到高级应用,一步到位构建强大的MCP应用。

gitblog_00821的博客 400

Model Context Protocol servers:开源项目推荐

Model Context Protocol servers:开源项目推荐 【免费下载链接】servers Model Context Protocol Servers 项目地址: https://gitcode.com/GitH...

gitblog_00553的博客 1234

MCP(Model Context Protocol)实践:标准化Phi-3-vision模型的服务接口

本文介绍了如何在星图GPU平台上自动化部署Phi-3-vision-128k-instruct镜像,实现标准化AI模型服务接口。通过MCP(Model Context Protocol)协议,该多模态模型能够统一处理图像和文本输入,适用于智能代码编辑、跨模型协作等场景,显著提升开发效率和工具互操作性。

weixin_35756624的博客 95

一文讲透MCP(Model Context Protocol),想学习MCP的新手必看

Model Context Protocol (MCP)代表了AI集成领域的重要进步,将AI模型与外部世界更紧密地连接在一起。通过提供标准化的接口,MCP简化了AI与各种工具和服务的集成,使开发人员能够创建更强大、更有用的AI应用程序。随着MCP继续发展,我们可以期待看到更多创新的AI应用场景,以及AI模型能力的进一步扩展。这项技术有潜力彻底改变我们构建和使用AI系统的方式,使AI更加实用且易于集成到各种工作流程中。

刘大大AI的博客 1095
上一篇: 【系统架构设计师学习笔记】第一章 计算机硬件 1.1 计算机硬件组成
下一篇: 【JNA实战:Java无缝调用Windows API模拟键盘输入】
Stream_Silver
博客等级 码龄5年 73粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值