Uso de herramientas de LLM en servidores MCP
Has creado un servidor MCP que incluye una herramienta para convertir divisas usando tipos de cambio actualizados. Integrarlo con un LLM le dará la capacidad de responder con precisión a preguntas sobre monedas y tipos de cambio, algo que no puede hacer por defecto.
Aquí tienes la mayor parte del código ya preparada, porque el objetivo principal es comprender el flujo de trabajo más que la sintaxis.
Este ejercicio forma parte del curso
Introducción a Model Context Protocol (MCP)
Instrucciones del ejercicio
- Envía la consulta del usuario (
user_query) y la lista formateada de herramientas (anthropic_tools) a Claude. - Llama a la herramienta de MCP que el LLM haya elegido, usando el nombre y los argumentos extraídos del bloque de uso de herramienta.
- Envía el resultado (
result) de vuelta a Claude para obtener la respuesta final.
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
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?"))