当前位置: 首页 > news >正文

MCP 学习笔记(1)

       

 AI 时代的新鲜事层出不穷,MCP(Model Context Protocol)又火了起来。

       Anthropic 于 2024 年 11 月推出了模型上下文协议 (MCP),这是 LLM 与各种数据源之间数据交换的开放标准。该协议为 LLM 提供了一种简化的方法,可以与工具和服务集成以执行任务,例如在本地系统上搜索文件、访问 GitHub 存储库以编辑文件以及简化与外部平台的交互。

        如何理解模型上下文协议这个名称?我一直主张将context 翻译成“脉络”,MCP 翻译成大模型脉络协议。比较容易理解,MCP 协议是大模型应用中信息脉络的协议,用于传输大模型与各种信息源之间的数据。脉络具有相互之间流动关系的含义。

        也有人将MCP 比作AI 时代的软件USB,也就是认为MCP 可能成为AI 系统中的一个通用的,即插即用的接口协议。

MCP vs Function Calling

其实,在MCP 出现之前,大模型也有方法访问外部数据的,这就是函数调用(function Calling)。

        给大模型提供一组函数(Tools) 每个函数都有一个描述,大语言模型在推理过程中调用合适的函数,例如搜索,获取气象数据等等。

   只不过函数如何调用各种外部服务的方式是不尽相同的,MCP 将这些外部服务的协议统一标准化了。

    任何支持函数调用的 LLM(例如 Ollama 或 Qwen)都可以与其一起使用。只要在function 中实现MCP 就可以了。

         MCP 是一种Client/Server 协议。

     MCP 系统中的几个组成部分:  

  • MCP 主机:希望通过 MCP 访问数据的程序,例如 Claude Desktop、IDE 或 AI 工具
  • MCP 客户端:与服务器保持 1:1 连接的协议客户端
  • MCP 服务器:轻量级程序,每个程序都通过标准化模型上下文协议公开特定功能
  • 本地数据源:MCP 服务器可以安全访问的您的计算机文件、数据库和服务
  • 远程服务:MCP 服务器可通过互联网(例如通过 API)连接到的外部系统

网络上大多数介绍的是LLM 通过MCP 调用外部资源,其实作为一种网络协议,应用的场合非常多,例如应用程序通过MCP 调用基于LLM 的Agent 也是可以的。MCP 也可以作为Agent To Agent。Agent To Service 的协议。

MCP 的支持

实现MCP 不是困难的事情,现在许多的应用和LLM 开始支持MCP。

LangChain MCP 适配器

LangChain 是流行的LLM 应用程序构建工具,现在通过MCP 适配器支持MCP

https://github.com/langchain-ai/langchain-mcp-adapters

安装

pip install langchain-mcp-adapters

快速开始

pip install langchain-mcp-adapters langgraph langchain-openai

export OPENAI_API_KEY=<your_api_key>

服务器

# math_server.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Math")

@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b

@mcp.tool()
def multiply(a: int, b: int) -> int:
    """Multiply two numbers"""
    return a * b

if __name__ == "__main__":
    mcp.run(transport="stdio")

 客户端

# Create server parameters for stdio connection
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

from langchain_mcp_adapters.tools import load_mcp_tools
from langgraph.prebuilt import create_react_agent

from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o")

server_params = StdioServerParameters(
    command="python",
    # Make sure to update to the full absolute path to your math_server.py file
    args=["/path/to/math_server.py"],
)

async with stdio_client(server_params) as (read, write):
    async with ClientSession(read, write) as session:
        # Initialize the connection
        await session.initialize()

        # Get tools
        tools = await load_mcp_tools(session)

        # Create and run the agent
        agent = create_react_agent(model, tools)
        agent_response = await agent.ainvoke({"messages": "what's (3 + 5) x 12?"})

OpenAI 使用MCP

https://github.com/openai/openai-agents-python

提供什么样的MCP 服务

笔者看来,MCP 再简单不过了。关键是提供什么样的MCP 服务是关键。

