MCP(Model Context Protocol)是专为LLM(大语言模型)应用设计的标准化协议

核心定义

MCP(Model Context Protocol)是专为LLM(大语言模型)应用设计的标准化协议,通过安全可控的方式向AI应用暴露数据和功能。主要提供以下能力:

  • 标准化的上下文管理
  • 安全的功能调用接口
  • 跨平台的数据交互协议
  • 可审计的操作日志记录

MCP三大原语

MCP Server 提供了三种核心原语,每种原语都有其特定的用途和特点:

  1. Tool(工具):服务器公开可执行的函数,供客户端和LLM调用,实现主动操作和数据写入。
  2. Resource(资源):服务器提供的只读数据,如文件、数据库记录、图片等,供客户端或应用获取上下文。
  3. Prompt(提示模板):可重用的交互模板,引导或标准化与LLM的对话流程。

技术架构

+----------------+     +----------------+     +----------------+
|   MCP Client   | ← → |   MCP Server   | ← → |   MCP Host    |
+----------------+     +----------------+     +----------------+↓                       ↓                       ↓
+----------------+     +----------------+     +----------------+
|  LLM Application |   |  API Endpoints |   |  Data Sources   |
+----------------+     +----------------+     +----------------+

通信方式

MCP服务端支持两种与客户端的数据通信方式:

1. 标准输入输出(stdio)

  • 原理:客户端将服务端作为子进程启动,通过标准输入输出进行数据交换。
  • 适用场景:本地运行,低延迟、高效率,适合快速响应的本地应用。

2. 基于HTTP的服务器推送事件(SSE)

  • 原理:客户端与服务端通过HTTP协议通信,利用SSE实现服务端向客户端实时推送数据。
  • 适用场景:分布式或远程部署,适合跨物理位置的服务集成。

开发指南

Python环境管理与FastMCP安装

推荐使用uv进行Python环境管理:

  • 安装uv(Windows):
    powershell -ExecutionPolicy ByPass -c “irm https://astral.sh/uv/install.ps1 | iex”
  • 初始化项目并指定Python版本:
    uv init py-app -p 3.11.9
  • 创建并激活虚拟环境:
    uv venv
    source .venv/bin/activate
  • 安装FastMCP库:
    pip install fastmcp

版本推荐

  • Python 3.10及以上,支持async/await
  • FastMCP库需通过pip安装

Python服务端开发示例

以下为基于FastMCP的MCP服务端完整示例,包含Tool与Resource原语:

from mcp.server.fastmcp import FastMCPmcp = FastMCP("Demo 🚀")@mcp.tool()
def add(a: int, b: int) -> int:"""两个数字相加"""return a + b@mcp.tool()
async def calculate(expression: str) -> str:"""计算一个简单的数学表达式。Args:expression: 要计算的数学表达式(如"1 + 2")Returns:str: 计算结果"""try:result = eval(expression)return f"计算结果: {result}"except Exception as e:return f"计算错误: {str(e)}"@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:"""获取个性化问候语"""return f"Hello, {name}!"if __name__ == "__main__":mcp.run(transport='stdio')

TypeScript 集成

