I tried enabling MCP 2026-07-28 in Amazon Bedrock AgentCore Gateway

I tried enabling MCP 2026-07-28 in Amazon Bedrock AgentCore Gateway

Amazon Bedrock AgentCore Gateway has enabled MCP `2026-07-28`. A new minimal configuration validation Gateway was created, and `2026-07-28` was added to `supportedVersions`. Confirmed that `tools/list` without `Mcp-Session-Id` passes, and that existing `2025-11-25` calls continue to succeed.
2026.07.30

This page has been translated by machine translation. View original

Introduction

On July 28, 2026, the new MCP specification 2026-07-28 was published. The initialize handshake and Mcp-Session-Id have been deprecated, and the design has become stateless, with each request declaring its protocol version and client information via _meta.

https://blog.modelcontextprotocol.io/posts/2026-07-28/

On the same day, AWS also published a blog post announcing that AgentCore Gateway now supports this 2026-07-28 specification.

https://aws.amazon.com/jp/blogs/machine-learning/how-agentcore-gateway-supports-the-mcp-2026-07-28-spec/

I verified the new specification's responses using a newly created Gateway for testing.

Verification Details

Test Environment

  • Gateway: Newly created with minimal configuration, authentication method set to AWS_IAM
  • MCP Target: An MCP server implemented for testing (AWS Lambda Function URL)

Before and After Updating supportedVersions

When checking with get-gateway, the following two versions were listed before the update.

{ "mcp": { "supportedVersions": ["2025-03-26", "2025-11-25"] } }

After adding 2026-07-28, all three versions appeared side by side.

{ "mcp": { "supportedVersions": ["2025-03-26", "2025-11-25", "2026-07-28"] } }

Adding 2026-07-28 via UpdateGateway

UpdateGateway replaces supportedVersions with the specified values. Therefore, I enumerated the existing two versions as well and added 2026-07-28.

aws bedrock-agentcore-control update-gateway \
  --gateway-identifier "<GATEWAY_ID>" \
  --name "<GATEWAY_NAME>" \
  --role-arn "<GATEWAY_ROLE_ARN>" \
  --protocol-type MCP \
  --protocol-configuration '{
    "mcp": {
      "supportedVersions": ["2025-03-26", "2025-11-25", "2026-07-28"]
    }
  }' \
  --authorizer-type AWS_IAM

Running tools/list with 2026-07-28 Without a Session

To verify stateless invocation, I sent tools/list as the first request. I did not execute initialize and did not include Mcp-Session-Id.

For <GATEWAY_URL>, I specified the Gateway URL returned by get-gateway (ending in /mcp).

The Mcp-Method header is used to identify the method without parsing the JSON-RPC body. It is required in 2026-07-28. For tools/call, Mcp-Name indicating the tool name is also required, but it is not needed for tools/list.

Client information and capabilities are passed via _meta in each request.

POST <GATEWAY_URL>
Content-Type: application/json
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/list

{
  "jsonrpc": "2.0",
  "id": "new-tools-list",
  "method": "tools/list",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {
        "name": "<CLIENT_NAME>",
        "version": "<CLIENT_VERSION>"
      },
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}

The HTTP status was 200 and I was able to retrieve the tool list. The following is an excerpt from the response.

{
  "result": {
    "tools": [{ "name": "<TARGET_NAME>___<TOOL_NAME>", "inputSchema": { "type": "object" } }],
    "resultType": "complete",
    "ttlMs": 0,
    "cacheScope": "private"
  }
}

resultType indicates whether the response is complete; it becomes input_required when the server requests additional input. ttlMs and cacheScope are fields indicating the expiration time and scope when the client caches the list results.

Response from 2025-11-25 and Omitted Header After the Update

After adding the new version, I ran tools/call with 2025-11-25, and the HTTP status was 200 with isError set to false.

When I sent tools/list without the MCP-Protocol-Version header, it also returned 200 with the tool list. The response did not include resultType, ttlMs, or cacheScope, so it was not possible to determine which version was selected from the response alone. The AWS blog explains that requests omitting the header are treated as the default version 2025-03-26.

Response for Unsupported Versions

When I specified the unsupported version 2099-01-01, the HTTP status was 400 and error.code was -32022. The response was as follows.

{
  "jsonrpc": "2.0",
  "id": "unsupported-version",
  "error": {
    "code": -32022,
    "message": "Unsupported protocol version: 2099-01-01",
    "data": {
      "requested": "2099-01-01",
      "supported": ["2025-03-26", "2025-11-25", "2026-07-28"]
    }
  }
}

Summary

AgentCore Gateway allows old and new versions to coexist, enabling gradual migration of older clients to the new version. In fact, tools/call with 2025-11-25 continued to succeed even after adding the new version.

The official MCP blog explains that the stateless design allows MCP servers to scale on standard HTTP infrastructure. For workloads where fluctuating load has been a challenge, migrating to 2026-07-28 is a viable option. Enabling it requires only a single UpdateGateway call, so please give it a try.


AI白書2026 配布中

クラスメソッドが独自に行なったAI診断調査をもとに、企業のAI活用の現在地を調査レポートとしてまとめました。企業規模別の活用度傾向に加え、規模を超えてAI活用を進める企業に共通する取り組みまで、自社の現在地を捉えるためのヒントにぜひ。

AI白書2026

無料でダウンロードする

Share this article

AWSのお困り事はクラスメソッドへ