# Tool
URL: https://lsd.tools/docs/api-tool
Updated: 2026-07-18

`Tool` is the single registration object in a package: you create one at module scope, then hang
every node and contribution off its decorators. It only **declares** — it never runs — so importing
a package's module makes its nodes appear in the graph while an `Engine` (or the desktop) executes the
wired steps. A node's identity is `f"{tool_name}.{fn_name}"`, which is what keeps two packages'
same-named functions from colliding.

## Usage

```python
from lsdtools import Tool, Table

tool = Tool("hello", label="Hello")

@tool.load
def numbers(count: int = 5) -> Table:
    return Table({"n": list(range(count))})
# → a node "hello.numbers" in the palette, with a count field
```

## Where to start

**Learn** — [The Tool object](/docs/tools-tool-object) · [Parameters vs ports](/docs/tools-params-ports) · [Load steps](/docs/tools-load) · [Shape steps](/docs/tools-shape) · [Deliver steps](/docs/tools-deliver) · [Commands & actions](/docs/tools-commands-actions) · [Contributing UI](/docs/tools-panels-overlays-views)

**Examples** — [Your first tool](/docs/ex-hello-tool) · [A CLI command](/docs/ex-cli-command) · [A panel](/docs/ex-panel) · [A complete package](/docs/ex-full-package)

**API** — [Context](/docs/api-context) · [Source](/docs/api-source) · [Table](/docs/api-table) · [UI overview](/docs/ui-overview) · [Advanced](/docs/api-advanced)
