做了一个 AI Agent,需要它读 S3 文件、查 DynamoDB、调内部 API。每个工具都要写 function calling 的 schema 和调用逻辑,工具一多维护成本很高。有没有标准化的方案?

有。MCP(Model Context Protocol)就是解决这个问题的。

MCP 是什么

一句话:Agent 调工具的标准协议

工具提供方按 MCP 规范暴露能力(MCP Server),Agent 侧按规范调用(MCP Client)。通信走 JSON-RPC。

核心价值:装一个 Server = 获得一组工具。不用手写 function schema,不用手写调用逻辑。

跟传统 function calling 的区别

传统方式:每个工具手写 schema + 手写调用代码 + 手写鉴权

MCP 方式:Server 暴露工具定义(名称、参数、描述),Client 自动发现并调用

好处是标准化和复用。同一个 S3 MCP Server,可以被多个不同的 Agent 使用。

用 Amazon Bedrock 跑 MCP

Bedrock Agent 原生支持 MCP Client。接入流程:

1. 写一个 MCP Server

以 S3 文件操作为例:

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:
    """列出存储桶中的文件"""
    resp = s3.list_objects_v2(Bucket=bucket, Prefix=prefix, MaxKeys=50)
    return json.dumps([obj['Key'] for obj in resp.get('Contents', [])], ensure_ascii=False)

@app.tool()
async def read_file(bucket: str, key: str) -> str:
    """读取文本文件"""
    if bucket not in ["my-agent-bucket"]:
        return "无权访问"
    resp = s3.get_object(Bucket=bucket, Key=key)
    return resp['Body'].read().decode('utf-8')[:10000]

Server 里可以做白名单、参数校验、长度限制等安全检查。

2. 配 IAM 权限

给 MCP Server 一个最小权限 IAM Role:

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

只给特定 bucket 的读权限。

3. 在 Bedrock Agent 中配置

把 MCP Server 注册到 Bedrock Agent,Agent 调用时自动走 MCP 协议。

安全要点

MCP 让工具接入变简单了,安全不能松:

  1. Server 层限权:代码里做白名单和参数校验
  2. IAM 双层控制:Server Role + Agent Role 取交集
  3. CloudTrail 审计:所有 API 调用有日志
  4. VPC 隔离:Server 跑在私有子网,通过 Endpoint 访问服务

适用场景

  • Agent 需要接入多个工具/服务 → MCP
  • 工具需要被多个 Agent 复用 → MCP
  • 只有一两个简单工具 → function calling 可能更直接

两种方式不冲突,按需选择。


🔗 Amazon Bedrock:https://aws.amazon.com/cn/bedrock/
🔗 Amazon Bedrock AgentCore:https://aws.amazon.com/cn/bedrock/agentcore/
🔗 IAM:https://docs.aws.amazon.com/iam/

标签: none

添加新评论