MCP开发入门

官方文档: https://modelcontextprotocol.io/introduction
入门教程: https://github.com/liaokongVFX/MCP-Chinese-Getting-Started-Guide

  • 本文源代码:https://github.com/youngqqcn/mcp-server-demo

什么是MCP?

模型上下文协议(MCP)是一个创新的开源协议,它重新定义了大语言模型(LLM)与外部世界的互动方式。MCP 提供了一种标准化方法,使任意大语言模型能够轻松连接各种数据源和工具,实现信息的无缝访问和处理。MCP 就像是 AI 应用程序的 USB-C 接口,为 AI 模型提供了一种标准化的方式来连接不同的数据源和工具。

MCP 有以下几个核心功能:

  • Resources 资源
  • Prompts 提示词(模板), 用于给客户端提供提示词模板
  • Tools 工具
  • Sampling 采样
  • Roots 根目录
  • Transports 传输层
    • stdio 用于本地
      • 通过 uvx 或 npx 跑一个本地服务供mcp客户端(也是大模型客户端)调用
    • streamable http 最新的
    • http + sse : 已废弃,老的mcp依然使用

MCP客户端:

  • Claude App (要翻墙)
  • Cusor
  • Vscode
  • Cherry Studio

mcp的资源

目前 MCP 非常火爆,很多开发者参与:

  • https://github.com/modelcontextprotocol/servers/tree/main/src

  • https://mcp.so/

  • https://www.modelscope.cn/mcp

  • https://github.com/punkpeye/awesome-mcp-servers/tree/main

MCP的工作原理

关于mcp工作过程 https://zhuanlan.zhihu.com/p/29001189476

  • 1, 用户使用客户端(如 Cursor, Cherry Studio), 并指定开启的mcp工具,并向大模型提出问题
  • 2, 客户端将问题发大模型,同时附带上可使用的mcp工具列表
  • 3, 如果大模型需要调用mcp工具获取外部数据,大模型会中断并返回需要调用的工具列表, 并包含一个中断原因: tool_call; 如果不需要调用工具,则直接返回结果
  • 4, 客户端根据大模型返回的工具列表,调用相应的mcp工具, 获取外部数据
  • 5, 客户端将获取到的数据,传递给大模型
  • 6, 大模型根据获取到的数据,继续处理问题
  • 7, 大模型返回结果
  • 8, 客户端将结果返回给用户

MCP server 开发

官方文档: https://modelcontextprotocol.io/introduction
Python SDK: https://github.com/modelcontextprotocol/python-sdk

支持 Python, Typescript, Java …

这里以 Python 为例, 用 uv创建一个项目

如果没有安装 uv, 请先安装 uv: https://docs.astral.sh/uv/getting-started/installation/

uv init mcp-server-democd mcp-server-demouv add "mcp[cli]"source .venv/bin/activate

创建一个 add_server.py, 代码:

# server.py
from mcp.server.fastmcp import FastMCP# Create an MCP server
mcp = FastMCP("Demo")# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:"""Add two numbers"""return a + b# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:"""Get a personalized greeting"""return f"Hello, {name}!"if __name__ == "__main__":# Start the servermcp.run(transport="streamable-http")

调试 MCP server:

  • 测试/调试MCP程序, 启动2个终端

  • 在一个终端运行 mcp 服务, streamable-http 默认监听 8000 端口 和 mcp端点 python add_server.py

  • 在另外一个终端中, 启动一个测试客户端 mcp dev add_server.py

  • 浏览器打开 http://127.0.0.1:6274

  • Transport 选择 streamable-http

  • URL 填入 http://localhost:8000/mcp

  • 点击 Connect, 可以看到连接成功

  • 然后点击 Tools, 点击 List Tools 列出所有的工具

  • 点击 add 进行测试, 输入 ab 的值, 点击 Run Tool, 可以看到返回结果

在客户端使用 MCP server

