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

Behaviour definition for UTCP transports.

All transport implementations must implement this behaviour to ensure
consistent interface across different communication protocols.

# `call_tool`

```elixir
@callback call_tool(String.t(), map(), ExUtcp.Types.provider()) ::
  ExUtcp.Types.call_result()
```

Calls a specific tool with the given arguments.

# `call_tool_stream`

```elixir
@callback call_tool_stream(String.t(), map(), ExUtcp.Types.provider()) ::
  ExUtcp.Types.stream_call_result()
```

Calls a tool with streaming support.

# `close`

```elixir
@callback close() :: :ok | {:error, any()}
```

Closes the transport and cleans up resources.

# `deregister_tool_provider`

```elixir
@callback deregister_tool_provider(ExUtcp.Types.provider()) ::
  ExUtcp.Types.deregister_result()
```

Deregisters a tool provider.

# `register_tool_provider`

```elixir
@callback register_tool_provider(ExUtcp.Types.provider()) ::
  ExUtcp.Types.register_result()
```

Registers a tool provider and returns the discovered tools.

# `supports_streaming?`

```elixir
@callback supports_streaming?() :: boolean()
```

Checks if the transport supports streaming.

# `transport_name`

```elixir
@callback transport_name() :: String.t()
```

Gets the transport name.

---

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