# `ExUtcp.Providers`
[🔗](https://github.com/universal-tool-calling-protocol/elixir-utcp/blob/main/lib/ex_utcp/providers.ex#L1)

Provider implementations for different protocols.

This module contains the data structures and functions for various provider types
including HTTP, CLI, WebSocket, gRPC, GraphQL, TCP, UDP, WebRTC, MCP, and Text providers.

# `get_name`

```elixir
@spec get_name(ExUtcp.Types.provider()) :: String.t()
```

Gets the provider name from a provider struct.

# `get_type`

```elixir
@spec get_type(ExUtcp.Types.provider()) :: ExUtcp.Types.provider_type()
```

Gets the provider type from a provider struct.

# `new_cli_provider`

```elixir
@spec new_cli_provider(keyword()) :: ExUtcp.Types.cli_provider()
```

Creates a new CLI provider.

# `new_graphql_provider`

```elixir
@spec new_graphql_provider(keyword()) :: ExUtcp.Types.graphql_provider()
```

Creates a new GraphQL provider.

# `new_grpc_provider`

```elixir
@spec new_grpc_provider(keyword()) :: ExUtcp.Types.grpc_provider()
```

Creates a new gRPC provider.

# `new_http_provider`

```elixir
@spec new_http_provider(keyword()) :: ExUtcp.Types.http_provider()
```

Creates a new HTTP provider.

# `new_mcp_provider`

```elixir
@spec new_mcp_provider(keyword()) :: ExUtcp.Types.mcp_provider()
```

Creates a new MCP provider.

# `new_sse_provider`

```elixir
@spec new_sse_provider(keyword()) :: ExUtcp.Types.sse_provider()
```

Creates a new SSE provider.

# `new_streamable_http_provider`

```elixir
@spec new_streamable_http_provider(keyword()) ::
  ExUtcp.Types.streamable_http_provider()
```

Creates a new Streamable HTTP provider.

# `new_tcp_provider`

```elixir
@spec new_tcp_provider(keyword()) :: ExUtcp.Types.tcp_provider()
```

Creates a new TCP provider.

# `new_text_provider`

```elixir
@spec new_text_provider(keyword()) :: ExUtcp.Types.text_provider()
```

Creates a new Text provider.

# `new_udp_provider`

```elixir
@spec new_udp_provider(keyword()) :: ExUtcp.Types.udp_provider()
```

Creates a new UDP provider.

# `new_webrtc_provider`

```elixir
@spec new_webrtc_provider(keyword()) :: %{
  ice_servers: [map()],
  name: String.t(),
  peer_id: String.t() | nil,
  signaling_server: String.t(),
  timeout: integer(),
  tools: [map()],
  type: :webrtc
}
```

Creates a new WebRTC provider.

# `new_websocket_provider`

```elixir
@spec new_websocket_provider(keyword()) :: ExUtcp.Types.websocket_provider()
```

Creates a new WebSocket provider.

# `normalize_name`

```elixir
@spec normalize_name(String.t()) :: String.t()
```

Normalizes provider name by replacing dots with underscores.

# `set_name`

```elixir
@spec set_name(ExUtcp.Types.provider(), String.t()) :: ExUtcp.Types.provider()
```

Sets the provider name.

# `validate_provider`

```elixir
@spec validate_provider(ExUtcp.Types.provider()) :: :ok | {:error, String.t()}
```

Validates a provider configuration.

---

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