# Noizu MCP v0.1.2 - Table of Contents

> Model Context Protocol (MCP) for Elixir — server and client, full spec surface
(tools, resources, prompts, sampling, elicitation, roots) over stdio and
Streamable HTTP transports. Behaviour-driven core with an optional macro DSL.

## Pages

- [Noizu MCP](readme.md)
- [Changelog](changelog.md)

- Guides
  - [Getting Started](getting_started.md)
  - [Tools &amp; Schemas](tools.md)
  - [Toolkits, Categories &amp; Hidden Tools](toolkits_and_discovery.md)
  - [Resources, Templates &amp; Prompts](resources_and_prompts.md)
  - [The Handler Context (Noizu.MCP.Ctx)](handler_context.md)
  - [Consuming Servers (Client)](client.md)
  - [Streamable HTTP Deployment](streamable_http.md)
  - [stdio Deployment](stdio.md)
  - [Authentication (OAuth 2.1)](authentication.md)
  - [Testing Your Server](testing.md)
  - [Inspector (mix mcp.client)](inspector.md)

- Cheatsheets
  - [Noizu MCP Cheatsheet](mcp.md)

## Modules

- [Noizu.MCP](Noizu.MCP.md): Model Context Protocol (MCP) for Elixir — server and client.

- Server
  - [Noizu.MCP.Server](Noizu.MCP.Server.md): Define an MCP server.
  - [Noizu.MCP.Server.EventStore](Noizu.MCP.Server.EventStore.md): Buffer for Streamable HTTP messages that had no live stream to deliver to,
enabling SSE resumability via `Last-Event-ID`.
  - [Noizu.MCP.Server.Features.Prompts](Noizu.MCP.Server.Features.Prompts.md): Prompts feature plumbing: the helpers behind the generated
`handle_list_prompts/2` and `handle_get_prompt/3` defaults.
  - [Noizu.MCP.Server.Features.Resources](Noizu.MCP.Server.Features.Resources.md): Resources feature plumbing: the helpers behind the generated
`handle_list_resources/2`, `handle_list_resource_templates/2`,
`handle_read_resource/2`, and `handle_subscribe/2` defaults.
  - [Noizu.MCP.Server.Features.Tools](Noizu.MCP.Server.Features.Tools.md): Tools feature plumbing: the helpers behind the generated
`handle_list_tools/2` and `handle_call_tool/3` defaults.
  - [Noizu.MCP.Server.Prompt](Noizu.MCP.Server.Prompt.md): Define an MCP prompt as a module.
  - [Noizu.MCP.Server.Resource](Noizu.MCP.Server.Resource.md): Define an MCP resource as a module.
  - [Noizu.MCP.Server.ResourceTemplate](Noizu.MCP.Server.ResourceTemplate.md): Define an MCP resource template (RFC 6570 `{var}` URIs) as a module.
  - [Noizu.MCP.Server.Session](Noizu.MCP.Server.Session.md): One MCP session: a GenServer owning the protocol state (`Noizu.MCP.Peer`)
for a single connected client.
  - [Noizu.MCP.Server.Supervisor](Noizu.MCP.Server.Supervisor.md): Supervision tree for one logical MCP server: a session registry, a dynamic
supervisor for per-client sessions, a task supervisor for handler execution,
and (when `transport: :stdio`) the stdio transport with its single implicit
session.
  - [Noizu.MCP.Server.Tool](Noizu.MCP.Server.Tool.md): Define an MCP tool as a module.
  - [Noizu.MCP.Server.Tool.Spec](Noizu.MCP.Server.Tool.Spec.md): Normalized runtime descriptor for one registered tool.
  - [Noizu.MCP.Server.Toolkit](Noizu.MCP.Server.Toolkit.md): Define several MCP tools in one module by annotating functions with `@mcp`.
  - [Noizu.MCP.Server.Tools.Catalog](Noizu.MCP.Server.Tools.Catalog.md): Built-in catalog discovery tool.

- Client
  - [Noizu.MCP.Client](Noizu.MCP.Client.md): MCP client: connect to an MCP server over a transport and call its tools,
resources, and prompts.
  - [Noizu.MCP.Client.Handler](Noizu.MCP.Client.Handler.md): Callbacks for server-initiated MCP traffic on the client side.

- Handler Context
  - [Noizu.MCP.Ctx](Noizu.MCP.Ctx.md): Per-request handler context.

