# `Jido.MCP.ClientPool`
[🔗](https://github.com/agentjido/jido_mcp/blob/v1.0.0/lib/jido_mcp/client_pool.ex#L1)

Shared client pool that manages one Anubis client per configured endpoint.

# `client_ref`

```elixir
@type client_ref() :: %{
  client: GenServer.name(),
  supervisor: GenServer.name(),
  transport: GenServer.name()
}
```

# `await_ready`

```elixir
@spec await_ready(client_ref(), timeout()) :: :ok | {:error, term()}
```

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `endpoint_ids`

```elixir
@spec endpoint_ids() :: [atom()]
```

# `endpoint_status`

```elixir
@spec endpoint_status(atom()) :: {:ok, map()} | {:error, term()}
```

# `endpoints`

```elixir
@spec endpoints() :: Jido.MCP.Config.endpoints()
```

# `ensure_client`

```elixir
@spec ensure_client(atom()) ::
  {:ok, Jido.MCP.Endpoint.t(), client_ref()} | {:error, term()}
```

# `fetch_endpoint`

```elixir
@spec fetch_endpoint(atom()) ::
  {:ok, Jido.MCP.Endpoint.t()} | {:error, :unknown_endpoint}
```

# `refresh`

```elixir
@spec refresh(atom()) :: {:ok, Jido.MCP.Endpoint.t(), client_ref()} | {:error, term()}
```

# `register_endpoint`

```elixir
@spec register_endpoint(Jido.MCP.Endpoint.t()) ::
  {:ok, Jido.MCP.Endpoint.t()}
  | {:error,
     {:endpoint_already_registered, atom()} | {:invalid_endpoint, term()}}
```

# `resolve_endpoint_id`

```elixir
@spec resolve_endpoint_id(term()) ::
  {:ok, atom()}
  | {:error, :endpoint_required | :invalid_endpoint_id | :unknown_endpoint}
```

# `start_link`

```elixir
@spec start_link(keyword()) :: GenServer.on_start()
```

# `unregister_endpoint`

```elixir
@spec unregister_endpoint(atom()) ::
  {:ok, Jido.MCP.Endpoint.t()} | {:error, :unknown_endpoint}
```

---

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