# `ExUtcp.Transports.Mcp.Message`
[🔗](https://github.com/universal-tool-calling-protocol/elixir-utcp/blob/main/lib/ex_utcp/transports/mcp/message.ex#L1)

Handles JSON-RPC 2.0 message formatting and parsing for MCP protocol.

# `build_error_response`

```elixir
@spec build_error_response(integer(), String.t(), any(), integer() | nil) :: map()
```

Builds a JSON-RPC 2.0 error response message.

# `build_notification`

```elixir
@spec build_notification(String.t(), map()) :: map()
```

Builds a JSON-RPC 2.0 notification message.

# `build_request`

```elixir
@spec build_request(String.t(), map(), integer() | nil) :: map()
```

Builds a JSON-RPC 2.0 request message.

# `build_response`

```elixir
@spec build_response(any(), integer() | nil) :: map()
```

Builds a JSON-RPC 2.0 response message.

# `error?`

```elixir
@spec error?(map()) :: boolean()
```

Checks if a message is an error response.

# `extract_error`

```elixir
@spec extract_error(map()) :: {integer(), String.t(), any()}
```

Extracts error information from an error response.

# `extract_id`

```elixir
@spec extract_id(map()) :: integer() | nil
```

Extracts the request ID from a message.

# `extract_method`

```elixir
@spec extract_method(map()) :: String.t() | nil
```

Extracts the method name from a request message.

# `extract_result`

```elixir
@spec extract_result(map()) :: any()
```

Extracts result from a successful response.

# `notification?`

```elixir
@spec notification?(map()) :: boolean()
```

Checks if a message is a notification.

# `parse_response`

```elixir
@spec parse_response(String.t()) :: {:ok, any()} | {:error, String.t()}
```

Parses a JSON-RPC 2.0 response.

# `request?`

```elixir
@spec request?(map()) :: boolean()
```

Checks if a message is a request.

# `response?`

```elixir
@spec response?(map()) :: boolean()
```

Checks if a message is a response.

# `validate_message`

```elixir
@spec validate_message(map()) :: :ok | {:error, String.t()}
```

Validates a JSON-RPC 2.0 message.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
