游乐游手机版
首页/AI热点日报/热点详情

一文读懂MCP:大模型如何连接世界打造更智能的AI Agent

类型:热点整理2026-07-04
最近,AI技术圈中一个概念迅速走红——MCP[1](模型上下文协议,Model Context Protocol)。许多初次接触的开发者会疑惑:这不就是大模型调用外部工具吗?没错,其核心本质正是工具调用,但与以往的集成方式相比,差异非常显著。 过去,每当需要调用外部工具,开发人员必须手动编写大量适配

最近,AI技术圈中一个概念迅速走红——MCP[1](模型上下文协议,Model Context Protocol)。许多初次接触的开发者会疑惑:这不就是大模型调用外部工具吗?没错,其核心本质正是工具调用,但与以往的集成方式相比,差异非常显著。

过去,每当需要调用外部工具,开发人员必须手动编写大量适配代码,将工具强行嵌入应用中。如今,MCP的推出带来了一套标准化的调用协议——可以理解为给AI生态安装了一个“USB Type-C”接口。所有支持MCP的工具都能实现即插即用,直接对接大模型,开发者从此无需重复造轮子。

MCP协议定义及其对AI领域的影响

在深入探讨之前,先澄清一个可能的误解:此前Langchain曾发布过Agent Protocol,但该协议主要用于智能体之间的互操作,相对复杂。而MCP,凭借Cursor、Cline等编程工具的广泛采用,以及多智能体应用Manus的火爆,正在成为事实上的行业标准。

如上图所示,MCP协议采用客户端-服务器架构。大模型作为调用工具的一方扮演客户端角色,而提供工具的企业或个人则作为服务器端。在此之前,调用各类官方工具都需要自行编写代码。随着MCP的普及,工具提供方将主动融入该生态,直接提供MCP Server,为开发人员节省大量时间。至此,你应该对MCP有了基本了解。

1. 只有Claude能用?

先说结论:并非如此,绝大多数主流大模型都支持。MCP是一个通用协议,兼容多种模型。通过MCP SDK,我们可以获取可用工具列表,并将其提供给LLM——比如封装为OpenAI API调用的一部分,或者直接写入Prompt传给模型。示例代码如下:

    response = await self.session.list_tools()
    a vailable_tools = [{
        "name": tool.name,
        "description": tool.description,
        "input_schema": tool.inputSchema
    } for tool in response.tools]
     # Initial Claude API call
    response = self.anthropic.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=1000,
        messages=messages,
        tools=a vailable_tools
    )

2. 都有哪些MCP Server工具

目前,Anthropic官方已推出几类常见工具,包括数据存储、开发工具、Web与浏览器访问、Slack通讯、AI工具等。

此外,还有大量官方和社区维护的MCP Server,例如Obsidian Markdown Notes[3]、Qdrant[4]、Cloudflare[5]、Docker[6]、Kubernetes[7]、Todoist[8],甚至Spotify[9]。据聚合网站[10]统计,目前已收录3251个MCP Server和98个Clients,生态扩张速度惊人。

3. 怎么开发自己的MCP Server

以下示例摘自官方教程,演示如何开发一个天气查询服务。首先配置开发环境:

# Create a new directory for our project
uv init weather
cd weather
# Create virtual environment and activate it
uv venv
source .venv/bin/activate
# Install dependencies
uv add "mcp[cli]" httpx
# Create our server file
touch weather.py

然后初始化服务器:

from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP
# Initialize FastMCP server
mcp = FastMCP("weather")
# Constants
NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"

接着编写工具函数,与常规大模型工具类似,需要明确函数描述和参数说明,最终返回字符串供大模型理解:

@mcp.tool()
async def get_alerts(state: str) -> str:
    """Get weather alerts for a US state.

    Args:
        state: Two-letter US state code (e.g. CA, NY)
    """
    url = f"{NWS_API_BASE}/alerts/active/area/{state}"
    data = await make_nws_request(url)

    if not data or "features" not in data:
        return "Unable to fetch alerts or no alerts found."

    if not data["features"]:
        return "No active alerts for this state."

    alerts = [format_alert(feature) for feature in data["features"]]
    return "n---n".join(alerts)

运行服务器:

if __name__ == "__main__":
    # Initialize and run the server
    mcp.run(transport='stdio')

启动后,MCP Server即可对外提供服务。注意,实际应用中工具服务通常不会持续运行,而是在大模型需要调用时,由MCP客户端自动拉起。

客户端的实现更直接——即大模型应用端。通过MCP客户端初始化一个连接,指向上述脚本地址后,它会自动启动天气查询服务:

from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
...
class MCPClient:
    def __init__(self):
        # Initialize session and client objects
        self.session: Optional[ClientSession] = None
        self.exit_stack = AsyncExitStack()
        self.anthropic = Anthropic()
    # methods will go here

    async def connect_to_server(self, server_script_path: str):
      """Connect to an MCP server

      Args:
          server_script_path: Path to the server script (.py or .js)
      """
      ...
      command = "python" if is_python else "node"
      server_params = StdioServerParameters(
          command=command,
          args=[server_script_path],
          env=None
      )
      stdio_transport = await self.exit_stack.enter_async_context(stdio_client(server_params))
      self.stdio, self.write = stdio_transport
      self.session = await self.exit_stack.enter_async_context(ClientSession(self.stdio, self.write))

      await self.session.initialize()
      # List a vailable tools
      response = await self.session.list_tools()
      tools = response.tools
      print("nConnected to server with tools:", [tool.name for tool in tools])

再往下便是调用逻辑——通过这套协议SDK获取工具列表,然后传递给大模型即可。本质并不复杂,MCP所做的,就是让大模型应用能够自动通过这套通信机制调用外部工具。简言之,核心仍是工具调用,只不过将外部工具的通信协议标准化与自动化了。

async def process_query(self, query: str) -> str:
    """Process a query using Claude and a vailable tools"""
    messages = [
        {
            "role": "user",
            "content": query
        }
    ]

    response = await self.session.list_tools()
    a vailable_tools = [{
        "name": tool.name,
        "description": tool.description,
        "input_schema": tool.inputSchema
    } for tool in response.tools]

    # Initial Claude API call
    response = self.anthropic.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=1000,
        messages=messages,
        tools=a vailable_tools
    )

    # Process response and handle tool calls
    final_text = []

    assistant_message_content = []
    for content in response.content:
        if content.type == 'text':
            ...
        elif content.type == 'tool_use':
            tool_name = content.name
            tool_args = content.input
            # Execute tool call
            result = await self.session.call_tool(tool_name, tool_args)
            final_text.append(f"[Calling tool {tool_name} with args {tool_args}]")
            ....

    return "n".join(final_text)

前因后果已经清晰,无需再深入展开。

5. 是否只支持Python

当然不止。官方除Python SDK外,还提供了Typescript-sdk[11]、Java-sdk[12]、Kotlin-sdk[13]。其他语言也可根据标准specification[14]自行实现。

6. 底层通信协议

底层通信采用JSON-RPC[15],更多细节可查阅官方文档Transports[16]

7. 总结

展望未来,随着大模型应用不断深入,MCP Server将变得更加丰富和强大,各类应用也会逐步适配该协议,进一步降低AI接入门槛。正如OpenAI CEO Sam Altman所言,2025年将是“AI Agent之年”。或许用不了多久,我们只需一句话,就能让AI远程操控电脑、管理手机,彻底改变人机交互的方式。

来源:https://www.53ai.com/news/LargeLanguageModel/2025031945097.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。