MCP 到底是什么?一篇讲透:协议原理 + Bedrock 实战 + 安全防护

最近 MCP 这个词在技术社区频率很高。但很多文章讲得云里雾里,看完还是不知道它到底解决了什么问题。

简单说:MCP 让 Agent 调工具变得像装插件一样简单

没有 MCP 之前

Agent 要调外部工具(读文件、查数据库、发通知),你得手动写 function calling:定义 schema、写调用逻辑、处理鉴权、做错误重试。每个工具都要搞一遍。

工具少的时候还行,工具一多就是大量重复劳动。而且每个工具的接入方式不一样,维护成本高。

MCP 做了什么

MCP(Model Context Protocol)定义了一个标准协议:

  • MCP Server:工具提供方,按标准暴露能力
  • MCP Client:Agent/IDE 侧,按标准调用
  • 通信走 JSON-RPC(本地用 stdio,远程用 HTTP + SSE)

装一个 MCP Server,Agent 就获得了这个 Server 暴露的所有工具。不用写 function schema,不用写调用逻辑。

类比一下:MCP 之于 Agent,就像 USB 之于电脑。以前每个外设都要专门的接口和驱动,USB 统一了。

跟 Amazon Bedrock 怎么配合

Bedrock Agent 原生支持 MCP。架构很简单:

java 复制代码
Bedrock Agent
    ↓
MCP Client(内置)
    ↓
MCP Server (S3)      → 读写文件
MCP Server (DynamoDB) → 查数据
MCP Server (自建 API) → 业务逻辑

实战:写一个 S3 MCP Server

python 复制代码
from mcp.server import Server
import boto3, json

app = Server("s3-server")
s3 = boto3.client('s3', region_name='cn-northwest-1')

@app.tool()
async def list_files(bucket: str, prefix: str = "") -> str:
    """列出 S3 存储桶中的文件"""
    resp = s3.list_objects_v2(Bucket=bucket, Prefix=prefix, MaxKeys=50)
    files = [obj['Key'] for obj in resp.get('Contents', [])]
    return json.dumps(files, ensure_ascii=False)

@app.tool()
async def read_file(bucket: str, key: str) -> str:
    """读取 S3 文本文件"""
    # 白名单检查
    if bucket not in ["my-agent-bucket"]:
        return "错误:无权访问该存储桶"
    resp = s3.get_object(Bucket=bucket, Key=key)
    content = resp['Body'].read().decode('utf-8')
    return content[:10000]  # 防止撑爆 context

@app.tool()
async def write_file(bucket: str, key: str, content: str) -> str:
    """写入文本到 S3"""
    s3.put_object(Bucket=bucket, Key=key, Body=content.encode('utf-8'))
    return f"已写入: s3://{bucket}/{key}"

安全:三层控制

第一层 - MCP Server 代码里限制:白名单、参数校验、路径检查

第二层 - Server 的 IAM Role:只给 S3 的 Get/Put/List,限定特定 bucket

json 复制代码
{
    "Statement": [{
        "Effect": "Allow",
        "Action": ["s3:GetObject", "s3:PutObject", "s3:ListBucket"],
        "Resource": [
            "arn:aws-cn:s3:::my-agent-bucket",
            "arn:aws-cn:s3:::my-agent-bucket/*"
        ]
    }]
}

第三层 - Bedrock Agent 的 IAM Role:控制 Agent 能调哪些 MCP Server

三层取交集,Agent 只能做三层都允许的操作。

日志

MCP Server 的调用日志 + CloudTrail 的 API 调用日志,形成完整链路。

什么场景适合 MCP

  • ✅ Agent 需要接入多个工具/服务
  • ✅ 工具需要被多个 Agent 复用
  • ✅ 需要在工具层面做权限控制
  • ⚠️ 只有一两个简单工具 → 直接 function calling 可能更简单

总结

MCP 把 Agent 的工具调用标准化了。配合 Amazon Bedrock,可以用 IAM 做权限、CloudTrail 做审计、VPC Endpoint 做网络隔离,形成完整的安全方案。

如果你的 Agent 要接多个云服务或内部 API,值得试试 MCP。


🔗 Amazon Bedrock:aws.amazon.com/cn/bedrock/ 🔗 Amazon Bedrock AgentCore:aws.amazon.com/cn/bedrock/... 🔗 CloudTrail:aws.amazon.com/cn/cloudtra...

相关推荐
xcl09251 小时前
幼儿托育系统开发实战:从需求分析到上线全流程指南
java·大数据·需求分析
吴声子夜歌1 小时前
ApacheCommons——commons-cli(命令行参数解析)
java·开发语言·apache
小小猪的春天1 小时前
Java 手写第一个 MCP Server:Spring AI MCP 半小时跑通
java·人工智能·spring boot·ai编程
find1star1 小时前
LeetCode 141:环形链表
java·算法·leetcode·链表
今天AI了吗2 小时前
DeepSeek Harness 深度解析:从评测架构到实战落地
java·网络·数据库·人工智能·架构·java-ee
许彰午2 小时前
27-AuthService登录链路
java·低代码·架构
泡海椒2 小时前
JQuick-Curl 性能分析:并发场景下的性能表现与调优,第三方接口调用不只要快写也要稳跑
java·开发语言·okhttp
Rain的Java大神之路3 小时前
JavaWeb开发如何解决跨域问题
java·前端·后端·nginx·web安全·面试·运维开发
自动化监测Learner4 小时前
Navicat Premium 17 中文版安装教程(2026最新版)
java·linux·数据库
那个松鼠很眼熟w4 小时前
4.Spring-Ai入门案例
java·人工智能·spring