내장 도구
직접 커스텀 도구를 만들 수도 있지만, 일부 기능은 너무 흔해서 Anthropic이 미리 만들어 제공합니다. 코드를 작성할 필요가 없습니다. 샌드박스를 호스팅할 필요도 없습니다. 그저 도구를 선언하기만 하면, Anthropic이 이를 실행합니다.
서버 도구: 여러분이 선언하고, Anthropic이 실행
Anthropic은 자체 인프라에서 실행되는 서버 도구를 제공합니다. 이를 실행하는 것은 여러분이 아니라 Anthropic입니다. 즉, 이러한 호출에는 에이전트 루프가 필요하지 않습니다. Claude가 스스로 도구를 호출하고, 결과는 동일한 응답 안에 돌아옵니다.
주요 도구는 다음과 같습니다:
- 웹 검색 — 인터넷을 검색하고 인용과 함께 결과를 반환합니다
- 코드 실행 — 샌드박스에서 Python을 작성하고 실행합니다
- 웹 가져오기 — URL에서 전체 콘텐츠를 가져옵니다
한 파일에 담긴 두 가지 서버 도구
한 파일에서 주요 도구 몇 가지를 살펴보겠습니다: 두 번의 messages.create 호출로, 하나는 웹 검색을, 다른 하나는 코드 실행을 사용합니다.
import anthropic
client = anthropic.Anthropic()
# 호출 1: 웹 검색 — Anthropic이 서버 측에서 검색을 실행합니다
search_response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
tools=[{"type": "web_search_20260209", "name": "web_search"}],
messages=[
{"role": "user", "content": "What is Anthropic's latest model release? Answer in one sentence."}
],
)
for block in search_response.content:
if block.type == "server_tool_use":
print(f"Tool call: {block.name} — {block.input}")
elif block.type == "text":
print(block.text)
# 호출 2: 코드 실행 — Claude가 샌드박스에서 Python을 작성하고 실행합니다
code_response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
tools=[{"type": "code_execution_20260120", "name": "code_execution"}],
messages=[
{"role": "user", "content": "Calculate the mean and standard deviation of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"}
],
)
for block in code_response.content:
if block.type == "server_tool_use":
print(f"Tool call: {block.name} — {block.input}")
elif block.type == "bash_code_execution_tool_result":
print(f"stdout: {block.content.stdout}")
elif block.type == "text":
print(block.text)주목할 두 가지 사항:
- 여기에는 에이전트 루프가 없습니다.
stop_reason을 확인하지 않습니다. 도구 결과를 다시 전달하지도 않습니다. Anthropic이 서버 측에서 도구를 실행하고, 응답에는 이미 결과가 포함되어 있습니다. - 응답에는 새로운 블록 유형이 있습니다. 도구 호출을 위한
server_tool_use블록, 출력을 위한 코드 실행 도구 결과 블록, 그리고 일반적인text블록이 있습니다.
실행해 보기
웹 검색의 경우, Claude의 도구 호출이 출력되는 것을 볼 수 있고, 이어서 검색 인용이 포함된 최신 모델 출시에 관한 한 문장짜리 답변을 볼 수 있습니다.
코드 실행의 경우, Claude가 작성한 실제 Python 코드, 이를 실행한 샌드박스의 stdout, 그리고 최종 텍스트 답변을 볼 수 있습니다.
우리는 검색 크롤러를 직접 구축할 필요가 없었습니다. Python 샌드박스를 직접 실행할 필요도 없었습니다. 두 개의 도구를 선언했을 뿐인데 둘 다 무료로 얻었습니다.
또 다른 범주: 클라이언트 도구
또 다른 범주가 존재한다는 것도 알아둘 가치가 있습니다. 클라이언트 도구는 여러분의 코드가 실행되는 곳에서 실행됩니다. Anthropic이 스키마를 공개하고 Claude를 이에 맞춰 학습시키므로, 여러분이 직접 스키마를 정의할 필요가 없습니다. 두 가지 예시:
- 메모리 — Claude가 세션 전반에 걸쳐 메모리를 읽고 씁니다
- Bash — Claude가 명령을 실행할 수 있는 지속적인 bash 셸

이들은 커스텀 도구와 동일한 형태를 가지지만, 스키마가 Claude에 내장되어 있습니다. 여러분의 코드는 여전히 이를 실행합니다: 메모리의 경우 SDK 중 네 개가 여러분이 제공하는 저장소에 대해 Claude의 메모리 호출을 처리하는 헬퍼를 제공하며, bash의 경우 여러분의 애플리케이션이 직접 셸을 실행합니다.
프로덕션에서 이것이 중요한 이유
프로덕션 앱에서 이는 그렇지 않으면 몇 주가 걸릴 기능에 도달하는 가장 빠른 경로입니다. 웹 검색은 초안에 포함된 모든 수치 및 규제 관련 주장을 실시간 웹과 대조하여 검증하는 팩트체크 엔드포인트를 구동할 수 있습니다.

다만 한 가지 유의할 점: 인터넷에서 검증되었다고 해서 그것이 반드시 사실이라는 의미는 아닙니다. 항상 Claude의 작업을 다시 한번 확인하세요.
요약
- 서버 도구 — 웹 검색, 코드 실행, 웹 가져오기 — 는
tools배열에 선언됩니다. Anthropic이 이를 실행합니다. - 에이전트 루프가 필요 없이 동일한 응답에서 결과를 받습니다. 일반 텍스트 블록과 함께
server_tool_use및 도구 결과 블록을 확인하세요. - 메모리와 bash 같은 클라이언트 도구는 여러분의 코드가 실행되는 곳에서 실행됩니다. 스키마는 Claude에 내장되어 있으며, SDK 중 네 개가 메모리용 헬퍼를 제공하고, bash의 경우 여러분의 코드가 셸을 실행합니다.
- "Anthropic이 호스팅한다"는 개념은 끝까지 확장됩니다: 관리형 에이전트는 이를 단일 도구가 아니라 에이전트 전체에 적용합니다.