最近 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...