2024年,Anthropic推出了MCP(Model Context Protocol)协议,这是一个让大模型能连接外部工具和数据源的开放协议。MCP推出之后,很快得到了行业的广泛支持,现在已经有很多MCP服务器和客户端了。

但很多人对MCP还不太了解,不知道它是什么、怎么配置、怎么用。这篇文章就来详细介绍MCP协议,从基础概念到高级配置,帮你快速上手。

什么是MCP

先说说MCP是什么。

MCP的全称是Model Context Protocol,模型上下文协议。它是一个开放的、标准化的协议,用来连接大语言模型(LLM)和外部工具、数据源。

在MCP出现之前,大模型连接外部工具的方式很混乱。每个模型、每个应用都有自己的工具调用方式,开发者需要为每个平台单独写适配代码,很麻烦。而且工具的能力有限,只能做一些简单的操作。

MCP的目标是解决这个问题,提供一个统一的、标准化的协议,让大模型能方便地连接各种外部工具和数据源。有了MCP,大模型就能:

  • 读取本地文件和文件夹
  • 连接数据库,查询数据
  • 调用外部API,获取实时信息
  • 操作开发工具,比如Git、Docker
  • 连接SaaS服务,比如Notion、Slack、GitHub

MCP的架构很简单,有三个核心角色:

  • Client(客户端):大模型应用,比如Claude Desktop、Cursor、其他支持MCP的AI应用。客户端负责和大模型交互,把大模型的请求转发给MCP服务器。
  • Server(服务器):MCP服务器,负责提供具体的工具和数据。每个MCP服务器封装了一组工具,比如文件操作、数据库查询、API调用。
  • Host(宿主):运行MCP服务器的环境,比如本地进程、远程服务、云函数。

客户端和服务器之间通过JSON-RPC通信,支持stdio(标准输入输出)和HTTP/SSE(Server-Sent Events)两种传输方式。

这个架构的好处是:开发者只需要写一个MCP服务器,就能在所有支持MCP的客户端上使用;用户只需要配置一次MCP服务器,就能在所有支持MCP的应用中使用。

MCP能做什么

MCP的能力很强大,说说它能做什么。

第一,文件系统操作。MCP可以让大模型读取、创建、修改本地文件。比如,你可以让Claude读取某个文件夹里的所有文件,分析代码,然后修改文件。这对于代码审查、文档生成、批量处理文件很有用。

第二,数据库查询。MCP可以连接数据库,让大模型用自然语言查询数据。比如,你可以问"上个月销售额最高的前10个产品是什么",大模型会自动生成SQL,查询数据库,返回结果。

第三,API调用。MCP可以连接外部API,让大模型获取实时信息。比如,连接天气API查询天气,连接股票API查询股价,连接新闻API获取最新新闻。

第四,开发工具集成。MCP可以连接Git、Docker、Kubernetes等开发工具,让大模型帮你管理代码、部署应用、排查问题。

第五,SaaS服务连接。MCP可以连接Notion、Slack、GitHub、Google Drive等SaaS服务,让大模型帮你管理笔记、发送消息、处理Issue、整理文件。

第六,自定义工具。你可以写自己的MCP服务器,封装任何你想要的工具。只要符合MCP协议,就能在支持MCP的客户端中使用。

总的来说,MCP让大模型从一个"只能聊天的AI"变成了一个"能连接外部世界的智能助手",大大扩展了大模型的能力边界。

基础配置:安装和使用

说说MCP的基础配置,怎么安装和使用。

目前支持MCP的客户端主要有:

  • Claude Desktop(Anthropic官方的桌面应用)
  • Cursor(AI代码编辑器)
  • Cline(VS Code的AI编程插件)
  • 其他支持MCP的AI应用

以Claude Desktop为例,配置MCP服务器的方法是修改配置文件。

Claude Desktop的配置文件位置:

  • macOS: ~/Library/Application Support/Claude/claudedesktopconfig.json
  • Windows: %APPDATA%\Claude\claudedesktopconfig.json

配置文件的格式是JSON,里面有一个mcpServers字段,用来配置MCP服务器。

一个最简单的配置例子:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/folder"]
    }
  }
}

这个配置添加了一个官方的文件系统MCP服务器,允许大模型访问指定文件夹里的文件。

配置好之后,重启Claude Desktop,就能在对话中使用这个MCP服务器了。你可以让Claude读取文件夹里的文件,分析内容,甚至修改文件。

