ExMCP.ACP.Protocol (ex_mcp v0.10.0)

View Source

ACP-specific message encoding.

Delegates JSON-RPC 2.0 framing to ExMCP.Internal.Protocol and adds ACP method-specific encoding on top.

ACP uses integer protocol versions (default: 1) rather than MCP's date-based strings.

Summary

Functions

Encodes an agent_message_chunk update notification.

Encodes an agent_thought_chunk update notification.

Encodes an authenticate request.

Encodes an available_commands_update notification.

Encodes a config_option_update notification.

Encodes a current_mode_update notification.

Encodes a JSON-RPC error response.

Encodes an fs/read_text_file request from agent to client.

Encodes a response to a fs/read_text_file request from the agent.

Encodes an fs/write_text_file request from agent to client.

Encodes a response to a fs/write_text_file request from the agent.

Encodes a logout request. Stabilized in ACP spec May 21, 2026.

Encodes a session/request_permission request from agent to client.

Encodes a response to a session/request_permission request from the agent.

Encodes an ACP plan update notification.

Encodes a session/prompt response.

Encodes a JSON-RPC success response.

Encodes a session/cancel notification (no id field).

Encodes a session/close request. Stabilized in ACP spec April 23, 2026.

Encodes a session_info_update notification.

Encodes a session/list request. Stabilized in ACP spec March 9, 2026.

Encodes a session/load request to load an existing session and replay history.

Encodes a session/prompt request.

Encodes a session/new, session/load, or similar session ID response.

Encodes a session/resume request. Stabilized in ACP spec April 22, 2026.

Encodes a session/set_config_option request.

Encodes a session/set_mode request.

Encodes a stable ACP session/update notification.

Encodes a stable terminal/* request from agent to client.

Encodes a tool_call update notification.

Encodes a tool_call_update notification.

Encodes a usage_update notification.

Generates a unique request ID.

Parses a raw JSON-RPC message without validation.

Functions

encode_agent_message_chunk(session_id, text)

@spec encode_agent_message_chunk(String.t(), String.t() | map()) :: map()

Encodes an agent_message_chunk update notification.

encode_agent_thought_chunk(session_id, text)

@spec encode_agent_thought_chunk(String.t(), String.t() | map()) :: map()

Encodes an agent_thought_chunk update notification.

encode_authenticate(method_id_or_params \\ %{})

@spec encode_authenticate(String.t() | map()) :: map()

Encodes an authenticate request.

ACP v1 authentication uses a "methodId" selected from the agent's authMethods initialize response. A map may still be passed for adapter compatibility.

Parameters

  • method_id_or_params — auth method ID string or full params map

encode_available_commands_update(session_id, commands)

@spec encode_available_commands_update(String.t(), [map()]) :: map()

Encodes an available_commands_update notification.

encode_config_option_update(session_id, config_options)

@spec encode_config_option_update(String.t(), [map()]) :: map()

Encodes a config_option_update notification.

encode_current_mode_update(session_id, current_mode_id)

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

Encodes a current_mode_update notification.

encode_error(code, message, data \\ nil, id)

Encodes a JSON-RPC error response.

encode_file_read_request(session_id, path, opts \\ [])

@spec encode_file_read_request(String.t(), String.t(), keyword() | map()) :: map()

Encodes an fs/read_text_file request from agent to client.

encode_file_read_response(id, content)

@spec encode_file_read_response(integer() | String.t(), String.t()) :: map()

Encodes a response to a fs/read_text_file request from the agent.

encode_file_write_request(session_id, path, content)

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

Encodes an fs/write_text_file request from agent to client.

encode_file_write_response(id)

@spec encode_file_write_response(integer() | String.t()) :: map()

Encodes a response to a fs/write_text_file request from the agent.

encode_initialize(client_info, capabilities \\ nil, protocol_version \\ 1)

@spec encode_initialize(map(), map() | nil, pos_integer()) :: map()

Encodes an initialize request.

Parameters

  • client_info%{"name" => ..., "version" => ...}
  • capabilities — client capabilities map (optional)
  • protocol_version — integer (default: 1)

encode_initialize_response(id, agent_info, capabilities \\ nil, auth_methods \\ nil, protocol_version \\ 1)

@spec encode_initialize_response(
  integer() | String.t(),
  map(),
  map() | nil,
  [map()] | nil,
  pos_integer()
) :: map()

Encodes an agent initialize response.

encode_logout()

@spec encode_logout() :: map()

Encodes a logout request. Stabilized in ACP spec May 21, 2026.

encode_permission_request(session_id, tool_call, options)

@spec encode_permission_request(String.t(), map(), [map()]) :: map()

Encodes a session/request_permission request from agent to client.

encode_permission_response(id, response)

@spec encode_permission_response(integer() | String.t(), map()) :: map()

Encodes a response to a session/request_permission request from the agent.

encode_plan(session_id, entries)

@spec encode_plan(String.t(), [map()]) :: map()

Encodes an ACP plan update notification.

encode_prompt_response(id, stop_reason)

@spec encode_prompt_response(integer() | String.t(), String.t() | map()) :: map()

Encodes a session/prompt response.

encode_response(result, id)

Encodes a JSON-RPC success response.

encode_session_cancel(session_id)

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

Encodes a session/cancel notification (no id field).

encode_session_close(session_id)

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

Encodes a session/close request. Stabilized in ACP spec April 23, 2026.

encode_session_info_update(session_id, info)

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

Encodes a session_info_update notification.

encode_session_list(opts \\ [])

@spec encode_session_list(keyword()) :: map()

Encodes a session/list request. Stabilized in ACP spec March 9, 2026.

encode_session_list_response(id, sessions, next_cursor \\ nil)

@spec encode_session_list_response(integer() | String.t(), [map()], String.t() | nil) ::
  map()

Encodes a session/list response.

encode_session_load(session_id, cwd \\ nil, mcp_servers \\ nil)

@spec encode_session_load(String.t(), String.t() | nil, [map()] | nil) :: map()

Encodes a session/load request to load an existing session and replay history.

encode_session_new(cwd \\ nil, mcp_servers \\ nil)

@spec encode_session_new(String.t() | nil, [map()] | nil) :: map()

Encodes a session/new request.

encode_session_prompt(session_id, content_blocks)

@spec encode_session_prompt(String.t(), [map()]) :: map()

Encodes a session/prompt request.

encode_session_response(id, session_id)

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

Encodes a session/new, session/load, or similar session ID response.

encode_session_resume(session_id, cwd \\ nil, mcp_servers \\ nil)

@spec encode_session_resume(String.t(), String.t() | nil, [map()] | nil) :: map()

Encodes a session/resume request. Stabilized in ACP spec April 22, 2026.

encode_session_set_config_option(session_id, config_id, value)

@spec encode_session_set_config_option(String.t(), String.t(), any()) :: map()

Encodes a session/set_config_option request.

encode_session_set_mode(session_id, mode_id)

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

Encodes a session/set_mode request.

encode_session_update(session_id, update)

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

Encodes a stable ACP session/update notification.

encode_terminal_request(method, session_id, params)

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

Encodes a stable terminal/* request from agent to client.

encode_tool_call(session_id, tool_call)

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

Encodes a tool_call update notification.

encode_tool_call_update(session_id, tool_call_update)

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

Encodes a tool_call_update notification.

encode_usage_update(session_id, used, size, cost \\ nil)

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

Encodes a usage_update notification.

generate_id()

Generates a unique request ID.

parse_message(data)

Parses a raw JSON-RPC message without validation.