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

15 阅读3分钟

最近 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。架构很简单:

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

实战:写一个 S3 MCP Server

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

{
    "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…