설치
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에서 연결 해제 |
컨텍스트 관리자 지원
클라이언트는 자동 연결 관리를 위해 비동기 컨텍스트 관리자로 사용할 수 있습니다:
중요: 메시지를 반복할 때 조기에 종료하기 위해 break를 사용하지 마세요. 이는 asyncio 정리 문제를 야기할 수 있습니다. 대신 반복이 자연스럽게 완료되도록 하거나 필요한 것을 찾았을 때를 추적하기 위해 플래그를 사용하세요.
예제 - 대화 계속하기
예제 - 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] | [] | 허용된 도구 이름 목록 |
system_prompt | str | SystemPromptPreset | None | None | 시스템 프롬프트 구성. 사용자 정의 프롬프트의 경우 문자열을 전달하거나 Claude Code의 시스템 프롬프트의 경우 {"type": "preset", "preset": "claude_code"}를 사용합니다. 프리셋을 확장하려면 "append"를 추가합니다 |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | MCP 서버 구성 또는 구성 파일 경로 |
permission_mode | PermissionMode | None | None | 도구 사용을 위한 권한 모드 |
continue_conversation | bool | False | 가장 최근 대화 계속하기 |
resume | str | None | None | 재개할 세션 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가 액세스할 수 있는 추가 디렉토리 |
env | dict[str, str] | {} | 환경 변수 |
extra_args | dict[str, str | None] | {} | CLI에 직접 전달할 추가 CLI 인수 |
max_buffer_size | int | None | None | CLI stdout 버퍼링 시 최대 바이트 |
debug_stderr | Any | sys.stderr | 더 이상 사용되지 않음 - 디버그 출력용 파일 유사 객체. 대신 stderr 콜백 사용 |
stderr | Callable[[str], None] | None | None | CLI의 stderr 출력을 위한 콜백 함수 |
can_use_tool | CanUseTool | None | None | 도구 권한 콜백 함수 |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | 이벤트 가로채기를 위한 훅 구성 |
user | str | None | None | 사용자 식별자 |
include_partial_messages | bool | False | 부분 메시지 스트리밍 이벤트 포함 |
fork_session | bool | False | resume으로 재개할 때 원본 세션을 계속하는 대신 새 세션 ID로 포크 |
agents | dict[str, AgentDefinition] | None | None | 프로그래밍 방식으로 정의된 서브에이전트 |
plugins | list[SdkPluginConfig] | [] | 로컬 경로에서 사용자 정의 플러그인 로드. 자세한 내용은 플러그인을 참조하세요 |
setting_sources | list[SettingSource] | None | None (설정 없음) | 로드할 파일 시스템 설정을 제어합니다. 생략하면 설정이 로드되지 않습니다. 참고: CLAUDE.md 파일을 로드하려면 "project"를 포함해야 합니다 |
SystemPromptPreset
선택적 추가 사항과 함께 Claude Code의 프리셋 시스템 프롬프트 사용을 위한 구성입니다.
| 필드 | 필수 | 설명 |
|---|---|---|
type | 예 | 프리셋 시스템 프롬프트를 사용하려면 "preset"이어야 합니다 |
preset | 예 | Claude Code의 시스템 프롬프트를 사용하려면 "claude_code"이어야 합니다 |
append | 아니오 | 프리셋 시스템 프롬프트에 추가할 추가 지침 |
SettingSource
SDK가 로드하는 파일 시스템 기반 구성 소스를 제어합니다.
| 값 | 설명 | 위치 |
|---|---|---|
"user" | 전역 사용자 설정 | ~/.claude/settings.json |
"project" | 공유 프로젝트 설정 (버전 제어됨) | .claude/settings.json |
"local" | 로컬 프로젝트 설정 (gitignored) | .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
SdkPluginConfig
SDK에서 플러그인을 로드하기 위한 구성입니다.
| 필드 | 타입 | 설명 |
|---|---|---|
type | Literal["local"] | "local"이어야 합니다 (현재 로컬 플러그인만 지원됨) |
path | str | 플러그인 디렉토리의 절대 또는 상대 경로 |
메시지 타입
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
입력:
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 참조 - 명령줄 인터페이스
- 일반적인 워크플로우 - 단계별 가이드