# create_tool_calling_agent

> **Function** in `langchain_classic`

📖 [View in docs](https://reference.langchain.com/python/langchain-classic/agents/tool_calling_agent/base/create_tool_calling_agent)

Create an agent that uses tools.

## Signature

```python
create_tool_calling_agent(
    llm: BaseLanguageModel,
    tools: Sequence[BaseTool],
    prompt: ChatPromptTemplate,
    *,
    message_formatter: MessageFormatter = format_to_tool_messages,
) -> Runnable
```

## Description

**Example:**

```python
from langchain_classic.agents import (
    AgentExecutor,
    create_tool_calling_agent,
    tool,
)
from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful assistant"),
        ("placeholder", "{chat_history}"),
        ("human", "{input}"),
        ("placeholder", "{agent_scratchpad}"),
    ]
)
model = ChatAnthropic(model="claude-opus-4-1-20250805")

@tool
def magic_function(input: int) -> int:
    """Applies a magic function to an input."""
    return input + 2

tools = [magic_function]

agent = create_tool_calling_agent(model, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

agent_executor.invoke({"input": "what is the value of magic_function(3)?"})

# Using with chat history
from langchain_core.messages import AIMessage, HumanMessage
agent_executor.invoke(
    {
        "input": "what's my name?",
        "chat_history": [
            HumanMessage(content="hi! my name is bob"),
            AIMessage(content="Hello Bob! How can I assist you today?"),
        ],
    }
)
```

**Prompt:**

The agent prompt must have an `agent_scratchpad` key that is a
`MessagesPlaceholder`. Intermediate agent actions and tool output
messages will be passed in here.

**Troubleshooting:**

- If you encounter `invalid_tool_calls` errors, ensure that your tool
functions return properly formatted responses. Tool outputs should be
serializable to JSON. For custom objects, implement proper __str__ or
to_dict methods.

## Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `llm` | `BaseLanguageModel` | Yes | LLM to use as the agent. |
| `tools` | `Sequence[BaseTool]` | Yes | Tools this agent has access to. |
| `prompt` | `ChatPromptTemplate` | Yes | The prompt to use. See Prompt section below for more on the expected input variables. |
| `message_formatter` | `MessageFormatter` | No | Formatter function to convert (AgentAction, tool output) tuples into FunctionMessages. (default: `format_to_tool_messages`) |

## Returns

`Runnable`

A Runnable sequence representing an agent. It takes as input all the same input

---

[View source on GitHub](https://github.com/langchain-ai/langchain/blob/f0c5a28fa05adcda89aebcb449d897245ab21fa4/libs/langchain/langchain_classic/agents/tool_calling_agent/base.py#L18)