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

Production-ready GraphQL transport implementation for UTCP.

This transport handles GraphQL-based tool providers with:
- Real GraphQL queries, mutations, and subscriptions
- Connection management and pooling
- Authentication support (API Key, Basic, OAuth2)
- Error recovery with retry logic
- Real-time subscription support
- Schema introspection and validation

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `introspect_schema`

```elixir
@spec introspect_schema(
  pid(),
  keyword()
) :: {:ok, map()} | {:error, term()}
```

Introspects the GraphQL schema.

# `mutation`

```elixir
@spec mutation(pid(), String.t(), map(), keyword()) :: {:ok, map()} | {:error, term()}
```

Executes a GraphQL mutation.

# `new`

```elixir
@spec new(keyword()) :: %ExUtcp.Transports.Graphql{
  connection_timeout: non_neg_integer(),
  logger: function(),
  max_retries: non_neg_integer(),
  pool_opts: keyword(),
  retry_config: map(),
  retry_delay: non_neg_integer()
}
```

Creates a new GraphQL transport.

# `query`

```elixir
@spec query(pid(), String.t(), map(), keyword()) :: {:ok, map()} | {:error, term()}
```

Executes a GraphQL query.

# `start_link`

```elixir
@spec start_link(keyword()) :: {:ok, pid()} | {:error, term()}
```

Starts the GraphQL transport GenServer.

# `subscription`

```elixir
@spec subscription(pid(), String.t(), map(), keyword()) ::
  {:ok, [map()]} | {:error, term()}
```

Executes a GraphQL subscription.

---

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