ExMCP.Protocol (ex_mcp v0.1.0)

View Source

MCP protocol message encoding and decoding.

Implements the Model Context Protocol JSON-RPC message format. This module handles the low-level protocol details for both client and server implementations.

Summary

Functions

Encodes a tool call request.

Encodes a completion request.

Encodes a prompt get request.

Encodes an initialize request from client to server.

Encodes an initialized notification.

Encodes a request to list available prompts.

Encodes a request to list available resources.

Encodes a request to list available tools.

Encodes a notification (no id field).

Encodes a resource read request.

Encodes a successful response.

Encodes a message to JSON string.

Generates a unique ID for requests.

Standard JSON-RPC error codes.

Parses a JSON-RPC message.

Types

error()

@type error() :: %{code: integer(), message: String.t(), data: any()}

json_rpc_id()

@type json_rpc_id() :: String.t() | integer()

method()

@type method() :: String.t()

params()

@type params() :: map()

result()

@type result() :: any()

Functions

encode_call_tool(name, arguments)

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

Encodes a tool call request.

encode_complete(ref, params)

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

Encodes a completion request.

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

@spec encode_error(integer(), String.t(), any(), json_rpc_id()) :: map()

Encodes an error response.

encode_get_prompt(name, arguments \\ %{})

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

Encodes a prompt get request.

encode_initialize(client_info)

@spec encode_initialize(map()) :: map()

Encodes an initialize request from client to server.

encode_initialized()

@spec encode_initialized() :: map()

Encodes an initialized notification.

encode_list_prompts()

@spec encode_list_prompts() :: map()

Encodes a request to list available prompts.

encode_list_resources()

@spec encode_list_resources() :: map()

Encodes a request to list available resources.

encode_list_tools()

@spec encode_list_tools() :: map()

Encodes a request to list available tools.

encode_notification(method, params)

@spec encode_notification(method(), params()) :: map()

Encodes a notification (no id field).

encode_read_resource(uri)

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

Encodes a resource read request.

encode_response(result, id)

@spec encode_response(result(), json_rpc_id()) :: map()

Encodes a successful response.

encode_to_string(message)

@spec encode_to_string(map()) :: {:ok, String.t()} | {:error, any()}

Encodes a message to JSON string.

generate_id()

@spec generate_id() :: integer()

Generates a unique ID for requests.

internal_error()

invalid_params()

invalid_request()

method_not_found()

parse_error()

Standard JSON-RPC error codes.

parse_message(data)

@spec parse_message(String.t() | map()) ::
  {:request, method(), params(), json_rpc_id()}
  | {:notification, method(), params()}
  | {:result, result(), json_rpc_id()}
  | {:error, error(), json_rpc_id()}
  | {:error, :invalid_message}

Parses a JSON-RPC message.

Returns one of:

  • {:request, method, params, id} - An incoming request
  • {:notification, method, params} - An incoming notification
  • {:result, result, id} - A response to our request
  • {:error, error, id} - An error response
  • {:error, :invalid_message} - Invalid message format