# `Cairnloop.Tool.Spec`
[🔗](https://github.com/szTheory/cairnloop/blob/main/lib/cairnloop/tool/spec.ex#L1)

Pure data struct carrying compile-time governed-tool metadata.

No behaviour, no database — just a plain `defstruct` with enforced required fields.
Forward-compatible with MCP tool definition projection (Phase 17): the `Spec` fields
map directly to an MCP `tool` definition with zero model change.

## MCP-01 projection seam (Phase 17)

The `%Cairnloop.Tool.Spec{}` fields project to MCP as:

- `title`       → MCP `title`
- `description` → MCP `description`
- tool module name → MCP `name`
- `changeset/2` Ecto embedded schema → MCP `inputSchema` (JSON Schema projection)

Phase 17 performs this projection as a pure `Spec → map` transformation
with no behaviour or database involvement.

---

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