关于 Bedrock Multi-Model
Bedrock Multi-Model 是供 MCP 客户端调用 AWS Bedrock 文本、图像、视频和嵌入模型的 MCP 服务。它将模型对比与盲评,以及图像编辑和媒体生成整合到一组 AWS 凭证下。
主要功能
- 01调用 33 个文本模型
- 02并排比较 2–5 个模型
- 03盲评并选出答案
- 04生成和编辑图像
- 05生成视频并比较嵌入
适用场景
- 01获取另一模型的审阅意见
- 02比较同一提示词的回答
- 03生成或变换图像
- 04生成视频或比较文本相似度
MCP 相关
向 MCP 客户端提供九种工具,以调用 AWS Bedrock 的文本、图像、视频和嵌入模型。客户端可询问、比较和评判文本模型,生成或编辑图像,启动并查看视频任务,以及计算嵌入相似度。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y bedrock-multi-model-mcpAWS_BEARER_TOKEN_BEDROCK密钥Bedrock API key. Leave unset to use the standard AWS credential chain.AWS_REGIONRegion for text and embedding calls (default us-east-1).AWS_PROFILENamed AWS profile, when using IAM credentials instead of a bearer token.BEDROCK_MCP_OUTPUT_DIRDirectory for generated images (default: cwd, or ~/bedrock-images).本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
9收录的工具列表 · 更新于 3 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 模型别名(例如 'claude-opus'、'kimi'、'mistral-large'、'nova-pro'、'deepseek')或完整 Bedrock 模型 ID |
| effort | enum | 否 | 适用于支持此参数的模型(Claude(Haiku 4.5 除外)、GPT-6.1、Grok 4.7、Kimi K3、Gemma 4,最高 xhigh)的思考深度和 token 消耗:low、medium、high、xhigh、max。Claude Opus 5.5 和 Haiku 5.5 默认为 medium。bedrock_ask 对其他模型不接受此参数;bedrock_compare 和 bedrock_judge 仅对支持此参数的模型应用该设置。low | medium | high | xhigh | max |
| prompt | string | 是 | 发送给模型的用户提示词 |
| schema | object | 否 | 回复必须符合的 JSON schema(结构化输出)。对象 schema 必须包含 additionalProperties: false。支持的模型:Claude、GPT-6.1、GPT-OSS、Grok 4.7、Kimi K3、Gemma 4、Mistral Large 3、Ministral 3、Qwen3、DeepSeek V3.2、MiniMax M2.5 和 Nemotron 3 Super;Nova、Pixtral 或 Magistral Small 不支持。 |
| system | string | 否 | 可选的系统提示词 |
| max_tokens | integer | 否 | 生成的最大 token 数 |
| temperature | number | 否 | 采样温度(0-1,默认值 0.7)。不支持此参数的模型会忽略该值。 |
详细介绍
bedrock-multi-model-mcp
面向 AWS Bedrock 的 MCP 服务——可通过任意模型处理文本、图像、视频和嵌入。可在 Claude Code(或任意 MCP 客户端)中使用 Claude、GPT、Grok、Kimi、Gemma、Mistral、Nova、Qwen、DeepSeek 等模型。
原因: Bedrock 已支持一个 AWS 账户访问来自 11 家文本模型提供商的模型, 但每个模型都有不同的模型 ID、推理配置文件、区域和请求格式。此服务通过 9 个 MCP 工具和一套 AWS 凭证将它们统一起来,Agent 可以让第二个模型进行审查、并排运行同一提示词来比较 5 个模型的回答、让评审模型盲测评分,或生成和编辑图像,而无需离开聊天或编写 SDK 代码。
概览:33 个来自 11 家提供商的文本模型、3 个图像模型、13 项图像编辑服务、 1 个视频模型和 3 个嵌入模型,全部以数据形式定义在 src/data/ 中, 并在启动时进行验证。 在 2026-10-18 的基准测试中,26 个文本模型的每次调用均成功响应。 此后,Claude Opus 5.5、Sonnet 5.5 和 Haiku 5.5,以及 0.7.0 版新增的来自 OpenAI、xAI、Moonshot AI、Google、MiniMax、NVIDIA、Mistral 和 Qwen 的 12 个模型加入了模型注册表;而 AWS 于 2026-09-30 移至 Legacy 的 5 个模型(Llama 4 Maverick 和 Scout、Llama 3.3 70B、Devstral 2、DeepSeek R1)则已移出。
这是 2026-10-18 的一次真实 bedrock_judge 运行,通过
scripts/call-tool.mjs 调用,使用的参数见
docs/demo/judge-args.json。输出行摘录自该次运行,并已对齐表格列;完整回复还包含评审模型的推理过程和全部三个回答。Llama 4 Maverick 此后已在 Bedrock 上移至 Legacy,并从模型注册表中移出,因此要重新运行,请将 llama4 换成其他模型。
工具
| 工具 | 描述 |
|---|---|
bedrock_ask | 向任意文本模型发送提示词。返回包含 Token 数量和延迟的响应。schema 返回符合 JSON Schema 的 JSON;effort 设置思考深度。 |
bedrock_compare | 将同一提示词并排发送给 2-5 个模型。比较质量、速度和风格。也支持 schema 和 effort。 |
bedrock_judge | 将同一提示词发送给 2-5 个模型,然后由评审模型盲评答案并选出优胜者,也可选择将答案合并为一个答案。如果评审模型支持,评审结果会以通过 Schema 检查的 JSON 返回。 |
bedrock_list_models | 列出可用文本模型及其别名、用途和能力。 |
bedrock_generate_image | 根据文本生成图像(Stable Image Ultra、SD3.5 Large、Stable Image Core)。将 PNG 保存到本地。 |
bedrock_edit_image | 使用 13 种 Stability AI 图像服务编辑或转换本地图像:修补、扩图、擦除、移除背景、查找并替换或重新着色对象、三种放大工具、草图和结构控制、风格指南和风格迁移。将 PNG 保存到本地。 |
bedrock_generate_video | 启动异步视频生成(Luma Ray 2)。输出到 S3。 |
bedrock_video_status | 检查视频生成任务的进度。 |
bedrock_embed_similarity | 对 2 个或更多文本进行嵌入(Titan、Cohere),并返回余弦相似度矩阵。 |
支持的模型
模型数据存放在 src/data/(text-models.json、image-models.json、image-edit-models.json、video-models.json、embedding-models.json)中——编辑这些文件即可添加或移除模型,无需修改代码。
文本(Converse API,以及用于 Gemma 4 的 bedrock-mantle)
| 提供商 | 模型 | 别名 |
|---|---|---|
| Anthropic | Claude Fable 5.1、Opus 5.5、Sonnet 5.5、Haiku 5.5(当前);Fable 5、Opus 5 / 4.6、Sonnet 5 / 4.6、Haiku 4.5(上一代) | fable、claude-opus、claude-sonnet、claude-haiku |
| OpenAI | GPT-6.1 Sol、GPT-6.1 Terra、GPT-OSS 120B、GPT-OSS 20B | gpt-sol、gpt-terra、gpt-oss、gpt-oss-20b |
| xAI | Grok 4.7 | grok |
| Moonshot AI | Kimi K3 | kimi |
| Mistral | Mistral Large 3、Ministral 3 14B、Magistral Small、Pixtral Large | mistral-large、ministral、magistral、pixtral |
| Amazon | Nova Pro、Nova 2 Lite、Nova Lite、Nova Micro | nova-pro、nova2-lite、nova-lite、nova-micro |
| Qwen | Qwen3 Coder Next、Qwen3 VL 235B、Qwen3 Next 80B A3B | qwen-coder、qwen-vl、qwen-next |
| DeepSeek | DeepSeek V3.2 | deepseek |
| Gemma 4 31B、Gemma 4 26B A4B、Gemma 4 E2B(bedrock-mantle) | gemma、gemma-4-26b、gemma-4-e2b | |
| MiniMax | MiniMax M2.5 | minimax |
| NVIDIA | Nemotron 3 Super 120B | nemotron |
Gemma 4 仅通过 Bedrock 的 OpenAI 兼容端点 bedrock-mantle 提供,而不通过 Converse 提供,因此这些条目带有 "api": "mantle",服务会改为调用它们的 Chat Completions API(https://bedrock-mantle.<region>.api.aws/openai/v1)。所有工具均可与这些模型配合使用,并可在 bedrock_compare 和 bedrock_judge 中与 Converse 模型并列使用。它们需要 AWS_BEARER_TOKEN_BEDROCK:AWS 也接受该端点上的 SigV4,但此服务不会为 mantle 请求签名。
Bedrock 上列出但不在注册表中的模型:GLM 5.3 和 Claude Mythos 5.1(访问权限按账户限制;两者都未通过 2026-11-01 的探测),以及 Grok 4.3(可在 bedrock-mantle 上回答,但已由 Grok 4.7 取代)。AWS 未列出任何 Active Meta 模型。
不带版本的层级别名(fable、claude-opus、claude-sonnet、claude-haiku、gpt-sol、gpt-terra)会指向该层级当前的模型;固定版本的别名(fable-5、claude-opus-5、claude-sonnet-5、claude-haiku-4.5、claude-opus-4.6、claude-sonnet-4.6)则可继续访问上一代模型。AWS 于 2026-09-22 宣布在 Bedrock 上提供 Claude Opus 5.5,于 2026-09-28 宣布提供 Sonnet 5.5,并于 2026-10-07 宣布提供 Haiku 5.5,因此不带版本的 claude-opus、claude-sonnet 和 claude-haiku 现在会解析为 5.5 模型。
这些条目之间唯一不同的是 temperature。Anthropic 已弃用 Claude Opus 4.7 及更高版本的 temperature / top_p / top_k,非默认值会导致 400 错误,因此 text-models.json 将这些条目标记为 noTemperature,此服务会省略这些参数——虽然接受 temperature 参数,但不会生效。这三款 5.5 模型也会返回相同的 400 错误(于 2026-10-21 探测);GPT-6.1 Sol 和 Terra、Grok 4.7 以及 Kimi K3 也会如此(“This model doesn't support the temperature field”,于 2026-11-01 探测)。Gemma 4 和其他开放权重模型支持该参数。Claude Haiku 4.5、Opus 4.6 和 Sonnet 4.6 仍会遵循此参数,因此若要在 Claude 模型上设置该参数,请固定使用 claude-sonnet-4.6 或 claude-haiku-4.5。
text-models.json 中的 maxTokens 值是此服务在调用未指定 max_tokens 时发送的默认输出上限——有意设得低于模型自身的上限(Anthropic 文档说明,Fable 5.1、5.5 和 5 的最大输出为 128K,Haiku 4.5 为 64K)。单次调用时传入 max_tokens 即可提高上限。
结构化输出和推理强度
bedrock_ask 和 bedrock_compare 上的 schema 会将 JSON Schema 作为 Converse
outputConfig.textFormat 发送,因此回复是符合该 Schema 的 JSON,并以美化格式显示。
对象 Schema 需要 "additionalProperties": false;Bedrock 会对数值和字符串长度约束(如
minimum、maxLength 等)返回 400。已在注册表中的每个模型上进行测试(2026-10-21,以及新添加模型的
2026-11-01):全部 10 个 Claude 模型、GPT-6.1 Sol 和 Terra、两种 GPT-OSS 模型、Grok 4.7、Kimi K3、Mistral Large 3、
Ministral 3、全部 3 种 Qwen3 模型、DeepSeek V3.2、MiniMax M2.5、Nemotron 3 Super 和
3 种 Gemma 4 模型均支持该功能(在 bedrock_list_models 中显示为 structured_output;Gemma 会将其
作为 Chat Completions response_format 发送)。Nova 和 Pixtral 会回复“This
model doesn't support the outputConfig field”,而 Magistral Small 虽接受该字段,却会
忽略 Schema,因此本服务会在调用产生费用前拒绝该请求。GPT-OSS 会在 JSON 前多输出一个字符(B{...});
回复解析器会跳过第一个左花括号之前的所有内容。
effort(low、medium、high、xhigh、max)通过 Converse
outputConfig.effort 设置思考深度和 Token 消耗。除 Haiku 4.5 外,所有 Claude 模型都支持该参数;
GPT-6.1 Sol 和 Terra、Grok 4.7 以及 Kimi K3 也支持(已于 2026-11-01 测试)。Gemma 4
将 low 至 xhigh 作为 Chat Completions reasoning_effort 接收,但对 max 会返回
400(“not supported with this model”)。Claude
Opus 5.5 和 Haiku 5.5 默认使用 medium,其他 Claude 模型默认使用 high。在
2026-10-21,对“How many primes are below 100?”这个问题,Haiku 5.5 在 low 下消耗 3 个输出 Token,
在 max 下消耗 60 个,答案相同。对于不支持 effort 的模型,bedrock_ask 会拒绝该参数;
bedrock_compare 和 bedrock_judge 只会将其应用于支持该参数的候选模型,因此混合列表中的 Claude 答案也可以用同一个值调整。
图像(InvokeModel API)
| 模型 | 别名 | 区域 |
|---|---|---|
| Stable Image Ultra(默认) | stable-ultra | us-west-2 |
| Stable Diffusion 3.5 Large | sd3.5 | us-west-2 |
| Stable Image Core | stable-core | us-west-2 |
Stability 模型接收的是宽高比,而不是像素尺寸。width 和
height 参数只用于选择最接近的受支持比例(1:1、16:9、9:16、
3:2、2:3、4:5、5:4、21:9、9:21);输出像素尺寸由模型决定。bedrock_generate_image
报告的尺寸是从保存的 PNG 中读取的,因此是实际输出尺寸,而非请求的尺寸。
图像编辑(InvokeModel API)
bedrock_edit_image 接受本地 PNG、JPEG 或 WebP(image_path)以及一个 operation。
每个操作对应 Stability AI 的一种图像服务,通过其位于 us-west-2 的美国推理配置文件
(us.stability.*)调用。
| 操作 | 服务 | 除图像外还需要 | 还接受 |
|---|---|---|---|
inpaint | Stable Image Inpaint | prompt | mask_path、grow_mask |
outpaint | Stable Image Outpaint | left、right、up、down(像素)中的一个 | prompt、creativity |
erase | Stable Image Erase Object | - | mask_path、grow_mask |
remove-background | Stable Image Remove Background | - | - |
search-replace | Stable Image Search and Replace | prompt、search_prompt | grow_mask |
search-recolor | Stable Image Search and Recolor | prompt、select_prompt | grow_mask |
upscale-fast | Stable Image Fast Upscale | - | - |
upscale-conservative | Stable Image Conservative Upscale | prompt | creativity |
upscale-creative | Stable Image Creative Upscale | prompt | creativity |
control-sketch | Stable Image Control Sketch | prompt | control_strength |
control-structure | Stable Image Control Structure | prompt | control_strength |
style-guide | Stable Image Style Guide | prompt | fidelity、aspect_ratio |
style-transfer | Stable Image Style Transfer | style_image_path | prompt、composition_fidelity、style_strength、change_strength |
大多数操作还接受 negative_prompt、seed 和 style_preset。如果操作不接受某个字段,或缺少必填字段,系统会在调用计费前拒绝请求。若未提供 mask_path,inpaint 和 erase 会使用输入图像的 Alpha 通道作为蒙版。系统只会读取并发送 PNG、JPEG 和 WebP 文件,因此即使路径输入错误,也不会将其他本地文件发送到 Bedrock。每次调用按图像计费;Conservative 和 Creative Upscale 的费用是其他服务的数倍
(AWS Bedrock 定价)。
视频(Async API)
| 模型 | 别名 | 时长 | 分辨率 | 区域 |
|---|---|---|---|---|
| Luma Ray 2 | luma-ray、ray2 | 5s 或 9s | 720p | us-west-2 |
输出 S3 存储桶必须位于 us-west-2(与模型所在区域相同)。
AWS 将 Amazon Nova Canvas/Reel 和 Titan Image 标记为生命周期结束后,我们移除了这些模型(Nova Canvas 和 Nova Reel 的生命周期结束日期为 2026-09-30)。注册表仅提供 ACTIVE 模型:AWS 会阻止新客户使用 Legacy 模型。npm run lifecycle 会针对 AWS 的公开生命周期页面检查每个注册表 ID(无需凭证);CI 每周以及每次注册表变更时都会运行此检查。
嵌入(InvokeModel API)
| 模型 | 别名 | 维度 |
|---|---|---|
| Amazon Titan Text Embeddings V2 | titan-v2 | 1024 |
| Amazon Titan Multimodal Embeddings | titan-multimodal | 1024 |
| Cohere Embed v4 | cohere | 1536 |
bedrock_embed_similarity 只发送文本,因此此处通过文本路径调用 Titan Multimodal,其行为与维度同为 1024 的 titan-v2 相同。Cohere Embed v3 的别名(cohere-en、cohere-multi)现在会解析为 Embed v4,后者支持英语和多语言文本。Titan 每次请求只能嵌入一段文本,因此此服务会一次发送 8 段文本。
你也可以直接传入任何有效的 Bedrock 模型 ID。注意:许多基础模型需要使用跨区域推理配置文件(us. 前缀)进行按需调用;注册表为每个模型使用可正常运行的形式。
模型可用性因区域和账户而异。 注册表中的 ID 已验证可在
us-east-1使用,但个别模型可能尚未在你的区域启用,或未授权给你的账户。无法访问的模型会返回明确的错误(在bedrock_compare中逐个模型处理);其余模型仍可正常使用。请在 AWS Console 的 Bedrock > Model access 下启用模型。
设置
前置条件
- Node.js >= 22(Node 20 已于 2026-04-30 终止生命周期;CI 使用 22、24 和 26)
- 已配置 AWS 凭证(Bearer 令牌、环境变量、
~/.aws/credentials、SSO 或 IAM 角色) - 已在 AWS 账户中启用 Bedrock 模型访问权限(在 AWS Console 的 Bedrock > Model access 下申请访问权限)
安装
此服务已发布到 npm,名称为
bedrock-multi-model-mcp,并已列入
MCP Registry,注册名称为
io.github.Sagargupta16/bedrock-multi-model-mcp,因此 MCP 客户端可以通过 npx
启动它,无需克隆或构建。
在 Claude Code 中配置
只需一条命令:
claude mcp add --transport stdio --scope user bedrock \
--env AWS_REGION=us-east-1 \
--env AWS_BEARER_TOKEN_BEDROCK=ABSK... \
-- npx -y bedrock-multi-model-mcp
或者手动将其添加到 Claude Code 的 MCP 设置(~/.claude.json)中:
{
"mcpServers": {
"bedrock": {
"command": "npx",
"args": ["-y", "bedrock-multi-model-mcp"],
"env": {
"AWS_BEARER_TOKEN_BEDROCK": "ABSK...",
"AWS_REGION": "us-east-1"
}
}
}
}
在 Claude Desktop 中配置
在 claude_desktop_config.json 中使用相同的服务配置块:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"bedrock": {
"command": "npx",
"args": ["-y", "bedrock-multi-model-mcp"],
"env": {
"AWS_BEARER_TOKEN_BEDROCK": "ABSK...",
"AWS_REGION": "us-east-1",
"BEDROCK_MCP_OUTPUT_DIR": "C:\\Users\\you\\bedrock-images"
}
}
}
}
从源码运行
如需修改此服务或固定使用本地构建版本,请克隆并构建,然后将 MCP
配置指向 node /path/to/bedrock-multi-model-mcp/dist/index.js,而不是 npx:
git clone https://github.com/Sagargupta16/bedrock-multi-model-mcp.git
cd bedrock-multi-model-mcp
npm install
npm run build
在 Desktop 中,请显式设置 BEDROCK_MCP_OUTPUT_DIR:在 Windows 上,它会从受写保护的目录
(C:\Windows\System32)启动服务,因此无法使用默认的“保存到当前工作目录旁边”行为,生成的图像会保存到 ~/bedrock-images/。
环境变量
| 变量 | 默认值 | 说明 |
|---|---|---|
AWS_REGION | us-east-1 | Bedrock API 调用使用的 AWS 区域 |
AWS_DEFAULT_REGION | - | 回退区域,仅在未设置 AWS_REGION 时使用 |
AWS_BEARER_TOKEN_BEDROCK | - | Bedrock API Key Bearer 令牌(推荐) |
AWS_ACCESS_KEY_ID | - | AWS 访问密钥(未使用 Bearer 令牌/SSO 时) |
AWS_SECRET_ACCESS_KEY | - | AWS 秘密访问密钥(未使用 Bearer 令牌/SSO 时) |
AWS_PROFILE | - | ~/.aws/credentials 中的命名 AWS 配置文件 |
BEDROCK_MCP_OUTPUT_DIR | cwd(或 cwd 不可写时使用 ~/bedrock-images) | 生成图像的默认输出目录。可由工具参数 output_dir 覆盖。目录会自动创建。 |
身份验证
此服务支持两种身份验证方式:
- Bedrock API Key(Bearer 令牌) - 设置
AWS_BEARER_TOKEN_BEDROCK。AWS SDK 会读取此值,并优先于任何 IAM 凭证将其作为Authorization: Bearer发送。若变量已设置但值为空(例如,MCP 配置传入"${AWS_BEARER_TOKEN_BEDROCK}",但客户端自身的环境中没有该变量),则会忽略此值,改用 IAM 凭证链进行身份验证,而不会导致每次调用都因“未定义token”而失败。 - IAM 凭证 - 使用标准 AWS 凭证链(环境变量、配置文件、SSO、IAM 角色)。除 Gemma 4 外,所有模型都可通过此方式使用;此服务只能通过 Bearer 令牌访问 Gemma 4 的
bedrock-mantle端点。
使用示例
向单个模型提问
"Use bedrock_ask to ask kimi to explain Docker in 3 sentences"
获取符合架构的 JSON
"Use bedrock_ask with claude-haiku, effort low, and a schema with category, subcategory and amount_inr: Swiggy order, Mattar Paneer Meal, 203 rupees"
比较模型
"Use bedrock_compare with kimi, nova-pro, and mistral-large: What are the pros and cons of microservices?"
bedrock_compare 会针对列表中的每个模型执行一次完整生成,每次生成都会单独计费——三个模型就是三次生成,五个模型就是五次。此服务不添加任何加价,也不设置费率;费用完全由 AWS Bedrock 按模型和令牌计收。当前费率:AWS Bedrock 定价,Claude 模型的定价请参阅 Anthropic 定价。
让评审选出最佳答案
"Use bedrock_judge with kimi, nova-pro and deepseek: In two sentences, when should a team pick SQS over SNS?"
候选模型并行作答。随后,评审(默认为 claude-opus,可通过 judge 覆盖)会看到经过随机排序的答案,答案标记为 A、B、C,且已移除模型名称;评审会为每个答案打 1 到 10 分,并选出获胜者。该工具会将标记映射回模型,并返回排名表、评审的推理过程以及所有答案。如果评审支持结构化输出(默认的 Opus 5.5 支持),工具会要求评审按照一个架构给出判定,其中 winner 只能是其中一个标记,因此始终可以解析。传入 criteria 可更改评分标准,传入 synthesize: true 还可获取一份合并后的答案。失败的候选会列在 失败 下,其余候选仍会接受评审;如果评审调用失败,答案仍会返回。费用按每个候选模型生成一次,加上评审生成一次计算。
生成图像
"Use bedrock_generate_image with stable-ultra: A futuristic Tokyo street at night, neon lights, rain"
编辑图像
"Use bedrock_edit_image to remove the background from ./photo.png"
"Use bedrock_edit_image with search-replace on ./street.png: replace the car with a blue pickup truck"
生成视频
"Use bedrock_generate_video: Closeup of ocean waves crashing on rocks at sunset, s3_uri: s3://my-bucket/videos/"
比较文本相似度
"Use bedrock_embed_similarity to compare: 'a cat', 'a kitten', 'a car'"
架构
图片背后的规范位于 docs/diagrams/architecture.yaml,使用 orrery 渲染。
工具调用会根据注册表解析模型别名,从对应条目中选取请求格式和区域,然后通过该区域对应的缓存 SDK 客户端发送请求。请求会携带 MCP 调用的中止信号,因此客户端取消工具调用(或放弃等待)时,服务会停止等待 Bedrock:2026-11-01,一次在 400 ms 时中止的 Nova Micro 调用于 412 ms 时结束;同一调用若任其完成则需要 6.4 s。
bedrock_generate_video 是个例外,因为取消已经发出的 StartAsyncInvoke 可能会导致一个仍在运行且已计费的任务无法获取 ARN 进行跟踪。
src/
index.ts # MCP server - tool registration, stdio transport
judge.ts # bedrock_judge - blind labels, judge prompt, verdict parsing
models.ts # Loads + validates registry data, resolves aliases
types.ts # Zod schemas for model data validation
bedrock/
client.ts # Shared region/auth config, one cached SDK client per region
converse.ts # Converse API wrapper (text models), dispatches mantle models
mantle.ts # bedrock-mantle Chat Completions wrapper (Gemma 4)
image.ts # InvokeModel wrapper (image models)
edit.ts # InvokeModel wrapper (Stability image-edit services)
video.ts # Async invoke wrapper (video models)
embed.ts # InvokeModel wrapper (embeddings) + cosine similarity
data/
text-models.json # Text model registry (data, not code)
image-models.json # Image model registry
image-edit-models.json # Image-edit service registry (operation, required and optional fields)
video-models.json # Video model registry
embedding-models.json # Embedding model registry
scripts/
call-tool.mjs # Minimal stdio MCP client: list tools or call one
benchmark.mjs # Latency benchmark across every text model
check-lifecycle.mjs # Fails if a registry model is Legacy or EOL on AWS's lifecycle page
模型定义以数据形式保存在 src/data/*.json 中,并在加载时使用 Zod 架构进行校验,因此无需更改逻辑即可更新目录。构建过程会将这些 JSON 文件复制到 dist/data/。
- 文本:使用 Converse API,为文本模型提供统一接口;Gemma 4 除外,它使用 bedrock-mantle Chat Completions
- 图像:使用 InvokeModel,并采用 Stability 请求格式(提示词和宽高比)
- 图像编辑:使用 InvokeModel,并采用 Stability AI Image Services 请求格式(base64 输入图像及各服务专属字段)
- 视频:使用 StartAsyncInvoke,输出需要 S3 存储桶
设计决策
| 决策 | 原因 |
|---|---|
| 对 bedrock-runtime 上的所有文本模型使用 Converse API | 十个提供商使用相同的请求和响应格式,因此添加文本模型只需添加一条 JSON 配置,而不必新增代码路径。 |
| 通过 bedrock-mantle 调用 Gemma 4,并使用相同的选项 | Gemma 4 没有 Converse API。它的请求由相同的 buildConverseInput 构建(选项检查、输出上限、温度规则),只有传输方式不同,因此 compare 和 judge 可以将它与 Converse 模型混合使用。 |
| 将模型目录设为 JSON + Zod | 注册表格式错误或只编辑了一半时,会在启动时失败,而不是等到首次调用时才失败。能力采用封闭枚举,因此像 tool-use 这样的拼写错误会在加载时被拒绝。 |
每个模型设置 noTemperature 标记 | Claude Opus 4.7 及更高版本、GPT-6.1、Grok 4.7 和 Kimi K3 会因 temperature 返回 400;该标记会仅对这些条目移除此参数。 |
使用经过实测的 effort 和 structured_output 标记 | 已对注册表中的每个模型进行实时探测,因此不支持的选项会在计费调用前报错,并列出支持该选项的模型。注册表以外的 ID 会直接传递给 Bedrock 判定。 |
| 按区域缓存 SDK 客户端 | 文本和嵌入模型在 AWS_REGION 中运行,而 Stability 和 Luma 模型仅在 us-west-2 提供。 |
在 bedrock_compare 中使用 Promise.allSettled | 某个模型无权访问,或某次调用遭到限流时,会单独报告其错误,其他模型仍会返回结果。 |
在 bedrock_judge 中使用盲测并打乱答案顺序 | LLM 评审容易偏好排在前面的答案或特定名称。评审只会看到随机排序的标签,工具随后会将答案映射回对应模型。 |
| 取消调用时中止 Bedrock 请求 | 客户端放弃工具调用后,服务端不应继续等待并为无人查看的答案付费。视频启动请求不予中止,因为取消启动可能留下已计费但没有 ARN 的任务。 |
| 每周检查生命周期 | AWS 会在 Legacy 模型 EOL 日期前数月禁止新客户使用,因此 scripts/check-lifecycle.mjs 会在每次注册表变更时以及每周将注册表与 AWS 的生命周期页面进行比对。 |
| 从已保存的 PNG 读取图像尺寸 | Stability 模型接收宽高比并自行选择像素,因此回显请求的尺寸会造成错误。 |
| 将图像编辑服务作为数据配置,并在调用前检查 | 每项服务的必填字段和可选字段都存放在 image-edit-models.json 中,因此 bedrock_edit_image 会在 Bedrock 为图像计费前拒绝缺失或不受支持的字段。 |
| 根据输入文件的起始字节进行检查 | bedrock_edit_image 会读取本地路径,因此只有起始字节符合 PNG、JPEG 或 WebP 格式的文件才会发送给 Bedrock。 |
| 验证任务 ARN 中的区域 | 区域决定请求主机,因此精心构造的 ARN 中未经检查的值可能会将签名请求发送到其他服务。 |
基准测试
2026-10-18 注册表(0.5.0 目录)中的所有文本模型,使用相同的提示词、相同的机器,通过 scripts/benchmark.mjs 各运行一次。其中 8 个模型后来已从注册表中移除(参见 0.7.0 更新日志)。延迟包含从该机器到所在区域的网络往返时间,因此应将其视为本次运行中的排名,而非适用于你自己的设置的数据。每次调用的原始数据位于
docs/benchmark/results.json;你可以使用自己的账户重新运行(每次调用均按模型正常费率计费),命令为 npm run benchmark;也可以使用已保存的数据重新生成表格,命令为 node scripts/benchmark.mjs --from docs/benchmark/results.json。
由 scripts/benchmark.mjs 于 2026-10-18 在 us-east-1 测得:每个模型使用 2 个提示词、每个提示词运行 3 次,接受温度参数时设为 0,输出上限为 256 个 token。26 个模型均有响应,156 次调用全部成功。延迟是整个调用的客户端墙钟时间中位数,按从快到慢排序。“达到上限”统计被截断在 256 个 token 的回答,这也限制了它们的 token 数量。
| 模型 | 提供方 | 延迟中位数(秒) | 输出 token 数中位数 | 输出 token 速率中位数(token/秒) | 达到上限 | 成功 |
|---|---|---|---|---|---|---|
| Nova Lite | Amazon | 1.13 | 56 | 50 | 0 | 6/6 |
| Nova Micro | Amazon | 1.18 | 59 | 46 | 0 | 6/6 |
| Mistral Large 3 (675B) | Mistral | 1.25 | 61 | 50 | 0 | 6/6 |
| Qwen3 Coder Next | Qwen | 1.29 | 71 | 37 | 0 | 6/6 |
| Llama 4 Maverick 17B | Meta | 1.35 | 87 | 65 | 0 | 6/6 |
| Llama 4 Scout 17B | Meta | 1.36 | 99 | 71 | 0 | 6/6 |
| Nova Pro | Amazon | 1.49 | 61 | 43 | 0 | 6/6 |
| GPT-OSS 20B | OpenAI | 1.50 | 206 | 114 | 2 | 6/6 |
| Llama 3.3 70B Instruct | Meta | 1.52 | 107 | 66 | 0 | 6/6 |
| Nova 2 Lite | Amazon | 1.55 | 80 | 53 | 0 | 6/6 |
| GPT-OSS 120B | OpenAI | 1.82 | 152 | 88 | 1 | 6/6 |
| Devstral 2 (123B) | Mistral | 1.88 | 63 | 35 | 0 | 6/6 |
| Pixtral Large | Mistral | 2.06 | 85 | 42 | 0 | 6/6 |
| Claude Sonnet 4.6 | Anthropic | 2.10 | 77 | 36 | 0 | 6/6 |
| Qwen3 VL 235B | Qwen | 2.15 | 58 | 28 | 0 | 6/6 |
| Mistral Small | Mistral | 2.31 | 98 | 42 | 0 | 6/6 |
| DeepSeek R1 | DeepSeek | 2.35 | 256 | 109 | 6 | 6/6 |
| Claude Haiku 4.5 | Anthropic | 2.38 | 179 | 71 | 3 | 6/6 |
| Claude Opus 4.7 | Anthropic | 2.40 | 98 | 39 | 0 | 6/6 |
| Claude Sonnet 5 | Anthropic | 2.69 | 98 | 36 | 0 | 6/6 |
| Claude Opus 4.8 | Anthropic | 2.79 | 111 | 39 | 0 | 6/6 |
| Claude Opus 4.6 | Anthropic | 3.42 | 80 | 24 | 0 | 6/6 |
| Claude Fable 5 | Anthropic | 4.18 | 134 | 30 | 0 | 6/6 |
| Claude Opus 5 | Anthropic | 4.46 | 154 | 30 | 1 | 6/6 |
| DeepSeek V3.2 | DeepSeek | 4.60 | 55 | 13 | 0 | 6/6 |
| Claude Fable 5.1 | Anthropic | 5.61 | 127 | 21 | 0 | 6/6 |
无需 MCP 客户端即可试用工具
scripts/call-tool.mjs 会通过 stdio 启动构建好的服务(与 Claude Code 的方式相同),并使用 shell 中的 AWS 凭证调用一个工具:
npm run build
node scripts/call-tool.mjs # list the tools
node scripts/call-tool.mjs bedrock_ask '{"model":"nova-micro","prompt":"Say hi"}'
故障排查
| 错误 | 原因 | 解决方法 |
|---|---|---|
The provided model identifier is invalid. | 该 ID 无法在 Bedrock 上解析,通常是缺少 us. 跨区域推理配置文件前缀,或模型未在你的区域提供。 | 使用注册表别名(bedrock_list_models),或在完整 ID 前添加 us. 前缀。 |
`temperature` is deprecated for this model. | 请求使用了 Claude 4.7 或更高版本的模型,但该模型没有注册表条目,因此服务发送了默认 temperature 值 0.7。Anthropic 已弃用 Claude Opus 4.7 及更高版本的 temperature / top_p / top_k,非默认值会导致该模型返回 400。较早的模型(Haiku 4.5、Opus 4.6、Sonnet 4.6)仍接受此参数。 | 通过已注册的别名调用,或在 src/data/text-models.json 中添加带有 "noTemperature": true 的注册表条目。 |
<model> does not support structured output / does not take effort | 此服务的注册表显示该模型不接受该选项(测量日期为 2026-10-21 和 2026-11-01)。 | 从消息中的列表选择模型,或移除 schema / effort。 |
This model doesn't support the outputConfig field. | 注册表之外的模型拒绝了 schema 或 effort。 | 对该模型移除此选项。 |
This model doesn't support the temperature field. | 注册表之外且不接受 temperature 的模型(GPT-6.1、Grok 和 Kimi 都如此)收到了服务的默认值 0.7。 | 通过已注册的别名调用,或添加带有 "noTemperature": true 的注册表条目。 |
Could not load credentials from any providers | 没有 bearer 令牌传到服务(或令牌为空),且未解析到 IAM 凭证。 | 将有效令牌放入 MCP 配置的 env 中,或配置 AWS 配置文件、SSO 或 IAM 角色。 |
AccessDeniedException | 你的账户尚未获准访问该模型。 | 在 AWS Console > Bedrock > Model access 中申请该模型,待其显示 Access granted 后重试。 |
bedrock_video_status reports Failed | Bedrock 会在任务本身返回原因。 | 阅读状态信息下方打印的 Reason: 行,并解决其中指出的问题。 |
错误字符串会原样显示 Bedrock 返回的内容。请注意,temperature 错误是此服务的注册表缺漏,并非 IAM 或模型访问问题,因此无需在 AWS 中进行任何修复。
贡献
设置、两项必需检查以及添加模型的规则(注册表数据 + 测试断言 + 对模型 ID 进行实时探测),请参阅 CONTRIBUTING.md。 安全问题应通过 SECURITY.md 中的私密渠道提交,而非公开问题。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。