Top 10 MCP 服务

  • File System MCP Server: 本地文件系统

  • GitHub MCP Server: 代码管理变得容易

  • Slack MCP Server: Chat Automation Hero

  • Google Maps MCP Server: 定位

  • Brave Search MCP Server: Web Surfing, AI Style

  • Bluesky MCP Server: 社交媒体变得简单

  • PostgreSQL MCP Server: Database Dynamo

  • Cloudflare MCP Server: 边缘计算

  • Raygun MCP Server: Error Tracking Extraordinaire

  • Vector Search MCP Server: Semantic Smarts

        MCP 出现,凸显了一个趋势,传统的互联网服务将会转换成面向AI 的MCP 服务。传统的互联网Web 服务主要是面向人的,核心是客户体验的前端技术。后台的API 主要是为前端提供的,并不公开。AI 时代到来之后,web 服务转向为AI 提供服务,实现机器可读性。MCP 可能成为这样的协议。

        除了一些通用的服务(搜索,地图)之外,会出现大量专业的MCP 服务,它们将是一种私有服务,或者是收费服务。比如:

  1.  多媒体服务 收听音乐,电影
  2. 新闻
  3. 自媒体
  4.  电子商务 购买商品
  5. 企业应用
  6. 获取生产现场的数据
  7. 智慧城市物联网数据

下面的网站中列出了4813个MCP 服务 。

https://mcp.so/

 工业控制领域的例子

      工业自动化行业普遍使用OPC UA 协议,可以编写一个MCP/OPCUA 的服务,实现大模型访问工业现场的数据。

 在这里要使用server-sent events (SSE) 的MCP 协议。也就是服务器能够主动发送事件给客户端。

结束语

        AI 时代,编程已经没有多少技术门槛了。关键是你能提供什么样的数据服务。如何真正地提升脑力劳动者的效率。

在自动化领域,有许多中方式来使用AI技术。也不一定要使用MCP,例如使用MQTT 消息系统,收到消息之后需要AI 发送给AI 的Agent 也可以。实现 AI as Service 的架构也可以。

    从当下的痛点中寻找需求。用AI 方式去解决。这才是最要紧的事情。

相关文章:

  • 广告牌变“高空炸弹“?智能预警终端筑起安全防线!
  • [原创](Modern C++)现代C++的关键性概念: 如何利用多维数组的指针安全地遍历所有元素
  • 解读Linux中的fork机制
  • kafka 报错消息太大解决方案 Broker: Message size too large
  • Error:Flash Download failed
  • 应用UID分配
  • 构建大语言模型应用:句子转换器(Sentence Transformers)(第三部分)
  • 2025NCTF--Web
  • 智慧电力:点亮未来能源世界的钥匙
  • 《Linux运维实战:Ubuntu 22.04配置pam实现密码复杂度策略》
  • 【计算机网络】OSI七层模型完全指南:从比特流到应用交互的逐层拆解
  • Java基础关键_031_反射(一)
  • WebRTC C++开发入门
  • 2007-2019年各省地方财政教育支出数据
  • AI 对话艺术:Prompt 设计技巧与案例解析
  • DriveDreamer动力学模块和博弈论优化器
  • 蓝桥杯备考:BFS之马的遍历
  • <AI>dify本地部署
  • 基于音频驱动的CATIA动态曲面生成技术解析
  • 【服务器操作指南 - GPU 使用与文件传输】轻松掌握 GPU 状态查看和服务器文件传输技巧
  • 印度空军为“阵风”战机换装国产导弹,以增强作战能力推动国防自主
  • 讲述“外国货币上的中国故事”,《世界钱币上的中国印记》主题书刊出版发布
  • 苏丹港持续遭无人机袭击,外交部:呼吁各方保护民用设施和平民安全
  • “80后”北大硕士罗婕履新甘肃宁县县委常委、组织部部长
  • 一旅客因上错车阻挡车门关闭 ,株洲西高铁站发布通报
  • 莫高义在第四届中国新闻发言人论坛开幕式上的致辞