# Secrets

> Tag 8: the client hands the container the values of its secrets, each by name; the server hands them to the container’s program, holds the channel until the program holds them, and answers with exactly one channel response, fed or the program’s refusal, and the channel response finish; a Fed is what lets the server deliver the next MCP exchange.

Canonical: https://protocol.diverge.network/2.3.0/container-proxy-endpoints/tools-begin/client/secrets/
Specification revision: 2.3.0

The client opens this channel to hand the container the values of
the secrets its program declared at its registration, one value under
every name. The server hands the values to the container's program
and answers only when the program holds them.

- **The request.** The tag byte `8` followed by the values as JSON.
  [Request](/2.3.0/container-proxy-endpoints/tools-begin/client/secrets/request/) states its form.
- **The response.** Exactly one channel response, fed or an error,
  and the channel response finish.
  [Response](/2.3.0/container-proxy-endpoints/tools-begin/client/secrets/response/) states the sequence.
- **The feed.** The server hands the values to the container's
  program before it answers, and answers the byte `0` only once the
  program has taken them. A program that refuses the values is
  answered by the byte `1` followed by the program's own words, and
  holds no values.
- **The gate.** After `Begun`, and after every `Inactive` of the main
  stream, the server delivers no MCP exchange to a program that
  declared one or more secrets until a channel of this section has
  been answered `Fed`: an exchange opened meanwhile on an
  [mcp-list-tools](/2.3.0/container-proxy-endpoints/tools-begin/client/mcp-list-tools/),
  [mcp-list-resources](/2.3.0/container-proxy-endpoints/tools-begin/client/mcp-list-resources/),
  [mcp-call-tool](/2.3.0/container-proxy-endpoints/tools-begin/client/mcp-call-tool/) or
  [mcp-read-resource](/2.3.0/container-proxy-endpoints/tools-begin/client/mcp-read-resource/)
  channel is held, its `Active` already sent. The byte `0` opens the
  gate; the byte `1` leaves it closed. A program that declared no
  secret is never held: the server delivers to it from `Begun` and
  from every `Inactive`.
- **When.** The client opens this channel once before the run's id is
  sent, with the values the registration was answered with, and
  again before every exchange after an `Inactive`. The server holds
  the channel open, however long the program takes, and imposes no
  timeout.
- **Verbatim.** The server hands the values to the program as the
  client sent them and reads none of them.
