Slide 1

Slide 1 text

2025/04/17 George Yoshida エンジニアのためのMCP勉強会 #1 MCPを活⽤した検索システムの作り⽅

Slide 2

Slide 2 text

⾃⼰紹介 2 ● 名前 ○ George Yoshida ● ブログ ○ https://dev.classmethod.jp/author/quiver/ ● 部署 ○ クラスメソッドクラウド事業本部エンジニア ● 検索周り ○ RAG検索案件担当中 ○ DevelopersIOの⼀世代前のAlgoliaを使った ブログ検索のインデクシング周りを担当 ● 所属チームの内製化⽀援事例 ○ 三菱UFJ銀⾏さま ○ H2Oさま

Slide 3

Slide 3 text

⼟地勘のあるAWS x 検索を切り⼝にホットなMCPを学んでみた 3 ● 新しいAIの概念は理解に時間がかかる ● AWSがMCPサーバー群をリリース ● ⾝近なAWSとドキュメント検索を具体例にMCPを学んでみた

Slide 4

Slide 4 text

MCPを活⽤した検索システムの作り⽅

Slide 5

Slide 5 text

MCPを活⽤した検索システムの作り⽅ 〜MCPサーバーはつなぐだけ、検索機能は別物〜

Slide 6

Slide 6 text

AWS MCP Serversについて 6 ● AWSのベストプラクティスをMCPサーバーとして提供 ● https://github.com/awslabs/mcp/ で OSSとして公開 https://aws.amazon.com/blogs/machine-learning/introducing-aws-mcp-servers-for-code-assistants-part-1/

Slide 7

Slide 7 text

AWS MCP Server群 7 ● Core MCP Server ● Amazon Bedrock Knowledge Base Retrieval MCP Server ※検索系 ● AWS CDK MCP Server ● Cost Analysis MCP Server ● Amazon Nova Canvas MCP Server ● AWS Documentation MCP Server ※検索系 ● AWS Lambda MCP Server ● AWS Diagram MCP Server ● AWS Terraform MCP Server

Slide 8

Slide 8 text

AWS Documentation MCP Serverとは? 8 ● MCP観点 ○ 最新のAWSドキュメントを元に検索‧推薦するMCPツール ● ユーザー観点 ○ MCPクライアントからAWSの質問をすると、最新のAWSドキュメント を元に、回答を⽣成してくれる

Slide 9

Slide 9 text

AWS Documentation MCP Serverの利⽤⽅法

Slide 10

Slide 10 text

インストール:MCPサーバー 10 ● MCPはクライアント‧サーバー‧アーキテクチャー ● AWS Documentation MCP Serverは STDIO⽅式でプロセス間通信 ● クライアントとサーバーを同じ環境にインストール ● AWS Documentation MCP ServerはPythonで実装 ● 環境構築⽤プログラム uv をインストール ● uvx の絶対パスを控える $ curl -LsSf https://astral.sh/uv/install.sh | sh $ which uvx /Users/ユーザー名 /.local/bin/uvx

Slide 11

Slide 11 text

インストール:Claude Desktop 11 ● Claude Desktop⼊⼿先 ○ https://claude.ai/download ● 設定 ○ Settings→Developer→Edit Config

Slide 12

Slide 12 text

インストール:Claude Desktopの設定ファイル 12 { "mcpServers": { "awslabs.aws-documentation-mcp-server": { "command": "/Users/ユーザー名 /.local/bin/uvx", "args": ["awslabs.aws-documentation-mcp-server@latest"], "env": { "FASTMCP_LOG_LEVEL": "ERROR" }, "disabled": false, "autoApprove": [] } } } 先ほど控えた uvx の絶対パスを転載 ※サーバーをコンテナ化して起動させることも多いです ※トランスポートはSTDIOなので、クライアントプログラムがcommand/argsを元にサーバープログラムをサブプロセス起動

Slide 13

Slide 13 text

Claude DesktopからAWS Documentation MCP Serverを動かす 13 ● AWSドキュメントを参照して回答 ● ナレッジカットオフなし

Slide 14

Slide 14 text

LLMはMCPツールの⼒を借りて処理 14 ● ⻘枠がMCPツール ● LLMがMCPの⼒を借りて処理 ● 2種類のツールを活⽤ ○ search_documentation ○ read_documentation ● 何をやっている?

Slide 15

Slide 15 text

MCP検索サーバーの通信の流れ 15

Slide 16

Slide 16 text

General ArchitectureのWeb APIを介したリモートサービス⽅式 16 https://modelcontextprotocol.io/introduction

Slide 17

Slide 17 text

search_documentation:リモートサービスに検索 17 $ curl -X POST https://proxy.search.docs.aws.amazon.com/search \ -H "Content-Type: application/json" -d '{ "textQuery": { "input": "S3 bucket naming rules" }, "contextAttributes": [{ "key": "domain", "value": "docs.aws.amazon.com" }], "acceptSuggestionBody": "RawText", "locales": ["en_us"]}' { "queryId": "40dd0cc1-4e0f-42af-9385-a1878fe3cbb5", "suggestions": [ { "textExcerptSuggestion": { "link": "https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-naming.html", "title": "Amazon S3 table bucket, table, and namespace naming rules - Amazon Simple Storage Service", "suggestionBody": "For general purpose bucket naming rules, see General purpose bucket naming rules...", … AWSのオフィシャルなドキュメント検索APIに無認証で検索しているだけ