在 Cherry Studio 中使用上面的 add MCP server

  • 下载 Cherry Studio

在 Cherry Studio 中选择支持工具调用的大模型(带工具icon的模型)

在对话中,开启我们刚才添加的 my_test_add工具:

因为我们这个add工具过于简单,如果直接问大模型 100 + 3 等于多少,模型会直接返回结果,而不会调用我们添加的 add 工具 , 因此,我们这里需要换种方式提问,以便大模型能够调用我们添加的 add 工具

可见, 大模型调用了我们添加的 add 工具,并返回了正确结果

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

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

相关文章

PX4开始之旅(二)通过自定义 MAVLink 消息与 QGroundControl (QGC) 通信

核心知识点:通过自定义 MAVLink 消息与 QGroundControl (QGC) 通信 1. 通俗易懂的解释 想象一下,MAVLink 就像是无人机(飞控)和地面站(QGroundControl)之间约定好的一种“语言”。这种语言有很多标准的“…

AI视频智能分析网关打造社区/工厂/校园/仓库智慧消防实现精准化安全管控

一、背景 随着社区、商业场所对消防安全要求日益提升,传统消防系统已难以满足智能化、精细化管理需求。智能分析网关融合物联网与人工智能技术,具备强大的数据处理与分析能力,可全面升级消防系统。将其融入消防系统各层级,搭建智…

深度学习基础--目标检测常见算法简介(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD、YOLO)

博主简介:努力学习的22级本科生一枚 🌟​;探索AI算法,C,go语言的世界;在迷茫中寻找光芒​🌸​ 博客主页:羊小猪~~-CSDN博客 内容简介:常见目标检测算法简介​&#x1f…

传输层协议UDP和TCP

传输层协议UDP和TCP 1、UDP2、TCP2.1、TCP协议段格式2.2、确认应答(ACK)机制2.3、超时重传机制2.4、连接管理机制2.5、理解CLOSE_WAIT状态2.6、理解TIME_WAIT状态2.7、流量控制2.8、滑动窗口2.9、拥塞控制2.10、延迟应答2.11、捎带应答2.12、面向字节流2.13、粘包问题2.14、TCP…

PMIC电源管理模块的PCB设计

目录 PMU模块简介 PMU的PCB设计 PMU模块简介 PMIC(电源管理集成电路)是现代电子设备的核心模块,负责高效协调多路电源的转换、分配与监控。它通过集成DC-DC降压/升压、LDO线性稳压、电池充电管理、功耗状态切换等功能,替代传统分…

Ubuntu 配置网络接口端点(静态 IP 地址)详细教程

