bairui blog
1907 words
10 minutes
基于 MCP 的 AI Agent 应用开发实践

基于 MCP 的 AI Agent 应用开发实践#

MCP 让 Agent 应用与工具生态解耦

过去做 Agent 应用,一个常见做法是把工具调用逻辑直接写进 Agent 项目里:要读文件,就在项目里接文件系统;要查网页,就在项目里接浏览器;要查数据库,又写一套数据库适配。短期看很快,长期看会把应用、工具、权限、调试和部署绑死在一起。

MCP(Model Context Protocol)解决的不是“让模型更聪明”,而是给 Agent 应用提供一层稳定的工具协议。它把应用开发者和工具提供者拆开:应用只关心“有哪些能力可用、参数是什么、返回什么结果”,工具侧负责把真实系统封装成标准接口。

这篇文章基于一次 Agent 应用工程实践,重新梳理 MCP 在开发中的价值:它为什么出现、如何落地、会带来哪些工程收益,以及什么时候不该过度使用。

1. 为什么 Agent 需要协议层#

Agent 与传统 Chatbot 最大的区别,是它不只生成文本,还会调用工具完成任务。一次任务通常包含:

  1. 理解用户目标;
  2. 判断需要哪些外部信息;
  3. 调用工具获取上下文或执行动作;
  4. 根据工具结果继续规划;
  5. 最终输出答案或完成交付。

如果每个 Agent 应用都自己维护工具代码,会出现三个问题。

1.1 应用与工具耦合#

工具开发者必须理解 Agent 内部实现,Agent 开发者也要关心工具细节。工具一变,应用就跟着改;应用换框架,工具也要重新适配。

1.2 工具复用困难#

同一个“浏览器访问”能力,在不同 Agent 框架里可能有完全不同的函数签名、鉴权方式和返回结构。工具看似一样,实际上很难跨项目复用。

1.3 生态碎片化#

大量工具能力已经以 API、CLI、数据库或本地服务的形式存在,但缺少统一描述方式。Agent 能不能用,取决于每个项目是否手写适配层。

MCP 的价值就在这里:用统一协议把工具层抽出来,让 Agent 应用面向协议编程,而不是面向某个具体工具实现编程。

2. MCP 的基本分层#

一个典型 MCP 架构可以拆成四层:

层级职责关注点
Agent App理解目标、规划任务、组织上下文用户体验、任务策略、模型调用
MCP Client连接和管理多个 MCP Server协议通信、工具发现、调用转发
MCP Server封装具体工具或数据源参数校验、鉴权、执行逻辑
Tools / Resources真实能力来源文件、浏览器、数据库、搜索、业务 API

这种分层类似 Web 应用里的前后端分离。Agent App 不需要知道浏览器工具内部怎么启动,也不需要知道数据库工具如何连接,只要通过 MCP Client 调用标准化能力。

3. 一个应用如何接入 MCP#

实践中可以按下面的顺序做。

3.1 先定义任务边界#

不要一开始就接一堆工具。先明确 Agent 要解决什么任务,例如:

  • 读取本地或云端文件;
  • 查询网页并总结信息;
  • 调用命令行完成环境检查;
  • 访问业务 API 并生成报告;
  • 操作浏览器完成简单流程。

任务边界决定 MCP Server 的选择。如果任务只是问答,不需要工具;如果任务需要真实执行,就要把工具能力纳入协议层。

3.2 选择或实现 MCP Server#

常见工具可以直接使用现成 MCP Server,例如文件系统、浏览器、命令行、搜索、数据库等。业务专有能力则适合自己封装。

一个好的 MCP Server 应该满足:

  • 工具说明清晰,模型能理解什么时候调用;
  • 入参结构稳定,避免自然语言随意拼接;
  • 返回结果简洁,不把无关日志塞回上下文;
  • 错误信息可读,便于 Agent 自我修复;
  • 权限边界明确,避免让 Agent 拿到过大权限。

3.3 在 Agent 中注册工具#

注册工具时,不要只暴露函数名。更重要的是写清楚工具的适用场景、输入约束和输出语义。

例如浏览器工具可以说明:

适合处理需要打开网页、读取页面内容、点击元素或获取截图的任务。
不适合处理纯文本问答,也不应该用于访问未授权页面。

模型不是通过代码类型系统理解工具,而是通过工具说明理解工具。说明写得越稳定,工具调用越可控。

3.4 增加观测与调试#

MCP 接入后,调试重点会从“函数有没有跑”变成“模型为什么选这个工具”。因此需要保留:

  • 用户原始请求;
  • 模型选择工具前的上下文;
  • 工具入参;
  • 工具返回;
  • 模型如何使用返回结果。

这些记录会成为后续评测和优化 Agent 的基础数据。

4. MCP 带来的工程收益#

4.1 开发职责更清晰#

应用开发者专注任务体验,工具开发者专注能力封装。两边通过协议协作,减少互相侵入。

4.2 工具生态可以复用#

同一个 MCP Server 可以被多个 Agent 应用使用。只要协议不变,应用迁移或模型升级都不需要重写工具。

4.3 上下文更可控#

工具返回可以统一做裁剪、摘要、结构化,避免一次工具调用把大量噪声塞进模型上下文。

4.4 更容易评测#

当工具调用有标准日志后,就能评测:

  • 工具是否被正确选择;
  • 参数是否合理;
  • 结果是否被正确理解;
  • 是否存在多余调用;
  • 错误是否被合理兜底。

这比只看最终答案更接近 Agent 的真实质量。

5. 不要把 MCP 当银弹#

MCP 适合解决“工具接入标准化”的问题,但不是所有场景都需要 MCP。

如果只是一个固定流程、固定输入、固定输出的内部脚本,直接写函数可能更简单。如果工具权限极高、误操作成本很大,也不应该为了追求智能化而直接开放给模型。

更稳妥的做法是:

  1. 先从只读工具接入;
  2. 再接低风险写操作;
  3. 对高风险动作增加确认、审批或回滚机制;
  4. 对所有工具调用留日志;
  5. 用评测集持续验证工具选择是否稳定。

6. 我的实践结论#

MCP 的本质是一层工程边界。它让 Agent 应用不再把所有工具逻辑写死在自己体内,而是通过协议调用外部能力。

对于个人项目,MCP 能降低工具接入成本;对于长期项目,MCP 更重要的价值是可维护性:工具能独立演进,应用能独立迭代,评测也能基于标准调用链展开。

真正值得投入的方向,不是“接入越多工具越好”,而是把最常用、最稳定、最有复用价值的能力沉淀成协议化工具。这样 Agent 才不是一次性 Demo,而是可以长期维护的工程系统。

基于 MCP 的 AI Agent 应用开发实践
https://ruiboom.cn/posts/mcp-agent-app-development-practice/
Author
bairui
Published at
2025-05-20