除了文件系统,官方还提供了很多MCP服务器,比如:

  • @modelcontextprotocol/server-github:连接GitHub
  • @modelcontextprotocol/server-postgres:连接PostgreSQL数据库
  • @modelcontextprotocol/server-fetch:获取网页内容
  • @modelcontextprotocol/server-memory:让大模型有记忆能力

这些官方服务器都可以通过npx直接运行,不需要额外安装。

配置一个自定义MCP服务器

除了用官方的MCP服务器,你也可以配置第三方的或者自己写的MCP服务器。

配置第三方MCP服务器的方法和官方的一样,在配置文件里添加服务器信息。比如,配置一个社区的Notion MCP服务器:

{
  "mcpServers": {
    "notion": {
      "command": "npx",
      "args": ["-y", "@notionhq/notion-mcp-server"],
      "env": {
        "NOTION_TOKEN": "your-notion-integration-token"
      }
    }
  }
}

注意这里用了env字段来设置环境变量,很多MCP服务器需要API密钥或其他配置,都是通过环境变量传递的。

如果MCP服务器是Python写的,可以用uvpython来运行:

{
  "mcpServers": {
    "my-python-server": {
      "command": "uv",
      "args": ["run", "mcp-server.py"]
    }
  }
}

如果MCP服务器是远程的(通过HTTP/SSE访问),配置方式是:

{
  "mcpServers": {
    "remote-server": {
      "url": "https://example.com/mcp"
    }
  }
}

配置好之后,重启客户端,MCP服务器就会自动加载。你可以在客户端的MCP管理界面看到已连接的服务器和它们提供的工具。

写一个简单的MCP服务器

如果你想自己写MCP服务器,也很简单。MCP提供了多种语言的SDK,包括TypeScript、Python、等。

用TypeScript写一个最简单的MCP服务器:

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

const server = new McpServer({
  name: "hello-server",
  version: "1.0.0"
});

server.tool("greet", "Say hello to someone", {
  name: z.string().describe("Name of the person")
}, async ({ name }) => {
  return {
    content: [{ type: "text", text: `Hello, ${name}!` }]
  };
});

const transport = new StdioServerTransport();
await server.connect(transport);

这个服务器提供了一个greet工具,输入一个名字,返回问候语。虽然简单,但它展示了MCP服务器的基本结构:创建服务器、定义工具、连接传输层。

用Python写也很简单:

from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp.types import Tool, TextContent

server = Server("hello-server")

@server.list_tools()
async def list_tools():
    return [Tool(name="greet", description="Say hello", inputSchema={"type": "object", "properties": {"name": {"type": "string"}}})]

@server.call_tool()
async def call_tool(name, arguments):
    if name == "greet":
        return [TextContent(type="text", text=f"Hello, {arguments['name']}!")]

async with stdio_server() as (read, write):
    await server.run(read, write)

写好之后,在客户端配置里指向这个脚本,就能使用了。

高级配置:安全和权限

MCP让大模型能访问外部工具和数据,这带来了便利,也带来了安全风险。高级配置中,安全和权限很重要。

第一个安全措施是限制文件系统访问范围。文件系统MCP服务器应该只允许访问必要的文件夹,不要给整个根目录的权限。比如,只允许访问项目文件夹,不要允许访问整个用户目录。

第二个安全措施是使用环境变量管理密钥。API密钥、数据库密码等敏感信息,应该通过环境变量传递,不要写在配置文件里。配置文件可能会被分享或提交到版本控制,密钥写在里面很危险。

第三个安全措施是网络隔离。远程MCP服务器应该放在内网或者VPN后面,不要直接暴露在公网上。如果必须暴露在公网,要加上认证(比如API Key、OAuth)和HTTPS加密。

第四个安全措施是权限最小化。每个MCP服务器只给它必要的权限,不要给多余的权限。比如,数据库MCP服务器只给只读权限,不要给写权限,除非确实需要。

第五个安全措施是审计日志。重要的MCP服务器应该开启审计日志,记录大模型调用了哪些工具、做了什么操作。这样出了问题可以追溯。

第六个安全措施是沙箱运行。对于不可信的MCP服务器,应该在沙箱环境中运行,限制它的系统访问权限。比如用Docker容器运行,限制文件系统和网络访问。

