Bedrock AgentCore RuntimeにMCPサーバーをデプロイし、Strands AgentsからIAM認証で接続する
本記事では、Amazon Bedrock AgentCore Runtime(以下、AgentCore Runtime)にMCPサーバーをデプロイし、OAuthではなくIAMを用いて、Strands Agentsから同MCPサーバーに接続する方法を紹介します。
以下の手順で説明します。
- MCPサーバーをAgentCore Runtimeにデプロイする
- ローカル環境でStrands Agentsを動かし、MCPサーバーと接続する
1. MCPサーバーをAgentCore Runtimeにデプロイする
AgentCore Runtimeで動作するMCPサーバーの作成方法については公式ドキュメントでも紹介されているため、本記事では基本的にその手順に沿って設定を行います。
パッケージをインストールする
$ uv add mcp
$ uv add --dev bedrock-agentcore-starter-toolkit
MCPサーバーのコードを用意する
3つのツール(add_numbers, multiply_numbers, greet_user)を実装したMCPサーバーを作成します。
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となり、接続設定の大変さが解消されたため、本記事ではこちらをパッケージとして利用します。
$ uv add mcp-proxy-for-aws
MCPクライアントのコードを用意する
Strands AgentsがMCPクライアントとなり、AgentCore Runtime上のMCPサーバーに接続します。以下、実装コードを示します。
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']
参考
Discussion