Amazon Bedrock AgentCore RuntimeでホストしたTerraform MCP ServerにClaude Codeから接続してみる
Amazon Bedrock AgentCore Runtimeを使うと、簡単にリモートMCPサーバをデプロイできます。
以前これを使って、Terraform MCPサーバーをデプロイしました。
Terraform MCP ServerをAWS Marketplaceでサブスクライブして、Amazon Bedrock AgentCoreを使ってセットアップしてみた | DevelopersIO
今回は、Claude CodeからデプロイしたリモートMCPサーバーに接続してみます。
認証用のAmazon Cognitoユーザープールの用意
今回はAgent Runtimeの認証にAmazon Cognitoユーザープールを使います。
公式ドキュメントにCognitoセットアップ用のスクリプトがあるためこれを利用します。
Deploy MCP servers in AgentCore Runtime - Amazon Bedrock AgentCore
#!/bin/bash
# Create User Pool and capture Pool ID directly
export POOL_ID=$(aws cognito-idp create-user-pool \
--pool-name "MyUserPool" \
--policies '{"PasswordPolicy":{"MinimumLength":8}}' \
--region us-east-1 | jq -r '.UserPool.Id')
# Create App Client and capture Client ID directly
export CLIENT_ID=$(aws cognito-idp create-user-pool-client \
--user-pool-id $POOL_ID \
--client-name "MyClient" \
--no-generate-secret \
--explicit-auth-flows "ALLOW_USER_PASSWORD_AUTH" "ALLOW_REFRESH_TOKEN_AUTH" \
--region us-east-1 | jq -r '.UserPoolClient.ClientId')
# Create User
aws cognito-idp admin-create-user \
--user-pool-id $POOL_ID \
--username "testuser" \
--temporary-password "TempPassword0123!" \
--region us-east-1 \
--message-action SUPPRESS > /dev/null
# Set Permanent Password
aws cognito-idp admin-set-user-password \
--user-pool-id $POOL_ID \
--username "testuser" \
--password "MyPassword0123!" \
--region us-east-1 \
--permanent > /dev/null
# Authenticate User and capture Access Token
export BEARER_TOKEN=$(aws cognito-idp initiate-auth \
--client-id "$CLIENT_ID" \
--auth-flow USER_PASSWORD_AUTH \
--auth-parameters USERNAME='testuser',PASSWORD='MyPassword0123!' \
--region us-east-1 | jq -r '.AuthenticationResult.AccessToken')
# Output the required values
echo "Pool id: $POOL_ID"
echo "Discovery URL: https://cognito-idp.us-east-1.amazonaws.com/$POOL_ID/.well-known/openid-configuration"
echo "Client ID: $CLIENT_ID"
echo "Bearer Token: $BEARER_TOKEN"
AWS認証情報をコンソールにセットした後に、以下のコマンドを実行します。
source setup_cognito.sh
出力される以下の値は、次のステップで使用するため控えておきます。
- Discovery URL
- Client ID
- Bearer Token
Agent Runtime用のIAM Roleを作成
以下記事の「Agent Runtime用のIAM Roleを作成」を参考にIAM Roleを作成します。
Terraform MCP ServerをAWS Marketplaceでサブスクライブして、Amazon Bedrock AgentCoreを使ってセットアップしてみた | DevelopersIO
Amazon Bedrock Agent Coreを使ってTerraform MCPサーバーをデプロイする
以下のコマンドを実行して、Agent Runtimeを作成します。
<Cognito Discovery URL>
と<Cognito Client ID>
前の手順で表示されたものに置き換えてください。
aws bedrock-agentcore-control create-agent-runtime \
--region us-east-1 \
--agent-runtime-name "terraform_mcp_server" \
--description "terraform_mcp_server" \
--agent-runtime-artifact '{
"containerConfiguration": {
"containerUri": "<Terraform MCP Server ECR Image URI>"
}
}' \
--role-arn "arn:aws:iam::<accdountId>:role/service-role/AmazonBedrockAgentCoreRuntimeDefaultServiceRole-TerraformMCPServer" \
--network-configuration '{
"networkMode": "PUBLIC"
}' \
--protocol-configuration '{
"serverProtocol": "MCP"
}' \
--authorizer-configuration '{
"customJWTAuthorizer": {
"discoveryUrl": "<Cognito Discovery URL>",
"allowedClients": ["<Cognito Client ID>"]
}
--environment-variables '{
"MCP_SESSION_MODE": "stateless",
"MCP_CORS_MODE": "strict",
"MCP_ALLOWED_ORIGINS": "http://127.0.0.1:8000",
"TRANSPORT_MODE": "streamable-http",
"TRANSPORT_HOST": "0.0.0.0",
"TRANSPORT_PORT": "8000"
}'
コマンド実行時にAgent ARNが表示されるため、控えておきます。
Claude Codeの設定
Claude Codeに設定する際に、AgentCore RuntimeのURLとCognitoのBearer Tokenが必要です。
AgentCore RuntimeのURLは以下の形式になります。
https://bedrock-agentcore.<Region Name>.amazonaws.com/runtimes/arn%3Aaws%3Abedrock-agentcore%3A<Region Name>%3A<Account ID>%3Aruntime%2F<Runtime Name>/invocations?qualifier=DEFAULT
Agent ARNの部分をURLエンコードする必要があります。
エンドポイントURLを作成する際は、エージェントランタイムARNをURLエンコードしてください。エンコードされたURLでは、コロン(:)は%3A、スラッシュ(/)は%2Fになります。
Deploy MCP servers in AgentCore Runtime - Amazon Bedrock AgentCore
CognitoのBearer Tokenの有効期限はデフォルトは1時間です。
この時点で期限が切れている場合は、以下を実行してBearer Tokenを再発行します。(Cognitoセットアップスクリプトの一部)
# Authenticate User and capture Access Token
export BEARER_TOKEN=$(aws cognito-idp initiate-auth \
--client-id "$CLIENT_ID" \
--auth-flow USER_PASSWORD_AUTH \
--auth-parameters USERNAME='testuser',PASSWORD='MyPassword0123!' \
--region us-east-1 | jq -r '.AuthenticationResult.AccessToken')
~/.claude.json
に以下を追加します。
"mcpServers": {
"terraform-mcp-remote": {
"type": "http",
"url": "https://bedrock-agentcore.us-east-1.amazonaws.com/runtimes/<Escaped Agent ARN>/invocations?qualifier=DEFAULT",
"headers": {
"Authorization": "Bearer <Cognito Bearer Token>"
}
}
},
または以下のコマンドで追加します。
export RUNTIME_URL="https://bedrock-agentcore.us-east-1.amazonaws.com/runtimes/<Escaped Agent ARN>/invocations?qualifier=DEFAULT"
claude mcp add --transport http \
terraform-mcp-remote $RUNTIME_URL \
-H "Authorization: Bearer $BEARER_TOKEN"
Claude Codeを起動し、/mcp
と入力します。terraform-mcp-remote
がconnected
になっていればOKです。
claude
動作確認
動作確認として、Terraform MCPサーバーのサンプルプロンプトをClaude Codeで実行してみます。
I need help understanding what resources are available in the Google provider that are for AI
登録したMCPサーバーを使って、レスポンスを返していることを確認できました。