news 2026/7/31 20:41:57

MCP 是什么?一文带你从原理到实战,轻松上手使用与开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MCP 是什么?一文带你从原理到实战,轻松上手使用与开发

1. 什么是 MCP?

MCP(Model Context Protocol,模型上下文协议)是 Anthropic 于 2024 年底推出的一种开放协议,旨在标准化 AI 模型与外部数据源、工具之间的通信方式。你可以把它理解为 AI 世界的「USB-C 接口」——通过统一的协议,让大语言模型能够方便地连接数据库、文件系统、API 服务等各种外部资源。

在 MCP 出现之前,每个 AI 应用接入外部工具都需要定制开发,接口五花八门,维护成本极高。MCP 的出现改变了这一局面:它定义了客户端、服务器和工具之间的标准交互方式,让开发者只需实现一次协议,就能让模型访问任意兼容 MCP 的资源。

2. MCP 的核心架构

MCP 采用客户端-服务器架构,包含三个核心角色:

  • MCP Host(宿主):运行 AI 模型的应用,如 Claude Desktop、Cursor、VS Code 等,负责发起请求并展示结果。
  • MCP Client(客户端):在 Host 内部与 MCP Server 建立连接的组件,负责协议通信。
  • MCP Server(服务器):暴露工具、资源和提示词的独立服务,可以是本地进程,也可以是远程服务。

一次典型的调用流程如下:

  1. Host 中的 AI 模型收到用户指令,判断需要调用外部工具。
  2. Client 通过 MCP 协议向 Server 发送工具调用请求。
  3. Server 执行实际操作(如查询数据库、调用 API),并返回结构化结果。
  4. Client 将结果回传给模型,模型据此生成最终回复。

3. MCP 的三大核心原语

MCP 协议定义了三种核心原语,理解它们是开发 MCP Server 的基础:

3.1 Tools(工具)

工具是模型可以调用的函数,例如「查询天气」「发送邮件」「执行 SQL」。每个工具都有名称、描述和参数定义(JSON Schema),模型根据描述决定何时调用。

3.2 Resources(资源)

资源是暴露给模型读取的数据,例如文件内容、数据库记录、API 响应。资源通过 URI 定位,支持只读访问,适合让模型获取上下文信息。

3.3 Prompts(提示词)

提示词是可复用的交互模板,定义了用户与模型之间的标准对话模式。例如「代码审查」「周报生成」等固定流程,可以封装为提示词供用户一键触发。

4. 环境准备

在开始实战之前,请确保你的开发环境满足以下要求:

  • Node.js 18 或更高版本(推荐 20+)
  • Python 3.10 或更高版本(用于 Python SDK 示例)
  • 一个支持 MCP 的客户端,如 Claude Desktop、Cursor 或 VS Code

安装 MCP 官方 SDK:

# 安装 TypeScript SDK npm install @modelcontextprotocol/sdk 安装 Python SDK pip install mcp

5. 实战一:用 TypeScript 开发一个天气查询 MCP Server

下面我们通过一个完整的示例,演示如何用 TypeScript 开发一个天气查询 MCP Server。这个 Server 暴露一个get_weather工具,接收城市名参数,返回模拟的天气数据。

5.1 初始化项目

mkdir mcp-weather-server cd mcp-weather-server npm init -y npm install @modelcontextprotocol/sdk zod

5.2 编写 Server 代码

创建server.ts文件:

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; // 创建 MCP Server 实例 const server = new McpServer({ name: "weather-server", version: "1.0.0", }); // 注册一个工具:查询天气 server.tool( "get_weather", "根据城市名称查询当前天气", { city: z.string().describe("城市名称,如 北京、上海") }, async ({ city }) => { // 这里可以替换为真实的天气 API 调用 const weatherData = { city, temperature: 25, condition: "晴", humidity: 40, }; return { content: [ { type: "text", text: JSON.stringify(weatherData, null, 2), }, ], }; } ); // 启动 Server,使用标准输入输出传输 const transport = new StdioServerTransport(); await server.connect(transport); console.error("Weather MCP Server 已启动");

5.3 编译并运行

npx tsc server.ts --outDir dist --module NodeNext --target ES2022 node dist/server.js

此时 Server 会在标准输入输出上监听 MCP 请求。你可以通过 MCP Inspector 或支持 MCP 的客户端连接测试。

6. 实战二:用 Python 开发一个数据库查询 MCP Server

接下来我们用 Python 开发一个数据库查询 Server,演示如何通过 MCP 让模型安全地执行 SQL 查询。

6.1 安装依赖

pip install mcp sqlite3

6.2 编写 Server 代码

创建db_server.py文件:

