# `MCPKit.Resource`
[🔗](https://github.com/mcostasilva/mcp_kit/blob/v0.2.4/lib/mcp_kit/resource.ex#L1)

Behaviour for MCP resources.

Resource modules expose concrete resource entries, URI templates, and reading
logic for concrete URIs. They may optionally implement `complete/3` for URI
template variable suggestions.

# `complete`

```elixir
@callback complete(String.t(), map(), map()) :: {:ok, [String.t()]} | :unsupported
```

Returns URI template variable completion suggestions.

Return `:unsupported` when the resource does not expose completions for the
given variable.

# `description`

```elixir
@callback description() :: String.t() | nil
```

Returns the description for the resource module.

# `read`

```elixir
@callback read(uri :: String.t(), context :: map()) ::
  {:reply, [map()], map()}
  | {:error,
     :not_found | {:forbidden, String.t()} | {:internal_error, String.t()}}
```

Reads a concrete resource URI.

Return `{:error, :not_found}` when the resource does not handle the URI.

# `resources`

```elixir
@callback resources() :: [map()]
```

Returns concrete resources shown in `resources/list`.

# `templates`

```elixir
@callback templates() :: [map()]
```

Returns URI templates shown in `resources/templates/list`.

---

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