在传统方式的大语言模型应用开发期间,针对每一个工具去撰写function calling的schema以及调用逻辑,这不但繁杂琐碎,并且伴随工具数量的增多,维护成本呈现出指数级的攀升态势。MCP也就是Model Context Protocol,作为一套开放的标准,恰恰是为了化解这一痛点才产生的,它使得AI Agent与工具之间的交互变得如同即插即用那般简易。
本质上,MCP 是一个统一的协议层,它定义了 AI 应用发现以及调用外部工具的方式。工具提供方依照 MCP 规范,把自身能力封装成一个 Server,比如专门处理 S3 文件操作的 Server。作为 Client 的 Agent,借助 JSON-RPC 协议与 Server 进行通信。
这种设计引发出革故鼎新的改变,即装设一个MCP Server,就等同于给Agent嵌入了一整套工具范畴的能力,开发者原本需为每个工具亲自撰稿繁杂的JSON schema,眼下也不用再操心这项事务了,并且也不用去关注最底层的调用逻辑究竟是怎样得以施行的,所有工具的元数据均是由Server自行予以披露的。
在传统的function calling模式当中,每当接入任意一个全新的工具之时,开发者无一例外都必然得历经手写输入输出schema这一重复劳动,还得编写调用代码,同时要处理鉴权逻辑。比如以读取S3文件这一情况来说,需要去定义参数类型,明确必填项,给出描述,并且还要编写boto3代码。
原来的服务模式被 MCP 完全改变了,Server 会主动给 Client 提供工具定义列表,这个列表有名称、参数结构以及功能描述,Agent 能够动态获取这些信息,并且按照需求去调用,这表明同一个 S3 MCP Server 能够同时为多个不一样的 Agent 服务,达成了工具能力的标准化复用。
亚马逊的 Bedrock Agent 已然原生性地集成了 MCP Client 的能力,其接入的流程相当明晰。首先,要去开发一个 MCP Server ,以 S3 文件操作作为示例,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:
"""列出存储桶中的文件"""
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]
随后是IAM权限配置,给这个MCP Server分配一个具备最小权限的IAM Role,比如说仅准许读取特定S3 Bucket的特定前缀,最后于Bedrock Agent控制台里完成MCP Server的注册,如此Agent调用时便会自动依照MCP协议与Server通信。
尽管 MCP 把工具接入予以了简化,然而安全防线得一层一层地设置防线。其中的第一层是 Server 这种自己限定权限,在代码里达成严谨的参数校验以及白名单机制。第二层是 IAM 进行双重控制,Server Role 和 Agent Role 去获取交集权限,以此保障最小化的授权。
{
"Statement": [{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": [
"arn:aws-cn:s3:::my-agent-bucket",
"arn:aws-cn:s3:::my-agent-bucket/*"
]
}]
}
处于第三层的是审计追踪,任何借助 MCP 而发起的 API 调用,均会被 CloudTrail 予以记录,如此一来便于在事后进行追溯。第四层为网络隔离,会把 MCP Server 部署于私有子网当中,借助 VPC Endpoint 去访问 AWS 服务,以此来规避公网暴露所带来的风险。
对工具数量众多且需被好几个 Agent 重复使用的情形而言,MCP 是最为适配的,像企业内部的标准 API 网关,还有统一的数据访问层这类情况。一旦工具数量超出 10 个,MCP 所带来的维护效率提高就会极为显著。
对于那种简单的,且只是被单一 Agent 运用的工具而言,传统方式仍然具备效力。这两种模式并非相互排斥那种类型,能依据实在需求进行混合运用。关键之处在于构建统一标准,使得工具接入变成可预期、可管理情况。
如果你读完了这篇文章,你觉得在当下自己所进行的项目里,最为急切需要进行标准化的工具究竟是哪一个呢?欢迎在评论区域分享你个人的经验,点赞以便让更多的人能够看到这个具有实用价值的协议。