import sqlite3 from mcp.server.fastmcp import FastMCP 创建 MCP Server mcp = FastMCP("db-server") 初始化数据库 conn = sqlite3.connect(":memory:") cursor = conn.cursor() cursor.execute("CREATE TABLE users (id INTEGER, name TEXT, age INTEGER)") cursor.executemany( "INSERT INTO users VALUES (?, ?, ?)", [(1, "Alice", 30), (2, "Bob", 25), (3, "Charlie", 35)], ) conn.commit() @mcp.tool() def query_users(min_age: int = 0) -> str: """查询用户列表,可按最小年龄过滤""" cursor.execute("SELECT * FROM users WHERE age >= ?", (min_age,)) rows = cursor.fetchall() return "\n".join(str(row) for row in rows) @mcp.tool() def get_user(user_id: int) -> str: """根据 ID 查询单个用户""" cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,)) row = cursor.fetchone() return str(row) if row else "用户不存在" if name == "main": mcp.run()

6.3 运行 Server

python db_server.py

这个 Server 暴露了两个工具:query_usersget_user,模型可以根据用户问题自动选择合适的工具并传入参数。

7. 在客户端中配置和使用 MCP Server

开发完 Server 后,我们需要在客户端中配置才能使用。以 Claude Desktop 为例,编辑配置文件claude_desktop_config.json

{ "mcpServers": { "weather": { "command": "node", "args": ["/path/to/dist/server.js"] }, "database": { "command": "python", "args": ["/path/to/db_server.py"] } } }

重启客户端后,模型就能自动发现并调用这些工具。例如,你可以直接问:「北京今天天气怎么样?」模型会调用get_weather工具并返回结果。

8. MCP 的传输方式与安全考虑

MCP 支持两种主要传输方式:

  • stdio(标准输入输出):适用于本地进程,客户端直接启动 Server 子进程,通过标准输入输出通信,配置简单。
  • HTTP/SSE(Server-Sent Events):适用于远程服务,Server 部署在服务器上,客户端通过 HTTP 请求访问,支持跨网络调用。

在使用 MCP 时,需要注意以下安全事项:

  • 权限控制:Server 应实现最小权限原则,只暴露必要的工具和数据。
  • 输入校验:对模型传入的参数进行严格校验,防止注入攻击。
  • 审计日志:记录所有工具调用,便于追踪和排查问题。
  • 敏感数据保护:避免在工具返回结果中泄露密钥、密码等敏感信息。

9. MCP 的生态与未来展望

MCP 自发布以来,生态发展迅速。目前已有大量官方和社区维护的 Server,覆盖数据库、文件系统、浏览器自动化、开发工具、云服务等众多领域。主流 AI 客户端如 Claude Desktop、Cursor、VS Code、JetBrains 等都已原生支持 MCP。

MCP 的出现,让 AI 应用从「对话机器人」向「智能体(Agent)」演进迈出了关键一步。未来,随着协议不断完善和生态持续壮大,MCP 有望成为 AI 与外部世界交互的事实标准,让开发者能够以更低的成本构建强大的 AI 应用。

10. 总结

本文从概念、架构、核心原语到实战开发,系统介绍了 MCP 协议。我们通过 TypeScript 和 Python 两个完整示例,演示了如何开发 MCP Server 并在客户端中配置使用。MCP 的核心价值在于标准化和复用:一次开发,处处可用。无论你是 AI 应用开发者还是技术爱好者,掌握 MCP 都将为你的 AI 开发之路打开新的可能。

建议你动手实践本文的示例,并尝试接入真实的 API 或数据库,体验 MCP 带来的开发效率提升。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 20:41:27

解决90%的常见问题:CPA-Manager-Plus故障排查与性能优化

解决90%的常见问题:CPA-Manager-Plus故障排查与性能优化 【免费下载链接】CPA-Manager-Plus A self-hosted CPA / CLIProxyAPI management panel and AI gateway observability dashboard for requests, usage, cost, quota, failures, and account health. 项目地…

作者头像 李华
网站建设 2026/7/31 20:41:18

打造专属OpenWork工作流:自定义扩展与技能集成实战指南

打造专属OpenWork工作流:自定义扩展与技能集成实战指南 【免费下载链接】openwork The open-source alternative to Claude Cowork (powered by opencode) 项目地址: https://gitcode.com/GitHub_Trending/ope/openwork OpenWork作为Claude Cowork的开源替代…

作者头像 李华
网站建设 2026/7/31 20:39:14

泰国专业人力外包公司助力企业国际化发展

泰国专业人力外包公司为企业提供了多样化的服务,以支持其国际化发展。这些公司在了解本地市场和法规的基础上,帮助企业实现合规用工和成本控制。同时,它们还提供灵活的服务模式,满足企业在薪酬管理和员工福利等方面的需求。这种专…

作者头像 李华
网站建设 2026/7/31 20:36:53

为什么70%的BI项目在第二年停滞?客户成功视角的续约任务清单

导语 根据艾瑞咨询《2025年中国BI市场报告》统计,超70%已上线的BI项目在上线满一年后就会陷入使用停滞——这个数字是很多企业采购BI时没有预料到的。多数企业都会把BI项目的成功节点定在「上线验收」:只要完成数据连接、做出核心看板、通过各部门评审&a…

作者头像 李华