安全是MCP使用中很重要的一环,不要忽视。大模型的行为有时候不可预测,给它太多权限可能会导致意外的操作。

高级配置:多服务器管理

如果你用了很多MCP服务器,管理起来会比较复杂。说说多服务器管理的一些技巧。

第一,用配置文件管理所有服务器。把所有MCP服务器的配置都写在一个配置文件里,方便管理和备份。不要分散在多个地方。

第二,给服务器起有意义的名字。配置里的服务器名(比如filesystemnotiongithub)应该清晰明了,让人一看就知道这个服务器是做什么的。

第三,定期清理不用的服务器。不用的MCP服务器及时从配置里删掉,减少加载时间和安全风险。

第四,用环境变量区分不同环境。比如,开发环境和生产环境用不同的MCP服务器配置,通过环境变量切换。

第五,监控服务器状态。MCP服务器可能会崩溃或者无响应,客户端一般会有错误提示。如果某个服务器经常出问题,检查一下配置和日志。

常见问题和排查

说说使用MCP时常见的问题和排查方法。

第一个问题:MCP服务器不显示或无法连接。

排查方法:

  • 检查配置文件格式是否正确(JSON格式,逗号、括号有没有错)
  • 检查命令和参数是否正确(比如npx的路径、脚本的路径)
  • 检查环境变量是否设置正确
  • 检查MCP服务器是否能独立运行(在命令行里手动运行一下,看有没有报错)
  • 重启客户端,有时候配置修改后需要重启才能生效

第二个问题:MCP服务器连接了但工具用不了。

排查方法:

  • 检查工具名称和参数是否正确
  • 检查大模型是否正确调用了工具(有时候大模型会忘记用工具,或者用错参数)
  • 检查MCP服务器的日志,看有没有报错
  • 确认客户端支持该工具的类型(有些客户端可能不支持某些高级工具类型)

第三个问题:MCP服务器运行慢或超时。

排查方法:

  • 检查服务器的性能,是不是计算量太大
  • 检查网络连接,远程服务器可能有网络延迟
  • 增加超时时间(有些客户端可以配置超时时间)
  • 优化MCP服务器的代码,减少响应时间

第四个问题:权限错误。

排查方法:

  • 检查文件系统权限,确保MCP服务器有读写指定文件夹的权限
  • 检查API密钥是否正确、是否有权限
  • 检查数据库连接配置和权限
  • 检查防火墙和网络安全组设置

如果以上方法都解决不了,可以去MCP的GitHub仓库或社区论坛搜索相关问题,或者提交issue。

MCP的未来

MCP是一个很有前景的协议,它的未来发展方向包括:

第一,更丰富的工具类型。目前MCP主要支持工具调用,未来可能会支持更多类型的交互,比如主动通知、流式数据、实时协作等。

第二,更完善的安全机制。包括细粒度的权限控制、沙箱运行、审计日志、安全认证等。

第三,更广泛的生态支持。越来越多的AI应用会支持MCP,越来越多的服务会提供MCP服务器。MCP可能会成为AI应用连接外部世界的标准协议。

第四,更好的开发工具。包括MCP服务器的脚手架、调试工具、测试框架、市场平台等,让开发者更容易创建和分发MCP服务器。

第五,标准化和治理。MCP是开放协议,未来会有更完善的标准制定和治理机制,确保协议的一致性和互操作性。

MCP才刚刚起步,未来的发展空间很大。

写在最后

MCP(Model Context Protocol)是一个让大模型连接外部世界的开放协议,它大大扩展了大模型的能力边界。通过MCP,大模型可以读取文件、查询数据库、调用API、操作开发工具、连接SaaS服务。

配置MCP并不复杂,只需要在客户端的配置文件里添加MCP服务器的信息就行。官方提供了很多现成的服务器,你也可以自己写自定义的服务器。

但MCP也带来了安全风险,使用时要注意权限控制、密钥管理、网络隔离等安全措施。

如果你还没用过MCP,建议试试。从一个简单的文件系统服务器开始,体验一下大模型连接外部工具的能力。你会发现,有了MCP之后,大模型变得更强大、更实用了。

MCP是AI应用发展的一个重要方向,未来会有越来越多的应用支持它。早点了解和使用MCP,能让你在AI时代占得先机。

希望这篇文章能帮你快速上手MCP。如果你有什么问题或者使用经验,欢迎交流讨论。