# `ExMCP.Client.EraProbe`
[🔗](https://github.com/azmaveth/ex_mcp/blob/v1.0.0/lib/ex_mcp/client/era_probe.ex#L1)

Performs the side-effect-free `server/discover` probe used to establish a
modern MCP connection before any application request is sent.

The probe owns its short timeout and returns the post-probe transport state,
allowing the connection manager to either settle on modern or make an
explicit, policy-controlled legacy fallback decision.

# `failure`

```elixir
@type failure() ::
  {:invalid_probe_request, term()}
  | {:transport_error, term()}
  | {:probe_timeout, term()}
  | {:http_probe_rejected, map()}
  | {:json_rpc_error, map()}
  | {:unexpected_response, term()}
  | {:invalid_discover_result, term()}
  | {:no_mutually_supported_modern_version, map()}
```

# `result`

```elixir
@type result() :: %{
  protocol_version: String.t(),
  server_info: map() | nil,
  server_capabilities: map(),
  discovery: map()
}
```

# `probe`

```elixir
@spec probe(module(), term(), keyword()) ::
  {:ok, result(), term()} | {:error, failure(), term()}
```

Runs a bounded modern discovery probe over a connected transport.

---

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