ExMCP.ACP.Adapters.ClaudeSDK.Protocol (ex_mcp v1.0.0-rc.0)

View Source

Pure helpers for Claude Code's SDK-flavoured stream-json protocol.

The official @anthropic-ai/claude-agent-sdk still launches Claude Code, but it uses a richer stdin/stdout protocol than the basic CLI stream. This module keeps that wire-shape construction side-effect free.

Summary

Functions

Builds the Claude Code command line used by SDK-style sessions.

Builds an error response for a Claude-originated control request.

Builds a host-to-Claude SDK control request.

Builds a success response for a Claude-originated control request.

Environment required for Claude Code's SDK entrypoint.

Builds the initial SDK control request sent after process startup.

Encodes one SDK message as an NDJSON line.

Builds ACP permission options for a Claude SDK permission request.

Converts an ACP permission outcome into a Claude SDK PermissionResult.

Builds a compact ACP tool call map for permission prompts.

Converts ACP prompt blocks into Claude message content blocks.

Builds a user message for a prompt turn.

Functions

command(opts)

@spec command(keyword()) :: {String.t(), [String.t()]}

Builds the Claude Code command line used by SDK-style sessions.

control_error(request_id, error)

@spec control_error(String.t(), String.t()) :: map()

Builds an error response for a Claude-originated control request.

control_request(request_id, request)

@spec control_request(String.t(), map()) :: map()

Builds a host-to-Claude SDK control request.

control_success(request_id, response \\ %{})

@spec control_success(String.t(), map() | nil) :: map()

Builds a success response for a Claude-originated control request.

env(opts)

@spec env(keyword()) :: map()

Environment required for Claude Code's SDK entrypoint.

initialize_request(opts, request_id)

@spec initialize_request(
  keyword(),
  String.t()
) :: map()

Builds the initial SDK control request sent after process startup.

line(message)

@spec line(map()) :: String.t()

Encodes one SDK message as an NDJSON line.

permission_options(arg1)

@spec permission_options(map()) :: [map()]

Builds ACP permission options for a Claude SDK permission request.

permission_result(arg1, request)

@spec permission_result(map(), map()) :: map()

Converts an ACP permission outcome into a Claude SDK PermissionResult.

permission_tool_call(request, cwd)

@spec permission_tool_call(map(), String.t() | nil) :: map()

Builds a compact ACP tool call map for permission prompts.

prompt_content(text)

@spec prompt_content(list() | String.t() | nil) ::
  {:ok, list()} | {:error, String.t()}

Converts ACP prompt blocks into Claude message content blocks.

user_message(session_id, prompt)

@spec user_message(String.t() | nil, list() | String.t()) ::
  {:ok, map()} | {:error, String.t()}

Builds a user message for a prompt turn.