🤖

Bedrock AgentCore RuntimeにMCPサーバーをデプロイし、Strands AgentsからIAM認証で接続する

に公開

本記事では、Amazon Bedrock AgentCore Runtime(以下、AgentCore Runtime)にMCPサーバーをデプロイし、OAuthではなくIAMを用いて、Strands Agentsから同MCPサーバーに接続する方法を紹介します。

以下の手順で説明します。

  1. MCPサーバーをAgentCore Runtimeにデプロイする
  2. ローカル環境でStrands Agentsを動かし、MCPサーバーと接続する

1. MCPサーバーをAgentCore Runtimeにデプロイする

AgentCore Runtimeで動作するMCPサーバーの作成方法については公式ドキュメントでも紹介されているため、本記事では基本的にその手順に沿って設定を行います。
https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-mcp.html

パッケージをインストールする

$ uv add mcp
$ uv add --dev bedrock-agentcore-starter-toolkit

MCPサーバーのコードを用意する

3つのツール(add_numbers, multiply_numbers, greet_user)を実装したMCPサーバーを作成します。

mcp_server.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP(host="0.0.0.0", stateless_http=True)

@mcp.tool()
def add_numbers(a: int, b: int) -> int:
    """Add two numbers together"""
    return a + b

@mcp.tool()
def multiply_numbers(a: int, b: int) -> int:
    """Multiply two numbers together"""
    return a * b

@mcp.tool()
def greet_user(name: str) -> str:
    """Greet a user by name"""
    return f"Hello, {name}! Nice to meet you."

if __name__ == "__main__":
    mcp.run(transport="streamable-http")

デプロイする

今回はあくまで検証目的であるため、bedrock-agentcore-starter-toolkitに含まれるagentcoreコマンドを使用して、環境構築およびMCPサーバーのデプロイを行います。

$ uv run agentcore configure -e mcp_server.py --protocol MCP
$ uv run agentcore launch

デプロイされたAgentCore Runtimeの設定を確認するとInbound Authの構成が本検証で意図した内容になっていることを確認できます。

  • Protocol: MCP
  • Inbound Auth Type: Use IAM permissions

2. ローカル環境でStrands Agentsを動かし、MCPサーバーとの接続を確認する

ローカル環境でStrands Agentsを動かし、手順1にてAWS上にデプロイしたMCPサーバーとの接続を試します。なお、ローカル環境にはAWSの接続情報が設定されていることを前提としています。

パッケージをインストールする

AgentCore Runtime上にデプロイされたMCPサーバーに対してIAM権限を用いてアクセスする際は、AWS Signature Version 4(SigV4)方式で署名されたリクエストを送信する必要があります。2025/10/30にMCP Proxy for AWSがGAとなり、接続設定の大変さが解消されたため、本記事ではこちらをパッケージとして利用します。
https://aws.amazon.com/jp/about-aws/whats-new/2025/10/model-context-protocol-proxy-available/

$ uv add mcp-proxy-for-aws

MCPクライアントのコードを用意する

Strands AgentsがMCPクライアントとなり、AgentCore Runtime上のMCPサーバーに接続します。以下、実装コードを示します。

mcp_client.py
from mcp_proxy_for_aws.client import aws_iam_streamablehttp_client
from strands.tools.mcp import MCPClient
from strands import Agent

agent_arn = "arn:aws:bedrock-agentcore:ap-northeast-1:XXXXYYYYZZZZ:runtime/mcp_server-XXXXXXXXXX"
encoded_arn = agent_arn.replace(':', '%3A').replace('/', '%2F')
region = "ap-northeast-1"
mcp_url = f"https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{encoded_arn}/invocations"

mcp_client_factory = lambda: aws_iam_streamablehttp_client(
    endpoint=mcp_url,
    aws_region=region,
    aws_service="bedrock-agentcore"
)

with MCPClient(mcp_client_factory) as mcp_client:
    mcp_tools = mcp_client.list_tools_sync()
    agent = Agent(tools=mcp_tools)
    print(agent.tool_names)

Strands Agents からMCPサーバーに接続する

最後に、Strands Agentsを起動します。

$ uv run mcp_client.py

AgentCore Runtime上のMCPサーバーに無事接続でき、ツール一覧が正しく取得できていることが確認できます。

['add_numbers', 'multiply_numbers', 'greet_user']

参考

https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-mcp.html
https://aws.amazon.com/jp/about-aws/whats-new/2025/10/model-context-protocol-proxy-available/
https://github.com/aws/mcp-proxy-for-aws

Discussion