Understanding How Claude Uses Tools

Introduction & Overview

Welcome to understanding how Claude responds when it decides to use your tools! In the previous lesson, you learned how to create tool schemas that describe your functions to Claude. Now you'll discover how to include these tools in your API requests and, more importantly, how to interpret Claude's responses when it wants to use them.

In this lesson, you'll learn how to configure your requests to enable tool use, understand the different types of responses Claude can provide, and extract the specific information you need to execute the tools Claude requests. By the end, you'll be able to recognize when Claude wants to use a tool and gather all the details needed to make that happen.

Adding Tool Guidance to Your System Prompt

While Claude will automatically see and can use any tools you provide in your request, mentioning tools in your system prompt can help ensure more consistent behavior and guide Claude toward using them appropriately.

Here's an example of how you can improve your system prompt:

TypeScript
import Anthropic from "@anthropic-ai/sdk";

// Initialize the Anthropic client
const client = new Anthropic();

// System prompt with optional tool usage guidance
const systemPrompt = 
    "You are a helpful math assistant. " +
    "When performing calculations, use the available tools for accuracy.";

This guidance helps Claude understand your preferences for when and how to use tools, but it's not required for tool functionality. Claude can still recognize and use tools based solely on their availability in the request.

Providing Tools to Claude

The tools parameter is the essential component that makes your functions available to Claude. This parameter accepts the JSON array of schemas you created in the previous lesson:

import fs from 'fs';

// Load your tool schemas
const schemasJson = fs.readFileSync('schemas.json', 'utf-8');
const toolSchemas = JSON.parse(schemasJson);

// Create a message requesting a calculation
const messages: Anthropic.MessageParam[] = [
    { role: "user", content: "Please calculate 15 + 27" }
];

// Send the request with tools enabled
const response = await client.messages.create({
    model: "claude-sonnet-4-6",
    max_tokens: 2000,
    messages: messages,
    system: systemPrompt,
    tools: toolSchemas  // This makes your tools available to Claude
});

Claude will recognize the available tools from the tools parameter alone. The system prompt guidance can be helpful for encouraging consistent tool usage patterns, but Claude will still be able to see and use your tools even without explicit instructions in the system prompt.

Sign up

Join the 1M+ learners on CodeSignal

Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal