Aan de slagBegin gratis

LLM-hulpmiddelen gebruiken in MCP-servers

Je hebt een MCP-server gebouwd met een tool om valuta om te rekenen met actuele wisselkoersen. Door deze te integreren met een LLM kan het model vragen over valuta en wisselkoersen nauwkeurig beantwoorden — iets wat het standaard niet kan.

Het grootste deel van de code is alvast voor je klaargezet, omdat de focus hier ligt op het begrijpen van de workflow in plaats van de syntax.

Deze oefening maakt deel uit van de cursus

Introductie tot Model Context Protocol (MCP)

Bekijk cursus

Oefeninstructies

  • Stuur de gebruikersvraag (user_query) en de geformatteerde lijst met tools (anthropic_tools) naar Claude.
  • Roep de MCP-tool aan die door de LLM is gekozen, met de naam en argumenten die uit het tool use-blok zijn gehaald.
  • Stuur het resultaat (result) terug naar Claude voor het definitieve antwoord.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

async def call_anthropic_llm(user_query: str):
    """Call Claude with MCP tools."""
    
    print(f"\nUser: {user_query}\n")

    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,
        }
        anthropic_tools.append(anthropic_tool)
    
    # Send the user query and formatted tools to the LLM
    client = AsyncAnthropic(api_key="")

    response = await client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=1024,
        messages=____,
        tools=____,
    )

    if response.stop_reason == "tool_use":
        tool_use = next(block for block in response.content if block.type == "tool_use")
        name = tool_use.name
        args = tool_use.input

        print(f"Model decided to call: {name}")
        print(f"Arguments: {args}\n")

        # Call the MCP tool
        result = await call_mcp_tool(____, ____)

        # Send the result back to Claude for the final response
        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": [
                        {
                            "type": "tool_result",
                            "tool_use_id": tool_use.id,
                            "content": ____,
                        }
                    ],
                },
            ],
            tools=anthropic_tools,
        )

        final_text = next((block.text for block in followup.content if block.type == "text"), None)
        if final_text:
            print(f"\nAssistant: {final_text}")
            return str(final_text)
        else:
            print("No follow-up message from model.")

    else:
        text = next((block.text for block in response.content if block.type == "text"), "")
        print(f"\nAssistant: {text}")
        return str(text)


if __name__ == "__main__":
    asyncio.run(call_anthropic_llm("How much is 250 US dollars in euros?"))
Code bewerken en uitvoeren