Anthropic 의 tool-use 이야기에는 나중에 값을 하는 작은 비틀림이 하나 있어. Tool 을 세 갈래 로 나눠. 셋 다 같은 tools 배열에 들어가지만 모양이 서로 달라.
- Custom tools — 네가 만든 tool.
name,description,input_schema(JSON Schema) 로 정의해. 개발자 95% 가 처음 손대는 게 이거고, 다른 provider 와 생김새도 같아. - Anthropic 이 정의한 tools — Anthropic 이 내보내서 모델이 태어날 때부터 아는 tool 들이야.
computer_20250124,text_editor_20250124,bash_20250124. 타입만 적어서 선언하고, schema 는 Anthropic 이 들고 있어. Claude Code 에서 Claude 가 진짜 컴퓨터를 조작할 수 있는 것도 이것들 덕이야 — 동작 하나하나를 따로 가르치지 않아도 되거든. - MCP server tools — Anthropic API 는 MCP server 와 직접 말할 수 있고, 그렇게 받아온 tool 을 custom tool 옆 같은 배열에 나란히 올려. MCP track 에서 다시 만날 거야.
기계적으로 보면 Anthropic 의 loop 는 깔끔해. Tool 과 메시지를 보내면 content block 이 돌아와. Response 의 content 는 list 야. 텍스트는 type: "text", tool 호출은 type: "tool_use" 에 name 과 input 이 실려 있고, 이 input 은 진짜 dict 야 — JSON 문자열이 아니라. Tool 결과는 원래 tool_use.id 를 가리키는 tool_result block 으로 만들어 user 메시지에 담아 돌려줘.
Loop 를 이끄는 권위 있는 신호는 stop_reason 필드야. "end_turn" 이면 모델이 끝냈다는 뜻, "tool_use" 면 tool 을 부르겠다는 뜻, "max_tokens" 면 예산을 다 썼다는 뜻이지. 분기는 여기서 해. 텍스트를 보고는 절대 하지 마.