# Tool

URL: /business/nouns/tool · Id: `noun:tool`

> A Tool is a Verb as a Worker reaches it through an Interface, under one name on every Interface.

A Tool is a [Verb](/business/nouns/verb) as a [Worker](/business/nouns/worker) reaches it through an [Interface](/business/nouns/interface), under one name on every Interface.

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | Yes | The `Noun.verb` name, such as `Contact.create`. |

## Object
```json
{
  "$id": "https://api.sb/quietcopy.com/tools/tool_1",
  "$type": "Tool",
  "name": "QuietCopy"
}
```

## Relationships
- <a id="rel-exposes"></a>A Tool **exposes** one [Verb](/business/nouns/verb): a Tool is one [Verb](/business/nouns/verb) under one name on every [Interface](/business/nouns/interface), such as `Contact.create`. `exposes`, inverse [`exposedAs`](/business/nouns/verb#rel-exposed-as).
- <a id="rel-used-by"></a>A Tool **is used by** many [Workers](/business/nouns/worker): the Tools a [Worker](/business/nouns/worker) may call, narrowed to its [Role](/business/nouns/role)’s [Permissions](/business/nouns/permission). `usedBy`, inverse [`uses`](/business/nouns/worker#rel-uses).

## Verbs
| Verb | Description | Subject | Event | Class |
| --- | --- | --- | --- | --- |
| <a id="create"></a>[Tool.create](/business/nouns/tool/create) | Creates a Tool. Inherited from [Noun](/business/nouns/noun). | None. | `Tool.created` | Two-way: `try`, `send`, `do` |
| <a id="get"></a>[Tool.get](/business/nouns/tool/get) | Returns one Tool by id. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="list"></a>[Tool.list](/business/nouns/tool/list) | Returns Tools, newest first, one page at a time. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="update"></a>[Tool.update](/business/nouns/tool/update) | Changes the given properties of a Tool. Inherited from [Noun](/business/nouns/noun). | None. | `Tool.updated` | Two-way: `try`, `send`, `do` |
| <a id="delete"></a>[Tool.delete](/business/nouns/tool/delete) | Deletes a Tool; its history is kept. Inherited from [Noun](/business/nouns/noun). | None. | `Tool.deleted` | One-way: `send`, `do` |

## Permissions
Which Access level may call each Verb. One-way Verbs wait their delay window.

| Operation | `owner` | `admin` | `member` | `viewer` |
| --- | --- | --- | --- | --- |
| `Tool.create` | Yes | Yes | Yes | No |
| `Tool.get` | Yes | Yes | Yes | Yes |
| `Tool.list` | Yes | Yes | Yes | Yes |
| `Tool.update` | Yes | Yes | Yes | No |
| `Tool.delete` | Yes | Yes | Yes | No |

## Call it

**Ask**

```text
Add a tool to TutorLoop.
```

**API**

```bash
curl -X POST https://api.sb/tutorloop.com/tools \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"TutorLoop"}'
```

```json
{
  "api": "https://api.sb/tutorloop.com",
  "tool": {
    "$id": "https://api.sb/tutorloop.com/tools/tool_1",
    "$type": "Tool",
    "name": "TutorLoop"
  },
  "action": {
    "$id": "https://api.sb/tutorloop.com/actions/action_1",
    "operation": "Tool.create",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/tutorloop.com/actions/action_1"
  }
}
```

**SDK**

```ts
import { $ } from 'startup-builder'

const tool = await $.Tool.create({ name: 'TutorLoop' })
```

**CLI**

```bash
npx startup-builder do Tool.create --json '{"name":"TutorLoop"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Tool.create({ name: 'TutorLoop' })"
  }
}
```

## Example
`convert_currency` is one Tool: an MCP tool for [Agents](/business/nouns/agent), a CLI command for operators, and an SDK method for developers, all exposing `Rate.convert`.