Slide 1

Slide 1 text

なんだか流行ってるらしいMCPを Bedrockで使ってみよ〜 4/24 春のBedrockアプデおさらい & Bedrock Engineer開発秘話スペシャル @moritalous

Slide 2

Slide 2 text

自己紹介 森田 和明 富士ソフト株式会社 主任 / フェロー(アーキテクト・エバンジェリスト) AWS Ambassador(2023~) AWS Top Engineer(2020~) AWS All Certifications Engineer(2024) AWS Community Builder(2024) 2025更新待ち 生成AIに限らず、AWS関係のアーキテクトとエバンジェリストを やってます。Java Webアプリ開発出身->新しいもの好き X / Qiita / GitHub : @moritalous 2 Nova Canvas & Nova Reelで作成

Slide 3

Slide 3 text

3 Bedrockの入門書を執筆しました!!

Slide 4

Slide 4 text

MCPとは 4

Slide 5

Slide 5 text

MCPって何? 5 https://speakerdeck.com/minorun365/yasasiimcpru-men

Slide 6

Slide 6 text

MCPではどんなものが扱えるの? 6 MCPで扱えるもの 1. Resources ファイルのイメージ(RAGで扱うドキュメントみたいな感じ) 2. Prompts プロンプト 3. Tools 外部ツール 4. Sampling サーバー側からクライアントに要求を出す(Human-in-the-Loop的な使い方と想像) 5. Roots サーバーが処理していい場所を指定(ルートディレクトリなど) いろいろありますが、MCP = Toolsで語られていることが多い気がします。

Slide 7

Slide 7 text

MCPでなにが変わったの? 7

Slide 8

Slide 8 text

