설치
query()
와 ClaudeSDKClient
중 선택하기
Python SDK는 Claude Code와 상호작용하는 두 가지 방법을 제공합니다:
빠른 비교
기능 | query() | ClaudeSDKClient |
---|---|---|
세션 | 매번 새 세션 생성 | 동일한 세션 재사용 |
대화 | 단일 교환 | 동일한 컨텍스트에서 여러 교환 |
연결 | 자동으로 관리됨 | 수동 제어 |
스트리밍 입력 | ✅ 지원됨 | ✅ 지원됨 |
중단 | ❌ 지원되지 않음 | ✅ 지원됨 |
훅 | ❌ 지원되지 않음 | ✅ 지원됨 |
사용자 정의 도구 | ❌ 지원되지 않음 | ✅ 지원됨 |
채팅 계속하기 | ❌ 매번 새 세션 | ✅ 대화 유지 |
사용 사례 | 일회성 작업 | 지속적인 대화 |
query()
사용 시기 (매번 새 세션)
최적 용도:
- 대화 기록이 필요하지 않은 일회성 질문
- 이전 교환의 컨텍스트가 필요하지 않은 독립적인 작업
- 간단한 자동화 스크립트
- 매번 새로운 시작을 원할 때
ClaudeSDKClient
사용 시기 (지속적인 대화)
최적 용도:
- 대화 계속하기 - Claude가 컨텍스트를 기억해야 할 때
- 후속 질문 - 이전 응답을 기반으로 구축
- 대화형 애플리케이션 - 채팅 인터페이스, REPL
- 응답 기반 로직 - 다음 동작이 Claude의 응답에 따라 달라질 때
- 세션 제어 - 대화 생명주기를 명시적으로 관리
함수
query()
Claude Code와의 각 상호작용에 대해 새 세션을 생성합니다. 메시지가 도착하면 이를 생성하는 비동기 반복자를 반환합니다. query()
에 대한 각 호출은 이전 상호작용의 메모리 없이 새롭게 시작합니다.
매개변수
매개변수 | 타입 | 설명 |
---|---|---|
prompt | str | AsyncIterable[dict] | 문자열 또는 스트리밍 모드용 비동기 반복 가능 객체로서의 입력 프롬프트 |
options | ClaudeAgentOptions | None | 선택적 구성 객체 (None인 경우 ClaudeAgentOptions() 로 기본값 설정) |
반환값
대화에서 메시지를 생성하는AsyncIterator[Message]
를 반환합니다.
예제 - 옵션과 함께
tool()
타입 안전성을 갖춘 MCP 도구 정의를 위한 데코레이터입니다.
매개변수
매개변수 | 타입 | 설명 |
---|---|---|
name | str | 도구의 고유 식별자 |
description | str | 도구가 수행하는 작업에 대한 사람이 읽을 수 있는 설명 |
input_schema | type | dict[str, Any] | 도구의 입력 매개변수를 정의하는 스키마 (아래 참조) |
입력 스키마 옵션
-
간단한 타입 매핑 (권장):
-
JSON 스키마 형식 (복잡한 검증용):
반환값
도구 구현을 래핑하고SdkMcpTool
인스턴스를 반환하는 데코레이터 함수입니다.
예제
create_sdk_mcp_server()
Python 애플리케이션 내에서 실행되는 인프로세스 MCP 서버를 생성합니다.
매개변수
매개변수 | 타입 | 기본값 | 설명 |
---|---|---|---|
name | str | - | 서버의 고유 식별자 |
version | str | "1.0.0" | 서버 버전 문자열 |
tools | list[SdkMcpTool[Any]] | None | None | @tool 데코레이터로 생성된 도구 함수 목록 |
반환값
ClaudeAgentOptions.mcp_servers
에 전달할 수 있는 McpSdkServerConfig
객체를 반환합니다.
예제
클래스
ClaudeSDKClient
여러 교환에 걸쳐 대화 세션을 유지합니다. 이는 TypeScript SDK의 query()
함수가 내부적으로 작동하는 방식과 동등한 Python 버전입니다 - 대화를 계속할 수 있는 클라이언트 객체를 생성합니다.
주요 기능
- 세션 연속성: 여러
query()
호출에 걸쳐 대화 컨텍스트 유지 - 동일한 대화: Claude가 세션의 이전 메시지를 기억함
- 중단 지원: Claude를 실행 중에 중지할 수 있음
- 명시적 생명주기: 세션 시작과 종료를 제어
- 응답 기반 흐름: 응답에 반응하고 후속 조치를 보낼 수 있음
- 사용자 정의 도구 및 훅: 사용자 정의 도구(
@tool
데코레이터로 생성)와 훅 지원
메서드
메서드 | 설명 |
---|---|
__init__(options) | 선택적 구성으로 클라이언트 초기화 |
connect(prompt) | 선택적 초기 프롬프트 또는 메시지 스트림으로 Claude에 연결 |
query(prompt, session_id) | 스트리밍 모드에서 새 요청 전송 |
receive_messages() | Claude로부터 모든 메시지를 비동기 반복자로 수신 |
receive_response() | ResultMessage를 포함하여 메시지를 수신 |
interrupt() | 중단 신호 전송 (스트리밍 모드에서만 작동) |
disconnect() | Claude에서 연결 해제 |
컨텍스트 매니저 지원
클라이언트는 자동 연결 관리를 위한 비동기 컨텍스트 매니저로 사용할 수 있습니다:
중요: 메시지를 반복할 때, asyncio 정리 문제를 일으킬 수 있으므로 조기 종료를 위해 break
를 사용하지 마세요. 대신 반복이 자연스럽게 완료되도록 하거나 플래그를 사용하여 필요한 것을 찾았을 때를 추적하세요.
예제 - 대화 계속하기
예제 - ClaudeSDKClient와 스트리밍 입력
예제 - 중단 사용하기
예제 - 고급 권한 제어
타입
SdkMcpTool
@tool
데코레이터로 생성된 SDK MCP 도구의 정의입니다.
속성 | 타입 | 설명 |
---|---|---|
name | str | 도구의 고유 식별자 |
description | str | 사람이 읽을 수 있는 설명 |
input_schema | type[T] | dict[str, Any] | 입력 검증을 위한 스키마 |
handler | Callable[[T], Awaitable[dict[str, Any]]] | 도구 실행을 처리하는 비동기 함수 |
ClaudeAgentOptions
Claude Code 쿼리를 위한 구성 데이터클래스입니다.
속성 | 타입 | 기본값 | 설명 |
---|---|---|---|
allowed_tools | list[str] | [] | 허용된 도구 이름 목록 |
max_thinking_tokens | int | 8000 | 사고 과정을 위한 최대 토큰 수 |
system_prompt | str | None | None | 시스템 프롬프트 구성. 사용자 정의 프롬프트의 경우 문자열을 전달하거나, Claude Code의 시스템 프롬프트에 대해 사전 설정 형식을 사용 |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | MCP 서버 구성 또는 구성 파일 경로 |
permission_mode | PermissionMode | None | None | 도구 사용을 위한 권한 모드 |
continue_conversation | bool | False | 가장 최근 대화 계속하기 |
resume | str | None | None | 재개할 세션 ID |
fork_session | bool | False | resume 으로 재개할 때, 원래 세션을 계속하는 대신 새 세션 ID로 포크 |
max_turns | int | None | None | 최대 대화 턴 수 |
disallowed_tools | list[str] | [] | 허용되지 않는 도구 이름 목록 |
model | str | None | None | 사용할 Claude 모델 |
permission_prompt_tool_name | str | None | None | 권한 프롬프트를 위한 MCP 도구 이름 |
cwd | str | Path | None | None | 현재 작업 디렉토리 |
settings | str | None | None | 설정 파일 경로 |
add_dirs | list[str | Path] | [] | Claude가 액세스할 수 있는 추가 디렉토리 |
extra_args | dict[str, str | None] | {} | CLI에 직접 전달할 추가 CLI 인수 |
can_use_tool | CanUseTool | None | None | 도구 권한 콜백 함수 |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | 이벤트 가로채기를 위한 훅 구성 |
agents | dict[str, AgentDefinition] | None | None | 프로그래밍 방식으로 정의된 하위 에이전트 |
setting_sources | list[SettingSource] | None | None (설정 없음) | SDK가 설정을 로드할 파일시스템 설정을 제어합니다. 생략하면 설정이 로드되지 않습니다 |
SettingSource
SDK가 설정을 로드하는 파일시스템 기반 구성 소스를 제어합니다.
값 | 설명 | 위치 |
---|---|---|
"user" | 전역 사용자 설정 | ~/.claude/settings.json |
"project" | 공유 프로젝트 설정 (버전 제어됨) | .claude/settings.json |
"local" | 로컬 프로젝트 설정 (gitignore됨) | .claude/settings.local.json |
기본 동작
setting_sources
가 생략되거나 **None
**인 경우, SDK는 파일시스템 설정을 로드하지 않습니다. 이는 SDK 애플리케이션에 대한 격리를 제공합니다.
setting_sources를 사용하는 이유?
모든 파일시스템 설정 로드 (레거시 동작):설정 우선순위
여러 소스가 로드될 때, 설정은 다음 우선순위로 병합됩니다 (높음에서 낮음):- 로컬 설정 (
.claude/settings.local.json
) - 프로젝트 설정 (
.claude/settings.json
) - 사용자 설정 (
~/.claude/settings.json
)
agents
, allowed_tools
등)은 항상 파일시스템 설정을 재정의합니다.
AgentDefinition
프로그래밍 방식으로 정의된 하위 에이전트의 구성입니다.
필드 | 필수 | 설명 |
---|---|---|
description | 예 | 이 에이전트를 언제 사용할지에 대한 자연어 설명 |
tools | 아니오 | 허용된 도구 이름 배열. 생략하면 모든 도구를 상속 |
prompt | 예 | 에이전트의 시스템 프롬프트 |
model | 아니오 | 이 에이전트에 대한 모델 재정의. 생략하면 메인 모델 사용 |
PermissionMode
도구 실행을 제어하기 위한 권한 모드입니다.
McpSdkServerConfig
create_sdk_mcp_server()
로 생성된 SDK MCP 서버의 구성입니다.
McpServerConfig
MCP 서버 구성을 위한 유니온 타입입니다.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
메시지 타입
Message
모든 가능한 메시지의 유니온 타입입니다.
UserMessage
사용자 입력 메시지입니다.
AssistantMessage
콘텐츠 블록이 있는 어시스턴트 응답 메시지입니다.
SystemMessage
메타데이터가 있는 시스템 메시지입니다.
ResultMessage
비용 및 사용량 정보가 있는 최종 결과 메시지입니다.
콘텐츠 블록 타입
ContentBlock
모든 콘텐츠 블록의 유니온 타입입니다.
TextBlock
텍스트 콘텐츠 블록입니다.
ThinkingBlock
사고 콘텐츠 블록입니다 (사고 능력이 있는 모델용).
ToolUseBlock
도구 사용 요청 블록입니다.
ToolResultBlock
도구 실행 결과 블록입니다.
오류 타입
ClaudeSDKError
모든 SDK 오류에 대한 기본 예외 클래스입니다.
CLINotFoundError
Claude Code CLI가 설치되지 않았거나 찾을 수 없을 때 발생합니다.
CLIConnectionError
Claude Code에 대한 연결이 실패할 때 발생합니다.
ProcessError
Claude Code 프로세스가 실패할 때 발생합니다.
CLIJSONDecodeError
JSON 파싱이 실패할 때 발생합니다.
훅 타입
HookEvent
지원되는 훅 이벤트 타입입니다. 설정 제한으로 인해 Python SDK는 SessionStart, SessionEnd, Notification 훅을 지원하지 않습니다.
HookCallback
훅 콜백 함수의 타입 정의입니다.
input_data
: 훅별 입력 데이터 (훅 문서 참조)tool_use_id
: 선택적 도구 사용 식별자 (도구 관련 훅용)context
: 추가 정보가 있는 훅 컨텍스트
decision
: 동작을 차단하려면"block"
systemMessage
: 트랜스크립트에 추가할 시스템 메시지hookSpecificOutput
: 훅별 출력 데이터
HookContext
훅 콜백에 전달되는 컨텍스트 정보입니다.
HookMatcher
특정 이벤트나 도구에 훅을 매칭하기 위한 구성입니다.
훅 사용 예제
도구 입력/출력 타입
모든 내장 Claude Code 도구의 입력/출력 스키마 문서입니다. Python SDK는 이를 타입으로 내보내지 않지만, 메시지에서 도구 입력 및 출력의 구조를 나타냅니다.Task
도구 이름:Task
입력:
Bash
도구 이름:Bash
입력:
Edit
도구 이름:Edit
입력:
MultiEdit
도구 이름:MultiEdit
입력:
Read
도구 이름:Read
입력:
Write
도구 이름:Write
입력:
Glob
도구 이름:Glob
입력:
Grep
도구 이름:Grep
입력:
NotebookEdit
도구 이름:NotebookEdit
입력:
WebFetch
도구 이름:WebFetch
입력:
WebSearch
도구 이름:WebSearch
입력:
TodoWrite
도구 이름:TodoWrite
입력:
BashOutput
도구 이름:BashOutput
입력:
KillBash
도구 이름:KillBash
입력:
ExitPlanMode
도구 이름:ExitPlanMode
입력:
ListMcpResources
도구 이름:ListMcpResources
입력:
ReadMcpResource
도구 이름:ReadMcpResource
입력:
ClaudeSDKClient를 사용한 고급 기능
지속적인 대화 인터페이스 구축
동작 수정을 위한 훅 사용
실시간 진행 상황 모니터링
사용 예제
기본 파일 작업 (query 사용)
오류 처리
클라이언트와 스트리밍 모드
ClaudeSDKClient와 사용자 정의 도구 사용
참고 자료
- Python SDK 가이드 - 튜토리얼 및 예제
- SDK 개요 - 일반적인 SDK 개념
- TypeScript SDK 참조 - TypeScript SDK 문서
- CLI 참조 - 명령줄 인터페이스
- 일반적인 워크플로우 - 단계별 가이드