- Types
  - [Noizu.MCP.Types.Content](Noizu.MCP.Types.Content.md): An MCP content block: text, image, audio, resource link, or embedded resource.
  - [Noizu.MCP.Types.Implementation](Noizu.MCP.Types.Implementation.md): Identity of an MCP client or server (`clientInfo` / `serverInfo`).
  - [Noizu.MCP.Types.Prompt](Noizu.MCP.Types.Prompt.md): An MCP prompt definition as advertised by `prompts/list`.
  - [Noizu.MCP.Types.Prompt.Argument](Noizu.MCP.Types.Prompt.Argument.md): A prompt argument (protocol-level string key/value).
  - [Noizu.MCP.Types.PromptMessage](Noizu.MCP.Types.PromptMessage.md): A message in a `prompts/get` result.
  - [Noizu.MCP.Types.Resource](Noizu.MCP.Types.Resource.md): An MCP resource definition as advertised by `resources/list`.
  - [Noizu.MCP.Types.ResourceContents](Noizu.MCP.Types.ResourceContents.md): The contents of a read resource. Text resources carry `:text`; binary
resources carry `:blob` (raw binary, base64-encoded on the wire).

  - [Noizu.MCP.Types.ResourceTemplate](Noizu.MCP.Types.ResourceTemplate.md): An MCP resource template (`resources/templates/list`), RFC 6570 URI template.
  - [Noizu.MCP.Types.Root](Noizu.MCP.Types.Root.md): A filesystem root exposed by an MCP client (`roots/list`).
  - [Noizu.MCP.Types.Tool](Noizu.MCP.Types.Tool.md): An MCP tool definition as advertised by `tools/list`.
  - [Noizu.MCP.Types.ToolResult](Noizu.MCP.Types.ToolResult.md): The result of a `tools/call` — content blocks, optional structured content,
and the `isError` execution-error flag.

- Transports
  - [Noizu.MCP.Transport](Noizu.MCP.Transport.md): Transport behaviours.
  - [Noizu.MCP.Transport.Client](Noizu.MCP.Transport.Client.md): Client-side transport behaviour. See `Noizu.MCP.Transport`.
  - [Noizu.MCP.Transport.SSE](Noizu.MCP.Transport.SSE.md): Minimal Server-Sent Events codec used by the Streamable HTTP transport.
Encoder for the server side, incremental parser for the client side.

  - [Noizu.MCP.Transport.SSE.Event](Noizu.MCP.Transport.SSE.Event.md): A parsed server-sent event.
  - [Noizu.MCP.Transport.Server](Noizu.MCP.Transport.Server.md): Server-side transport sink behaviour. See `Noizu.MCP.Transport`.
  - [Noizu.MCP.Transport.Stdio](Noizu.MCP.Transport.Stdio.md): stdio server transport: newline-delimited JSON-RPC on stdin/stdout.
  - [Noizu.MCP.Transport.Stdio.Client](Noizu.MCP.Transport.Stdio.Client.md): stdio client transport: spawns an MCP server as a subprocess and speaks
newline-delimited JSON-RPC over its stdin/stdout.
  - [Noizu.MCP.Transport.StreamableHTTP.Client](Noizu.MCP.Transport.StreamableHTTP.Client.md): Streamable HTTP client transport (Req-based).
  - [Noizu.MCP.Transport.StreamableHTTP.Plug](Noizu.MCP.Transport.StreamableHTTP.Plug.md): Streamable HTTP server transport (MCP 2025-11-25): a single MCP endpoint
handling POST/GET/DELETE, mountable in Phoenix or any Plug stack
  - [Noizu.MCP.Transport.Test](Noizu.MCP.Transport.Test.md): In-memory transport for tests.
  - [Noizu.MCP.Transport.Test.Client](Noizu.MCP.Transport.Test.Client.md): In-memory client transport: connects a `Noizu.MCP.Client` to a
`Noizu.MCP.Server` running in the same VM, preserving the full
encode/decode boundary.

- Inspector
  - [Noizu.MCP.Inspector](Noizu.MCP.Inspector.md): Interactive HTML inspector for MCP servers — the engine behind
`mix mcp.client`. Starts a localhost-only Bandit endpoint serving a
single-page UI plus a JSON/SSE bridge to `Noizu.MCP.Client` sessions.
  - [Noizu.MCP.Inspector.Handler](Noizu.MCP.Inspector.Handler.md): `Noizu.MCP.Client.Handler` for the inspector: server-initiated sampling and
elicitation requests are parked in the inspector session and surfaced in the
browser (Pending tab), blocking until a human answers. Roots come from the
session's editable roots list.

  - [Noizu.MCP.Inspector.Plug](Noizu.MCP.Inspector.Plug.md): HTTP surface of the inspector: serves the single-page UI from