在 Ubuntu 系统中,配置网络接口端点通常指的是为您的有线或无线网卡设置一个固定的 IP 地址、子网掩码、网关以及 DNS 服务器。这对于服务器或者需要稳定网络标识的设备来说非常重要。 使用 Netplan (Ubuntu 17.10 及更高版本的默认方式)使用 ifupdown (通过 /etc/…

浅聊大模型-有条件的文本生成

大家好我是木木,自从2022年11月30日OpenAI发布ChatGPT后,大模型迅速火热起来,人工智能作为当下最火的行业之一,2025年春节期间DeepSeek R1模型大火。LLM中有很多的技术,今天我们聊聊大模型-有条件的文本生成。 什么是…

华为银河麒麟 V10(ARM)系统软件部署全攻略:Redis、RabbitMQ、MySQL 等集群搭建指南

一、Redis 集群部署(主从 哨兵模式) 1. 环境准备 系统:华为银河麒麟 V10(ARM64)节点:3 台服务器(1 主 2 从 3 哨兵) 2. 安装包下载 bash # 华为镜像站 wget https://update.c…

Mysql数据库进阶

一、Mysql组织架构 连接层 1.验证用户的身份,用户名密码是否匹配 2.提供两种连接方式(TCP/IP连接、socket连接) 3.连接层提供了一个与sql层交互的线程 SQL层 1.接收连接层传过来的SQL语句 2.验证执行的SQL语法 3.验证SQL的语义(DDL,DML,DQL,DCL) 4.解析器:解析SQL语句,生…

系统思考:短期困境与长期收益

最近在项目中,一直有学员会提到一个议题,如何平衡当前困境和长期收益? 我的思考是在商业和人生的路上,我们常常听到“鱼和熊掌不可兼得”的说法,似乎短期利益和长期目标注定是对立的。但事实上,鱼与熊掌是…

Spring Web MVC快速入门

什么是Spring Web MVC Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC". View(视图) 指在应⽤程序…

DeepSeek基于注意力模型的可控图像生成

DeepSeek大模型高性能核心技术与多模态融合开发 - 商品搜索 - 京东 图像的加噪与模型训练 在扩散模型的训练过程中,首先需要对输入的信号进行加噪处理,经典的加噪过程是在图像进行向量化处理后在其中添加正态分布,而正态分布的值也是与时间…

第十六届蓝桥杯B组第二题

当时在考场的时候这一道题目 无论我是使用JAVA的大数(BIGTHGER)还是赛后 使用PY 都是没有运行出来 今天也是突发奇想在B站上面搜一搜 看了才知道这也是需要一定的数学思维 通过转换 设X来把运算式精简化 避免运行超时 下面则是代码 public class lanba…

HT71663同步升压2.7V-13V输入10A聚能芯半导体禾润一级代理

在便携式设备飞速发展的今天,电源转换效率与产品尺寸始终是行业难以平衡的难题。但现在,HT71663 高功率全集成升压转换器强势登场,一举打破僵局,为便携式系统带来颠覆性的高效小尺寸解决方案!​ HT71663 的卓越性能&am…

Unity:输入系统(Input System)与持续检测键盘按键(Input.GetKey)

目录 Unity 的两套输入系统: 🔍 Input.GetKey 详解 🎯 对比:常用的输入检测方法 技术底层原理(简化版) 示例:角色移动 为什么会被“新输入系统”替代? Unity 的两套输入系统&…

港大今年开源了哪些SLAM算法?

过去的5个月,香港大学 MaRS 实验室陆续开源了四套面向无人机的在线 SLAM 框架:**FAST-LIVO2 、Point-LIO(grid-map 分支) 、Voxel-SLAM 、Swarm-LIO2 **。这四套框架覆盖了单机三传感器融合、高带宽高速机动、长时间多级地图优化以…

【质量管理】TRIZ因果链分析:解码质量问题的“多米诺效应“

为什么要使用因果链分析 没有发现问题并不等于没有问题。爱因斯坦曾说,如果我只有一个小时的时间来拯救世界,我将花45分钟时间分析问题,10分钟的时间来检查问题,最后5分钟的时间来解决问题。可见问题分析的重要性。 在质量管理实践…

线程中常用的方法

知识点详细说明 Java线程的核心方法集中在Thread类和Object类中,以下是新增整合后的常用方法分类解析: 1. 线程生命周期控制 方法作用注意事项start()启动新线程,JVM调用run()方法多次调用会抛出IllegalThreadStateException(线程状态不可逆)。run()线程的任务逻辑直接调…

c++:迭代器(Iterator)

目录 🚪什么是迭代器? 🔧 迭代器的本质 为什么不用普通数组或下标? STL容器的迭代器并不是共用一个类型! 迭代器的类型(Iterator Categories) 📦 常见容器的迭代器类型 ✅ 迭…

【文件系统—散列结构文件】

文章目录 一、实验目的实验内容设计思路 三、实验代码实现四、总结 一、实验目的 理解linux文件系统的内部技术,掌握linux与文件有关的系统调用命令,并在此基础上建立面向随机检索的散列结构文件;## 二、实验内容与设计思想 实验内容 1.设…