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
-
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 服务,它们将是一种私有服务,或者是收费服务。比如:
- 多媒体服务 收听音乐,电影
- 新闻
- 自媒体
- 电子商务 购买商品
- 企业应用
- 获取生产现场的数据
- 智慧城市物联网数据
下面的网站中列出了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 方式去解决。这才是最要紧的事情。