`priv/inspector/` and a JSON + SSE bridge to inspector sessions.
  - [Noizu.MCP.Inspector.Session](Noizu.MCP.Inspector.Session.md): One inspector session: owns a `Noizu.MCP.Client` connected to the target
server (through `Noizu.MCP.Inspector.TapTransport`), buffers an event stream
for the browser (raw frames, notifications, progress, async call results,
pending sampling/elicitation requests), and parks server-initiated requests
until a human answers them in the UI.
  - [Noizu.MCP.Inspector.TapTransport](Noizu.MCP.Inspector.TapTransport.md): Transport decorator used by the inspector: wraps a real client transport and
mirrors every wire frame to the inspector session as
`{:inspector_frame, :tx | :rx, binary}` so the UI can show raw JSON-RPC
history without touching `Noizu.MCP.Client`.

- Authorization
  - [Noizu.MCP.Auth.ClientStrategy](Noizu.MCP.Auth.ClientStrategy.md): Client-side authorization strategy for the Streamable HTTP transport.
  - [Noizu.MCP.Auth.OAuth](Noizu.MCP.Auth.OAuth.md): OAuth 2.1 client strategy for MCP Streamable HTTP: discovery (RFC 9728
protected-resource metadata → RFC 8414 / OIDC authorization-server
metadata), PKCE S256 authorization-code flow with the RFC 8707 `resource`
parameter, token refresh, and `insufficient_scope` step-up.
  - [Noizu.MCP.Auth.ProtectedResourceMetadataPlug](Noizu.MCP.Auth.ProtectedResourceMetadataPlug.md): Serves the RFC 9728 protected-resource metadata document MCP clients use
to discover your authorization server
  - [Noizu.MCP.Auth.Static](Noizu.MCP.Auth.Static.md): Fixed bearer-token auth strategy: `{Noizu.MCP.Auth.Static, token: "..."}`.
A 401 is terminal — there is nothing to refresh.

  - [Noizu.MCP.Auth.TokenVerifier](Noizu.MCP.Auth.TokenVerifier.md): Server-side bearer-token verification for the Streamable HTTP transport.
  - [Noizu.MCP.Auth.WWWAuthenticate](Noizu.MCP.Auth.WWWAuthenticate.md): Parse and format `WWW-Authenticate` challenges (RFC 9110 §11.6.1), as used
by the MCP authorization spec to point clients at protected-resource
metadata and signal `insufficient_scope` step-up.

- Testing
  - [Noizu.MCP.Test](Noizu.MCP.Test.md): Test helpers for exercising `Noizu.MCP.Server` modules over an in-memory
transport — no sockets, `async: true` safe.

- Protocol
  - [Noizu.MCP.Error](Noizu.MCP.Error.md): Protocol-level MCP / JSON-RPC error.
  - [Noizu.MCP.JsonRpc](Noizu.MCP.JsonRpc.md): JSON-RPC 2.0 framing for MCP.
  - [Noizu.MCP.JsonRpc.ErrorResponse](Noizu.MCP.JsonRpc.ErrorResponse.md): A JSON-RPC error response.
  - [Noizu.MCP.JsonRpc.Notification](Noizu.MCP.JsonRpc.Notification.md): A JSON-RPC notification (no response expected).
  - [Noizu.MCP.JsonRpc.Request](Noizu.MCP.JsonRpc.Request.md): An inbound or outbound JSON-RPC request (expects a response).
  - [Noizu.MCP.JsonRpc.Response](Noizu.MCP.JsonRpc.Response.md): A successful JSON-RPC response.
  - [Noizu.MCP.Peer](Noizu.MCP.Peer.md): Sans-IO MCP session core, shared by server sessions and client connections.
  - [Noizu.MCP.Protocol.Methods](Noizu.MCP.Protocol.Methods.md): Compile-time registry of MCP methods: kind (request/notification) and
direction (client→server, server→client, or both).

  - [Noizu.MCP.Protocol.Version](Noizu.MCP.Protocol.Version.md): Protocol version negotiation.
  - [Noizu.MCP.Schema](Noizu.MCP.Schema.md): JSON Schema validation (2020-12, MCP's default dialect) backed by `JSV`.
  - [Noizu.MCP.UriTemplate](Noizu.MCP.UriTemplate.md): Minimal RFC 6570 (level 1) URI template support: simple `{var}` expressions.

## Mix Tasks

- [mix mcp.client](Mix.Tasks.Mcp.Client.md): Start `Noizu.MCP.Inspector` — a rich interactive HTML client for exploring
and exercising MCP servers (tools, resources, prompts, sampling,
elicitation, raw JSON-RPC history) — and open it in your browser.