Slide 18

Slide 18 text

read_documentation:ドキュメント取得 18 @mcp.tool() async def search_documentation(...) -> List[SearchResult]: … request_body = { 'textQuery': { 'input': search_phrase, }, 'contextAttributes': [{'key': 'domain', 'value': 'docs.aws.amazon.com'}], 'acceptSuggestionBody': 'RawText', 'locales': ['en_us'], } async with httpx.AsyncClient() as client: try: response = await client.post( SEARCH_API_URL, json=request_body, headers={'Content-Type': 'application/json', 'User-Agent': DEFAULT_USER_AGENT}, timeout=30, ) https://github.com/awslabs/mcp/blob/main/src/aws-documentation-mcp-server/awslabs/aws_documentation_mcp_server/server.py `httpx` でお馴染みのドキュメントサイトからドキュメントを取得

Slide 19

Slide 19 text

read_documentation:ドキュメント整形 19 def extract_content_from_html(html: str) -> str: … try: # First use BeautifulSoup to clean up the HTML from bs4 import BeautifulSoup # Parse HTML with BeautifulSoup soup = BeautifulSoup(html, 'html.parser') … # Use markdownify on the cleaned HTML content content = markdownify.markdownify( str(main_content), … ) … return content https://github.com/awslabs/mcp/blob/main/src/aws-documentation-mcp-server/awslabs/aws_documentation_mcp_server/util.py `beautifulsoup`と`markdownify` でドキュメントを整形

Slide 20

Slide 20 text

他の検索MCPサーバーものぞいてみた

Slide 21

Slide 21 text

Amazon Bedrock Knowledge Basesに検索 21 https://github.com/awslabs/mcp/tree/main/src/bedrock-kb-retrieval-mcp-server

Slide 22

Slide 22 text

Meilisearchに検索 22 https://github.com/meilisearch/meilisearch-mcp

Slide 23

Slide 23 text

MCPで検索システムを作るとは? 23 1. リモートサービスとしてMCP外に検索システムを⽤意 2. MCPサーバーからMCPツールで検索システムに検索

Slide 24

Slide 24 text

公開されている検索系MCPサーバーの共通点 24 ● 検索システムがすでにある前提 ● 検索システムとつなぎこむ軽量なMCPサーバーを実装しただけ

Slide 25

Slide 25 text

MCPサーバーはライトウェイトなプログラム 25 ● 公式ドキュメント(※)から ○ MCP Servers: Lightweight programs that each expose specific capabilities through the standardized Model Context Protocol ● 重厚な作りの検索MCPサーバーはなにか間違えている可能性 ※ https://modelcontextprotocol.io/introduction

Slide 26

Slide 26 text

MCPを活⽤した検索システムの作り⽅ 26

Slide 27

Slide 27 text

検索システムを作るのは重労働 27 ● 検索エンジンどうする? ● インデックスどうする? ● 検索対象となるドキュメントは? ● ドキュメントとインデックスの連動はどうする? ● 検索インターフェースは? ● 検索の性能評価どうする? ● 検索性能を改善するには?

Slide 28

Slide 28 text

検索システムが回答の肝 28 ● MCPはインターフェースでしかない ● LLMが⽣成する回答の質は検索結果に強く依存 ● ライトウェイトなMCPサーバーではなく、ヘビーウェイトな検索システ ムに向き合う必要がある

Slide 29

Slide 29 text

これから検索システムに携わる⼈のための2冊

Slide 30

Slide 30 text

⾃然⾔語処理の教科書 30 ● 著者 : ⼩町 守 ● 出版社 : 技術評論社 ● 発売⽇ : 2024/5/24 ● ISBN- : 978-4297138639 ● 概要 ○ 検索によらず、社内情報のAI活⽤といった広義の⾃然⾔語処 理プロジェクトの様々なロールに向けられた本 ● おすすめの章 ○ 第1章:⾃然⾔語システムのデザイン ○ 第5章:⾔語資源のつくり⽅

Slide 31

Slide 31 text

検索システム 31 ● 著者 : 打⽥智⼦‧古澤智裕‧⼤⾕ 純‧加藤 遼‧鈴⽊翔吾‧河野晋策 ● 出版社 : ラムダノート ● 発売⽇ : 2022/5/2 ● ISBN- : 978-4908686139 ● 概要 ○ 実務者のための開発改善ガイドブック ● おすすめの章 ○ 第7章:よい検索とは ○ 第8章:検索システムプロジェクトの始め⽅

Slide 32

Slide 32 text

MCPを活⽤した検索システムの作り⽅

Slide 33

Slide 33 text

MCPで検索システムを作るとは? 33 ● リモートサービスとしてMCP外に検索システムを⽤意 ● MCPツールで検索システムに検索 ● 検索システムが無い場合、まずは検索システムを作る ● MCPサーバーはライトウェイト ● 検索システムはヘビーウェイト ● 回答の質に直結する検索システムに向き合うこと

Slide 34

Slide 34 text

No content