MCPとLLM:ツール

Model Context Protocol(MCP)入門

James Chapman

AI Curriculum Manager, DataCamp

MCPツールからLLMツールへ

 

ツールとLLMの統合はLLMに依存する

  • LLMによってツールの受け取り方や構文が異なる
  • Anthropic Messages API 経由で Claude を使用
  • 重点:処理と変換

llm_mcp.pngの画像

Model Context Protocol(MCP)入門

ツール呼び出しのワークフロー

fct1.jpgの画像

Model Context Protocol(MCP)入門

ツール呼び出しのワークフロー

fct2.jpgの画像

Model Context Protocol(MCP)入門

ツール呼び出しのワークフロー

fct3.jpgの画像

Model Context Protocol(MCP)入門

ツール呼び出しのワークフロー

fct4.jpgの画像

Model Context Protocol(MCP)入門

ツール呼び出しのワークフロー

fct5.jpgの画像

Model Context Protocol(MCP)入門

ツール呼び出しのワークフロー

fct6.jpgの画像

Model Context Protocol(MCP)入門

MCPサーバー:timezone_server.py

from mcp.server.fastmcp import FastMCP
import requests

mcp = FastMCP("Timezone Converter")

@mcp.tool()
def convert_timezone(date_time: str, from_timezone: str, to_timezone: str) -> str:
    ...

if __name__ == "__main__":
    mcp.run(transport="stdio")
Model Context Protocol(MCP)入門

クライアントコードの拡張

async def get_tools_from_mcp():
            # ... 
            return response.tools

async def call_mcp_tool(tool_name: str, arguments: dict) -> str:        
            # ...
            result = await session.call_tool(tool_name, arguments)
            return str(result.content[0].text)

async def call_anthropic_llm(user_query: str):
Model Context Protocol(MCP)入門

準備:LLM向けにツールを整形する

async def call_anthropic_llm(user_query: str):
    """Call Claude with MCP tools."""

mcp_tools = await get_tools_from_mcp()
anthropic_tools = [] for tool in mcp_tools:
anthropic_tool = { "name": tool.name, "description": tool.description or "", "input_schema": tool.inputSchema, # MCP uses JSON Schema format }
anthropic_tools.append(anthropic_tool)
Model Context Protocol(MCP)入門

1. クエリとツールをLLMに送信する

from anthropic import AsyncAnthropic
async def call_anthropic_llm(user_query: str):
    # ...

client = AsyncAnthropic(api_key="<ANTHROPIC_API_TOKEN>")
response = await client.messages.create( model="claude-sonnet-4-6", max_tokens=1024, messages=[{"role": "user", "content": user_query}], tools=anthropic_tools, )
Model Context Protocol(MCP)入門

2. ツール呼び出しの確認

async def call_anthropic_llm(user_query: str):
    # ...

    if response.stop_reason == "tool_use":

tool_use = next(b for b in response.content if b.type == "tool_use") name = tool_use.name args = tool_use.input print(f"Model decided to call: {name}") print(f"Arguments: {args}\n")
Model Context Protocol(MCP)入門

3. ツールの呼び出し | 4. フォローアップメッセージ

async def call_anthropic_llm(user_query: str):
    # ...

    if response.stop_reason == "tool_use":
        # ...

result = await call_mcp_tool(name, args)
tool_result = {"type": "tool_result", "tool_use_id": tool_use.id, "content": result} followup = await client.messages.create( model="claude-sonnet-4-6", max_tokens=1024, messages=[ {"role": "user", "content": user_query}, {"role": "assistant", "content": response.content}, {"role": "user", "content": [tool_result]}, ], tools=anthropic_tools, )
Model Context Protocol(MCP)入門

5. 最終応答

async def call_anthropic_llm(user_query: str):
    # ...

    if response.stop_reason == "tool_use":
        # ...

final = next((b.text for b in followup.content if b.type == "text"), None) if final: print(f"\nAssistant: {final}") else: print("No follow-up message from model.")
else: text = next((b.text for b in response.content if b.type == "text"), "") print(f"\nAssistant: {text}") return str(text)
Model Context Protocol(MCP)入門

関数のテスト

if __name__ == "__main__":
    asyncio.run(call_anthropic_llm("It is 9:50 AM in the UK in January. What time 
    is it in Lisbon, Portugal?"))
Assistant: It's 9:50 AM in Lisbon as well.
Model Context Protocol(MCP)入門

ツール呼び出しのワークフロー

fct6.jpgの画像

Model Context Protocol(MCP)入門

練習しましょう!

Model Context Protocol(MCP)入門

Preparing Video For Download...