什么是MCP
大模型和外部工具交互的标准化协议,官方网址:https://modelcontextprotocol.io/docs/getting-started/intro
模型上下文协议(MCP ModelContextProtocol)正迅速成为AI领域的核心基础设施标准,它通过标准化大语言模型与外部工具的交互方式,解决了AI应用开发中的关键瓶颈,推动了智能体从实验室走向商业化的进程。这一由Anthropic于2024年11月开源的协议,已被OpenAI、阿里云、腾讯、字节跳动等全球科技巨头广泛采纳,形成了一场静默的AI革命。MCP的流行不仅源于其技术创新,更在于它满足了AI产业从单体智能向互联网络转变的迫切需求,为AI应用的规模化落地提供了关键支撑。
可以将 MCP 想象成用于 AI 应用程序的 USB-C 端口。正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方式一样,MCP 也提供了一种将 AI 模型连接到不同数据源和工具的标准化方式。

MCP原理
MCP的核心原理

MCP服务应用

MCP 的核心原理是将互联网服务(高德、谷歌)或本地操作系统 API(文件系统、数据库、终端)封装成 AI 智能体能够理解和使用的 Tools 工具,让 AI 智能体能够自由地调用这些 Tools 工具实现复杂的业务逻辑和功能。
我们可以在ModelScope市面上的一些各个方面的MCP服务,地址:https://modelscope.cn/mcp
MCP的优势
解决了智能体开发过程中的关键效率问题
MCP之所以迅速火爆,首先在于它解决了AI应用开发中的关键痛点。传统模式下,大模型与外部工具的集成需要为每个工具单独开发接口,形成了”M个智能体×N个工具“的复杂度。
MCP通过标准化交互规则,将复杂的”M×N”集成简化为”M+N”模式,使开发者只需遵循协议标准,就能实现AI模型与各类工具的即插即用。这种标准化不仅降低了开发门槛,还提高了系统的可扩展性和互操作性。
基于MCP的智能体架构
graph TD
A[智能体] --> B[大模型]
A --> C[工具]
C --> D[本地工具 Function]
C --> E[远程工具 MCP]
E --> F[远程MCP Server]
E --> G[本地MCP Server]
MCP服务接入示例
接入MCP核心包
1 2 3 4
| # 用于自定义MCP开发服务 pip install mcp # langchian接入mcp服务 pip install langchain-mcp-adapters
|
高德MCP服务接入与智能体
高德MCP服务介绍,官方地址:https://lbs.amap.com/api/mcp-server/summary
第一步:MCP客户端开发
安装依赖:pip install langchain_mcp_adapters
获取高德应用key: https://lbs.amap.com/api/mcp-server/create-project-and-key
开发高德mcp客户端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
import asyncio import os
from dotenv import load_dotenv
load_dotenv() from langchain_mcp_adapters.client import MultiServerMCPClient
async def create_amap_mcp_client(): """创建MCP客户端""" amap_key = os.environ.get("AMAP_KEY")
client = MultiServerMCPClient({ "amap": { "url": f"https://mcp.amap.com/sse?key={amap_key}", "transport": "sse", } })
tools = await client.get_tools()
return client, tools
if __name__ == '__main__': client, tools = asyncio.run(create_amap_mcp_client()) print('-------------------------------查看是否创建完成客户端------------------------') print(client) print('-------------------------------查看提供的工具有哪些------------------------') print(tools)
|
第二步:创建智能体,集成MCP工具
- 获取mcp tools
- 创建智能体
- 创建提示词
- 异步运行智能体
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| import os
from dotenv import load_dotenv
load_dotenv() from langchain_mcp_adapters.client import MultiServerMCPClient
async def create_amap_mcp_client(): """创建MCP客户端""" amap_key = os.environ.get("AMAP_KEY")
client = MultiServerMCPClient({ "amap": { "url": f"https://mcp.amap.com/sse?key={amap_key}", "transport": "sse", } })
tools = await client.get_tools()
return client, tools from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate from langchain.agents import initialize_agent, AgentType
async def create_run_agent(): """创建智能体,集成MCP工具""" client, tools = await create_amap_mcp_client() qv_llm = ChatOpenAI( model=os.getenv("LLM_MODEL"), base_url=os.getenv("LLM_BASE_URL"), api_key=os.getenv("LLM_API_KEY"), streaming=True, ) agent = initialize_agent( tools=tools, llm=qv_llm, agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True, ) prompt_template = PromptTemplate.from_template( "你是一个智能助手,可以调用高德 MCP 工具。\n\n问题: {input}" )
prompt = prompt_template.format(input="提供北京南站的坐标") res = await agent.ainvoke(prompt) return res
|
基于高德MCP的复杂路径规划+可视化展示
增加文件工具及扩展智能体工具,文件工具需要安装依赖:pip install langchain_community
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| import asyncio import os
from dotenv import load_dotenv
load_dotenv() from langchain_mcp_adapters.client import MultiServerMCPClient
async def create_amap_mcp_client(): """创建MCP客户端""" amap_key = os.environ.get("AMAP_KEY")
client = MultiServerMCPClient({ "amap": { "url": f"https://mcp.amap.com/sse?key={amap_key}", "transport": "sse", } })
tools = await client.get_tools()
return client, tools
from langchain_openai import ChatOpenAI from langchain_community.agent_toolkits import FileManagementToolkit
from langchain.prompts import PromptTemplate from langchain.agents import initialize_agent, AgentType
async def create_run_agent(): """创建智能体,集成MCP工具""" client, tools = await create_amap_mcp_client()
file_toolkit = FileManagementToolkit(root_dir="/Users/jinglv/PycharmProjects/ai-agent-dev/temp") file_tools = file_toolkit.get_tools()
qv_llm = ChatOpenAI( model=os.getenv("LLM_MODEL"), base_url=os.getenv("LLM_BASE_URL"), api_key=os.getenv("LLM_API_KEY"), streaming=True, )
agent = initialize_agent( tools=tools + file_tools, llm=qv_llm, agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True, ) prompt_template = PromptTemplate.from_template( "你是一个智能助手,可以调用高德 MCP 工具。\n\n问题: {input}" )
prompt = prompt_template.format(input=""" 目标: - 明天上午10点我要从北京南站到北京望京SOHO - 线路选择:公路地址或打车 - 考虑出行时间和路线,以及天气状况和穿衣建议 要求: - 制作网页来展示出现线路和位置,输出一个HTML页面,将网页保存到:/Users/jinglv/PycharmProjects/ai-agent-dev/temp目录下 - 网页使用简约美观的页面风格,以及卡片展示 """) res = await agent.ainvoke(prompt) return res
if __name__ == '__main__': client, tools = asyncio.run(create_amap_mcp_client()) print('-------------------------------查看是否创建完成客户端------------------------') print(client) print('-------------------------------查看提供的工具有哪些------------------------') print(tools) res = asyncio.run(create_run_agent()) print('-------------------------------智能体结合MCP客户端执行结果------------------------') print(res)
|