MCP が重要な理由 8 FAQs(https://modelcontextprotocol.io/faqs)を日本語化して抜粋 AI アプリケーションユーザー向け 開発者向け MCPにより、AIアプリケーションは日常的 に使用する情報やツールにアクセスできる ようになり、より役立つものになります。 AIが既に知っていることだけに限定され るのではなく、特定の文書、データ、作業コ ンテキストを理解できるようになります。 例えば、MCPサーバーを使用することで、 アプリケーションはGoogle Driveからの 個人文書やGitHubからのコードベースに 関するデータにアクセスし、よりパーソナラ イズされた文脈に関連したサポートを提供 できます。 MCPは、様々なデータソースにアクセスする必要があるAIアプリケーショ ンを構築する際の開発時間と複雑さを軽減します。MCPを使用すること で、開発者はカスタムコネクタを繰り返し作成するのではなく、優れたAIエ クスペリエンスの構築に集中できます。 従来、アプリケーションとデータソースを接続するには、各データソースと各 アプリケーションごとにカスタムの一回限りの接続を構築する必要がありま した。これにより、AIアプリケーションをGoogle DriveやSlackに接続し たい開発者はそれぞれ独自の接続を構築する必要があり、大量の重複作業 が発生していました。 MCPはこれを簡素化し、開発者がデータソース用のMCPサーバーを構築 することで、様々なアプリケーションで再利用できるようにします。例えば、 オープンソースのGoogle Drive MCPサーバーを使用することで、各開 発者がカスタム接続を構築する必要なく、多くの異なるアプリケーションが Google Driveからデータにアクセスできます。 とはいえ、現状はある程度ITがわかる人向けかな?

Slide 9

Slide 9 text

AWSで使えるMCP 9

Slide 10

Slide 10 text

AWSがMCPサーバーを公開しています 10 GitHubのawslabsにいろいろあります。 1. AWS MCP Servers https://github.com/awslabs/mcp a. AWS Documentation MCP Server b. Amazon Bedrock Knowledge Bases Retrieval MCP Server c. AWS CDK MCP Server d. Cost Analysis MCP Server e. Amazon Nova Canvas MCP Server f. AWS Diagram MCP Server g. AWS Lambda MCP Server h. AWS Terraform MCP Server 2. Log Analyzer with MCP https://github.com/awslabs/Log-Analyzer-with-MCP 3. Run Model Context Protocol (MCP) servers with AWS Lambda https://github.com/awslabs/run-model-context-protocol-servers-with-aws-lambda

Slide 11

Slide 11 text

それぞれのMCPサーバーをQ Developer CLIに解説してもらいました! 11 Q Developer CLIのチャットは「Alt + Enter」で改行するタイプです

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

13

Slide 14

Slide 14 text

14

Slide 15

Slide 15 text

15

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

17

Slide 18

Slide 18 text

18

Slide 19

Slide 19 text

19

Slide 20

Slide 20 text

20

Slide 21

Slide 21 text

21

Slide 22

Slide 22 text

それぞれのMCPサーバーをQ Developer CLIに解説してもらいました! 22 GitHubで気になるリポジトリを見つけたら ざっと概要を解説させると面白いです

Slide 23

Slide 23 text

BedrockでMCPを使ってみよ~ 23 そろそろ

Slide 24

Slide 24 text

呼び出しフロー(Bedrock Converse API) 24 mcp_tools = await session.list_tools () bedrock_tools = to_bedrock_tool (mcp_tools .tools) response = bedrock_client.converse( modelId="us.amazon.nova-pro-v1:0" , messages =messages, toolConfig ={"tools": bedrock_tools}, ) if "toolUse" in content: # ツール実行( MCPサーバーで実行される) tool_result = await session.call_tool ( name=content["toolUse" ]["name"], arguments =content["toolUse" ]["input"], ) messages .append( to_bedrock_tool_result ( tool_use_id =content["toolUse" ]["toolUseId" ], tool_result =tool_result , ) ) ①ツール一覧情報取得 ②Bedrock呼び出し(Tool Use) ③ツール実行 ④ツール実行結果

Slide 25

Slide 25 text

Bedrockエージェントの場合 25 https://bit.ly/4isWPfs インラインエージェントと簡単に連携できるSDKをAWSが公開! Amazon Bedrock Inline Agent SDK https://github.com/awslabs/amazon-bedrock-agent-samples/tree/main/src/InlineAgent インラインエージェン トとは?の解説はこち ら!

Slide 26

Slide 26 text

Bedrockエージェントの場合 Amazon Bedrock Inline Agent SDKをインストール ※PyPIに公開されておらず、また、GitHub上もリポジトリの一部なので、インストールコマンドが特殊 26 uv add git+https://github.com/awslabs/amazon-bedrock-agent-samples#subdirectory=src/InlineAgent server_params = StdioServerParameters (command="docker", args=["run", "-i", "--rm", "mcp/time" ]) async def main(input_text : str): # MCPクライアントを作成 time_mcp_client = await MCPStdio.create(server_params =server_params ) try: time_action_group = ActionGroup ( name="TimeActionGroup" , description ="ユーザーが現在の時刻を取得し、時間を変換するのに役立ちます。 ", mcp_clients =[time_mcp_client ], ) await InlineAgent ( foundation_model ="us.amazon.nova-pro-v1:0" , instruction ="""あなたは、ユーザーからの問い合わせを解決する責任を負うフレンドリーなアシスタントです。 """, agent_name ="time_agent" , action_groups =[time_action_group ], ). invoke(input_text =input_text ) finally: await time_mcp_client .cleanup() if __name__ == "__main__" : asyncio.run(main(input_text ="今、東京は、何時ですか? ")) 最小限のコードで呼び出し可能

Slide 27

Slide 27 text

注意点 27 ● Bedrockエージェントの制約にまぁまぁ引っかかる😓 ○ ひとつのツールのパラメーターは5個まで ○ Actionグループに対するツールは5つまで ○ ツールのDescriptionが1200文字まで そのため、紹介したAWS製のMCPサーバーがほとんど使えません😭

Slide 28

Slide 28 text

最後に 28

Slide 29

Slide 29 text

MCPサーバーをLambdaで実現するサンプルを作りました🎊🎊🎊 29 https://github.com/moritalous/mcp-streamablehttp-lambda-sample ● Streamable HTTP ● ステートレスなツール ● 特殊な実装はなし ● Lambda Web Adapter

Slide 30

Slide 30 text

Streamlitで任意のMCPを加えられるチャットアプリ公開してます🎊🎊🎊 30 ● モデル選択 ● プロンプトキャッシュ ● チャット履歴のYAML保存 ● MCPツールの有効無効 https://github.com/moritalous/bedrock-mcp-streamlit-v2