Generative AI Use Cases(GenU)でMCPサーバーを利用したチャット機能を使ってみた

Generative AI Use Cases(GenU)でMCPサーバーを利用したチャット機能を使ってみた

Clock Icon2025.06.16

はじめに

MCPの登場によりAIアプリケーションと外部ツールの統合が容易になりました。
最近はMCP対応していることはサーバー、クライアント共に重要な要素となります。
そんな中AWSがAIユースケース集として公開しているGenerative AI Use Cases(以降、GenU)でもv4.3.0からMCPに対応したチャット機能が使えるようになりました。
今回はMCPの有効化から実際の呼び出しまで試してみたいと思います。

やってみる

前提

  • GenUがデプロイ済みであること
  • 開発環境でDockerが利用可能なこと

GenUの設定変更

まずはじめにparameter.tsもしくはcdk.jsonmcpEnabled: trueをMCPを有効化します。

packages/cdk/parameter.ts
const envs: Record<string, Partial<StackInput>> = {
  '': {
    modelRegion: "us-west-2",
    modelIds: [
      "us.anthropic.claude-3-7-sonnet-20250219-v1:0",
      "us.anthropic.claude-sonnet-4-20250514-v1:0",
      "us.anthropic.claude-opus-4-20250514-v1:0",
      "anthropic.claude-3-5-sonnet-20241022-v2:0",
    ],
+   mcpEnabled: true,
  }
};
cdk.jsonの場合
packages/cdk/cdk.json
  "context": {
    "env": "",
    "ragEnabled": false,
    "kendraIndexArn": null,
    "kendraIndexLanguage": "ja",
    "kendraDataSourceBucketName": null,
    "kendraIndexScheduleEnabled": false,
    "kendraIndexScheduleCreateCron": null,
    "kendraIndexScheduleDeleteCron": null,
    "ragKnowledgeBaseEnabled": false,
    "ragKnowledgeBaseId": null,
    "ragKnowledgeBaseStandbyReplicas": false,
    "ragKnowledgeBaseAdvancedParsing": false,
    "ragKnowledgeBaseAdvancedParsingModelId": "anthropic.claude-3-sonnet-20240229-v1:0",
    "ragKnowledgeBaseBinaryVector": false,
    "embeddingModelId": "amazon.titan-embed-text-v2:0",
    "rerankingModelId": null,
    "queryDecompositionEnabled": false,
    "selfSignUpEnabled": true,
    "allowedSignUpEmailDomains": null,
    "samlAuthEnabled": false,
    "samlCognitoDomainName": "",
    "samlCognitoFederatedIdentityProviderName": "",
    "hiddenUseCases": {},
    "modelRegion": "us-east-1",
    "modelIds": [
      "us.anthropic.claude-sonnet-4-20250514-v1:0",
      "us.anthropic.claude-opus-4-20250514-v1:0",
      "us.anthropic.claude-3-7-sonnet-20250219-v1:0",
      "us.anthropic.claude-3-5-haiku-20241022-v1:0",
      "us.amazon.nova-premier-v1:0",
      "us.amazon.nova-pro-v1:0",
      "us.amazon.nova-lite-v1:0",
      "us.amazon.nova-micro-v1:0",
      "us.deepseek.r1-v1:0"
    ],
    "imageGenerationModelIds": ["amazon.nova-canvas-v1:0"],
    "videoGenerationModelIds": ["amazon.nova-reel-v1:0"],
    "speechToSpeechModelIds": ["amazon.nova-sonic-v1:0"],
    "endpointNames": [],
    "agentEnabled": false,
    "searchAgentEnabled": false,
    "searchApiKey": "",
    "agents": [],
    "inlineAgents": false,
-   "mcpEnabled": false,
+   "mcpEnabled": true,
    "flows": [],
    "allowedIpV4AddressRanges": null,
    "allowedIpV6AddressRanges": null,
    "allowedCountryCodes": null,
    "hostName": null,
    "domainName": null,
    "hostedZoneId": null,
    "dashboard": false,
    "anonymousUsageTracking": true,
    "guardrailEnabled": false,
    "crossAccountBedrockRoleArn": "",
    "useCaseBuilderEnabled": true,
    "@aws-cdk/aws-lambda:recognizeLayerVersion": true,
    "@aws-cdk/core:checkSecretUsage": true,
    "@aws-cdk/core:target-partitions": ["aws", "aws-cn"],
    "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
    "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true,
    "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true,
    "@aws-cdk/aws-iam:minimizePolicies": true,
    "@aws-cdk/core:validateSnapshotRemovalPolicy": true,
    "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true,
    "@aws-cdk/aws-s3:createDefaultLoggingPolicy": true,
    "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true,
    "@aws-cdk/aws-apigateway:disableCloudWatchRole": true,
    "@aws-cdk/core:enablePartitionLiterals": true,
    "@aws-cdk/aws-events:eventsTargetQueueSameAccount": true,
    "@aws-cdk/aws-iam:standardizedServicePrincipals": true,
    "@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true,
    "@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true,
    "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true,
    "@aws-cdk/aws-route53-patters:useCertificate": true,
    "@aws-cdk/customresources:installLatestAwsSdkDefault": false,
    "@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true,
    "@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true,
    "@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true,
    "@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true,
    "@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true,
    "@aws-cdk/aws-redshift:columnId": true,
    "@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true,
    "@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true,
    "@aws-cdk/aws-apigateway:requestValidatorUniqueId": true,
    "@aws-cdk/aws-kms:aliasNameRef": true,
    "@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true,
    "@aws-cdk/core:includePrefixInUniqueNameGeneration": true,
    "@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true
  }
}

MCPサーバーの設定はpackages/cdk/mcp-api/mcp.jsonで変更可能です。
デフォルトで以下のサーバーが設定されています。

packages/cdk/mcp-api/mcp.json
{
  "mcpServers": {
    "time": {
      "command": "uvx",
      "args": ["mcp-server-time"]
    },
    "awslabs.aws-documentation-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.aws-documentation-mcp-server@latest"]
    },
    "awslabs.cdk-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.cdk-mcp-server@latest"]
    }
  }
}

今回はデフォルトのまま利用しますが、必要に応じてサーバーを追加して下さい。
現状だとMCPクライアントはstdioのみ等、制約も多いようです。
詳細を以下をご確認ください。

https://github.com/aws-samples/generative-ai-use-cases/blob/main/docs/ja/DEPLOY_OPTION.md#mcp-チャットユースケースの有効化

各種設定が終わったらデプロイします。

terminal
npm run cdk:deploy

動作確認

デプロイが終わるとユースケースの一覧にMCP チャットが追加されているはずです。

2025-06-16-092

aws-documentation-mcp-serverを使用して最新ドキュメントを参照して欲しいので、Bedrockのモデルについて質問してみます。

2025-06-16-087

MCPサーバーに接続して情報を取得しているようです。
しばらくするとトレースが表示され、展開することで思考の過程が確認できます。

2025-06-16-088

2025-06-16-089

ドキュメントの参照が終わると回答を生成してくれました。
所々怪しい箇所はありますが、概ね適切な回答が返ってきているようです。

2025-06-16-091

まとめ

GenUがMCPに対応したので、実際に試してみました。
Lambda上で実行している都合上、制約も多いですがこれからの機能拡充が楽しみです。
どなたかの参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.