import { MCPServer } from 'mcp-ts';
const server = new MCPServer('GitHubIntegrator');server.registerTool({name: 'search_repos',description: '搜索GitHub仓库',execute: async (query: string) => {// 调用GitHub API}
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/82418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fiori学习专题三十四:Responsiveness

在这一步中,我们提高了应用程序的响应能力。SAPUI5应用程序可以在手机、平板电脑和台式机设备上运行,我们可以配置应用程序以充分利用每种场景的屏幕状态。幸运的是,像sap.m.Table这样的SAPUI5控件已经提供了许多我们可以使用的功能。 1.修改…

解决 TimeoutError: [WinError 10060] 在 FramePack项目中连接 Hugging Face 超时的问题

#工作记录 以下是针对 TimeoutError: [WinError 10060] 的完整排查方案,适用于 FramePack项目中。 (一般该错误的发生原因请重点排查Hugging Face模型仓库受限需要登录的情形) FramePack项目参考资料 FramePack部署(从PyCharm解…

obj = null; 赋值null之前没有其他引用指向obj对象,那么,当obj=null时,会被垃圾回收机制立即回收吗?

不会立即回收。 具体原因是: 赋值 obj null; 后,对象变成“不可达”,符合垃圾回收条件,但垃圾回收器并不会立刻回收它。垃圾回收是CLR自动控制的非确定性过程,什么时候执行回收取决于系统内存压力、GC策略、分代情况…

【Ubuntu 安装Docker CE-Jenkins】

安装Docker CE(Ubuntu) Install | Docker Docs官网 使用apt仓库安装 DNS配置(可选) #手动替换 sudo vim /etc/systemd/resolved.conf #典型配置如下 [Resolve] DNS8.8.8.8 DNS114.114.114.114 FallbackDNS1.1.1.1 # 备用 DNS#sed替换 sudo sed -i /^#DNS/ {s/#DNS/DNS8.8.8…

5、开放式PLC梯形图编程组件 - /自动化与控制组件/open-plc-programming

76个工业组件库示例汇总 开放式PLC编程环境 这是一个开放式PLC编程环境的自定义组件,提供了一个面向智能仓储堆垛机控制的开放式PLC编程环境。该组件采用苹果科技风格设计,支持多厂商PLC硬件,具有直观的界面和丰富的功能。 功能特点 多语…

内网和外网怎么互通?外网访问内网的几种简单方式

在企业或家庭网络中,经常会遇到不同内网环境下网络互通问题。例如,当公司本地局域网内有个办公OA网站,在办公室内电脑上网可以登录使用,但在家带宽下就无法直接通信访问到。这就需要我们采取一些实用的内外网互通技巧来解决这个问…

使用大语言模型进行机器人规划(Robot planning with LLMs)

李升伟 编译 长期规划在机器人学领域可以从经典控制方法与大型语言模型在现实世界知识能力的结合中获益。 在20世纪80年代,机器人学和人工智能(AI)领域的专家提出了莫雷奇悖论,观察到人类看似简单的涉及移动和感知的任务&#x…

【计算机视觉】OpenCV实战项目: opencv-text-deskew:实时文本图像校正

opencv-text-deskew:基于OpenCV的实时文本图像校正 一、项目概述与技术背景1.1 核心功能与创新点1.2 技术指标对比1.3 技术演进路线 二、环境配置与算法原理2.1 硬件要求2.2 软件部署2.3 核心算法流程 三、核心算法解析3.1 文本区域定位3.2 角度检测优化3.3 仿射变换…

可视化图解算法33:判断是不是平衡二叉树

1. 题目 描述 输入一棵节点数为 n 的二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质&#xff1…

【Linux网络】应用层自定义协议与序列化

应用层自定义协议与序列化 应用层 我们程序员写的一个个解决我们实际问题,满足我们日常需求的网络程序,都是在应用层. 协议是一种"约定".Socket的接口,在读写数据时,都是按"字符串"的方式来发送接收的.如果我们要传输一些"结构化的数据"怎么办…

MySQL + Elasticsearch:为什么要使用ES,使用场景与架构设计详解

MySQL Elasticsearch:为什么要使用ES,使用场景与架构设计详解 前言一、MySQL Elasticsearch的背景与需求1.1 为什么要使用Elasticsearch(ES)?1.2 为什么MySQL在某些场景下不足以满足需求?1.3 MySQL Elas…

PPL困惑度的计算

1. 公式 PPL(Perplexity)困惑度 是自然语言处理(NLP)中常用的评估语言模型(Language Model)性能的指标。PPL 用于衡量语言模型对语言序列的预测能力,数值越小,说明模型的预测能力越…

MegaCLI Raid管理工具

整理在CentOS 7.9和Ubuntu 24.04上,MegaCLI 工具的安装与常用命令。 1. 参考 下载和安装MegaCLI工具 MegaCli RAID管理工具 Megacli 批量磁盘巡检 ubuntu24.04 No such file libncursesw.so.5 dell服务器硬盘的状态变成外来(foreign)命…

HTML9:页面结构分析

页面结构分析 元素名描述header标题头部区域的内容(用于页面或页面中的一块区域)footer标记脚部区域的内容(用于整个页面或页面的一块区域)sectionWeb页面的一块独立区域article独立的文章内容aside相关的内容或应用(…

分布式处理架构

分布式处理架构是一种将计算任务分散到多台计算机或服务器上协同完成的系统设计方法。这种架构通过将工作负载分配到多个节点(可以是物理机、虚拟机或容器)来提高性能、可靠性和可扩展性。下面我将从多个角度详细解释这一概念: 分布式架构的…

算法每日一题 | 入门-分支结构-Apples Prologue/苹果和虫子

Apples Prologue/苹果和虫子 题目描述 小 B 喜欢吃苹果。她现在有 m m m(1 ≤ m ≤100)个苹果,吃完一个苹果需要花费 t t t(0 ≤ t≤ 100)分钟,吃完一个后立刻开始吃下一个。 现在时间过去了 s s s&a…

RT Thread Studio创建软件和硬件RTC工程

MCU型号:STM32F103RET6 一.配置软件模拟RTC 1.生成一个带串口输出的工程文件,新建RT-Thread项目工程文件。 2.查看电路图中的串口输出管脚,根据STMCubeMx软件可知此串口为USART1,选择芯片型号为STM32F103RET6,控制台…

STC32G12K128-旋转编码器-软件去抖

STC32G12K128-旋转编码器-软件去抖 简介代码 简介 EC11旋转编码器是一种可以连续旋转的器件A,B,C为旋转编码引脚,带按键的有D,E引脚。引脚功能: A:编码器A相;B:编码器B相;C:公共端-一般接到GN…

配置Jupyter Notebook环境及Token认证(Linux服务器)

配置Jupyter Notebook环境及Token认证(Linux服务器) 背景 在Ubuntu 18.04.6 LTS服务器(IP: 39.105.167.2)上,基于虚拟环境pytorch_env,通过Mac终端(SSH)配置Jupyter Notebook环境&…

从零开始学Flink:开启实时计算的魔法之旅

在凌晨三点的数据监控大屏前,某电商平台的技术负责人突然发现一个异常波动:支付成功率骤降15%。传统的数据仓库此时还在沉睡,而基于Flink搭建的实时风控系统早已捕捉到这个信号,自动触发预警机制。当运维团队赶到时,系…